diff --git a/Cargo.lock b/Cargo.lock index 79a07593..4e9f63fc 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4688,7 +4688,7 @@ dependencies = [ [[package]] name = "sommelier_steward" -version = "3.4.3" +version = "3.5.0" dependencies = [ "lazy_static", "steward", @@ -4779,7 +4779,7 @@ checksum = "213701ba3370744dcd1a12960caa4843b3d68b4d1c0a5d575e0d65b2ee9d16c0" [[package]] name = "steward" -version = "3.4.3" +version = "3.5.0" dependencies = [ "abscissa_core", "abscissa_tokio", @@ -4832,7 +4832,7 @@ dependencies = [ [[package]] name = "steward_abi" -version = "3.4.3" +version = "3.5.0" dependencies = [ "ethers", "serde", @@ -4852,7 +4852,7 @@ dependencies = [ [[package]] name = "steward_proto" -version = "3.4.3" +version = "3.5.0" dependencies = [ "prost 0.7.0", "prost-types 0.7.0", diff --git a/Cargo.toml b/Cargo.toml index 667dfc4a..f096153d 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "sommelier_steward" -version = "3.4.3" +version = "3.5.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/proto/adaptors/aave/aave_v3_debt_token.proto b/proto/adaptors/aave/aave_v3_debt_token.proto index b28529c6..42c66717 100644 --- a/proto/adaptors/aave/aave_v3_debt_token.proto +++ b/proto/adaptors/aave/aave_v3_debt_token.proto @@ -27,6 +27,9 @@ import "adaptors/vesting_simple.proto"; import "adaptors/base.proto"; import "adaptors/sommelier/cellar_adaptor.proto"; import "adaptors/aave/aave_v2_enable_asset_as_collateral_adaptor.proto"; +import "adaptors/sommelier/legacy_cellar_adaptor.proto"; +import "adaptors/frax/debt_f_token.proto"; +import "adaptors/frax/collateral_f_token.proto"; // Represents call data for the Aave Debt Token adaptor, used for borrowing and repaying debt on Aave. message AaveV3DebtTokenAdaptorV1 { @@ -152,6 +155,12 @@ message AaveV3DebtTokenAdaptorV1 { MorphoAaveV3DebtTokenAdaptorV1Calls morpho_aave_v3_debt_token_v1_calls = 23; // Represents function calls to the BalancerPoolAdaptor V1 BalancerPoolAdaptorV1Calls balancer_pool_v1_calls = 24; + // Represents function calls to the LegacyCellarAdaptor V1 + LegacyCellarAdaptorV1Calls legacy_cellar_v1_calls = 25; + // Represents function calls to the DebtFTokenAdaptor V1 + DebtFTokenAdaptorV1Calls debt_f_token_v1_calls = 26; + // Represents function calls to the CollateralFTokenAdaptor V1 + CollateralFTokenAdaptorV1Calls collateral_f_token_v1_calls = 27; } } } diff --git a/proto/adaptors/frax/collateral_f_token.proto b/proto/adaptors/frax/collateral_f_token.proto new file mode 100644 index 00000000..e3df873e --- /dev/null +++ b/proto/adaptors/frax/collateral_f_token.proto @@ -0,0 +1,55 @@ +/* +* Protos for function calls to the Frax Collateral F Token adaptor. +*/ + +syntax = "proto3"; +package steward.v3; + +option go_package = "/steward_proto"; + +import "adaptors/base.proto"; + +// Represents call data for the Frax Collateral F Token adaptor. +message CollateralFTokenAdaptorV1 { + oneof function { + /***** BASE ADAPTOR FUNCTIONS *****/ + + // Represents function `revokeApproval(ERC20 asset, address spender)` + RevokeApproval revoke_approval = 1; + + /***** ADAPTOR-SPECIFIC FUNCTIONS *****/ + + // Represents function `addCollateral(IFToken _fraxlendPair, uint256 _collateralToDeposit)` + AddCollateral add_collateral = 2; + // Represents function `removeCollateral(uint256 _collateralAmount, IFToken _fraxlendPair)` + RemoveCollateral remove_collateral = 3; + } + + /* + * Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing. + * + * Represents function `addCollateral(IFToken _fraxlendPair, uint256 _collateralToDeposit)` + */ + message AddCollateral { + // The FraxLend pair to add collateral to. + string fraxlend_pair = 1; + // The amount of collateral to add to the cellar position. + string collateral_to_deposit = 2; + } + + /* + * Allows strategists to remove collateral from the respective cellar position on FraxLend. + * + * Represents function `removeCollateral(uint256 _collateralAmount, IFToken _fraxlendPair)` + */ + message RemoveCollateral { + // The amount of collateral to remove from the cellar position. + string collateral_amount = 1; + // The FraxLend pair to remove collateral from. + string fraxlend_pair = 2; + } +} + +message CollateralFTokenAdaptorV1Calls { + repeated CollateralFTokenAdaptorV1 calls = 1; +} diff --git a/proto/adaptors/frax/debt_f_token.proto b/proto/adaptors/frax/debt_f_token.proto new file mode 100644 index 00000000..95e54385 --- /dev/null +++ b/proto/adaptors/frax/debt_f_token.proto @@ -0,0 +1,68 @@ +/* +* Protos for function calls to the Frax Debt F Token adaptor. +*/ + +syntax = "proto3"; +package steward.v3; + +option go_package = "/steward_proto"; + +import "adaptors/base.proto"; + +// Represents call data for the Frax adaptor. +message DebtFTokenAdaptorV1 { + oneof function { + /***** BASE ADAPTOR FUNCTIONS *****/ + + // Represents function `revokeApproval(ERC20 asset, address spender)` + RevokeApproval revoke_approval = 1; + + /***** ADAPTOR-SPECIFIC FUNCTIONS *****/ + + // Represents function `borrowFromFraxlend(IFToken fraxlendPair, uint256 amountToBorrow)` + BorrowFromFraxlend borrow_from_fraxlend = 2; + // Represents function `repayFraxlendDebt(IFToken _fraxlendPair, uint256 _debtTokenRepayAmount)` + RepayFraxlendDebt repay_fraxlend_debt = 3; + // Represents function `callAddInterest(IFToken _fraxlendPair)` + CallAddInterest call_add_interest = 4; + } + + /* + * Allows a strategist to borrow assets from Fraxlend + * + * Represents `function borrowFromFraxlend(IFToken fraxlendPair, uint256 amountToBorrow)` + */ + message BorrowFromFraxlend { + // The address of the Frax Pair to borrow from. + string fraxlend_pair = 1; + // The amount of the asset to borrow. + string amount_to_borrow = 2; + } + + /* + * Allows strategists to repay loan debt on Fraxlend Pair. + * Make sure to call addInterest() beforehand to ensure we are repaying what is required. + * + * Represents `function repayFraxlendDebt(IFToken _fraxlendPair, uint256 _debtTokenRepayAmount)` + */ + message RepayFraxlendDebt { + // The address of the Frax Pair to repay debt on. + string fraxlend_pair = 1; + // The amount of the debt token to repay. + string debt_token_repay_amount = 2; + } + + /* + * Allows a strategist to call `addInterest` on a Frax Pair they are using + * + * Represents `function callAddInterest(IFToken _fraxlendPair)` + */ + message CallAddInterest { + // The address of the pair to call addInterest on. + string fraxlend_pair = 1; + } +} + +message DebtFTokenAdaptorV1Calls { + repeated DebtFTokenAdaptorV1 calls = 1; +} diff --git a/proto/adaptors/sommelier/legacy_cellar_adaptor.proto b/proto/adaptors/sommelier/legacy_cellar_adaptor.proto new file mode 100644 index 00000000..e142e921 --- /dev/null +++ b/proto/adaptors/sommelier/legacy_cellar_adaptor.proto @@ -0,0 +1,50 @@ +// Protos for depositing/withdrawing from Legacy Cellars + +syntax = "proto3"; +package steward.v3; + +option go_package = "/steward_proto"; + +import "adaptors/base.proto"; + +message LegacyCellarAdaptorV1 { + oneof function { + /***** BASE ADAPTOR FUNCTIONS *****/ + + // Represents function `revokeApproval(ERC20 asset, address spender)` + RevokeApproval revoke_approval = 1; + + /***** ADAPTOR-SPECIFIC FUNCTIONS *****/ + + // Represents function `depositToCellar(Cellar cellar, uint256 assets, address oracle)` + DepositToCellar depositToCellar = 2; + // Represents function `withdrawFromCellar(Cellar cellar, uint256 assets, address oracle)` + WithdrawFromCellar withdrawFromCellar = 3; + } + + /* + * Allows strategists to deposit into Cellar positions. + * + * Represents function `depositToCellar(Cellar cellar, uint256 assets, address oracle)` + */ + message DepositToCellar { + string cellar = 1; + string assets = 2; + string oracle = 3; + } + + /* + * Allows strategists to withdraw from Cellar positions. + * + * Represents function `withdrawFromCellar(Cellar cellar, uint256 assets, address oracle)` + */ + message WithdrawFromCellar { + string cellar = 1; + string assets = 2; + string oracle = 3; + } +} + +message LegacyCellarAdaptorV1Calls { + repeated LegacyCellarAdaptorV1 calls = 1; +} diff --git a/proto/cellar_v2.proto b/proto/cellar_v2.proto index 123c9217..708bb259 100644 --- a/proto/cellar_v2.proto +++ b/proto/cellar_v2.proto @@ -29,6 +29,9 @@ import "adaptors/oneinch/oneinch.proto"; import "adaptors/vesting_simple.proto"; import "adaptors/sommelier/cellar_adaptor.proto"; import "adaptors/aave/aave_v2_enable_asset_as_collateral_adaptor.proto"; +import "adaptors/sommelier/legacy_cellar_adaptor.proto"; +import "adaptors/frax/debt_f_token.proto"; +import "adaptors/frax/collateral_f_token.proto"; /* * Represents a function call to a cellar that implements Cellar.sol @@ -694,5 +697,11 @@ message AdaptorCall { MorphoAaveV3DebtTokenAdaptorV1Calls morpho_aave_v3_debt_token_v1_calls = 23; // Represents function calls to the BalancerPoolAdaptor V1 BalancerPoolAdaptorV1Calls balancer_pool_v1_calls = 24; + // Represents function calls to the LegacyCellarAdaptor V1 + LegacyCellarAdaptorV1Calls legacy_cellar_v1_calls = 25; + // Represents function calls to the DebtFTokenAdaptor V1 + DebtFTokenAdaptorV1Calls debt_f_token_v1_calls = 26; + // Represents function calls to the CollateralFTokenAdaptor V1 + CollateralFTokenAdaptorV1Calls collateral_f_token_v1_calls = 27; } } diff --git a/steward/Cargo.toml b/steward/Cargo.toml index a89ca02c..5a05c280 100644 --- a/steward/Cargo.toml +++ b/steward/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "steward" authors = [] -version = "3.4.3" +version = "3.5.0" edition = "2018" [dependencies] diff --git a/steward/src/cellars.rs b/steward/src/cellars.rs index 63b63591..3b2b9afc 100644 --- a/steward/src/cellars.rs +++ b/steward/src/cellars.rs @@ -29,6 +29,10 @@ pub const ORACLE2: (U256, &str) = ( U256([5, 0, 0, 0]), "c47278b65443ce71cf47e8455bb343f2db11b70e", ); +pub const ORACLE3: (U256, &str) = ( + U256([5, 0, 0, 0]), + "26cde3f5db92ea91c84c838e664fe42dec1b6747", +); pub const ALLOWED_PRICE_ORACLES: [(U256, &str); 2] = [ORACLE1, ORACLE2]; pub const ALLOWED_CACHE_PRICE_ROUTER: [&str; 1] = [CELLAR_RYETH]; @@ -36,9 +40,9 @@ pub const ALLOWED_CACHE_PRICE_ROUTER: [&str; 1] = [CELLAR_RYETH]; pub const ALLOWED_V2_0_SETUP_ADAPTORS: [(&str, &str); 1] = [(CELLAR_RYUSD, ADAPTOR_CELLAR_V2)]; pub const ALLOWED_V2_2_CATALOGUE_ADAPTORS: [(&str, &str); 3] = [ - (CELLAR_RYETH, ADAPTOR_AAVE_V3_A_TOKEN_V1), - (CELLAR_RYBTC, ADAPTOR_AAVE_V3_A_TOKEN_V1), - (CELLAR_RYBTC, ADAPTOR_CELLAR_V1), + (CELLAR_RYBTC, ADAPTOR_LEGACY_CELLAR_V1), + (CELLAR_RYBTC, ADAPTOR_COLLATERAL_F_TOKEN_V1), + (CELLAR_RYBTC, ADAPTOR_DEBT_F_TOKEN_V1), ]; pub const ALLOWED_V2_5_CATALOGUE_ADAPTORS: [(&str, &str); 0] = []; @@ -66,14 +70,11 @@ pub const ALLOWED_V2_0_POSITIONS: [(&str, u32); 20] = [ (CELLAR_RYUSD, 28), (CELLAR_RYUSD, 29), ]; -pub const ALLOWED_V2_2_CATALOGUE_POSITIONS: [(&str, u32); 7] = [ - (CELLAR_RYETH, 188), - (CELLAR_RYETH, 189), - (CELLAR_RYETH, 190), - (CELLAR_RYETH, 191), - (CELLAR_RYBTC, 192), - (CELLAR_RYBTC, 193), - (CELLAR_RYBTC, 194), +pub const ALLOWED_V2_2_CATALOGUE_POSITIONS: [(&str, u32); 4] = [ + (CELLAR_RYBTC, 195), + (CELLAR_RYBTC, 196), + (CELLAR_RYBTC, 197), + (CELLAR_RYBTC, 198), ]; pub const ALLOWED_V2_5_CATALOGUE_POSITIONS: [(&str, u32); 0] = []; @@ -130,8 +131,10 @@ pub const ADAPTOR_COMPOUND_C_TOKEN_V1: &str = "26dba82495f6189dde7648ae88bead46c // adaptors pub const ADAPTOR_AAVE_V3_A_TOKEN_V1: &str = "76cef5606c8b6ba38fe2e3c639e1659afa530b47"; -pub const ADAPTOR_CELLAR_V1: &str = "1e22adf9e63ef8f2a3626841ddddd19683e31068"; pub const ADAPTOR_CELLAR_V2: &str = "3b5ca5de4d808cd793d3a7b3a731d3e67e707b27"; +pub const ADAPTOR_COLLATERAL_F_TOKEN_V1: &str = "0055cf6a99eba1405d100c7dfaa88a35521a0037"; +pub const ADAPTOR_DEBT_F_TOKEN_V1: &str = "50d8f70a5da95021dab86579db4751a863c1b87c"; +pub const ADAPTOR_LEGACY_CELLAR_V1: &str = "1e22adf9e63ef8f2a3626841ddddd19683e31068"; pub const ADAPTOR_MORPHO_AAVE_V2_A_TOKEN_V1: &str = "1a4cb53edb8c65c3df6aa9d88c1ab4cf35312b73"; pub const ADAPTOR_MORPHO_AAVE_V2_DEBT_TOKEN_V1: &str = "407d5489f201013ee6a6ca20fccb05047c548138"; pub const ADAPTOR_MORPHO_AAVE_V3_A_TOKEN_COLLATERAL_V1: &str = diff --git a/steward/src/cellars/adaptors.rs b/steward/src/cellars/adaptors.rs index 31760cf6..4f63dcb9 100644 --- a/steward/src/cellars/adaptors.rs +++ b/steward/src/cellars/adaptors.rs @@ -3,8 +3,8 @@ pub mod aave_v2_collateral; pub mod aave_v3; pub mod balancer_pool; pub mod compound; -pub mod f_token; pub mod fees_and_reserves; +pub mod frax; pub mod morpho; pub mod oneinch; pub mod sommelier; diff --git a/steward/src/cellars/adaptors/aave_v3.rs b/steward/src/cellars/adaptors/aave_v3.rs index c3bafde3..5fb5e71d 100644 --- a/steward/src/cellars/adaptors/aave_v3.rs +++ b/steward/src/cellars/adaptors/aave_v3.rs @@ -233,7 +233,7 @@ fn get_encoded_adaptor_calls( )?, ), FTokenV1Calls(params) => { - calls.extend(adaptors::f_token::f_token_adaptor_v1_calls(params)?) + calls.extend(adaptors::frax::f_token_adaptor_v1_calls(params)?) } MorphoAaveV2ATokenV1Calls(params) => calls.extend( adaptors::morpho::morpho_aave_v2_a_token_adaptor_v1_calls(params)?, @@ -253,6 +253,15 @@ fn get_encoded_adaptor_calls( BalancerPoolV1Calls(params) => calls.extend( adaptors::balancer_pool::balancer_pool_adaptor_v1_calls(params)?, ), + LegacyCellarV1Calls(params) => { + calls.extend(adaptors::sommelier::legacy_cellar_adaptor_v1_calls(params)?) + } + DebtFTokenV1Calls(params) => { + calls.extend(adaptors::frax::debt_f_token_adaptor_v1_calls(params)?) + } + CollateralFTokenV1Calls(params) => { + calls.extend(adaptors::frax::collateral_f_token_adaptor_v1_calls(params)?) + } }; result.push(AbiAdaptorCall { diff --git a/steward/src/cellars/adaptors/f_token.rs b/steward/src/cellars/adaptors/f_token.rs deleted file mode 100644 index 971051d9..00000000 --- a/steward/src/cellars/adaptors/f_token.rs +++ /dev/null @@ -1,60 +0,0 @@ -use ethers::{abi::AbiEncode, types::Bytes}; -use steward_abi::f_token_adaptor::{ - CallAddInterestCall, FTokenAdaptorCalls, LendFraxCall, RedeemFraxShareCall, RevokeApprovalCall, - WithdrawFraxCall, -}; - -use crate::{ - error::Error, - utils::{sp_call_error, sp_call_parse_address, string_to_u256}, -}; - -pub(crate) fn f_token_adaptor_v1_calls( - params: steward_proto::steward::FTokenAdaptorV1Calls, -) -> Result, Error> { - let mut calls = Vec::new(); - for c in params.calls { - let function = c - .function - .ok_or_else(|| sp_call_error("function cannot be empty".to_string()))?; - - match function { - steward_proto::steward::f_token_adaptor_v1::Function::RevokeApproval(p) => { - let call = RevokeApprovalCall { - asset: sp_call_parse_address(p.asset)?, - spender: sp_call_parse_address(p.spender)?, - }; - calls.push(FTokenAdaptorCalls::RevokeApproval(call).encode().into()); - } - steward_proto::steward::f_token_adaptor_v1::Function::LendFrax(p) => { - let call = LendFraxCall { - f_token: sp_call_parse_address(p.f_token)?, - amount_to_deposit: string_to_u256(p.amount_to_deposit)?, - }; - calls.push(FTokenAdaptorCalls::LendFrax(call).encode().into()); - } - steward_proto::steward::f_token_adaptor_v1::Function::RedeemFraxShare(p) => { - let call = RedeemFraxShareCall { - f_token: sp_call_parse_address(p.f_token)?, - amount_to_redeem: string_to_u256(p.amount_to_redeem)?, - }; - calls.push(FTokenAdaptorCalls::RedeemFraxShare(call).encode().into()); - } - steward_proto::steward::f_token_adaptor_v1::Function::WithdrawFrax(p) => { - let call = WithdrawFraxCall { - f_token: sp_call_parse_address(p.f_token)?, - amount_to_withdraw: string_to_u256(p.amount_to_withdraw)?, - }; - calls.push(FTokenAdaptorCalls::WithdrawFrax(call).encode().into()); - } - steward_proto::steward::f_token_adaptor_v1::Function::CallAddInterest(p) => { - let call = CallAddInterestCall { - f_token: sp_call_parse_address(p.f_token)?, - }; - calls.push(FTokenAdaptorCalls::CallAddInterest(call).encode().into()); - } - } - } - - Ok(calls) -} diff --git a/steward/src/cellars/adaptors/frax.rs b/steward/src/cellars/adaptors/frax.rs new file mode 100644 index 00000000..946d5f50 --- /dev/null +++ b/steward/src/cellars/adaptors/frax.rs @@ -0,0 +1,188 @@ +use ethers::{abi::AbiEncode, types::Bytes}; +use steward_abi::{ + collateral_f_token_adaptor_v1::{ + AddCollateralCall, CollateralFTokenAdaptorV1Calls, RemoveCollateralCall, + RevokeApprovalCall as CollateralFTokenRevokeApprovalCall, + }, + debt_f_token_adaptor_v1::{ + BorrowFromFraxlendCall, CallAddInterestCall as DebtFTokenCallAddInterestCall, + DebtFTokenAdaptorV1Calls, RepayFraxlendDebtCall, + RevokeApprovalCall as DebtFTokenRevokeApprovalCall, + }, + f_token_adaptor::{ + CallAddInterestCall, FTokenAdaptorCalls, LendFraxCall, RedeemFraxShareCall, + RevokeApprovalCall, WithdrawFraxCall, + }, +}; + +use crate::{ + error::Error, + utils::{sp_call_error, sp_call_parse_address, string_to_u256}, +}; + +pub(crate) fn f_token_adaptor_v1_calls( + params: steward_proto::steward::FTokenAdaptorV1Calls, +) -> Result, Error> { + let mut calls = Vec::new(); + for c in params.calls { + let function = c + .function + .ok_or_else(|| sp_call_error("function cannot be empty".to_string()))?; + + match function { + steward_proto::steward::f_token_adaptor_v1::Function::RevokeApproval(p) => { + let call = RevokeApprovalCall { + asset: sp_call_parse_address(p.asset)?, + spender: sp_call_parse_address(p.spender)?, + }; + calls.push(FTokenAdaptorCalls::RevokeApproval(call).encode().into()); + } + steward_proto::steward::f_token_adaptor_v1::Function::LendFrax(p) => { + let call = LendFraxCall { + f_token: sp_call_parse_address(p.f_token)?, + amount_to_deposit: string_to_u256(p.amount_to_deposit)?, + }; + calls.push(FTokenAdaptorCalls::LendFrax(call).encode().into()); + } + steward_proto::steward::f_token_adaptor_v1::Function::RedeemFraxShare(p) => { + let call = RedeemFraxShareCall { + f_token: sp_call_parse_address(p.f_token)?, + amount_to_redeem: string_to_u256(p.amount_to_redeem)?, + }; + calls.push(FTokenAdaptorCalls::RedeemFraxShare(call).encode().into()); + } + steward_proto::steward::f_token_adaptor_v1::Function::WithdrawFrax(p) => { + let call = WithdrawFraxCall { + f_token: sp_call_parse_address(p.f_token)?, + amount_to_withdraw: string_to_u256(p.amount_to_withdraw)?, + }; + calls.push(FTokenAdaptorCalls::WithdrawFrax(call).encode().into()); + } + steward_proto::steward::f_token_adaptor_v1::Function::CallAddInterest(p) => { + let call = CallAddInterestCall { + f_token: sp_call_parse_address(p.f_token)?, + }; + calls.push(FTokenAdaptorCalls::CallAddInterest(call).encode().into()); + } + } + } + + Ok(calls) +} + +pub(crate) fn debt_f_token_adaptor_v1_calls( + params: steward_proto::steward::DebtFTokenAdaptorV1Calls, +) -> Result, Error> { + let mut calls = Vec::new(); + for c in params.calls { + let function = c + .function + .ok_or_else(|| sp_call_error("function cannot be empty".to_string()))?; + + match function { + steward_proto::steward::debt_f_token_adaptor_v1::Function::RevokeApproval(p) => { + let call = DebtFTokenRevokeApprovalCall { + asset: sp_call_parse_address(p.asset)?, + spender: sp_call_parse_address(p.spender)?, + }; + + calls.push( + DebtFTokenAdaptorV1Calls::RevokeApproval(call) + .encode() + .into(), + ); + } + steward_proto::steward::debt_f_token_adaptor_v1::Function::BorrowFromFraxlend(p) => { + let call = BorrowFromFraxlendCall { + amount_to_borrow: string_to_u256(p.amount_to_borrow)?, + fraxlend_pair: sp_call_parse_address(p.fraxlend_pair)?, + }; + + calls.push( + DebtFTokenAdaptorV1Calls::BorrowFromFraxlend(call) + .encode() + .into(), + ); + } + steward_proto::steward::debt_f_token_adaptor_v1::Function::RepayFraxlendDebt(p) => { + let call = RepayFraxlendDebtCall { + debt_token_repay_amount: string_to_u256(p.debt_token_repay_amount)?, + fraxlend_pair: sp_call_parse_address(p.fraxlend_pair)?, + }; + + calls.push( + DebtFTokenAdaptorV1Calls::RepayFraxlendDebt(call) + .encode() + .into(), + ); + } + steward_proto::steward::debt_f_token_adaptor_v1::Function::CallAddInterest(p) => { + let call = DebtFTokenCallAddInterestCall { + fraxlend_pair: sp_call_parse_address(p.fraxlend_pair)?, + }; + + calls.push( + DebtFTokenAdaptorV1Calls::CallAddInterest(call) + .encode() + .into(), + ); + } + } + } + + Ok(calls) +} + +pub(crate) fn collateral_f_token_adaptor_v1_calls( + params: steward_proto::steward::CollateralFTokenAdaptorV1Calls, +) -> Result, Error> { + let mut calls = Vec::new(); + for c in params.calls { + let function = c + .function + .ok_or_else(|| sp_call_error("function cannot be empty".to_string()))?; + + match function { + steward_proto::steward::collateral_f_token_adaptor_v1::Function::RevokeApproval(p) => { + let call = CollateralFTokenRevokeApprovalCall { + asset: sp_call_parse_address(p.asset)?, + spender: sp_call_parse_address(p.spender)?, + }; + + calls.push( + CollateralFTokenAdaptorV1Calls::RevokeApproval(call) + .encode() + .into(), + ); + } + steward_proto::steward::collateral_f_token_adaptor_v1::Function::AddCollateral(p) => { + let call = AddCollateralCall { + collateral_to_deposit: string_to_u256(p.collateral_to_deposit)?, + fraxlend_pair: sp_call_parse_address(p.fraxlend_pair)?, + }; + + calls.push( + CollateralFTokenAdaptorV1Calls::AddCollateral(call) + .encode() + .into(), + ); + } + steward_proto::steward::collateral_f_token_adaptor_v1::Function::RemoveCollateral( + p, + ) => { + let call = RemoveCollateralCall { + collateral_amount: string_to_u256(p.collateral_amount)?, + fraxlend_pair: sp_call_parse_address(p.fraxlend_pair)?, + }; + + calls.push( + CollateralFTokenAdaptorV1Calls::RemoveCollateral(call) + .encode() + .into(), + ); + } + } + } + + Ok(calls) +} diff --git a/steward/src/cellars/adaptors/sommelier.rs b/steward/src/cellars/adaptors/sommelier.rs index c78c8735..cbc8d78f 100644 --- a/steward/src/cellars/adaptors/sommelier.rs +++ b/steward/src/cellars/adaptors/sommelier.rs @@ -1,6 +1,7 @@ use ethers::{abi::AbiEncode, types::Bytes}; -use steward_abi::cellar_adaptor_v1::CellarAdaptorV1Calls as AbiCellarAdaptorV1Calls; -use steward_proto::steward::cellar_adaptor_v1; +use steward_abi::cellar_adaptor_v1::CellarAdaptorV1Calls; +use steward_abi::legacy_cellar_adaptor_v1::LegacyCellarAdaptorV1Calls; +use steward_proto::steward::{cellar_adaptor_v1, legacy_cellar_adaptor_v1}; use crate::{ error::Error, @@ -22,11 +23,7 @@ pub(crate) fn cellar_adaptor_v1_calls( cellar: sp_call_parse_address(p.cellar)?, assets: string_to_u256(p.assets)?, }; - calls.push( - AbiCellarAdaptorV1Calls::DepositToCellar(call) - .encode() - .into(), - ) + calls.push(CellarAdaptorV1Calls::DepositToCellar(call).encode().into()) } cellar_adaptor_v1::Function::WithdrawFromCellar(p) => { let call = steward_abi::cellar_adaptor_v1::WithdrawFromCellarCall { @@ -34,7 +31,7 @@ pub(crate) fn cellar_adaptor_v1_calls( assets: string_to_u256(p.assets)?, }; calls.push( - AbiCellarAdaptorV1Calls::WithdrawFromCellar(call) + CellarAdaptorV1Calls::WithdrawFromCellar(call) .encode() .into(), ) @@ -44,8 +41,55 @@ pub(crate) fn cellar_adaptor_v1_calls( asset: sp_call_parse_address(p.asset)?, spender: sp_call_parse_address(p.spender)?, }; + calls.push(CellarAdaptorV1Calls::RevokeApproval(call).encode().into()) + } + } + } + + Ok(calls) +} + +pub(crate) fn legacy_cellar_adaptor_v1_calls( + params: steward_proto::steward::LegacyCellarAdaptorV1Calls, +) -> Result, Error> { + let mut calls = Vec::new(); + for c in params.calls { + let function = c + .function + .ok_or_else(|| sp_call_error("function cannot be empty".to_string()))?; + + match function { + legacy_cellar_adaptor_v1::Function::DepositToCellar(p) => { + let call = steward_abi::legacy_cellar_adaptor_v1::DepositToCellarCall { + cellar: sp_call_parse_address(p.cellar)?, + assets: string_to_u256(p.assets)?, + oracle: sp_call_parse_address(p.oracle)?, + }; + calls.push( + LegacyCellarAdaptorV1Calls::DepositToCellar(call) + .encode() + .into(), + ) + } + legacy_cellar_adaptor_v1::Function::WithdrawFromCellar(p) => { + let call = steward_abi::legacy_cellar_adaptor_v1::WithdrawFromCellarCall { + cellar: sp_call_parse_address(p.cellar)?, + assets: string_to_u256(p.assets)?, + oracle: sp_call_parse_address(p.oracle)?, + }; + calls.push( + LegacyCellarAdaptorV1Calls::WithdrawFromCellar(call) + .encode() + .into(), + ) + } + legacy_cellar_adaptor_v1::Function::RevokeApproval(p) => { + let call = steward_abi::legacy_cellar_adaptor_v1::RevokeApprovalCall { + asset: sp_call_parse_address(p.asset)?, + spender: sp_call_parse_address(p.spender)?, + }; calls.push( - AbiCellarAdaptorV1Calls::RevokeApproval(call) + LegacyCellarAdaptorV1Calls::RevokeApproval(call) .encode() .into(), ) diff --git a/steward/src/cellars/cellar_v2.rs b/steward/src/cellars/cellar_v2.rs index cb9c08ad..b13696e3 100644 --- a/steward/src/cellars/cellar_v2.rs +++ b/steward/src/cellars/cellar_v2.rs @@ -240,7 +240,7 @@ fn get_encoded_adaptor_calls(data: Vec) -> Result { - calls.extend(adaptors::f_token::f_token_adaptor_v1_calls(params)?) + calls.extend(adaptors::frax::f_token_adaptor_v1_calls(params)?) } MorphoAaveV2ATokenV1Calls(params) => calls.extend( adaptors::morpho::morpho_aave_v2_a_token_adaptor_v1_calls(params)?, @@ -260,6 +260,15 @@ fn get_encoded_adaptor_calls(data: Vec) -> Result calls.extend( adaptors::balancer_pool::balancer_pool_adaptor_v1_calls(params)?, ), + LegacyCellarV1Calls(params) => { + calls.extend(adaptors::sommelier::legacy_cellar_adaptor_v1_calls(params)?) + } + DebtFTokenV1Calls(params) => { + calls.extend(adaptors::frax::debt_f_token_adaptor_v1_calls(params)?) + } + CollateralFTokenV1Calls(params) => { + calls.extend(adaptors::frax::collateral_f_token_adaptor_v1_calls(params)?) + } }; result.push(AbiAdaptorCall { diff --git a/steward/src/cellars/cellar_v2_2.rs b/steward/src/cellars/cellar_v2_2.rs index a96913c2..02fa9099 100644 --- a/steward/src/cellars/cellar_v2_2.rs +++ b/steward/src/cellars/cellar_v2_2.rs @@ -314,7 +314,7 @@ fn get_encoded_adaptor_calls(data: Vec) -> Result { - calls.extend(adaptors::f_token::f_token_adaptor_v1_calls(params)?) + calls.extend(adaptors::frax::f_token_adaptor_v1_calls(params)?) } MorphoAaveV2ATokenV1Calls(params) => calls.extend( adaptors::morpho::morpho_aave_v2_a_token_adaptor_v1_calls(params)?, @@ -334,6 +334,15 @@ fn get_encoded_adaptor_calls(data: Vec) -> Result calls.extend( adaptors::balancer_pool::balancer_pool_adaptor_v1_calls(params)?, ), + LegacyCellarV1Calls(params) => { + calls.extend(adaptors::sommelier::legacy_cellar_adaptor_v1_calls(params)?) + } + DebtFTokenV1Calls(params) => { + calls.extend(adaptors::frax::debt_f_token_adaptor_v1_calls(params)?) + } + CollateralFTokenV1Calls(params) => { + calls.extend(adaptors::frax::collateral_f_token_adaptor_v1_calls(params)?) + } }; result.push(AbiAdaptorCall { diff --git a/steward/src/cellars/cellar_v2_5.rs b/steward/src/cellars/cellar_v2_5.rs index 8c663977..83f9787d 100644 --- a/steward/src/cellars/cellar_v2_5.rs +++ b/steward/src/cellars/cellar_v2_5.rs @@ -337,7 +337,7 @@ fn get_encoded_adaptor_calls(data: Vec) -> Result { - calls.extend(adaptors::f_token::f_token_adaptor_v1_calls(params)?) + calls.extend(adaptors::frax::f_token_adaptor_v1_calls(params)?) } MorphoAaveV2ATokenV1Calls(params) => calls.extend( adaptors::morpho::morpho_aave_v2_a_token_adaptor_v1_calls(params)?, @@ -357,6 +357,15 @@ fn get_encoded_adaptor_calls(data: Vec) -> Result calls.extend( adaptors::balancer_pool::balancer_pool_adaptor_v1_calls(params)?, ), + LegacyCellarV1Calls(params) => { + calls.extend(adaptors::sommelier::legacy_cellar_adaptor_v1_calls(params)?) + } + DebtFTokenV1Calls(params) => { + calls.extend(adaptors::frax::debt_f_token_adaptor_v1_calls(params)?) + } + CollateralFTokenV1Calls(params) => { + calls.extend(adaptors::frax::collateral_f_token_adaptor_v1_calls(params)?) + } }; result.push(AbiAdaptorCall { diff --git a/steward_abi/Cargo.toml b/steward_abi/Cargo.toml index 48acfd3c..cf33ec1a 100644 --- a/steward_abi/Cargo.toml +++ b/steward_abi/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "steward_abi" -version = "3.4.3" +version = "3.5.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/steward_abi/abi/CollateralFTokenAdaptorV1.json b/steward_abi/abi/CollateralFTokenAdaptorV1.json new file mode 100644 index 00000000..3e3172fb --- /dev/null +++ b/steward_abi/abi/CollateralFTokenAdaptorV1.json @@ -0,0 +1,6891 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_frax", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_healthFactor", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BaseAdaptor__ConstructorHealthFactorTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__ExternalReceiverBlocked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "BaseAdaptor__PricingNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__Slippage", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__UserDepositsNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__UserWithdrawsNotAllowed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "name": "CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "name": "CollateralFTokenAdaptor__HealthFactorTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "FRAX", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_collateralToDeposit", + "type": "uint256" + } + ], + "name": "addCollateral", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_adaptorData", + "type": "bytes" + } + ], + "name": "assetOf", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "assetsUsed", + "outputs": [ + { + "internalType": "contract ERC20[]", + "name": "assets", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "identifier", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "isDebt", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "minimumHealthFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_collateralAmount", + "type": "uint256" + }, + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + } + ], + "name": "removeCollateral", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "revokeApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slippage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "withdrawableFrom", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": { + "object": "0x60c060405234801561001057600080fd5b506040516112d83803806112d883398101604081905261002f9161007a565b6100388161004e565b6001600160a01b0390911660805260a0526100b4565b670e92596fd6290000811015610077576040516397ed5f4160e01b815260040160405180910390fd5b50565b6000806040838503121561008d57600080fd5b82516001600160a01b03811681146100a457600080fd5b6020939093015192949293505050565b60805160a0516111f96100df6000396000818160f40152610458015260006101b001526111f96000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063aeffddde1161008c578063d3bfe76a11610066578063d3bfe76a146101fd578063d41ddc9614610210578063e170a9bf14610223578063fa50e5d21461023657600080fd5b8063aeffddde1461018b578063b0e4556f146101ab578063c9111bd7146101ea57600080fd5b80636d75b9ee116100c85780636d75b9ee1461014e57806378415365146101615780637998a1c41461017457806389353a091461017c57600080fd5b80631caff8b1146100ef5780633e032a3b1461012957806369445c3114610139575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6040516123288152602001610120565b61014c610147366004610d0f565b610249565b005b61014c61015c366004610d94565b6102a8565b61011661016f366004610dc0565b6102fc565b610116610326565b60405160008152602001610120565b61019e610199366004610dc0565b610397565b6040516101209190610dfd565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b61014c6101f8366004610e4a565b6103fa565b61014c61020b366004610eca565b610413565b61014c61021e366004610f03565b61042c565b6101d2610231366004610dc0565b6104ab565b610116610244366004610f28565b6104cd565b60008280602001905181019061025f9190610f8c565b9050600061026c826104d6565b90506102778261053a565b8161028c6001600160a01b03831682886106f4565b6102968387610771565b6102a082826107ce565b505050505050565b6102b18261053a565b60006102bc836104d6565b905060006102ca828461085d565b9050836102e16001600160a01b03841682846106f4565b6102eb8583610771565b6102f583826107ce565b5050505050565b600080828060200190518101906103139190610f8c565b905061031f81336108de565b9392505050565b600060405160200161037c906020808252602a908201527f467261784c656e6420436f6c6c61746572616c2066546f6b656e56322041646160408201526970746f72205620302e3160b01b606082015260800190565b60405160208183030381529060405280519060200120905090565b604080516001808252818301909252606091602080830190803683370190505090506103c2826104ab565b816000815181106103d5576103d5610fa9565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6104286001600160a01b0383168260006106f4565b5050565b6104358161053a565b61043f828261094d565b600061044a82610980565b905061045682826109ee565b7f000000000000000000000000000000000000000000000000000000000000000011156104a657604051631e7f7dad60e31b81526001600160a01b03831660048201526024015b60405180910390fd5b505050565b600080828060200190518101906104c29190610f8c565b905061031f816104d6565b60005b92915050565b6000816001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610516573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190610f8c565b6000610544610326565b604080516001600160a01b03851660208201526000910160408051601f198184030181529082905261057a939291602001610fbf565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f69190610f8c565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161062391815260200190565b602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106649190611037565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cc9190611052565b6104a657604051630673531760e21b81526001600160a01b038416600482015260240161049d565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061076b5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161049d565b50505050565b60405163cadac47960e01b8152600481018290523060248201526001600160a01b0383169063cadac479906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156102a0573d6000803e3d6000fd5b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611074565b1115610428576104286001600160a01b0383168260006106f4565b600060001982036108d7576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156108ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611074565b90506104d0565b50806104d0565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af3062906024015b602060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031f9190611074565b604051636a0eee4b60e11b8152600481018390523060248201526001600160a01b0382169063d41ddc96906044016107a0565b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e4919061108d565b6080015192915050565b6000806109fb8430610abb565b90506000610a0c8583600180610aed565b905080600003610a2857670e92596fd6290000925050506104d0565b6000610a3486306108de565b905080600003610a4a57600093505050506104d0565b600080610a5688610b72565b90925090506000838383610a6a8b8961111f565b610a749190611144565b610a7e919061111f565b610a889190611144565b90506000610a958a610be9565b90506000610aac82670de0b6b3a764000085610c4d565b9b9a5050505050505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df9060240161090c565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b57190606401602060405180830381865afa158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190611074565b95945050505050565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd89190611166565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190611074565b828202811515841585830485141716610c6557600080fd5b0492915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610c9357600080fd5b813567ffffffffffffffff80821115610cae57610cae610c6c565b604051601f8301601f19908116603f01168101908282118183101715610cd657610cd6610c6c565b81604052838152866020858801011115610cef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610d2457600080fd5b83359250602084013567ffffffffffffffff80821115610d4357600080fd5b610d4f87838801610c82565b93506040860135915080821115610d6557600080fd5b50610d7286828701610c82565b9150509250925092565b6001600160a01b0381168114610d9157600080fd5b50565b60008060408385031215610da757600080fd5b8235610db281610d7c565b946020939093013593505050565b600060208284031215610dd257600080fd5b813567ffffffffffffffff811115610de957600080fd5b610df584828501610c82565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610e3e5783516001600160a01b031683529284019291840191600101610e19565b50909695505050505050565b60008060008060808587031215610e6057600080fd5b843593506020850135610e7281610d7c565b9250604085013567ffffffffffffffff80821115610e8f57600080fd5b610e9b88838901610c82565b93506060870135915080821115610eb157600080fd5b50610ebe87828801610c82565b91505092959194509250565b60008060408385031215610edd57600080fd5b8235610ee881610d7c565b91506020830135610ef881610d7c565b809150509250929050565b60008060408385031215610f1657600080fd5b823591506020830135610ef881610d7c565b60008060408385031215610f3b57600080fd5b823567ffffffffffffffff80821115610f5357600080fd5b610f5f86838701610c82565b93506020850135915080821115610f7557600080fd5b50610f8285828601610c82565b9150509250929050565b600060208284031215610f9e57600080fd5b815161031f81610d7c565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b81811015610ffb57858101830151858201608001528201610fdf565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff8116811461103257600080fd5b919050565b60006020828403121561104957600080fd5b61031f8261101e565b60006020828403121561106457600080fd5b8151801515811461031f57600080fd5b60006020828403121561108657600080fd5b5051919050565b600060a0828403121561109f57600080fd5b60405160a0810181811067ffffffffffffffff821117156110c2576110c2610c6c565b60405282516110d081610d7c565b81526110de6020840161101e565b602082015260408301516001600160b81b03811681146110fd57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b80820281158282048414176104d057634e487b7160e01b600052601160045260246000fd5b60008261116157634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600080610100898b03121561118357600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea2646970667358221220a758b2990fb2dd13bcbd548a71ed74b10c5fdbf90a365ba8e540fdfe78ad6a5c64736f6c63430008150033", + "sourceMap": "527:10498:191:-:0;;;2007:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2067:52;2105:13;2067:37;:52::i;:::-;-1:-1:-1;;;;;2129:19:191;;;;;2158:35;;527:10498;;8769:233:187;2786:7;8873:19;:57;8869:126;;;8951:44;;-1:-1:-1;;;8951:44:187;;;;;;;;;;;8869:126;8769:233;:::o;14:351:266:-;93:6;101;154:2;142:9;133:7;129:23;125:32;122:52;;;170:1;167;160:12;122:52;196:16;;-1:-1:-1;;;;;241:31:266;;231:42;;221:70;;287:1;284;277:12;221:70;355:2;340:18;;;;334:25;310:5;;334:25;;-1:-1:-1;;;14:351:266:o;:::-;527:10498:191;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063aeffddde1161008c578063d3bfe76a11610066578063d3bfe76a146101fd578063d41ddc9614610210578063e170a9bf14610223578063fa50e5d21461023657600080fd5b8063aeffddde1461018b578063b0e4556f146101ab578063c9111bd7146101ea57600080fd5b80636d75b9ee116100c85780636d75b9ee1461014e57806378415365146101615780637998a1c41461017457806389353a091461017c57600080fd5b80631caff8b1146100ef5780633e032a3b1461012957806369445c3114610139575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6040516123288152602001610120565b61014c610147366004610d0f565b610249565b005b61014c61015c366004610d94565b6102a8565b61011661016f366004610dc0565b6102fc565b610116610326565b60405160008152602001610120565b61019e610199366004610dc0565b610397565b6040516101209190610dfd565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b61014c6101f8366004610e4a565b6103fa565b61014c61020b366004610eca565b610413565b61014c61021e366004610f03565b61042c565b6101d2610231366004610dc0565b6104ab565b610116610244366004610f28565b6104cd565b60008280602001905181019061025f9190610f8c565b9050600061026c826104d6565b90506102778261053a565b8161028c6001600160a01b03831682886106f4565b6102968387610771565b6102a082826107ce565b505050505050565b6102b18261053a565b60006102bc836104d6565b905060006102ca828461085d565b9050836102e16001600160a01b03841682846106f4565b6102eb8583610771565b6102f583826107ce565b5050505050565b600080828060200190518101906103139190610f8c565b905061031f81336108de565b9392505050565b600060405160200161037c906020808252602a908201527f467261784c656e6420436f6c6c61746572616c2066546f6b656e56322041646160408201526970746f72205620302e3160b01b606082015260800190565b60405160208183030381529060405280519060200120905090565b604080516001808252818301909252606091602080830190803683370190505090506103c2826104ab565b816000815181106103d5576103d5610fa9565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6104286001600160a01b0383168260006106f4565b5050565b6104358161053a565b61043f828261094d565b600061044a82610980565b905061045682826109ee565b7f000000000000000000000000000000000000000000000000000000000000000011156104a657604051631e7f7dad60e31b81526001600160a01b03831660048201526024015b60405180910390fd5b505050565b600080828060200190518101906104c29190610f8c565b905061031f816104d6565b60005b92915050565b6000816001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610516573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190610f8c565b6000610544610326565b604080516001600160a01b03851660208201526000910160408051601f198184030181529082905261057a939291602001610fbf565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f69190610f8c565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161062391815260200190565b602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106649190611037565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cc9190611052565b6104a657604051630673531760e21b81526001600160a01b038416600482015260240161049d565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061076b5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161049d565b50505050565b60405163cadac47960e01b8152600481018290523060248201526001600160a01b0383169063cadac479906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156102a0573d6000803e3d6000fd5b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611074565b1115610428576104286001600160a01b0383168260006106f4565b600060001982036108d7576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156108ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611074565b90506104d0565b50806104d0565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af3062906024015b602060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031f9190611074565b604051636a0eee4b60e11b8152600481018390523060248201526001600160a01b0382169063d41ddc96906044016107a0565b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e4919061108d565b6080015192915050565b6000806109fb8430610abb565b90506000610a0c8583600180610aed565b905080600003610a2857670e92596fd6290000925050506104d0565b6000610a3486306108de565b905080600003610a4a57600093505050506104d0565b600080610a5688610b72565b90925090506000838383610a6a8b8961111f565b610a749190611144565b610a7e919061111f565b610a889190611144565b90506000610a958a610be9565b90506000610aac82670de0b6b3a764000085610c4d565b9b9a5050505050505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df9060240161090c565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b57190606401602060405180830381865afa158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190611074565b95945050505050565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd89190611166565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190611074565b828202811515841585830485141716610c6557600080fd5b0492915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610c9357600080fd5b813567ffffffffffffffff80821115610cae57610cae610c6c565b604051601f8301601f19908116603f01168101908282118183101715610cd657610cd6610c6c565b81604052838152866020858801011115610cef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610d2457600080fd5b83359250602084013567ffffffffffffffff80821115610d4357600080fd5b610d4f87838801610c82565b93506040860135915080821115610d6557600080fd5b50610d7286828701610c82565b9150509250925092565b6001600160a01b0381168114610d9157600080fd5b50565b60008060408385031215610da757600080fd5b8235610db281610d7c565b946020939093013593505050565b600060208284031215610dd257600080fd5b813567ffffffffffffffff811115610de957600080fd5b610df584828501610c82565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610e3e5783516001600160a01b031683529284019291840191600101610e19565b50909695505050505050565b60008060008060808587031215610e6057600080fd5b843593506020850135610e7281610d7c565b9250604085013567ffffffffffffffff80821115610e8f57600080fd5b610e9b88838901610c82565b93506060870135915080821115610eb157600080fd5b50610ebe87828801610c82565b91505092959194509250565b60008060408385031215610edd57600080fd5b8235610ee881610d7c565b91506020830135610ef881610d7c565b809150509250929050565b60008060408385031215610f1657600080fd5b823591506020830135610ef881610d7c565b60008060408385031215610f3b57600080fd5b823567ffffffffffffffff80821115610f5357600080fd5b610f5f86838701610c82565b93506020850135915080821115610f7557600080fd5b50610f8285828601610c82565b9150509250929050565b600060208284031215610f9e57600080fd5b815161031f81610d7c565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b81811015610ffb57858101830151858201608001528201610fdf565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff8116811461103257600080fd5b919050565b60006020828403121561104957600080fd5b61031f8261101e565b60006020828403121561106457600080fd5b8151801515811461031f57600080fd5b60006020828403121561108657600080fd5b5051919050565b600060a0828403121561109f57600080fd5b60405160a0810181811067ffffffffffffffff821117156110c2576110c2610c6c565b60405282516110d081610d7c565b81526110de6020840161101e565b602082015260408301516001600160b81b03811681146110fd57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b80820281158282048414176104d057634e487b7160e01b600052601160045260246000fd5b60008261116157634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600080610100898b03121561118357600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea2646970667358221220a758b2990fb2dd13bcbd548a71ed74b10c5fdbf90a365ba8e540fdfe78ad6a5c64736f6c63430008150033", + "sourceMap": "527:10498:191:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1956:44;;;;;;;;160:25:266;;;148:2;133:18;1956:44:191;;;;;;;;2441:78:187;;;2507:5;340:42:266;;328:2;313:18;2441:78:187;196:192:266;3183:564:191;;;;;;:::i;:::-;;:::i;:::-;;5675:583;;;;;;:::i;:::-;;:::i;4606:223::-;;;;;;:::i;:::-;;:::i;2619:160::-;;;:::i;5185:83::-;;;5233:4;2998:41:266;;2986:2;2971:18;5185:83:191;2858:187:266;5960:180:187;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1734:27:191:-;;;;;;;;-1:-1:-1;;;;;3907:32:266;;;3889:51;;3877:2;3862:18;1734:27:191;3728:218:266;3916:147:191;;;;;;:::i;:::-;;:::i;9230:107:187:-;;;;;;:::i;:::-;;:::i;6535:586:191:-;;;;;;:::i;:::-;;:::i;4891:210::-;;;;;;:::i;:::-;;:::i;4318:118::-;;;;;;:::i;:::-;;:::i;3183:564::-;3282:20;3316:11;3305:34;;;;;;;;;;;;:::i;:::-;3282:57;;3349:21;3373:37;3397:12;3373:23;:37::i;:::-;3349:61;;3421:29;3437:12;3421:15;:29::i;:::-;3498:12;3521:56;-1:-1:-1;;;;;3521:27:191;;3498:12;3570:6;3521:27;:56::i;:::-;3588:36;3603:12;3617:6;3588:14;:36::i;:::-;3679:61;3703:15;3720:19;3679:23;:61::i;:::-;3272:475;;;3183:564;;;:::o;5675:583::-;5768:30;5784:13;5768:15;:30::i;:::-;5808:22;5833:38;5857:13;5833:23;:38::i;:::-;5808:63;;5882:23;5908:53;5922:16;5940:20;5908:13;:53::i;:::-;5882:79;-1:-1:-1;6002:13:191;6026:59;-1:-1:-1;;;;;6026:28:191;;6002:13;5882:79;6026:28;:59::i;:::-;6095:46;6110:13;6125:15;6095:14;:46::i;:::-;6196:55;6220:16;6238:12;6196:23;:55::i;:::-;5758:500;;;5675:583;;:::o;4606:223::-;4681:7;4700:20;4734:11;4723:34;;;;;;;;;;;;:::i;:::-;4700:57;;4774:48;4797:12;4811:10;4774:22;:48::i;:::-;4767:55;4606:223;-1:-1:-1;;;4606:223:191:o;2619:160::-;2679:7;2715:56;;;;;;6508:2:266;6490:21;;;6547:2;6527:18;;;6520:30;6586:34;6581:2;6566:18;;6559:62;-1:-1:-1;;;6652:2:266;6637:18;;6630:40;6702:3;6687:19;;6306:406;2715:56:191;;;;;;;;;;;;;2705:67;;;;;;2698:74;;2619:160;:::o;5960:180:187:-;6077:14;;;6089:1;6077:14;;;;;;;;;6035:21;;6077:14;;;;;;;;;;;-1:-1:-1;6077:14:187;6068:23;;6113:20;6121:11;6113:7;:20::i;:::-;6101:6;6108:1;6101:9;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;6101:32:187;;;-1:-1:-1;;;;;6101:32:187;;;;;5960:180;;;:::o;3916:147:191:-;4018:38;;-1:-1:-1;;;4018:38:191;;;;;;;;;;;9230:107:187;9301:29;-1:-1:-1;;;;;9301:17:187;;9319:7;9328:1;9301:17;:29::i;:::-;9230:107;;:::o;6535:586:191:-;6628:30;6644:13;6628:15;:30::i;:::-;6697:51;6715:17;6734:13;6697:17;:51::i;:::-;6758:21;6782:35;6803:13;6782:20;:35::i;:::-;6758:59;;6967:46;6984:13;6999;6967:16;:46::i;:::-;6944:19;:70;6940:175;;;7037:67;;-1:-1:-1;;;7037:67:191;;-1:-1:-1;;;;;3907:32:266;;7037:67:191;;;3889:51:266;3862:18;;7037:67:191;;;;;;;;6940:175;6618:503;6535:586;;:::o;4891:210::-;4965:5;4982:20;5016:12;5005:35;;;;;;;;;;;;:::i;:::-;4982:58;;5057:37;5081:12;5057:23;:37::i;4318:118::-;4402:7;4318:118;;;;;:::o;10002:178::-;10089:24;10138:13;-1:-1:-1;;;;;10138:32:191;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7417:459::-;7497:20;7541:12;:10;:12::i;:::-;7562:34;;;-1:-1:-1;;;;;3907:32:266;;7562:34:191;;;3889:51:266;7555:5:191;;3862:18:266;7562:34:191;;;-1:-1:-1;;7562:34:191;;;;;;;;;;7530:67;;;;7562:34;7530:67;;:::i;:::-;;;;;;;;;;;;;7520:78;;;;;;7497:101;;7608:17;7643:4;-1:-1:-1;;;;;7628:30:191;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7628:60:191;;7689:12;7628:74;;;;;;;;;;;;;160:25:266;;148:2;133:18;;14:177;7628:74:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7717:48;;-1:-1:-1;;;7717:48:191;;370:10:266;358:23;;7717:48:191;;;340:42:266;7608:94:191;;-1:-1:-1;7732:4:191;;7717:36;;313:18:266;;7717:48:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7712:157;;7786:83;;-1:-1:-1;;;7786:83:191;;-1:-1:-1;;;;;3907:32:266;;7786:83:191;;;3889:51:266;3862:18;;7786:83:191;3728:218:266;4455:1497:65;4566:12;4736:4;4730:11;-1:-1:-1;;;4859:17:65;4852:93;4992:2;4988:1;4969:17;4965:25;4958:37;5072:6;5067:2;5048:17;5044:26;5037:42;5874:2;5871:1;5867:2;5848:17;5845:1;5838:5;5831;5826:51;5395:16;5388:24;5382:2;5364:16;5361:24;5357:1;5353;5347:8;5344:15;5340:46;5337:76;5137:754;5126:765;;;5919:7;5911:34;;;;-1:-1:-1;;;5911:34:65;;9376:2:266;5911:34:65;;;9358:21:266;9415:2;9395:18;;;9388:30;-1:-1:-1;;;9434:18:266;;;9427:44;9488:18;;5911:34:65;9174:338:266;5911:34:65;4556:1396;4455:1497;;;:::o;9640:157:191:-;9731:59;;-1:-1:-1;;;9731:59:191;;;;;9691:25:266;;;9784:4:191;9732:18:266;;;9725:60;-1:-1:-1;;;;;9731:27:191;;;;;9664:18:266;;9731:59:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8184:167:187;8270:39;;-1:-1:-1;;;8270:39:187;;8294:4;8270:39;;;10008:34:266;-1:-1:-1;;;;;10078:15:266;;;10058:18;;;10051:43;8312:1:187;;8270:15;;;;;;9943:18:266;;8270:39:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;8266:78;;;8315:29;-1:-1:-1;;;;;8315:17:187;;8333:7;8342:1;8315:17;:29::i;7842:207::-;7925:7;-1:-1:-1;;7948:6:187;:27;7944:98;;7984:30;;-1:-1:-1;;;7984:30:187;;8008:4;7984:30;;;3889:51:266;-1:-1:-1;;;;;7984:15:187;;;;;3862:18:266;;7984:30:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7977:37;;;;7944:98;-1:-1:-1;8036:6:187;8029:13;;3894:216:197;4061:42;;-1:-1:-1;;;4061:42:197;;-1:-1:-1;;;;;3907:32:266;;;4061:42:197;;;3889:51:266;4017:25:197;;4061:35;;;;;;3862:18:266;;4061:42:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10435:175:191:-;10539:64;;-1:-1:-1;;;10539:64:191;;;;;9691:25:266;;;10597:4:191;9732:18:266;;;9725:60;-1:-1:-1;;;;;10539:30:191;;;;;9664:18:266;;10539:64:191;9517:274:266;10841:182:191;10920:20;10967:13;-1:-1:-1;;;;;10967:30:191;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;10841:182;-1:-1:-1;;10841:182:191:o;1173:1164:197:-;1276:7;1333:22;1358:47;1376:13;1399:4;1358:17;:47::i;:::-;1333:72;;1415:23;1441:58;1457:13;1472:14;1488:4;1494;1441:15;:58::i;:::-;1415:84;;1638:15;1657:1;1638:20;1634:40;;1667:7;1660:14;;;;;;1634:40;1684:25;1712:52;1735:13;1758:4;1712:22;:52::i;:::-;1684:80;;1778:17;1799:1;1778:22;1774:36;;1809:1;1802:8;;;;;;;1774:36;1822:21;1845:26;1875:28;1889:13;1875;:28::i;:::-;1821:82;;-1:-1:-1;1821:82:197;-1:-1:-1;1913:26:197;2031:17;1821:82;;1945:31;1963:13;1945:15;:31;:::i;:::-;1944:54;;;;:::i;:::-;1943:72;;;;:::i;:::-;1942:106;;;;:::i;:::-;1913:135;;2099:26;2128:22;2136:13;2128:7;:22::i;:::-;2099:51;-1:-1:-1;2191:17:197;2211:55;2099:51;2241:4;2247:18;2211:29;:55::i;:::-;2191:75;1173:1164;-1:-1:-1;;;;;;;;;;;1173:1164:197:o;3388:257::-;3552:37;;-1:-1:-1;;;3552:37:197;;-1:-1:-1;;;;;3907:32:266;;;3552:37:197;;;3889:51:266;3506:27:197;;3552:30;;;;;;3862:18:266;;3552:37:197;3728:218:266;2906:270:197;3104:65;;-1:-1:-1;;;3104:65:197;;;;;11886:25:266;;;11954:14;;11947:22;11927:18;;;11920:50;12013:14;;12006:22;11986:18;;;11979:50;3078:7:197;;-1:-1:-1;;;;;3104:28:197;;;;;11859:18:266;;3104:65:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3097:72;2906:270;-1:-1:-1;;;;;2906:270:197:o;4116:237::-;4207:21;4230:26;4318:13;-1:-1:-1;;;;;4318:26:197;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4268:78:197;;;;-1:-1:-1;4116:237:197;;-1:-1:-1;;;;;;;4116:237:197:o;4359:135::-;4430:14;4465:13;-1:-1:-1;;;;;4465:20:197;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1331:505:225:-;1507:9;;;1638:19;;1631:27;1663:9;;1677;;;1674:16;;1660:31;1627:65;1617:121;;1722:1;1719;1712:12;1617:121;1801:19;;1331:505;-1:-1:-1;;1331:505:225:o;393:127:266:-;454:10;449:3;445:20;442:1;435:31;485:4;482:1;475:15;509:4;506:1;499:15;525:718;567:5;620:3;613:4;605:6;601:17;597:27;587:55;;638:1;635;628:12;587:55;674:6;661:20;700:18;737:2;733;730:10;727:36;;;743:18;;:::i;:::-;818:2;812:9;786:2;872:13;;-1:-1:-1;;868:22:266;;;892:2;864:31;860:40;848:53;;;916:18;;;936:22;;;913:46;910:72;;;962:18;;:::i;:::-;1002:10;998:2;991:22;1037:2;1029:6;1022:18;1083:3;1076:4;1071:2;1063:6;1059:15;1055:26;1052:35;1049:55;;;1100:1;1097;1090:12;1049:55;1164:2;1157:4;1149:6;1145:17;1138:4;1130:6;1126:17;1113:54;1211:1;1204:4;1199:2;1191:6;1187:15;1183:26;1176:37;1231:6;1222:15;;;;;;525:718;;;;:::o;1248:607::-;1343:6;1351;1359;1412:2;1400:9;1391:7;1387:23;1383:32;1380:52;;;1428:1;1425;1418:12;1380:52;1464:9;1451:23;1441:33;;1525:2;1514:9;1510:18;1497:32;1548:18;1589:2;1581:6;1578:14;1575:34;;;1605:1;1602;1595:12;1575:34;1628:49;1669:7;1660:6;1649:9;1645:22;1628:49;:::i;:::-;1618:59;;1730:2;1719:9;1715:18;1702:32;1686:48;;1759:2;1749:8;1746:16;1743:36;;;1775:1;1772;1765:12;1743:36;;1798:51;1841:7;1830:8;1819:9;1815:24;1798:51;:::i;:::-;1788:61;;;1248:607;;;;;:::o;1860:140::-;-1:-1:-1;;;;;1944:31:266;;1934:42;;1924:70;;1990:1;1987;1980:12;1924:70;1860:140;:::o;2005:341::-;2090:6;2098;2151:2;2139:9;2130:7;2126:23;2122:32;2119:52;;;2167:1;2164;2157:12;2119:52;2206:9;2193:23;2225:40;2259:5;2225:40;:::i;:::-;2284:5;2336:2;2321:18;;;;2308:32;;-1:-1:-1;;;2005:341:266:o;2351:320::-;2419:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:52;;;2488:1;2485;2478:12;2440:52;2528:9;2515:23;2561:18;2553:6;2550:30;2547:50;;;2593:1;2590;2583:12;2547:50;2616:49;2657:7;2648:6;2637:9;2633:22;2616:49;:::i;:::-;2606:59;2351:320;-1:-1:-1;;;;2351:320:266:o;3050:673::-;3236:2;3288:21;;;3358:13;;3261:18;;;3380:22;;;3207:4;;3236:2;3459:15;;;;3433:2;3418:18;;;3207:4;3502:195;3516:6;3513:1;3510:13;3502:195;;;3581:13;;-1:-1:-1;;;;;3577:39:266;3565:52;;3672:15;;;;3637:12;;;;3613:1;3531:9;3502:195;;;-1:-1:-1;3714:3:266;;3050:673;-1:-1:-1;;;;;;3050:673:266:o;3951:752::-;4055:6;4063;4071;4079;4132:3;4120:9;4111:7;4107:23;4103:33;4100:53;;;4149:1;4146;4139:12;4100:53;4185:9;4172:23;4162:33;;4245:2;4234:9;4230:18;4217:32;4258:40;4292:5;4258:40;:::i;:::-;4317:5;-1:-1:-1;4373:2:266;4358:18;;4345:32;4396:18;4426:14;;;4423:34;;;4453:1;4450;4443:12;4423:34;4476:49;4517:7;4508:6;4497:9;4493:22;4476:49;:::i;:::-;4466:59;;4578:2;4567:9;4563:18;4550:32;4534:48;;4607:2;4597:8;4594:16;4591:36;;;4623:1;4620;4613:12;4591:36;;4646:51;4689:7;4678:8;4667:9;4663:24;4646:51;:::i;:::-;4636:61;;;3951:752;;;;;;;:::o;4708:421::-;4791:6;4799;4852:2;4840:9;4831:7;4827:23;4823:32;4820:52;;;4868:1;4865;4858:12;4820:52;4907:9;4894:23;4926:40;4960:5;4926:40;:::i;:::-;4985:5;-1:-1:-1;5042:2:266;5027:18;;5014:32;5055:42;5014:32;5055:42;:::i;:::-;5116:7;5106:17;;;4708:421;;;;;:::o;5134:341::-;5219:6;5227;5280:2;5268:9;5259:7;5255:23;5251:32;5248:52;;;5296:1;5293;5286:12;5248:52;5332:9;5319:23;5309:33;;5392:2;5381:9;5377:18;5364:32;5405:40;5439:5;5405:40;:::i;5480:539::-;5566:6;5574;5627:2;5615:9;5606:7;5602:23;5598:32;5595:52;;;5643:1;5640;5633:12;5595:52;5683:9;5670:23;5712:18;5753:2;5745:6;5742:14;5739:34;;;5769:1;5766;5759:12;5739:34;5792:49;5833:7;5824:6;5813:9;5809:22;5792:49;:::i;:::-;5782:59;;5894:2;5883:9;5879:18;5866:32;5850:48;;5923:2;5913:8;5910:16;5907:36;;;5939:1;5936;5929:12;5907:36;;5962:51;6005:7;5994:8;5983:9;5979:24;5962:51;:::i;:::-;5952:61;;;5480:539;;;;;:::o;6024:277::-;6111:6;6164:2;6152:9;6143:7;6139:23;6135:32;6132:52;;;6180:1;6177;6170:12;6132:52;6212:9;6206:16;6231:40;6265:5;6231:40;:::i;6717:127::-;6778:10;6773:3;6769:20;6766:1;6759:31;6809:4;6806:1;6799:15;6833:4;6830:1;6823:15;7322:701;7519:6;7508:9;7501:25;7482:4;7545:2;7597:6;7590:14;7583:22;7578:2;7567:9;7563:18;7556:50;7642:2;7637;7626:9;7622:18;7615:30;7674:6;7668:13;7717:6;7712:2;7701:9;7697:18;7690:34;7742:1;7752:141;7766:6;7763:1;7760:13;7752:141;;;7862:14;;;7858:23;;7852:30;7827:17;;;7846:3;7823:27;7816:67;7781:10;;7752:141;;;7756:3;7943:1;7937:3;7928:6;7917:9;7913:22;7909:32;7902:43;8013:3;8006:2;8002:7;7997:2;7989:6;7985:15;7981:29;7970:9;7966:45;7962:55;7954:63;;;;7322:701;;;;;;:::o;8311:167::-;8389:13;;8442:10;8431:22;;8421:33;;8411:61;;8468:1;8465;8458:12;8411:61;8311:167;;;:::o;8483:206::-;8552:6;8605:2;8593:9;8584:7;8580:23;8576:32;8573:52;;;8621:1;8618;8611:12;8573:52;8644:39;8673:9;8644:39;:::i;8892:277::-;8959:6;9012:2;9000:9;8991:7;8987:23;8983:32;8980:52;;;9028:1;9025;9018:12;8980:52;9060:9;9054:16;9113:5;9106:13;9099:21;9092:5;9089:32;9079:60;;9135:1;9132;9125:12;10105:184;10175:6;10228:2;10216:9;10207:7;10203:23;10199:32;10196:52;;;10244:1;10241;10234:12;10196:52;-1:-1:-1;10267:16:266;;10105:184;-1:-1:-1;10105:184:266:o;10294:905::-;10399:6;10452:3;10440:9;10431:7;10427:23;10423:33;10420:53;;;10469:1;10466;10459:12;10420:53;10502:2;10496:9;10544:3;10536:6;10532:16;10614:6;10602:10;10599:22;10578:18;10566:10;10563:34;10560:62;10557:88;;;10625:18;;:::i;:::-;10661:2;10654:22;10698:16;;10723:40;10698:16;10723:40;:::i;:::-;10772:21;;10826:48;10870:2;10855:18;;10826:48;:::i;:::-;10821:2;10809:15;;10802:73;10920:2;10905:18;;10899:25;-1:-1:-1;;;;;10955:33:266;;10943:46;;10933:74;;11003:1;11000;10993:12;10933:74;11035:2;11023:15;;11016:32;11102:2;11087:18;;;11081:25;11064:15;;;11057:50;11162:3;11147:19;;;11141:26;11123:16;;;11116:52;;;;-1:-1:-1;11027:6:266;10294:905;-1:-1:-1;10294:905:266:o;11204:265::-;11277:9;;;11308;;11325:15;;;11319:22;;11305:37;11295:168;;11385:10;11380:3;11376:20;11373:1;11366:31;11420:4;11417:1;11410:15;11448:4;11445:1;11438:15;11474:217;11514:1;11540;11530:132;;11584:10;11579:3;11575:20;11572:1;11565:31;11619:4;11616:1;11609:15;11647:4;11644:1;11637:15;11530:132;-1:-1:-1;11676:9:266;;11474:217::o;12040:616::-;12173:6;12181;12189;12197;12205;12213;12221;12229;12282:3;12270:9;12261:7;12257:23;12253:33;12250:53;;;12299:1;12296;12289:12;12250:53;-1:-1:-1;;12322:16:266;;12378:2;12363:18;;12357:25;12422:2;12407:18;;12401:25;12466:2;12451:18;;12445:25;12510:3;12495:19;;12489:26;12555:3;12540:19;;12534:26;12600:3;12585:19;;12579:26;12645:3;12630:19;;;12624:26;12322:16;;12357:25;;-1:-1:-1;12401:25:266;;12445;;-1:-1:-1;12489:26:266;-1:-1:-1;12534:26:266;;-1:-1:-1;12579:26:266;-1:-1:-1;12624:26:266;;-1:-1:-1;12040:616:266;-1:-1:-1;12040:616:266:o", + "linkReferences": {}, + "immutableReferences": { + "78404": [ + { + "start": 432, + "length": 32 + } + ], + "78407": [ + { + "start": 244, + "length": 32 + }, + { + "start": 1112, + "length": 32 + } + ] + } + }, + "methodIdentifiers": { + "FRAX()": "b0e4556f", + "addCollateral(address,uint256)": "6d75b9ee", + "assetOf(bytes)": "e170a9bf", + "assetsUsed(bytes)": "aeffddde", + "balanceOf(bytes)": "78415365", + "deposit(uint256,bytes,bytes)": "69445c31", + "identifier()": "7998a1c4", + "isDebt()": "89353a09", + "minimumHealthFactor()": "1caff8b1", + "removeCollateral(uint256,address)": "d41ddc96", + "revokeApproval(address,address)": "d3bfe76a", + "slippage()": "3e032a3b", + "withdraw(uint256,address,bytes,bytes)": "c9111bd7", + "withdrawableFrom(bytes,bytes)": "fa50e5d2" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_frax\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseAdaptor__ConstructorHealthFactorTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__ExternalReceiverBlocked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"BaseAdaptor__PricingNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__Slippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__UserDepositsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__UserWithdrawsNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fraxlendPair\",\"type\":\"address\"}],\"name\":\"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fraxlendPair\",\"type\":\"address\"}],\"name\":\"CollateralFTokenAdaptor__HealthFactorTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FRAX\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IFToken\",\"name\":\"_fraxlendPair\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_collateralToDeposit\",\"type\":\"uint256\"}],\"name\":\"addCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"_adaptorData\",\"type\":\"bytes\"}],\"name\":\"assetOf\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"adaptorData\",\"type\":\"bytes\"}],\"name\":\"assetsUsed\",\"outputs\":[{\"internalType\":\"contract ERC20[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"adaptorData\",\"type\":\"bytes\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"assets\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"adaptorData\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identifier\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDebt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumHealthFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_collateralAmount\",\"type\":\"uint256\"},{\"internalType\":\"contract IFToken\",\"name\":\"_fraxlendPair\",\"type\":\"address\"}],\"name\":\"removeCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"revokeApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slippage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"withdrawableFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"crispymangoes, 0xEinCodes\",\"kind\":\"dev\",\"methods\":{\"addCollateral(address,uint256)\":{\"params\":{\"_collateralToDeposit\":\"The amount of collateral to add to Fraxlend Pair position\",\"_fraxlendPair\":\"The specified Fraxlend Pair\"}},\"balanceOf(bytes)\":{\"params\":{\"adaptorData\":\"the collateral asset deposited into Fraxlend\"}},\"deposit(uint256,bytes,bytes)\":{\"details\":\"configurationData is NOT used\",\"params\":{\"adaptorData\":\"adaptor data containing the abi encoded fraxlendPair\",\"assets\":\"the amount of assets to provide as collateral on FraxLend\"}},\"identifier()\":{\"details\":\"Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult.\"},\"removeCollateral(uint256,address)\":{\"params\":{\"_collateralAmount\":\"The amount of collateral to remove from fraxlend pair position\",\"_fraxlendPair\":\"The specified Fraxlend Pair\"}},\"revokeApproval(address,address)\":{\"params\":{\"asset\":\"the ERC20 asset to revoke `spender`s approval for\",\"spender\":\"the address to revoke approval for\"}}},\"title\":\"FraxLend Collateral Adaptor\",\"version\":1},\"userdoc\":{\"errors\":{\"BaseAdaptor__ConstructorHealthFactorTooLow()\":[{\"notice\":\"Attempted to set a constructor minimum health factor to a value below `MINIMUM_CONSTRUCTOR_HEALTH_FACTOR()`.\"}],\"BaseAdaptor__ExternalReceiverBlocked()\":[{\"notice\":\"Attempted to specify an external receiver during a Cellar `callOnAdaptor` call.\"}],\"BaseAdaptor__PricingNotSupported(address)\":[{\"notice\":\"Attempted swap used unsupported output asset.\"}],\"BaseAdaptor__Slippage()\":[{\"notice\":\"Attempted swap has bad slippage.\"}],\"BaseAdaptor__UserDepositsNotAllowed()\":[{\"notice\":\"Attempted to deposit to a position where user deposits were not allowed.\"}],\"BaseAdaptor__UserWithdrawsNotAllowed()\":[{\"notice\":\"Attempted to withdraw from a position where user withdraws were not allowed.\"}],\"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked(address)\":[{\"notice\":\"Attempted to interact with an fraxlendPair the Cellar is not using.\"}],\"CollateralFTokenAdaptor__HealthFactorTooLow(address)\":[{\"notice\":\"Removal of collateral causes Cellar Health Factor below what is required\"}]},\"kind\":\"user\",\"methods\":{\"FRAX()\":{\"notice\":\"The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\"},\"addCollateral(address,uint256)\":{\"notice\":\"Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing.\"},\"assetOf(bytes)\":{\"notice\":\"Returns collateral asset\"},\"assetsUsed(bytes)\":{\"notice\":\"When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup.\"},\"balanceOf(bytes)\":{\"notice\":\"Returns the cellar's balance of the collateralAsset position.\"},\"deposit(uint256,bytes,bytes)\":{\"notice\":\"User deposits collateralToken to Fraxlend pair\"},\"isDebt()\":{\"notice\":\"This adaptor returns collateral, and not debt.\"},\"minimumHealthFactor()\":{\"notice\":\"Minimum Health Factor enforced after every removeCollateral() strategist function call.Overwrites strategist set minimums if they are lower.\"},\"removeCollateral(uint256,address)\":{\"notice\":\"Allows strategists to remove collateral from the respective cellar position on FraxLend.\"},\"revokeApproval(address,address)\":{\"notice\":\"Allows strategists to zero out an approval for a given `asset`.\"},\"slippage()\":{\"notice\":\"Max possible slippage when making a swap router swap.\"},\"withdraw(uint256,address,bytes,bytes)\":{\"notice\":\"User withdraws are NOT allowed from this position. NOTE: collateral withdrawal calls directly from users disallowed for now.\"},\"withdrawableFrom(bytes,bytes)\":{\"notice\":\"This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom. NOTE: collateral withdrawal calls directly from users disallowed for now.\"}},\"notice\":\"Allows addition and removal of collateralAssets to Fraxlend pairs for a Cellar.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol\":\"CollateralFTokenAdaptor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/\",\":@balancer/=lib/balancer-v2-monorepo/pkg/\",\":@chainlink/=lib/chainlink/\",\":@ds-test/=lib/forge-std/lib/ds-test/src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@solmate/=lib/solmate/src/\",\":@uniswap/v3-core/=lib/v3-core/\",\":@uniswap/v3-periphery/=lib/v3-periphery/\",\":@uniswapV3C/=lib/v3-core/contracts/\",\":@uniswapV3P/=lib/v3-periphery/contracts/\",\":axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/\",\":balancer-v2-monorepo/=lib/balancer-v2-monorepo/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/\",\":solmate/=lib/solmate/src/\",\":v3-core/=lib/v3-core/contracts/\",\":v3-periphery/=lib/v3-periphery/contracts/\"]},\"sources\":{\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol\":{\"keccak256\":\"0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465\",\"dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a\"]},\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol\":{\"keccak256\":\"0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b\",\"dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG\"]},\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol\":{\"keccak256\":\"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\",\"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de\",\"dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929\",\"dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg\"]},\"lib/solmate/src/auth/Owned.sol\":{\"keccak256\":\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"]},\"lib/solmate/src/mixins/ERC4626.sol\":{\"keccak256\":\"0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1\",\"dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"]},\"lib/solmate/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4\",\"dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU\"]},\"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"keccak256\":\"0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e\",\"dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol\":{\"keccak256\":\"0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa\",\"dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea\",\"dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp\"]},\"lib/v3-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125\",\"dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd\"]},\"lib/v3-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c\",\"dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS\"]},\"lib/v3-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53\",\"dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM\"]},\"src/Registry.sol\":{\"keccak256\":\"0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2\",\"dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h\"]},\"src/base/Cellar.sol\":{\"keccak256\":\"0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744\",\"dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q\"]},\"src/interfaces/external/Frax/IFToken.sol\":{\"keccak256\":\"0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1\",\"dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK\"]},\"src/interfaces/external/IChainlinkAggregator.sol\":{\"keccak256\":\"0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac\",\"dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u\"]},\"src/interfaces/external/UniswapV3Pool.sol\":{\"keccak256\":\"0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb\",\"urls\":[\"bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9\",\"dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh\"]},\"src/modules/adaptors/BaseAdaptor.sol\":{\"keccak256\":\"0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840\",\"dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q\"]},\"src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol\":{\"keccak256\":\"0x905c1d4ea20df91489d635b74186279700ccb0b4ba61b1ad21fc40fe9c2e2669\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a9a12dd657a90c1072d0257e93fdd9bf7a7f8850c807aeb522e16af813b5e667\",\"dweb:/ipfs/QmSdSiCcgBVxPRNXZzXZ2kwtc9iPwKXjvdUtPGwWfqLppf\"]},\"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\":{\"keccak256\":\"0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c\",\"dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe\"]},\"src/modules/price-router/Extensions/Extension.sol\":{\"keccak256\":\"0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad\",\"dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4\"]},\"src/modules/price-router/PriceRouter.sol\":{\"keccak256\":\"0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e\",\"dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1\"]},\"src/utils/Math.sol\":{\"keccak256\":\"0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1\",\"dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949\"]},\"src/utils/Uint32Array.sol\":{\"keccak256\":\"0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218\",\"dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.21+commit.d9974bed" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_frax", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_healthFactor", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__ConstructorHealthFactorTooLow" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__ExternalReceiverBlocked" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "type": "error", + "name": "BaseAdaptor__PricingNotSupported" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__Slippage" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__UserDepositsNotAllowed" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__UserWithdrawsNotAllowed" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "type": "error", + "name": "CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "type": "error", + "name": "CollateralFTokenAdaptor__HealthFactorTooLow" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "FRAX", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_collateralToDeposit", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addCollateral" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "_adaptorData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "assetOf", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "assetsUsed", + "outputs": [ + { + "internalType": "contract ERC20[]", + "name": "assets", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "deposit" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "identifier", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "isDebt", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "minimumHealthFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_collateralAmount", + "type": "uint256" + }, + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeCollateral" + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeApproval" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "slippage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "withdraw" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "withdrawableFrom", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "addCollateral(address,uint256)": { + "params": { + "_collateralToDeposit": "The amount of collateral to add to Fraxlend Pair position", + "_fraxlendPair": "The specified Fraxlend Pair" + } + }, + "balanceOf(bytes)": { + "params": { + "adaptorData": "the collateral asset deposited into Fraxlend" + } + }, + "deposit(uint256,bytes,bytes)": { + "details": "configurationData is NOT used", + "params": { + "adaptorData": "adaptor data containing the abi encoded fraxlendPair", + "assets": "the amount of assets to provide as collateral on FraxLend" + } + }, + "identifier()": { + "details": "Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult." + }, + "removeCollateral(uint256,address)": { + "params": { + "_collateralAmount": "The amount of collateral to remove from fraxlend pair position", + "_fraxlendPair": "The specified Fraxlend Pair" + } + }, + "revokeApproval(address,address)": { + "params": { + "asset": "the ERC20 asset to revoke `spender`s approval for", + "spender": "the address to revoke approval for" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "FRAX()": { + "notice": "The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e." + }, + "addCollateral(address,uint256)": { + "notice": "Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing." + }, + "assetOf(bytes)": { + "notice": "Returns collateral asset" + }, + "assetsUsed(bytes)": { + "notice": "When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup." + }, + "balanceOf(bytes)": { + "notice": "Returns the cellar's balance of the collateralAsset position." + }, + "deposit(uint256,bytes,bytes)": { + "notice": "User deposits collateralToken to Fraxlend pair" + }, + "isDebt()": { + "notice": "This adaptor returns collateral, and not debt." + }, + "minimumHealthFactor()": { + "notice": "Minimum Health Factor enforced after every removeCollateral() strategist function call.Overwrites strategist set minimums if they are lower." + }, + "removeCollateral(uint256,address)": { + "notice": "Allows strategists to remove collateral from the respective cellar position on FraxLend." + }, + "revokeApproval(address,address)": { + "notice": "Allows strategists to zero out an approval for a given `asset`." + }, + "slippage()": { + "notice": "Max possible slippage when making a swap router swap." + }, + "withdraw(uint256,address,bytes,bytes)": { + "notice": "User withdraws are NOT allowed from this position. NOTE: collateral withdrawal calls directly from users disallowed for now." + }, + "withdrawableFrom(bytes,bytes)": { + "notice": "This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom. NOTE: collateral withdrawal calls directly from users disallowed for now." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/", + "@balancer/=lib/balancer-v2-monorepo/pkg/", + "@chainlink/=lib/chainlink/", + "@ds-test/=lib/forge-std/lib/ds-test/src/", + "@forge-std/=lib/forge-std/src/", + "@openzeppelin/=lib/openzeppelin-contracts/", + "@solmate/=lib/solmate/src/", + "@uniswap/v3-core/=lib/v3-core/", + "@uniswap/v3-periphery/=lib/v3-periphery/", + "@uniswapV3C/=lib/v3-core/contracts/", + "@uniswapV3P/=lib/v3-periphery/contracts/", + "axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/", + "balancer-v2-monorepo/=lib/balancer-v2-monorepo/", + "chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/forge-std/src/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/", + "solmate/=lib/solmate/src/", + "v3-core/=lib/v3-core/contracts/", + "v3-periphery/=lib/v3-periphery/contracts/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol": "CollateralFTokenAdaptor" + }, + "libraries": {} + }, + "sources": { + "lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol": { + "keccak256": "0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7", + "urls": [ + "bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465", + "dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a" + ], + "license": "MIT" + }, + "lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol": { + "keccak256": "0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2", + "urls": [ + "bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b", + "dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG" + ], + "license": "MIT" + }, + "lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol": { + "keccak256": "0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846", + "urls": [ + "bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7", + "dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol": { + "keccak256": "0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da", + "urls": [ + "bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708", + "dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol": { + "keccak256": "0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028", + "urls": [ + "bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf", + "dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": { + "keccak256": "0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb", + "urls": [ + "bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929", + "dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Owned.sol": { + "keccak256": "0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea", + "urls": [ + "bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4", + "dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/mixins/ERC4626.sol": { + "keccak256": "0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b", + "urls": [ + "bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1", + "dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/FixedPointMathLib.sol": { + "keccak256": "0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843", + "urls": [ + "bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9", + "dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a", + "urls": [ + "bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4", + "dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU" + ], + "license": "AGPL-3.0-only" + }, + "lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol": { + "keccak256": "0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968", + "urls": [ + "bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e", + "dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": { + "keccak256": "0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634", + "urls": [ + "bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5", + "dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": { + "keccak256": "0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5", + "urls": [ + "bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7", + "dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol": { + "keccak256": "0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b", + "urls": [ + "bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa", + "dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": { + "keccak256": "0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd", + "urls": [ + "bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03", + "dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": { + "keccak256": "0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7", + "urls": [ + "bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047", + "dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": { + "keccak256": "0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235", + "urls": [ + "bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735", + "dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": { + "keccak256": "0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43", + "urls": [ + "bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea", + "dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/libraries/FullMath.sol": { + "keccak256": "0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645", + "urls": [ + "bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125", + "dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd" + ], + "license": "MIT" + }, + "lib/v3-core/contracts/libraries/TickMath.sol": { + "keccak256": "0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129", + "urls": [ + "bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c", + "dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-periphery/contracts/libraries/OracleLibrary.sol": { + "keccak256": "0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b", + "urls": [ + "bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53", + "dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM" + ], + "license": "GPL-2.0-or-later" + }, + "src/Registry.sol": { + "keccak256": "0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd", + "urls": [ + "bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2", + "dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h" + ], + "license": "Apache-2.0" + }, + "src/base/Cellar.sol": { + "keccak256": "0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a", + "urls": [ + "bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744", + "dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q" + ], + "license": "Apache-2.0" + }, + "src/interfaces/external/Frax/IFToken.sol": { + "keccak256": "0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd", + "urls": [ + "bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1", + "dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK" + ], + "license": "MIT" + }, + "src/interfaces/external/IChainlinkAggregator.sol": { + "keccak256": "0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f", + "urls": [ + "bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac", + "dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u" + ], + "license": "Apache-2.0" + }, + "src/interfaces/external/UniswapV3Pool.sol": { + "keccak256": "0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb", + "urls": [ + "bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9", + "dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh" + ], + "license": null + }, + "src/modules/adaptors/BaseAdaptor.sol": { + "keccak256": "0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc", + "urls": [ + "bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840", + "dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q" + ], + "license": "Apache-2.0" + }, + "src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol": { + "keccak256": "0x905c1d4ea20df91489d635b74186279700ccb0b4ba61b1ad21fc40fe9c2e2669", + "urls": [ + "bzz-raw://a9a12dd657a90c1072d0257e93fdd9bf7a7f8850c807aeb522e16af813b5e667", + "dweb:/ipfs/QmSdSiCcgBVxPRNXZzXZ2kwtc9iPwKXjvdUtPGwWfqLppf" + ], + "license": "Apache-2.0" + }, + "src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol": { + "keccak256": "0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0", + "urls": [ + "bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c", + "dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe" + ], + "license": "Apache-2.0" + }, + "src/modules/price-router/Extensions/Extension.sol": { + "keccak256": "0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101", + "urls": [ + "bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad", + "dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4" + ], + "license": "Apache-2.0" + }, + "src/modules/price-router/PriceRouter.sol": { + "keccak256": "0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd", + "urls": [ + "bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e", + "dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1" + ], + "license": "Apache-2.0" + }, + "src/utils/Math.sol": { + "keccak256": "0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc", + "urls": [ + "bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1", + "dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949" + ], + "license": "Apache-2.0" + }, + "src/utils/Uint32Array.sol": { + "keccak256": "0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7", + "urls": [ + "bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218", + "dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf" + ], + "license": "Apache-2.0" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol", + "id": 78820, + "exportedSymbols": { + "BaseAdaptor": [ + 77495 + ], + "Cellar": [ + 61030 + ], + "CollateralFTokenAdaptor": [ + 78819 + ], + "ERC20": [ + 51130 + ], + "FraxlendHealthFactorLogic": [ + 80549 + ], + "IFToken": [ + 66209 + ], + "Math": [ + 92983 + ], + "PriceRouter": [ + 89874 + ], + "SafeTransferLib": [ + 51551 + ] + }, + "nodeType": "SourceUnit", + "src": "39:10987:191", + "nodes": [ + { + "id": 78367, + "nodeType": "PragmaDirective", + "src": "39:23:191", + "nodes": [], + "literals": [ + "solidity", + "0.8", + ".21" + ] + }, + { + "id": 78374, + "nodeType": "ImportDirective", + "src": "64:118:191", + "nodes": [], + "absolutePath": "src/modules/adaptors/BaseAdaptor.sol", + "file": "src/modules/adaptors/BaseAdaptor.sol", + "nameLocation": "-1:-1:-1", + "scope": 78820, + "sourceUnit": 77496, + "symbolAliases": [ + { + "foreign": { + "id": 78368, + "name": "BaseAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77495, + "src": "73:11:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78369, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51130, + "src": "86:5:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78370, + "name": "SafeTransferLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51551, + "src": "93:15:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78371, + "name": "Cellar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61030, + "src": "110:6:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78372, + "name": "PriceRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89874, + "src": "118:11:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78373, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 92983, + "src": "131:4:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 78376, + "nodeType": "ImportDirective", + "src": "183:67:191", + "nodes": [], + "absolutePath": "src/interfaces/external/Frax/IFToken.sol", + "file": "src/interfaces/external/Frax/IFToken.sol", + "nameLocation": "-1:-1:-1", + "scope": 78820, + "sourceUnit": 66210, + "symbolAliases": [ + { + "foreign": { + "id": 78375, + "name": "IFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66209, + "src": "192:7:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 78378, + "nodeType": "ImportDirective", + "src": "251:100:191", + "nodes": [], + "absolutePath": "src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol", + "file": "src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol", + "nameLocation": "-1:-1:-1", + "scope": 78820, + "sourceUnit": 80550, + "symbolAliases": [ + { + "foreign": { + "id": 78377, + "name": "FraxlendHealthFactorLogic", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80549, + "src": "260:25:191", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 78819, + "nodeType": "ContractDefinition", + "src": "527:10498:191", + "nodes": [ + { + "id": 78387, + "nodeType": "UsingForDirective", + "src": "608:32:191", + "nodes": [], + "global": false, + "libraryName": { + "id": 78384, + "name": "SafeTransferLib", + "nameLocations": [ + "614:15:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51551, + "src": "614:15:191" + }, + "typeName": { + "id": 78386, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78385, + "name": "ERC20", + "nameLocations": [ + "634:5:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "634:5:191" + }, + "referencedDeclaration": 51130, + "src": "634:5:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + } + }, + { + "id": 78390, + "nodeType": "UsingForDirective", + "src": "645:23:191", + "nodes": [], + "global": false, + "libraryName": { + "id": 78388, + "name": "Math", + "nameLocations": [ + "651:4:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 92983, + "src": "651:4:191" + }, + "typeName": { + "id": 78389, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "660:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 78395, + "nodeType": "ErrorDefinition", + "src": "1314:88:191", + "nodes": [], + "documentation": { + "id": 78391, + "nodeType": "StructuredDocumentation", + "src": "1215:94:191", + "text": " @notice Attempted to interact with an fraxlendPair the Cellar is not using." + }, + "errorSelector": "19cd4c5c", + "name": "CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked", + "nameLocation": "1320:59:191", + "parameters": { + "id": 78394, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78393, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "1388:12:191", + "nodeType": "VariableDeclaration", + "scope": 78395, + "src": "1380:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78392, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1380:7:191", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1379:22:191" + } + }, + { + "id": 78400, + "nodeType": "ErrorDefinition", + "src": "1512:72:191", + "nodes": [], + "documentation": { + "id": 78396, + "nodeType": "StructuredDocumentation", + "src": "1408:99:191", + "text": " @notice Removal of collateral causes Cellar Health Factor below what is required" + }, + "errorSelector": "f3fbed68", + "name": "CollateralFTokenAdaptor__HealthFactorTooLow", + "nameLocation": "1518:43:191", + "parameters": { + "id": 78399, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78398, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "1570:12:191", + "nodeType": "VariableDeclaration", + "scope": 78400, + "src": "1562:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78397, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1562:7:191", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1561:22:191" + } + }, + { + "id": 78404, + "nodeType": "VariableDeclaration", + "src": "1734:27:191", + "nodes": [], + "constant": false, + "documentation": { + "id": 78401, + "nodeType": "StructuredDocumentation", + "src": "1590:139:191", + "text": " @notice The FRAX contract on current network.\n @notice For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e." + }, + "functionSelector": "b0e4556f", + "mutability": "immutable", + "name": "FRAX", + "nameLocation": "1757:4:191", + "scope": 78819, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 78403, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78402, + "name": "ERC20", + "nameLocations": [ + "1734:5:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "1734:5:191" + }, + "referencedDeclaration": 51130, + "src": "1734:5:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "public" + }, + { + "id": 78407, + "nodeType": "VariableDeclaration", + "src": "1956:44:191", + "nodes": [], + "constant": false, + "documentation": { + "id": 78405, + "nodeType": "StructuredDocumentation", + "src": "1768:183:191", + "text": " @notice Minimum Health Factor enforced after every removeCollateral() strategist function call.\n @notice Overwrites strategist set minimums if they are lower." + }, + "functionSelector": "1caff8b1", + "mutability": "immutable", + "name": "minimumHealthFactor", + "nameLocation": "1981:19:191", + "scope": 78819, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78406, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "1956:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "id": 78429, + "nodeType": "FunctionDefinition", + "src": "2007:193:191", + "nodes": [], + "body": { + "id": 78428, + "nodeType": "Block", + "src": "2057:143:191", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 78415, + "name": "_healthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78411, + "src": "2105:13:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 78414, + "name": "_verifyConstructorMinimumHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77477, + "src": "2067:37:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 78416, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2067:52:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78417, + "nodeType": "ExpressionStatement", + "src": "2067:52:191" + }, + { + "expression": { + "id": 78422, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 78418, + "name": "FRAX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78404, + "src": "2129:4:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 78420, + "name": "_frax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78409, + "src": "2142:5:191", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78419, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51130, + "src": "2136:5:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$51130_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 78421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2136:12:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "src": "2129:19:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "id": 78423, + "nodeType": "ExpressionStatement", + "src": "2129:19:191" + }, + { + "expression": { + "id": 78426, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 78424, + "name": "minimumHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78407, + "src": "2158:19:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 78425, + "name": "_healthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78411, + "src": "2180:13:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "2158:35:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 78427, + "nodeType": "ExpressionStatement", + "src": "2158:35:191" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 78412, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78409, + "mutability": "mutable", + "name": "_frax", + "nameLocation": "2027:5:191", + "nodeType": "VariableDeclaration", + "scope": 78429, + "src": "2019:13:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78408, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2019:7:191", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78411, + "mutability": "mutable", + "name": "_healthFactor", + "nameLocation": "2042:13:191", + "nodeType": "VariableDeclaration", + "scope": 78429, + "src": "2034:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78410, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2034:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "2018:38:191" + }, + "returnParameters": { + "id": 78413, + "nodeType": "ParameterList", + "parameters": [], + "src": "2057:0:191" + }, + "scope": 78819, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 78444, + "nodeType": "FunctionDefinition", + "src": "2619:160:191", + "nodes": [], + "body": { + "id": 78443, + "nodeType": "Block", + "src": "2688:91:191", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "467261784c656e6420436f6c6c61746572616c2066546f6b656e56322041646170746f72205620302e31", + "id": 78439, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "2726:44:191", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_a3e36fea9d81853361a8e1a3961b5d42df7a08454fa872c8b22a65f8587e1e17", + "typeString": "literal_string \"FraxLend Collateral fTokenV2 Adaptor V 0.1\"" + }, + "value": "FraxLend Collateral fTokenV2 Adaptor V 0.1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_a3e36fea9d81853361a8e1a3961b5d42df7a08454fa872c8b22a65f8587e1e17", + "typeString": "literal_string \"FraxLend Collateral fTokenV2 Adaptor V 0.1\"" + } + ], + "expression": { + "id": 78437, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "2715:3:191", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 78438, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "2719:6:191", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "2715:10:191", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 78440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2715:56:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 78436, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "2705:9:191", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 78441, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "2705:67:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 78435, + "id": 78442, + "nodeType": "Return", + "src": "2698:74:191" + } + ] + }, + "baseFunctions": [ + 77261 + ], + "documentation": { + "id": 78430, + "nodeType": "StructuredDocumentation", + "src": "2318:296:191", + "text": " @dev Identifier unique to this adaptor for a shared registry.\n Normally the identifier would just be the address of this contract, but this\n Identifier is needed during Cellar Delegate Call Operations, so getting the address\n of the adaptor is more difficult." + }, + "functionSelector": "7998a1c4", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "identifier", + "nameLocation": "2628:10:191", + "overrides": { + "id": 78432, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "2661:8:191" + }, + "parameters": { + "id": 78431, + "nodeType": "ParameterList", + "parameters": [], + "src": "2638:2:191" + }, + "returnParameters": { + "id": 78435, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78434, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78444, + "src": "2679:7:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 78433, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "2679:7:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "2678:9:191" + }, + "scope": 78819, + "stateMutability": "pure", + "virtual": true, + "visibility": "public" + }, + { + "id": 78501, + "nodeType": "FunctionDefinition", + "src": "3183:564:191", + "nodes": [], + "body": { + "id": 78500, + "nodeType": "Block", + "src": "3272:475:191", + "nodes": [], + "statements": [ + { + "assignments": [ + 78457 + ], + "declarations": [ + { + "constant": false, + "id": 78457, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "3290:12:191", + "nodeType": "VariableDeclaration", + "scope": 78500, + "src": "3282:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78456, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78455, + "name": "IFToken", + "nameLocations": [ + "3282:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "3282:7:191" + }, + "referencedDeclaration": 66209, + "src": "3282:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "id": 78464, + "initialValue": { + "arguments": [ + { + "id": 78460, + "name": "adaptorData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78449, + "src": "3316:11:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 78461, + "name": "IFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66209, + "src": "3330:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "id": 78462, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "3329:9:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + ], + "expression": { + "id": 78458, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3305:3:191", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 78459, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3309:6:191", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "3305:10:191", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 78463, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3305:34:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3282:57:191" + }, + { + "assignments": [ + 78467 + ], + "declarations": [ + { + "constant": false, + "id": 78467, + "mutability": "mutable", + "name": "collateralToken", + "nameLocation": "3355:15:191", + "nodeType": "VariableDeclaration", + "scope": 78500, + "src": "3349:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 78466, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78465, + "name": "ERC20", + "nameLocations": [ + "3349:5:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "3349:5:191" + }, + "referencedDeclaration": 51130, + "src": "3349:5:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "internal" + } + ], + "id": 78471, + "initialValue": { + "arguments": [ + { + "id": 78469, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78457, + "src": "3397:12:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78468, + "name": "_userCollateralContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78781, + "src": "3373:23:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_contract$_ERC20_$51130_$", + "typeString": "function (contract IFToken) view returns (contract ERC20)" + } + }, + "id": 78470, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3373:37:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3349:61:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78473, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78457, + "src": "3437:12:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78472, + "name": "_validateFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78744, + "src": "3421:15:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (contract IFToken) view" + } + }, + "id": 78474, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3421:29:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78475, + "nodeType": "ExpressionStatement", + "src": "3421:29:191" + }, + { + "assignments": [ + 78477 + ], + "declarations": [ + { + "constant": false, + "id": 78477, + "mutability": "mutable", + "name": "fraxlendPairAddress", + "nameLocation": "3468:19:191", + "nodeType": "VariableDeclaration", + "scope": 78500, + "src": "3460:27:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78476, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3460:7:191", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 78482, + "initialValue": { + "arguments": [ + { + "id": 78480, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78457, + "src": "3498:12:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78479, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "3490:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78478, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3490:7:191", + "typeDescriptions": {} + } + }, + "id": 78481, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3490:21:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "3460:51:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78486, + "name": "fraxlendPairAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78477, + "src": "3549:19:191", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 78487, + "name": "assets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78447, + "src": "3570:6:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 78483, + "name": "collateralToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78467, + "src": "3521:15:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "id": 78485, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "3537:11:191", + "memberName": "safeApprove", + "nodeType": "MemberAccess", + "referencedDeclaration": 51550, + "src": "3521:27:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_ERC20_$51130_$", + "typeString": "function (contract ERC20,address,uint256)" + } + }, + "id": 78488, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3521:56:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78489, + "nodeType": "ExpressionStatement", + "src": "3521:56:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78491, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78457, + "src": "3603:12:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "id": 78492, + "name": "assets", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78447, + "src": "3617:6:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 78490, + "name": "_addCollateral", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78764, + "src": "3588:14:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$_t_uint256_$returns$__$", + "typeString": "function (contract IFToken,uint256)" + } + }, + "id": 78493, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3588:36:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78494, + "nodeType": "ExpressionStatement", + "src": "3588:36:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78496, + "name": "collateralToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78467, + "src": "3703:15:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + { + "id": 78497, + "name": "fraxlendPairAddress", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78477, + "src": "3720:19:191", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78495, + "name": "_revokeExternalApproval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77436, + "src": "3679:23:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$returns$__$", + "typeString": "function (contract ERC20,address)" + } + }, + "id": 78498, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3679:61:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78499, + "nodeType": "ExpressionStatement", + "src": "3679:61:191" + } + ] + }, + "baseFunctions": [ + 77305 + ], + "documentation": { + "id": 78445, + "nodeType": "StructuredDocumentation", + "src": "2905:273:191", + "text": " @notice User deposits collateralToken to Fraxlend pair\n @param assets the amount of assets to provide as collateral on FraxLend\n @param adaptorData adaptor data containing the abi encoded fraxlendPair\n @dev configurationData is NOT used" + }, + "functionSelector": "69445c31", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nameLocation": "3192:7:191", + "overrides": { + "id": 78453, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3263:8:191" + }, + "parameters": { + "id": 78452, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78447, + "mutability": "mutable", + "name": "assets", + "nameLocation": "3208:6:191", + "nodeType": "VariableDeclaration", + "scope": 78501, + "src": "3200:14:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78446, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3200:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78449, + "mutability": "mutable", + "name": "adaptorData", + "nameLocation": "3229:11:191", + "nodeType": "VariableDeclaration", + "scope": 78501, + "src": "3216:24:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78448, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3216:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78451, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78501, + "src": "3242:12:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78450, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3242:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3199:56:191" + }, + "returnParameters": { + "id": 78454, + "nodeType": "ParameterList", + "parameters": [], + "src": "3272:0:191" + }, + "scope": 78819, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 78518, + "nodeType": "FunctionDefinition", + "src": "3916:147:191", + "nodes": [], + "body": { + "id": 78517, + "nodeType": "Block", + "src": "4001:62:191", + "nodes": [], + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 78514, + "name": "BaseAdaptor__UserWithdrawsNotAllowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77236, + "src": "4018:36:191", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 78515, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4018:38:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78516, + "nodeType": "RevertStatement", + "src": "4011:45:191" + } + ] + }, + "baseFunctions": [ + 77317 + ], + "documentation": { + "id": 78502, + "nodeType": "StructuredDocumentation", + "src": "3753:158:191", + "text": " @notice User withdraws are NOT allowed from this position.\n NOTE: collateral withdrawal calls directly from users disallowed for now." + }, + "functionSelector": "c9111bd7", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nameLocation": "3925:8:191", + "overrides": { + "id": 78512, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3992:8:191" + }, + "parameters": { + "id": 78511, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78504, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78518, + "src": "3934:7:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78503, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3934:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78506, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78518, + "src": "3943:7:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78505, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3943:7:191", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78508, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78518, + "src": "3952:12:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78507, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3952:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78510, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78518, + "src": "3966:12:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78509, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "3966:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "3933:46:191" + }, + "returnParameters": { + "id": 78513, + "nodeType": "ParameterList", + "parameters": [], + "src": "4001:0:191" + }, + "scope": 78819, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 78532, + "nodeType": "FunctionDefinition", + "src": "4318:118:191", + "nodes": [], + "body": { + "id": 78531, + "nodeType": "Block", + "src": "4411:25:191", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 78529, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4428:1:191", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 78528, + "id": 78530, + "nodeType": "Return", + "src": "4421:8:191" + } + ] + }, + "baseFunctions": [ + 77335 + ], + "documentation": { + "id": 78519, + "nodeType": "StructuredDocumentation", + "src": "4069:244:191", + "text": " @notice This position is a debt position, and user withdraws are not allowed so\n this position must return 0 for withdrawableFrom.\n NOTE: collateral withdrawal calls directly from users disallowed for now." + }, + "functionSelector": "fa50e5d2", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdrawableFrom", + "nameLocation": "4327:16:191", + "overrides": { + "id": 78525, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4384:8:191" + }, + "parameters": { + "id": 78524, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78521, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78532, + "src": "4344:12:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78520, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4344:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78523, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78532, + "src": "4358:12:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78522, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4358:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4343:28:191" + }, + "returnParameters": { + "id": 78528, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78527, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78532, + "src": "4402:7:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78526, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4402:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4401:9:191" + }, + "scope": 78819, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 78558, + "nodeType": "FunctionDefinition", + "src": "4606:223:191", + "nodes": [], + "body": { + "id": 78557, + "nodeType": "Block", + "src": "4690:139:191", + "nodes": [], + "statements": [ + { + "assignments": [ + 78543 + ], + "declarations": [ + { + "constant": false, + "id": 78543, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "4708:12:191", + "nodeType": "VariableDeclaration", + "scope": 78557, + "src": "4700:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78542, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78541, + "name": "IFToken", + "nameLocations": [ + "4700:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "4700:7:191" + }, + "referencedDeclaration": 66209, + "src": "4700:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "id": 78550, + "initialValue": { + "arguments": [ + { + "id": 78546, + "name": "adaptorData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78535, + "src": "4734:11:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 78547, + "name": "IFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66209, + "src": "4748:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "id": 78548, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "4747:9:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + ], + "expression": { + "id": 78544, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "4723:3:191", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 78545, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "4727:6:191", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "4723:10:191", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 78549, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4723:34:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4700:57:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78552, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78543, + "src": "4797:12:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "expression": { + "id": 78553, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "4811:3:191", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 78554, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "4815:6:191", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "4811:10:191", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78551, + "name": "_userCollateralBalance", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80514, + "src": "4774:22:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$_t_address_$returns$_t_uint256_$", + "typeString": "function (contract IFToken,address) view returns (uint256)" + } + }, + "id": 78555, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4774:48:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 78540, + "id": 78556, + "nodeType": "Return", + "src": "4767:55:191" + } + ] + }, + "baseFunctions": [ + 77325 + ], + "documentation": { + "id": 78533, + "nodeType": "StructuredDocumentation", + "src": "4442:159:191", + "text": " @notice Returns the cellar's balance of the collateralAsset position.\n @param adaptorData the collateral asset deposited into Fraxlend" + }, + "functionSelector": "78415365", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nameLocation": "4615:9:191", + "overrides": { + "id": 78537, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4663:8:191" + }, + "parameters": { + "id": 78536, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78535, + "mutability": "mutable", + "name": "adaptorData", + "nameLocation": "4638:11:191", + "nodeType": "VariableDeclaration", + "scope": 78558, + "src": "4625:24:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78534, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4625:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4624:26:191" + }, + "returnParameters": { + "id": 78540, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78539, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78558, + "src": "4681:7:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78538, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4681:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4680:9:191" + }, + "scope": 78819, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 78583, + "nodeType": "FunctionDefinition", + "src": "4891:210:191", + "nodes": [], + "body": { + "id": 78582, + "nodeType": "Block", + "src": "4972:129:191", + "nodes": [], + "statements": [ + { + "assignments": [ + 78570 + ], + "declarations": [ + { + "constant": false, + "id": 78570, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "4990:12:191", + "nodeType": "VariableDeclaration", + "scope": 78582, + "src": "4982:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78569, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78568, + "name": "IFToken", + "nameLocations": [ + "4982:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "4982:7:191" + }, + "referencedDeclaration": 66209, + "src": "4982:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "id": 78577, + "initialValue": { + "arguments": [ + { + "id": 78573, + "name": "_adaptorData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78561, + "src": "5016:12:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 78574, + "name": "IFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66209, + "src": "5031:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "id": 78575, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5030:9:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + ], + "expression": { + "id": 78571, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "5005:3:191", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 78572, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5009:6:191", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "5005:10:191", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 78576, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5005:35:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "4982:58:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78579, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78570, + "src": "5081:12:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78578, + "name": "_userCollateralContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78781, + "src": "5057:23:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_contract$_ERC20_$51130_$", + "typeString": "function (contract IFToken) view returns (contract ERC20)" + } + }, + "id": 78580, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5057:37:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "functionReturnParameters": 78567, + "id": 78581, + "nodeType": "Return", + "src": "5050:44:191" + } + ] + }, + "baseFunctions": [ + 77344 + ], + "documentation": { + "id": 78559, + "nodeType": "StructuredDocumentation", + "src": "4835:51:191", + "text": " @notice Returns collateral asset" + }, + "functionSelector": "e170a9bf", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "assetOf", + "nameLocation": "4900:7:191", + "overrides": { + "id": 78563, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4947:8:191" + }, + "parameters": { + "id": 78562, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78561, + "mutability": "mutable", + "name": "_adaptorData", + "nameLocation": "4921:12:191", + "nodeType": "VariableDeclaration", + "scope": 78583, + "src": "4908:25:191", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 78560, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4908:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4907:27:191" + }, + "returnParameters": { + "id": 78567, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78566, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78583, + "src": "4965:5:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 78565, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78564, + "name": "ERC20", + "nameLocations": [ + "4965:5:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "4965:5:191" + }, + "referencedDeclaration": 51130, + "src": "4965:5:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "internal" + } + ], + "src": "4964:7:191" + }, + "scope": 78819, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 78593, + "nodeType": "FunctionDefinition", + "src": "5185:83:191", + "nodes": [], + "body": { + "id": 78592, + "nodeType": "Block", + "src": "5239:29:191", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "66616c7365", + "id": 78590, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5256:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + "functionReturnParameters": 78589, + "id": 78591, + "nodeType": "Return", + "src": "5249:12:191" + } + ] + }, + "baseFunctions": [ + 77378 + ], + "documentation": { + "id": 78584, + "nodeType": "StructuredDocumentation", + "src": "5107:73:191", + "text": " @notice This adaptor returns collateral, and not debt." + }, + "functionSelector": "89353a09", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isDebt", + "nameLocation": "5194:6:191", + "overrides": { + "id": 78586, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5215:8:191" + }, + "parameters": { + "id": 78585, + "nodeType": "ParameterList", + "parameters": [], + "src": "5200:2:191" + }, + "returnParameters": { + "id": 78589, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78588, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 78593, + "src": "5233:4:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 78587, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5233:4:191", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5232:6:191" + }, + "scope": 78819, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 78645, + "nodeType": "FunctionDefinition", + "src": "5675:583:191", + "nodes": [], + "body": { + "id": 78644, + "nodeType": "Block", + "src": "5758:500:191", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 78603, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78597, + "src": "5784:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78602, + "name": "_validateFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78744, + "src": "5768:15:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (contract IFToken) view" + } + }, + "id": 78604, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5768:30:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78605, + "nodeType": "ExpressionStatement", + "src": "5768:30:191" + }, + { + "assignments": [ + 78608 + ], + "declarations": [ + { + "constant": false, + "id": 78608, + "mutability": "mutable", + "name": "_collateralToken", + "nameLocation": "5814:16:191", + "nodeType": "VariableDeclaration", + "scope": 78644, + "src": "5808:22:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 78607, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78606, + "name": "ERC20", + "nameLocations": [ + "5808:5:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "5808:5:191" + }, + "referencedDeclaration": 51130, + "src": "5808:5:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "internal" + } + ], + "id": 78612, + "initialValue": { + "arguments": [ + { + "id": 78610, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78597, + "src": "5857:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78609, + "name": "_userCollateralContract", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78781, + "src": "5833:23:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_contract$_ERC20_$51130_$", + "typeString": "function (contract IFToken) view returns (contract ERC20)" + } + }, + "id": 78611, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5833:38:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5808:63:191" + }, + { + "assignments": [ + 78614 + ], + "declarations": [ + { + "constant": false, + "id": 78614, + "mutability": "mutable", + "name": "amountToDeposit", + "nameLocation": "5890:15:191", + "nodeType": "VariableDeclaration", + "scope": 78644, + "src": "5882:23:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78613, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5882:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 78619, + "initialValue": { + "arguments": [ + { + "id": 78616, + "name": "_collateralToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78608, + "src": "5922:16:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + { + "id": 78617, + "name": "_collateralToDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78599, + "src": "5940:20:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 78615, + "name": "_maxAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77408, + "src": "5908:13:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$51130_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (contract ERC20,uint256) view returns (uint256)" + } + }, + "id": 78618, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5908:53:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5882:79:191" + }, + { + "assignments": [ + 78621 + ], + "declarations": [ + { + "constant": false, + "id": 78621, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "5979:12:191", + "nodeType": "VariableDeclaration", + "scope": 78644, + "src": "5971:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78620, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5971:7:191", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "id": 78626, + "initialValue": { + "arguments": [ + { + "id": 78624, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78597, + "src": "6002:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78623, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "5994:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78622, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "5994:7:191", + "typeDescriptions": {} + } + }, + "id": 78625, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5994:22:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5971:45:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78630, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78621, + "src": "6055:12:191", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "id": 78631, + "name": "amountToDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78614, + "src": "6069:15:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 78627, + "name": "_collateralToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78608, + "src": "6026:16:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "id": 78629, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "6043:11:191", + "memberName": "safeApprove", + "nodeType": "MemberAccess", + "referencedDeclaration": 51550, + "src": "6026:28:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_ERC20_$51130_$", + "typeString": "function (contract ERC20,address,uint256)" + } + }, + "id": 78632, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6026:59:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78633, + "nodeType": "ExpressionStatement", + "src": "6026:59:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78635, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78597, + "src": "6110:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "id": 78636, + "name": "amountToDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78614, + "src": "6125:15:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 78634, + "name": "_addCollateral", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78764, + "src": "6095:14:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$_t_uint256_$returns$__$", + "typeString": "function (contract IFToken,uint256)" + } + }, + "id": 78637, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6095:46:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78638, + "nodeType": "ExpressionStatement", + "src": "6095:46:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78640, + "name": "_collateralToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78608, + "src": "6220:16:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + { + "id": 78641, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78621, + "src": "6238:12:191", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78639, + "name": "_revokeExternalApproval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77436, + "src": "6196:23:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$returns$__$", + "typeString": "function (contract ERC20,address)" + } + }, + "id": 78642, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6196:55:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78643, + "nodeType": "ExpressionStatement", + "src": "6196:55:191" + } + ] + }, + "documentation": { + "id": 78594, + "nodeType": "StructuredDocumentation", + "src": "5391:279:191", + "text": " @notice Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing.\n @param _fraxlendPair The specified Fraxlend Pair\n @param _collateralToDeposit The amount of collateral to add to Fraxlend Pair position" + }, + "functionSelector": "6d75b9ee", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "addCollateral", + "nameLocation": "5684:13:191", + "parameters": { + "id": 78600, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78597, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "5706:13:191", + "nodeType": "VariableDeclaration", + "scope": 78645, + "src": "5698:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78596, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78595, + "name": "IFToken", + "nameLocations": [ + "5698:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "5698:7:191" + }, + "referencedDeclaration": 66209, + "src": "5698:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78599, + "mutability": "mutable", + "name": "_collateralToDeposit", + "nameLocation": "5729:20:191", + "nodeType": "VariableDeclaration", + "scope": 78645, + "src": "5721:28:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78598, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5721:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5697:53:191" + }, + "returnParameters": { + "id": 78601, + "nodeType": "ParameterList", + "parameters": [], + "src": "5758:0:191" + }, + "scope": 78819, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 78686, + "nodeType": "FunctionDefinition", + "src": "6535:586:191", + "nodes": [], + "body": { + "id": 78685, + "nodeType": "Block", + "src": "6618:503:191", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 78655, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78651, + "src": "6644:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78654, + "name": "_validateFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78744, + "src": "6628:15:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (contract IFToken) view" + } + }, + "id": 78656, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6628:30:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78657, + "nodeType": "ExpressionStatement", + "src": "6628:30:191" + }, + { + "expression": { + "arguments": [ + { + "id": 78659, + "name": "_collateralAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78648, + "src": "6715:17:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 78660, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78651, + "src": "6734:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78658, + "name": "_removeCollateral", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78801, + "src": "6697:17:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (uint256,contract IFToken)" + } + }, + "id": 78661, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6697:51:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78662, + "nodeType": "ExpressionStatement", + "src": "6697:51:191" + }, + { + "assignments": [ + 78664 + ], + "declarations": [ + { + "constant": false, + "id": 78664, + "mutability": "mutable", + "name": "_exchangeRate", + "nameLocation": "6766:13:191", + "nodeType": "VariableDeclaration", + "scope": 78685, + "src": "6758:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78663, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6758:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 78668, + "initialValue": { + "arguments": [ + { + "id": 78666, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78651, + "src": "6803:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78665, + "name": "_getExchangeRateInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78818, + "src": "6782:20:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$returns$_t_uint256_$", + "typeString": "function (contract IFToken) returns (uint256)" + } + }, + "id": 78667, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6782:35:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6758:59:191" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 78675, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 78669, + "name": "minimumHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78407, + "src": "6944:19:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "components": [ + { + "arguments": [ + { + "id": 78671, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78651, + "src": "6984:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "id": 78672, + "name": "_exchangeRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78664, + "src": "6999:13:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 78670, + "name": "_getHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80457, + "src": "6967:16:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (contract IFToken,uint256) view returns (uint256)" + } + }, + "id": 78673, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6967:46:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 78674, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6966:48:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6944:70:191", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 78684, + "nodeType": "IfStatement", + "src": "6940:175:191", + "trueBody": { + "id": 78683, + "nodeType": "Block", + "src": "7016:99:191", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 78679, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78651, + "src": "7089:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78678, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7081:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78677, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7081:7:191", + "typeDescriptions": {} + } + }, + "id": 78680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7081:22:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78676, + "name": "CollateralFTokenAdaptor__HealthFactorTooLow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78400, + "src": "7037:43:191", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", + "typeString": "function (address) pure" + } + }, + "id": 78681, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7037:67:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78682, + "nodeType": "RevertStatement", + "src": "7030:74:191" + } + ] + } + } + ] + }, + "documentation": { + "id": 78646, + "nodeType": "StructuredDocumentation", + "src": "6264:266:191", + "text": " @notice Allows strategists to remove collateral from the respective cellar position on FraxLend.\n @param _collateralAmount The amount of collateral to remove from fraxlend pair position\n @param _fraxlendPair The specified Fraxlend Pair" + }, + "functionSelector": "d41ddc96", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "removeCollateral", + "nameLocation": "6544:16:191", + "parameters": { + "id": 78652, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78648, + "mutability": "mutable", + "name": "_collateralAmount", + "nameLocation": "6569:17:191", + "nodeType": "VariableDeclaration", + "scope": 78686, + "src": "6561:25:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78647, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6561:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78651, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "6596:13:191", + "nodeType": "VariableDeclaration", + "scope": 78686, + "src": "6588:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78650, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78649, + "name": "IFToken", + "nameLocations": [ + "6588:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "6588:7:191" + }, + "referencedDeclaration": 66209, + "src": "6588:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "6560:50:191" + }, + "returnParameters": { + "id": 78653, + "nodeType": "ParameterList", + "parameters": [], + "src": "6618:0:191" + }, + "scope": 78819, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 78744, + "nodeType": "FunctionDefinition", + "src": "7417:459:191", + "nodes": [], + "body": { + "id": 78743, + "nodeType": "Block", + "src": "7487:389:191", + "nodes": [], + "statements": [ + { + "assignments": [ + 78694 + ], + "declarations": [ + { + "constant": false, + "id": 78694, + "mutability": "mutable", + "name": "positionHash", + "nameLocation": "7505:12:191", + "nodeType": "VariableDeclaration", + "scope": 78743, + "src": "7497:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 78693, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "7497:7:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 78710, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 78698, + "name": "identifier", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 78444 + ], + "referencedDeclaration": 78444, + "src": "7541:10:191", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 78699, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7541:12:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "hexValue": "66616c7365", + "id": 78700, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7555:5:191", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 78705, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78690, + "src": "7581:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78704, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7573:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78703, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7573:7:191", + "typeDescriptions": {} + } + }, + "id": 78706, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7573:22:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 78701, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "7562:3:191", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 78702, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7566:6:191", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "7562:10:191", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 78707, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7562:34:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 78696, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "7530:3:191", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 78697, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "7534:6:191", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "7530:10:191", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 78708, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7530:67:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 78695, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "7520:9:191", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 78709, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7520:78:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7497:101:191" + }, + { + "assignments": [ + 78712 + ], + "declarations": [ + { + "constant": false, + "id": 78712, + "mutability": "mutable", + "name": "positionId", + "nameLocation": "7615:10:191", + "nodeType": "VariableDeclaration", + "scope": 78743, + "src": "7608:17:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 78711, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "7608:6:191", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 78724, + "initialValue": { + "arguments": [ + { + "id": 78722, + "name": "positionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78694, + "src": "7689:12:191", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 78716, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7643:4:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + ], + "id": 78715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7635:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78714, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7635:7:191", + "typeDescriptions": {} + } + }, + "id": 78717, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7635:13:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78713, + "name": "Cellar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61030, + "src": "7628:6:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Cellar_$61030_$", + "typeString": "type(contract Cellar)" + } + }, + "id": 78718, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7628:21:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Cellar_$61030", + "typeString": "contract Cellar" + } + }, + "id": 78719, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7650:8:191", + "memberName": "registry", + "nodeType": "MemberAccess", + "referencedDeclaration": 58935, + "src": "7628:30:191", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Registry_$57893_$", + "typeString": "function () view external returns (contract Registry)" + } + }, + "id": 78720, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7628:32:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Registry_$57893", + "typeString": "contract Registry" + } + }, + "id": 78721, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7661:27:191", + "memberName": "getPositionHashToPositionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 57601, + "src": "7628:60:191", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint32_$", + "typeString": "function (bytes32) view external returns (uint32)" + } + }, + "id": 78723, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7628:74:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7608:94:191" + }, + { + "condition": { + "id": 78734, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "7716:49:191", + "subExpression": { + "arguments": [ + { + "id": 78732, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78712, + "src": "7754:10:191", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 78728, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7732:4:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + ], + "id": 78727, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7724:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78726, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7724:7:191", + "typeDescriptions": {} + } + }, + "id": 78729, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7724:13:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78725, + "name": "Cellar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61030, + "src": "7717:6:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Cellar_$61030_$", + "typeString": "type(contract Cellar)" + } + }, + "id": 78730, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7717:21:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Cellar_$61030", + "typeString": "contract Cellar" + } + }, + "id": 78731, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "7739:14:191", + "memberName": "isPositionUsed", + "nodeType": "MemberAccess", + "referencedDeclaration": 58190, + "src": "7717:36:191", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view external returns (bool)" + } + }, + "id": 78733, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7717:48:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 78742, + "nodeType": "IfStatement", + "src": "7712:157:191", + "trueBody": { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 78738, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78690, + "src": "7854:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 78737, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7846:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78736, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7846:7:191", + "typeDescriptions": {} + } + }, + "id": 78739, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7846:22:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78735, + "name": "CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78395, + "src": "7786:59:191", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", + "typeString": "function (address) pure" + } + }, + "id": 78740, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7786:83:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78741, + "nodeType": "RevertStatement", + "src": "7779:90:191" + } + } + ] + }, + "documentation": { + "id": 78687, + "nodeType": "StructuredDocumentation", + "src": "7240:172:191", + "text": " @notice Validates that a given fToken is set up as a position in the Cellar.\n @dev This function uses `address(this)` as the address of the Cellar." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_validateFToken", + "nameLocation": "7426:15:191", + "parameters": { + "id": 78691, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78690, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "7450:13:191", + "nodeType": "VariableDeclaration", + "scope": 78744, + "src": "7442:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78689, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78688, + "name": "IFToken", + "nameLocations": [ + "7442:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "7442:7:191" + }, + "referencedDeclaration": 66209, + "src": "7442:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "7441:23:191" + }, + "returnParameters": { + "id": 78692, + "nodeType": "ParameterList", + "parameters": [], + "src": "7487:0:191" + }, + "scope": 78819, + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "id": 78764, + "nodeType": "FunctionDefinition", + "src": "9640:157:191", + "nodes": [], + "body": { + "id": 78763, + "nodeType": "Block", + "src": "9721:76:191", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 78756, + "name": "amountToDeposit", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78750, + "src": "9759:15:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 78759, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9784:4:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + ], + "id": 78758, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9776:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78757, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9776:7:191", + "typeDescriptions": {} + } + }, + "id": 78760, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9776:13:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 78753, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78748, + "src": "9731:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 78755, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9745:13:191", + "memberName": "addCollateral", + "nodeType": "MemberAccess", + "referencedDeclaration": 66094, + "src": "9731:27:191", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address) external" + } + }, + "id": 78761, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9731:59:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78762, + "nodeType": "ExpressionStatement", + "src": "9731:59:191" + } + ] + }, + "documentation": { + "id": 78745, + "nodeType": "StructuredDocumentation", + "src": "9398:237:191", + "text": " @notice Increment collateral amount in cellar account within fraxlend pair\n @param _fraxlendPair The specified Fraxlend Pair\n @param amountToDeposit The amount of collateral to add to Fraxlend Pair position" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addCollateral", + "nameLocation": "9649:14:191", + "parameters": { + "id": 78751, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78748, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "9672:13:191", + "nodeType": "VariableDeclaration", + "scope": 78764, + "src": "9664:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78747, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78746, + "name": "IFToken", + "nameLocations": [ + "9664:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "9664:7:191" + }, + "referencedDeclaration": 66209, + "src": "9664:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78750, + "mutability": "mutable", + "name": "amountToDeposit", + "nameLocation": "9695:15:191", + "nodeType": "VariableDeclaration", + "scope": 78764, + "src": "9687:23:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78749, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "9687:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "9663:48:191" + }, + "returnParameters": { + "id": 78752, + "nodeType": "ParameterList", + "parameters": [], + "src": "9721:0:191" + }, + "scope": 78819, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "internal" + }, + { + "id": 78781, + "nodeType": "FunctionDefinition", + "src": "10002:178:191", + "nodes": [], + "body": { + "id": 78780, + "nodeType": "Block", + "src": "10115:65:191", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 78775, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78768, + "src": "10138:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 78776, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10152:18:191", + "memberName": "collateralContract", + "nodeType": "MemberAccess", + "referencedDeclaration": 66099, + "src": "10138:32:191", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 78777, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10138:34:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78774, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51130, + "src": "10132:5:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$51130_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 78778, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10132:41:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "functionReturnParameters": 78773, + "id": 78779, + "nodeType": "Return", + "src": "10125:48:191" + } + ] + }, + "documentation": { + "id": 78765, + "nodeType": "StructuredDocumentation", + "src": "9803:194:191", + "text": " @notice Get current collateral contract for caller in fraxlend pair\n @param _fraxlendPair The specified Fraxlend Pair\n @return collateralContract for fraxlend pair" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_userCollateralContract", + "nameLocation": "10011:23:191", + "parameters": { + "id": 78769, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78768, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "10043:13:191", + "nodeType": "VariableDeclaration", + "scope": 78781, + "src": "10035:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78767, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78766, + "name": "IFToken", + "nameLocations": [ + "10035:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "10035:7:191" + }, + "referencedDeclaration": 66209, + "src": "10035:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "10034:23:191" + }, + "returnParameters": { + "id": 78773, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78772, + "mutability": "mutable", + "name": "collateralContract", + "nameLocation": "10095:18:191", + "nodeType": "VariableDeclaration", + "scope": 78781, + "src": "10089:24:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 78771, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78770, + "name": "ERC20", + "nameLocations": [ + "10089:5:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "10089:5:191" + }, + "referencedDeclaration": 51130, + "src": "10089:5:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "internal" + } + ], + "src": "10088:26:191" + }, + "scope": 78819, + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "id": 78801, + "nodeType": "FunctionDefinition", + "src": "10435:175:191", + "nodes": [], + "body": { + "id": 78800, + "nodeType": "Block", + "src": "10529:81:191", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 78793, + "name": "_collateralAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78784, + "src": "10570:17:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 78796, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "10597:4:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_CollateralFTokenAdaptor_$78819", + "typeString": "contract CollateralFTokenAdaptor" + } + ], + "id": 78795, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "10589:7:191", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 78794, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "10589:7:191", + "typeDescriptions": {} + } + }, + "id": 78797, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10589:13:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 78790, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78787, + "src": "10539:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 78792, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10553:16:191", + "memberName": "removeCollateral", + "nodeType": "MemberAccess", + "referencedDeclaration": 66106, + "src": "10539:30:191", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address) external" + } + }, + "id": 78798, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10539:64:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78799, + "nodeType": "ExpressionStatement", + "src": "10539:64:191" + } + ] + }, + "documentation": { + "id": 78782, + "nodeType": "StructuredDocumentation", + "src": "10186:244:191", + "text": " @notice Decrement collateral amount in cellar account within fraxlend pair\n @param _collateralAmount The amount of collateral to remove from fraxlend pair position\n @param _fraxlendPair The specified Fraxlend Pair" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_removeCollateral", + "nameLocation": "10444:17:191", + "parameters": { + "id": 78788, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78784, + "mutability": "mutable", + "name": "_collateralAmount", + "nameLocation": "10470:17:191", + "nodeType": "VariableDeclaration", + "scope": 78801, + "src": "10462:25:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78783, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10462:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78787, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "10497:13:191", + "nodeType": "VariableDeclaration", + "scope": 78801, + "src": "10489:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78786, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78785, + "name": "IFToken", + "nameLocations": [ + "10489:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "10489:7:191" + }, + "referencedDeclaration": 66209, + "src": "10489:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "10461:50:191" + }, + "returnParameters": { + "id": 78789, + "nodeType": "ParameterList", + "parameters": [], + "src": "10529:0:191" + }, + "scope": 78819, + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "id": 78818, + "nodeType": "FunctionDefinition", + "src": "10841:182:191", + "nodes": [], + "body": { + "id": 78817, + "nodeType": "Block", + "src": "10942:81:191", + "nodes": [], + "statements": [ + { + "expression": { + "id": 78815, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 78810, + "name": "exchangeRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78808, + "src": "10952:12:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 78811, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78805, + "src": "10967:13:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 78812, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "10981:16:191", + "memberName": "exchangeRateInfo", + "nodeType": "MemberAccess", + "referencedDeclaration": 66208, + "src": "10967:30:191", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_ExchangeRateInfo_$66202_memory_ptr_$", + "typeString": "function () view external returns (struct IFToken.ExchangeRateInfo memory)" + } + }, + "id": 78813, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "10967:32:191", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_ExchangeRateInfo_$66202_memory_ptr", + "typeString": "struct IFToken.ExchangeRateInfo memory" + } + }, + "id": 78814, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11000:16:191", + "memberName": "highExchangeRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 66201, + "src": "10967:49:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "10952:64:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 78816, + "nodeType": "ExpressionStatement", + "src": "10952:64:191" + } + ] + }, + "documentation": { + "id": 78802, + "nodeType": "StructuredDocumentation", + "src": "10616:220:191", + "text": " @notice Caller calls `updateExchangeRate()` on specified FraxlendV2 Pair\n @param _fraxlendPair The specified FraxLendPair\n @return exchangeRate needed to calculate the current health factor" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getExchangeRateInfo", + "nameLocation": "10850:20:191", + "parameters": { + "id": 78806, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78805, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "10879:13:191", + "nodeType": "VariableDeclaration", + "scope": 78818, + "src": "10871:21:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 78804, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78803, + "name": "IFToken", + "nameLocations": [ + "10871:7:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "10871:7:191" + }, + "referencedDeclaration": 66209, + "src": "10871:7:191", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "10870:23:191" + }, + "returnParameters": { + "id": 78809, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78808, + "mutability": "mutable", + "name": "exchangeRate", + "nameLocation": "10928:12:191", + "nodeType": "VariableDeclaration", + "scope": 78818, + "src": "10920:20:191", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78807, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "10920:7:191", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "10919:22:191" + }, + "scope": 78819, + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 78380, + "name": "BaseAdaptor", + "nameLocations": [ + "563:11:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 77495, + "src": "563:11:191" + }, + "id": 78381, + "nodeType": "InheritanceSpecifier", + "src": "563:11:191" + }, + { + "baseName": { + "id": 78382, + "name": "FraxlendHealthFactorLogic", + "nameLocations": [ + "576:25:191" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 80549, + "src": "576:25:191" + }, + "id": 78383, + "nodeType": "InheritanceSpecifier", + "src": "576:25:191" + } + ], + "canonicalName": "CollateralFTokenAdaptor", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 78379, + "nodeType": "StructuredDocumentation", + "src": "353:173:191", + "text": " @title FraxLend Collateral Adaptor\n @notice Allows addition and removal of collateralAssets to Fraxlend pairs for a Cellar.\n @author crispymangoes, 0xEinCodes" + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 78819, + 80549, + 77495 + ], + "name": "CollateralFTokenAdaptor", + "nameLocation": "536:23:191", + "scope": 78820, + "usedErrors": [ + 77230, + 77233, + 77236, + 77239, + 77244, + 77247, + 78395, + 78400 + ], + "usedEvents": [] + } + ], + "license": "Apache-2.0" + }, + "id": 191 +} \ No newline at end of file diff --git a/steward_abi/abi/DebtFTokenAdaptorV1.json b/steward_abi/abi/DebtFTokenAdaptorV1.json new file mode 100644 index 00000000..ce8460a7 --- /dev/null +++ b/steward_abi/abi/DebtFTokenAdaptorV1.json @@ -0,0 +1,7979 @@ +{ + "abi": [ + { + "inputs": [ + { + "internalType": "bool", + "name": "_accountForInterest", + "type": "bool" + }, + { + "internalType": "address", + "name": "_frax", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_healthFactor", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "BaseAdaptor__ConstructorHealthFactorTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__ExternalReceiverBlocked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "BaseAdaptor__PricingNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__Slippage", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__UserDepositsNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__UserWithdrawsNotAllowed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "name": "DebtFTokenAdaptor__CannotRepayNoDebt", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "name": "DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "name": "DebtFTokenAdaptor__HealthFactorTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "ACCOUNT_FOR_INTEREST", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "FRAX", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "assetOf", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "assetsUsed", + "outputs": [ + { + "internalType": "contract ERC20[]", + "name": "assets", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "fraxlendPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountToBorrow", + "type": "uint256" + } + ], + "name": "borrowFromFraxlend", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + } + ], + "name": "callAddInterest", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "identifier", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "isDebt", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "minimumHealthFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_debtTokenRepayAmount", + "type": "uint256" + } + ], + "name": "repayFraxlendDebt", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "revokeApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slippage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "withdrawableFrom", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } + ], + "bytecode": { + "object": "0x60e060405234801561001057600080fd5b506040516115cb3803806115cb83398101604081905261002f9161007e565b61003881610052565b91151560a0526001600160a01b031660805260c0526100d2565b670e92596fd629000081101561007b576040516397ed5f4160e01b815260040160405180910390fd5b50565b60008060006060848603121561009357600080fd5b835180151581146100a357600080fd5b60208501519093506001600160a01b03811681146100c057600080fd5b80925050604084015190509250925092565b60805160a05160c0516114bc61010f6000396000818161015b01526102cd01526000818161011f015261037e0152600061021b01526114bc6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806389353a0911610097578063c9111bd711610066578063c9111bd714610255578063d3bfe76a14610268578063e170a9bf1461027b578063fa50e5d21461028e57600080fd5b806389353a09146101dc5780638b9b9d40146101e3578063aeffddde146101f6578063b0e4556f1461021657600080fd5b806369445c31116100d357806369445c311461019b5780636dd659fd146101ae57806378415365146101c15780637998a1c4146101d457600080fd5b80631586ffbb14610105578063198775571461011a5780631caff8b1146101565780633e032a3b1461018b575b600080fd5b610118610113366004610df0565b6102a1565b005b6101417f000000000000000000000000000000000000000000000000000000000000000081565b60405190151581526020015b60405180910390f35b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161014d565b604051612328815260200161014d565b6101186101a9366004610ee8565b610320565b6101186101bc366004610f55565b610339565b61017d6101cf366004610f72565b61034e565b61017d6103aa565b6001610141565b6101186101f1366004610df0565b610413565b610209610204366004610f72565b6104c1565b60405161014d9190610fa7565b61023d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014d565b610118610263366004610ff4565b610524565b610118610276366004611074565b61053d565b61023d610289366004610f72565b610556565b61017d61029c3660046110ad565b61057f565b6102aa82610588565b6102b48183610742565b60006102bf836107a6565b90506102cb8382610814565b7f0000000000000000000000000000000000000000000000000000000000000000111561031b5760405163c4bbf5fd60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b505050565b604051633204ed5b60e21b815260040160405180910390fd5b61034281610588565b61034b816108e1565b50565b600080828060200190518101906103659190611111565b905060006103738233610956565b90506103a2828260007f00000000000000000000000000000000000000000000000000000000000000006109c5565b949350505050565b60006040516020016103f89060208082526022908201527f467261784c656e642064656274546f6b656e56322041646170746f722056203160408201526102e360f41b606082015260800190565b60405160208183030381529060405280519060200120905090565b61041c82610588565b600061042783610a4b565b905060006104358284610aaf565b90506000610447858360006001610b30565b905060006104558630610956565b905080600003610483576040516378d1784d60e01b81526001600160a01b0387166004820152602401610312565b8181101561048f578091505b6104a56001600160a01b03851687600019610b70565b6104af8683610bed565b6104b98487610c20565b505050505050565b604080516001808252818301909252606091602080830190803683370190505090506104ec82610556565b816000815181106104ff576104ff61112e565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6105526001600160a01b038316826000610b70565b5050565b6000808280602001905181019061056d9190611111565b905061057881610a4b565b9392505050565b60005b92915050565b60006105926103aa565b604080516001600160a01b03851660208201526001910160408051601f19818403018152908290526105c8939291602001611144565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106449190611111565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161067191815260200190565b602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b291906111bc565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a91906111d7565b61031b57604051637d6840ef60e11b81526001600160a01b0384166004820152602401610312565b6040516372f89d8b60e11b815260048101839052600060248201523060448201526001600160a01b0382169063e5f13b16906064015b600060405180830381600087803b15801561079257600080fd5b505af11580156104b9573d6000803e3d6000fd5b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a91906111f9565b6080015192915050565b6000806108218430610956565b9050600061083285836001806109c5565b90508060000361084e57670e92596fd629000092505050610582565b600061085a8630610caf565b9050806000036108705760009350505050610582565b60008061087c88610ce1565b909250905060008383836108908b8961126d565b61089a9190611292565b6108a4919061126d565b6108ae9190611292565b905060006108bb8a610d58565b905060006108d282670de0b6b3a764000085610dbc565b9b9a5050505050505050505050565b604051631c6c959760e01b8152600060048201526001600160a01b03821690631c6c959790602401610180604051808303816000875af1158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061134a565b50505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df906024015b602060405180830381865afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190611410565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b571906064015b602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190611410565b95945050505050565b6000816001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611111565b60006000198203610b29576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190611410565b9050610582565b5080610582565b604051631c2591d360e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690631c2591d390606401610a01565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610be75760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610312565b50505050565b604051633d417d2d60e01b8152600481018290523060248201526001600160a01b03831690633d417d2d90604401610778565b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190611410565b1115610552576105526001600160a01b038316826000610b70565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af306290602401610984565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190611429565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611410565b828202811515841585830485141716610dd457600080fd5b0492915050565b6001600160a01b038116811461034b57600080fd5b60008060408385031215610e0357600080fd5b8235610e0e81610ddb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610e5557610e55610e1c565b60405290565b600082601f830112610e6c57600080fd5b813567ffffffffffffffff80821115610e8757610e87610e1c565b604051601f8301601f19908116603f01168101908282118183101715610eaf57610eaf610e1c565b81604052838152866020858801011115610ec857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610efd57600080fd5b83359250602084013567ffffffffffffffff80821115610f1c57600080fd5b610f2887838801610e5b565b93506040860135915080821115610f3e57600080fd5b50610f4b86828701610e5b565b9150509250925092565b600060208284031215610f6757600080fd5b813561057881610ddb565b600060208284031215610f8457600080fd5b813567ffffffffffffffff811115610f9b57600080fd5b6103a284828501610e5b565b6020808252825182820181905260009190848201906040850190845b81811015610fe85783516001600160a01b031683529284019291840191600101610fc3565b50909695505050505050565b6000806000806080858703121561100a57600080fd5b84359350602085013561101c81610ddb565b9250604085013567ffffffffffffffff8082111561103957600080fd5b61104588838901610e5b565b9350606087013591508082111561105b57600080fd5b5061106887828801610e5b565b91505092959194509250565b6000806040838503121561108757600080fd5b823561109281610ddb565b915060208301356110a281610ddb565b809150509250929050565b600080604083850312156110c057600080fd5b823567ffffffffffffffff808211156110d857600080fd5b6110e486838701610e5b565b935060208501359150808211156110fa57600080fd5b5061110785828601610e5b565b9150509250929050565b60006020828403121561112357600080fd5b815161057881610ddb565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b8181101561118057858101830151858201608001528201611164565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff811681146111b757600080fd5b919050565b6000602082840312156111ce57600080fd5b610578826111a3565b6000602082840312156111e957600080fd5b8151801515811461057857600080fd5b600060a0828403121561120b57600080fd5b611213610e32565b825161121e81610ddb565b815261122c602084016111a3565b602082015260408301516001600160b81b038116811461124b57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b808202811582820484141761058257634e487b7160e01b600052601160045260246000fd5b6000826112af57634e487b7160e01b600052601260045260246000fd5b500490565b805167ffffffffffffffff811681146111b757600080fd5b80516fffffffffffffffffffffffffffffffff811681146111b757600080fd5b6000604082840312156112fe57600080fd5b6040516040810181811067ffffffffffffffff8211171561132157611321610e1c565b604052905080611330836112cc565b815261133e602084016112cc565b60208201525092915050565b60008060008060008086880361018081121561136557600080fd5b87519650602088015195506040880151945060a0605f198201121561138957600080fd5b50611392610e32565b61139e606089016111a3565b81526113ac608089016111a3565b60208201526113bd60a089016112b4565b60408201526113ce60c089016112b4565b60608201526113df60e089016112b4565b608082015292506113f48861010089016112ec565b91506114048861014089016112ec565b90509295509295509295565b60006020828403121561142257600080fd5b5051919050565b600080600080600080600080610100898b03121561144657600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea26469706673582212203690b6a89e1aeb08c96997e57ad247970fb247b9d96f4c840cbb091955085fb264736f6c63430008150033", + "sourceMap": "603:13583:193:-:0;;;3006:271;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3092:52;3130:13;3092:37;:52::i;:::-;3154:42;;;;;-1:-1:-1;;;;;3206:19:193;;;3235:35;;603:13583;;8769:233:187;2786:7;8873:19;:57;8869:126;;;8951:44;;-1:-1:-1;;;8951:44:187;;;;;;;;;;;8869:126;8769:233;:::o;14:513:266:-;99:6;107;115;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;216:9;210:16;269:5;262:13;255:21;248:5;245:32;235:60;;291:1;288;281:12;235:60;364:2;349:18;;343:25;314:5;;-1:-1:-1;;;;;;399:33:266;;387:46;;377:74;;447:1;444;437:12;377:74;470:7;460:17;;;517:2;506:9;502:18;496:25;486:35;;14:513;;;;;:::o;:::-;603:13583:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c806389353a0911610097578063c9111bd711610066578063c9111bd714610255578063d3bfe76a14610268578063e170a9bf1461027b578063fa50e5d21461028e57600080fd5b806389353a09146101dc5780638b9b9d40146101e3578063aeffddde146101f6578063b0e4556f1461021657600080fd5b806369445c31116100d357806369445c311461019b5780636dd659fd146101ae57806378415365146101c15780637998a1c4146101d457600080fd5b80631586ffbb14610105578063198775571461011a5780631caff8b1146101565780633e032a3b1461018b575b600080fd5b610118610113366004610df0565b6102a1565b005b6101417f000000000000000000000000000000000000000000000000000000000000000081565b60405190151581526020015b60405180910390f35b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161014d565b604051612328815260200161014d565b6101186101a9366004610ee8565b610320565b6101186101bc366004610f55565b610339565b61017d6101cf366004610f72565b61034e565b61017d6103aa565b6001610141565b6101186101f1366004610df0565b610413565b610209610204366004610f72565b6104c1565b60405161014d9190610fa7565b61023d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014d565b610118610263366004610ff4565b610524565b610118610276366004611074565b61053d565b61023d610289366004610f72565b610556565b61017d61029c3660046110ad565b61057f565b6102aa82610588565b6102b48183610742565b60006102bf836107a6565b90506102cb8382610814565b7f0000000000000000000000000000000000000000000000000000000000000000111561031b5760405163c4bbf5fd60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b505050565b604051633204ed5b60e21b815260040160405180910390fd5b61034281610588565b61034b816108e1565b50565b600080828060200190518101906103659190611111565b905060006103738233610956565b90506103a2828260007f00000000000000000000000000000000000000000000000000000000000000006109c5565b949350505050565b60006040516020016103f89060208082526022908201527f467261784c656e642064656274546f6b656e56322041646170746f722056203160408201526102e360f41b606082015260800190565b60405160208183030381529060405280519060200120905090565b61041c82610588565b600061042783610a4b565b905060006104358284610aaf565b90506000610447858360006001610b30565b905060006104558630610956565b905080600003610483576040516378d1784d60e01b81526001600160a01b0387166004820152602401610312565b8181101561048f578091505b6104a56001600160a01b03851687600019610b70565b6104af8683610bed565b6104b98487610c20565b505050505050565b604080516001808252818301909252606091602080830190803683370190505090506104ec82610556565b816000815181106104ff576104ff61112e565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6105526001600160a01b038316826000610b70565b5050565b6000808280602001905181019061056d9190611111565b905061057881610a4b565b9392505050565b60005b92915050565b60006105926103aa565b604080516001600160a01b03851660208201526001910160408051601f19818403018152908290526105c8939291602001611144565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106449190611111565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161067191815260200190565b602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b291906111bc565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a91906111d7565b61031b57604051637d6840ef60e11b81526001600160a01b0384166004820152602401610312565b6040516372f89d8b60e11b815260048101839052600060248201523060448201526001600160a01b0382169063e5f13b16906064015b600060405180830381600087803b15801561079257600080fd5b505af11580156104b9573d6000803e3d6000fd5b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a91906111f9565b6080015192915050565b6000806108218430610956565b9050600061083285836001806109c5565b90508060000361084e57670e92596fd629000092505050610582565b600061085a8630610caf565b9050806000036108705760009350505050610582565b60008061087c88610ce1565b909250905060008383836108908b8961126d565b61089a9190611292565b6108a4919061126d565b6108ae9190611292565b905060006108bb8a610d58565b905060006108d282670de0b6b3a764000085610dbc565b9b9a5050505050505050505050565b604051631c6c959760e01b8152600060048201526001600160a01b03821690631c6c959790602401610180604051808303816000875af1158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061134a565b50505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df906024015b602060405180830381865afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190611410565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b571906064015b602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190611410565b95945050505050565b6000816001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611111565b60006000198203610b29576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190611410565b9050610582565b5080610582565b604051631c2591d360e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690631c2591d390606401610a01565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610be75760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610312565b50505050565b604051633d417d2d60e01b8152600481018290523060248201526001600160a01b03831690633d417d2d90604401610778565b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190611410565b1115610552576105526001600160a01b038316826000610b70565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af306290602401610984565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190611429565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611410565b828202811515841585830485141716610dd457600080fd5b0492915050565b6001600160a01b038116811461034b57600080fd5b60008060408385031215610e0357600080fd5b8235610e0e81610ddb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610e5557610e55610e1c565b60405290565b600082601f830112610e6c57600080fd5b813567ffffffffffffffff80821115610e8757610e87610e1c565b604051601f8301601f19908116603f01168101908282118183101715610eaf57610eaf610e1c565b81604052838152866020858801011115610ec857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610efd57600080fd5b83359250602084013567ffffffffffffffff80821115610f1c57600080fd5b610f2887838801610e5b565b93506040860135915080821115610f3e57600080fd5b50610f4b86828701610e5b565b9150509250925092565b600060208284031215610f6757600080fd5b813561057881610ddb565b600060208284031215610f8457600080fd5b813567ffffffffffffffff811115610f9b57600080fd5b6103a284828501610e5b565b6020808252825182820181905260009190848201906040850190845b81811015610fe85783516001600160a01b031683529284019291840191600101610fc3565b50909695505050505050565b6000806000806080858703121561100a57600080fd5b84359350602085013561101c81610ddb565b9250604085013567ffffffffffffffff8082111561103957600080fd5b61104588838901610e5b565b9350606087013591508082111561105b57600080fd5b5061106887828801610e5b565b91505092959194509250565b6000806040838503121561108757600080fd5b823561109281610ddb565b915060208301356110a281610ddb565b809150509250929050565b600080604083850312156110c057600080fd5b823567ffffffffffffffff808211156110d857600080fd5b6110e486838701610e5b565b935060208501359150808211156110fa57600080fd5b5061110785828601610e5b565b9150509250929050565b60006020828403121561112357600080fd5b815161057881610ddb565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b8181101561118057858101830151858201608001528201611164565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff811681146111b757600080fd5b919050565b6000602082840312156111ce57600080fd5b610578826111a3565b6000602082840312156111e957600080fd5b8151801515811461057857600080fd5b600060a0828403121561120b57600080fd5b611213610e32565b825161121e81610ddb565b815261122c602084016111a3565b602082015260408301516001600160b81b038116811461124b57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b808202811582820484141761058257634e487b7160e01b600052601160045260246000fd5b6000826112af57634e487b7160e01b600052601260045260246000fd5b500490565b805167ffffffffffffffff811681146111b757600080fd5b80516fffffffffffffffffffffffffffffffff811681146111b757600080fd5b6000604082840312156112fe57600080fd5b6040516040810181811067ffffffffffffffff8211171561132157611321610e1c565b604052905080611330836112cc565b815261133e602084016112cc565b60208201525092915050565b60008060008060008086880361018081121561136557600080fd5b87519650602088015195506040880151945060a0605f198201121561138957600080fd5b50611392610e32565b61139e606089016111a3565b81526113ac608089016111a3565b60208201526113bd60a089016112b4565b60408201526113ce60c089016112b4565b60608201526113df60e089016112b4565b608082015292506113f48861010089016112ec565b91506114048861014089016112ec565b90509295509295509295565b60006020828403121561142257600080fd5b5051919050565b600080600080600080600080610100898b03121561144657600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea26469706673582212203690b6a89e1aeb08c96997e57ad247970fb247b9d96f4c840cbb091955085fb264736f6c63430008150033", + "sourceMap": "603:13583:193:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6289:560;;;;;;:::i;:::-;;:::i;:::-;;2755:42;;;;;;;;670:14:266;;663:22;645:41;;633:2;618:18;2755:42:193;;;;;;;;2955:44;;;;;;;;843:25:266;;;831:2;816:18;2955:44:193;697:177:266;2441:78:187;;;2507:5;1023:42:266;;1011:2;996:18;2441:78:187;879:192:266;4056:136:193;;;;;;:::i;:::-;;:::i;8942:139::-;;;;;;:::i;:::-;;:::i;4933:323::-;;;;;;:::i;:::-;;:::i;3696:152::-;;;:::i;5683:82::-;5754:4;5683:82;;7262:1157;;;;;;:::i;:::-;;:::i;5960:180:187:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2403:27:193:-;;;;;;;;-1:-1:-1;;;;;4437:32:266;;;4419:51;;4407:2;4392:18;2403:27:193;4258:218:266;4280:147:193;;;;;;:::i;:::-;;:::i;9230:107:187:-;;;;;;:::i;:::-;;:::i;5390:210:193:-;;;;;;:::i;:::-;;:::i;4601:118::-;;;;;;:::i;:::-;;:::i;6289:560::-;6380:29;6396:12;6380:15;:29::i;:::-;6419:42;6432:14;6448:12;6419;:42::i;:::-;6525:21;6549:34;6570:12;6549:20;:34::i;:::-;6525:58;;6703:45;6720:12;6734:13;6703:16;:45::i;:::-;6680:19;:69;6676:167;;;6772:60;;-1:-1:-1;;;6772:60:193;;-1:-1:-1;;;;;4437:32:266;;6772:60:193;;;4419:51:266;4392:18;;6772:60:193;;;;;;;;6676:167;6370:479;6289:560;;:::o;4056:136::-;4148:37;;-1:-1:-1;;;4148:37:193;;;;;;;;;;;8942:139;9007:30;9023:13;9007:15;:30::i;:::-;9047:27;9060:13;9047:12;:27::i;:::-;8942:139;:::o;4933:323::-;5008:7;5027:20;5061:11;5050:34;;;;;;;;;;;;:::i;:::-;5027:57;;5094:20;5117:43;5135:12;5149:10;5117:17;:43::i;:::-;5094:66;;5177:72;5193:12;5207;5221:5;5228:20;5177:15;:72::i;:::-;5170:79;4933:323;-1:-1:-1;;;;4933:323:193:o;3696:152::-;3756:7;3792:48;;;;;;6900:2:266;6882:21;;;6939:2;6919:18;;;6912:30;6978:34;6973:2;6958:18;;6951:62;-1:-1:-1;;;7044:2:266;7029:18;;7022:32;7086:3;7071:19;;6698:398;3792:48:193;;;;;;;;;;;;;3782:59;;;;;;3775:66;;3696:152;:::o;7262:1157::-;7360:30;7376:13;7360:15;:30::i;:::-;7400:18;7427:33;7446:13;7427:18;:33::i;:::-;7400:61;;7471:24;7498:50;7512:12;7526:21;7498:13;:50::i;:::-;7471:77;;7558:21;7582:60;7597:13;7612:16;7630:5;7637:4;7582:14;:60::i;:::-;7558:84;;7652:27;7682:47;7700:13;7723:4;7682:17;:47::i;:::-;7652:77;;7792:19;7815:1;7792:24;7788:97;;7825:60;;-1:-1:-1;;;7825:60:193;;-1:-1:-1;;;;;4437:32:266;;7825:60:193;;;4419:51:266;4392:18;;7825:60:193;4258:218:266;7788:97:193;8137:13;8115:19;:35;8111:101;;;8182:19;8166:35;;8111:101;8221:67;-1:-1:-1;;;;;8221:24:193;;8254:13;-1:-1:-1;;8221:24:193;:67::i;:::-;8299:41;8311:13;8326;8299:11;:41::i;:::-;8351:61;8375:12;8397:13;8351:23;:61::i;:::-;7350:1069;;;;7262:1157;;:::o;5960:180:187:-;6077:14;;;6089:1;6077:14;;;;;;;;;6035:21;;6077:14;;;;;;;;;;;-1:-1:-1;6077:14:187;6068:23;;6113:20;6121:11;6113:7;:20::i;:::-;6101:6;6108:1;6101:9;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;6101:32:187;;;-1:-1:-1;;;;;6101:32:187;;;;;5960:180;;;:::o;4280:147:193:-;4382:38;;-1:-1:-1;;;4382:38:193;;;;;;;;;;;9230:107:187;9301:29;-1:-1:-1;;;;;9301:17:187;;9319:7;9328:1;9301:17;:29::i;:::-;9230:107;;:::o;5390:210:193:-;5463:5;5480:20;5514:11;5503:34;;;;;;;;;;;;:::i;:::-;5480:57;;5560:32;5579:12;5560:18;:32::i;:::-;5547:46;5390:210;-1:-1:-1;;;5390:210:193:o;4601:118::-;4685:7;4601:118;;;;;:::o;9326:444::-;9398:20;9442:12;:10;:12::i;:::-;9462:34;;;-1:-1:-1;;;;;4437:32:266;;9462:34:193;;;4419:51:266;9456:4:193;;4392:18:266;9462:34:193;;;-1:-1:-1;;9462:34:193;;;;;;;;;;9431:66;;;;9462:34;9431:66;;:::i;:::-;;;;;;;;;;;;;9421:77;;;;;;9398:100;;9508:17;9543:4;-1:-1:-1;;;;;9528:30:193;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9528:60:193;;9589:12;9528:74;;;;;;;;;;;;;843:25:266;;831:2;816:18;;697:177;9528:74:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9617:48;;-1:-1:-1;;;9617:48:193;;1053:10:266;1041:23;;9617:48:193;;;1023:42:266;9508:94:193;;-1:-1:-1;9632:4:193;;9617:36;;996:18:266;;9617:48:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9612:151;;9686:77;;-1:-1:-1;;;9686:77:193;;-1:-1:-1;;;;;4437:32:266;;9686:77:193;;;4419:51:266;4392:18;;9686:77:193;4258:218:266;13115:312:193;13210:58;;-1:-1:-1;;;13210:58:193;;;;;9295:25:266;;;13251:1:193;9336:18:266;;;9329:34;13262:4:193;9379:18:266;;;9372:60;-1:-1:-1;;;;;13210:25:193;;;;;9268:18:266;;13210:58:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13658:182;13737:20;13784:13;-1:-1:-1;;;;;13784:30:193;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;13658:182;-1:-1:-1;;13658:182:193:o;1173:1164:197:-;1276:7;1333:22;1358:47;1376:13;1399:4;1358:17;:47::i;:::-;1333:72;;1415:23;1441:58;1457:13;1472:14;1488:4;1494;1441:15;:58::i;:::-;1415:84;;1638:15;1657:1;1638:20;1634:40;;1667:7;1660:14;;;;;;1634:40;1684:25;1712:52;1735:13;1758:4;1712:22;:52::i;:::-;1684:80;;1778:17;1799:1;1778:22;1774:36;;1809:1;1802:8;;;;;;;1774:36;1822:21;1845:26;1875:28;1889:13;1875;:28::i;:::-;1821:82;;-1:-1:-1;1821:82:197;-1:-1:-1;1913:26:197;2031:17;1821:82;;1945:31;1963:13;1945:15;:31;:::i;:::-;1944:54;;;;:::i;:::-;1943:72;;;;:::i;:::-;1942:106;;;;:::i;:::-;1913:135;;2099:26;2128:22;2136:13;2128:7;:22::i;:::-;2099:51;-1:-1:-1;2191:17:197;2211:55;2099:51;2241:4;2247:18;2211:29;:55::i;:::-;2191:75;1173:1164;-1:-1:-1;;;;;;;;;;;1173:1164:197:o;11969:109:193:-;12040:31;;-1:-1:-1;;;12040:31:193;;12065:5;12040:31;;;645:41:266;-1:-1:-1;;;;;12040:24:193;;;;;618:18:266;;12040:31:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;11969:109;:::o;3388:257:197:-;3552:37;;-1:-1:-1;;;3552:37:197;;-1:-1:-1;;;;;4437:32:266;;;3552:37:197;;;4419:51:266;3506:27:197;;3552:30;;;;;;4392:18:266;;3552:37:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2906:270::-;3104:65;;-1:-1:-1;;;3104:65:197;;;;;13149:25:266;;;13217:14;;13210:22;13190:18;;;13183:50;13276:14;;13269:22;13249:18;;;13242:50;3078:7:197;;-1:-1:-1;;;;;3104:28:197;;;;;13122:18:266;;3104:65:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3097:72;2906:270;-1:-1:-1;;;;;2906:270:197:o;11570:142:193:-;11652:13;11684;-1:-1:-1;;;;;11684:19:193;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7842:207:187:-;7925:7;-1:-1:-1;;7948:6:187;:27;7944:98;;7984:30;;-1:-1:-1;;;7984:30:187;;8008:4;7984:30;;;4419:51:266;-1:-1:-1;;;;;7984:15:187;;;;;4392:18:266;;7984:30:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7977:37;;;;7944:98;-1:-1:-1;8036:6:187;8029:13;;12642:248:193;12829:54;;-1:-1:-1;;;12829:54:193;;;;;13149:25:266;;;13217:14;;13210:22;13190:18;;;13183:50;13276:14;;13269:22;13249:18;;;13242:50;12803:7:193;;-1:-1:-1;;;;;12829:20:193;;;;;13122:18:266;;12829:54:193;12959:339:266;4455:1497:65;4566:12;4736:4;4730:11;-1:-1:-1;;;4859:17:65;4852:93;4992:2;4988:1;4969:17;4965:25;4958:37;5072:6;5067:2;5048:17;5044:26;5037:42;5874:2;5871:1;5867:2;5848:17;5845:1;5838:5;5831;5826:51;5395:16;5388:24;5382:2;5364:16;5361:24;5357:1;5353;5347:8;5344:15;5340:46;5337:76;5137:754;5126:765;;;5919:7;5911:34;;;;-1:-1:-1;;;5911:34:65;;13770:2:266;5911:34:65;;;13752:21:266;13809:2;13789:18;;;13782:30;-1:-1:-1;;;13828:18:266;;;13821:44;13882:18;;5911:34:65;13568:338:266;5911:34:65;4556:1396;4455:1497;;;:::o;14029:155:193:-;14123:54;;-1:-1:-1;;;14123:54:193;;;;;14085:25:266;;;14171:4:193;14126:18:266;;;14119:60;-1:-1:-1;;;;;14123:24:193;;;;;14058:18:266;;14123:54:193;13911:274:266;8184:167:187;8270:39;;-1:-1:-1;;;8270:39:187;;8294:4;8270:39;;;14402:34:266;-1:-1:-1;;;;;14472:15:266;;;14452:18;;;14445:43;8312:1:187;;8270:15;;;;;;14337:18:266;;8270:39:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;8266:78;;;8315:29;-1:-1:-1;;;;;8315:17:187;;8333:7;8342:1;8315:17;:29::i;3894:216:197:-;4061:42;;-1:-1:-1;;;4061:42:197;;-1:-1:-1;;;;;4437:32:266;;;4061:42:197;;;4419:51:266;4017:25:197;;4061:35;;;;;;4392:18:266;;4061:42:197;4258:218:266;4116:237:197;4207:21;4230:26;4318:13;-1:-1:-1;;;;;4318:26:197;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4268:78:197;;;;-1:-1:-1;4116:237:197;;-1:-1:-1;;;;;;;4116:237:197:o;4359:135::-;4430:14;4465:13;-1:-1:-1;;;;;4465:20:197;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1331:505:225:-;1507:9;;;1638:19;;1631:27;1663:9;;1677;;;1674:16;;1660:31;1627:65;1617:121;;1722:1;1719;1712:12;1617:121;1801:19;;1331:505;-1:-1:-1;;1331:505:225:o;14:140:266:-;-1:-1:-1;;;;;98:31:266;;88:42;;78:70;;144:1;141;134:12;159:341;244:6;252;305:2;293:9;284:7;280:23;276:32;273:52;;;321:1;318;311:12;273:52;360:9;347:23;379:40;413:5;379:40;:::i;:::-;438:5;490:2;475:18;;;;462:32;;-1:-1:-1;;;159:341:266:o;1076:127::-;1137:10;1132:3;1128:20;1125:1;1118:31;1168:4;1165:1;1158:15;1192:4;1189:1;1182:15;1208:247;1275:2;1269:9;1317:3;1305:16;;1351:18;1336:34;;1372:22;;;1333:62;1330:88;;;1398:18;;:::i;:::-;1434:2;1427:22;1208:247;:::o;1460:718::-;1502:5;1555:3;1548:4;1540:6;1536:17;1532:27;1522:55;;1573:1;1570;1563:12;1522:55;1609:6;1596:20;1635:18;1672:2;1668;1665:10;1662:36;;;1678:18;;:::i;:::-;1753:2;1747:9;1721:2;1807:13;;-1:-1:-1;;1803:22:266;;;1827:2;1799:31;1795:40;1783:53;;;1851:18;;;1871:22;;;1848:46;1845:72;;;1897:18;;:::i;:::-;1937:10;1933:2;1926:22;1972:2;1964:6;1957:18;2018:3;2011:4;2006:2;1998:6;1994:15;1990:26;1987:35;1984:55;;;2035:1;2032;2025:12;1984:55;2099:2;2092:4;2084:6;2080:17;2073:4;2065:6;2061:17;2048:54;2146:1;2139:4;2134:2;2126:6;2122:15;2118:26;2111:37;2166:6;2157:15;;;;;;1460:718;;;;:::o;2183:607::-;2278:6;2286;2294;2347:2;2335:9;2326:7;2322:23;2318:32;2315:52;;;2363:1;2360;2353:12;2315:52;2399:9;2386:23;2376:33;;2460:2;2449:9;2445:18;2432:32;2483:18;2524:2;2516:6;2513:14;2510:34;;;2540:1;2537;2530:12;2510:34;2563:49;2604:7;2595:6;2584:9;2580:22;2563:49;:::i;:::-;2553:59;;2665:2;2654:9;2650:18;2637:32;2621:48;;2694:2;2684:8;2681:16;2678:36;;;2710:1;2707;2700:12;2678:36;;2733:51;2776:7;2765:8;2754:9;2750:24;2733:51;:::i;:::-;2723:61;;;2183:607;;;;;:::o;2795:273::-;2871:6;2924:2;2912:9;2903:7;2899:23;2895:32;2892:52;;;2940:1;2937;2930:12;2892:52;2979:9;2966:23;2998:40;3032:5;2998:40;:::i;3073:320::-;3141:6;3194:2;3182:9;3173:7;3169:23;3165:32;3162:52;;;3210:1;3207;3200:12;3162:52;3250:9;3237:23;3283:18;3275:6;3272:30;3269:50;;;3315:1;3312;3305:12;3269:50;3338:49;3379:7;3370:6;3359:9;3355:22;3338:49;:::i;3580:673::-;3766:2;3818:21;;;3888:13;;3791:18;;;3910:22;;;3737:4;;3766:2;3989:15;;;;3963:2;3948:18;;;3737:4;4032:195;4046:6;4043:1;4040:13;4032:195;;;4111:13;;-1:-1:-1;;;;;4107:39:266;4095:52;;4202:15;;;;4167:12;;;;4143:1;4061:9;4032:195;;;-1:-1:-1;4244:3:266;;3580:673;-1:-1:-1;;;;;;3580:673:266:o;4481:752::-;4585:6;4593;4601;4609;4662:3;4650:9;4641:7;4637:23;4633:33;4630:53;;;4679:1;4676;4669:12;4630:53;4715:9;4702:23;4692:33;;4775:2;4764:9;4760:18;4747:32;4788:40;4822:5;4788:40;:::i;:::-;4847:5;-1:-1:-1;4903:2:266;4888:18;;4875:32;4926:18;4956:14;;;4953:34;;;4983:1;4980;4973:12;4953:34;5006:49;5047:7;5038:6;5027:9;5023:22;5006:49;:::i;:::-;4996:59;;5108:2;5097:9;5093:18;5080:32;5064:48;;5137:2;5127:8;5124:16;5121:36;;;5153:1;5150;5143:12;5121:36;;5176:51;5219:7;5208:8;5197:9;5193:24;5176:51;:::i;:::-;5166:61;;;4481:752;;;;;;;:::o;5238:421::-;5321:6;5329;5382:2;5370:9;5361:7;5357:23;5353:32;5350:52;;;5398:1;5395;5388:12;5350:52;5437:9;5424:23;5456:40;5490:5;5456:40;:::i;:::-;5515:5;-1:-1:-1;5572:2:266;5557:18;;5544:32;5585:42;5544:32;5585:42;:::i;:::-;5646:7;5636:17;;;5238:421;;;;;:::o;5664:539::-;5750:6;5758;5811:2;5799:9;5790:7;5786:23;5782:32;5779:52;;;5827:1;5824;5817:12;5779:52;5867:9;5854:23;5896:18;5937:2;5929:6;5926:14;5923:34;;;5953:1;5950;5943:12;5923:34;5976:49;6017:7;6008:6;5997:9;5993:22;5976:49;:::i;:::-;5966:59;;6078:2;6067:9;6063:18;6050:32;6034:48;;6107:2;6097:8;6094:16;6091:36;;;6123:1;6120;6113:12;6091:36;;6146:51;6189:7;6178:8;6167:9;6163:24;6146:51;:::i;:::-;6136:61;;;5664:539;;;;;:::o;6416:277::-;6503:6;6556:2;6544:9;6535:7;6531:23;6527:32;6524:52;;;6572:1;6569;6562:12;6524:52;6604:9;6598:16;6623:40;6657:5;6623:40;:::i;7101:127::-;7162:10;7157:3;7153:20;7150:1;7143:31;7193:4;7190:1;7183:15;7217:4;7214:1;7207:15;7233:701;7430:6;7419:9;7412:25;7393:4;7456:2;7508:6;7501:14;7494:22;7489:2;7478:9;7474:18;7467:50;7553:2;7548;7537:9;7533:18;7526:30;7585:6;7579:13;7628:6;7623:2;7612:9;7608:18;7601:34;7653:1;7663:141;7677:6;7674:1;7671:13;7663:141;;;7773:14;;;7769:23;;7763:30;7738:17;;;7757:3;7734:27;7727:67;7692:10;;7663:141;;;7667:3;7854:1;7848:3;7839:6;7828:9;7824:22;7820:32;7813:43;7924:3;7917:2;7913:7;7908:2;7900:6;7896:15;7892:29;7881:9;7877:45;7873:55;7865:63;;;;7233:701;;;;;;:::o;8222:167::-;8300:13;;8353:10;8342:22;;8332:33;;8322:61;;8379:1;8376;8369:12;8322:61;8222:167;;;:::o;8394:206::-;8463:6;8516:2;8504:9;8495:7;8491:23;8487:32;8484:52;;;8532:1;8529;8522:12;8484:52;8555:39;8584:9;8555:39;:::i;8803:277::-;8870:6;8923:2;8911:9;8902:7;8898:23;8894:32;8891:52;;;8939:1;8936;8929:12;8891:52;8971:9;8965:16;9024:5;9017:13;9010:21;9003:5;9000:32;8990:60;;9046:1;9043;9036:12;9443:741;9548:6;9601:3;9589:9;9580:7;9576:23;9572:33;9569:53;;;9618:1;9615;9608:12;9569:53;9644:17;;:::i;:::-;9691:9;9685:16;9710:42;9744:7;9710:42;:::i;:::-;9761:22;;9815:48;9859:2;9844:18;;9815:48;:::i;:::-;9810:2;9799:14;;9792:72;9909:2;9894:18;;9888:25;-1:-1:-1;;;;;9944:33:266;;9932:46;;9922:74;;9992:1;9989;9982:12;9922:74;10023:2;10012:14;;10005:31;10089:2;10074:18;;;10068:25;10052:14;;;10045:49;10148:3;10133:19;;;10127:26;10110:15;;;10103:51;;;;-1:-1:-1;10016:5:266;9443:741;-1:-1:-1;9443:741:266:o;10189:265::-;10262:9;;;10293;;10310:15;;;10304:22;;10290:37;10280:168;;10370:10;10365:3;10361:20;10358:1;10351:31;10405:4;10402:1;10395:15;10433:4;10430:1;10423:15;10459:217;10499:1;10525;10515:132;;10569:10;10564:3;10560:20;10557:1;10550:31;10604:4;10601:1;10594:15;10632:4;10629:1;10622:15;10515:132;-1:-1:-1;10661:9:266;;10459:217::o;10681:175::-;10759:13;;10812:18;10801:30;;10791:41;;10781:69;;10846:1;10843;10836:12;10861:192;10940:13;;10993:34;10982:46;;10972:57;;10962:85;;11043:1;11040;11033:12;11058:526;11128:5;11176:4;11164:9;11159:3;11155:19;11151:30;11148:50;;;11194:1;11191;11184:12;11148:50;11227:4;11221:11;11271:4;11263:6;11259:17;11342:6;11330:10;11327:22;11306:18;11294:10;11291:34;11288:62;11285:88;;;11353:18;;:::i;:::-;11389:4;11382:24;11424:6;-1:-1:-1;11424:6:266;11454:40;11484:9;11454:40;:::i;:::-;11446:6;11439:56;11528:49;11573:2;11562:9;11558:18;11528:49;:::i;:::-;11523:2;11515:6;11511:15;11504:74;;11058:526;;;;:::o;11589:1176::-;11800:6;11808;11816;11824;11832;11840;11884:9;11875:7;11871:23;11914:3;11910:2;11906:12;11903:32;;;11931:1;11928;11921:12;11903:32;11960:9;11954:16;11944:26;;12010:2;11999:9;11995:18;11989:25;11979:35;;12054:2;12043:9;12039:18;12033:25;12023:35;;12092:4;12086:2;12082:7;12078:2;12074:16;12070:27;12067:47;;;12110:1;12107;12100:12;12067:47;;12136:17;;:::i;:::-;12176:48;12220:2;12209:9;12205:18;12176:48;:::i;:::-;12169:5;12162:63;12257:49;12301:3;12290:9;12286:19;12257:49;:::i;:::-;12252:2;12245:5;12241:14;12234:73;12339:50;12383:4;12372:9;12368:20;12339:50;:::i;:::-;12334:2;12327:5;12323:14;12316:74;12422:49;12466:3;12455:9;12451:19;12422:49;:::i;:::-;12417:2;12410:5;12406:14;12399:73;12505:49;12549:3;12538:9;12534:19;12505:49;:::i;:::-;12499:3;12488:15;;12481:74;12492:5;-1:-1:-1;12598:71:266;12661:7;12655:3;12640:19;;12598:71;:::i;:::-;12588:81;;12688:71;12751:7;12745:3;12734:9;12730:19;12688:71;:::i;:::-;12678:81;;11589:1176;;;;;;;;:::o;12770:184::-;12840:6;12893:2;12881:9;12872:7;12868:23;12864:32;12861:52;;;12909:1;12906;12899:12;12861:52;-1:-1:-1;12932:16:266;;12770:184;-1:-1:-1;12770:184:266:o;14499:616::-;14632:6;14640;14648;14656;14664;14672;14680;14688;14741:3;14729:9;14720:7;14716:23;14712:33;14709:53;;;14758:1;14755;14748:12;14709:53;-1:-1:-1;;14781:16:266;;14837:2;14822:18;;14816:25;14881:2;14866:18;;14860:25;14925:2;14910:18;;14904:25;14969:3;14954:19;;14948:26;15014:3;14999:19;;14993:26;15059:3;15044:19;;15038:26;15104:3;15089:19;;;15083:26;14781:16;;14816:25;;-1:-1:-1;14860:25:266;;14904;;-1:-1:-1;14948:26:266;-1:-1:-1;14993:26:266;;-1:-1:-1;15038:26:266;-1:-1:-1;15083:26:266;;-1:-1:-1;14499:616:266;-1:-1:-1;14499:616:266:o", + "linkReferences": {}, + "immutableReferences": { + "78959": [ + { + "start": 539, + "length": 32 + } + ], + "78962": [ + { + "start": 287, + "length": 32 + }, + { + "start": 894, + "length": 32 + } + ], + "78965": [ + { + "start": 347, + "length": 32 + }, + { + "start": 717, + "length": 32 + } + ] + } + }, + "methodIdentifiers": { + "ACCOUNT_FOR_INTEREST()": "19877557", + "FRAX()": "b0e4556f", + "assetOf(bytes)": "e170a9bf", + "assetsUsed(bytes)": "aeffddde", + "balanceOf(bytes)": "78415365", + "borrowFromFraxlend(address,uint256)": "1586ffbb", + "callAddInterest(address)": "6dd659fd", + "deposit(uint256,bytes,bytes)": "69445c31", + "identifier()": "7998a1c4", + "isDebt()": "89353a09", + "minimumHealthFactor()": "1caff8b1", + "repayFraxlendDebt(address,uint256)": "8b9b9d40", + "revokeApproval(address,address)": "d3bfe76a", + "slippage()": "3e032a3b", + "withdraw(uint256,address,bytes,bytes)": "c9111bd7", + "withdrawableFrom(bytes,bytes)": "fa50e5d2" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"_accountForInterest\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"_frax\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_healthFactor\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"BaseAdaptor__ConstructorHealthFactorTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__ExternalReceiverBlocked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"}],\"name\":\"BaseAdaptor__PricingNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__Slippage\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__UserDepositsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BaseAdaptor__UserWithdrawsNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fraxlendPair\",\"type\":\"address\"}],\"name\":\"DebtFTokenAdaptor__CannotRepayNoDebt\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fraxlendPair\",\"type\":\"address\"}],\"name\":\"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fraxlendPair\",\"type\":\"address\"}],\"name\":\"DebtFTokenAdaptor__HealthFactorTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ACCOUNT_FOR_INTEREST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FRAX\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"adaptorData\",\"type\":\"bytes\"}],\"name\":\"assetOf\",\"outputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"adaptorData\",\"type\":\"bytes\"}],\"name\":\"assetsUsed\",\"outputs\":[{\"internalType\":\"contract ERC20[]\",\"name\":\"assets\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"adaptorData\",\"type\":\"bytes\"}],\"name\":\"balanceOf\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IFToken\",\"name\":\"fraxlendPair\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amountToBorrow\",\"type\":\"uint256\"}],\"name\":\"borrowFromFraxlend\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IFToken\",\"name\":\"_fraxlendPair\",\"type\":\"address\"}],\"name\":\"callAddInterest\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"identifier\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isDebt\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minimumHealthFactor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IFToken\",\"name\":\"_fraxlendPair\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_debtTokenRepayAmount\",\"type\":\"uint256\"}],\"name\":\"repayFraxlendDebt\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"spender\",\"type\":\"address\"}],\"name\":\"revokeApproval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"slippage\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"withdrawableFrom\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"crispymangoes, 0xEinCodes NOTE: repayAssetWithCollateral() is not allowed from strategist to call in FraxlendCore for cellar.\",\"kind\":\"dev\",\"methods\":{\"balanceOf(bytes)\":{\"params\":{\"adaptorData\":\"encoded fraxlendPair (fToken) for this position\"}},\"borrowFromFraxlend(address,uint256)\":{\"params\":{\"amountToBorrow\":\"the amount of `debtTokenToBorrow` to borrow on Fraxlend. NOTE: `borrowAsset` is the same btw v1 and v2 FraxlendPairs\",\"fraxlendPair\":\"the Fraxlend Pair to borrow from.\"}},\"callAddInterest(address)\":{\"details\":\"A strategist might want to do this if a Frax Lend pair has not been interacted in a while, and the strategist does not plan on interacting with it during a rebalance.Calling this can increase the share price during the rebalance, so a strategist should consider moving some assets into reserves.\",\"params\":{\"_fraxlendPair\":\"The specified Fraxlend Pair\"}},\"identifier()\":{\"details\":\"Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult.\"},\"repayFraxlendDebt(address,uint256)\":{\"details\":\"Uses `_maxAvailable` helper function, see BaseAdaptor.sol\",\"params\":{\"_debtTokenRepayAmount\":\"the amount of `debtToken` to repay with.\",\"_fraxlendPair\":\"the Fraxlend Pair to repay debt from.\"}},\"revokeApproval(address,address)\":{\"params\":{\"asset\":\"the ERC20 asset to revoke `spender`s approval for\",\"spender\":\"the address to revoke approval for\"}}},\"title\":\"FraxLend Debt Token Adaptor\",\"version\":1},\"userdoc\":{\"errors\":{\"BaseAdaptor__ConstructorHealthFactorTooLow()\":[{\"notice\":\"Attempted to set a constructor minimum health factor to a value below `MINIMUM_CONSTRUCTOR_HEALTH_FACTOR()`.\"}],\"BaseAdaptor__ExternalReceiverBlocked()\":[{\"notice\":\"Attempted to specify an external receiver during a Cellar `callOnAdaptor` call.\"}],\"BaseAdaptor__PricingNotSupported(address)\":[{\"notice\":\"Attempted swap used unsupported output asset.\"}],\"BaseAdaptor__Slippage()\":[{\"notice\":\"Attempted swap has bad slippage.\"}],\"BaseAdaptor__UserDepositsNotAllowed()\":[{\"notice\":\"Attempted to deposit to a position where user deposits were not allowed.\"}],\"BaseAdaptor__UserWithdrawsNotAllowed()\":[{\"notice\":\"Attempted to withdraw from a position where user withdraws were not allowed.\"}],\"DebtFTokenAdaptor__CannotRepayNoDebt(address)\":[{\"notice\":\"Attempted repayment when no debt position in fraxlendPair for cellar\"}],\"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked(address)\":[{\"notice\":\"Attempted to interact with an fraxlendPair the Cellar is not using.\"}],\"DebtFTokenAdaptor__HealthFactorTooLow(address)\":[{\"notice\":\"Attempted tx that results in unhealthy cellar\"}]},\"kind\":\"user\",\"methods\":{\"ACCOUNT_FOR_INTEREST()\":{\"notice\":\"This bool determines how this adaptor accounts for interest. True: Account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`. False: Do not account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`.\"},\"FRAX()\":{\"notice\":\"The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\"},\"assetOf(bytes)\":{\"notice\":\"Returns `assetContract` from respective fraxlend pair, but this is most likely going to be FRAX.\"},\"assetsUsed(bytes)\":{\"notice\":\"When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup.\"},\"balanceOf(bytes)\":{\"notice\":\"Returns the cellar's balance of the respective Fraxlend debtToken calculated from cellar borrow shares\"},\"borrowFromFraxlend(address,uint256)\":{\"notice\":\"Allows strategists to borrow assets from Fraxlend.`debtTokenToBorrow` must be the debtToken, NOT the underlying ERC20.\"},\"callAddInterest(address)\":{\"notice\":\"Allows a strategist to call `addInterest` on a Frax Pair they are using.\"},\"deposit(uint256,bytes,bytes)\":{\"notice\":\"User deposits are NOT allowed into this position.\"},\"isDebt()\":{\"notice\":\"This adaptor reports values in terms of debt.\"},\"minimumHealthFactor()\":{\"notice\":\"Minimum Health Factor enforced after every borrow.Overwrites strategist set minimums if they are lower.\"},\"repayFraxlendDebt(address,uint256)\":{\"notice\":\"Allows strategists to repay loan debt on Fraxlend Pair. Make sure to call addInterest() beforehand to ensure we are repaying what is required.\"},\"revokeApproval(address,address)\":{\"notice\":\"Allows strategists to zero out an approval for a given `asset`.\"},\"slippage()\":{\"notice\":\"Max possible slippage when making a swap router swap.\"},\"withdraw(uint256,address,bytes,bytes)\":{\"notice\":\"User withdraws are NOT allowed from this position.\"},\"withdrawableFrom(bytes,bytes)\":{\"notice\":\"This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom.\"}},\"notice\":\"Allows Cellars to borrow assets from FraxLend pairs.\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/modules/adaptors/Frax/DebtFTokenAdaptor.sol\":\"DebtFTokenAdaptor\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/\",\":@balancer/=lib/balancer-v2-monorepo/pkg/\",\":@chainlink/=lib/chainlink/\",\":@ds-test/=lib/forge-std/lib/ds-test/src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/=lib/openzeppelin-contracts/\",\":@solmate/=lib/solmate/src/\",\":@uniswap/v3-core/=lib/v3-core/\",\":@uniswap/v3-periphery/=lib/v3-periphery/\",\":@uniswapV3C/=lib/v3-core/contracts/\",\":@uniswapV3P/=lib/v3-periphery/contracts/\",\":axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/\",\":balancer-v2-monorepo/=lib/balancer-v2-monorepo/\",\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/\",\":solmate/=lib/solmate/src/\",\":v3-core/=lib/v3-core/contracts/\",\":v3-periphery/=lib/v3-periphery/contracts/\"]},\"sources\":{\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol\":{\"keccak256\":\"0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465\",\"dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a\"]},\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol\":{\"keccak256\":\"0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b\",\"dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG\"]},\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\":{\"keccak256\":\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"]},\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\":{\"keccak256\":\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\":{\"keccak256\":\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol\":{\"keccak256\":\"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\",\"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de\",\"dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929\",\"dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg\"]},\"lib/solmate/src/auth/Owned.sol\":{\"keccak256\":\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"]},\"lib/solmate/src/mixins/ERC4626.sol\":{\"keccak256\":\"0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1\",\"dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs\"]},\"lib/solmate/src/tokens/ERC20.sol\":{\"keccak256\":\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"]},\"lib/solmate/src/utils/FixedPointMathLib.sol\":{\"keccak256\":\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"]},\"lib/solmate/src/utils/SafeTransferLib.sol\":{\"keccak256\":\"0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a\",\"license\":\"AGPL-3.0-only\",\"urls\":[\"bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4\",\"dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU\"]},\"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol\":{\"keccak256\":\"0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e\",\"dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\":{\"keccak256\":\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\":{\"keccak256\":\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol\":{\"keccak256\":\"0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa\",\"dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\":{\"keccak256\":\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\":{\"keccak256\":\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\":{\"keccak256\":\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"]},\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\":{\"keccak256\":\"0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea\",\"dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp\"]},\"lib/v3-core/contracts/libraries/FullMath.sol\":{\"keccak256\":\"0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125\",\"dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd\"]},\"lib/v3-core/contracts/libraries/TickMath.sol\":{\"keccak256\":\"0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c\",\"dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS\"]},\"lib/v3-periphery/contracts/libraries/OracleLibrary.sol\":{\"keccak256\":\"0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b\",\"license\":\"GPL-2.0-or-later\",\"urls\":[\"bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53\",\"dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM\"]},\"src/Registry.sol\":{\"keccak256\":\"0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2\",\"dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h\"]},\"src/base/Cellar.sol\":{\"keccak256\":\"0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744\",\"dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q\"]},\"src/interfaces/external/Frax/IFToken.sol\":{\"keccak256\":\"0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1\",\"dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK\"]},\"src/interfaces/external/IChainlinkAggregator.sol\":{\"keccak256\":\"0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac\",\"dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u\"]},\"src/interfaces/external/UniswapV3Pool.sol\":{\"keccak256\":\"0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb\",\"urls\":[\"bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9\",\"dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh\"]},\"src/modules/adaptors/BaseAdaptor.sol\":{\"keccak256\":\"0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840\",\"dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q\"]},\"src/modules/adaptors/Frax/DebtFTokenAdaptor.sol\":{\"keccak256\":\"0xff226895aeaf6739ca55c86c27a1647627e1ec6deedf971c1a3348ad5309c9f0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://9219e577a024f2804774de2558dfac99a293ba10ee2c8b39cea2c51976508aaa\",\"dweb:/ipfs/QmZp3GWfRGajaNee5CQWPGBtonXocRCoPVcRqWUP9HpCWk\"]},\"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\":{\"keccak256\":\"0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c\",\"dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe\"]},\"src/modules/price-router/Extensions/Extension.sol\":{\"keccak256\":\"0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad\",\"dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4\"]},\"src/modules/price-router/PriceRouter.sol\":{\"keccak256\":\"0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e\",\"dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1\"]},\"src/utils/Math.sol\":{\"keccak256\":\"0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1\",\"dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949\"]},\"src/utils/Uint32Array.sol\":{\"keccak256\":\"0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218\",\"dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.21+commit.d9974bed" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "bool", + "name": "_accountForInterest", + "type": "bool" + }, + { + "internalType": "address", + "name": "_frax", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_healthFactor", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__ConstructorHealthFactorTooLow" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__ExternalReceiverBlocked" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "type": "error", + "name": "BaseAdaptor__PricingNotSupported" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__Slippage" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__UserDepositsNotAllowed" + }, + { + "inputs": [], + "type": "error", + "name": "BaseAdaptor__UserWithdrawsNotAllowed" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "type": "error", + "name": "DebtFTokenAdaptor__CannotRepayNoDebt" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "type": "error", + "name": "DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "fraxlendPair", + "type": "address" + } + ], + "type": "error", + "name": "DebtFTokenAdaptor__HealthFactorTooLow" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ACCOUNT_FOR_INTEREST", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "FRAX", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "assetOf", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "assetsUsed", + "outputs": [ + { + "internalType": "contract ERC20[]", + "name": "assets", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "fraxlendPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amountToBorrow", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrowFromFraxlend" + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "callAddInterest" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "deposit" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "identifier", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "isDebt", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "minimumHealthFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IFToken", + "name": "_fraxlendPair", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_debtTokenRepayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayFraxlendDebt" + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeApproval" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "slippage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "withdraw" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "withdrawableFrom", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "balanceOf(bytes)": { + "params": { + "adaptorData": "encoded fraxlendPair (fToken) for this position" + } + }, + "borrowFromFraxlend(address,uint256)": { + "params": { + "amountToBorrow": "the amount of `debtTokenToBorrow` to borrow on Fraxlend. NOTE: `borrowAsset` is the same btw v1 and v2 FraxlendPairs", + "fraxlendPair": "the Fraxlend Pair to borrow from." + } + }, + "callAddInterest(address)": { + "details": "A strategist might want to do this if a Frax Lend pair has not been interacted in a while, and the strategist does not plan on interacting with it during a rebalance.Calling this can increase the share price during the rebalance, so a strategist should consider moving some assets into reserves.", + "params": { + "_fraxlendPair": "The specified Fraxlend Pair" + } + }, + "identifier()": { + "details": "Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult." + }, + "repayFraxlendDebt(address,uint256)": { + "details": "Uses `_maxAvailable` helper function, see BaseAdaptor.sol", + "params": { + "_debtTokenRepayAmount": "the amount of `debtToken` to repay with.", + "_fraxlendPair": "the Fraxlend Pair to repay debt from." + } + }, + "revokeApproval(address,address)": { + "params": { + "asset": "the ERC20 asset to revoke `spender`s approval for", + "spender": "the address to revoke approval for" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "ACCOUNT_FOR_INTEREST()": { + "notice": "This bool determines how this adaptor accounts for interest. True: Account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`. False: Do not account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`." + }, + "FRAX()": { + "notice": "The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e." + }, + "assetOf(bytes)": { + "notice": "Returns `assetContract` from respective fraxlend pair, but this is most likely going to be FRAX." + }, + "assetsUsed(bytes)": { + "notice": "When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup." + }, + "balanceOf(bytes)": { + "notice": "Returns the cellar's balance of the respective Fraxlend debtToken calculated from cellar borrow shares" + }, + "borrowFromFraxlend(address,uint256)": { + "notice": "Allows strategists to borrow assets from Fraxlend.`debtTokenToBorrow` must be the debtToken, NOT the underlying ERC20." + }, + "callAddInterest(address)": { + "notice": "Allows a strategist to call `addInterest` on a Frax Pair they are using." + }, + "deposit(uint256,bytes,bytes)": { + "notice": "User deposits are NOT allowed into this position." + }, + "isDebt()": { + "notice": "This adaptor reports values in terms of debt." + }, + "minimumHealthFactor()": { + "notice": "Minimum Health Factor enforced after every borrow.Overwrites strategist set minimums if they are lower." + }, + "repayFraxlendDebt(address,uint256)": { + "notice": "Allows strategists to repay loan debt on Fraxlend Pair. Make sure to call addInterest() beforehand to ensure we are repaying what is required." + }, + "revokeApproval(address,address)": { + "notice": "Allows strategists to zero out an approval for a given `asset`." + }, + "slippage()": { + "notice": "Max possible slippage when making a swap router swap." + }, + "withdraw(uint256,address,bytes,bytes)": { + "notice": "User withdraws are NOT allowed from this position." + }, + "withdrawableFrom(bytes,bytes)": { + "notice": "This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/", + "@balancer/=lib/balancer-v2-monorepo/pkg/", + "@chainlink/=lib/chainlink/", + "@ds-test/=lib/forge-std/lib/ds-test/src/", + "@forge-std/=lib/forge-std/src/", + "@openzeppelin/=lib/openzeppelin-contracts/", + "@solmate/=lib/solmate/src/", + "@uniswap/v3-core/=lib/v3-core/", + "@uniswap/v3-periphery/=lib/v3-periphery/", + "@uniswapV3C/=lib/v3-core/contracts/", + "@uniswapV3P/=lib/v3-periphery/contracts/", + "axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/", + "balancer-v2-monorepo/=lib/balancer-v2-monorepo/", + "chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "forge-std/=lib/forge-std/src/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/", + "solmate/=lib/solmate/src/", + "v3-core/=lib/v3-core/contracts/", + "v3-periphery/=lib/v3-periphery/contracts/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/modules/adaptors/Frax/DebtFTokenAdaptor.sol": "DebtFTokenAdaptor" + }, + "libraries": {} + }, + "sources": { + "lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol": { + "keccak256": "0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7", + "urls": [ + "bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465", + "dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a" + ], + "license": "MIT" + }, + "lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol": { + "keccak256": "0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2", + "urls": [ + "bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b", + "dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG" + ], + "license": "MIT" + }, + "lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol": { + "keccak256": "0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846", + "urls": [ + "bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7", + "dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol": { + "keccak256": "0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da", + "urls": [ + "bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708", + "dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol": { + "keccak256": "0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028", + "urls": [ + "bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf", + "dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol": { + "keccak256": "0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb", + "urls": [ + "bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929", + "dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Owned.sol": { + "keccak256": "0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea", + "urls": [ + "bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4", + "dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/mixins/ERC4626.sol": { + "keccak256": "0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b", + "urls": [ + "bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1", + "dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/FixedPointMathLib.sol": { + "keccak256": "0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843", + "urls": [ + "bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9", + "dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a", + "urls": [ + "bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4", + "dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU" + ], + "license": "AGPL-3.0-only" + }, + "lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol": { + "keccak256": "0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968", + "urls": [ + "bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e", + "dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol": { + "keccak256": "0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634", + "urls": [ + "bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5", + "dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol": { + "keccak256": "0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5", + "urls": [ + "bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7", + "dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol": { + "keccak256": "0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b", + "urls": [ + "bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa", + "dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol": { + "keccak256": "0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd", + "urls": [ + "bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03", + "dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol": { + "keccak256": "0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7", + "urls": [ + "bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047", + "dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol": { + "keccak256": "0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235", + "urls": [ + "bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735", + "dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol": { + "keccak256": "0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43", + "urls": [ + "bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea", + "dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-core/contracts/libraries/FullMath.sol": { + "keccak256": "0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645", + "urls": [ + "bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125", + "dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd" + ], + "license": "MIT" + }, + "lib/v3-core/contracts/libraries/TickMath.sol": { + "keccak256": "0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129", + "urls": [ + "bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c", + "dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS" + ], + "license": "GPL-2.0-or-later" + }, + "lib/v3-periphery/contracts/libraries/OracleLibrary.sol": { + "keccak256": "0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b", + "urls": [ + "bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53", + "dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM" + ], + "license": "GPL-2.0-or-later" + }, + "src/Registry.sol": { + "keccak256": "0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd", + "urls": [ + "bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2", + "dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h" + ], + "license": "Apache-2.0" + }, + "src/base/Cellar.sol": { + "keccak256": "0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a", + "urls": [ + "bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744", + "dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q" + ], + "license": "Apache-2.0" + }, + "src/interfaces/external/Frax/IFToken.sol": { + "keccak256": "0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd", + "urls": [ + "bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1", + "dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK" + ], + "license": "MIT" + }, + "src/interfaces/external/IChainlinkAggregator.sol": { + "keccak256": "0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f", + "urls": [ + "bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac", + "dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u" + ], + "license": "Apache-2.0" + }, + "src/interfaces/external/UniswapV3Pool.sol": { + "keccak256": "0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb", + "urls": [ + "bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9", + "dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh" + ], + "license": null + }, + "src/modules/adaptors/BaseAdaptor.sol": { + "keccak256": "0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc", + "urls": [ + "bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840", + "dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q" + ], + "license": "Apache-2.0" + }, + "src/modules/adaptors/Frax/DebtFTokenAdaptor.sol": { + "keccak256": "0xff226895aeaf6739ca55c86c27a1647627e1ec6deedf971c1a3348ad5309c9f0", + "urls": [ + "bzz-raw://9219e577a024f2804774de2558dfac99a293ba10ee2c8b39cea2c51976508aaa", + "dweb:/ipfs/QmZp3GWfRGajaNee5CQWPGBtonXocRCoPVcRqWUP9HpCWk" + ], + "license": "Apache-2.0" + }, + "src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol": { + "keccak256": "0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0", + "urls": [ + "bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c", + "dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe" + ], + "license": "Apache-2.0" + }, + "src/modules/price-router/Extensions/Extension.sol": { + "keccak256": "0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101", + "urls": [ + "bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad", + "dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4" + ], + "license": "Apache-2.0" + }, + "src/modules/price-router/PriceRouter.sol": { + "keccak256": "0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd", + "urls": [ + "bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e", + "dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1" + ], + "license": "Apache-2.0" + }, + "src/utils/Math.sol": { + "keccak256": "0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc", + "urls": [ + "bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1", + "dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949" + ], + "license": "Apache-2.0" + }, + "src/utils/Uint32Array.sol": { + "keccak256": "0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7", + "urls": [ + "bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218", + "dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf" + ], + "license": "Apache-2.0" + } + }, + "version": 1 + }, + "ast": { + "absolutePath": "src/modules/adaptors/Frax/DebtFTokenAdaptor.sol", + "id": 79448, + "exportedSymbols": { + "BaseAdaptor": [ + 77495 + ], + "Cellar": [ + 61030 + ], + "DebtFTokenAdaptor": [ + 79447 + ], + "ERC20": [ + 51130 + ], + "FraxlendHealthFactorLogic": [ + 80549 + ], + "IFToken": [ + 66209 + ], + "Math": [ + 92983 + ], + "PriceRouter": [ + 89874 + ], + "SafeTransferLib": [ + 51551 + ] + }, + "nodeType": "SourceUnit", + "src": "39:14148:193", + "nodes": [ + { + "id": 78917, + "nodeType": "PragmaDirective", + "src": "39:23:193", + "nodes": [], + "literals": [ + "solidity", + "0.8", + ".21" + ] + }, + { + "id": 78924, + "nodeType": "ImportDirective", + "src": "64:118:193", + "nodes": [], + "absolutePath": "src/modules/adaptors/BaseAdaptor.sol", + "file": "src/modules/adaptors/BaseAdaptor.sol", + "nameLocation": "-1:-1:-1", + "scope": 79448, + "sourceUnit": 77496, + "symbolAliases": [ + { + "foreign": { + "id": 78918, + "name": "BaseAdaptor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77495, + "src": "73:11:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78919, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51130, + "src": "86:5:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78920, + "name": "SafeTransferLib", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51551, + "src": "93:15:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78921, + "name": "Cellar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61030, + "src": "110:6:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78922, + "name": "PriceRouter", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 89874, + "src": "118:11:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + }, + { + "foreign": { + "id": 78923, + "name": "Math", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 92983, + "src": "131:4:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 78926, + "nodeType": "ImportDirective", + "src": "183:67:193", + "nodes": [], + "absolutePath": "src/interfaces/external/Frax/IFToken.sol", + "file": "src/interfaces/external/Frax/IFToken.sol", + "nameLocation": "-1:-1:-1", + "scope": 79448, + "sourceUnit": 66210, + "symbolAliases": [ + { + "foreign": { + "id": 78925, + "name": "IFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66209, + "src": "192:7:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 78928, + "nodeType": "ImportDirective", + "src": "251:100:193", + "nodes": [], + "absolutePath": "src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol", + "file": "src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol", + "nameLocation": "-1:-1:-1", + "scope": 79448, + "sourceUnit": 80550, + "symbolAliases": [ + { + "foreign": { + "id": 78927, + "name": "FraxlendHealthFactorLogic", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80549, + "src": "260:25:193", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 79447, + "nodeType": "ContractDefinition", + "src": "603:13583:193", + "nodes": [ + { + "id": 78937, + "nodeType": "UsingForDirective", + "src": "678:32:193", + "nodes": [], + "global": false, + "libraryName": { + "id": 78934, + "name": "SafeTransferLib", + "nameLocations": [ + "684:15:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51551, + "src": "684:15:193" + }, + "typeName": { + "id": 78936, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78935, + "name": "ERC20", + "nameLocations": [ + "704:5:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "704:5:193" + }, + "referencedDeclaration": 51130, + "src": "704:5:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + } + }, + { + "id": 78940, + "nodeType": "UsingForDirective", + "src": "715:23:193", + "nodes": [], + "global": false, + "libraryName": { + "id": 78938, + "name": "Math", + "nameLocations": [ + "721:4:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 92983, + "src": "721:4:193" + }, + "typeName": { + "id": 78939, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "730:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + }, + { + "id": 78945, + "nodeType": "ErrorDefinition", + "src": "1851:82:193", + "nodes": [], + "documentation": { + "id": 78941, + "nodeType": "StructuredDocumentation", + "src": "1752:94:193", + "text": " @notice Attempted to interact with an fraxlendPair the Cellar is not using." + }, + "errorSelector": "fad081de", + "name": "DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked", + "nameLocation": "1857:53:193", + "parameters": { + "id": 78944, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78943, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "1919:12:193", + "nodeType": "VariableDeclaration", + "scope": 78945, + "src": "1911:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78942, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1911:7:193", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1910:22:193" + } + }, + { + "id": 78950, + "nodeType": "ErrorDefinition", + "src": "2016:66:193", + "nodes": [], + "documentation": { + "id": 78946, + "nodeType": "StructuredDocumentation", + "src": "1939:72:193", + "text": " @notice Attempted tx that results in unhealthy cellar" + }, + "errorSelector": "c4bbf5fd", + "name": "DebtFTokenAdaptor__HealthFactorTooLow", + "nameLocation": "2022:37:193", + "parameters": { + "id": 78949, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78948, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "2068:12:193", + "nodeType": "VariableDeclaration", + "scope": 78950, + "src": "2060:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78947, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2060:7:193", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2059:22:193" + } + }, + { + "id": 78955, + "nodeType": "ErrorDefinition", + "src": "2188:65:193", + "nodes": [], + "documentation": { + "id": 78951, + "nodeType": "StructuredDocumentation", + "src": "2088:95:193", + "text": " @notice Attempted repayment when no debt position in fraxlendPair for cellar" + }, + "errorSelector": "78d1784d", + "name": "DebtFTokenAdaptor__CannotRepayNoDebt", + "nameLocation": "2194:36:193", + "parameters": { + "id": 78954, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78953, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "2239:12:193", + "nodeType": "VariableDeclaration", + "scope": 78955, + "src": "2231:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78952, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "2231:7:193", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "2230:22:193" + } + }, + { + "id": 78959, + "nodeType": "VariableDeclaration", + "src": "2403:27:193", + "nodes": [], + "constant": false, + "documentation": { + "id": 78956, + "nodeType": "StructuredDocumentation", + "src": "2259:139:193", + "text": " @notice The FRAX contract on current network.\n @notice For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e." + }, + "functionSelector": "b0e4556f", + "mutability": "immutable", + "name": "FRAX", + "nameLocation": "2426:4:193", + "scope": 79447, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 78958, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 78957, + "name": "ERC20", + "nameLocations": [ + "2403:5:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "2403:5:193" + }, + "referencedDeclaration": 51130, + "src": "2403:5:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "public" + }, + { + "id": 78962, + "nodeType": "VariableDeclaration", + "src": "2755:42:193", + "nodes": [], + "constant": false, + "documentation": { + "id": 78960, + "nodeType": "StructuredDocumentation", + "src": "2437:313:193", + "text": " @notice This bool determines how this adaptor accounts for interest.\n True: Account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`.\n False: Do not account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`." + }, + "functionSelector": "19877557", + "mutability": "immutable", + "name": "ACCOUNT_FOR_INTEREST", + "nameLocation": "2777:20:193", + "scope": 79447, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 78961, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "2755:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "public" + }, + { + "id": 78965, + "nodeType": "VariableDeclaration", + "src": "2955:44:193", + "nodes": [], + "constant": false, + "documentation": { + "id": 78963, + "nodeType": "StructuredDocumentation", + "src": "2804:146:193", + "text": " @notice Minimum Health Factor enforced after every borrow.\n @notice Overwrites strategist set minimums if they are lower." + }, + "functionSelector": "1caff8b1", + "mutability": "immutable", + "name": "minimumHealthFactor", + "nameLocation": "2980:19:193", + "scope": 79447, + "stateVariable": true, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78964, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "2955:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "public" + }, + { + "id": 78993, + "nodeType": "FunctionDefinition", + "src": "3006:271:193", + "nodes": [], + "body": { + "id": 78992, + "nodeType": "Block", + "src": "3082:195:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 78975, + "name": "_healthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78971, + "src": "3130:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 78974, + "name": "_verifyConstructorMinimumHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77477, + "src": "3092:37:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$_t_uint256_$returns$__$", + "typeString": "function (uint256) pure" + } + }, + "id": 78976, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3092:52:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 78977, + "nodeType": "ExpressionStatement", + "src": "3092:52:193" + }, + { + "expression": { + "id": 78980, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 78978, + "name": "ACCOUNT_FOR_INTEREST", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78962, + "src": "3154:20:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 78979, + "name": "_accountForInterest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78967, + "src": "3177:19:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "3154:42:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 78981, + "nodeType": "ExpressionStatement", + "src": "3154:42:193" + }, + { + "expression": { + "id": 78986, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 78982, + "name": "FRAX", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78959, + "src": "3206:4:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "arguments": [ + { + "id": 78984, + "name": "_frax", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78969, + "src": "3219:5:193", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 78983, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51130, + "src": "3213:5:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$51130_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 78985, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3213:12:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "src": "3206:19:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "id": 78987, + "nodeType": "ExpressionStatement", + "src": "3206:19:193" + }, + { + "expression": { + "id": 78990, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 78988, + "name": "minimumHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78965, + "src": "3235:19:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 78989, + "name": "_healthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78971, + "src": "3257:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "3235:35:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 78991, + "nodeType": "ExpressionStatement", + "src": "3235:35:193" + } + ] + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 78972, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78967, + "mutability": "mutable", + "name": "_accountForInterest", + "nameLocation": "3023:19:193", + "nodeType": "VariableDeclaration", + "scope": 78993, + "src": "3018:24:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 78966, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "3018:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78969, + "mutability": "mutable", + "name": "_frax", + "nameLocation": "3052:5:193", + "nodeType": "VariableDeclaration", + "scope": 78993, + "src": "3044:13:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 78968, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "3044:7:193", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 78971, + "mutability": "mutable", + "name": "_healthFactor", + "nameLocation": "3067:13:193", + "nodeType": "VariableDeclaration", + "scope": 78993, + "src": "3059:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 78970, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "3059:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "3017:64:193" + }, + "returnParameters": { + "id": 78973, + "nodeType": "ParameterList", + "parameters": [], + "src": "3082:0:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 79008, + "nodeType": "FunctionDefinition", + "src": "3696:152:193", + "nodes": [], + "body": { + "id": 79007, + "nodeType": "Block", + "src": "3765:83:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "hexValue": "467261784c656e642064656274546f6b656e56322041646170746f72205620312e30", + "id": 79003, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "3803:36:193", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_0f3e468a1a8b575cd99aff8dfccab77eda19232cac2573088dbda63e0636c2e1", + "typeString": "literal_string \"FraxLend debtTokenV2 Adaptor V 1.0\"" + }, + "value": "FraxLend debtTokenV2 Adaptor V 1.0" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_0f3e468a1a8b575cd99aff8dfccab77eda19232cac2573088dbda63e0636c2e1", + "typeString": "literal_string \"FraxLend debtTokenV2 Adaptor V 1.0\"" + } + ], + "expression": { + "id": 79001, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "3792:3:193", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 79002, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "3796:6:193", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "3792:10:193", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 79004, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3792:48:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 79000, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "3782:9:193", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 79005, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "3782:59:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "functionReturnParameters": 78999, + "id": 79006, + "nodeType": "Return", + "src": "3775:66:193" + } + ] + }, + "baseFunctions": [ + 77261 + ], + "documentation": { + "id": 78994, + "nodeType": "StructuredDocumentation", + "src": "3395:296:193", + "text": " @dev Identifier unique to this adaptor for a shared registry.\n Normally the identifier would just be the address of this contract, but this\n Identifier is needed during Cellar Delegate Call Operations, so getting the address\n of the adaptor is more difficult." + }, + "functionSelector": "7998a1c4", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "identifier", + "nameLocation": "3705:10:193", + "overrides": { + "id": 78996, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "3738:8:193" + }, + "parameters": { + "id": 78995, + "nodeType": "ParameterList", + "parameters": [], + "src": "3715:2:193" + }, + "returnParameters": { + "id": 78999, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 78998, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79008, + "src": "3756:7:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 78997, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "3756:7:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "src": "3755:9:193" + }, + "scope": 79447, + "stateMutability": "pure", + "virtual": true, + "visibility": "public" + }, + { + "id": 79023, + "nodeType": "FunctionDefinition", + "src": "4056:136:193", + "nodes": [], + "body": { + "id": 79022, + "nodeType": "Block", + "src": "4131:61:193", + "nodes": [], + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 79019, + "name": "BaseAdaptor__UserDepositsNotAllowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77233, + "src": "4148:35:193", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 79020, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4148:37:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79021, + "nodeType": "RevertStatement", + "src": "4141:44:193" + } + ] + }, + "baseFunctions": [ + 77305 + ], + "documentation": { + "id": 79009, + "nodeType": "StructuredDocumentation", + "src": "3975:76:193", + "text": " @notice User deposits are NOT allowed into this position." + }, + "functionSelector": "69445c31", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "deposit", + "nameLocation": "4065:7:193", + "overrides": { + "id": 79017, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4122:8:193" + }, + "parameters": { + "id": 79016, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79011, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79023, + "src": "4073:7:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79010, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4073:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79013, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79023, + "src": "4082:12:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79012, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4082:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79015, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79023, + "src": "4096:12:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79014, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4096:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4072:37:193" + }, + "returnParameters": { + "id": 79018, + "nodeType": "ParameterList", + "parameters": [], + "src": "4131:0:193" + }, + "scope": 79447, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 79040, + "nodeType": "FunctionDefinition", + "src": "4280:147:193", + "nodes": [], + "body": { + "id": 79039, + "nodeType": "Block", + "src": "4365:62:193", + "nodes": [], + "statements": [ + { + "errorCall": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 79036, + "name": "BaseAdaptor__UserWithdrawsNotAllowed", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77236, + "src": "4382:36:193", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 79037, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "4382:38:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79038, + "nodeType": "RevertStatement", + "src": "4375:45:193" + } + ] + }, + "baseFunctions": [ + 77317 + ], + "documentation": { + "id": 79024, + "nodeType": "StructuredDocumentation", + "src": "4198:77:193", + "text": " @notice User withdraws are NOT allowed from this position." + }, + "functionSelector": "c9111bd7", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdraw", + "nameLocation": "4289:8:193", + "overrides": { + "id": 79034, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4356:8:193" + }, + "parameters": { + "id": 79033, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79026, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79040, + "src": "4298:7:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79025, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4298:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79028, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79040, + "src": "4307:7:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 79027, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "4307:7:193", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79030, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79040, + "src": "4316:12:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79029, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4316:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79032, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79040, + "src": "4330:12:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79031, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4330:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4297:46:193" + }, + "returnParameters": { + "id": 79035, + "nodeType": "ParameterList", + "parameters": [], + "src": "4365:0:193" + }, + "scope": 79447, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 79054, + "nodeType": "FunctionDefinition", + "src": "4601:118:193", + "nodes": [], + "body": { + "id": 79053, + "nodeType": "Block", + "src": "4694:25:193", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "30", + "id": 79051, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "4711:1:193", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "functionReturnParameters": 79050, + "id": 79052, + "nodeType": "Return", + "src": "4704:8:193" + } + ] + }, + "baseFunctions": [ + 77335 + ], + "documentation": { + "id": 79041, + "nodeType": "StructuredDocumentation", + "src": "4433:163:193", + "text": " @notice This position is a debt position, and user withdraws are not allowed so\n this position must return 0 for withdrawableFrom." + }, + "functionSelector": "fa50e5d2", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "withdrawableFrom", + "nameLocation": "4610:16:193", + "overrides": { + "id": 79047, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4667:8:193" + }, + "parameters": { + "id": 79046, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79043, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79054, + "src": "4627:12:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79042, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4627:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79045, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79054, + "src": "4641:12:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79044, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4641:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4626:28:193" + }, + "returnParameters": { + "id": 79050, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79049, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79054, + "src": "4685:7:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79048, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "4685:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "4684:9:193" + }, + "scope": 79447, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 79089, + "nodeType": "FunctionDefinition", + "src": "4933:323:193", + "nodes": [], + "body": { + "id": 79088, + "nodeType": "Block", + "src": "5017:239:193", + "nodes": [], + "statements": [ + { + "assignments": [ + 79065 + ], + "declarations": [ + { + "constant": false, + "id": 79065, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "5035:12:193", + "nodeType": "VariableDeclaration", + "scope": 79088, + "src": "5027:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79064, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79063, + "name": "IFToken", + "nameLocations": [ + "5027:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "5027:7:193" + }, + "referencedDeclaration": 66209, + "src": "5027:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "id": 79072, + "initialValue": { + "arguments": [ + { + "id": 79068, + "name": "adaptorData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79057, + "src": "5061:11:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 79069, + "name": "IFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66209, + "src": "5075:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "id": 79070, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5074:9:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + ], + "expression": { + "id": 79066, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "5050:3:193", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 79067, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5054:6:193", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "5050:10:193", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 79071, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5050:34:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5027:57:193" + }, + { + "assignments": [ + 79074 + ], + "declarations": [ + { + "constant": false, + "id": 79074, + "mutability": "mutable", + "name": "borrowShares", + "nameLocation": "5102:12:193", + "nodeType": "VariableDeclaration", + "scope": 79088, + "src": "5094:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79073, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5094:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 79080, + "initialValue": { + "arguments": [ + { + "id": 79076, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79065, + "src": "5135:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "expression": { + "id": 79077, + "name": "msg", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -15, + "src": "5149:3:193", + "typeDescriptions": { + "typeIdentifier": "t_magic_message", + "typeString": "msg" + } + }, + "id": 79078, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "5153:6:193", + "memberName": "sender", + "nodeType": "MemberAccess", + "src": "5149:10:193", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79075, + "name": "_userBorrowShares", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80497, + "src": "5117:17:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$_t_address_$returns$_t_uint256_$", + "typeString": "function (contract IFToken,address) view returns (uint256)" + } + }, + "id": 79079, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5117:43:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5094:66:193" + }, + { + "expression": { + "arguments": [ + { + "id": 79082, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79065, + "src": "5193:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "id": 79083, + "name": "borrowShares", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79074, + "src": "5207:12:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "66616c7365", + "id": 79084, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5221:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "id": 79085, + "name": "ACCOUNT_FOR_INTEREST", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78962, + "src": "5228:20:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 79081, + "name": "_toBorrowAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80480, + "src": "5177:15:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$_t_bool_$_t_bool_$returns$_t_uint256_$", + "typeString": "function (contract IFToken,uint256,bool,bool) view returns (uint256)" + } + }, + "id": 79086, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5177:72:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 79062, + "id": 79087, + "nodeType": "Return", + "src": "5170:79:193" + } + ] + }, + "baseFunctions": [ + 77325 + ], + "documentation": { + "id": 79055, + "nodeType": "StructuredDocumentation", + "src": "4725:203:193", + "text": " @notice Returns the cellar's balance of the respective Fraxlend debtToken calculated from cellar borrow shares\n @param adaptorData encoded fraxlendPair (fToken) for this position" + }, + "functionSelector": "78415365", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "balanceOf", + "nameLocation": "4942:9:193", + "overrides": { + "id": 79059, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "4990:8:193" + }, + "parameters": { + "id": 79058, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79057, + "mutability": "mutable", + "name": "adaptorData", + "nameLocation": "4965:11:193", + "nodeType": "VariableDeclaration", + "scope": 79089, + "src": "4952:24:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79056, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "4952:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "4951:26:193" + }, + "returnParameters": { + "id": 79062, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79061, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79089, + "src": "5008:7:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79060, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "5008:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "5007:9:193" + }, + "scope": 79447, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 79116, + "nodeType": "FunctionDefinition", + "src": "5390:210:193", + "nodes": [], + "body": { + "id": 79115, + "nodeType": "Block", + "src": "5470:130:193", + "nodes": [], + "statements": [ + { + "assignments": [ + 79101 + ], + "declarations": [ + { + "constant": false, + "id": 79101, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "5488:12:193", + "nodeType": "VariableDeclaration", + "scope": 79115, + "src": "5480:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79100, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79099, + "name": "IFToken", + "nameLocations": [ + "5480:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "5480:7:193" + }, + "referencedDeclaration": 66209, + "src": "5480:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "id": 79108, + "initialValue": { + "arguments": [ + { + "id": 79104, + "name": "adaptorData", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79092, + "src": "5514:11:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + }, + { + "components": [ + { + "id": 79105, + "name": "IFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 66209, + "src": "5528:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "id": 79106, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "5527:9:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + }, + { + "typeIdentifier": "t_type$_t_contract$_IFToken_$66209_$", + "typeString": "type(contract IFToken)" + } + ], + "expression": { + "id": 79102, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "5503:3:193", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 79103, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "5507:6:193", + "memberName": "decode", + "nodeType": "MemberAccess", + "src": "5503:10:193", + "typeDescriptions": { + "typeIdentifier": "t_function_abidecode_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 79107, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5503:34:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "5480:57:193" + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 79111, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79101, + "src": "5579:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79110, + "name": "_fraxlendPairAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79351, + "src": "5560:18:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_address_$", + "typeString": "function (contract IFToken) view returns (address)" + } + }, + "id": 79112, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5560:32:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79109, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51130, + "src": "5554:5:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$51130_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 79113, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "5554:39:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "functionReturnParameters": 79098, + "id": 79114, + "nodeType": "Return", + "src": "5547:46:193" + } + ] + }, + "baseFunctions": [ + 77344 + ], + "documentation": { + "id": 79090, + "nodeType": "StructuredDocumentation", + "src": "5262:123:193", + "text": " @notice Returns `assetContract` from respective fraxlend pair, but this is most likely going to be FRAX." + }, + "functionSelector": "e170a9bf", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "assetOf", + "nameLocation": "5399:7:193", + "overrides": { + "id": 79094, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5445:8:193" + }, + "parameters": { + "id": 79093, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79092, + "mutability": "mutable", + "name": "adaptorData", + "nameLocation": "5420:11:193", + "nodeType": "VariableDeclaration", + "scope": 79116, + "src": "5407:24:193", + "stateVariable": false, + "storageLocation": "memory", + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes" + }, + "typeName": { + "id": 79091, + "name": "bytes", + "nodeType": "ElementaryTypeName", + "src": "5407:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes_storage_ptr", + "typeString": "bytes" + } + }, + "visibility": "internal" + } + ], + "src": "5406:26:193" + }, + "returnParameters": { + "id": 79098, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79097, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79116, + "src": "5463:5:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 79096, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79095, + "name": "ERC20", + "nameLocations": [ + "5463:5:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "5463:5:193" + }, + "referencedDeclaration": 51130, + "src": "5463:5:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "internal" + } + ], + "src": "5462:7:193" + }, + "scope": 79447, + "stateMutability": "view", + "virtual": false, + "visibility": "public" + }, + { + "id": 79126, + "nodeType": "FunctionDefinition", + "src": "5683:82:193", + "nodes": [], + "body": { + "id": 79125, + "nodeType": "Block", + "src": "5737:28:193", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "74727565", + "id": 79123, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "5754:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + "functionReturnParameters": 79122, + "id": 79124, + "nodeType": "Return", + "src": "5747:11:193" + } + ] + }, + "baseFunctions": [ + 77378 + ], + "documentation": { + "id": 79117, + "nodeType": "StructuredDocumentation", + "src": "5606:72:193", + "text": " @notice This adaptor reports values in terms of debt." + }, + "functionSelector": "89353a09", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "isDebt", + "nameLocation": "5692:6:193", + "overrides": { + "id": 79119, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "5713:8:193" + }, + "parameters": { + "id": 79118, + "nodeType": "ParameterList", + "parameters": [], + "src": "5698:2:193" + }, + "returnParameters": { + "id": 79122, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79121, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79126, + "src": "5731:4:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 79120, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "5731:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "5730:6:193" + }, + "scope": 79447, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + }, + { + "id": 79167, + "nodeType": "FunctionDefinition", + "src": "6289:560:193", + "nodes": [], + "body": { + "id": 79166, + "nodeType": "Block", + "src": "6370:479:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 79136, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79130, + "src": "6396:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79135, + "name": "_validateFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79337, + "src": "6380:15:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (contract IFToken) view" + } + }, + "id": 79137, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6380:29:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79138, + "nodeType": "ExpressionStatement", + "src": "6380:29:193" + }, + { + "expression": { + "arguments": [ + { + "id": 79140, + "name": "amountToBorrow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79132, + "src": "6432:14:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 79141, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79130, + "src": "6448:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79139, + "name": "_borrowAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79409, + "src": "6419:12:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_uint256_$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (uint256,contract IFToken)" + } + }, + "id": 79142, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6419:42:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79143, + "nodeType": "ExpressionStatement", + "src": "6419:42:193" + }, + { + "assignments": [ + 79145 + ], + "declarations": [ + { + "constant": false, + "id": 79145, + "mutability": "mutable", + "name": "_exchangeRate", + "nameLocation": "6533:13:193", + "nodeType": "VariableDeclaration", + "scope": 79166, + "src": "6525:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79144, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6525:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 79149, + "initialValue": { + "arguments": [ + { + "id": 79147, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79130, + "src": "6570:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79146, + "name": "_getExchangeRateInfo", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79426, + "src": "6549:20:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$returns$_t_uint256_$", + "typeString": "function (contract IFToken) returns (uint256)" + } + }, + "id": 79148, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6549:34:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "6525:58:193" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 79156, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 79150, + "name": "minimumHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78965, + "src": "6680:19:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": ">", + "rightExpression": { + "components": [ + { + "arguments": [ + { + "id": 79152, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79130, + "src": "6720:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "id": 79153, + "name": "_exchangeRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79145, + "src": "6734:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 79151, + "name": "_getHealthFactor", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80457, + "src": "6703:16:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (contract IFToken,uint256) view returns (uint256)" + } + }, + "id": 79154, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6703:45:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "id": 79155, + "isConstant": false, + "isInlineArray": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "TupleExpression", + "src": "6702:47:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "6680:69:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 79165, + "nodeType": "IfStatement", + "src": "6676:167:193", + "trueBody": { + "id": 79164, + "nodeType": "Block", + "src": "6751:92:193", + "statements": [ + { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 79160, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79130, + "src": "6818:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79159, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "6810:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79158, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "6810:7:193", + "typeDescriptions": {} + } + }, + "id": 79161, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6810:21:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79157, + "name": "DebtFTokenAdaptor__HealthFactorTooLow", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78950, + "src": "6772:37:193", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", + "typeString": "function (address) pure" + } + }, + "id": 79162, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "6772:60:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79163, + "nodeType": "RevertStatement", + "src": "6765:67:193" + } + ] + } + } + ] + }, + "documentation": { + "id": 79127, + "nodeType": "StructuredDocumentation", + "src": "5909:375:193", + "text": " @notice Allows strategists to borrow assets from Fraxlend.\n @notice `debtTokenToBorrow` must be the debtToken, NOT the underlying ERC20.\n @param fraxlendPair the Fraxlend Pair to borrow from.\n @param amountToBorrow the amount of `debtTokenToBorrow` to borrow on Fraxlend.\n NOTE: `borrowAsset` is the same btw v1 and v2 FraxlendPairs" + }, + "functionSelector": "1586ffbb", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "borrowFromFraxlend", + "nameLocation": "6298:18:193", + "parameters": { + "id": 79133, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79130, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "6325:12:193", + "nodeType": "VariableDeclaration", + "scope": 79167, + "src": "6317:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79129, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79128, + "name": "IFToken", + "nameLocations": [ + "6317:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "6317:7:193" + }, + "referencedDeclaration": 66209, + "src": "6317:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79132, + "mutability": "mutable", + "name": "amountToBorrow", + "nameLocation": "6347:14:193", + "nodeType": "VariableDeclaration", + "scope": 79167, + "src": "6339:22:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79131, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "6339:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "6316:46:193" + }, + "returnParameters": { + "id": 79134, + "nodeType": "ParameterList", + "parameters": [], + "src": "6370:0:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 79263, + "nodeType": "FunctionDefinition", + "src": "7262:1157:193", + "nodes": [], + "body": { + "id": 79262, + "nodeType": "Block", + "src": "7350:1069:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 79177, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "7376:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79176, + "name": "_validateFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79337, + "src": "7360:15:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (contract IFToken) view" + } + }, + "id": 79178, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7360:30:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79179, + "nodeType": "ExpressionStatement", + "src": "7360:30:193" + }, + { + "assignments": [ + 79182 + ], + "declarations": [ + { + "constant": false, + "id": 79182, + "mutability": "mutable", + "name": "tokenToRepay", + "nameLocation": "7406:12:193", + "nodeType": "VariableDeclaration", + "scope": 79262, + "src": "7400:18:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + "typeName": { + "id": 79181, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79180, + "name": "ERC20", + "nameLocations": [ + "7400:5:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 51130, + "src": "7400:5:193" + }, + "referencedDeclaration": 51130, + "src": "7400:5:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "visibility": "internal" + } + ], + "id": 79188, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "id": 79185, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "7446:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79184, + "name": "_fraxlendPairAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79351, + "src": "7427:18:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_address_$", + "typeString": "function (contract IFToken) view returns (address)" + } + }, + "id": 79186, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7427:33:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79183, + "name": "ERC20", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 51130, + "src": "7421:5:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_ERC20_$51130_$", + "typeString": "type(contract ERC20)" + } + }, + "id": 79187, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7421:40:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7400:61:193" + }, + { + "assignments": [ + 79190 + ], + "declarations": [ + { + "constant": false, + "id": 79190, + "mutability": "mutable", + "name": "debtTokenToRepay", + "nameLocation": "7479:16:193", + "nodeType": "VariableDeclaration", + "scope": 79262, + "src": "7471:24:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79189, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7471:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 79195, + "initialValue": { + "arguments": [ + { + "id": 79192, + "name": "tokenToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79182, + "src": "7512:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + { + "id": 79193, + "name": "_debtTokenRepayAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79173, + "src": "7526:21:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 79191, + "name": "_maxAvailable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77408, + "src": "7498:13:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_ERC20_$51130_$_t_uint256_$returns$_t_uint256_$", + "typeString": "function (contract ERC20,uint256) view returns (uint256)" + } + }, + "id": 79194, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7498:50:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7471:77:193" + }, + { + "assignments": [ + 79197 + ], + "declarations": [ + { + "constant": false, + "id": 79197, + "mutability": "mutable", + "name": "sharesToRepay", + "nameLocation": "7566:13:193", + "nodeType": "VariableDeclaration", + "scope": 79262, + "src": "7558:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79196, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7558:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 79204, + "initialValue": { + "arguments": [ + { + "id": 79199, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "7597:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "id": 79200, + "name": "debtTokenToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79190, + "src": "7612:16:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "66616c7365", + "id": 79201, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7630:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + }, + { + "hexValue": "74727565", + "id": 79202, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7637:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 79198, + "name": "_toAssetShares", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79388, + "src": "7582:14:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$_t_bool_$_t_bool_$returns$_t_uint256_$", + "typeString": "function (contract IFToken,uint256,bool,bool) view returns (uint256)" + } + }, + "id": 79203, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7582:60:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7558:84:193" + }, + { + "assignments": [ + 79206 + ], + "declarations": [ + { + "constant": false, + "id": 79206, + "mutability": "mutable", + "name": "sharesAccToFraxlend", + "nameLocation": "7660:19:193", + "nodeType": "VariableDeclaration", + "scope": 79262, + "src": "7652:27:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79205, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7652:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "id": 79214, + "initialValue": { + "arguments": [ + { + "id": 79208, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "7700:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "arguments": [ + { + "id": 79211, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "7723:4:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + ], + "id": 79210, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7715:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79209, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7715:7:193", + "typeDescriptions": {} + } + }, + "id": 79212, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7715:13:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79207, + "name": "_userBorrowShares", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 80497, + "src": "7682:17:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$_t_address_$returns$_t_uint256_$", + "typeString": "function (contract IFToken,address) view returns (uint256)" + } + }, + "id": 79213, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7682:47:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "7652:77:193" + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 79217, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 79215, + "name": "sharesAccToFraxlend", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79206, + "src": "7792:19:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "==", + "rightExpression": { + "hexValue": "30", + "id": 79216, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "7815:1:193", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + "src": "7792:24:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 79225, + "nodeType": "IfStatement", + "src": "7788:97:193", + "trueBody": { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 79221, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "7870:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79220, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "7862:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79219, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "7862:7:193", + "typeDescriptions": {} + } + }, + "id": 79222, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7862:22:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79218, + "name": "DebtFTokenAdaptor__CannotRepayNoDebt", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78955, + "src": "7825:36:193", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", + "typeString": "function (address) pure" + } + }, + "id": 79223, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "7825:60:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79224, + "nodeType": "RevertStatement", + "src": "7818:67:193" + } + }, + { + "condition": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 79228, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 79226, + "name": "sharesAccToFraxlend", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79206, + "src": "8115:19:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "BinaryOperation", + "operator": "<", + "rightExpression": { + "id": 79227, + "name": "sharesToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79197, + "src": "8137:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8115:35:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 79234, + "nodeType": "IfStatement", + "src": "8111:101:193", + "trueBody": { + "id": 79233, + "nodeType": "Block", + "src": "8152:60:193", + "statements": [ + { + "expression": { + "id": 79231, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 79229, + "name": "sharesToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79197, + "src": "8166:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "id": 79230, + "name": "sharesAccToFraxlend", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79206, + "src": "8182:19:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "8166:35:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 79232, + "nodeType": "ExpressionStatement", + "src": "8166:35:193" + } + ] + } + }, + { + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 79240, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "8254:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79239, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8246:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79238, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8246:7:193", + "typeDescriptions": {} + } + }, + "id": 79241, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8246:22:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "expression": { + "arguments": [ + { + "id": 79244, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8275:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + }, + "typeName": { + "id": 79243, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "8275:7:193", + "typeDescriptions": {} + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_type$_t_uint256_$", + "typeString": "type(uint256)" + } + ], + "id": 79242, + "name": "type", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -27, + "src": "8270:4:193", + "typeDescriptions": { + "typeIdentifier": "t_function_metatype_pure$__$returns$__$", + "typeString": "function () pure" + } + }, + "id": 79245, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8270:13:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_magic_meta_type_t_uint256", + "typeString": "type(uint256)" + } + }, + "id": 79246, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "8284:3:193", + "memberName": "max", + "nodeType": "MemberAccess", + "src": "8270:17:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "expression": { + "id": 79235, + "name": "tokenToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79182, + "src": "8221:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + "id": 79237, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "8234:11:193", + "memberName": "safeApprove", + "nodeType": "MemberAccess", + "referencedDeclaration": 51550, + "src": "8221:24:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_ERC20_$51130_$", + "typeString": "function (contract ERC20,address,uint256)" + } + }, + "id": 79247, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8221:67:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79248, + "nodeType": "ExpressionStatement", + "src": "8221:67:193" + }, + { + "expression": { + "arguments": [ + { + "id": 79250, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "8311:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + { + "id": 79251, + "name": "sharesToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79197, + "src": "8326:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 79249, + "name": "_repayAsset", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79446, + "src": "8299:11:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$_t_uint256_$returns$__$", + "typeString": "function (contract IFToken,uint256)" + } + }, + "id": 79252, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8299:41:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79253, + "nodeType": "ExpressionStatement", + "src": "8299:41:193" + }, + { + "expression": { + "arguments": [ + { + "id": 79255, + "name": "tokenToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79182, + "src": "8375:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + } + }, + { + "arguments": [ + { + "id": 79258, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79171, + "src": "8397:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79257, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "8389:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79256, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "8389:7:193", + "typeDescriptions": {} + } + }, + "id": 79259, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8389:22:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_ERC20_$51130", + "typeString": "contract ERC20" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79254, + "name": "_revokeExternalApproval", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 77436, + "src": "8351:23:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$returns$__$", + "typeString": "function (contract ERC20,address)" + } + }, + "id": 79260, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "8351:61:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79261, + "nodeType": "ExpressionStatement", + "src": "8351:61:193" + } + ] + }, + "documentation": { + "id": 79168, + "nodeType": "StructuredDocumentation", + "src": "6875:382:193", + "text": " @notice Allows strategists to repay loan debt on Fraxlend Pair. Make sure to call addInterest() beforehand to ensure we are repaying what is required.\n @dev Uses `_maxAvailable` helper function, see BaseAdaptor.sol\n @param _fraxlendPair the Fraxlend Pair to repay debt from.\n @param _debtTokenRepayAmount the amount of `debtToken` to repay with." + }, + "functionSelector": "8b9b9d40", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "repayFraxlendDebt", + "nameLocation": "7271:17:193", + "parameters": { + "id": 79174, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79171, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "7297:13:193", + "nodeType": "VariableDeclaration", + "scope": 79263, + "src": "7289:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79170, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79169, + "name": "IFToken", + "nameLocations": [ + "7289:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "7289:7:193" + }, + "referencedDeclaration": 66209, + "src": "7289:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79173, + "mutability": "mutable", + "name": "_debtTokenRepayAmount", + "nameLocation": "7320:21:193", + "nodeType": "VariableDeclaration", + "scope": 79263, + "src": "7312:29:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79172, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "7312:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "7288:54:193" + }, + "returnParameters": { + "id": 79175, + "nodeType": "ParameterList", + "parameters": [], + "src": "7350:0:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 79279, + "nodeType": "FunctionDefinition", + "src": "8942:139:193", + "nodes": [], + "body": { + "id": 79278, + "nodeType": "Block", + "src": "8997:84:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 79271, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79267, + "src": "9023:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79270, + "name": "_validateFToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79337, + "src": "9007:15:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (contract IFToken) view" + } + }, + "id": 79272, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9007:30:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79273, + "nodeType": "ExpressionStatement", + "src": "9007:30:193" + }, + { + "expression": { + "arguments": [ + { + "id": 79275, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79267, + "src": "9060:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79274, + "name": "_addInterest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79365, + "src": "9047:12:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$returns$__$", + "typeString": "function (contract IFToken)" + } + }, + "id": 79276, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9047:27:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79277, + "nodeType": "ExpressionStatement", + "src": "9047:27:193" + } + ] + }, + "documentation": { + "id": 79264, + "nodeType": "StructuredDocumentation", + "src": "8425:512:193", + "text": " @notice Allows a strategist to call `addInterest` on a Frax Pair they are using.\n @param _fraxlendPair The specified Fraxlend Pair\n @dev A strategist might want to do this if a Frax Lend pair has not been interacted\n in a while, and the strategist does not plan on interacting with it during a\n rebalance.\n @dev Calling this can increase the share price during the rebalance,\n so a strategist should consider moving some assets into reserves." + }, + "functionSelector": "6dd659fd", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "callAddInterest", + "nameLocation": "8951:15:193", + "parameters": { + "id": 79268, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79267, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "8975:13:193", + "nodeType": "VariableDeclaration", + "scope": 79279, + "src": "8967:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79266, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79265, + "name": "IFToken", + "nameLocations": [ + "8967:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "8967:7:193" + }, + "referencedDeclaration": 66209, + "src": "8967:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "8966:23:193" + }, + "returnParameters": { + "id": 79269, + "nodeType": "ParameterList", + "parameters": [], + "src": "8997:0:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 79337, + "nodeType": "FunctionDefinition", + "src": "9326:444:193", + "nodes": [], + "body": { + "id": 79336, + "nodeType": "Block", + "src": "9388:382:193", + "nodes": [], + "statements": [ + { + "assignments": [ + 79287 + ], + "declarations": [ + { + "constant": false, + "id": 79287, + "mutability": "mutable", + "name": "positionHash", + "nameLocation": "9406:12:193", + "nodeType": "VariableDeclaration", + "scope": 79336, + "src": "9398:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + "typeName": { + "id": 79286, + "name": "bytes32", + "nodeType": "ElementaryTypeName", + "src": "9398:7:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "visibility": "internal" + } + ], + "id": 79303, + "initialValue": { + "arguments": [ + { + "arguments": [ + { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 79291, + "name": "identifier", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 79008 + ], + "referencedDeclaration": 79008, + "src": "9442:10:193", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_bytes32_$", + "typeString": "function () pure returns (bytes32)" + } + }, + "id": 79292, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9442:12:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "hexValue": "74727565", + "id": 79293, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "9456:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "true" + }, + { + "arguments": [ + { + "arguments": [ + { + "id": 79298, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79283, + "src": "9481:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79297, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9473:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79296, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9473:7:193", + "typeDescriptions": {} + } + }, + "id": 79299, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9473:22:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 79294, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "9462:3:193", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 79295, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9466:6:193", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "9462:10:193", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 79300, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9462:34:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "expression": { + "id": 79289, + "name": "abi", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -1, + "src": "9431:3:193", + "typeDescriptions": { + "typeIdentifier": "t_magic_abi", + "typeString": "abi" + } + }, + "id": 79290, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "memberLocation": "9435:6:193", + "memberName": "encode", + "nodeType": "MemberAccess", + "src": "9431:10:193", + "typeDescriptions": { + "typeIdentifier": "t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$", + "typeString": "function () pure returns (bytes memory)" + } + }, + "id": 79301, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9431:66:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes_memory_ptr", + "typeString": "bytes memory" + } + ], + "id": 79288, + "name": "keccak256", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -8, + "src": "9421:9:193", + "typeDescriptions": { + "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$", + "typeString": "function (bytes memory) pure returns (bytes32)" + } + }, + "id": 79302, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9421:77:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9398:100:193" + }, + { + "assignments": [ + 79305 + ], + "declarations": [ + { + "constant": false, + "id": 79305, + "mutability": "mutable", + "name": "positionId", + "nameLocation": "9515:10:193", + "nodeType": "VariableDeclaration", + "scope": 79336, + "src": "9508:17:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + }, + "typeName": { + "id": 79304, + "name": "uint32", + "nodeType": "ElementaryTypeName", + "src": "9508:6:193", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "visibility": "internal" + } + ], + "id": 79317, + "initialValue": { + "arguments": [ + { + "id": 79315, + "name": "positionHash", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79287, + "src": "9589:12:193", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + ], + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 79309, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9543:4:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + ], + "id": 79308, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9535:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79307, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9535:7:193", + "typeDescriptions": {} + } + }, + "id": 79310, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9535:13:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79306, + "name": "Cellar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61030, + "src": "9528:6:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Cellar_$61030_$", + "typeString": "type(contract Cellar)" + } + }, + "id": 79311, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9528:21:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Cellar_$61030", + "typeString": "contract Cellar" + } + }, + "id": 79312, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9550:8:193", + "memberName": "registry", + "nodeType": "MemberAccess", + "referencedDeclaration": 58935, + "src": "9528:30:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_contract$_Registry_$57893_$", + "typeString": "function () view external returns (contract Registry)" + } + }, + "id": 79313, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9528:32:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Registry_$57893", + "typeString": "contract Registry" + } + }, + "id": 79314, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9561:27:193", + "memberName": "getPositionHashToPositionId", + "nodeType": "MemberAccess", + "referencedDeclaration": 57601, + "src": "9528:60:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_bytes32_$returns$_t_uint32_$", + "typeString": "function (bytes32) view external returns (uint32)" + } + }, + "id": 79316, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9528:74:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + }, + "nodeType": "VariableDeclarationStatement", + "src": "9508:94:193" + }, + { + "condition": { + "id": 79327, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "nodeType": "UnaryOperation", + "operator": "!", + "prefix": true, + "src": "9616:49:193", + "subExpression": { + "arguments": [ + { + "id": 79325, + "name": "positionId", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79305, + "src": "9654:10:193", + "typeDescriptions": { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint32", + "typeString": "uint32" + } + ], + "expression": { + "arguments": [ + { + "arguments": [ + { + "id": 79321, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "9632:4:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + ], + "id": 79320, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9624:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79319, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9624:7:193", + "typeDescriptions": {} + } + }, + "id": 79322, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9624:13:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79318, + "name": "Cellar", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 61030, + "src": "9617:6:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_contract$_Cellar_$61030_$", + "typeString": "type(contract Cellar)" + } + }, + "id": 79323, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9617:21:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_contract$_Cellar_$61030", + "typeString": "contract Cellar" + } + }, + "id": 79324, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "9639:14:193", + "memberName": "isPositionUsed", + "nodeType": "MemberAccess", + "referencedDeclaration": 58190, + "src": "9617:36:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$returns$_t_bool_$", + "typeString": "function (uint256) view external returns (bool)" + } + }, + "id": 79326, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9617:48:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 79335, + "nodeType": "IfStatement", + "src": "9612:151:193", + "trueBody": { + "errorCall": { + "arguments": [ + { + "arguments": [ + { + "id": 79331, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79283, + "src": "9748:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + ], + "id": 79330, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "9740:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79329, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "9740:7:193", + "typeDescriptions": {} + } + }, + "id": 79332, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9740:22:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 79328, + "name": "DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 78945, + "src": "9686:53:193", + "typeDescriptions": { + "typeIdentifier": "t_function_error_pure$_t_address_$returns$__$", + "typeString": "function (address) pure" + } + }, + "id": 79333, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "9686:77:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79334, + "nodeType": "RevertStatement", + "src": "9679:84:193" + } + } + ] + }, + "documentation": { + "id": 79280, + "nodeType": "StructuredDocumentation", + "src": "9087:234:193", + "text": " @notice Validates that a given fraxlendPair is set up as a position in the Cellar.\n @param _fraxlendPair The specified Fraxlend Pair\n @dev This function uses `address(this)` as the address of the Cellar." + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_validateFToken", + "nameLocation": "9335:15:193", + "parameters": { + "id": 79284, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79283, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "9359:13:193", + "nodeType": "VariableDeclaration", + "scope": 79337, + "src": "9351:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79282, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79281, + "name": "IFToken", + "nameLocations": [ + "9351:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "9351:7:193" + }, + "referencedDeclaration": 66209, + "src": "9351:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "9350:23:193" + }, + "returnParameters": { + "id": 79285, + "nodeType": "ParameterList", + "parameters": [], + "src": "9388:0:193" + }, + "scope": 79447, + "stateMutability": "view", + "virtual": false, + "visibility": "internal" + }, + { + "id": 79351, + "nodeType": "FunctionDefinition", + "src": "11570:142:193", + "nodes": [], + "body": { + "id": 79350, + "nodeType": "Block", + "src": "11667:45:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 79346, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79341, + "src": "11684:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 79347, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "11698:5:193", + "memberName": "asset", + "nodeType": "MemberAccess", + "referencedDeclaration": 66173, + "src": "11684:19:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_address_$", + "typeString": "function () view external returns (address)" + } + }, + "id": 79348, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "11684:21:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "functionReturnParameters": 79345, + "id": 79349, + "nodeType": "Return", + "src": "11677:28:193" + } + ] + }, + "documentation": { + "id": 79338, + "nodeType": "StructuredDocumentation", + "src": "11399:166:193", + "text": " @notice gets the asset of the specified fraxlend pair\n @param _fraxlendPair The specified Fraxlend Pair\n @return asset of fraxlend pair" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_fraxlendPairAsset", + "nameLocation": "11579:18:193", + "parameters": { + "id": 79342, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79341, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "11606:13:193", + "nodeType": "VariableDeclaration", + "scope": 79351, + "src": "11598:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79340, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79339, + "name": "IFToken", + "nameLocations": [ + "11598:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "11598:7:193" + }, + "referencedDeclaration": 66209, + "src": "11598:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "11597:23:193" + }, + "returnParameters": { + "id": 79345, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79344, + "mutability": "mutable", + "name": "asset", + "nameLocation": "11660:5:193", + "nodeType": "VariableDeclaration", + "scope": 79351, + "src": "11652:13:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 79343, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "11652:7:193", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "11651:15:193" + }, + "scope": 79447, + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "id": 79365, + "nodeType": "FunctionDefinition", + "src": "11969:109:193", + "nodes": [], + "body": { + "id": 79364, + "nodeType": "Block", + "src": "12030:48:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "hexValue": "66616c7365", + "id": 79361, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "bool", + "lValueRequested": false, + "nodeType": "Literal", + "src": "12065:5:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "value": "false" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "id": 79358, + "name": "fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79355, + "src": "12040:12:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 79360, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12053:11:193", + "memberName": "addInterest", + "nodeType": "MemberAccess", + "referencedDeclaration": 66087, + "src": "12040:24:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_bool_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_struct$_CurrentRateInfo_$66031_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$", + "typeString": "function (bool) external returns (uint256,uint256,uint256,struct IFToken.CurrentRateInfo memory,struct IFToken.VaultAccount memory,struct IFToken.VaultAccount memory)" + } + }, + "id": 79362, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12040:31:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_struct$_CurrentRateInfo_$66031_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$", + "typeString": "tuple(uint256,uint256,uint256,struct IFToken.CurrentRateInfo memory,struct IFToken.VaultAccount memory,struct IFToken.VaultAccount memory)" + } + }, + "id": 79363, + "nodeType": "ExpressionStatement", + "src": "12040:31:193" + } + ] + }, + "documentation": { + "id": 79352, + "nodeType": "StructuredDocumentation", + "src": "11718:246:193", + "text": " @notice Caller calls `addInterest` on specified 'v2' Fraxlend Pair\n @dev fraxlendPair.addInterest() calls into the respective version (v2 by default) of Fraxlend Pair\n @param fraxlendPair The specified Fraxlend Pair" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_addInterest", + "nameLocation": "11978:12:193", + "parameters": { + "id": 79356, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79355, + "mutability": "mutable", + "name": "fraxlendPair", + "nameLocation": "11999:12:193", + "nodeType": "VariableDeclaration", + "scope": 79365, + "src": "11991:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79354, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79353, + "name": "IFToken", + "nameLocations": [ + "11991:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "11991:7:193" + }, + "referencedDeclaration": 66209, + "src": "11991:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "11990:22:193" + }, + "returnParameters": { + "id": 79357, + "nodeType": "ParameterList", + "parameters": [], + "src": "12030:0:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "id": 79388, + "nodeType": "FunctionDefinition", + "src": "12642:248:193", + "nodes": [], + "body": { + "id": 79387, + "nodeType": "Block", + "src": "12812:78:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 79382, + "name": "amount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79371, + "src": "12850:6:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "id": 79383, + "name": "roundUp", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79373, + "src": "12858:7:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + { + "id": 79384, + "name": "previewInterest", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79375, + "src": "12867:15:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "expression": { + "id": 79380, + "name": "fToken", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79369, + "src": "12829:6:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 79381, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "12836:13:193", + "memberName": "toAssetShares", + "nodeType": "MemberAccess", + "referencedDeclaration": 66058, + "src": "12829:20:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$_t_uint256_$_t_bool_$_t_bool_$returns$_t_uint256_$", + "typeString": "function (uint256,bool,bool) view external returns (uint256)" + } + }, + "id": 79385, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "12829:54:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "functionReturnParameters": 79379, + "id": 79386, + "nodeType": "Return", + "src": "12822:61:193" + } + ] + }, + "documentation": { + "id": 79366, + "nodeType": "StructuredDocumentation", + "src": "12084:553:193", + "text": " @notice Converts a given asset amount to a number of asset shares (fTokens) from specified 'v2' Fraxlend Pair\n @dev This is one of the adjusted functions from v1 to v2. ftoken.toAssetShares() calls into the respective version (v2 by default) of Fraxlend Pair\n @param fToken The specified Fraxlend Pair\n @param amount The amount of asset\n @param roundUp Whether to round up after division\n @param previewInterest Whether to preview interest accrual before calculation\n @return number of asset shares" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_toAssetShares", + "nameLocation": "12651:14:193", + "parameters": { + "id": 79376, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79369, + "mutability": "mutable", + "name": "fToken", + "nameLocation": "12683:6:193", + "nodeType": "VariableDeclaration", + "scope": 79388, + "src": "12675:14:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79368, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79367, + "name": "IFToken", + "nameLocations": [ + "12675:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "12675:7:193" + }, + "referencedDeclaration": 66209, + "src": "12675:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79371, + "mutability": "mutable", + "name": "amount", + "nameLocation": "12707:6:193", + "nodeType": "VariableDeclaration", + "scope": 79388, + "src": "12699:14:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79370, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12699:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79373, + "mutability": "mutable", + "name": "roundUp", + "nameLocation": "12728:7:193", + "nodeType": "VariableDeclaration", + "scope": 79388, + "src": "12723:12:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 79372, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12723:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79375, + "mutability": "mutable", + "name": "previewInterest", + "nameLocation": "12750:15:193", + "nodeType": "VariableDeclaration", + "scope": 79388, + "src": "12745:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "typeName": { + "id": 79374, + "name": "bool", + "nodeType": "ElementaryTypeName", + "src": "12745:4:193", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "visibility": "internal" + } + ], + "src": "12665:106:193" + }, + "returnParameters": { + "id": 79379, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79378, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 79388, + "src": "12803:7:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79377, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "12803:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "12802:9:193" + }, + "scope": 79447, + "stateMutability": "view", + "virtual": true, + "visibility": "internal" + }, + { + "id": 79409, + "nodeType": "FunctionDefinition", + "src": "13115:312:193", + "nodes": [], + "body": { + "id": 79408, + "nodeType": "Block", + "src": "13200:227:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 79400, + "name": "_borrowAmount", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79391, + "src": "13236:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "hexValue": "30", + "id": 79401, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "13251:1:193", + "typeDescriptions": { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + "value": "0" + }, + { + "arguments": [ + { + "id": 79404, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "13262:4:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + ], + "id": 79403, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "13254:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79402, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "13254:7:193", + "typeDescriptions": {} + } + }, + "id": 79405, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13254:13:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_rational_0_by_1", + "typeString": "int_const 0" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 79397, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79394, + "src": "13210:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 79399, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13224:11:193", + "memberName": "borrowAsset", + "nodeType": "MemberAccess", + "referencedDeclaration": 66013, + "src": "13210:25:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,uint256,address) external" + } + }, + "id": 79406, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13210:58:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79407, + "nodeType": "ExpressionStatement", + "src": "13210:58:193" + } + ] + }, + "documentation": { + "id": 79389, + "nodeType": "StructuredDocumentation", + "src": "12896:214:193", + "text": " @notice Borrow amount of borrowAsset in cellar account within fraxlend pair\n @param _borrowAmount The amount of borrowAsset to borrow\n @param _fraxlendPair The specified Fraxlend Pair" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_borrowAsset", + "nameLocation": "13124:12:193", + "parameters": { + "id": 79395, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79391, + "mutability": "mutable", + "name": "_borrowAmount", + "nameLocation": "13145:13:193", + "nodeType": "VariableDeclaration", + "scope": 79409, + "src": "13137:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79390, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13137:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79394, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "13168:13:193", + "nodeType": "VariableDeclaration", + "scope": 79409, + "src": "13160:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79393, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79392, + "name": "IFToken", + "nameLocations": [ + "13160:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "13160:7:193" + }, + "referencedDeclaration": 66209, + "src": "13160:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "13136:46:193" + }, + "returnParameters": { + "id": 79396, + "nodeType": "ParameterList", + "parameters": [], + "src": "13200:0:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "id": 79426, + "nodeType": "FunctionDefinition", + "src": "13658:182:193", + "nodes": [], + "body": { + "id": 79425, + "nodeType": "Block", + "src": "13759:81:193", + "nodes": [], + "statements": [ + { + "expression": { + "id": 79423, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftHandSide": { + "id": 79418, + "name": "exchangeRate", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79416, + "src": "13769:12:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "nodeType": "Assignment", + "operator": "=", + "rightHandSide": { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "expression": { + "id": 79419, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79413, + "src": "13784:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 79420, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13798:16:193", + "memberName": "exchangeRateInfo", + "nodeType": "MemberAccess", + "referencedDeclaration": 66208, + "src": "13784:30:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_view$__$returns$_t_struct$_ExchangeRateInfo_$66202_memory_ptr_$", + "typeString": "function () view external returns (struct IFToken.ExchangeRateInfo memory)" + } + }, + "id": 79421, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "13784:32:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_struct$_ExchangeRateInfo_$66202_memory_ptr", + "typeString": "struct IFToken.ExchangeRateInfo memory" + } + }, + "id": 79422, + "isConstant": false, + "isLValue": true, + "isPure": false, + "lValueRequested": false, + "memberLocation": "13817:16:193", + "memberName": "highExchangeRate", + "nodeType": "MemberAccess", + "referencedDeclaration": 66201, + "src": "13784:49:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "13769:64:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "id": 79424, + "nodeType": "ExpressionStatement", + "src": "13769:64:193" + } + ] + }, + "documentation": { + "id": 79410, + "nodeType": "StructuredDocumentation", + "src": "13433:220:193", + "text": " @notice Caller calls `updateExchangeRate()` on specified FraxlendV2 Pair\n @param _fraxlendPair The specified FraxLendPair\n @return exchangeRate needed to calculate the current health factor" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_getExchangeRateInfo", + "nameLocation": "13667:20:193", + "parameters": { + "id": 79414, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79413, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "13696:13:193", + "nodeType": "VariableDeclaration", + "scope": 79426, + "src": "13688:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79412, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79411, + "name": "IFToken", + "nameLocations": [ + "13688:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "13688:7:193" + }, + "referencedDeclaration": 66209, + "src": "13688:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + } + ], + "src": "13687:23:193" + }, + "returnParameters": { + "id": 79417, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79416, + "mutability": "mutable", + "name": "exchangeRate", + "nameLocation": "13745:12:193", + "nodeType": "VariableDeclaration", + "scope": 79426, + "src": "13737:20:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79415, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "13737:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "13736:22:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + }, + { + "id": 79446, + "nodeType": "FunctionDefinition", + "src": "14029:155:193", + "nodes": [], + "body": { + "id": 79445, + "nodeType": "Block", + "src": "14113:71:193", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "id": 79438, + "name": "sharesToRepay", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79432, + "src": "14148:13:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + { + "arguments": [ + { + "id": 79441, + "name": "this", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": -28, + "src": "14171:4:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_contract$_DebtFTokenAdaptor_$79447", + "typeString": "contract DebtFTokenAdaptor" + } + ], + "id": 79440, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "14163:7:193", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 79439, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "14163:7:193", + "typeDescriptions": {} + } + }, + "id": 79442, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14163:13:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "expression": { + "id": 79435, + "name": "_fraxlendPair", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 79430, + "src": "14123:13:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "id": 79437, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "memberLocation": "14137:10:193", + "memberName": "repayAsset", + "nodeType": "MemberAccess", + "referencedDeclaration": 66020, + "src": "14123:24:193", + "typeDescriptions": { + "typeIdentifier": "t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$", + "typeString": "function (uint256,address) external" + } + }, + "id": 79443, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "14123:54:193", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 79444, + "nodeType": "ExpressionStatement", + "src": "14123:54:193" + } + ] + }, + "documentation": { + "id": 79427, + "nodeType": "StructuredDocumentation", + "src": "13846:178:193", + "text": " @notice Repay fraxlend pair debt by an amount\n @param _fraxlendPair The specified Fraxlend Pair\n @param sharesToRepay The amount of shares to repay" + }, + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "_repayAsset", + "nameLocation": "14038:11:193", + "parameters": { + "id": 79433, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 79430, + "mutability": "mutable", + "name": "_fraxlendPair", + "nameLocation": "14058:13:193", + "nodeType": "VariableDeclaration", + "scope": 79446, + "src": "14050:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + }, + "typeName": { + "id": 79429, + "nodeType": "UserDefinedTypeName", + "pathNode": { + "id": 79428, + "name": "IFToken", + "nameLocations": [ + "14050:7:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 66209, + "src": "14050:7:193" + }, + "referencedDeclaration": 66209, + "src": "14050:7:193", + "typeDescriptions": { + "typeIdentifier": "t_contract$_IFToken_$66209", + "typeString": "contract IFToken" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 79432, + "mutability": "mutable", + "name": "sharesToRepay", + "nameLocation": "14081:13:193", + "nodeType": "VariableDeclaration", + "scope": 79446, + "src": "14073:21:193", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "typeName": { + "id": 79431, + "name": "uint256", + "nodeType": "ElementaryTypeName", + "src": "14073:7:193", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "visibility": "internal" + } + ], + "src": "14049:46:193" + }, + "returnParameters": { + "id": 79434, + "nodeType": "ParameterList", + "parameters": [], + "src": "14113:0:193" + }, + "scope": 79447, + "stateMutability": "nonpayable", + "virtual": true, + "visibility": "internal" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 78930, + "name": "BaseAdaptor", + "nameLocations": [ + "633:11:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 77495, + "src": "633:11:193" + }, + "id": 78931, + "nodeType": "InheritanceSpecifier", + "src": "633:11:193" + }, + { + "baseName": { + "id": 78932, + "name": "FraxlendHealthFactorLogic", + "nameLocations": [ + "646:25:193" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 80549, + "src": "646:25:193" + }, + "id": 78933, + "nodeType": "InheritanceSpecifier", + "src": "646:25:193" + } + ], + "canonicalName": "DebtFTokenAdaptor", + "contractDependencies": [], + "contractKind": "contract", + "documentation": { + "id": 78929, + "nodeType": "StructuredDocumentation", + "src": "353:249:193", + "text": " @title FraxLend Debt Token Adaptor\n @notice Allows Cellars to borrow assets from FraxLend pairs.\n @author crispymangoes, 0xEinCodes\n NOTE: repayAssetWithCollateral() is not allowed from strategist to call in FraxlendCore for cellar." + }, + "fullyImplemented": true, + "linearizedBaseContracts": [ + 79447, + 80549, + 77495 + ], + "name": "DebtFTokenAdaptor", + "nameLocation": "612:17:193", + "scope": 79448, + "usedErrors": [ + 77230, + 77233, + 77236, + 77239, + 77244, + 77247, + 78945, + 78950, + 78955 + ], + "usedEvents": [] + } + ], + "license": "Apache-2.0" + }, + "id": 193 +} \ No newline at end of file diff --git a/steward_abi/abi/LegacyCellarAdaptorV1.json b/steward_abi/abi/LegacyCellarAdaptorV1.json new file mode 100644 index 00000000..787ecf41 --- /dev/null +++ b/steward_abi/abi/LegacyCellarAdaptorV1.json @@ -0,0 +1,284 @@ +[ + { + "inputs": [], + "name": "BaseAdaptor__ConstructorHealthFactorTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__ExternalReceiverBlocked", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "name": "BaseAdaptor__PricingNotSupported", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__Slippage", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__UserDepositsNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "BaseAdaptor__UserWithdrawsNotAllowed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cellar", + "type": "address" + } + ], + "name": "LegacyCellarAdaptor__CellarPositionNotUsed", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "assetOf", + "outputs": [ + { + "internalType": "contract ERC20", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "assetsUsed", + "outputs": [ + { + "internalType": "contract ERC20[]", + "name": "assets", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "adaptorData", + "type": "bytes" + } + ], + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract Cellar", + "name": "cellar", + "type": "address" + }, + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "depositToCellar", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "identifier", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [], + "name": "isDebt", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "name": "revokeApproval", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "slippage", + "outputs": [ + { + "internalType": "uint32", + "name": "", + "type": "uint32" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract Cellar", + "name": "cellar", + "type": "address" + }, + { + "internalType": "uint256", + "name": "assets", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + } + ], + "name": "withdrawFromCellar", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "name": "withdrawableFrom", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/steward_abi/src/collateral_f_token_adaptor_v1.rs b/steward_abi/src/collateral_f_token_adaptor_v1.rs new file mode 100644 index 00000000..70a57c90 --- /dev/null +++ b/steward_abi/src/collateral_f_token_adaptor_v1.rs @@ -0,0 +1,603 @@ +pub use collateralftokenadaptorv1_mod::*; +#[allow(clippy::too_many_arguments)] +mod collateralftokenadaptorv1_mod { + #![allow(clippy::enum_variant_names)] + #![allow(dead_code)] + #![allow(clippy::type_complexity)] + #![allow(unused_imports)] + use ethers::contract::{ + builders::{ContractCall, Event}, + Contract, Lazy, + }; + use ethers::core::{ + abi::{Abi, Detokenize, InvalidOutputType, Token, Tokenizable}, + types::*, + }; + use ethers::providers::Middleware; + #[doc = "CollateralFTokenAdaptorV1 was auto-generated with ethers-rs Abigen. More information at: https://github.com/gakonst/ethers-rs"] + use std::sync::Arc; + pub static COLLATERALFTOKENADAPTORV1_ABI: ethers::contract::Lazy = + ethers::contract::Lazy::new(|| { + serde_json :: from_str ("{\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_frax\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_healthFactor\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__ConstructorHealthFactorTooLow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__ExternalReceiverBlocked\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"asset\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BaseAdaptor__PricingNotSupported\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__Slippage\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__UserDepositsNotAllowed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__UserWithdrawsNotAllowed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"CollateralFTokenAdaptor__HealthFactorTooLow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"FRAX\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_collateralToDeposit\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"addCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"_adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"assetOf\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"assetsUsed\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20[]\",\n \"name\": \"assets\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"assets\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"identifier\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"isDebt\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"minimumHealthFactor\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_collateralAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"removeCollateral\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"asset\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeApproval\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"slippage\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"withdrawableFrom\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": {\n \"object\": \"0x60c060405234801561001057600080fd5b506040516112d83803806112d883398101604081905261002f9161007a565b6100388161004e565b6001600160a01b0390911660805260a0526100b4565b670e92596fd6290000811015610077576040516397ed5f4160e01b815260040160405180910390fd5b50565b6000806040838503121561008d57600080fd5b82516001600160a01b03811681146100a457600080fd5b6020939093015192949293505050565b60805160a0516111f96100df6000396000818160f40152610458015260006101b001526111f96000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063aeffddde1161008c578063d3bfe76a11610066578063d3bfe76a146101fd578063d41ddc9614610210578063e170a9bf14610223578063fa50e5d21461023657600080fd5b8063aeffddde1461018b578063b0e4556f146101ab578063c9111bd7146101ea57600080fd5b80636d75b9ee116100c85780636d75b9ee1461014e57806378415365146101615780637998a1c41461017457806389353a091461017c57600080fd5b80631caff8b1146100ef5780633e032a3b1461012957806369445c3114610139575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6040516123288152602001610120565b61014c610147366004610d0f565b610249565b005b61014c61015c366004610d94565b6102a8565b61011661016f366004610dc0565b6102fc565b610116610326565b60405160008152602001610120565b61019e610199366004610dc0565b610397565b6040516101209190610dfd565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b61014c6101f8366004610e4a565b6103fa565b61014c61020b366004610eca565b610413565b61014c61021e366004610f03565b61042c565b6101d2610231366004610dc0565b6104ab565b610116610244366004610f28565b6104cd565b60008280602001905181019061025f9190610f8c565b9050600061026c826104d6565b90506102778261053a565b8161028c6001600160a01b03831682886106f4565b6102968387610771565b6102a082826107ce565b505050505050565b6102b18261053a565b60006102bc836104d6565b905060006102ca828461085d565b9050836102e16001600160a01b03841682846106f4565b6102eb8583610771565b6102f583826107ce565b5050505050565b600080828060200190518101906103139190610f8c565b905061031f81336108de565b9392505050565b600060405160200161037c906020808252602a908201527f467261784c656e6420436f6c6c61746572616c2066546f6b656e56322041646160408201526970746f72205620302e3160b01b606082015260800190565b60405160208183030381529060405280519060200120905090565b604080516001808252818301909252606091602080830190803683370190505090506103c2826104ab565b816000815181106103d5576103d5610fa9565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6104286001600160a01b0383168260006106f4565b5050565b6104358161053a565b61043f828261094d565b600061044a82610980565b905061045682826109ee565b7f000000000000000000000000000000000000000000000000000000000000000011156104a657604051631e7f7dad60e31b81526001600160a01b03831660048201526024015b60405180910390fd5b505050565b600080828060200190518101906104c29190610f8c565b905061031f816104d6565b60005b92915050565b6000816001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610516573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190610f8c565b6000610544610326565b604080516001600160a01b03851660208201526000910160408051601f198184030181529082905261057a939291602001610fbf565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f69190610f8c565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161062391815260200190565b602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106649190611037565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cc9190611052565b6104a657604051630673531760e21b81526001600160a01b038416600482015260240161049d565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061076b5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161049d565b50505050565b60405163cadac47960e01b8152600481018290523060248201526001600160a01b0383169063cadac479906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156102a0573d6000803e3d6000fd5b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611074565b1115610428576104286001600160a01b0383168260006106f4565b600060001982036108d7576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156108ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611074565b90506104d0565b50806104d0565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af3062906024015b602060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031f9190611074565b604051636a0eee4b60e11b8152600481018390523060248201526001600160a01b0382169063d41ddc96906044016107a0565b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e4919061108d565b6080015192915050565b6000806109fb8430610abb565b90506000610a0c8583600180610aed565b905080600003610a2857670e92596fd6290000925050506104d0565b6000610a3486306108de565b905080600003610a4a57600093505050506104d0565b600080610a5688610b72565b90925090506000838383610a6a8b8961111f565b610a749190611144565b610a7e919061111f565b610a889190611144565b90506000610a958a610be9565b90506000610aac82670de0b6b3a764000085610c4d565b9b9a5050505050505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df9060240161090c565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b57190606401602060405180830381865afa158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190611074565b95945050505050565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd89190611166565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190611074565b828202811515841585830485141716610c6557600080fd5b0492915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610c9357600080fd5b813567ffffffffffffffff80821115610cae57610cae610c6c565b604051601f8301601f19908116603f01168101908282118183101715610cd657610cd6610c6c565b81604052838152866020858801011115610cef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610d2457600080fd5b83359250602084013567ffffffffffffffff80821115610d4357600080fd5b610d4f87838801610c82565b93506040860135915080821115610d6557600080fd5b50610d7286828701610c82565b9150509250925092565b6001600160a01b0381168114610d9157600080fd5b50565b60008060408385031215610da757600080fd5b8235610db281610d7c565b946020939093013593505050565b600060208284031215610dd257600080fd5b813567ffffffffffffffff811115610de957600080fd5b610df584828501610c82565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610e3e5783516001600160a01b031683529284019291840191600101610e19565b50909695505050505050565b60008060008060808587031215610e6057600080fd5b843593506020850135610e7281610d7c565b9250604085013567ffffffffffffffff80821115610e8f57600080fd5b610e9b88838901610c82565b93506060870135915080821115610eb157600080fd5b50610ebe87828801610c82565b91505092959194509250565b60008060408385031215610edd57600080fd5b8235610ee881610d7c565b91506020830135610ef881610d7c565b809150509250929050565b60008060408385031215610f1657600080fd5b823591506020830135610ef881610d7c565b60008060408385031215610f3b57600080fd5b823567ffffffffffffffff80821115610f5357600080fd5b610f5f86838701610c82565b93506020850135915080821115610f7557600080fd5b50610f8285828601610c82565b9150509250929050565b600060208284031215610f9e57600080fd5b815161031f81610d7c565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b81811015610ffb57858101830151858201608001528201610fdf565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff8116811461103257600080fd5b919050565b60006020828403121561104957600080fd5b61031f8261101e565b60006020828403121561106457600080fd5b8151801515811461031f57600080fd5b60006020828403121561108657600080fd5b5051919050565b600060a0828403121561109f57600080fd5b60405160a0810181811067ffffffffffffffff821117156110c2576110c2610c6c565b60405282516110d081610d7c565b81526110de6020840161101e565b602082015260408301516001600160b81b03811681146110fd57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b80820281158282048414176104d057634e487b7160e01b600052601160045260246000fd5b60008261116157634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600080610100898b03121561118357600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea2646970667358221220a758b2990fb2dd13bcbd548a71ed74b10c5fdbf90a365ba8e540fdfe78ad6a5c64736f6c63430008150033\",\n \"sourceMap\": \"527:10498:191:-:0;;;2007:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2067:52;2105:13;2067:37;:52::i;:::-;-1:-1:-1;;;;;2129:19:191;;;;;2158:35;;527:10498;;8769:233:187;2786:7;8873:19;:57;8869:126;;;8951:44;;-1:-1:-1;;;8951:44:187;;;;;;;;;;;8869:126;8769:233;:::o;14:351:266:-;93:6;101;154:2;142:9;133:7;129:23;125:32;122:52;;;170:1;167;160:12;122:52;196:16;;-1:-1:-1;;;;;241:31:266;;231:42;;221:70;;287:1;284;277:12;221:70;355:2;340:18;;;;334:25;310:5;;334:25;;-1:-1:-1;;;14:351:266:o;:::-;527:10498:191;;;;;;;;;;;;;;;;;;;;;;;\",\n \"linkReferences\": {}\n },\n \"deployedBytecode\": {\n \"object\": \"0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c8063aeffddde1161008c578063d3bfe76a11610066578063d3bfe76a146101fd578063d41ddc9614610210578063e170a9bf14610223578063fa50e5d21461023657600080fd5b8063aeffddde1461018b578063b0e4556f146101ab578063c9111bd7146101ea57600080fd5b80636d75b9ee116100c85780636d75b9ee1461014e57806378415365146101615780637998a1c41461017457806389353a091461017c57600080fd5b80631caff8b1146100ef5780633e032a3b1461012957806369445c3114610139575b600080fd5b6101167f000000000000000000000000000000000000000000000000000000000000000081565b6040519081526020015b60405180910390f35b6040516123288152602001610120565b61014c610147366004610d0f565b610249565b005b61014c61015c366004610d94565b6102a8565b61011661016f366004610dc0565b6102fc565b610116610326565b60405160008152602001610120565b61019e610199366004610dc0565b610397565b6040516101209190610dfd565b6101d27f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610120565b61014c6101f8366004610e4a565b6103fa565b61014c61020b366004610eca565b610413565b61014c61021e366004610f03565b61042c565b6101d2610231366004610dc0565b6104ab565b610116610244366004610f28565b6104cd565b60008280602001905181019061025f9190610f8c565b9050600061026c826104d6565b90506102778261053a565b8161028c6001600160a01b03831682886106f4565b6102968387610771565b6102a082826107ce565b505050505050565b6102b18261053a565b60006102bc836104d6565b905060006102ca828461085d565b9050836102e16001600160a01b03841682846106f4565b6102eb8583610771565b6102f583826107ce565b5050505050565b600080828060200190518101906103139190610f8c565b905061031f81336108de565b9392505050565b600060405160200161037c906020808252602a908201527f467261784c656e6420436f6c6c61746572616c2066546f6b656e56322041646160408201526970746f72205620302e3160b01b606082015260800190565b60405160208183030381529060405280519060200120905090565b604080516001808252818301909252606091602080830190803683370190505090506103c2826104ab565b816000815181106103d5576103d5610fa9565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6104286001600160a01b0383168260006106f4565b5050565b6104358161053a565b61043f828261094d565b600061044a82610980565b905061045682826109ee565b7f000000000000000000000000000000000000000000000000000000000000000011156104a657604051631e7f7dad60e31b81526001600160a01b03831660048201526024015b60405180910390fd5b505050565b600080828060200190518101906104c29190610f8c565b905061031f816104d6565b60005b92915050565b6000816001600160a01b031663c6e1c7c96040518163ffffffff1660e01b8152600401602060405180830381865afa158015610516573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190610f8c565b6000610544610326565b604080516001600160a01b03851660208201526000910160408051601f198184030181529082905261057a939291602001610fbf565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa1580156105d2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105f69190610f8c565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161062391815260200190565b602060405180830381865afa158015610640573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106649190611037565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cc9190611052565b6104a657604051630673531760e21b81526001600160a01b038416600482015260240161049d565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d116001600051141617169150508061076b5760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b604482015260640161049d565b50505050565b60405163cadac47960e01b8152600481018290523060248201526001600160a01b0383169063cadac479906044015b600060405180830381600087803b1580156107ba57600080fd5b505af11580156102a0573d6000803e3d6000fd5b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa15801561081e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108429190611074565b1115610428576104286001600160a01b0383168260006106f4565b600060001982036108d7576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa1580156108ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d09190611074565b90506104d0565b50806104d0565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af3062906024015b602060405180830381865afa158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061031f9190611074565b604051636a0eee4b60e11b8152600481018390523060248201526001600160a01b0382169063d41ddc96906044016107a0565b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e4919061108d565b6080015192915050565b6000806109fb8430610abb565b90506000610a0c8583600180610aed565b905080600003610a2857670e92596fd6290000925050506104d0565b6000610a3486306108de565b905080600003610a4a57600093505050506104d0565b600080610a5688610b72565b90925090506000838383610a6a8b8961111f565b610a749190611144565b610a7e919061111f565b610a889190611144565b90506000610a958a610be9565b90506000610aac82670de0b6b3a764000085610c4d565b9b9a5050505050505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df9060240161090c565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b57190606401602060405180830381865afa158015610b45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b699190611074565b95945050505050565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610bb4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bd89190611166565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c29573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104d09190611074565b828202811515841585830485141716610c6557600080fd5b0492915050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610c9357600080fd5b813567ffffffffffffffff80821115610cae57610cae610c6c565b604051601f8301601f19908116603f01168101908282118183101715610cd657610cd6610c6c565b81604052838152866020858801011115610cef57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610d2457600080fd5b83359250602084013567ffffffffffffffff80821115610d4357600080fd5b610d4f87838801610c82565b93506040860135915080821115610d6557600080fd5b50610d7286828701610c82565b9150509250925092565b6001600160a01b0381168114610d9157600080fd5b50565b60008060408385031215610da757600080fd5b8235610db281610d7c565b946020939093013593505050565b600060208284031215610dd257600080fd5b813567ffffffffffffffff811115610de957600080fd5b610df584828501610c82565b949350505050565b6020808252825182820181905260009190848201906040850190845b81811015610e3e5783516001600160a01b031683529284019291840191600101610e19565b50909695505050505050565b60008060008060808587031215610e6057600080fd5b843593506020850135610e7281610d7c565b9250604085013567ffffffffffffffff80821115610e8f57600080fd5b610e9b88838901610c82565b93506060870135915080821115610eb157600080fd5b50610ebe87828801610c82565b91505092959194509250565b60008060408385031215610edd57600080fd5b8235610ee881610d7c565b91506020830135610ef881610d7c565b809150509250929050565b60008060408385031215610f1657600080fd5b823591506020830135610ef881610d7c565b60008060408385031215610f3b57600080fd5b823567ffffffffffffffff80821115610f5357600080fd5b610f5f86838701610c82565b93506020850135915080821115610f7557600080fd5b50610f8285828601610c82565b9150509250929050565b600060208284031215610f9e57600080fd5b815161031f81610d7c565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b81811015610ffb57858101830151858201608001528201610fdf565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff8116811461103257600080fd5b919050565b60006020828403121561104957600080fd5b61031f8261101e565b60006020828403121561106457600080fd5b8151801515811461031f57600080fd5b60006020828403121561108657600080fd5b5051919050565b600060a0828403121561109f57600080fd5b60405160a0810181811067ffffffffffffffff821117156110c2576110c2610c6c565b60405282516110d081610d7c565b81526110de6020840161101e565b602082015260408301516001600160b81b03811681146110fd57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b80820281158282048414176104d057634e487b7160e01b600052601160045260246000fd5b60008261116157634e487b7160e01b600052601260045260246000fd5b500490565b600080600080600080600080610100898b03121561118357600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea2646970667358221220a758b2990fb2dd13bcbd548a71ed74b10c5fdbf90a365ba8e540fdfe78ad6a5c64736f6c63430008150033\",\n \"sourceMap\": \"527:10498:191:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1956:44;;;;;;;;160:25:266;;;148:2;133:18;1956:44:191;;;;;;;;2441:78:187;;;2507:5;340:42:266;;328:2;313:18;2441:78:187;196:192:266;3183:564:191;;;;;;:::i;:::-;;:::i;:::-;;5675:583;;;;;;:::i;:::-;;:::i;4606:223::-;;;;;;:::i;:::-;;:::i;2619:160::-;;;:::i;5185:83::-;;;5233:4;2998:41:266;;2986:2;2971:18;5185:83:191;2858:187:266;5960:180:187;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1734:27:191:-;;;;;;;;-1:-1:-1;;;;;3907:32:266;;;3889:51;;3877:2;3862:18;1734:27:191;3728:218:266;3916:147:191;;;;;;:::i;:::-;;:::i;9230:107:187:-;;;;;;:::i;:::-;;:::i;6535:586:191:-;;;;;;:::i;:::-;;:::i;4891:210::-;;;;;;:::i;:::-;;:::i;4318:118::-;;;;;;:::i;:::-;;:::i;3183:564::-;3282:20;3316:11;3305:34;;;;;;;;;;;;:::i;:::-;3282:57;;3349:21;3373:37;3397:12;3373:23;:37::i;:::-;3349:61;;3421:29;3437:12;3421:15;:29::i;:::-;3498:12;3521:56;-1:-1:-1;;;;;3521:27:191;;3498:12;3570:6;3521:27;:56::i;:::-;3588:36;3603:12;3617:6;3588:14;:36::i;:::-;3679:61;3703:15;3720:19;3679:23;:61::i;:::-;3272:475;;;3183:564;;;:::o;5675:583::-;5768:30;5784:13;5768:15;:30::i;:::-;5808:22;5833:38;5857:13;5833:23;:38::i;:::-;5808:63;;5882:23;5908:53;5922:16;5940:20;5908:13;:53::i;:::-;5882:79;-1:-1:-1;6002:13:191;6026:59;-1:-1:-1;;;;;6026:28:191;;6002:13;5882:79;6026:28;:59::i;:::-;6095:46;6110:13;6125:15;6095:14;:46::i;:::-;6196:55;6220:16;6238:12;6196:23;:55::i;:::-;5758:500;;;5675:583;;:::o;4606:223::-;4681:7;4700:20;4734:11;4723:34;;;;;;;;;;;;:::i;:::-;4700:57;;4774:48;4797:12;4811:10;4774:22;:48::i;:::-;4767:55;4606:223;-1:-1:-1;;;4606:223:191:o;2619:160::-;2679:7;2715:56;;;;;;6508:2:266;6490:21;;;6547:2;6527:18;;;6520:30;6586:34;6581:2;6566:18;;6559:62;-1:-1:-1;;;6652:2:266;6637:18;;6630:40;6702:3;6687:19;;6306:406;2715:56:191;;;;;;;;;;;;;2705:67;;;;;;2698:74;;2619:160;:::o;5960:180:187:-;6077:14;;;6089:1;6077:14;;;;;;;;;6035:21;;6077:14;;;;;;;;;;;-1:-1:-1;6077:14:187;6068:23;;6113:20;6121:11;6113:7;:20::i;:::-;6101:6;6108:1;6101:9;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;6101:32:187;;;-1:-1:-1;;;;;6101:32:187;;;;;5960:180;;;:::o;3916:147:191:-;4018:38;;-1:-1:-1;;;4018:38:191;;;;;;;;;;;9230:107:187;9301:29;-1:-1:-1;;;;;9301:17:187;;9319:7;9328:1;9301:17;:29::i;:::-;9230:107;;:::o;6535:586:191:-;6628:30;6644:13;6628:15;:30::i;:::-;6697:51;6715:17;6734:13;6697:17;:51::i;:::-;6758:21;6782:35;6803:13;6782:20;:35::i;:::-;6758:59;;6967:46;6984:13;6999;6967:16;:46::i;:::-;6944:19;:70;6940:175;;;7037:67;;-1:-1:-1;;;7037:67:191;;-1:-1:-1;;;;;3907:32:266;;7037:67:191;;;3889:51:266;3862:18;;7037:67:191;;;;;;;;6940:175;6618:503;6535:586;;:::o;4891:210::-;4965:5;4982:20;5016:12;5005:35;;;;;;;;;;;;:::i;:::-;4982:58;;5057:37;5081:12;5057:23;:37::i;4318:118::-;4402:7;4318:118;;;;;:::o;10002:178::-;10089:24;10138:13;-1:-1:-1;;;;;10138:32:191;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7417:459::-;7497:20;7541:12;:10;:12::i;:::-;7562:34;;;-1:-1:-1;;;;;3907:32:266;;7562:34:191;;;3889:51:266;7555:5:191;;3862:18:266;7562:34:191;;;-1:-1:-1;;7562:34:191;;;;;;;;;;7530:67;;;;7562:34;7530:67;;:::i;:::-;;;;;;;;;;;;;7520:78;;;;;;7497:101;;7608:17;7643:4;-1:-1:-1;;;;;7628:30:191;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7628:60:191;;7689:12;7628:74;;;;;;;;;;;;;160:25:266;;148:2;133:18;;14:177;7628:74:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7717:48;;-1:-1:-1;;;7717:48:191;;370:10:266;358:23;;7717:48:191;;;340:42:266;7608:94:191;;-1:-1:-1;7732:4:191;;7717:36;;313:18:266;;7717:48:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7712:157;;7786:83;;-1:-1:-1;;;7786:83:191;;-1:-1:-1;;;;;3907:32:266;;7786:83:191;;;3889:51:266;3862:18;;7786:83:191;3728:218:266;4455:1497:65;4566:12;4736:4;4730:11;-1:-1:-1;;;4859:17:65;4852:93;4992:2;4988:1;4969:17;4965:25;4958:37;5072:6;5067:2;5048:17;5044:26;5037:42;5874:2;5871:1;5867:2;5848:17;5845:1;5838:5;5831;5826:51;5395:16;5388:24;5382:2;5364:16;5361:24;5357:1;5353;5347:8;5344:15;5340:46;5337:76;5137:754;5126:765;;;5919:7;5911:34;;;;-1:-1:-1;;;5911:34:65;;9376:2:266;5911:34:65;;;9358:21:266;9415:2;9395:18;;;9388:30;-1:-1:-1;;;9434:18:266;;;9427:44;9488:18;;5911:34:65;9174:338:266;5911:34:65;4556:1396;4455:1497;;;:::o;9640:157:191:-;9731:59;;-1:-1:-1;;;9731:59:191;;;;;9691:25:266;;;9784:4:191;9732:18:266;;;9725:60;-1:-1:-1;;;;;9731:27:191;;;;;9664:18:266;;9731:59:191;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8184:167:187;8270:39;;-1:-1:-1;;;8270:39:187;;8294:4;8270:39;;;10008:34:266;-1:-1:-1;;;;;10078:15:266;;;10058:18;;;10051:43;8312:1:187;;8270:15;;;;;;9943:18:266;;8270:39:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;8266:78;;;8315:29;-1:-1:-1;;;;;8315:17:187;;8333:7;8342:1;8315:17;:29::i;7842:207::-;7925:7;-1:-1:-1;;7948:6:187;:27;7944:98;;7984:30;;-1:-1:-1;;;7984:30:187;;8008:4;7984:30;;;3889:51:266;-1:-1:-1;;;;;7984:15:187;;;;;3862:18:266;;7984:30:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7977:37;;;;7944:98;-1:-1:-1;8036:6:187;8029:13;;3894:216:197;4061:42;;-1:-1:-1;;;4061:42:197;;-1:-1:-1;;;;;3907:32:266;;;4061:42:197;;;3889:51:266;4017:25:197;;4061:35;;;;;;3862:18:266;;4061:42:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10435:175:191:-;10539:64;;-1:-1:-1;;;10539:64:191;;;;;9691:25:266;;;10597:4:191;9732:18:266;;;9725:60;-1:-1:-1;;;;;10539:30:191;;;;;9664:18:266;;10539:64:191;9517:274:266;10841:182:191;10920:20;10967:13;-1:-1:-1;;;;;10967:30:191;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;10841:182;-1:-1:-1;;10841:182:191:o;1173:1164:197:-;1276:7;1333:22;1358:47;1376:13;1399:4;1358:17;:47::i;:::-;1333:72;;1415:23;1441:58;1457:13;1472:14;1488:4;1494;1441:15;:58::i;:::-;1415:84;;1638:15;1657:1;1638:20;1634:40;;1667:7;1660:14;;;;;;1634:40;1684:25;1712:52;1735:13;1758:4;1712:22;:52::i;:::-;1684:80;;1778:17;1799:1;1778:22;1774:36;;1809:1;1802:8;;;;;;;1774:36;1822:21;1845:26;1875:28;1889:13;1875;:28::i;:::-;1821:82;;-1:-1:-1;1821:82:197;-1:-1:-1;1913:26:197;2031:17;1821:82;;1945:31;1963:13;1945:15;:31;:::i;:::-;1944:54;;;;:::i;:::-;1943:72;;;;:::i;:::-;1942:106;;;;:::i;:::-;1913:135;;2099:26;2128:22;2136:13;2128:7;:22::i;:::-;2099:51;-1:-1:-1;2191:17:197;2211:55;2099:51;2241:4;2247:18;2211:29;:55::i;:::-;2191:75;1173:1164;-1:-1:-1;;;;;;;;;;;1173:1164:197:o;3388:257::-;3552:37;;-1:-1:-1;;;3552:37:197;;-1:-1:-1;;;;;3907:32:266;;;3552:37:197;;;3889:51:266;3506:27:197;;3552:30;;;;;;3862:18:266;;3552:37:197;3728:218:266;2906:270:197;3104:65;;-1:-1:-1;;;3104:65:197;;;;;11886:25:266;;;11954:14;;11947:22;11927:18;;;11920:50;12013:14;;12006:22;11986:18;;;11979:50;3078:7:197;;-1:-1:-1;;;;;3104:28:197;;;;;11859:18:266;;3104:65:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3097:72;2906:270;-1:-1:-1;;;;;2906:270:197:o;4116:237::-;4207:21;4230:26;4318:13;-1:-1:-1;;;;;4318:26:197;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4268:78:197;;;;-1:-1:-1;4116:237:197;;-1:-1:-1;;;;;;;4116:237:197:o;4359:135::-;4430:14;4465:13;-1:-1:-1;;;;;4465:20:197;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1331:505:225:-;1507:9;;;1638:19;;1631:27;1663:9;;1677;;;1674:16;;1660:31;1627:65;1617:121;;1722:1;1719;1712:12;1617:121;1801:19;;1331:505;-1:-1:-1;;1331:505:225:o;393:127:266:-;454:10;449:3;445:20;442:1;435:31;485:4;482:1;475:15;509:4;506:1;499:15;525:718;567:5;620:3;613:4;605:6;601:17;597:27;587:55;;638:1;635;628:12;587:55;674:6;661:20;700:18;737:2;733;730:10;727:36;;;743:18;;:::i;:::-;818:2;812:9;786:2;872:13;;-1:-1:-1;;868:22:266;;;892:2;864:31;860:40;848:53;;;916:18;;;936:22;;;913:46;910:72;;;962:18;;:::i;:::-;1002:10;998:2;991:22;1037:2;1029:6;1022:18;1083:3;1076:4;1071:2;1063:6;1059:15;1055:26;1052:35;1049:55;;;1100:1;1097;1090:12;1049:55;1164:2;1157:4;1149:6;1145:17;1138:4;1130:6;1126:17;1113:54;1211:1;1204:4;1199:2;1191:6;1187:15;1183:26;1176:37;1231:6;1222:15;;;;;;525:718;;;;:::o;1248:607::-;1343:6;1351;1359;1412:2;1400:9;1391:7;1387:23;1383:32;1380:52;;;1428:1;1425;1418:12;1380:52;1464:9;1451:23;1441:33;;1525:2;1514:9;1510:18;1497:32;1548:18;1589:2;1581:6;1578:14;1575:34;;;1605:1;1602;1595:12;1575:34;1628:49;1669:7;1660:6;1649:9;1645:22;1628:49;:::i;:::-;1618:59;;1730:2;1719:9;1715:18;1702:32;1686:48;;1759:2;1749:8;1746:16;1743:36;;;1775:1;1772;1765:12;1743:36;;1798:51;1841:7;1830:8;1819:9;1815:24;1798:51;:::i;:::-;1788:61;;;1248:607;;;;;:::o;1860:140::-;-1:-1:-1;;;;;1944:31:266;;1934:42;;1924:70;;1990:1;1987;1980:12;1924:70;1860:140;:::o;2005:341::-;2090:6;2098;2151:2;2139:9;2130:7;2126:23;2122:32;2119:52;;;2167:1;2164;2157:12;2119:52;2206:9;2193:23;2225:40;2259:5;2225:40;:::i;:::-;2284:5;2336:2;2321:18;;;;2308:32;;-1:-1:-1;;;2005:341:266:o;2351:320::-;2419:6;2472:2;2460:9;2451:7;2447:23;2443:32;2440:52;;;2488:1;2485;2478:12;2440:52;2528:9;2515:23;2561:18;2553:6;2550:30;2547:50;;;2593:1;2590;2583:12;2547:50;2616:49;2657:7;2648:6;2637:9;2633:22;2616:49;:::i;:::-;2606:59;2351:320;-1:-1:-1;;;;2351:320:266:o;3050:673::-;3236:2;3288:21;;;3358:13;;3261:18;;;3380:22;;;3207:4;;3236:2;3459:15;;;;3433:2;3418:18;;;3207:4;3502:195;3516:6;3513:1;3510:13;3502:195;;;3581:13;;-1:-1:-1;;;;;3577:39:266;3565:52;;3672:15;;;;3637:12;;;;3613:1;3531:9;3502:195;;;-1:-1:-1;3714:3:266;;3050:673;-1:-1:-1;;;;;;3050:673:266:o;3951:752::-;4055:6;4063;4071;4079;4132:3;4120:9;4111:7;4107:23;4103:33;4100:53;;;4149:1;4146;4139:12;4100:53;4185:9;4172:23;4162:33;;4245:2;4234:9;4230:18;4217:32;4258:40;4292:5;4258:40;:::i;:::-;4317:5;-1:-1:-1;4373:2:266;4358:18;;4345:32;4396:18;4426:14;;;4423:34;;;4453:1;4450;4443:12;4423:34;4476:49;4517:7;4508:6;4497:9;4493:22;4476:49;:::i;:::-;4466:59;;4578:2;4567:9;4563:18;4550:32;4534:48;;4607:2;4597:8;4594:16;4591:36;;;4623:1;4620;4613:12;4591:36;;4646:51;4689:7;4678:8;4667:9;4663:24;4646:51;:::i;:::-;4636:61;;;3951:752;;;;;;;:::o;4708:421::-;4791:6;4799;4852:2;4840:9;4831:7;4827:23;4823:32;4820:52;;;4868:1;4865;4858:12;4820:52;4907:9;4894:23;4926:40;4960:5;4926:40;:::i;:::-;4985:5;-1:-1:-1;5042:2:266;5027:18;;5014:32;5055:42;5014:32;5055:42;:::i;:::-;5116:7;5106:17;;;4708:421;;;;;:::o;5134:341::-;5219:6;5227;5280:2;5268:9;5259:7;5255:23;5251:32;5248:52;;;5296:1;5293;5286:12;5248:52;5332:9;5319:23;5309:33;;5392:2;5381:9;5377:18;5364:32;5405:40;5439:5;5405:40;:::i;5480:539::-;5566:6;5574;5627:2;5615:9;5606:7;5602:23;5598:32;5595:52;;;5643:1;5640;5633:12;5595:52;5683:9;5670:23;5712:18;5753:2;5745:6;5742:14;5739:34;;;5769:1;5766;5759:12;5739:34;5792:49;5833:7;5824:6;5813:9;5809:22;5792:49;:::i;:::-;5782:59;;5894:2;5883:9;5879:18;5866:32;5850:48;;5923:2;5913:8;5910:16;5907:36;;;5939:1;5936;5929:12;5907:36;;5962:51;6005:7;5994:8;5983:9;5979:24;5962:51;:::i;:::-;5952:61;;;5480:539;;;;;:::o;6024:277::-;6111:6;6164:2;6152:9;6143:7;6139:23;6135:32;6132:52;;;6180:1;6177;6170:12;6132:52;6212:9;6206:16;6231:40;6265:5;6231:40;:::i;6717:127::-;6778:10;6773:3;6769:20;6766:1;6759:31;6809:4;6806:1;6799:15;6833:4;6830:1;6823:15;7322:701;7519:6;7508:9;7501:25;7482:4;7545:2;7597:6;7590:14;7583:22;7578:2;7567:9;7563:18;7556:50;7642:2;7637;7626:9;7622:18;7615:30;7674:6;7668:13;7717:6;7712:2;7701:9;7697:18;7690:34;7742:1;7752:141;7766:6;7763:1;7760:13;7752:141;;;7862:14;;;7858:23;;7852:30;7827:17;;;7846:3;7823:27;7816:67;7781:10;;7752:141;;;7756:3;7943:1;7937:3;7928:6;7917:9;7913:22;7909:32;7902:43;8013:3;8006:2;8002:7;7997:2;7989:6;7985:15;7981:29;7970:9;7966:45;7962:55;7954:63;;;;7322:701;;;;;;:::o;8311:167::-;8389:13;;8442:10;8431:22;;8421:33;;8411:61;;8468:1;8465;8458:12;8411:61;8311:167;;;:::o;8483:206::-;8552:6;8605:2;8593:9;8584:7;8580:23;8576:32;8573:52;;;8621:1;8618;8611:12;8573:52;8644:39;8673:9;8644:39;:::i;8892:277::-;8959:6;9012:2;9000:9;8991:7;8987:23;8983:32;8980:52;;;9028:1;9025;9018:12;8980:52;9060:9;9054:16;9113:5;9106:13;9099:21;9092:5;9089:32;9079:60;;9135:1;9132;9125:12;10105:184;10175:6;10228:2;10216:9;10207:7;10203:23;10199:32;10196:52;;;10244:1;10241;10234:12;10196:52;-1:-1:-1;10267:16:266;;10105:184;-1:-1:-1;10105:184:266:o;10294:905::-;10399:6;10452:3;10440:9;10431:7;10427:23;10423:33;10420:53;;;10469:1;10466;10459:12;10420:53;10502:2;10496:9;10544:3;10536:6;10532:16;10614:6;10602:10;10599:22;10578:18;10566:10;10563:34;10560:62;10557:88;;;10625:18;;:::i;:::-;10661:2;10654:22;10698:16;;10723:40;10698:16;10723:40;:::i;:::-;10772:21;;10826:48;10870:2;10855:18;;10826:48;:::i;:::-;10821:2;10809:15;;10802:73;10920:2;10905:18;;10899:25;-1:-1:-1;;;;;10955:33:266;;10943:46;;10933:74;;11003:1;11000;10993:12;10933:74;11035:2;11023:15;;11016:32;11102:2;11087:18;;;11081:25;11064:15;;;11057:50;11162:3;11147:19;;;11141:26;11123:16;;;11116:52;;;;-1:-1:-1;11027:6:266;10294:905;-1:-1:-1;10294:905:266:o;11204:265::-;11277:9;;;11308;;11325:15;;;11319:22;;11305:37;11295:168;;11385:10;11380:3;11376:20;11373:1;11366:31;11420:4;11417:1;11410:15;11448:4;11445:1;11438:15;11474:217;11514:1;11540;11530:132;;11584:10;11579:3;11575:20;11572:1;11565:31;11619:4;11616:1;11609:15;11647:4;11644:1;11637:15;11530:132;-1:-1:-1;11676:9:266;;11474:217::o;12040:616::-;12173:6;12181;12189;12197;12205;12213;12221;12229;12282:3;12270:9;12261:7;12257:23;12253:33;12250:53;;;12299:1;12296;12289:12;12250:53;-1:-1:-1;;12322:16:266;;12378:2;12363:18;;12357:25;12422:2;12407:18;;12401:25;12466:2;12451:18;;12445:25;12510:3;12495:19;;12489:26;12555:3;12540:19;;12534:26;12600:3;12585:19;;12579:26;12645:3;12630:19;;;12624:26;12322:16;;12357:25;;-1:-1:-1;12401:25:266;;12445;;-1:-1:-1;12489:26:266;-1:-1:-1;12534:26:266;;-1:-1:-1;12579:26:266;-1:-1:-1;12624:26:266;;-1:-1:-1;12040:616:266;-1:-1:-1;12040:616:266:o\",\n \"linkReferences\": {},\n \"immutableReferences\": {\n \"78404\": [\n {\n \"start\": 432,\n \"length\": 32\n }\n ],\n \"78407\": [\n {\n \"start\": 244,\n \"length\": 32\n },\n {\n \"start\": 1112,\n \"length\": 32\n }\n ]\n }\n },\n \"methodIdentifiers\": {\n \"FRAX()\": \"b0e4556f\",\n \"addCollateral(address,uint256)\": \"6d75b9ee\",\n \"assetOf(bytes)\": \"e170a9bf\",\n \"assetsUsed(bytes)\": \"aeffddde\",\n \"balanceOf(bytes)\": \"78415365\",\n \"deposit(uint256,bytes,bytes)\": \"69445c31\",\n \"identifier()\": \"7998a1c4\",\n \"isDebt()\": \"89353a09\",\n \"minimumHealthFactor()\": \"1caff8b1\",\n \"removeCollateral(uint256,address)\": \"d41ddc96\",\n \"revokeApproval(address,address)\": \"d3bfe76a\",\n \"slippage()\": \"3e032a3b\",\n \"withdraw(uint256,address,bytes,bytes)\": \"c9111bd7\",\n \"withdrawableFrom(bytes,bytes)\": \"fa50e5d2\"\n },\n \"rawMetadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.21+commit.d9974bed\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_frax\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_healthFactor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__ConstructorHealthFactorTooLow\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__ExternalReceiverBlocked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"BaseAdaptor__PricingNotSupported\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__Slippage\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__UserDepositsNotAllowed\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__UserWithdrawsNotAllowed\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"fraxlendPair\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"fraxlendPair\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"CollateralFTokenAdaptor__HealthFactorTooLow\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"FRAX\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IFToken\\\",\\\"name\\\":\\\"_fraxlendPair\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_collateralToDeposit\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"addCollateral\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"_adaptorData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"assetOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"adaptorData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"assetsUsed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ERC20[]\\\",\\\"name\\\":\\\"assets\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"adaptorData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"assets\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"adaptorData\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"deposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"identifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isDebt\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minimumHealthFactor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_collateralAmount\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"contract IFToken\\\",\\\"name\\\":\\\"_fraxlendPair\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"removeCollateral\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ERC20\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"revokeApproval\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"slippage\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"withdraw\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"withdrawableFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"crispymangoes, 0xEinCodes\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"addCollateral(address,uint256)\\\":{\\\"params\\\":{\\\"_collateralToDeposit\\\":\\\"The amount of collateral to add to Fraxlend Pair position\\\",\\\"_fraxlendPair\\\":\\\"The specified Fraxlend Pair\\\"}},\\\"balanceOf(bytes)\\\":{\\\"params\\\":{\\\"adaptorData\\\":\\\"the collateral asset deposited into Fraxlend\\\"}},\\\"deposit(uint256,bytes,bytes)\\\":{\\\"details\\\":\\\"configurationData is NOT used\\\",\\\"params\\\":{\\\"adaptorData\\\":\\\"adaptor data containing the abi encoded fraxlendPair\\\",\\\"assets\\\":\\\"the amount of assets to provide as collateral on FraxLend\\\"}},\\\"identifier()\\\":{\\\"details\\\":\\\"Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult.\\\"},\\\"removeCollateral(uint256,address)\\\":{\\\"params\\\":{\\\"_collateralAmount\\\":\\\"The amount of collateral to remove from fraxlend pair position\\\",\\\"_fraxlendPair\\\":\\\"The specified Fraxlend Pair\\\"}},\\\"revokeApproval(address,address)\\\":{\\\"params\\\":{\\\"asset\\\":\\\"the ERC20 asset to revoke `spender`s approval for\\\",\\\"spender\\\":\\\"the address to revoke approval for\\\"}}},\\\"title\\\":\\\"FraxLend Collateral Adaptor\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"errors\\\":{\\\"BaseAdaptor__ConstructorHealthFactorTooLow()\\\":[{\\\"notice\\\":\\\"Attempted to set a constructor minimum health factor to a value below `MINIMUM_CONSTRUCTOR_HEALTH_FACTOR()`.\\\"}],\\\"BaseAdaptor__ExternalReceiverBlocked()\\\":[{\\\"notice\\\":\\\"Attempted to specify an external receiver during a Cellar `callOnAdaptor` call.\\\"}],\\\"BaseAdaptor__PricingNotSupported(address)\\\":[{\\\"notice\\\":\\\"Attempted swap used unsupported output asset.\\\"}],\\\"BaseAdaptor__Slippage()\\\":[{\\\"notice\\\":\\\"Attempted swap has bad slippage.\\\"}],\\\"BaseAdaptor__UserDepositsNotAllowed()\\\":[{\\\"notice\\\":\\\"Attempted to deposit to a position where user deposits were not allowed.\\\"}],\\\"BaseAdaptor__UserWithdrawsNotAllowed()\\\":[{\\\"notice\\\":\\\"Attempted to withdraw from a position where user withdraws were not allowed.\\\"}],\\\"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked(address)\\\":[{\\\"notice\\\":\\\"Attempted to interact with an fraxlendPair the Cellar is not using.\\\"}],\\\"CollateralFTokenAdaptor__HealthFactorTooLow(address)\\\":[{\\\"notice\\\":\\\"Removal of collateral causes Cellar Health Factor below what is required\\\"}]},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"FRAX()\\\":{\\\"notice\\\":\\\"The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\\\"},\\\"addCollateral(address,uint256)\\\":{\\\"notice\\\":\\\"Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing.\\\"},\\\"assetOf(bytes)\\\":{\\\"notice\\\":\\\"Returns collateral asset\\\"},\\\"assetsUsed(bytes)\\\":{\\\"notice\\\":\\\"When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup.\\\"},\\\"balanceOf(bytes)\\\":{\\\"notice\\\":\\\"Returns the cellar's balance of the collateralAsset position.\\\"},\\\"deposit(uint256,bytes,bytes)\\\":{\\\"notice\\\":\\\"User deposits collateralToken to Fraxlend pair\\\"},\\\"isDebt()\\\":{\\\"notice\\\":\\\"This adaptor returns collateral, and not debt.\\\"},\\\"minimumHealthFactor()\\\":{\\\"notice\\\":\\\"Minimum Health Factor enforced after every removeCollateral() strategist function call.Overwrites strategist set minimums if they are lower.\\\"},\\\"removeCollateral(uint256,address)\\\":{\\\"notice\\\":\\\"Allows strategists to remove collateral from the respective cellar position on FraxLend.\\\"},\\\"revokeApproval(address,address)\\\":{\\\"notice\\\":\\\"Allows strategists to zero out an approval for a given `asset`.\\\"},\\\"slippage()\\\":{\\\"notice\\\":\\\"Max possible slippage when making a swap router swap.\\\"},\\\"withdraw(uint256,address,bytes,bytes)\\\":{\\\"notice\\\":\\\"User withdraws are NOT allowed from this position. NOTE: collateral withdrawal calls directly from users disallowed for now.\\\"},\\\"withdrawableFrom(bytes,bytes)\\\":{\\\"notice\\\":\\\"This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom. NOTE: collateral withdrawal calls directly from users disallowed for now.\\\"}},\\\"notice\\\":\\\"Allows addition and removal of collateralAssets to Fraxlend pairs for a Cellar.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol\\\":\\\"CollateralFTokenAdaptor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[\\\":@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/\\\",\\\":@balancer/=lib/balancer-v2-monorepo/pkg/\\\",\\\":@chainlink/=lib/chainlink/\\\",\\\":@ds-test/=lib/forge-std/lib/ds-test/src/\\\",\\\":@forge-std/=lib/forge-std/src/\\\",\\\":@openzeppelin/=lib/openzeppelin-contracts/\\\",\\\":@solmate/=lib/solmate/src/\\\",\\\":@uniswap/v3-core/=lib/v3-core/\\\",\\\":@uniswap/v3-periphery/=lib/v3-periphery/\\\",\\\":@uniswapV3C/=lib/v3-core/contracts/\\\",\\\":@uniswapV3P/=lib/v3-periphery/contracts/\\\",\\\":axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/\\\",\\\":balancer-v2-monorepo/=lib/balancer-v2-monorepo/\\\",\\\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\\\",\\\":ds-test/=lib/forge-std/lib/ds-test/src/\\\",\\\":forge-std/=lib/forge-std/src/\\\",\\\":openzeppelin-contracts/=lib/openzeppelin-contracts/\\\",\\\":pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/\\\",\\\":solmate/=lib/solmate/src/\\\",\\\":v3-core/=lib/v3-core/contracts/\\\",\\\":v3-periphery/=lib/v3-periphery/contracts/\\\"]},\\\"sources\\\":{\\\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol\\\":{\\\"keccak256\\\":\\\"0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465\\\",\\\"dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a\\\"]},\\\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol\\\":{\\\"keccak256\\\":\\\"0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b\\\",\\\"dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG\\\"]},\\\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\\\":{\\\"keccak256\\\":\\\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\\\",\\\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\\\"]},\\\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\\\",\\\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\\\"]},\\\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\\\":{\\\"keccak256\\\":\\\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\\\",\\\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\\\"]},\\\"lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol\\\":{\\\"keccak256\\\":\\\"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\\\",\\\"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\\\"]},\\\"lib/openzeppelin-contracts/contracts/utils/Address.sol\\\":{\\\"keccak256\\\":\\\"0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de\\\",\\\"dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V\\\"]},\\\"lib/openzeppelin-contracts/contracts/utils/Context.sol\\\":{\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\\\",\\\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\\\"]},\\\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\\\":{\\\"keccak256\\\":\\\"0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929\\\",\\\"dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg\\\"]},\\\"lib/solmate/src/auth/Owned.sol\\\":{\\\"keccak256\\\":\\\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\\\",\\\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\\\"]},\\\"lib/solmate/src/mixins/ERC4626.sol\\\":{\\\"keccak256\\\":\\\"0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1\\\",\\\"dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs\\\"]},\\\"lib/solmate/src/tokens/ERC20.sol\\\":{\\\"keccak256\\\":\\\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\\\",\\\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\\\"]},\\\"lib/solmate/src/utils/FixedPointMathLib.sol\\\":{\\\"keccak256\\\":\\\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\\\",\\\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\\\"]},\\\"lib/solmate/src/utils/SafeTransferLib.sol\\\":{\\\"keccak256\\\":\\\"0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4\\\",\\\"dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU\\\"]},\\\"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol\\\":{\\\"keccak256\\\":\\\"0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e\\\",\\\"dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\\\":{\\\"keccak256\\\":\\\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\\\",\\\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\\\":{\\\"keccak256\\\":\\\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\\\",\\\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol\\\":{\\\"keccak256\\\":\\\"0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa\\\",\\\"dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\\\":{\\\"keccak256\\\":\\\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\\\",\\\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\\\":{\\\"keccak256\\\":\\\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\\\",\\\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\\\":{\\\"keccak256\\\":\\\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\\\",\\\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\\\":{\\\"keccak256\\\":\\\"0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea\\\",\\\"dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp\\\"]},\\\"lib/v3-core/contracts/libraries/FullMath.sol\\\":{\\\"keccak256\\\":\\\"0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125\\\",\\\"dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd\\\"]},\\\"lib/v3-core/contracts/libraries/TickMath.sol\\\":{\\\"keccak256\\\":\\\"0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c\\\",\\\"dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS\\\"]},\\\"lib/v3-periphery/contracts/libraries/OracleLibrary.sol\\\":{\\\"keccak256\\\":\\\"0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53\\\",\\\"dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM\\\"]},\\\"src/Registry.sol\\\":{\\\"keccak256\\\":\\\"0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2\\\",\\\"dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h\\\"]},\\\"src/base/Cellar.sol\\\":{\\\"keccak256\\\":\\\"0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744\\\",\\\"dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q\\\"]},\\\"src/interfaces/external/Frax/IFToken.sol\\\":{\\\"keccak256\\\":\\\"0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1\\\",\\\"dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK\\\"]},\\\"src/interfaces/external/IChainlinkAggregator.sol\\\":{\\\"keccak256\\\":\\\"0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac\\\",\\\"dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u\\\"]},\\\"src/interfaces/external/UniswapV3Pool.sol\\\":{\\\"keccak256\\\":\\\"0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb\\\",\\\"urls\\\":[\\\"bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9\\\",\\\"dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh\\\"]},\\\"src/modules/adaptors/BaseAdaptor.sol\\\":{\\\"keccak256\\\":\\\"0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840\\\",\\\"dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q\\\"]},\\\"src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol\\\":{\\\"keccak256\\\":\\\"0x905c1d4ea20df91489d635b74186279700ccb0b4ba61b1ad21fc40fe9c2e2669\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://a9a12dd657a90c1072d0257e93fdd9bf7a7f8850c807aeb522e16af813b5e667\\\",\\\"dweb:/ipfs/QmSdSiCcgBVxPRNXZzXZ2kwtc9iPwKXjvdUtPGwWfqLppf\\\"]},\\\"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\\\":{\\\"keccak256\\\":\\\"0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c\\\",\\\"dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe\\\"]},\\\"src/modules/price-router/Extensions/Extension.sol\\\":{\\\"keccak256\\\":\\\"0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad\\\",\\\"dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4\\\"]},\\\"src/modules/price-router/PriceRouter.sol\\\":{\\\"keccak256\\\":\\\"0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e\\\",\\\"dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1\\\"]},\\\"src/utils/Math.sol\\\":{\\\"keccak256\\\":\\\"0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1\\\",\\\"dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949\\\"]},\\\"src/utils/Uint32Array.sol\\\":{\\\"keccak256\\\":\\\"0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218\\\",\\\"dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf\\\"]}},\\\"version\\\":1}\",\n \"metadata\": {\n \"compiler\": {\n \"version\": \"0.8.21+commit.d9974bed\"\n },\n \"language\": \"Solidity\",\n \"output\": {\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"_frax\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_healthFactor\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__ConstructorHealthFactorTooLow\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__ExternalReceiverBlocked\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"asset\",\n \"type\": \"address\"\n }\n ],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__PricingNotSupported\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__Slippage\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__UserDepositsNotAllowed\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__UserWithdrawsNotAllowed\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"type\": \"error\",\n \"name\": \"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"type\": \"error\",\n \"name\": \"CollateralFTokenAdaptor__HealthFactorTooLow\"\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"FRAX\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_collateralToDeposit\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"addCollateral\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"_adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"assetOf\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"assetsUsed\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20[]\",\n \"name\": \"assets\",\n \"type\": \"address[]\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"assets\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"deposit\"\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"identifier\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ]\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"isDebt\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"minimumHealthFactor\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"_collateralAmount\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"removeCollateral\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"asset\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"revokeApproval\"\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"slippage\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"withdraw\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"withdrawableFrom\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ]\n }\n ],\n \"devdoc\": {\n \"kind\": \"dev\",\n \"methods\": {\n \"addCollateral(address,uint256)\": {\n \"params\": {\n \"_collateralToDeposit\": \"The amount of collateral to add to Fraxlend Pair position\",\n \"_fraxlendPair\": \"The specified Fraxlend Pair\"\n }\n },\n \"balanceOf(bytes)\": {\n \"params\": {\n \"adaptorData\": \"the collateral asset deposited into Fraxlend\"\n }\n },\n \"deposit(uint256,bytes,bytes)\": {\n \"details\": \"configurationData is NOT used\",\n \"params\": {\n \"adaptorData\": \"adaptor data containing the abi encoded fraxlendPair\",\n \"assets\": \"the amount of assets to provide as collateral on FraxLend\"\n }\n },\n \"identifier()\": {\n \"details\": \"Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult.\"\n },\n \"removeCollateral(uint256,address)\": {\n \"params\": {\n \"_collateralAmount\": \"The amount of collateral to remove from fraxlend pair position\",\n \"_fraxlendPair\": \"The specified Fraxlend Pair\"\n }\n },\n \"revokeApproval(address,address)\": {\n \"params\": {\n \"asset\": \"the ERC20 asset to revoke `spender`s approval for\",\n \"spender\": \"the address to revoke approval for\"\n }\n }\n },\n \"version\": 1\n },\n \"userdoc\": {\n \"kind\": \"user\",\n \"methods\": {\n \"FRAX()\": {\n \"notice\": \"The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\"\n },\n \"addCollateral(address,uint256)\": {\n \"notice\": \"Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing.\"\n },\n \"assetOf(bytes)\": {\n \"notice\": \"Returns collateral asset\"\n },\n \"assetsUsed(bytes)\": {\n \"notice\": \"When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup.\"\n },\n \"balanceOf(bytes)\": {\n \"notice\": \"Returns the cellar's balance of the collateralAsset position.\"\n },\n \"deposit(uint256,bytes,bytes)\": {\n \"notice\": \"User deposits collateralToken to Fraxlend pair\"\n },\n \"isDebt()\": {\n \"notice\": \"This adaptor returns collateral, and not debt.\"\n },\n \"minimumHealthFactor()\": {\n \"notice\": \"Minimum Health Factor enforced after every removeCollateral() strategist function call.Overwrites strategist set minimums if they are lower.\"\n },\n \"removeCollateral(uint256,address)\": {\n \"notice\": \"Allows strategists to remove collateral from the respective cellar position on FraxLend.\"\n },\n \"revokeApproval(address,address)\": {\n \"notice\": \"Allows strategists to zero out an approval for a given `asset`.\"\n },\n \"slippage()\": {\n \"notice\": \"Max possible slippage when making a swap router swap.\"\n },\n \"withdraw(uint256,address,bytes,bytes)\": {\n \"notice\": \"User withdraws are NOT allowed from this position. NOTE: collateral withdrawal calls directly from users disallowed for now.\"\n },\n \"withdrawableFrom(bytes,bytes)\": {\n \"notice\": \"This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom. NOTE: collateral withdrawal calls directly from users disallowed for now.\"\n }\n },\n \"version\": 1\n }\n },\n \"settings\": {\n \"remappings\": [\n \"@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/\",\n \"@balancer/=lib/balancer-v2-monorepo/pkg/\",\n \"@chainlink/=lib/chainlink/\",\n \"@ds-test/=lib/forge-std/lib/ds-test/src/\",\n \"@forge-std/=lib/forge-std/src/\",\n \"@openzeppelin/=lib/openzeppelin-contracts/\",\n \"@solmate/=lib/solmate/src/\",\n \"@uniswap/v3-core/=lib/v3-core/\",\n \"@uniswap/v3-periphery/=lib/v3-periphery/\",\n \"@uniswapV3C/=lib/v3-core/contracts/\",\n \"@uniswapV3P/=lib/v3-periphery/contracts/\",\n \"axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/\",\n \"balancer-v2-monorepo/=lib/balancer-v2-monorepo/\",\n \"chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\n \"ds-test/=lib/forge-std/lib/ds-test/src/\",\n \"forge-std/=lib/forge-std/src/\",\n \"openzeppelin-contracts/=lib/openzeppelin-contracts/\",\n \"pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/\",\n \"solmate/=lib/solmate/src/\",\n \"v3-core/=lib/v3-core/contracts/\",\n \"v3-periphery/=lib/v3-periphery/contracts/\"\n ],\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 200\n },\n \"metadata\": {\n \"bytecodeHash\": \"ipfs\"\n },\n \"compilationTarget\": {\n \"src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol\": \"CollateralFTokenAdaptor\"\n },\n \"libraries\": {}\n },\n \"sources\": {\n \"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol\": {\n \"keccak256\": \"0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7\",\n \"urls\": [\n \"bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465\",\n \"dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol\": {\n \"keccak256\": \"0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2\",\n \"urls\": [\n \"bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b\",\n \"dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\": {\n \"keccak256\": \"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\n \"urls\": [\n \"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\n \"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/access/Ownable.sol\": {\n \"keccak256\": \"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\n \"urls\": [\n \"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\n \"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\": {\n \"keccak256\": \"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\n \"urls\": [\n \"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\n \"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol\": {\n \"keccak256\": \"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\",\n \"urls\": [\n \"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\",\n \"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/utils/Address.sol\": {\n \"keccak256\": \"0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700\",\n \"urls\": [\n \"bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de\",\n \"dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/utils/Context.sol\": {\n \"keccak256\": \"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\n \"urls\": [\n \"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\n \"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\": {\n \"keccak256\": \"0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb\",\n \"urls\": [\n \"bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929\",\n \"dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/solmate/src/auth/Owned.sol\": {\n \"keccak256\": \"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\n \"urls\": [\n \"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\n \"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/mixins/ERC4626.sol\": {\n \"keccak256\": \"0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b\",\n \"urls\": [\n \"bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1\",\n \"dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/tokens/ERC20.sol\": {\n \"keccak256\": \"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\n \"urls\": [\n \"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\n \"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/utils/FixedPointMathLib.sol\": {\n \"keccak256\": \"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\n \"urls\": [\n \"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\n \"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/utils/SafeTransferLib.sol\": {\n \"keccak256\": \"0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a\",\n \"urls\": [\n \"bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4\",\n \"dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol\": {\n \"keccak256\": \"0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968\",\n \"urls\": [\n \"bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e\",\n \"dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\": {\n \"keccak256\": \"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\n \"urls\": [\n \"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\n \"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\": {\n \"keccak256\": \"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\n \"urls\": [\n \"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\n \"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol\": {\n \"keccak256\": \"0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b\",\n \"urls\": [\n \"bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa\",\n \"dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\": {\n \"keccak256\": \"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\n \"urls\": [\n \"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\n \"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\": {\n \"keccak256\": \"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\n \"urls\": [\n \"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\n \"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\": {\n \"keccak256\": \"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\n \"urls\": [\n \"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\n \"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\": {\n \"keccak256\": \"0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43\",\n \"urls\": [\n \"bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea\",\n \"dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/libraries/FullMath.sol\": {\n \"keccak256\": \"0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645\",\n \"urls\": [\n \"bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125\",\n \"dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/v3-core/contracts/libraries/TickMath.sol\": {\n \"keccak256\": \"0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129\",\n \"urls\": [\n \"bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c\",\n \"dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-periphery/contracts/libraries/OracleLibrary.sol\": {\n \"keccak256\": \"0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b\",\n \"urls\": [\n \"bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53\",\n \"dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"src/Registry.sol\": {\n \"keccak256\": \"0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd\",\n \"urls\": [\n \"bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2\",\n \"dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/base/Cellar.sol\": {\n \"keccak256\": \"0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a\",\n \"urls\": [\n \"bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744\",\n \"dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/interfaces/external/Frax/IFToken.sol\": {\n \"keccak256\": \"0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd\",\n \"urls\": [\n \"bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1\",\n \"dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK\"\n ],\n \"license\": \"MIT\"\n },\n \"src/interfaces/external/IChainlinkAggregator.sol\": {\n \"keccak256\": \"0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f\",\n \"urls\": [\n \"bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac\",\n \"dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/interfaces/external/UniswapV3Pool.sol\": {\n \"keccak256\": \"0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb\",\n \"urls\": [\n \"bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9\",\n \"dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh\"\n ],\n \"license\": null\n },\n \"src/modules/adaptors/BaseAdaptor.sol\": {\n \"keccak256\": \"0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc\",\n \"urls\": [\n \"bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840\",\n \"dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol\": {\n \"keccak256\": \"0x905c1d4ea20df91489d635b74186279700ccb0b4ba61b1ad21fc40fe9c2e2669\",\n \"urls\": [\n \"bzz-raw://a9a12dd657a90c1072d0257e93fdd9bf7a7f8850c807aeb522e16af813b5e667\",\n \"dweb:/ipfs/QmSdSiCcgBVxPRNXZzXZ2kwtc9iPwKXjvdUtPGwWfqLppf\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\": {\n \"keccak256\": \"0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0\",\n \"urls\": [\n \"bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c\",\n \"dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/price-router/Extensions/Extension.sol\": {\n \"keccak256\": \"0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101\",\n \"urls\": [\n \"bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad\",\n \"dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/price-router/PriceRouter.sol\": {\n \"keccak256\": \"0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd\",\n \"urls\": [\n \"bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e\",\n \"dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/utils/Math.sol\": {\n \"keccak256\": \"0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc\",\n \"urls\": [\n \"bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1\",\n \"dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/utils/Uint32Array.sol\": {\n \"keccak256\": \"0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7\",\n \"urls\": [\n \"bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218\",\n \"dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf\"\n ],\n \"license\": \"Apache-2.0\"\n }\n },\n \"version\": 1\n },\n \"ast\": {\n \"absolutePath\": \"src/modules/adaptors/Frax/CollateralFTokenAdaptor.sol\",\n \"id\": 78820,\n \"exportedSymbols\": {\n \"BaseAdaptor\": [\n 77495\n ],\n \"Cellar\": [\n 61030\n ],\n \"CollateralFTokenAdaptor\": [\n 78819\n ],\n \"ERC20\": [\n 51130\n ],\n \"FraxlendHealthFactorLogic\": [\n 80549\n ],\n \"IFToken\": [\n 66209\n ],\n \"Math\": [\n 92983\n ],\n \"PriceRouter\": [\n 89874\n ],\n \"SafeTransferLib\": [\n 51551\n ]\n },\n \"nodeType\": \"SourceUnit\",\n \"src\": \"39:10987:191\",\n \"nodes\": [\n {\n \"id\": 78367,\n \"nodeType\": \"PragmaDirective\",\n \"src\": \"39:23:191\",\n \"nodes\": [],\n \"literals\": [\n \"solidity\",\n \"0.8\",\n \".21\"\n ]\n },\n {\n \"id\": 78374,\n \"nodeType\": \"ImportDirective\",\n \"src\": \"64:118:191\",\n \"nodes\": [],\n \"absolutePath\": \"src/modules/adaptors/BaseAdaptor.sol\",\n \"file\": \"src/modules/adaptors/BaseAdaptor.sol\",\n \"nameLocation\": \"-1:-1:-1\",\n \"scope\": 78820,\n \"sourceUnit\": 77496,\n \"symbolAliases\": [\n {\n \"foreign\": {\n \"id\": 78368,\n \"name\": \"BaseAdaptor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77495,\n \"src\": \"73:11:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78369,\n \"name\": \"ERC20\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51130,\n \"src\": \"86:5:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78370,\n \"name\": \"SafeTransferLib\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51551,\n \"src\": \"93:15:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78371,\n \"name\": \"Cellar\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 61030,\n \"src\": \"110:6:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78372,\n \"name\": \"PriceRouter\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 89874,\n \"src\": \"118:11:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78373,\n \"name\": \"Math\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 92983,\n \"src\": \"131:4:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n }\n ],\n \"unitAlias\": \"\"\n },\n {\n \"id\": 78376,\n \"nodeType\": \"ImportDirective\",\n \"src\": \"183:67:191\",\n \"nodes\": [],\n \"absolutePath\": \"src/interfaces/external/Frax/IFToken.sol\",\n \"file\": \"src/interfaces/external/Frax/IFToken.sol\",\n \"nameLocation\": \"-1:-1:-1\",\n \"scope\": 78820,\n \"sourceUnit\": 66210,\n \"symbolAliases\": [\n {\n \"foreign\": {\n \"id\": 78375,\n \"name\": \"IFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 66209,\n \"src\": \"192:7:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n }\n ],\n \"unitAlias\": \"\"\n },\n {\n \"id\": 78378,\n \"nodeType\": \"ImportDirective\",\n \"src\": \"251:100:191\",\n \"nodes\": [],\n \"absolutePath\": \"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\",\n \"file\": \"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\",\n \"nameLocation\": \"-1:-1:-1\",\n \"scope\": 78820,\n \"sourceUnit\": 80550,\n \"symbolAliases\": [\n {\n \"foreign\": {\n \"id\": 78377,\n \"name\": \"FraxlendHealthFactorLogic\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80549,\n \"src\": \"260:25:191\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n }\n ],\n \"unitAlias\": \"\"\n },\n {\n \"id\": 78819,\n \"nodeType\": \"ContractDefinition\",\n \"src\": \"527:10498:191\",\n \"nodes\": [\n {\n \"id\": 78387,\n \"nodeType\": \"UsingForDirective\",\n \"src\": \"608:32:191\",\n \"nodes\": [],\n \"global\": false,\n \"libraryName\": {\n \"id\": 78384,\n \"name\": \"SafeTransferLib\",\n \"nameLocations\": [\n \"614:15:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51551,\n \"src\": \"614:15:191\"\n },\n \"typeName\": {\n \"id\": 78386,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78385,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"634:5:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"634:5:191\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"634:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n }\n },\n {\n \"id\": 78390,\n \"nodeType\": \"UsingForDirective\",\n \"src\": \"645:23:191\",\n \"nodes\": [],\n \"global\": false,\n \"libraryName\": {\n \"id\": 78388,\n \"name\": \"Math\",\n \"nameLocations\": [\n \"651:4:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 92983,\n \"src\": \"651:4:191\"\n },\n \"typeName\": {\n \"id\": 78389,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"660:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n },\n {\n \"id\": 78395,\n \"nodeType\": \"ErrorDefinition\",\n \"src\": \"1314:88:191\",\n \"nodes\": [],\n \"documentation\": {\n \"id\": 78391,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1215:94:191\",\n \"text\": \" @notice Attempted to interact with an fraxlendPair the Cellar is not using.\"\n },\n \"errorSelector\": \"19cd4c5c\",\n \"name\": \"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\n \"nameLocation\": \"1320:59:191\",\n \"parameters\": {\n \"id\": 78394,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78393,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"1388:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78395,\n \"src\": \"1380:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78392,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1380:7:191\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1379:22:191\"\n }\n },\n {\n \"id\": 78400,\n \"nodeType\": \"ErrorDefinition\",\n \"src\": \"1512:72:191\",\n \"nodes\": [],\n \"documentation\": {\n \"id\": 78396,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1408:99:191\",\n \"text\": \" @notice Removal of collateral causes Cellar Health Factor below what is required\"\n },\n \"errorSelector\": \"f3fbed68\",\n \"name\": \"CollateralFTokenAdaptor__HealthFactorTooLow\",\n \"nameLocation\": \"1518:43:191\",\n \"parameters\": {\n \"id\": 78399,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78398,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"1570:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78400,\n \"src\": \"1562:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78397,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1562:7:191\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1561:22:191\"\n }\n },\n {\n \"id\": 78404,\n \"nodeType\": \"VariableDeclaration\",\n \"src\": \"1734:27:191\",\n \"nodes\": [],\n \"constant\": false,\n \"documentation\": {\n \"id\": 78401,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1590:139:191\",\n \"text\": \" @notice The FRAX contract on current network.\\n @notice For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\"\n },\n \"functionSelector\": \"b0e4556f\",\n \"mutability\": \"immutable\",\n \"name\": \"FRAX\",\n \"nameLocation\": \"1757:4:191\",\n \"scope\": 78819,\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 78403,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78402,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"1734:5:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"1734:5:191\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"1734:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"id\": 78407,\n \"nodeType\": \"VariableDeclaration\",\n \"src\": \"1956:44:191\",\n \"nodes\": [],\n \"constant\": false,\n \"documentation\": {\n \"id\": 78405,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1768:183:191\",\n \"text\": \" @notice Minimum Health Factor enforced after every removeCollateral() strategist function call.\\n @notice Overwrites strategist set minimums if they are lower.\"\n },\n \"functionSelector\": \"1caff8b1\",\n \"mutability\": \"immutable\",\n \"name\": \"minimumHealthFactor\",\n \"nameLocation\": \"1981:19:191\",\n \"scope\": 78819,\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78406,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1956:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"id\": 78429,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"2007:193:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78428,\n \"nodeType\": \"Block\",\n \"src\": \"2057:143:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78415,\n \"name\": \"_healthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78411,\n \"src\": \"2105:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 78414,\n \"name\": \"_verifyConstructorMinimumHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77477,\n \"src\": \"2067:37:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$returns$__$\",\n \"typeString\": \"function (uint256) pure\"\n }\n },\n \"id\": 78416,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2067:52:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78417,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2067:52:191\"\n },\n {\n \"expression\": {\n \"id\": 78422,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 78418,\n \"name\": \"FRAX\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78404,\n \"src\": \"2129:4:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"arguments\": [\n {\n \"id\": 78420,\n \"name\": \"_frax\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78409,\n \"src\": \"2142:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78419,\n \"name\": \"ERC20\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51130,\n \"src\": \"2136:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"type(contract ERC20)\"\n }\n },\n \"id\": 78421,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2136:12:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"src\": \"2129:19:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"id\": 78423,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2129:19:191\"\n },\n {\n \"expression\": {\n \"id\": 78426,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 78424,\n \"name\": \"minimumHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78407,\n \"src\": \"2158:19:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 78425,\n \"name\": \"_healthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78411,\n \"src\": \"2180:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"2158:35:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"id\": 78427,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"2158:35:191\"\n }\n ]\n },\n \"implemented\": true,\n \"kind\": \"constructor\",\n \"modifiers\": [],\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"parameters\": {\n \"id\": 78412,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78409,\n \"mutability\": \"mutable\",\n \"name\": \"_frax\",\n \"nameLocation\": \"2027:5:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78429,\n \"src\": \"2019:13:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78408,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2019:7:191\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78411,\n \"mutability\": \"mutable\",\n \"name\": \"_healthFactor\",\n \"nameLocation\": \"2042:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78429,\n \"src\": \"2034:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78410,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2034:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2018:38:191\"\n },\n \"returnParameters\": {\n \"id\": 78413,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"2057:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78444,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"2619:160:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78443,\n \"nodeType\": \"Block\",\n \"src\": \"2688:91:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"hexValue\": \"467261784c656e6420436f6c6c61746572616c2066546f6b656e56322041646170746f72205620302e31\",\n \"id\": 78439,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"2726:44:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_a3e36fea9d81853361a8e1a3961b5d42df7a08454fa872c8b22a65f8587e1e17\",\n \"typeString\": \"literal_string \\\"FraxLend Collateral fTokenV2 Adaptor V 0.1\\\"\"\n },\n \"value\": \"FraxLend Collateral fTokenV2 Adaptor V 0.1\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_stringliteral_a3e36fea9d81853361a8e1a3961b5d42df7a08454fa872c8b22a65f8587e1e17\",\n \"typeString\": \"literal_string \\\"FraxLend Collateral fTokenV2 Adaptor V 0.1\\\"\"\n }\n ],\n \"expression\": {\n \"id\": 78437,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"2715:3:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 78438,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"2719:6:191\",\n \"memberName\": \"encode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"2715:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\n \"typeString\": \"function () pure returns (bytes memory)\"\n }\n },\n \"id\": 78440,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2715:56:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n ],\n \"id\": 78436,\n \"name\": \"keccak256\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -8,\n \"src\": \"2705:9:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n }\n },\n \"id\": 78441,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"2705:67:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"functionReturnParameters\": 78435,\n \"id\": 78442,\n \"nodeType\": \"Return\",\n \"src\": \"2698:74:191\"\n }\n ]\n },\n \"baseFunctions\": [\n 77261\n ],\n \"documentation\": {\n \"id\": 78430,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2318:296:191\",\n \"text\": \" @dev Identifier unique to this adaptor for a shared registry.\\n Normally the identifier would just be the address of this contract, but this\\n Identifier is needed during Cellar Delegate Call Operations, so getting the address\\n of the adaptor is more difficult.\"\n },\n \"functionSelector\": \"7998a1c4\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"identifier\",\n \"nameLocation\": \"2628:10:191\",\n \"overrides\": {\n \"id\": 78432,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"2661:8:191\"\n },\n \"parameters\": {\n \"id\": 78431,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"2638:2:191\"\n },\n \"returnParameters\": {\n \"id\": 78435,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78434,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78444,\n \"src\": \"2679:7:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n },\n \"typeName\": {\n \"id\": 78433,\n \"name\": \"bytes32\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2679:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2678:9:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"pure\",\n \"virtual\": true,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78501,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"3183:564:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78500,\n \"nodeType\": \"Block\",\n \"src\": \"3272:475:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"assignments\": [\n 78457\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78457,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"3290:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78500,\n \"src\": \"3282:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78456,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78455,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"3282:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"3282:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"3282:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78464,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78460,\n \"name\": \"adaptorData\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78449,\n \"src\": \"3316:11:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n {\n \"components\": [\n {\n \"id\": 78461,\n \"name\": \"IFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 66209,\n \"src\": \"3330:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"id\": 78462,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"3329:9:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n },\n {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n ],\n \"expression\": {\n \"id\": 78458,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"3305:3:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 78459,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"3309:6:191\",\n \"memberName\": \"decode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"3305:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abidecode_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 78463,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3305:34:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"3282:57:191\"\n },\n {\n \"assignments\": [\n 78467\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78467,\n \"mutability\": \"mutable\",\n \"name\": \"collateralToken\",\n \"nameLocation\": \"3355:15:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78500,\n \"src\": \"3349:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 78466,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78465,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"3349:5:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"3349:5:191\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"3349:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78471,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78469,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78457,\n \"src\": \"3397:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78468,\n \"name\": \"_userCollateralContract\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78781,\n \"src\": \"3373:23:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"function (contract IFToken) view returns (contract ERC20)\"\n }\n },\n \"id\": 78470,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3373:37:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"3349:61:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78473,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78457,\n \"src\": \"3437:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78472,\n \"name\": \"_validateFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78744,\n \"src\": \"3421:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (contract IFToken) view\"\n }\n },\n \"id\": 78474,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3421:29:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78475,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3421:29:191\"\n },\n {\n \"assignments\": [\n 78477\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78477,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPairAddress\",\n \"nameLocation\": \"3468:19:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78500,\n \"src\": \"3460:27:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78476,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3460:7:191\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78482,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78480,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78457,\n \"src\": \"3498:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78479,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"3490:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78478,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3490:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78481,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3490:21:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"3460:51:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78486,\n \"name\": \"fraxlendPairAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78477,\n \"src\": \"3549:19:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 78487,\n \"name\": \"assets\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78447,\n \"src\": \"3570:6:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"expression\": {\n \"id\": 78483,\n \"name\": \"collateralToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78467,\n \"src\": \"3521:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"id\": 78485,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"3537:11:191\",\n \"memberName\": \"safeApprove\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 51550,\n \"src\": \"3521:27:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"function (contract ERC20,address,uint256)\"\n }\n },\n \"id\": 78488,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3521:56:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78489,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3521:56:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78491,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78457,\n \"src\": \"3603:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"id\": 78492,\n \"name\": \"assets\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78447,\n \"src\": \"3617:6:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 78490,\n \"name\": \"_addCollateral\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78764,\n \"src\": \"3588:14:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$_t_uint256_$returns$__$\",\n \"typeString\": \"function (contract IFToken,uint256)\"\n }\n },\n \"id\": 78493,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3588:36:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78494,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3588:36:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78496,\n \"name\": \"collateralToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78467,\n \"src\": \"3703:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n {\n \"id\": 78497,\n \"name\": \"fraxlendPairAddress\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78477,\n \"src\": \"3720:19:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78495,\n \"name\": \"_revokeExternalApproval\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77436,\n \"src\": \"3679:23:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$returns$__$\",\n \"typeString\": \"function (contract ERC20,address)\"\n }\n },\n \"id\": 78498,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3679:61:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78499,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3679:61:191\"\n }\n ]\n },\n \"baseFunctions\": [\n 77305\n ],\n \"documentation\": {\n \"id\": 78445,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2905:273:191\",\n \"text\": \" @notice User deposits collateralToken to Fraxlend pair\\n @param assets the amount of assets to provide as collateral on FraxLend\\n @param adaptorData adaptor data containing the abi encoded fraxlendPair\\n @dev configurationData is NOT used\"\n },\n \"functionSelector\": \"69445c31\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"deposit\",\n \"nameLocation\": \"3192:7:191\",\n \"overrides\": {\n \"id\": 78453,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"3263:8:191\"\n },\n \"parameters\": {\n \"id\": 78452,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78447,\n \"mutability\": \"mutable\",\n \"name\": \"assets\",\n \"nameLocation\": \"3208:6:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78501,\n \"src\": \"3200:14:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78446,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3200:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78449,\n \"mutability\": \"mutable\",\n \"name\": \"adaptorData\",\n \"nameLocation\": \"3229:11:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78501,\n \"src\": \"3216:24:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78448,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3216:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78451,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78501,\n \"src\": \"3242:12:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78450,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3242:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3199:56:191\"\n },\n \"returnParameters\": {\n \"id\": 78454,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"3272:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78518,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"3916:147:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78517,\n \"nodeType\": \"Block\",\n \"src\": \"4001:62:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"errorCall\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"id\": 78514,\n \"name\": \"BaseAdaptor__UserWithdrawsNotAllowed\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77236,\n \"src\": \"4018:36:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 78515,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"4018:38:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78516,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"4011:45:191\"\n }\n ]\n },\n \"baseFunctions\": [\n 77317\n ],\n \"documentation\": {\n \"id\": 78502,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3753:158:191\",\n \"text\": \" @notice User withdraws are NOT allowed from this position.\\n NOTE: collateral withdrawal calls directly from users disallowed for now.\"\n },\n \"functionSelector\": \"c9111bd7\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"withdraw\",\n \"nameLocation\": \"3925:8:191\",\n \"overrides\": {\n \"id\": 78512,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"3992:8:191\"\n },\n \"parameters\": {\n \"id\": 78511,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78504,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78518,\n \"src\": \"3934:7:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78503,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3934:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78506,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78518,\n \"src\": \"3943:7:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78505,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3943:7:191\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78508,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78518,\n \"src\": \"3952:12:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78507,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3952:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78510,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78518,\n \"src\": \"3966:12:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78509,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3966:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3933:46:191\"\n },\n \"returnParameters\": {\n \"id\": 78513,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"4001:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"pure\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78532,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"4318:118:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78531,\n \"nodeType\": \"Block\",\n \"src\": \"4411:25:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"hexValue\": \"30\",\n \"id\": 78529,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"4428:1:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"functionReturnParameters\": 78528,\n \"id\": 78530,\n \"nodeType\": \"Return\",\n \"src\": \"4421:8:191\"\n }\n ]\n },\n \"baseFunctions\": [\n 77335\n ],\n \"documentation\": {\n \"id\": 78519,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"4069:244:191\",\n \"text\": \" @notice This position is a debt position, and user withdraws are not allowed so\\n this position must return 0 for withdrawableFrom.\\n NOTE: collateral withdrawal calls directly from users disallowed for now.\"\n },\n \"functionSelector\": \"fa50e5d2\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"withdrawableFrom\",\n \"nameLocation\": \"4327:16:191\",\n \"overrides\": {\n \"id\": 78525,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"4384:8:191\"\n },\n \"parameters\": {\n \"id\": 78524,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78521,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78532,\n \"src\": \"4344:12:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78520,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4344:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78523,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78532,\n \"src\": \"4358:12:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78522,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4358:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4343:28:191\"\n },\n \"returnParameters\": {\n \"id\": 78528,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78527,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78532,\n \"src\": \"4402:7:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78526,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4402:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4401:9:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"pure\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78558,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"4606:223:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78557,\n \"nodeType\": \"Block\",\n \"src\": \"4690:139:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"assignments\": [\n 78543\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78543,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"4708:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78557,\n \"src\": \"4700:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78542,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78541,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"4700:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"4700:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"4700:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78550,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78546,\n \"name\": \"adaptorData\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78535,\n \"src\": \"4734:11:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n {\n \"components\": [\n {\n \"id\": 78547,\n \"name\": \"IFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 66209,\n \"src\": \"4748:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"id\": 78548,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"4747:9:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n },\n {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n ],\n \"expression\": {\n \"id\": 78544,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"4723:3:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 78545,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"4727:6:191\",\n \"memberName\": \"decode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"4723:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abidecode_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 78549,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"4723:34:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"4700:57:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78552,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78543,\n \"src\": \"4797:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"expression\": {\n \"id\": 78553,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -15,\n \"src\": \"4811:3:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 78554,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"4815:6:191\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"4811:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78551,\n \"name\": \"_userCollateralBalance\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80514,\n \"src\": \"4774:22:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$_t_address_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken,address) view returns (uint256)\"\n }\n },\n \"id\": 78555,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"4774:48:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"functionReturnParameters\": 78540,\n \"id\": 78556,\n \"nodeType\": \"Return\",\n \"src\": \"4767:55:191\"\n }\n ]\n },\n \"baseFunctions\": [\n 77325\n ],\n \"documentation\": {\n \"id\": 78533,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"4442:159:191\",\n \"text\": \" @notice Returns the cellar's balance of the collateralAsset position.\\n @param adaptorData the collateral asset deposited into Fraxlend\"\n },\n \"functionSelector\": \"78415365\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"balanceOf\",\n \"nameLocation\": \"4615:9:191\",\n \"overrides\": {\n \"id\": 78537,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"4663:8:191\"\n },\n \"parameters\": {\n \"id\": 78536,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78535,\n \"mutability\": \"mutable\",\n \"name\": \"adaptorData\",\n \"nameLocation\": \"4638:11:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78558,\n \"src\": \"4625:24:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78534,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4625:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4624:26:191\"\n },\n \"returnParameters\": {\n \"id\": 78540,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78539,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78558,\n \"src\": \"4681:7:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78538,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4681:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4680:9:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78583,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"4891:210:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78582,\n \"nodeType\": \"Block\",\n \"src\": \"4972:129:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"assignments\": [\n 78570\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78570,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"4990:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78582,\n \"src\": \"4982:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78569,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78568,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"4982:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"4982:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"4982:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78577,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78573,\n \"name\": \"_adaptorData\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78561,\n \"src\": \"5016:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n {\n \"components\": [\n {\n \"id\": 78574,\n \"name\": \"IFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 66209,\n \"src\": \"5031:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"id\": 78575,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"5030:9:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n },\n {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n ],\n \"expression\": {\n \"id\": 78571,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"5005:3:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 78572,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"5009:6:191\",\n \"memberName\": \"decode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"5005:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abidecode_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 78576,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5005:35:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"4982:58:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78579,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78570,\n \"src\": \"5081:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78578,\n \"name\": \"_userCollateralContract\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78781,\n \"src\": \"5057:23:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"function (contract IFToken) view returns (contract ERC20)\"\n }\n },\n \"id\": 78580,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5057:37:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"functionReturnParameters\": 78567,\n \"id\": 78581,\n \"nodeType\": \"Return\",\n \"src\": \"5050:44:191\"\n }\n ]\n },\n \"baseFunctions\": [\n 77344\n ],\n \"documentation\": {\n \"id\": 78559,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"4835:51:191\",\n \"text\": \" @notice Returns collateral asset\"\n },\n \"functionSelector\": \"e170a9bf\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"assetOf\",\n \"nameLocation\": \"4900:7:191\",\n \"overrides\": {\n \"id\": 78563,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"4947:8:191\"\n },\n \"parameters\": {\n \"id\": 78562,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78561,\n \"mutability\": \"mutable\",\n \"name\": \"_adaptorData\",\n \"nameLocation\": \"4921:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78583,\n \"src\": \"4908:25:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 78560,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4908:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4907:27:191\"\n },\n \"returnParameters\": {\n \"id\": 78567,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78566,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78583,\n \"src\": \"4965:5:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 78565,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78564,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"4965:5:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"4965:5:191\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"4965:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4964:7:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78593,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"5185:83:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78592,\n \"nodeType\": \"Block\",\n \"src\": \"5239:29:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"hexValue\": \"66616c7365\",\n \"id\": 78590,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"5256:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"false\"\n },\n \"functionReturnParameters\": 78589,\n \"id\": 78591,\n \"nodeType\": \"Return\",\n \"src\": \"5249:12:191\"\n }\n ]\n },\n \"baseFunctions\": [\n 77378\n ],\n \"documentation\": {\n \"id\": 78584,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"5107:73:191\",\n \"text\": \" @notice This adaptor returns collateral, and not debt.\"\n },\n \"functionSelector\": \"89353a09\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"isDebt\",\n \"nameLocation\": \"5194:6:191\",\n \"overrides\": {\n \"id\": 78586,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"5215:8:191\"\n },\n \"parameters\": {\n \"id\": 78585,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"5200:2:191\"\n },\n \"returnParameters\": {\n \"id\": 78589,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78588,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78593,\n \"src\": \"5233:4:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"typeName\": {\n \"id\": 78587,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5233:4:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"5232:6:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"pure\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78645,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"5675:583:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78644,\n \"nodeType\": \"Block\",\n \"src\": \"5758:500:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78603,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78597,\n \"src\": \"5784:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78602,\n \"name\": \"_validateFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78744,\n \"src\": \"5768:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (contract IFToken) view\"\n }\n },\n \"id\": 78604,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5768:30:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78605,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"5768:30:191\"\n },\n {\n \"assignments\": [\n 78608\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78608,\n \"mutability\": \"mutable\",\n \"name\": \"_collateralToken\",\n \"nameLocation\": \"5814:16:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78644,\n \"src\": \"5808:22:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 78607,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78606,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"5808:5:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"5808:5:191\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"5808:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78612,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78610,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78597,\n \"src\": \"5857:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78609,\n \"name\": \"_userCollateralContract\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78781,\n \"src\": \"5833:23:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"function (contract IFToken) view returns (contract ERC20)\"\n }\n },\n \"id\": 78611,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5833:38:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"5808:63:191\"\n },\n {\n \"assignments\": [\n 78614\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78614,\n \"mutability\": \"mutable\",\n \"name\": \"amountToDeposit\",\n \"nameLocation\": \"5890:15:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78644,\n \"src\": \"5882:23:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78613,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5882:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78619,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78616,\n \"name\": \"_collateralToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78608,\n \"src\": \"5922:16:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n {\n \"id\": 78617,\n \"name\": \"_collateralToDeposit\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78599,\n \"src\": \"5940:20:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 78615,\n \"name\": \"_maxAvailable\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77408,\n \"src\": \"5908:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_ERC20_$51130_$_t_uint256_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract ERC20,uint256) view returns (uint256)\"\n }\n },\n \"id\": 78618,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5908:53:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"5882:79:191\"\n },\n {\n \"assignments\": [\n 78621\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78621,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"5979:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78644,\n \"src\": \"5971:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78620,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5971:7:191\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78626,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78624,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78597,\n \"src\": \"6002:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78623,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"5994:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78622,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5994:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78625,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5994:22:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"5971:45:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78630,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78621,\n \"src\": \"6055:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"id\": 78631,\n \"name\": \"amountToDeposit\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78614,\n \"src\": \"6069:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"expression\": {\n \"id\": 78627,\n \"name\": \"_collateralToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78608,\n \"src\": \"6026:16:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"id\": 78629,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"6043:11:191\",\n \"memberName\": \"safeApprove\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 51550,\n \"src\": \"6026:28:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"function (contract ERC20,address,uint256)\"\n }\n },\n \"id\": 78632,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6026:59:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78633,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"6026:59:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78635,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78597,\n \"src\": \"6110:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"id\": 78636,\n \"name\": \"amountToDeposit\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78614,\n \"src\": \"6125:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 78634,\n \"name\": \"_addCollateral\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78764,\n \"src\": \"6095:14:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$_t_uint256_$returns$__$\",\n \"typeString\": \"function (contract IFToken,uint256)\"\n }\n },\n \"id\": 78637,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6095:46:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78638,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"6095:46:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78640,\n \"name\": \"_collateralToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78608,\n \"src\": \"6220:16:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n {\n \"id\": 78641,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78621,\n \"src\": \"6238:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78639,\n \"name\": \"_revokeExternalApproval\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77436,\n \"src\": \"6196:23:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$returns$__$\",\n \"typeString\": \"function (contract ERC20,address)\"\n }\n },\n \"id\": 78642,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6196:55:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78643,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"6196:55:191\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 78594,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"5391:279:191\",\n \"text\": \" @notice Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing.\\n @param _fraxlendPair The specified Fraxlend Pair\\n @param _collateralToDeposit The amount of collateral to add to Fraxlend Pair position\"\n },\n \"functionSelector\": \"6d75b9ee\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"addCollateral\",\n \"nameLocation\": \"5684:13:191\",\n \"parameters\": {\n \"id\": 78600,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78597,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"5706:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78645,\n \"src\": \"5698:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78596,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78595,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"5698:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"5698:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"5698:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78599,\n \"mutability\": \"mutable\",\n \"name\": \"_collateralToDeposit\",\n \"nameLocation\": \"5729:20:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78645,\n \"src\": \"5721:28:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78598,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5721:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"5697:53:191\"\n },\n \"returnParameters\": {\n \"id\": 78601,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"5758:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78686,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"6535:586:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78685,\n \"nodeType\": \"Block\",\n \"src\": \"6618:503:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78655,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78651,\n \"src\": \"6644:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78654,\n \"name\": \"_validateFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78744,\n \"src\": \"6628:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (contract IFToken) view\"\n }\n },\n \"id\": 78656,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6628:30:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78657,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"6628:30:191\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78659,\n \"name\": \"_collateralAmount\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78648,\n \"src\": \"6715:17:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"id\": 78660,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78651,\n \"src\": \"6734:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78658,\n \"name\": \"_removeCollateral\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78801,\n \"src\": \"6697:17:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_uint256_$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (uint256,contract IFToken)\"\n }\n },\n \"id\": 78661,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6697:51:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78662,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"6697:51:191\"\n },\n {\n \"assignments\": [\n 78664\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78664,\n \"mutability\": \"mutable\",\n \"name\": \"_exchangeRate\",\n \"nameLocation\": \"6766:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78685,\n \"src\": \"6758:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78663,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"6758:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78668,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78666,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78651,\n \"src\": \"6803:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78665,\n \"name\": \"_getExchangeRateInfo\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78818,\n \"src\": \"6782:20:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken) returns (uint256)\"\n }\n },\n \"id\": 78667,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6782:35:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"6758:59:191\"\n },\n {\n \"condition\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 78675,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 78669,\n \"name\": \"minimumHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78407,\n \"src\": \"6944:19:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"components\": [\n {\n \"arguments\": [\n {\n \"id\": 78671,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78651,\n \"src\": \"6984:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"id\": 78672,\n \"name\": \"_exchangeRate\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78664,\n \"src\": \"6999:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 78670,\n \"name\": \"_getHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80457,\n \"src\": \"6967:16:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken,uint256) view returns (uint256)\"\n }\n },\n \"id\": 78673,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6967:46:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"id\": 78674,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"6966:48:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"6944:70:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 78684,\n \"nodeType\": \"IfStatement\",\n \"src\": \"6940:175:191\",\n \"trueBody\": {\n \"id\": 78683,\n \"nodeType\": \"Block\",\n \"src\": \"7016:99:191\",\n \"statements\": [\n {\n \"errorCall\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 78679,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78651,\n \"src\": \"7089:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78678,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"7081:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78677,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7081:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78680,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7081:22:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78676,\n \"name\": \"CollateralFTokenAdaptor__HealthFactorTooLow\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78400,\n \"src\": \"7037:43:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$_t_address_$returns$__$\",\n \"typeString\": \"function (address) pure\"\n }\n },\n \"id\": 78681,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7037:67:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78682,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"7030:74:191\"\n }\n ]\n }\n }\n ]\n },\n \"documentation\": {\n \"id\": 78646,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"6264:266:191\",\n \"text\": \" @notice Allows strategists to remove collateral from the respective cellar position on FraxLend.\\n @param _collateralAmount The amount of collateral to remove from fraxlend pair position\\n @param _fraxlendPair The specified Fraxlend Pair\"\n },\n \"functionSelector\": \"d41ddc96\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"removeCollateral\",\n \"nameLocation\": \"6544:16:191\",\n \"parameters\": {\n \"id\": 78652,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78648,\n \"mutability\": \"mutable\",\n \"name\": \"_collateralAmount\",\n \"nameLocation\": \"6569:17:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78686,\n \"src\": \"6561:25:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78647,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"6561:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78651,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"6596:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78686,\n \"src\": \"6588:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78650,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78649,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"6588:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"6588:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"6588:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"6560:50:191\"\n },\n \"returnParameters\": {\n \"id\": 78653,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"6618:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 78744,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"7417:459:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78743,\n \"nodeType\": \"Block\",\n \"src\": \"7487:389:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"assignments\": [\n 78694\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78694,\n \"mutability\": \"mutable\",\n \"name\": \"positionHash\",\n \"nameLocation\": \"7505:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78743,\n \"src\": \"7497:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n },\n \"typeName\": {\n \"id\": 78693,\n \"name\": \"bytes32\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7497:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78710,\n \"initialValue\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"id\": 78698,\n \"name\": \"identifier\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 78444\n ],\n \"referencedDeclaration\": 78444,\n \"src\": \"7541:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_pure$__$returns$_t_bytes32_$\",\n \"typeString\": \"function () pure returns (bytes32)\"\n }\n },\n \"id\": 78699,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7541:12:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n {\n \"hexValue\": \"66616c7365\",\n \"id\": 78700,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"7555:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"false\"\n },\n {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 78705,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78690,\n \"src\": \"7581:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78704,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"7573:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78703,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7573:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78706,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7573:22:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"expression\": {\n \"id\": 78701,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"7562:3:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 78702,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"7566:6:191\",\n \"memberName\": \"encode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"7562:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\n \"typeString\": \"function () pure returns (bytes memory)\"\n }\n },\n \"id\": 78707,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7562:34:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n ],\n \"expression\": {\n \"id\": 78696,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"7530:3:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 78697,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"7534:6:191\",\n \"memberName\": \"encode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"7530:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\n \"typeString\": \"function () pure returns (bytes memory)\"\n }\n },\n \"id\": 78708,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7530:67:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n ],\n \"id\": 78695,\n \"name\": \"keccak256\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -8,\n \"src\": \"7520:9:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n }\n },\n \"id\": 78709,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7520:78:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"7497:101:191\"\n },\n {\n \"assignments\": [\n 78712\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 78712,\n \"mutability\": \"mutable\",\n \"name\": \"positionId\",\n \"nameLocation\": \"7615:10:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78743,\n \"src\": \"7608:17:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n },\n \"typeName\": {\n \"id\": 78711,\n \"name\": \"uint32\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7608:6:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 78724,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 78722,\n \"name\": \"positionHash\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78694,\n \"src\": \"7689:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n ],\n \"expression\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 78716,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"7643:4:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n ],\n \"id\": 78715,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"7635:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78714,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7635:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78717,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7635:13:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78713,\n \"name\": \"Cellar\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 61030,\n \"src\": \"7628:6:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_Cellar_$61030_$\",\n \"typeString\": \"type(contract Cellar)\"\n }\n },\n \"id\": 78718,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7628:21:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_Cellar_$61030\",\n \"typeString\": \"contract Cellar\"\n }\n },\n \"id\": 78719,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"7650:8:191\",\n \"memberName\": \"registry\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 58935,\n \"src\": \"7628:30:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$__$returns$_t_contract$_Registry_$57893_$\",\n \"typeString\": \"function () view external returns (contract Registry)\"\n }\n },\n \"id\": 78720,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7628:32:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_Registry_$57893\",\n \"typeString\": \"contract Registry\"\n }\n },\n \"id\": 78721,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"7661:27:191\",\n \"memberName\": \"getPositionHashToPositionId\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 57601,\n \"src\": \"7628:60:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$_t_bytes32_$returns$_t_uint32_$\",\n \"typeString\": \"function (bytes32) view external returns (uint32)\"\n }\n },\n \"id\": 78723,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7628:74:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"7608:94:191\"\n },\n {\n \"condition\": {\n \"id\": 78734,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"UnaryOperation\",\n \"operator\": \"!\",\n \"prefix\": true,\n \"src\": \"7716:49:191\",\n \"subExpression\": {\n \"arguments\": [\n {\n \"id\": 78732,\n \"name\": \"positionId\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78712,\n \"src\": \"7754:10:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n ],\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 78728,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"7732:4:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n ],\n \"id\": 78727,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"7724:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78726,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7724:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78729,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7724:13:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78725,\n \"name\": \"Cellar\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 61030,\n \"src\": \"7717:6:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_Cellar_$61030_$\",\n \"typeString\": \"type(contract Cellar)\"\n }\n },\n \"id\": 78730,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7717:21:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_Cellar_$61030\",\n \"typeString\": \"contract Cellar\"\n }\n },\n \"id\": 78731,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"7739:14:191\",\n \"memberName\": \"isPositionUsed\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 58190,\n \"src\": \"7717:36:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$_t_uint256_$returns$_t_bool_$\",\n \"typeString\": \"function (uint256) view external returns (bool)\"\n }\n },\n \"id\": 78733,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7717:48:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 78742,\n \"nodeType\": \"IfStatement\",\n \"src\": \"7712:157:191\",\n \"trueBody\": {\n \"errorCall\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 78738,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78690,\n \"src\": \"7854:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 78737,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"7846:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78736,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7846:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78739,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7846:22:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78735,\n \"name\": \"CollateralFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78395,\n \"src\": \"7786:59:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$_t_address_$returns$__$\",\n \"typeString\": \"function (address) pure\"\n }\n },\n \"id\": 78740,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7786:83:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78741,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"7779:90:191\"\n }\n }\n ]\n },\n \"documentation\": {\n \"id\": 78687,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"7240:172:191\",\n \"text\": \" @notice Validates that a given fToken is set up as a position in the Cellar.\\n @dev This function uses `address(this)` as the address of the Cellar.\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_validateFToken\",\n \"nameLocation\": \"7426:15:191\",\n \"parameters\": {\n \"id\": 78691,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78690,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"7450:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78744,\n \"src\": \"7442:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78689,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78688,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"7442:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"7442:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"7442:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"7441:23:191\"\n },\n \"returnParameters\": {\n \"id\": 78692,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"7487:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"view\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 78764,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"9640:157:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78763,\n \"nodeType\": \"Block\",\n \"src\": \"9721:76:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78756,\n \"name\": \"amountToDeposit\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78750,\n \"src\": \"9759:15:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"arguments\": [\n {\n \"id\": 78759,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"9784:4:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n ],\n \"id\": 78758,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"9776:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78757,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9776:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78760,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9776:13:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"expression\": {\n \"id\": 78753,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78748,\n \"src\": \"9731:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 78755,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"9745:13:191\",\n \"memberName\": \"addCollateral\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66094,\n \"src\": \"9731:27:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$\",\n \"typeString\": \"function (uint256,address) external\"\n }\n },\n \"id\": 78761,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9731:59:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78762,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"9731:59:191\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 78745,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"9398:237:191\",\n \"text\": \" @notice Increment collateral amount in cellar account within fraxlend pair\\n @param _fraxlendPair The specified Fraxlend Pair\\n @param amountToDeposit The amount of collateral to add to Fraxlend Pair position\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_addCollateral\",\n \"nameLocation\": \"9649:14:191\",\n \"parameters\": {\n \"id\": 78751,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78748,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"9672:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78764,\n \"src\": \"9664:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78747,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78746,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"9664:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"9664:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"9664:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78750,\n \"mutability\": \"mutable\",\n \"name\": \"amountToDeposit\",\n \"nameLocation\": \"9695:15:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78764,\n \"src\": \"9687:23:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78749,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9687:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"9663:48:191\"\n },\n \"returnParameters\": {\n \"id\": 78752,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"9721:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 78781,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"10002:178:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78780,\n \"nodeType\": \"Block\",\n \"src\": \"10115:65:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"expression\": {\n \"id\": 78775,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78768,\n \"src\": \"10138:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 78776,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"10152:18:191\",\n \"memberName\": \"collateralContract\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66099,\n \"src\": \"10138:32:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n \"typeString\": \"function () view external returns (address)\"\n }\n },\n \"id\": 78777,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"10138:34:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78774,\n \"name\": \"ERC20\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51130,\n \"src\": \"10132:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"type(contract ERC20)\"\n }\n },\n \"id\": 78778,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"10132:41:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"functionReturnParameters\": 78773,\n \"id\": 78779,\n \"nodeType\": \"Return\",\n \"src\": \"10125:48:191\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 78765,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"9803:194:191\",\n \"text\": \" @notice Get current collateral contract for caller in fraxlend pair\\n @param _fraxlendPair The specified Fraxlend Pair\\n @return collateralContract for fraxlend pair\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_userCollateralContract\",\n \"nameLocation\": \"10011:23:191\",\n \"parameters\": {\n \"id\": 78769,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78768,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"10043:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78781,\n \"src\": \"10035:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78767,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78766,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"10035:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"10035:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"10035:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"10034:23:191\"\n },\n \"returnParameters\": {\n \"id\": 78773,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78772,\n \"mutability\": \"mutable\",\n \"name\": \"collateralContract\",\n \"nameLocation\": \"10095:18:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78781,\n \"src\": \"10089:24:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 78771,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78770,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"10089:5:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"10089:5:191\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"10089:5:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"10088:26:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"view\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 78801,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"10435:175:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78800,\n \"nodeType\": \"Block\",\n \"src\": \"10529:81:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78793,\n \"name\": \"_collateralAmount\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78784,\n \"src\": \"10570:17:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"arguments\": [\n {\n \"id\": 78796,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"10597:4:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_CollateralFTokenAdaptor_$78819\",\n \"typeString\": \"contract CollateralFTokenAdaptor\"\n }\n ],\n \"id\": 78795,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"10589:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 78794,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"10589:7:191\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 78797,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"10589:13:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"expression\": {\n \"id\": 78790,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78787,\n \"src\": \"10539:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 78792,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"10553:16:191\",\n \"memberName\": \"removeCollateral\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66106,\n \"src\": \"10539:30:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$\",\n \"typeString\": \"function (uint256,address) external\"\n }\n },\n \"id\": 78798,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"10539:64:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78799,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"10539:64:191\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 78782,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"10186:244:191\",\n \"text\": \" @notice Decrement collateral amount in cellar account within fraxlend pair\\n @param _collateralAmount The amount of collateral to remove from fraxlend pair position\\n @param _fraxlendPair The specified Fraxlend Pair\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_removeCollateral\",\n \"nameLocation\": \"10444:17:191\",\n \"parameters\": {\n \"id\": 78788,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78784,\n \"mutability\": \"mutable\",\n \"name\": \"_collateralAmount\",\n \"nameLocation\": \"10470:17:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78801,\n \"src\": \"10462:25:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78783,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"10462:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78787,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"10497:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78801,\n \"src\": \"10489:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78786,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78785,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"10489:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"10489:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"10489:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"10461:50:191\"\n },\n \"returnParameters\": {\n \"id\": 78789,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"10529:0:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 78818,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"10841:182:191\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78817,\n \"nodeType\": \"Block\",\n \"src\": \"10942:81:191\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"id\": 78815,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 78810,\n \"name\": \"exchangeRate\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78808,\n \"src\": \"10952:12:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"expression\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"expression\": {\n \"id\": 78811,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78805,\n \"src\": \"10967:13:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 78812,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"10981:16:191\",\n \"memberName\": \"exchangeRateInfo\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66208,\n \"src\": \"10967:30:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$__$returns$_t_struct$_ExchangeRateInfo_$66202_memory_ptr_$\",\n \"typeString\": \"function () view external returns (struct IFToken.ExchangeRateInfo memory)\"\n }\n },\n \"id\": 78813,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"10967:32:191\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ExchangeRateInfo_$66202_memory_ptr\",\n \"typeString\": \"struct IFToken.ExchangeRateInfo memory\"\n }\n },\n \"id\": 78814,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"11000:16:191\",\n \"memberName\": \"highExchangeRate\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66201,\n \"src\": \"10967:49:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"10952:64:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"id\": 78816,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"10952:64:191\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 78802,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"10616:220:191\",\n \"text\": \" @notice Caller calls `updateExchangeRate()` on specified FraxlendV2 Pair\\n @param _fraxlendPair The specified FraxLendPair\\n @return exchangeRate needed to calculate the current health factor\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_getExchangeRateInfo\",\n \"nameLocation\": \"10850:20:191\",\n \"parameters\": {\n \"id\": 78806,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78805,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"10879:13:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78818,\n \"src\": \"10871:21:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 78804,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78803,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"10871:7:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"10871:7:191\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"10871:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"10870:23:191\"\n },\n \"returnParameters\": {\n \"id\": 78809,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78808,\n \"mutability\": \"mutable\",\n \"name\": \"exchangeRate\",\n \"nameLocation\": \"10928:12:191\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78818,\n \"src\": \"10920:20:191\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78807,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"10920:7:191\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"10919:22:191\"\n },\n \"scope\": 78819,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n }\n ],\n \"abstract\": false,\n \"baseContracts\": [\n {\n \"baseName\": {\n \"id\": 78380,\n \"name\": \"BaseAdaptor\",\n \"nameLocations\": [\n \"563:11:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 77495,\n \"src\": \"563:11:191\"\n },\n \"id\": 78381,\n \"nodeType\": \"InheritanceSpecifier\",\n \"src\": \"563:11:191\"\n },\n {\n \"baseName\": {\n \"id\": 78382,\n \"name\": \"FraxlendHealthFactorLogic\",\n \"nameLocations\": [\n \"576:25:191\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 80549,\n \"src\": \"576:25:191\"\n },\n \"id\": 78383,\n \"nodeType\": \"InheritanceSpecifier\",\n \"src\": \"576:25:191\"\n }\n ],\n \"canonicalName\": \"CollateralFTokenAdaptor\",\n \"contractDependencies\": [],\n \"contractKind\": \"contract\",\n \"documentation\": {\n \"id\": 78379,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"353:173:191\",\n \"text\": \" @title FraxLend Collateral Adaptor\\n @notice Allows addition and removal of collateralAssets to Fraxlend pairs for a Cellar.\\n @author crispymangoes, 0xEinCodes\"\n },\n \"fullyImplemented\": true,\n \"linearizedBaseContracts\": [\n 78819,\n 80549,\n 77495\n ],\n \"name\": \"CollateralFTokenAdaptor\",\n \"nameLocation\": \"536:23:191\",\n \"scope\": 78820,\n \"usedErrors\": [\n 77230,\n 77233,\n 77236,\n 77239,\n 77244,\n 77247,\n 78395,\n 78400\n ],\n \"usedEvents\": []\n }\n ],\n \"license\": \"Apache-2.0\"\n },\n \"id\": 191\n}") . expect ("invalid abi") + }); + #[derive(Clone)] + pub struct CollateralFTokenAdaptorV1(ethers::contract::Contract); + impl std::ops::Deref for CollateralFTokenAdaptorV1 { + type Target = ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl std::fmt::Debug for CollateralFTokenAdaptorV1 { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_tuple(stringify!(CollateralFTokenAdaptorV1)) + .field(&self.address()) + .finish() + } + } + impl<'a, M: ethers::providers::Middleware> CollateralFTokenAdaptorV1 { + #[doc = r" Creates a new contract instance with the specified `ethers`"] + #[doc = r" client at the given `Address`. The contract derefs to a `ethers::Contract`"] + #[doc = r" object"] + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + let contract = ethers::contract::Contract::new( + address.into(), + COLLATERALFTOKENADAPTORV1_ABI.clone(), + client, + ); + Self(contract) + } + #[doc = "Calls the contract's `FRAX` (0xb0e4556f) function"] + pub fn frax( + &self, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([176, 228, 85, 111], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `addCollateral` (0x6d75b9ee) function"] + pub fn add_collateral( + &self, + fraxlend_pair: ethers::core::types::Address, + collateral_to_deposit: ethers::core::types::U256, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([109, 117, 185, 238], (fraxlend_pair, collateral_to_deposit)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `assetOf` (0xe170a9bf) function"] + pub fn asset_of( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 112, 169, 191], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `assetsUsed` (0xaeffddde) function"] + pub fn assets_used( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall< + M, + ::std::vec::Vec, + > { + self.0 + .method_hash([174, 255, 221, 222], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `balanceOf` (0x78415365) function"] + pub fn balance_of( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([120, 65, 83, 101], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `deposit` (0x69445c31) function"] + pub fn deposit( + &self, + assets: ethers::core::types::U256, + adaptor_data: ethers::core::types::Bytes, + p2: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([105, 68, 92, 49], (assets, adaptor_data, p2)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `identifier` (0x7998a1c4) function"] + pub fn identifier(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 152, 161, 196], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `isDebt` (0x89353a09) function"] + pub fn is_debt(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([137, 53, 58, 9], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `minimumHealthFactor` (0x1caff8b1) function"] + pub fn minimum_health_factor( + &self, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 175, 248, 177], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `removeCollateral` (0xd41ddc96) function"] + pub fn remove_collateral( + &self, + collateral_amount: ethers::core::types::U256, + fraxlend_pair: ethers::core::types::Address, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([212, 29, 220, 150], (collateral_amount, fraxlend_pair)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `revokeApproval` (0xd3bfe76a) function"] + pub fn revoke_approval( + &self, + asset: ethers::core::types::Address, + spender: ethers::core::types::Address, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([211, 191, 231, 106], (asset, spender)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `slippage` (0x3e032a3b) function"] + pub fn slippage(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([62, 3, 42, 59], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `withdraw` (0xc9111bd7) function"] + pub fn withdraw( + &self, + p0: ethers::core::types::U256, + p1: ethers::core::types::Address, + p2: ethers::core::types::Bytes, + p3: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 17, 27, 215], (p0, p1, p2, p3)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `withdrawableFrom` (0xfa50e5d2) function"] + pub fn withdrawable_from( + &self, + p0: ethers::core::types::Bytes, + p1: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([250, 80, 229, 210], (p0, p1)) + .expect("method not found (this should never happen)") + } + } + #[doc = "Container type for all input parameters for the `FRAX`function with signature `FRAX()` and selector `[176, 228, 85, 111]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "FRAX", abi = "FRAX()")] + pub struct FraxCall; + #[doc = "Container type for all input parameters for the `addCollateral`function with signature `addCollateral(address,uint256)` and selector `[109, 117, 185, 238]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "addCollateral", abi = "addCollateral(address,uint256)")] + pub struct AddCollateralCall { + pub fraxlend_pair: ethers::core::types::Address, + pub collateral_to_deposit: ethers::core::types::U256, + } + #[doc = "Container type for all input parameters for the `assetOf`function with signature `assetOf(bytes)` and selector `[225, 112, 169, 191]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "assetOf", abi = "assetOf(bytes)")] + pub struct AssetOfCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `assetsUsed`function with signature `assetsUsed(bytes)` and selector `[174, 255, 221, 222]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "assetsUsed", abi = "assetsUsed(bytes)")] + pub struct AssetsUsedCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `balanceOf`function with signature `balanceOf(bytes)` and selector `[120, 65, 83, 101]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(bytes)")] + pub struct BalanceOfCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `deposit`function with signature `deposit(uint256,bytes,bytes)` and selector `[105, 68, 92, 49]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "deposit", abi = "deposit(uint256,bytes,bytes)")] + pub struct DepositCall { + pub assets: ethers::core::types::U256, + pub adaptor_data: ethers::core::types::Bytes, + pub p2: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `identifier`function with signature `identifier()` and selector `[121, 152, 161, 196]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "identifier", abi = "identifier()")] + pub struct IdentifierCall; + #[doc = "Container type for all input parameters for the `isDebt`function with signature `isDebt()` and selector `[137, 53, 58, 9]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "isDebt", abi = "isDebt()")] + pub struct IsDebtCall; + #[doc = "Container type for all input parameters for the `minimumHealthFactor`function with signature `minimumHealthFactor()` and selector `[28, 175, 248, 177]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "minimumHealthFactor", abi = "minimumHealthFactor()")] + pub struct MinimumHealthFactorCall; + #[doc = "Container type for all input parameters for the `removeCollateral`function with signature `removeCollateral(uint256,address)` and selector `[212, 29, 220, 150]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "removeCollateral", abi = "removeCollateral(uint256,address)")] + pub struct RemoveCollateralCall { + pub collateral_amount: ethers::core::types::U256, + pub fraxlend_pair: ethers::core::types::Address, + } + #[doc = "Container type for all input parameters for the `revokeApproval`function with signature `revokeApproval(address,address)` and selector `[211, 191, 231, 106]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "revokeApproval", abi = "revokeApproval(address,address)")] + pub struct RevokeApprovalCall { + pub asset: ethers::core::types::Address, + pub spender: ethers::core::types::Address, + } + #[doc = "Container type for all input parameters for the `slippage`function with signature `slippage()` and selector `[62, 3, 42, 59]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "slippage", abi = "slippage()")] + pub struct SlippageCall; + #[doc = "Container type for all input parameters for the `withdraw`function with signature `withdraw(uint256,address,bytes,bytes)` and selector `[201, 17, 27, 215]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "withdraw", abi = "withdraw(uint256,address,bytes,bytes)")] + pub struct WithdrawCall( + pub ethers::core::types::U256, + pub ethers::core::types::Address, + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[doc = "Container type for all input parameters for the `withdrawableFrom`function with signature `withdrawableFrom(bytes,bytes)` and selector `[250, 80, 229, 210]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "withdrawableFrom", abi = "withdrawableFrom(bytes,bytes)")] + pub struct WithdrawableFromCall( + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[derive(Debug, Clone, PartialEq, Eq, ethers :: contract :: EthAbiType)] + pub enum CollateralFTokenAdaptorV1Calls { + Frax(FraxCall), + AddCollateral(AddCollateralCall), + AssetOf(AssetOfCall), + AssetsUsed(AssetsUsedCall), + BalanceOf(BalanceOfCall), + Deposit(DepositCall), + Identifier(IdentifierCall), + IsDebt(IsDebtCall), + MinimumHealthFactor(MinimumHealthFactorCall), + RemoveCollateral(RemoveCollateralCall), + RevokeApproval(RevokeApprovalCall), + Slippage(SlippageCall), + Withdraw(WithdrawCall), + WithdrawableFrom(WithdrawableFromCall), + } + impl ethers::core::abi::AbiDecode for CollateralFTokenAdaptorV1Calls { + fn decode(data: impl AsRef<[u8]>) -> Result { + if let Ok(decoded) = ::decode(data.as_ref()) { + return Ok(CollateralFTokenAdaptorV1Calls::Frax(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::AddCollateral(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::AssetOf(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::AssetsUsed(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::BalanceOf(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::Deposit(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::Identifier(decoded)); + } + if let Ok(decoded) = ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::IsDebt(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::MinimumHealthFactor(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::RemoveCollateral(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::RevokeApproval(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::Slippage(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::Withdraw(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(CollateralFTokenAdaptorV1Calls::WithdrawableFrom(decoded)); + } + Err(ethers::core::abi::Error::InvalidData.into()) + } + } + impl ethers::core::abi::AbiEncode for CollateralFTokenAdaptorV1Calls { + fn encode(self) -> Vec { + match self { + CollateralFTokenAdaptorV1Calls::Frax(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::AddCollateral(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::AssetOf(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::AssetsUsed(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::BalanceOf(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::Deposit(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::Identifier(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::IsDebt(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::MinimumHealthFactor(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::RemoveCollateral(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::RevokeApproval(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::Slippage(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::Withdraw(element) => element.encode(), + CollateralFTokenAdaptorV1Calls::WithdrawableFrom(element) => element.encode(), + } + } + } + impl ::std::fmt::Display for CollateralFTokenAdaptorV1Calls { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + match self { + CollateralFTokenAdaptorV1Calls::Frax(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::AddCollateral(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::AssetOf(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::AssetsUsed(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::BalanceOf(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::Deposit(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::Identifier(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::IsDebt(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::MinimumHealthFactor(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::RemoveCollateral(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::RevokeApproval(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::Slippage(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::Withdraw(element) => element.fmt(f), + CollateralFTokenAdaptorV1Calls::WithdrawableFrom(element) => element.fmt(f), + } + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: FraxCall) -> Self { + CollateralFTokenAdaptorV1Calls::Frax(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: AddCollateralCall) -> Self { + CollateralFTokenAdaptorV1Calls::AddCollateral(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: AssetOfCall) -> Self { + CollateralFTokenAdaptorV1Calls::AssetOf(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: AssetsUsedCall) -> Self { + CollateralFTokenAdaptorV1Calls::AssetsUsed(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: BalanceOfCall) -> Self { + CollateralFTokenAdaptorV1Calls::BalanceOf(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: DepositCall) -> Self { + CollateralFTokenAdaptorV1Calls::Deposit(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: IdentifierCall) -> Self { + CollateralFTokenAdaptorV1Calls::Identifier(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: IsDebtCall) -> Self { + CollateralFTokenAdaptorV1Calls::IsDebt(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: MinimumHealthFactorCall) -> Self { + CollateralFTokenAdaptorV1Calls::MinimumHealthFactor(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: RemoveCollateralCall) -> Self { + CollateralFTokenAdaptorV1Calls::RemoveCollateral(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: RevokeApprovalCall) -> Self { + CollateralFTokenAdaptorV1Calls::RevokeApproval(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: SlippageCall) -> Self { + CollateralFTokenAdaptorV1Calls::Slippage(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: WithdrawCall) -> Self { + CollateralFTokenAdaptorV1Calls::Withdraw(var) + } + } + impl ::std::convert::From for CollateralFTokenAdaptorV1Calls { + fn from(var: WithdrawableFromCall) -> Self { + CollateralFTokenAdaptorV1Calls::WithdrawableFrom(var) + } + } +} diff --git a/steward_abi/src/debt_f_token_adaptor_v1.rs b/steward_abi/src/debt_f_token_adaptor_v1.rs new file mode 100644 index 00000000..b3c75324 --- /dev/null +++ b/steward_abi/src/debt_f_token_adaptor_v1.rs @@ -0,0 +1,680 @@ +pub use debtftokenadaptorv1_mod::*; +#[allow(clippy::too_many_arguments)] +mod debtftokenadaptorv1_mod { + #![allow(clippy::enum_variant_names)] + #![allow(dead_code)] + #![allow(clippy::type_complexity)] + #![allow(unused_imports)] + use ethers::contract::{ + builders::{ContractCall, Event}, + Contract, Lazy, + }; + use ethers::core::{ + abi::{Abi, Detokenize, InvalidOutputType, Token, Tokenizable}, + types::*, + }; + use ethers::providers::Middleware; + #[doc = "DebtFTokenAdaptorV1 was auto-generated with ethers-rs Abigen. More information at: https://github.com/gakonst/ethers-rs"] + use std::sync::Arc; + pub static DEBTFTOKENADAPTORV1_ABI: ethers::contract::Lazy = + ethers::contract::Lazy::new(|| { + serde_json :: from_str ("{\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"_accountForInterest\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_frax\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_healthFactor\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__ConstructorHealthFactorTooLow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__ExternalReceiverBlocked\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"asset\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BaseAdaptor__PricingNotSupported\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__Slippage\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__UserDepositsNotAllowed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__UserWithdrawsNotAllowed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DebtFTokenAdaptor__CannotRepayNoDebt\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"DebtFTokenAdaptor__HealthFactorTooLow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"ACCOUNT_FOR_INTEREST\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"FRAX\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"assetOf\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"assetsUsed\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20[]\",\n \"name\": \"assets\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToBorrow\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"borrowFromFraxlend\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"callAddInterest\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"identifier\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"isDebt\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"minimumHealthFactor\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_debtTokenRepayAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"name\": \"repayFraxlendDebt\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"asset\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeApproval\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"slippage\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"withdrawableFrom\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n }\n ],\n \"bytecode\": {\n \"object\": \"0x60e060405234801561001057600080fd5b506040516115cb3803806115cb83398101604081905261002f9161007e565b61003881610052565b91151560a0526001600160a01b031660805260c0526100d2565b670e92596fd629000081101561007b576040516397ed5f4160e01b815260040160405180910390fd5b50565b60008060006060848603121561009357600080fd5b835180151581146100a357600080fd5b60208501519093506001600160a01b03811681146100c057600080fd5b80925050604084015190509250925092565b60805160a05160c0516114bc61010f6000396000818161015b01526102cd01526000818161011f015261037e0152600061021b01526114bc6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806389353a0911610097578063c9111bd711610066578063c9111bd714610255578063d3bfe76a14610268578063e170a9bf1461027b578063fa50e5d21461028e57600080fd5b806389353a09146101dc5780638b9b9d40146101e3578063aeffddde146101f6578063b0e4556f1461021657600080fd5b806369445c31116100d357806369445c311461019b5780636dd659fd146101ae57806378415365146101c15780637998a1c4146101d457600080fd5b80631586ffbb14610105578063198775571461011a5780631caff8b1146101565780633e032a3b1461018b575b600080fd5b610118610113366004610df0565b6102a1565b005b6101417f000000000000000000000000000000000000000000000000000000000000000081565b60405190151581526020015b60405180910390f35b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161014d565b604051612328815260200161014d565b6101186101a9366004610ee8565b610320565b6101186101bc366004610f55565b610339565b61017d6101cf366004610f72565b61034e565b61017d6103aa565b6001610141565b6101186101f1366004610df0565b610413565b610209610204366004610f72565b6104c1565b60405161014d9190610fa7565b61023d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014d565b610118610263366004610ff4565b610524565b610118610276366004611074565b61053d565b61023d610289366004610f72565b610556565b61017d61029c3660046110ad565b61057f565b6102aa82610588565b6102b48183610742565b60006102bf836107a6565b90506102cb8382610814565b7f0000000000000000000000000000000000000000000000000000000000000000111561031b5760405163c4bbf5fd60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b505050565b604051633204ed5b60e21b815260040160405180910390fd5b61034281610588565b61034b816108e1565b50565b600080828060200190518101906103659190611111565b905060006103738233610956565b90506103a2828260007f00000000000000000000000000000000000000000000000000000000000000006109c5565b949350505050565b60006040516020016103f89060208082526022908201527f467261784c656e642064656274546f6b656e56322041646170746f722056203160408201526102e360f41b606082015260800190565b60405160208183030381529060405280519060200120905090565b61041c82610588565b600061042783610a4b565b905060006104358284610aaf565b90506000610447858360006001610b30565b905060006104558630610956565b905080600003610483576040516378d1784d60e01b81526001600160a01b0387166004820152602401610312565b8181101561048f578091505b6104a56001600160a01b03851687600019610b70565b6104af8683610bed565b6104b98487610c20565b505050505050565b604080516001808252818301909252606091602080830190803683370190505090506104ec82610556565b816000815181106104ff576104ff61112e565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6105526001600160a01b038316826000610b70565b5050565b6000808280602001905181019061056d9190611111565b905061057881610a4b565b9392505050565b60005b92915050565b60006105926103aa565b604080516001600160a01b03851660208201526001910160408051601f19818403018152908290526105c8939291602001611144565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106449190611111565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161067191815260200190565b602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b291906111bc565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a91906111d7565b61031b57604051637d6840ef60e11b81526001600160a01b0384166004820152602401610312565b6040516372f89d8b60e11b815260048101839052600060248201523060448201526001600160a01b0382169063e5f13b16906064015b600060405180830381600087803b15801561079257600080fd5b505af11580156104b9573d6000803e3d6000fd5b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a91906111f9565b6080015192915050565b6000806108218430610956565b9050600061083285836001806109c5565b90508060000361084e57670e92596fd629000092505050610582565b600061085a8630610caf565b9050806000036108705760009350505050610582565b60008061087c88610ce1565b909250905060008383836108908b8961126d565b61089a9190611292565b6108a4919061126d565b6108ae9190611292565b905060006108bb8a610d58565b905060006108d282670de0b6b3a764000085610dbc565b9b9a5050505050505050505050565b604051631c6c959760e01b8152600060048201526001600160a01b03821690631c6c959790602401610180604051808303816000875af1158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061134a565b50505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df906024015b602060405180830381865afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190611410565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b571906064015b602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190611410565b95945050505050565b6000816001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611111565b60006000198203610b29576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190611410565b9050610582565b5080610582565b604051631c2591d360e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690631c2591d390606401610a01565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610be75760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610312565b50505050565b604051633d417d2d60e01b8152600481018290523060248201526001600160a01b03831690633d417d2d90604401610778565b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190611410565b1115610552576105526001600160a01b038316826000610b70565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af306290602401610984565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190611429565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611410565b828202811515841585830485141716610dd457600080fd5b0492915050565b6001600160a01b038116811461034b57600080fd5b60008060408385031215610e0357600080fd5b8235610e0e81610ddb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610e5557610e55610e1c565b60405290565b600082601f830112610e6c57600080fd5b813567ffffffffffffffff80821115610e8757610e87610e1c565b604051601f8301601f19908116603f01168101908282118183101715610eaf57610eaf610e1c565b81604052838152866020858801011115610ec857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610efd57600080fd5b83359250602084013567ffffffffffffffff80821115610f1c57600080fd5b610f2887838801610e5b565b93506040860135915080821115610f3e57600080fd5b50610f4b86828701610e5b565b9150509250925092565b600060208284031215610f6757600080fd5b813561057881610ddb565b600060208284031215610f8457600080fd5b813567ffffffffffffffff811115610f9b57600080fd5b6103a284828501610e5b565b6020808252825182820181905260009190848201906040850190845b81811015610fe85783516001600160a01b031683529284019291840191600101610fc3565b50909695505050505050565b6000806000806080858703121561100a57600080fd5b84359350602085013561101c81610ddb565b9250604085013567ffffffffffffffff8082111561103957600080fd5b61104588838901610e5b565b9350606087013591508082111561105b57600080fd5b5061106887828801610e5b565b91505092959194509250565b6000806040838503121561108757600080fd5b823561109281610ddb565b915060208301356110a281610ddb565b809150509250929050565b600080604083850312156110c057600080fd5b823567ffffffffffffffff808211156110d857600080fd5b6110e486838701610e5b565b935060208501359150808211156110fa57600080fd5b5061110785828601610e5b565b9150509250929050565b60006020828403121561112357600080fd5b815161057881610ddb565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b8181101561118057858101830151858201608001528201611164565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff811681146111b757600080fd5b919050565b6000602082840312156111ce57600080fd5b610578826111a3565b6000602082840312156111e957600080fd5b8151801515811461057857600080fd5b600060a0828403121561120b57600080fd5b611213610e32565b825161121e81610ddb565b815261122c602084016111a3565b602082015260408301516001600160b81b038116811461124b57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b808202811582820484141761058257634e487b7160e01b600052601160045260246000fd5b6000826112af57634e487b7160e01b600052601260045260246000fd5b500490565b805167ffffffffffffffff811681146111b757600080fd5b80516fffffffffffffffffffffffffffffffff811681146111b757600080fd5b6000604082840312156112fe57600080fd5b6040516040810181811067ffffffffffffffff8211171561132157611321610e1c565b604052905080611330836112cc565b815261133e602084016112cc565b60208201525092915050565b60008060008060008086880361018081121561136557600080fd5b87519650602088015195506040880151945060a0605f198201121561138957600080fd5b50611392610e32565b61139e606089016111a3565b81526113ac608089016111a3565b60208201526113bd60a089016112b4565b60408201526113ce60c089016112b4565b60608201526113df60e089016112b4565b608082015292506113f48861010089016112ec565b91506114048861014089016112ec565b90509295509295509295565b60006020828403121561142257600080fd5b5051919050565b600080600080600080600080610100898b03121561144657600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea26469706673582212203690b6a89e1aeb08c96997e57ad247970fb247b9d96f4c840cbb091955085fb264736f6c63430008150033\",\n \"sourceMap\": \"603:13583:193:-:0;;;3006:271;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3092:52;3130:13;3092:37;:52::i;:::-;3154:42;;;;;-1:-1:-1;;;;;3206:19:193;;;3235:35;;603:13583;;8769:233:187;2786:7;8873:19;:57;8869:126;;;8951:44;;-1:-1:-1;;;8951:44:187;;;;;;;;;;;8869:126;8769:233;:::o;14:513:266:-;99:6;107;115;168:2;156:9;147:7;143:23;139:32;136:52;;;184:1;181;174:12;136:52;216:9;210:16;269:5;262:13;255:21;248:5;245:32;235:60;;291:1;288;281:12;235:60;364:2;349:18;;343:25;314:5;;-1:-1:-1;;;;;;399:33:266;;387:46;;377:74;;447:1;444;437:12;377:74;470:7;460:17;;;517:2;506:9;502:18;496:25;486:35;;14:513;;;;;:::o;:::-;603:13583:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\",\n \"linkReferences\": {}\n },\n \"deployedBytecode\": {\n \"object\": \"0x608060405234801561001057600080fd5b50600436106101005760003560e01c806389353a0911610097578063c9111bd711610066578063c9111bd714610255578063d3bfe76a14610268578063e170a9bf1461027b578063fa50e5d21461028e57600080fd5b806389353a09146101dc5780638b9b9d40146101e3578063aeffddde146101f6578063b0e4556f1461021657600080fd5b806369445c31116100d357806369445c311461019b5780636dd659fd146101ae57806378415365146101c15780637998a1c4146101d457600080fd5b80631586ffbb14610105578063198775571461011a5780631caff8b1146101565780633e032a3b1461018b575b600080fd5b610118610113366004610df0565b6102a1565b005b6101417f000000000000000000000000000000000000000000000000000000000000000081565b60405190151581526020015b60405180910390f35b61017d7f000000000000000000000000000000000000000000000000000000000000000081565b60405190815260200161014d565b604051612328815260200161014d565b6101186101a9366004610ee8565b610320565b6101186101bc366004610f55565b610339565b61017d6101cf366004610f72565b61034e565b61017d6103aa565b6001610141565b6101186101f1366004610df0565b610413565b610209610204366004610f72565b6104c1565b60405161014d9190610fa7565b61023d7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161014d565b610118610263366004610ff4565b610524565b610118610276366004611074565b61053d565b61023d610289366004610f72565b610556565b61017d61029c3660046110ad565b61057f565b6102aa82610588565b6102b48183610742565b60006102bf836107a6565b90506102cb8382610814565b7f0000000000000000000000000000000000000000000000000000000000000000111561031b5760405163c4bbf5fd60e01b81526001600160a01b03841660048201526024015b60405180910390fd5b505050565b604051633204ed5b60e21b815260040160405180910390fd5b61034281610588565b61034b816108e1565b50565b600080828060200190518101906103659190611111565b905060006103738233610956565b90506103a2828260007f00000000000000000000000000000000000000000000000000000000000000006109c5565b949350505050565b60006040516020016103f89060208082526022908201527f467261784c656e642064656274546f6b656e56322041646170746f722056203160408201526102e360f41b606082015260800190565b60405160208183030381529060405280519060200120905090565b61041c82610588565b600061042783610a4b565b905060006104358284610aaf565b90506000610447858360006001610b30565b905060006104558630610956565b905080600003610483576040516378d1784d60e01b81526001600160a01b0387166004820152602401610312565b8181101561048f578091505b6104a56001600160a01b03851687600019610b70565b6104af8683610bed565b6104b98487610c20565b505050505050565b604080516001808252818301909252606091602080830190803683370190505090506104ec82610556565b816000815181106104ff576104ff61112e565b60200260200101906001600160a01b031690816001600160a01b031681525050919050565b604051635f5003c560e11b815260040160405180910390fd5b6105526001600160a01b038316826000610b70565b5050565b6000808280602001905181019061056d9190611111565b905061057881610a4b565b9392505050565b60005b92915050565b60006105926103aa565b604080516001600160a01b03851660208201526001910160408051601f19818403018152908290526105c8939291602001611144565b6040516020818303038152906040528051906020012090506000306001600160a01b0316637b1039996040518163ffffffff1660e01b8152600401602060405180830381865afa158015610620573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106449190611111565b6001600160a01b03166309f7abd2836040518263ffffffff1660e01b815260040161067191815260200190565b602060405180830381865afa15801561068e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106b291906111bc565b60405163024eefab60e61b815263ffffffff8216600482015290915030906393bbeac090602401602060405180830381865afa1580156106f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071a91906111d7565b61031b57604051637d6840ef60e11b81526001600160a01b0384166004820152602401610312565b6040516372f89d8b60e11b815260048101839052600060248201523060448201526001600160a01b0382169063e5f13b16906064015b600060405180830381600087803b15801561079257600080fd5b505af11580156104b9573d6000803e3d6000fd5b6000816001600160a01b031663fbbbf94c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156107e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061080a91906111f9565b6080015192915050565b6000806108218430610956565b9050600061083285836001806109c5565b90508060000361084e57670e92596fd629000092505050610582565b600061085a8630610caf565b9050806000036108705760009350505050610582565b60008061087c88610ce1565b909250905060008383836108908b8961126d565b61089a9190611292565b6108a4919061126d565b6108ae9190611292565b905060006108bb8a610d58565b905060006108d282670de0b6b3a764000085610dbc565b9b9a5050505050505050505050565b604051631c6c959760e01b8152600060048201526001600160a01b03821690631c6c959790602401610180604051808303816000875af1158015610929573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061094d919061134a565b50505050505050565b604051634fd422df60e01b81526001600160a01b03828116600483015260009190841690634fd422df906024015b602060405180830381865afa1580156109a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105789190611410565b604051637ec4b57160e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690637ec4b571906064015b602060405180830381865afa158015610a1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a429190611410565b95945050505050565b6000816001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611111565b60006000198203610b29576040516370a0823160e01b81523060048201526001600160a01b038416906370a0823190602401602060405180830381865afa158015610afe573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b229190611410565b9050610582565b5080610582565b604051631c2591d360e01b815260048101849052821515602482015281151560448201526000906001600160a01b03861690631c2591d390606401610a01565b600060405163095ea7b360e01b8152836004820152826024820152602060006044836000895af13d15601f3d1160016000511416171691505080610be75760405162461bcd60e51b815260206004820152600e60248201526d1054141493d59157d1905253115160921b6044820152606401610312565b50505050565b604051633d417d2d60e01b8152600481018290523060248201526001600160a01b03831690633d417d2d90604401610778565b604051636eb1769f60e11b81523060048201526001600160a01b0382811660248301526000919084169063dd62ed3e90604401602060405180830381865afa158015610c70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c949190611410565b1115610552576105526001600160a01b038316826000610b70565b604051635ad7983160e11b81526001600160a01b0382811660048301526000919084169063b5af306290602401610984565b600080826001600160a01b0316639a295e736040518163ffffffff1660e01b815260040161010060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d479190611429565b509599919850909650505050505050565b6000816001600160a01b031663f384bd056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d98573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105829190611410565b828202811515841585830485141716610dd457600080fd5b0492915050565b6001600160a01b038116811461034b57600080fd5b60008060408385031215610e0357600080fd5b8235610e0e81610ddb565b946020939093013593505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715610e5557610e55610e1c565b60405290565b600082601f830112610e6c57600080fd5b813567ffffffffffffffff80821115610e8757610e87610e1c565b604051601f8301601f19908116603f01168101908282118183101715610eaf57610eaf610e1c565b81604052838152866020858801011115610ec857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600060608486031215610efd57600080fd5b83359250602084013567ffffffffffffffff80821115610f1c57600080fd5b610f2887838801610e5b565b93506040860135915080821115610f3e57600080fd5b50610f4b86828701610e5b565b9150509250925092565b600060208284031215610f6757600080fd5b813561057881610ddb565b600060208284031215610f8457600080fd5b813567ffffffffffffffff811115610f9b57600080fd5b6103a284828501610e5b565b6020808252825182820181905260009190848201906040850190845b81811015610fe85783516001600160a01b031683529284019291840191600101610fc3565b50909695505050505050565b6000806000806080858703121561100a57600080fd5b84359350602085013561101c81610ddb565b9250604085013567ffffffffffffffff8082111561103957600080fd5b61104588838901610e5b565b9350606087013591508082111561105b57600080fd5b5061106887828801610e5b565b91505092959194509250565b6000806040838503121561108757600080fd5b823561109281610ddb565b915060208301356110a281610ddb565b809150509250929050565b600080604083850312156110c057600080fd5b823567ffffffffffffffff808211156110d857600080fd5b6110e486838701610e5b565b935060208501359150808211156110fa57600080fd5b5061110785828601610e5b565b9150509250929050565b60006020828403121561112357600080fd5b815161057881610ddb565b634e487b7160e01b600052603260045260246000fd5b838152600060208415158184015260606040840152835180606085015260005b8181101561118057858101830151858201608001528201611164565b506000608082860101526080601f19601f83011685010192505050949350505050565b805163ffffffff811681146111b757600080fd5b919050565b6000602082840312156111ce57600080fd5b610578826111a3565b6000602082840312156111e957600080fd5b8151801515811461057857600080fd5b600060a0828403121561120b57600080fd5b611213610e32565b825161121e81610ddb565b815261122c602084016111a3565b602082015260408301516001600160b81b038116811461124b57600080fd5b6040820152606083810151908201526080928301519281019290925250919050565b808202811582820484141761058257634e487b7160e01b600052601160045260246000fd5b6000826112af57634e487b7160e01b600052601260045260246000fd5b500490565b805167ffffffffffffffff811681146111b757600080fd5b80516fffffffffffffffffffffffffffffffff811681146111b757600080fd5b6000604082840312156112fe57600080fd5b6040516040810181811067ffffffffffffffff8211171561132157611321610e1c565b604052905080611330836112cc565b815261133e602084016112cc565b60208201525092915050565b60008060008060008086880361018081121561136557600080fd5b87519650602088015195506040880151945060a0605f198201121561138957600080fd5b50611392610e32565b61139e606089016111a3565b81526113ac608089016111a3565b60208201526113bd60a089016112b4565b60408201526113ce60c089016112b4565b60608201526113df60e089016112b4565b608082015292506113f48861010089016112ec565b91506114048861014089016112ec565b90509295509295509295565b60006020828403121561142257600080fd5b5051919050565b600080600080600080600080610100898b03121561144657600080fd5b505086516020880151604089015160608a015160808b015160a08c015160c08d015160e0909d0151959e949d50929b919a5098509096509450909250905056fea26469706673582212203690b6a89e1aeb08c96997e57ad247970fb247b9d96f4c840cbb091955085fb264736f6c63430008150033\",\n \"sourceMap\": \"603:13583:193:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6289:560;;;;;;:::i;:::-;;:::i;:::-;;2755:42;;;;;;;;670:14:266;;663:22;645:41;;633:2;618:18;2755:42:193;;;;;;;;2955:44;;;;;;;;843:25:266;;;831:2;816:18;2955:44:193;697:177:266;2441:78:187;;;2507:5;1023:42:266;;1011:2;996:18;2441:78:187;879:192:266;4056:136:193;;;;;;:::i;:::-;;:::i;8942:139::-;;;;;;:::i;:::-;;:::i;4933:323::-;;;;;;:::i;:::-;;:::i;3696:152::-;;;:::i;5683:82::-;5754:4;5683:82;;7262:1157;;;;;;:::i;:::-;;:::i;5960:180:187:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2403:27:193:-;;;;;;;;-1:-1:-1;;;;;4437:32:266;;;4419:51;;4407:2;4392:18;2403:27:193;4258:218:266;4280:147:193;;;;;;:::i;:::-;;:::i;9230:107:187:-;;;;;;:::i;:::-;;:::i;5390:210:193:-;;;;;;:::i;:::-;;:::i;4601:118::-;;;;;;:::i;:::-;;:::i;6289:560::-;6380:29;6396:12;6380:15;:29::i;:::-;6419:42;6432:14;6448:12;6419;:42::i;:::-;6525:21;6549:34;6570:12;6549:20;:34::i;:::-;6525:58;;6703:45;6720:12;6734:13;6703:16;:45::i;:::-;6680:19;:69;6676:167;;;6772:60;;-1:-1:-1;;;6772:60:193;;-1:-1:-1;;;;;4437:32:266;;6772:60:193;;;4419:51:266;4392:18;;6772:60:193;;;;;;;;6676:167;6370:479;6289:560;;:::o;4056:136::-;4148:37;;-1:-1:-1;;;4148:37:193;;;;;;;;;;;8942:139;9007:30;9023:13;9007:15;:30::i;:::-;9047:27;9060:13;9047:12;:27::i;:::-;8942:139;:::o;4933:323::-;5008:7;5027:20;5061:11;5050:34;;;;;;;;;;;;:::i;:::-;5027:57;;5094:20;5117:43;5135:12;5149:10;5117:17;:43::i;:::-;5094:66;;5177:72;5193:12;5207;5221:5;5228:20;5177:15;:72::i;:::-;5170:79;4933:323;-1:-1:-1;;;;4933:323:193:o;3696:152::-;3756:7;3792:48;;;;;;6900:2:266;6882:21;;;6939:2;6919:18;;;6912:30;6978:34;6973:2;6958:18;;6951:62;-1:-1:-1;;;7044:2:266;7029:18;;7022:32;7086:3;7071:19;;6698:398;3792:48:193;;;;;;;;;;;;;3782:59;;;;;;3775:66;;3696:152;:::o;7262:1157::-;7360:30;7376:13;7360:15;:30::i;:::-;7400:18;7427:33;7446:13;7427:18;:33::i;:::-;7400:61;;7471:24;7498:50;7512:12;7526:21;7498:13;:50::i;:::-;7471:77;;7558:21;7582:60;7597:13;7612:16;7630:5;7637:4;7582:14;:60::i;:::-;7558:84;;7652:27;7682:47;7700:13;7723:4;7682:17;:47::i;:::-;7652:77;;7792:19;7815:1;7792:24;7788:97;;7825:60;;-1:-1:-1;;;7825:60:193;;-1:-1:-1;;;;;4437:32:266;;7825:60:193;;;4419:51:266;4392:18;;7825:60:193;4258:218:266;7788:97:193;8137:13;8115:19;:35;8111:101;;;8182:19;8166:35;;8111:101;8221:67;-1:-1:-1;;;;;8221:24:193;;8254:13;-1:-1:-1;;8221:24:193;:67::i;:::-;8299:41;8311:13;8326;8299:11;:41::i;:::-;8351:61;8375:12;8397:13;8351:23;:61::i;:::-;7350:1069;;;;7262:1157;;:::o;5960:180:187:-;6077:14;;;6089:1;6077:14;;;;;;;;;6035:21;;6077:14;;;;;;;;;;;-1:-1:-1;6077:14:187;6068:23;;6113:20;6121:11;6113:7;:20::i;:::-;6101:6;6108:1;6101:9;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;6101:32:187;;;-1:-1:-1;;;;;6101:32:187;;;;;5960:180;;;:::o;4280:147:193:-;4382:38;;-1:-1:-1;;;4382:38:193;;;;;;;;;;;9230:107:187;9301:29;-1:-1:-1;;;;;9301:17:187;;9319:7;9328:1;9301:17;:29::i;:::-;9230:107;;:::o;5390:210:193:-;5463:5;5480:20;5514:11;5503:34;;;;;;;;;;;;:::i;:::-;5480:57;;5560:32;5579:12;5560:18;:32::i;:::-;5547:46;5390:210;-1:-1:-1;;;5390:210:193:o;4601:118::-;4685:7;4601:118;;;;;:::o;9326:444::-;9398:20;9442:12;:10;:12::i;:::-;9462:34;;;-1:-1:-1;;;;;4437:32:266;;9462:34:193;;;4419:51:266;9456:4:193;;4392:18:266;9462:34:193;;;-1:-1:-1;;9462:34:193;;;;;;;;;;9431:66;;;;9462:34;9431:66;;:::i;:::-;;;;;;;;;;;;;9421:77;;;;;;9398:100;;9508:17;9543:4;-1:-1:-1;;;;;9528:30:193;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9528:60:193;;9589:12;9528:74;;;;;;;;;;;;;843:25:266;;831:2;816:18;;697:177;9528:74:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9617:48;;-1:-1:-1;;;9617:48:193;;1053:10:266;1041:23;;9617:48:193;;;1023:42:266;9508:94:193;;-1:-1:-1;9632:4:193;;9617:36;;996:18:266;;9617:48:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9612:151;;9686:77;;-1:-1:-1;;;9686:77:193;;-1:-1:-1;;;;;4437:32:266;;9686:77:193;;;4419:51:266;4392:18;;9686:77:193;4258:218:266;13115:312:193;13210:58;;-1:-1:-1;;;13210:58:193;;;;;9295:25:266;;;13251:1:193;9336:18:266;;;9329:34;13262:4:193;9379:18:266;;;9372:60;-1:-1:-1;;;;;13210:25:193;;;;;9268:18:266;;13210:58:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13658:182;13737:20;13784:13;-1:-1:-1;;;;;13784:30:193;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:49;;;;13658:182;-1:-1:-1;;13658:182:193:o;1173:1164:197:-;1276:7;1333:22;1358:47;1376:13;1399:4;1358:17;:47::i;:::-;1333:72;;1415:23;1441:58;1457:13;1472:14;1488:4;1494;1441:15;:58::i;:::-;1415:84;;1638:15;1657:1;1638:20;1634:40;;1667:7;1660:14;;;;;;1634:40;1684:25;1712:52;1735:13;1758:4;1712:22;:52::i;:::-;1684:80;;1778:17;1799:1;1778:22;1774:36;;1809:1;1802:8;;;;;;;1774:36;1822:21;1845:26;1875:28;1889:13;1875;:28::i;:::-;1821:82;;-1:-1:-1;1821:82:197;-1:-1:-1;1913:26:197;2031:17;1821:82;;1945:31;1963:13;1945:15;:31;:::i;:::-;1944:54;;;;:::i;:::-;1943:72;;;;:::i;:::-;1942:106;;;;:::i;:::-;1913:135;;2099:26;2128:22;2136:13;2128:7;:22::i;:::-;2099:51;-1:-1:-1;2191:17:197;2211:55;2099:51;2241:4;2247:18;2211:29;:55::i;:::-;2191:75;1173:1164;-1:-1:-1;;;;;;;;;;;1173:1164:197:o;11969:109:193:-;12040:31;;-1:-1:-1;;;12040:31:193;;12065:5;12040:31;;;645:41:266;-1:-1:-1;;;;;12040:24:193;;;;;618:18:266;;12040:31:193;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;11969:109;:::o;3388:257:197:-;3552:37;;-1:-1:-1;;;3552:37:197;;-1:-1:-1;;;;;4437:32:266;;;3552:37:197;;;4419:51:266;3506:27:197;;3552:30;;;;;;4392:18:266;;3552:37:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2906:270::-;3104:65;;-1:-1:-1;;;3104:65:197;;;;;13149:25:266;;;13217:14;;13210:22;13190:18;;;13183:50;13276:14;;13269:22;13249:18;;;13242:50;3078:7:197;;-1:-1:-1;;;;;3104:28:197;;;;;13122:18:266;;3104:65:197;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3097:72;2906:270;-1:-1:-1;;;;;2906:270:197:o;11570:142:193:-;11652:13;11684;-1:-1:-1;;;;;11684:19:193;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7842:207:187:-;7925:7;-1:-1:-1;;7948:6:187;:27;7944:98;;7984:30;;-1:-1:-1;;;7984:30:187;;8008:4;7984:30;;;4419:51:266;-1:-1:-1;;;;;7984:15:187;;;;;4392:18:266;;7984:30:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7977:37;;;;7944:98;-1:-1:-1;8036:6:187;8029:13;;12642:248:193;12829:54;;-1:-1:-1;;;12829:54:193;;;;;13149:25:266;;;13217:14;;13210:22;13190:18;;;13183:50;13276:14;;13269:22;13249:18;;;13242:50;12803:7:193;;-1:-1:-1;;;;;12829:20:193;;;;;13122:18:266;;12829:54:193;12959:339:266;4455:1497:65;4566:12;4736:4;4730:11;-1:-1:-1;;;4859:17:65;4852:93;4992:2;4988:1;4969:17;4965:25;4958:37;5072:6;5067:2;5048:17;5044:26;5037:42;5874:2;5871:1;5867:2;5848:17;5845:1;5838:5;5831;5826:51;5395:16;5388:24;5382:2;5364:16;5361:24;5357:1;5353;5347:8;5344:15;5340:46;5337:76;5137:754;5126:765;;;5919:7;5911:34;;;;-1:-1:-1;;;5911:34:65;;13770:2:266;5911:34:65;;;13752:21:266;13809:2;13789:18;;;13782:30;-1:-1:-1;;;13828:18:266;;;13821:44;13882:18;;5911:34:65;13568:338:266;5911:34:65;4556:1396;4455:1497;;;:::o;14029:155:193:-;14123:54;;-1:-1:-1;;;14123:54:193;;;;;14085:25:266;;;14171:4:193;14126:18:266;;;14119:60;-1:-1:-1;;;;;14123:24:193;;;;;14058:18:266;;14123:54:193;13911:274:266;8184:167:187;8270:39;;-1:-1:-1;;;8270:39:187;;8294:4;8270:39;;;14402:34:266;-1:-1:-1;;;;;14472:15:266;;;14452:18;;;14445:43;8312:1:187;;8270:15;;;;;;14337:18:266;;8270:39:187;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;8266:78;;;8315:29;-1:-1:-1;;;;;8315:17:187;;8333:7;8342:1;8315:17;:29::i;3894:216:197:-;4061:42;;-1:-1:-1;;;4061:42:197;;-1:-1:-1;;;;;4437:32:266;;;4061:42:197;;;4419:51:266;4017:25:197;;4061:35;;;;;;4392:18:266;;4061:42:197;4258:218:266;4116:237:197;4207:21;4230:26;4318:13;-1:-1:-1;;;;;4318:26:197;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4268:78:197;;;;-1:-1:-1;4116:237:197;;-1:-1:-1;;;;;;;4116:237:197:o;4359:135::-;4430:14;4465:13;-1:-1:-1;;;;;4465:20:197;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;1331:505:225:-;1507:9;;;1638:19;;1631:27;1663:9;;1677;;;1674:16;;1660:31;1627:65;1617:121;;1722:1;1719;1712:12;1617:121;1801:19;;1331:505;-1:-1:-1;;1331:505:225:o;14:140:266:-;-1:-1:-1;;;;;98:31:266;;88:42;;78:70;;144:1;141;134:12;159:341;244:6;252;305:2;293:9;284:7;280:23;276:32;273:52;;;321:1;318;311:12;273:52;360:9;347:23;379:40;413:5;379:40;:::i;:::-;438:5;490:2;475:18;;;;462:32;;-1:-1:-1;;;159:341:266:o;1076:127::-;1137:10;1132:3;1128:20;1125:1;1118:31;1168:4;1165:1;1158:15;1192:4;1189:1;1182:15;1208:247;1275:2;1269:9;1317:3;1305:16;;1351:18;1336:34;;1372:22;;;1333:62;1330:88;;;1398:18;;:::i;:::-;1434:2;1427:22;1208:247;:::o;1460:718::-;1502:5;1555:3;1548:4;1540:6;1536:17;1532:27;1522:55;;1573:1;1570;1563:12;1522:55;1609:6;1596:20;1635:18;1672:2;1668;1665:10;1662:36;;;1678:18;;:::i;:::-;1753:2;1747:9;1721:2;1807:13;;-1:-1:-1;;1803:22:266;;;1827:2;1799:31;1795:40;1783:53;;;1851:18;;;1871:22;;;1848:46;1845:72;;;1897:18;;:::i;:::-;1937:10;1933:2;1926:22;1972:2;1964:6;1957:18;2018:3;2011:4;2006:2;1998:6;1994:15;1990:26;1987:35;1984:55;;;2035:1;2032;2025:12;1984:55;2099:2;2092:4;2084:6;2080:17;2073:4;2065:6;2061:17;2048:54;2146:1;2139:4;2134:2;2126:6;2122:15;2118:26;2111:37;2166:6;2157:15;;;;;;1460:718;;;;:::o;2183:607::-;2278:6;2286;2294;2347:2;2335:9;2326:7;2322:23;2318:32;2315:52;;;2363:1;2360;2353:12;2315:52;2399:9;2386:23;2376:33;;2460:2;2449:9;2445:18;2432:32;2483:18;2524:2;2516:6;2513:14;2510:34;;;2540:1;2537;2530:12;2510:34;2563:49;2604:7;2595:6;2584:9;2580:22;2563:49;:::i;:::-;2553:59;;2665:2;2654:9;2650:18;2637:32;2621:48;;2694:2;2684:8;2681:16;2678:36;;;2710:1;2707;2700:12;2678:36;;2733:51;2776:7;2765:8;2754:9;2750:24;2733:51;:::i;:::-;2723:61;;;2183:607;;;;;:::o;2795:273::-;2871:6;2924:2;2912:9;2903:7;2899:23;2895:32;2892:52;;;2940:1;2937;2930:12;2892:52;2979:9;2966:23;2998:40;3032:5;2998:40;:::i;3073:320::-;3141:6;3194:2;3182:9;3173:7;3169:23;3165:32;3162:52;;;3210:1;3207;3200:12;3162:52;3250:9;3237:23;3283:18;3275:6;3272:30;3269:50;;;3315:1;3312;3305:12;3269:50;3338:49;3379:7;3370:6;3359:9;3355:22;3338:49;:::i;3580:673::-;3766:2;3818:21;;;3888:13;;3791:18;;;3910:22;;;3737:4;;3766:2;3989:15;;;;3963:2;3948:18;;;3737:4;4032:195;4046:6;4043:1;4040:13;4032:195;;;4111:13;;-1:-1:-1;;;;;4107:39:266;4095:52;;4202:15;;;;4167:12;;;;4143:1;4061:9;4032:195;;;-1:-1:-1;4244:3:266;;3580:673;-1:-1:-1;;;;;;3580:673:266:o;4481:752::-;4585:6;4593;4601;4609;4662:3;4650:9;4641:7;4637:23;4633:33;4630:53;;;4679:1;4676;4669:12;4630:53;4715:9;4702:23;4692:33;;4775:2;4764:9;4760:18;4747:32;4788:40;4822:5;4788:40;:::i;:::-;4847:5;-1:-1:-1;4903:2:266;4888:18;;4875:32;4926:18;4956:14;;;4953:34;;;4983:1;4980;4973:12;4953:34;5006:49;5047:7;5038:6;5027:9;5023:22;5006:49;:::i;:::-;4996:59;;5108:2;5097:9;5093:18;5080:32;5064:48;;5137:2;5127:8;5124:16;5121:36;;;5153:1;5150;5143:12;5121:36;;5176:51;5219:7;5208:8;5197:9;5193:24;5176:51;:::i;:::-;5166:61;;;4481:752;;;;;;;:::o;5238:421::-;5321:6;5329;5382:2;5370:9;5361:7;5357:23;5353:32;5350:52;;;5398:1;5395;5388:12;5350:52;5437:9;5424:23;5456:40;5490:5;5456:40;:::i;:::-;5515:5;-1:-1:-1;5572:2:266;5557:18;;5544:32;5585:42;5544:32;5585:42;:::i;:::-;5646:7;5636:17;;;5238:421;;;;;:::o;5664:539::-;5750:6;5758;5811:2;5799:9;5790:7;5786:23;5782:32;5779:52;;;5827:1;5824;5817:12;5779:52;5867:9;5854:23;5896:18;5937:2;5929:6;5926:14;5923:34;;;5953:1;5950;5943:12;5923:34;5976:49;6017:7;6008:6;5997:9;5993:22;5976:49;:::i;:::-;5966:59;;6078:2;6067:9;6063:18;6050:32;6034:48;;6107:2;6097:8;6094:16;6091:36;;;6123:1;6120;6113:12;6091:36;;6146:51;6189:7;6178:8;6167:9;6163:24;6146:51;:::i;:::-;6136:61;;;5664:539;;;;;:::o;6416:277::-;6503:6;6556:2;6544:9;6535:7;6531:23;6527:32;6524:52;;;6572:1;6569;6562:12;6524:52;6604:9;6598:16;6623:40;6657:5;6623:40;:::i;7101:127::-;7162:10;7157:3;7153:20;7150:1;7143:31;7193:4;7190:1;7183:15;7217:4;7214:1;7207:15;7233:701;7430:6;7419:9;7412:25;7393:4;7456:2;7508:6;7501:14;7494:22;7489:2;7478:9;7474:18;7467:50;7553:2;7548;7537:9;7533:18;7526:30;7585:6;7579:13;7628:6;7623:2;7612:9;7608:18;7601:34;7653:1;7663:141;7677:6;7674:1;7671:13;7663:141;;;7773:14;;;7769:23;;7763:30;7738:17;;;7757:3;7734:27;7727:67;7692:10;;7663:141;;;7667:3;7854:1;7848:3;7839:6;7828:9;7824:22;7820:32;7813:43;7924:3;7917:2;7913:7;7908:2;7900:6;7896:15;7892:29;7881:9;7877:45;7873:55;7865:63;;;;7233:701;;;;;;:::o;8222:167::-;8300:13;;8353:10;8342:22;;8332:33;;8322:61;;8379:1;8376;8369:12;8322:61;8222:167;;;:::o;8394:206::-;8463:6;8516:2;8504:9;8495:7;8491:23;8487:32;8484:52;;;8532:1;8529;8522:12;8484:52;8555:39;8584:9;8555:39;:::i;8803:277::-;8870:6;8923:2;8911:9;8902:7;8898:23;8894:32;8891:52;;;8939:1;8936;8929:12;8891:52;8971:9;8965:16;9024:5;9017:13;9010:21;9003:5;9000:32;8990:60;;9046:1;9043;9036:12;9443:741;9548:6;9601:3;9589:9;9580:7;9576:23;9572:33;9569:53;;;9618:1;9615;9608:12;9569:53;9644:17;;:::i;:::-;9691:9;9685:16;9710:42;9744:7;9710:42;:::i;:::-;9761:22;;9815:48;9859:2;9844:18;;9815:48;:::i;:::-;9810:2;9799:14;;9792:72;9909:2;9894:18;;9888:25;-1:-1:-1;;;;;9944:33:266;;9932:46;;9922:74;;9992:1;9989;9982:12;9922:74;10023:2;10012:14;;10005:31;10089:2;10074:18;;;10068:25;10052:14;;;10045:49;10148:3;10133:19;;;10127:26;10110:15;;;10103:51;;;;-1:-1:-1;10016:5:266;9443:741;-1:-1:-1;9443:741:266:o;10189:265::-;10262:9;;;10293;;10310:15;;;10304:22;;10290:37;10280:168;;10370:10;10365:3;10361:20;10358:1;10351:31;10405:4;10402:1;10395:15;10433:4;10430:1;10423:15;10459:217;10499:1;10525;10515:132;;10569:10;10564:3;10560:20;10557:1;10550:31;10604:4;10601:1;10594:15;10632:4;10629:1;10622:15;10515:132;-1:-1:-1;10661:9:266;;10459:217::o;10681:175::-;10759:13;;10812:18;10801:30;;10791:41;;10781:69;;10846:1;10843;10836:12;10861:192;10940:13;;10993:34;10982:46;;10972:57;;10962:85;;11043:1;11040;11033:12;11058:526;11128:5;11176:4;11164:9;11159:3;11155:19;11151:30;11148:50;;;11194:1;11191;11184:12;11148:50;11227:4;11221:11;11271:4;11263:6;11259:17;11342:6;11330:10;11327:22;11306:18;11294:10;11291:34;11288:62;11285:88;;;11353:18;;:::i;:::-;11389:4;11382:24;11424:6;-1:-1:-1;11424:6:266;11454:40;11484:9;11454:40;:::i;:::-;11446:6;11439:56;11528:49;11573:2;11562:9;11558:18;11528:49;:::i;:::-;11523:2;11515:6;11511:15;11504:74;;11058:526;;;;:::o;11589:1176::-;11800:6;11808;11816;11824;11832;11840;11884:9;11875:7;11871:23;11914:3;11910:2;11906:12;11903:32;;;11931:1;11928;11921:12;11903:32;11960:9;11954:16;11944:26;;12010:2;11999:9;11995:18;11989:25;11979:35;;12054:2;12043:9;12039:18;12033:25;12023:35;;12092:4;12086:2;12082:7;12078:2;12074:16;12070:27;12067:47;;;12110:1;12107;12100:12;12067:47;;12136:17;;:::i;:::-;12176:48;12220:2;12209:9;12205:18;12176:48;:::i;:::-;12169:5;12162:63;12257:49;12301:3;12290:9;12286:19;12257:49;:::i;:::-;12252:2;12245:5;12241:14;12234:73;12339:50;12383:4;12372:9;12368:20;12339:50;:::i;:::-;12334:2;12327:5;12323:14;12316:74;12422:49;12466:3;12455:9;12451:19;12422:49;:::i;:::-;12417:2;12410:5;12406:14;12399:73;12505:49;12549:3;12538:9;12534:19;12505:49;:::i;:::-;12499:3;12488:15;;12481:74;12492:5;-1:-1:-1;12598:71:266;12661:7;12655:3;12640:19;;12598:71;:::i;:::-;12588:81;;12688:71;12751:7;12745:3;12734:9;12730:19;12688:71;:::i;:::-;12678:81;;11589:1176;;;;;;;;:::o;12770:184::-;12840:6;12893:2;12881:9;12872:7;12868:23;12864:32;12861:52;;;12909:1;12906;12899:12;12861:52;-1:-1:-1;12932:16:266;;12770:184;-1:-1:-1;12770:184:266:o;14499:616::-;14632:6;14640;14648;14656;14664;14672;14680;14688;14741:3;14729:9;14720:7;14716:23;14712:33;14709:53;;;14758:1;14755;14748:12;14709:53;-1:-1:-1;;14781:16:266;;14837:2;14822:18;;14816:25;14881:2;14866:18;;14860:25;14925:2;14910:18;;14904:25;14969:3;14954:19;;14948:26;15014:3;14999:19;;14993:26;15059:3;15044:19;;15038:26;15104:3;15089:19;;;15083:26;14781:16;;14816:25;;-1:-1:-1;14860:25:266;;14904;;-1:-1:-1;14948:26:266;-1:-1:-1;14993:26:266;;-1:-1:-1;15038:26:266;-1:-1:-1;15083:26:266;;-1:-1:-1;14499:616:266;-1:-1:-1;14499:616:266:o\",\n \"linkReferences\": {},\n \"immutableReferences\": {\n \"78959\": [\n {\n \"start\": 539,\n \"length\": 32\n }\n ],\n \"78962\": [\n {\n \"start\": 287,\n \"length\": 32\n },\n {\n \"start\": 894,\n \"length\": 32\n }\n ],\n \"78965\": [\n {\n \"start\": 347,\n \"length\": 32\n },\n {\n \"start\": 717,\n \"length\": 32\n }\n ]\n }\n },\n \"methodIdentifiers\": {\n \"ACCOUNT_FOR_INTEREST()\": \"19877557\",\n \"FRAX()\": \"b0e4556f\",\n \"assetOf(bytes)\": \"e170a9bf\",\n \"assetsUsed(bytes)\": \"aeffddde\",\n \"balanceOf(bytes)\": \"78415365\",\n \"borrowFromFraxlend(address,uint256)\": \"1586ffbb\",\n \"callAddInterest(address)\": \"6dd659fd\",\n \"deposit(uint256,bytes,bytes)\": \"69445c31\",\n \"identifier()\": \"7998a1c4\",\n \"isDebt()\": \"89353a09\",\n \"minimumHealthFactor()\": \"1caff8b1\",\n \"repayFraxlendDebt(address,uint256)\": \"8b9b9d40\",\n \"revokeApproval(address,address)\": \"d3bfe76a\",\n \"slippage()\": \"3e032a3b\",\n \"withdraw(uint256,address,bytes,bytes)\": \"c9111bd7\",\n \"withdrawableFrom(bytes,bytes)\": \"fa50e5d2\"\n },\n \"rawMetadata\": \"{\\\"compiler\\\":{\\\"version\\\":\\\"0.8.21+commit.d9974bed\\\"},\\\"language\\\":\\\"Solidity\\\",\\\"output\\\":{\\\"abi\\\":[{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"_accountForInterest\\\",\\\"type\\\":\\\"bool\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"_frax\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_healthFactor\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"constructor\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__ConstructorHealthFactorTooLow\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__ExternalReceiverBlocked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"BaseAdaptor__PricingNotSupported\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__Slippage\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__UserDepositsNotAllowed\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"BaseAdaptor__UserWithdrawsNotAllowed\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"fraxlendPair\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DebtFTokenAdaptor__CannotRepayNoDebt\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"fraxlendPair\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"fraxlendPair\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"DebtFTokenAdaptor__HealthFactorTooLow\\\",\\\"type\\\":\\\"error\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"ACCOUNT_FOR_INTEREST\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"FRAX\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"adaptorData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"assetOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ERC20\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"adaptorData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"assetsUsed\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"contract ERC20[]\\\",\\\"name\\\":\\\"assets\\\",\\\"type\\\":\\\"address[]\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"adaptorData\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"balanceOf\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IFToken\\\",\\\"name\\\":\\\"fraxlendPair\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"amountToBorrow\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"borrowFromFraxlend\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IFToken\\\",\\\"name\\\":\\\"_fraxlendPair\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"callAddInterest\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"deposit\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"identifier\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bytes32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"isDebt\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"bool\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bool\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"minimumHealthFactor\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"view\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract IFToken\\\",\\\"name\\\":\\\"_fraxlendPair\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"_debtTokenRepayAmount\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"name\\\":\\\"repayFraxlendDebt\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"contract ERC20\\\",\\\"name\\\":\\\"asset\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"spender\\\",\\\"type\\\":\\\"address\\\"}],\\\"name\\\":\\\"revokeApproval\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"nonpayable\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[],\\\"name\\\":\\\"slippage\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint32\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint32\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"},{\\\"internalType\\\":\\\"address\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"address\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"withdraw\\\",\\\"outputs\\\":[],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"},{\\\"inputs\\\":[{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"},{\\\"internalType\\\":\\\"bytes\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"bytes\\\"}],\\\"name\\\":\\\"withdrawableFrom\\\",\\\"outputs\\\":[{\\\"internalType\\\":\\\"uint256\\\",\\\"name\\\":\\\"\\\",\\\"type\\\":\\\"uint256\\\"}],\\\"stateMutability\\\":\\\"pure\\\",\\\"type\\\":\\\"function\\\"}],\\\"devdoc\\\":{\\\"author\\\":\\\"crispymangoes, 0xEinCodes NOTE: repayAssetWithCollateral() is not allowed from strategist to call in FraxlendCore for cellar.\\\",\\\"kind\\\":\\\"dev\\\",\\\"methods\\\":{\\\"balanceOf(bytes)\\\":{\\\"params\\\":{\\\"adaptorData\\\":\\\"encoded fraxlendPair (fToken) for this position\\\"}},\\\"borrowFromFraxlend(address,uint256)\\\":{\\\"params\\\":{\\\"amountToBorrow\\\":\\\"the amount of `debtTokenToBorrow` to borrow on Fraxlend. NOTE: `borrowAsset` is the same btw v1 and v2 FraxlendPairs\\\",\\\"fraxlendPair\\\":\\\"the Fraxlend Pair to borrow from.\\\"}},\\\"callAddInterest(address)\\\":{\\\"details\\\":\\\"A strategist might want to do this if a Frax Lend pair has not been interacted in a while, and the strategist does not plan on interacting with it during a rebalance.Calling this can increase the share price during the rebalance, so a strategist should consider moving some assets into reserves.\\\",\\\"params\\\":{\\\"_fraxlendPair\\\":\\\"The specified Fraxlend Pair\\\"}},\\\"identifier()\\\":{\\\"details\\\":\\\"Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult.\\\"},\\\"repayFraxlendDebt(address,uint256)\\\":{\\\"details\\\":\\\"Uses `_maxAvailable` helper function, see BaseAdaptor.sol\\\",\\\"params\\\":{\\\"_debtTokenRepayAmount\\\":\\\"the amount of `debtToken` to repay with.\\\",\\\"_fraxlendPair\\\":\\\"the Fraxlend Pair to repay debt from.\\\"}},\\\"revokeApproval(address,address)\\\":{\\\"params\\\":{\\\"asset\\\":\\\"the ERC20 asset to revoke `spender`s approval for\\\",\\\"spender\\\":\\\"the address to revoke approval for\\\"}}},\\\"title\\\":\\\"FraxLend Debt Token Adaptor\\\",\\\"version\\\":1},\\\"userdoc\\\":{\\\"errors\\\":{\\\"BaseAdaptor__ConstructorHealthFactorTooLow()\\\":[{\\\"notice\\\":\\\"Attempted to set a constructor minimum health factor to a value below `MINIMUM_CONSTRUCTOR_HEALTH_FACTOR()`.\\\"}],\\\"BaseAdaptor__ExternalReceiverBlocked()\\\":[{\\\"notice\\\":\\\"Attempted to specify an external receiver during a Cellar `callOnAdaptor` call.\\\"}],\\\"BaseAdaptor__PricingNotSupported(address)\\\":[{\\\"notice\\\":\\\"Attempted swap used unsupported output asset.\\\"}],\\\"BaseAdaptor__Slippage()\\\":[{\\\"notice\\\":\\\"Attempted swap has bad slippage.\\\"}],\\\"BaseAdaptor__UserDepositsNotAllowed()\\\":[{\\\"notice\\\":\\\"Attempted to deposit to a position where user deposits were not allowed.\\\"}],\\\"BaseAdaptor__UserWithdrawsNotAllowed()\\\":[{\\\"notice\\\":\\\"Attempted to withdraw from a position where user withdraws were not allowed.\\\"}],\\\"DebtFTokenAdaptor__CannotRepayNoDebt(address)\\\":[{\\\"notice\\\":\\\"Attempted repayment when no debt position in fraxlendPair for cellar\\\"}],\\\"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked(address)\\\":[{\\\"notice\\\":\\\"Attempted to interact with an fraxlendPair the Cellar is not using.\\\"}],\\\"DebtFTokenAdaptor__HealthFactorTooLow(address)\\\":[{\\\"notice\\\":\\\"Attempted tx that results in unhealthy cellar\\\"}]},\\\"kind\\\":\\\"user\\\",\\\"methods\\\":{\\\"ACCOUNT_FOR_INTEREST()\\\":{\\\"notice\\\":\\\"This bool determines how this adaptor accounts for interest. True: Account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`. False: Do not account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`.\\\"},\\\"FRAX()\\\":{\\\"notice\\\":\\\"The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\\\"},\\\"assetOf(bytes)\\\":{\\\"notice\\\":\\\"Returns `assetContract` from respective fraxlend pair, but this is most likely going to be FRAX.\\\"},\\\"assetsUsed(bytes)\\\":{\\\"notice\\\":\\\"When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup.\\\"},\\\"balanceOf(bytes)\\\":{\\\"notice\\\":\\\"Returns the cellar's balance of the respective Fraxlend debtToken calculated from cellar borrow shares\\\"},\\\"borrowFromFraxlend(address,uint256)\\\":{\\\"notice\\\":\\\"Allows strategists to borrow assets from Fraxlend.`debtTokenToBorrow` must be the debtToken, NOT the underlying ERC20.\\\"},\\\"callAddInterest(address)\\\":{\\\"notice\\\":\\\"Allows a strategist to call `addInterest` on a Frax Pair they are using.\\\"},\\\"deposit(uint256,bytes,bytes)\\\":{\\\"notice\\\":\\\"User deposits are NOT allowed into this position.\\\"},\\\"isDebt()\\\":{\\\"notice\\\":\\\"This adaptor reports values in terms of debt.\\\"},\\\"minimumHealthFactor()\\\":{\\\"notice\\\":\\\"Minimum Health Factor enforced after every borrow.Overwrites strategist set minimums if they are lower.\\\"},\\\"repayFraxlendDebt(address,uint256)\\\":{\\\"notice\\\":\\\"Allows strategists to repay loan debt on Fraxlend Pair. Make sure to call addInterest() beforehand to ensure we are repaying what is required.\\\"},\\\"revokeApproval(address,address)\\\":{\\\"notice\\\":\\\"Allows strategists to zero out an approval for a given `asset`.\\\"},\\\"slippage()\\\":{\\\"notice\\\":\\\"Max possible slippage when making a swap router swap.\\\"},\\\"withdraw(uint256,address,bytes,bytes)\\\":{\\\"notice\\\":\\\"User withdraws are NOT allowed from this position.\\\"},\\\"withdrawableFrom(bytes,bytes)\\\":{\\\"notice\\\":\\\"This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom.\\\"}},\\\"notice\\\":\\\"Allows Cellars to borrow assets from FraxLend pairs.\\\",\\\"version\\\":1}},\\\"settings\\\":{\\\"compilationTarget\\\":{\\\"src/modules/adaptors/Frax/DebtFTokenAdaptor.sol\\\":\\\"DebtFTokenAdaptor\\\"},\\\"evmVersion\\\":\\\"paris\\\",\\\"libraries\\\":{},\\\"metadata\\\":{\\\"bytecodeHash\\\":\\\"ipfs\\\"},\\\"optimizer\\\":{\\\"enabled\\\":true,\\\"runs\\\":200},\\\"remappings\\\":[\\\":@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/\\\",\\\":@balancer/=lib/balancer-v2-monorepo/pkg/\\\",\\\":@chainlink/=lib/chainlink/\\\",\\\":@ds-test/=lib/forge-std/lib/ds-test/src/\\\",\\\":@forge-std/=lib/forge-std/src/\\\",\\\":@openzeppelin/=lib/openzeppelin-contracts/\\\",\\\":@solmate/=lib/solmate/src/\\\",\\\":@uniswap/v3-core/=lib/v3-core/\\\",\\\":@uniswap/v3-periphery/=lib/v3-periphery/\\\",\\\":@uniswapV3C/=lib/v3-core/contracts/\\\",\\\":@uniswapV3P/=lib/v3-periphery/contracts/\\\",\\\":axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/\\\",\\\":balancer-v2-monorepo/=lib/balancer-v2-monorepo/\\\",\\\":chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\\\",\\\":ds-test/=lib/forge-std/lib/ds-test/src/\\\",\\\":forge-std/=lib/forge-std/src/\\\",\\\":openzeppelin-contracts/=lib/openzeppelin-contracts/\\\",\\\":pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/\\\",\\\":solmate/=lib/solmate/src/\\\",\\\":v3-core/=lib/v3-core/contracts/\\\",\\\":v3-periphery/=lib/v3-periphery/contracts/\\\"]},\\\"sources\\\":{\\\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol\\\":{\\\"keccak256\\\":\\\"0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465\\\",\\\"dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a\\\"]},\\\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol\\\":{\\\"keccak256\\\":\\\"0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b\\\",\\\"dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG\\\"]},\\\"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\\\":{\\\"keccak256\\\":\\\"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\\\",\\\"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\\\"]},\\\"lib/openzeppelin-contracts/contracts/access/Ownable.sol\\\":{\\\"keccak256\\\":\\\"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\\\",\\\"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\\\"]},\\\"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\\\":{\\\"keccak256\\\":\\\"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\\\",\\\"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\\\"]},\\\"lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol\\\":{\\\"keccak256\\\":\\\"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\\\",\\\"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\\\"]},\\\"lib/openzeppelin-contracts/contracts/utils/Address.sol\\\":{\\\"keccak256\\\":\\\"0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de\\\",\\\"dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V\\\"]},\\\"lib/openzeppelin-contracts/contracts/utils/Context.sol\\\":{\\\"keccak256\\\":\\\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\\\",\\\"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\\\"]},\\\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\\\":{\\\"keccak256\\\":\\\"0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929\\\",\\\"dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg\\\"]},\\\"lib/solmate/src/auth/Owned.sol\\\":{\\\"keccak256\\\":\\\"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\\\",\\\"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\\\"]},\\\"lib/solmate/src/mixins/ERC4626.sol\\\":{\\\"keccak256\\\":\\\"0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1\\\",\\\"dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs\\\"]},\\\"lib/solmate/src/tokens/ERC20.sol\\\":{\\\"keccak256\\\":\\\"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\\\",\\\"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\\\"]},\\\"lib/solmate/src/utils/FixedPointMathLib.sol\\\":{\\\"keccak256\\\":\\\"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\\\",\\\"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\\\"]},\\\"lib/solmate/src/utils/SafeTransferLib.sol\\\":{\\\"keccak256\\\":\\\"0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a\\\",\\\"license\\\":\\\"AGPL-3.0-only\\\",\\\"urls\\\":[\\\"bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4\\\",\\\"dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU\\\"]},\\\"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol\\\":{\\\"keccak256\\\":\\\"0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e\\\",\\\"dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\\\":{\\\"keccak256\\\":\\\"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\\\",\\\"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\\\":{\\\"keccak256\\\":\\\"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\\\",\\\"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol\\\":{\\\"keccak256\\\":\\\"0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa\\\",\\\"dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\\\":{\\\"keccak256\\\":\\\"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\\\",\\\"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\\\":{\\\"keccak256\\\":\\\"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\\\",\\\"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\\\":{\\\"keccak256\\\":\\\"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\\\",\\\"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\\\"]},\\\"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\\\":{\\\"keccak256\\\":\\\"0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea\\\",\\\"dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp\\\"]},\\\"lib/v3-core/contracts/libraries/FullMath.sol\\\":{\\\"keccak256\\\":\\\"0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125\\\",\\\"dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd\\\"]},\\\"lib/v3-core/contracts/libraries/TickMath.sol\\\":{\\\"keccak256\\\":\\\"0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c\\\",\\\"dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS\\\"]},\\\"lib/v3-periphery/contracts/libraries/OracleLibrary.sol\\\":{\\\"keccak256\\\":\\\"0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b\\\",\\\"license\\\":\\\"GPL-2.0-or-later\\\",\\\"urls\\\":[\\\"bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53\\\",\\\"dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM\\\"]},\\\"src/Registry.sol\\\":{\\\"keccak256\\\":\\\"0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2\\\",\\\"dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h\\\"]},\\\"src/base/Cellar.sol\\\":{\\\"keccak256\\\":\\\"0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744\\\",\\\"dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q\\\"]},\\\"src/interfaces/external/Frax/IFToken.sol\\\":{\\\"keccak256\\\":\\\"0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd\\\",\\\"license\\\":\\\"MIT\\\",\\\"urls\\\":[\\\"bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1\\\",\\\"dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK\\\"]},\\\"src/interfaces/external/IChainlinkAggregator.sol\\\":{\\\"keccak256\\\":\\\"0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac\\\",\\\"dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u\\\"]},\\\"src/interfaces/external/UniswapV3Pool.sol\\\":{\\\"keccak256\\\":\\\"0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb\\\",\\\"urls\\\":[\\\"bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9\\\",\\\"dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh\\\"]},\\\"src/modules/adaptors/BaseAdaptor.sol\\\":{\\\"keccak256\\\":\\\"0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840\\\",\\\"dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q\\\"]},\\\"src/modules/adaptors/Frax/DebtFTokenAdaptor.sol\\\":{\\\"keccak256\\\":\\\"0xff226895aeaf6739ca55c86c27a1647627e1ec6deedf971c1a3348ad5309c9f0\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://9219e577a024f2804774de2558dfac99a293ba10ee2c8b39cea2c51976508aaa\\\",\\\"dweb:/ipfs/QmZp3GWfRGajaNee5CQWPGBtonXocRCoPVcRqWUP9HpCWk\\\"]},\\\"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\\\":{\\\"keccak256\\\":\\\"0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c\\\",\\\"dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe\\\"]},\\\"src/modules/price-router/Extensions/Extension.sol\\\":{\\\"keccak256\\\":\\\"0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad\\\",\\\"dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4\\\"]},\\\"src/modules/price-router/PriceRouter.sol\\\":{\\\"keccak256\\\":\\\"0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e\\\",\\\"dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1\\\"]},\\\"src/utils/Math.sol\\\":{\\\"keccak256\\\":\\\"0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1\\\",\\\"dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949\\\"]},\\\"src/utils/Uint32Array.sol\\\":{\\\"keccak256\\\":\\\"0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7\\\",\\\"license\\\":\\\"Apache-2.0\\\",\\\"urls\\\":[\\\"bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218\\\",\\\"dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf\\\"]}},\\\"version\\\":1}\",\n \"metadata\": {\n \"compiler\": {\n \"version\": \"0.8.21+commit.d9974bed\"\n },\n \"language\": \"Solidity\",\n \"output\": {\n \"abi\": [\n {\n \"inputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"_accountForInterest\",\n \"type\": \"bool\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"_frax\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_healthFactor\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"constructor\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__ConstructorHealthFactorTooLow\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__ExternalReceiverBlocked\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"asset\",\n \"type\": \"address\"\n }\n ],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__PricingNotSupported\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__Slippage\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__UserDepositsNotAllowed\"\n },\n {\n \"inputs\": [],\n \"type\": \"error\",\n \"name\": \"BaseAdaptor__UserWithdrawsNotAllowed\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"type\": \"error\",\n \"name\": \"DebtFTokenAdaptor__CannotRepayNoDebt\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"type\": \"error\",\n \"name\": \"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"type\": \"error\",\n \"name\": \"DebtFTokenAdaptor__HealthFactorTooLow\"\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"ACCOUNT_FOR_INTEREST\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"FRAX\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"assetOf\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"assetsUsed\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20[]\",\n \"name\": \"assets\",\n \"type\": \"address[]\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"fraxlendPair\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"amountToBorrow\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"borrowFromFraxlend\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"callAddInterest\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"deposit\"\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"identifier\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ]\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"isDebt\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ]\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"view\",\n \"type\": \"function\",\n \"name\": \"minimumHealthFactor\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract IFToken\",\n \"name\": \"_fraxlendPair\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"_debtTokenRepayAmount\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"repayFraxlendDebt\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"asset\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\",\n \"name\": \"revokeApproval\"\n },\n {\n \"inputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"slippage\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ]\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"withdraw\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\",\n \"name\": \"withdrawableFrom\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ]\n }\n ],\n \"devdoc\": {\n \"kind\": \"dev\",\n \"methods\": {\n \"balanceOf(bytes)\": {\n \"params\": {\n \"adaptorData\": \"encoded fraxlendPair (fToken) for this position\"\n }\n },\n \"borrowFromFraxlend(address,uint256)\": {\n \"params\": {\n \"amountToBorrow\": \"the amount of `debtTokenToBorrow` to borrow on Fraxlend. NOTE: `borrowAsset` is the same btw v1 and v2 FraxlendPairs\",\n \"fraxlendPair\": \"the Fraxlend Pair to borrow from.\"\n }\n },\n \"callAddInterest(address)\": {\n \"details\": \"A strategist might want to do this if a Frax Lend pair has not been interacted in a while, and the strategist does not plan on interacting with it during a rebalance.Calling this can increase the share price during the rebalance, so a strategist should consider moving some assets into reserves.\",\n \"params\": {\n \"_fraxlendPair\": \"The specified Fraxlend Pair\"\n }\n },\n \"identifier()\": {\n \"details\": \"Identifier unique to this adaptor for a shared registry. Normally the identifier would just be the address of this contract, but this Identifier is needed during Cellar Delegate Call Operations, so getting the address of the adaptor is more difficult.\"\n },\n \"repayFraxlendDebt(address,uint256)\": {\n \"details\": \"Uses `_maxAvailable` helper function, see BaseAdaptor.sol\",\n \"params\": {\n \"_debtTokenRepayAmount\": \"the amount of `debtToken` to repay with.\",\n \"_fraxlendPair\": \"the Fraxlend Pair to repay debt from.\"\n }\n },\n \"revokeApproval(address,address)\": {\n \"params\": {\n \"asset\": \"the ERC20 asset to revoke `spender`s approval for\",\n \"spender\": \"the address to revoke approval for\"\n }\n }\n },\n \"version\": 1\n },\n \"userdoc\": {\n \"kind\": \"user\",\n \"methods\": {\n \"ACCOUNT_FOR_INTEREST()\": {\n \"notice\": \"This bool determines how this adaptor accounts for interest. True: Account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`. False: Do not account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`.\"\n },\n \"FRAX()\": {\n \"notice\": \"The FRAX contract on current network.For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\"\n },\n \"assetOf(bytes)\": {\n \"notice\": \"Returns `assetContract` from respective fraxlend pair, but this is most likely going to be FRAX.\"\n },\n \"assetsUsed(bytes)\": {\n \"notice\": \"When positions are added to the Registry, this function can be used in order to figure out what assets this adaptor needs to price, and confirm pricing is properly setup.\"\n },\n \"balanceOf(bytes)\": {\n \"notice\": \"Returns the cellar's balance of the respective Fraxlend debtToken calculated from cellar borrow shares\"\n },\n \"borrowFromFraxlend(address,uint256)\": {\n \"notice\": \"Allows strategists to borrow assets from Fraxlend.`debtTokenToBorrow` must be the debtToken, NOT the underlying ERC20.\"\n },\n \"callAddInterest(address)\": {\n \"notice\": \"Allows a strategist to call `addInterest` on a Frax Pair they are using.\"\n },\n \"deposit(uint256,bytes,bytes)\": {\n \"notice\": \"User deposits are NOT allowed into this position.\"\n },\n \"isDebt()\": {\n \"notice\": \"This adaptor reports values in terms of debt.\"\n },\n \"minimumHealthFactor()\": {\n \"notice\": \"Minimum Health Factor enforced after every borrow.Overwrites strategist set minimums if they are lower.\"\n },\n \"repayFraxlendDebt(address,uint256)\": {\n \"notice\": \"Allows strategists to repay loan debt on Fraxlend Pair. Make sure to call addInterest() beforehand to ensure we are repaying what is required.\"\n },\n \"revokeApproval(address,address)\": {\n \"notice\": \"Allows strategists to zero out an approval for a given `asset`.\"\n },\n \"slippage()\": {\n \"notice\": \"Max possible slippage when making a swap router swap.\"\n },\n \"withdraw(uint256,address,bytes,bytes)\": {\n \"notice\": \"User withdraws are NOT allowed from this position.\"\n },\n \"withdrawableFrom(bytes,bytes)\": {\n \"notice\": \"This position is a debt position, and user withdraws are not allowed so this position must return 0 for withdrawableFrom.\"\n }\n },\n \"version\": 1\n }\n },\n \"settings\": {\n \"remappings\": [\n \"@balancer-labs/=lib/balancer-v2-monorepo/../../node_modules/@balancer-labs/\",\n \"@balancer/=lib/balancer-v2-monorepo/pkg/\",\n \"@chainlink/=lib/chainlink/\",\n \"@ds-test/=lib/forge-std/lib/ds-test/src/\",\n \"@forge-std/=lib/forge-std/src/\",\n \"@openzeppelin/=lib/openzeppelin-contracts/\",\n \"@solmate/=lib/solmate/src/\",\n \"@uniswap/v3-core/=lib/v3-core/\",\n \"@uniswap/v3-periphery/=lib/v3-periphery/\",\n \"@uniswapV3C/=lib/v3-core/contracts/\",\n \"@uniswapV3P/=lib/v3-periphery/contracts/\",\n \"axelar-gmp-sdk-solidity/=lib/axelar-gmp-sdk-solidity/contracts/\",\n \"balancer-v2-monorepo/=lib/balancer-v2-monorepo/\",\n \"chainlink/=lib/chainlink/integration-tests/contracts/ethereum/src/\",\n \"ds-test/=lib/forge-std/lib/ds-test/src/\",\n \"forge-std/=lib/forge-std/src/\",\n \"openzeppelin-contracts/=lib/openzeppelin-contracts/\",\n \"pendle-core-v2-public/=lib/pendle-core-v2-public/contracts/\",\n \"solmate/=lib/solmate/src/\",\n \"v3-core/=lib/v3-core/contracts/\",\n \"v3-periphery/=lib/v3-periphery/contracts/\"\n ],\n \"optimizer\": {\n \"enabled\": true,\n \"runs\": 200\n },\n \"metadata\": {\n \"bytecodeHash\": \"ipfs\"\n },\n \"compilationTarget\": {\n \"src/modules/adaptors/Frax/DebtFTokenAdaptor.sol\": \"DebtFTokenAdaptor\"\n },\n \"libraries\": {}\n },\n \"sources\": {\n \"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorInterface.sol\": {\n \"keccak256\": \"0xb496651006b9a2a07920ffe116928b11e2a6458e21361cecca51409522488ca7\",\n \"urls\": [\n \"bzz-raw://f39ad60071af2c115e064ebeb1686097efa83b26da0e2c814c635538538b7465\",\n \"dweb:/ipfs/QmYRARVDA1XZUqZNKNnArYHWbffNeeSVZQjt67ZXKGm85a\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV2V3Interface.sol\": {\n \"keccak256\": \"0x4a7757ff7bbafe044cd49c2a45c7c18ec50eff7c7af6869face5e1e9cda976f2\",\n \"urls\": [\n \"bzz-raw://7c3f481f69f3ee07d6bb91b38d1cd61f9fa72de29c63d778c98956db70ecd57b\",\n \"dweb:/ipfs/QmPeJrNHTZF8CrXk3BgLJCamwf1dUEzHyQsMYrdd4v1NEG\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/chainlink/contracts/src/v0.8/interfaces/AggregatorV3Interface.sol\": {\n \"keccak256\": \"0x6e6e4b0835904509406b070ee173b5bc8f677c19421b76be38aea3b1b3d30846\",\n \"urls\": [\n \"bzz-raw://b3beaa37ee61e4ab615e250fbf01601ae481de843fd0ef55e6b44fd9d5fff8a7\",\n \"dweb:/ipfs/QmeZUVwd26LzK4Mfp8Zba5JbQNkZFfTzFu1A6FVMMZDg9c\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/access/Ownable.sol\": {\n \"keccak256\": \"0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673\",\n \"urls\": [\n \"bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2\",\n \"dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/token/ERC721/IERC721Receiver.sol\": {\n \"keccak256\": \"0xa82b58eca1ee256be466e536706850163d2ec7821945abd6b4778cfb3bee37da\",\n \"urls\": [\n \"bzz-raw://6e75cf83beb757b8855791088546b8337e9d4684e169400c20d44a515353b708\",\n \"dweb:/ipfs/QmYvPafLfoquiDMEj7CKHtvbgHu7TJNPSVPSCjrtjV8HjV\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/token/ERC721/utils/ERC721Holder.sol\": {\n \"keccak256\": \"0x0108bf6a6ebd5f96678bed33a35947537263f96766131ee91461fb6485805028\",\n \"urls\": [\n \"bzz-raw://ae2d274bf3d56a6d49a9bbd0a4871c54997a82551eb3eb1c0c39dc98698ff8bf\",\n \"dweb:/ipfs/QmTT7ty5DPGAmRnx94Xu3TUDYGSPDVLN2bppJAjjedrg1e\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/utils/Address.sol\": {\n \"keccak256\": \"0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700\",\n \"urls\": [\n \"bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de\",\n \"dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/utils/Context.sol\": {\n \"keccak256\": \"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\n \"urls\": [\n \"bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92\",\n \"dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\": {\n \"keccak256\": \"0x182ad835742e188a50bc98b938287d28bf74ad87d01e2bbc1d207c2ba36e1adb\",\n \"urls\": [\n \"bzz-raw://c2ba26b6252bb52b39ffb18b2de027544619e3f71b78e5476eba52becfaae929\",\n \"dweb:/ipfs/Qmb7NqEzs7aWkrzpskxXCRb799XmPenZMDtpzRvNUph1Bg\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/solmate/src/auth/Owned.sol\": {\n \"keccak256\": \"0xfedb27d14c508342c33eb067c9a02eabcdb0f9dcf93b04ded1001f580d12d0ea\",\n \"urls\": [\n \"bzz-raw://1ff52bbee698b9cf9e4574615e6550be0887ccf355f6571e23d6f25b332e79b4\",\n \"dweb:/ipfs/QmVorA2apojVRStzS7h8aFccR3Uv32G6HVtBtFHZrE7YXx\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/mixins/ERC4626.sol\": {\n \"keccak256\": \"0xa404f6f45bd53f24a90cc5ffe95e16b52e3f2dfd88f0d7a1edcb35f815919a7b\",\n \"urls\": [\n \"bzz-raw://9f01e32d713e05cc58c1563e9938a1c5e096b1da9f52c7ea8424f2317b94adc1\",\n \"dweb:/ipfs/QmVt5SsbA3kezM5pyovupN7iZLy6QVqY5qQRZKLFqxKJUs\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/tokens/ERC20.sol\": {\n \"keccak256\": \"0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10\",\n \"urls\": [\n \"bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35\",\n \"dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/utils/FixedPointMathLib.sol\": {\n \"keccak256\": \"0x1b62af9baf5b8e991ed7531bc87f45550ba9d61e8dbff5caf237ccaf3a3fd843\",\n \"urls\": [\n \"bzz-raw://b7b38b977c5305b18ceefbeed4c9ceaaaefa419b520de62de6604ea661f8c0a9\",\n \"dweb:/ipfs/QmecMRzgfMyDVa2pvBqMMDLYBappaj7Aa3qcMoQYEQrhWi\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/solmate/src/utils/SafeTransferLib.sol\": {\n \"keccak256\": \"0xbadf3d708cf532b12f75f78a1d423135954b63774a6d4ba15914a551d348db8a\",\n \"urls\": [\n \"bzz-raw://88ac8256bd520d1b8e6f9c4ac9e8777bffdc4a6c8afb1a848f596665779a55b4\",\n \"dweb:/ipfs/QmXx7X1dxe6f5VM91vgQ5BA4r2eF97GWDcQDrgHytcvfjU\"\n ],\n \"license\": \"AGPL-3.0-only\"\n },\n \"lib/v3-core/contracts/interfaces/IUniswapV3Pool.sol\": {\n \"keccak256\": \"0x4e64844c56061cd90e0a80de73534a9166704c43eed579eb83f90bc2780ce968\",\n \"urls\": [\n \"bzz-raw://cba4fab5cebdddf644b901994a7f0f52b98885d4c56012f4dc51d52c2bf9de0e\",\n \"dweb:/ipfs/QmVyyrRmqXrAiapewWunRVgiPVFJHpH2hKiE1py1svMSNV\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolActions.sol\": {\n \"keccak256\": \"0x9453dd0e7442188667d01d9b65de3f1e14e9511ff3e303179a15f6fc267f7634\",\n \"urls\": [\n \"bzz-raw://982f4328f956c3e60e67501e759eb292ac487f76460c774c50e9ae4fcc92aae5\",\n \"dweb:/ipfs/QmRnzEDsaqtd9PJEVcgQi7p5aV5pMSvRUoGZJAdwFUJxgZ\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolDerivedState.sol\": {\n \"keccak256\": \"0xe603ac5b17ecdee73ba2b27efdf386c257a19c14206e87eee77e2017b742d9e5\",\n \"urls\": [\n \"bzz-raw://8febc9bdb399a4d94bb89f5377732652e2400e4a8dee808201ade6848f9004e7\",\n \"dweb:/ipfs/QmaKDqYYFU4d2W2iN77aDHptfbFmYZRrMYXHeGpJmM8C1c\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolErrors.sol\": {\n \"keccak256\": \"0xf80abf13fb1fafc127ba4e792f240dd8ea7c8c893978cdfd8439c27fae9a037b\",\n \"urls\": [\n \"bzz-raw://b04fc72a656bbf3631e9c2e67b9870a2d9d235185e833fe050e9606e6816a9aa\",\n \"dweb:/ipfs/QmUcz4bkEkJ9pwzFu1C3n97hBQ3st9U6qTAqCdyFwddKco\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolEvents.sol\": {\n \"keccak256\": \"0x8071514d0fe5d17d6fbd31c191cdfb703031c24e0ece3621d88ab10e871375cd\",\n \"urls\": [\n \"bzz-raw://d0b571930cc7488b1d546a7e9cea7c52d8b3c4e207da657ed0e0db7343b8cd03\",\n \"dweb:/ipfs/QmaGK6vVwB95QSTR1XMYvrh7ivYAYZxi3fD7v6VMA4jZ39\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolImmutables.sol\": {\n \"keccak256\": \"0xf6e5d2cd1139c4c276bdbc8e1d2b256e456c866a91f1b868da265c6d2685c3f7\",\n \"urls\": [\n \"bzz-raw://b99c8c9ae8e27ee6559e5866bea82cbc9ffc8247f8d15b7422a4deb287d4d047\",\n \"dweb:/ipfs/QmfL8gaqt3ffAnm6nVj5ksuNpLygXuL3xq5VBqrkwC2JJ3\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolOwnerActions.sol\": {\n \"keccak256\": \"0x759b78a2918af9e99e246dc3af084f654e48ef32bb4e4cb8a966aa3dcaece235\",\n \"urls\": [\n \"bzz-raw://64144fb96e1c7fdba87305acadb98a198d26a3d46c097cb3a666e567f6f29735\",\n \"dweb:/ipfs/QmUnWVwN9FKB9uV5Pr8YfLpWZnYM2DENnRMaadZ492JS9u\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/interfaces/pool/IUniswapV3PoolState.sol\": {\n \"keccak256\": \"0x44fa2ce1182f6c2f6bead3d1737804bf7e112252ae86e0f2e92f9b8249603f43\",\n \"urls\": [\n \"bzz-raw://54154e8665b98d65f5dc91b256551852cb47882180b501b260657122d207c0ea\",\n \"dweb:/ipfs/QmcfemK1A2PXYrWB5SBFGERpMCderbFRb8BtTzQDj1sUBp\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-core/contracts/libraries/FullMath.sol\": {\n \"keccak256\": \"0x7825565a4bb2a34a1dc96bbfead755785dfb0df8ef81bd934c43023689685645\",\n \"urls\": [\n \"bzz-raw://8f44f4614d31e3d4864c7eb13620555253b84f6a69180f8745b7c6e246a9d125\",\n \"dweb:/ipfs/QmfNQUcXj3KL8h9u5PqbtEC6yRtwDbKNb48uMPjdwxsKnd\"\n ],\n \"license\": \"MIT\"\n },\n \"lib/v3-core/contracts/libraries/TickMath.sol\": {\n \"keccak256\": \"0x5c57de03a91cc2ec8939865dbbcb0197bb6c353b711075eefd8e0fca5e102129\",\n \"urls\": [\n \"bzz-raw://1e994c24fd891ef8a3f5dbf5eba42b34feaf05e0376a29f91322faa18054449c\",\n \"dweb:/ipfs/QmNdUJGUQxd1dPkMbnA5f5UNqakxRkQE5r7bTZJAuHeapS\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"lib/v3-periphery/contracts/libraries/OracleLibrary.sol\": {\n \"keccak256\": \"0xe313f89c69c0f1c91f0722868313b4ceb14479b3e7a0abf52a1b9bbd9c18e81b\",\n \"urls\": [\n \"bzz-raw://8ad09b061f3f533c116618c20cf01510108eebebb7ff8847b0f245b8ba368d53\",\n \"dweb:/ipfs/QmU6vdi5JjJfjK2KqonWvRg9NeuQWarj4B1YFN22Dh9VJM\"\n ],\n \"license\": \"GPL-2.0-or-later\"\n },\n \"src/Registry.sol\": {\n \"keccak256\": \"0x2f5f6d61ffc1c9336c628a2cff52b424377feb20c3390f37418fbef1c8995edd\",\n \"urls\": [\n \"bzz-raw://1eabb4a5f6bc4ea2c407f3a70efefae52ebe43a5c200cbf828d0e0a3ed676af2\",\n \"dweb:/ipfs/QmT6nEdMQx6WzTj8x8ZLayH6hpK5NyXSb97vu2juQ4kS4h\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/base/Cellar.sol\": {\n \"keccak256\": \"0xc5c29f881503e070d2ccc098a7a46d9b03dd47144ae213cc086add626fda9d1a\",\n \"urls\": [\n \"bzz-raw://5cf3ddc46f4ac3fe22ad9b1a54e2da8f7c7080d17d9bab1f0483eb0e425c4744\",\n \"dweb:/ipfs/QmNRfJvUqSkzSUX5KjiFygjr8sKHkVvERTy7W9LZ9DNc6q\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/interfaces/external/Frax/IFToken.sol\": {\n \"keccak256\": \"0xb71f1b560b5de3a0f5c4ea6cf248073fc641bfcdf84101fd2b69371d469b95fd\",\n \"urls\": [\n \"bzz-raw://c365f9fb9c915e6bb1a85729faf707c17b78c40d2ca46bbe7e2175837b6138f1\",\n \"dweb:/ipfs/QmTQqbhSvrgyK2GwweMn86GFTvqPmoeJzuA971j1BxgxPK\"\n ],\n \"license\": \"MIT\"\n },\n \"src/interfaces/external/IChainlinkAggregator.sol\": {\n \"keccak256\": \"0x6cabe293cd867cfd1b4e5c378f08aac66951cbdfacbd37627c2fe5c02661808f\",\n \"urls\": [\n \"bzz-raw://87b4e658a11189c690571f456a47fc644ff15926bdf634c66d05a1f711bea3ac\",\n \"dweb:/ipfs/QmUDdZ8YxHEt3dTk1vWmNVDQFRp3kEqhwUUZEnRS8Sqb3u\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/interfaces/external/UniswapV3Pool.sol\": {\n \"keccak256\": \"0xf6a71bfbc0665b1d0aad7148b685f3b2254e1be2a3672c2c6671b7fc20db26bb\",\n \"urls\": [\n \"bzz-raw://393871fdf75656c49a3bb83bc8110a93af2cbd805df9cc6574a058f3cbf100a9\",\n \"dweb:/ipfs/QmZugnPctGBiWkFjXXtiKy3AQTWphA9tjZmSBVZRMg9urh\"\n ],\n \"license\": null\n },\n \"src/modules/adaptors/BaseAdaptor.sol\": {\n \"keccak256\": \"0x1b4922623253dd0e1fba8dab5122e6f42929f3816beee83ff5f1d89a1db122dc\",\n \"urls\": [\n \"bzz-raw://8cd0c28afe2fc51c8b5fec2f3a97e80bda5fd0417b3edf3a23abcfac558a6840\",\n \"dweb:/ipfs/QmbgKgVGjJTakWsDa8JBsUuvTAFPVzZnG1ivUfkpLv9N2Q\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/adaptors/Frax/DebtFTokenAdaptor.sol\": {\n \"keccak256\": \"0xff226895aeaf6739ca55c86c27a1647627e1ec6deedf971c1a3348ad5309c9f0\",\n \"urls\": [\n \"bzz-raw://9219e577a024f2804774de2558dfac99a293ba10ee2c8b39cea2c51976508aaa\",\n \"dweb:/ipfs/QmZp3GWfRGajaNee5CQWPGBtonXocRCoPVcRqWUP9HpCWk\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\": {\n \"keccak256\": \"0xa8b01b483c5f25380926e14f748aaae0f45e6c3b406a34572c3c372e331295d0\",\n \"urls\": [\n \"bzz-raw://88961c581b4bfd0196e705bce9477f7485d5903cda5864f9e89a89204b6dc80c\",\n \"dweb:/ipfs/QmfRe24DvEGV2Y5ehasiWDpFqsnN1LYN4d7eMSN5eePAxe\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/price-router/Extensions/Extension.sol\": {\n \"keccak256\": \"0x974e612d503d25b2a0c2e424dd9743ba605a3b3660bd69cafbeb143dabdb3101\",\n \"urls\": [\n \"bzz-raw://bf97ce81e995cd034dd814ae1a04832a4864b22d0372c07ecc31779643d9e3ad\",\n \"dweb:/ipfs/Qmauuf11TpCS2rZ7SU4iexnkuSBPJWmyF6nisSXseTqPF4\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/modules/price-router/PriceRouter.sol\": {\n \"keccak256\": \"0x6e2e31227c601a10289dbbe7ae7a96adebcf3a62065b9b9d9edbcb4f57cc79dd\",\n \"urls\": [\n \"bzz-raw://25b1132fee46f95204107215d5d82eb1ffc0ceebfd360ac9495d43451861510e\",\n \"dweb:/ipfs/QmWsY9usC61zsdAzafPEvmrv44vUMyCtzAtEESr3ioDTN1\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/utils/Math.sol\": {\n \"keccak256\": \"0x8cc188510f9657ad17e7903cfeded703dd36901ef39069dd6019ffb7e9cfb8bc\",\n \"urls\": [\n \"bzz-raw://d1a66351eb53f333f62652f62c754f4c23ad76c98093e39265d06b84aef165c1\",\n \"dweb:/ipfs/QmZNqeAaVwAvZosvKdwUFvnjHsYUcJDwDfDupEZ8uKx949\"\n ],\n \"license\": \"Apache-2.0\"\n },\n \"src/utils/Uint32Array.sol\": {\n \"keccak256\": \"0xd887a816c5b1b66163cab06aa453e0a44e734e2d90484018d0b602ed2f42adb7\",\n \"urls\": [\n \"bzz-raw://99cfce0b643a810adfa861893a485e786f76be344a3c6c9348a0791f9f225218\",\n \"dweb:/ipfs/QmPWf4GbBe6xqUuZJFLYp5Gwv9KTVc3h5phYEb4BMh7fxf\"\n ],\n \"license\": \"Apache-2.0\"\n }\n },\n \"version\": 1\n },\n \"ast\": {\n \"absolutePath\": \"src/modules/adaptors/Frax/DebtFTokenAdaptor.sol\",\n \"id\": 79448,\n \"exportedSymbols\": {\n \"BaseAdaptor\": [\n 77495\n ],\n \"Cellar\": [\n 61030\n ],\n \"DebtFTokenAdaptor\": [\n 79447\n ],\n \"ERC20\": [\n 51130\n ],\n \"FraxlendHealthFactorLogic\": [\n 80549\n ],\n \"IFToken\": [\n 66209\n ],\n \"Math\": [\n 92983\n ],\n \"PriceRouter\": [\n 89874\n ],\n \"SafeTransferLib\": [\n 51551\n ]\n },\n \"nodeType\": \"SourceUnit\",\n \"src\": \"39:14148:193\",\n \"nodes\": [\n {\n \"id\": 78917,\n \"nodeType\": \"PragmaDirective\",\n \"src\": \"39:23:193\",\n \"nodes\": [],\n \"literals\": [\n \"solidity\",\n \"0.8\",\n \".21\"\n ]\n },\n {\n \"id\": 78924,\n \"nodeType\": \"ImportDirective\",\n \"src\": \"64:118:193\",\n \"nodes\": [],\n \"absolutePath\": \"src/modules/adaptors/BaseAdaptor.sol\",\n \"file\": \"src/modules/adaptors/BaseAdaptor.sol\",\n \"nameLocation\": \"-1:-1:-1\",\n \"scope\": 79448,\n \"sourceUnit\": 77496,\n \"symbolAliases\": [\n {\n \"foreign\": {\n \"id\": 78918,\n \"name\": \"BaseAdaptor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77495,\n \"src\": \"73:11:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78919,\n \"name\": \"ERC20\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51130,\n \"src\": \"86:5:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78920,\n \"name\": \"SafeTransferLib\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51551,\n \"src\": \"93:15:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78921,\n \"name\": \"Cellar\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 61030,\n \"src\": \"110:6:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78922,\n \"name\": \"PriceRouter\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 89874,\n \"src\": \"118:11:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n },\n {\n \"foreign\": {\n \"id\": 78923,\n \"name\": \"Math\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 92983,\n \"src\": \"131:4:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n }\n ],\n \"unitAlias\": \"\"\n },\n {\n \"id\": 78926,\n \"nodeType\": \"ImportDirective\",\n \"src\": \"183:67:193\",\n \"nodes\": [],\n \"absolutePath\": \"src/interfaces/external/Frax/IFToken.sol\",\n \"file\": \"src/interfaces/external/Frax/IFToken.sol\",\n \"nameLocation\": \"-1:-1:-1\",\n \"scope\": 79448,\n \"sourceUnit\": 66210,\n \"symbolAliases\": [\n {\n \"foreign\": {\n \"id\": 78925,\n \"name\": \"IFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 66209,\n \"src\": \"192:7:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n }\n ],\n \"unitAlias\": \"\"\n },\n {\n \"id\": 78928,\n \"nodeType\": \"ImportDirective\",\n \"src\": \"251:100:193\",\n \"nodes\": [],\n \"absolutePath\": \"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\",\n \"file\": \"src/modules/adaptors/Frax/FraxlendHealthFactorLogic.sol\",\n \"nameLocation\": \"-1:-1:-1\",\n \"scope\": 79448,\n \"sourceUnit\": 80550,\n \"symbolAliases\": [\n {\n \"foreign\": {\n \"id\": 78927,\n \"name\": \"FraxlendHealthFactorLogic\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80549,\n \"src\": \"260:25:193\",\n \"typeDescriptions\": {}\n },\n \"nameLocation\": \"-1:-1:-1\"\n }\n ],\n \"unitAlias\": \"\"\n },\n {\n \"id\": 79447,\n \"nodeType\": \"ContractDefinition\",\n \"src\": \"603:13583:193\",\n \"nodes\": [\n {\n \"id\": 78937,\n \"nodeType\": \"UsingForDirective\",\n \"src\": \"678:32:193\",\n \"nodes\": [],\n \"global\": false,\n \"libraryName\": {\n \"id\": 78934,\n \"name\": \"SafeTransferLib\",\n \"nameLocations\": [\n \"684:15:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51551,\n \"src\": \"684:15:193\"\n },\n \"typeName\": {\n \"id\": 78936,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78935,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"704:5:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"704:5:193\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"704:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n }\n },\n {\n \"id\": 78940,\n \"nodeType\": \"UsingForDirective\",\n \"src\": \"715:23:193\",\n \"nodes\": [],\n \"global\": false,\n \"libraryName\": {\n \"id\": 78938,\n \"name\": \"Math\",\n \"nameLocations\": [\n \"721:4:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 92983,\n \"src\": \"721:4:193\"\n },\n \"typeName\": {\n \"id\": 78939,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"730:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n },\n {\n \"id\": 78945,\n \"nodeType\": \"ErrorDefinition\",\n \"src\": \"1851:82:193\",\n \"nodes\": [],\n \"documentation\": {\n \"id\": 78941,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1752:94:193\",\n \"text\": \" @notice Attempted to interact with an fraxlendPair the Cellar is not using.\"\n },\n \"errorSelector\": \"fad081de\",\n \"name\": \"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\n \"nameLocation\": \"1857:53:193\",\n \"parameters\": {\n \"id\": 78944,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78943,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"1919:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78945,\n \"src\": \"1911:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78942,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"1911:7:193\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"1910:22:193\"\n }\n },\n {\n \"id\": 78950,\n \"nodeType\": \"ErrorDefinition\",\n \"src\": \"2016:66:193\",\n \"nodes\": [],\n \"documentation\": {\n \"id\": 78946,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"1939:72:193\",\n \"text\": \" @notice Attempted tx that results in unhealthy cellar\"\n },\n \"errorSelector\": \"c4bbf5fd\",\n \"name\": \"DebtFTokenAdaptor__HealthFactorTooLow\",\n \"nameLocation\": \"2022:37:193\",\n \"parameters\": {\n \"id\": 78949,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78948,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"2068:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78950,\n \"src\": \"2060:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78947,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2060:7:193\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2059:22:193\"\n }\n },\n {\n \"id\": 78955,\n \"nodeType\": \"ErrorDefinition\",\n \"src\": \"2188:65:193\",\n \"nodes\": [],\n \"documentation\": {\n \"id\": 78951,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2088:95:193\",\n \"text\": \" @notice Attempted repayment when no debt position in fraxlendPair for cellar\"\n },\n \"errorSelector\": \"78d1784d\",\n \"name\": \"DebtFTokenAdaptor__CannotRepayNoDebt\",\n \"nameLocation\": \"2194:36:193\",\n \"parameters\": {\n \"id\": 78954,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78953,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"2239:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78955,\n \"src\": \"2231:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78952,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2231:7:193\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"2230:22:193\"\n }\n },\n {\n \"id\": 78959,\n \"nodeType\": \"VariableDeclaration\",\n \"src\": \"2403:27:193\",\n \"nodes\": [],\n \"constant\": false,\n \"documentation\": {\n \"id\": 78956,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2259:139:193\",\n \"text\": \" @notice The FRAX contract on current network.\\n @notice For mainnet use 0x853d955aCEf822Db058eb8505911ED77F175b99e.\"\n },\n \"functionSelector\": \"b0e4556f\",\n \"mutability\": \"immutable\",\n \"name\": \"FRAX\",\n \"nameLocation\": \"2426:4:193\",\n \"scope\": 79447,\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 78958,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 78957,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"2403:5:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"2403:5:193\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"2403:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"id\": 78962,\n \"nodeType\": \"VariableDeclaration\",\n \"src\": \"2755:42:193\",\n \"nodes\": [],\n \"constant\": false,\n \"documentation\": {\n \"id\": 78960,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2437:313:193\",\n \"text\": \" @notice This bool determines how this adaptor accounts for interest.\\n True: Account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`.\\n False: Do not account for pending interest to be paid when calling `balanceOf` or `withdrawableFrom`.\"\n },\n \"functionSelector\": \"19877557\",\n \"mutability\": \"immutable\",\n \"name\": \"ACCOUNT_FOR_INTEREST\",\n \"nameLocation\": \"2777:20:193\",\n \"scope\": 79447,\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"typeName\": {\n \"id\": 78961,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2755:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"id\": 78965,\n \"nodeType\": \"VariableDeclaration\",\n \"src\": \"2955:44:193\",\n \"nodes\": [],\n \"constant\": false,\n \"documentation\": {\n \"id\": 78963,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"2804:146:193\",\n \"text\": \" @notice Minimum Health Factor enforced after every borrow.\\n @notice Overwrites strategist set minimums if they are lower.\"\n },\n \"functionSelector\": \"1caff8b1\",\n \"mutability\": \"immutable\",\n \"name\": \"minimumHealthFactor\",\n \"nameLocation\": \"2980:19:193\",\n \"scope\": 79447,\n \"stateVariable\": true,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78964,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"2955:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"public\"\n },\n {\n \"id\": 78993,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"3006:271:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 78992,\n \"nodeType\": \"Block\",\n \"src\": \"3082:195:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 78975,\n \"name\": \"_healthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78971,\n \"src\": \"3130:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 78974,\n \"name\": \"_verifyConstructorMinimumHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77477,\n \"src\": \"3092:37:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_pure$_t_uint256_$returns$__$\",\n \"typeString\": \"function (uint256) pure\"\n }\n },\n \"id\": 78976,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3092:52:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 78977,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3092:52:193\"\n },\n {\n \"expression\": {\n \"id\": 78980,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 78978,\n \"name\": \"ACCOUNT_FOR_INTEREST\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78962,\n \"src\": \"3154:20:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 78979,\n \"name\": \"_accountForInterest\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78967,\n \"src\": \"3177:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"src\": \"3154:42:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 78981,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3154:42:193\"\n },\n {\n \"expression\": {\n \"id\": 78986,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 78982,\n \"name\": \"FRAX\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78959,\n \"src\": \"3206:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"arguments\": [\n {\n \"id\": 78984,\n \"name\": \"_frax\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78969,\n \"src\": \"3219:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 78983,\n \"name\": \"ERC20\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51130,\n \"src\": \"3213:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"type(contract ERC20)\"\n }\n },\n \"id\": 78985,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3213:12:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"src\": \"3206:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"id\": 78987,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3206:19:193\"\n },\n {\n \"expression\": {\n \"id\": 78990,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 78988,\n \"name\": \"minimumHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78965,\n \"src\": \"3235:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 78989,\n \"name\": \"_healthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78971,\n \"src\": \"3257:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"3235:35:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"id\": 78991,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"3235:35:193\"\n }\n ]\n },\n \"implemented\": true,\n \"kind\": \"constructor\",\n \"modifiers\": [],\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"parameters\": {\n \"id\": 78972,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78967,\n \"mutability\": \"mutable\",\n \"name\": \"_accountForInterest\",\n \"nameLocation\": \"3023:19:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78993,\n \"src\": \"3018:24:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"typeName\": {\n \"id\": 78966,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3018:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78969,\n \"mutability\": \"mutable\",\n \"name\": \"_frax\",\n \"nameLocation\": \"3052:5:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78993,\n \"src\": \"3044:13:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 78968,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3044:7:193\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 78971,\n \"mutability\": \"mutable\",\n \"name\": \"_healthFactor\",\n \"nameLocation\": \"3067:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 78993,\n \"src\": \"3059:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 78970,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3059:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3017:64:193\"\n },\n \"returnParameters\": {\n \"id\": 78973,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"3082:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79008,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"3696:152:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79007,\n \"nodeType\": \"Block\",\n \"src\": \"3765:83:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"hexValue\": \"467261784c656e642064656274546f6b656e56322041646170746f72205620312e30\",\n \"id\": 79003,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"string\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"3803:36:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_stringliteral_0f3e468a1a8b575cd99aff8dfccab77eda19232cac2573088dbda63e0636c2e1\",\n \"typeString\": \"literal_string \\\"FraxLend debtTokenV2 Adaptor V 1.0\\\"\"\n },\n \"value\": \"FraxLend debtTokenV2 Adaptor V 1.0\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_stringliteral_0f3e468a1a8b575cd99aff8dfccab77eda19232cac2573088dbda63e0636c2e1\",\n \"typeString\": \"literal_string \\\"FraxLend debtTokenV2 Adaptor V 1.0\\\"\"\n }\n ],\n \"expression\": {\n \"id\": 79001,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"3792:3:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 79002,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"3796:6:193\",\n \"memberName\": \"encode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"3792:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\n \"typeString\": \"function () pure returns (bytes memory)\"\n }\n },\n \"id\": 79004,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3792:48:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n ],\n \"id\": 79000,\n \"name\": \"keccak256\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -8,\n \"src\": \"3782:9:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n }\n },\n \"id\": 79005,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"3782:59:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"functionReturnParameters\": 78999,\n \"id\": 79006,\n \"nodeType\": \"Return\",\n \"src\": \"3775:66:193\"\n }\n ]\n },\n \"baseFunctions\": [\n 77261\n ],\n \"documentation\": {\n \"id\": 78994,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3395:296:193\",\n \"text\": \" @dev Identifier unique to this adaptor for a shared registry.\\n Normally the identifier would just be the address of this contract, but this\\n Identifier is needed during Cellar Delegate Call Operations, so getting the address\\n of the adaptor is more difficult.\"\n },\n \"functionSelector\": \"7998a1c4\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"identifier\",\n \"nameLocation\": \"3705:10:193\",\n \"overrides\": {\n \"id\": 78996,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"3738:8:193\"\n },\n \"parameters\": {\n \"id\": 78995,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"3715:2:193\"\n },\n \"returnParameters\": {\n \"id\": 78999,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 78998,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79008,\n \"src\": \"3756:7:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n },\n \"typeName\": {\n \"id\": 78997,\n \"name\": \"bytes32\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"3756:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"3755:9:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"pure\",\n \"virtual\": true,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79023,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"4056:136:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79022,\n \"nodeType\": \"Block\",\n \"src\": \"4131:61:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"errorCall\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"id\": 79019,\n \"name\": \"BaseAdaptor__UserDepositsNotAllowed\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77233,\n \"src\": \"4148:35:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 79020,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"4148:37:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79021,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"4141:44:193\"\n }\n ]\n },\n \"baseFunctions\": [\n 77305\n ],\n \"documentation\": {\n \"id\": 79009,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"3975:76:193\",\n \"text\": \" @notice User deposits are NOT allowed into this position.\"\n },\n \"functionSelector\": \"69445c31\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"deposit\",\n \"nameLocation\": \"4065:7:193\",\n \"overrides\": {\n \"id\": 79017,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"4122:8:193\"\n },\n \"parameters\": {\n \"id\": 79016,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79011,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79023,\n \"src\": \"4073:7:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79010,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4073:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79013,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79023,\n \"src\": \"4082:12:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79012,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4082:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79015,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79023,\n \"src\": \"4096:12:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79014,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4096:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4072:37:193\"\n },\n \"returnParameters\": {\n \"id\": 79018,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"4131:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"pure\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79040,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"4280:147:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79039,\n \"nodeType\": \"Block\",\n \"src\": \"4365:62:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"errorCall\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"id\": 79036,\n \"name\": \"BaseAdaptor__UserWithdrawsNotAllowed\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77236,\n \"src\": \"4382:36:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 79037,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"4382:38:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79038,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"4375:45:193\"\n }\n ]\n },\n \"baseFunctions\": [\n 77317\n ],\n \"documentation\": {\n \"id\": 79024,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"4198:77:193\",\n \"text\": \" @notice User withdraws are NOT allowed from this position.\"\n },\n \"functionSelector\": \"c9111bd7\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"withdraw\",\n \"nameLocation\": \"4289:8:193\",\n \"overrides\": {\n \"id\": 79034,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"4356:8:193\"\n },\n \"parameters\": {\n \"id\": 79033,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79026,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79040,\n \"src\": \"4298:7:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79025,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4298:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79028,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79040,\n \"src\": \"4307:7:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 79027,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4307:7:193\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79030,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79040,\n \"src\": \"4316:12:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79029,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4316:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79032,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79040,\n \"src\": \"4330:12:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79031,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4330:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4297:46:193\"\n },\n \"returnParameters\": {\n \"id\": 79035,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"4365:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"pure\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79054,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"4601:118:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79053,\n \"nodeType\": \"Block\",\n \"src\": \"4694:25:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"hexValue\": \"30\",\n \"id\": 79051,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"4711:1:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"functionReturnParameters\": 79050,\n \"id\": 79052,\n \"nodeType\": \"Return\",\n \"src\": \"4704:8:193\"\n }\n ]\n },\n \"baseFunctions\": [\n 77335\n ],\n \"documentation\": {\n \"id\": 79041,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"4433:163:193\",\n \"text\": \" @notice This position is a debt position, and user withdraws are not allowed so\\n this position must return 0 for withdrawableFrom.\"\n },\n \"functionSelector\": \"fa50e5d2\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"withdrawableFrom\",\n \"nameLocation\": \"4610:16:193\",\n \"overrides\": {\n \"id\": 79047,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"4667:8:193\"\n },\n \"parameters\": {\n \"id\": 79046,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79043,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79054,\n \"src\": \"4627:12:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79042,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4627:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79045,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79054,\n \"src\": \"4641:12:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79044,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4641:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4626:28:193\"\n },\n \"returnParameters\": {\n \"id\": 79050,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79049,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79054,\n \"src\": \"4685:7:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79048,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4685:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4684:9:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"pure\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79089,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"4933:323:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79088,\n \"nodeType\": \"Block\",\n \"src\": \"5017:239:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"assignments\": [\n 79065\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79065,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"5035:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79088,\n \"src\": \"5027:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79064,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79063,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"5027:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"5027:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"5027:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79072,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79068,\n \"name\": \"adaptorData\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79057,\n \"src\": \"5061:11:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n {\n \"components\": [\n {\n \"id\": 79069,\n \"name\": \"IFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 66209,\n \"src\": \"5075:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"id\": 79070,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"5074:9:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n },\n {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n ],\n \"expression\": {\n \"id\": 79066,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"5050:3:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 79067,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"5054:6:193\",\n \"memberName\": \"decode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"5050:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abidecode_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 79071,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5050:34:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"5027:57:193\"\n },\n {\n \"assignments\": [\n 79074\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79074,\n \"mutability\": \"mutable\",\n \"name\": \"borrowShares\",\n \"nameLocation\": \"5102:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79088,\n \"src\": \"5094:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79073,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5094:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79080,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79076,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79065,\n \"src\": \"5135:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"expression\": {\n \"id\": 79077,\n \"name\": \"msg\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -15,\n \"src\": \"5149:3:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_message\",\n \"typeString\": \"msg\"\n }\n },\n \"id\": 79078,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"5153:6:193\",\n \"memberName\": \"sender\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"5149:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79075,\n \"name\": \"_userBorrowShares\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80497,\n \"src\": \"5117:17:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$_t_address_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken,address) view returns (uint256)\"\n }\n },\n \"id\": 79079,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5117:43:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"5094:66:193\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79082,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79065,\n \"src\": \"5193:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"id\": 79083,\n \"name\": \"borrowShares\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79074,\n \"src\": \"5207:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"hexValue\": \"66616c7365\",\n \"id\": 79084,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"5221:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"false\"\n },\n {\n \"id\": 79085,\n \"name\": \"ACCOUNT_FOR_INTEREST\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78962,\n \"src\": \"5228:20:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n ],\n \"id\": 79081,\n \"name\": \"_toBorrowAmount\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80480,\n \"src\": \"5177:15:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$_t_bool_$_t_bool_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken,uint256,bool,bool) view returns (uint256)\"\n }\n },\n \"id\": 79086,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5177:72:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"functionReturnParameters\": 79062,\n \"id\": 79087,\n \"nodeType\": \"Return\",\n \"src\": \"5170:79:193\"\n }\n ]\n },\n \"baseFunctions\": [\n 77325\n ],\n \"documentation\": {\n \"id\": 79055,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"4725:203:193\",\n \"text\": \" @notice Returns the cellar's balance of the respective Fraxlend debtToken calculated from cellar borrow shares\\n @param adaptorData encoded fraxlendPair (fToken) for this position\"\n },\n \"functionSelector\": \"78415365\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"balanceOf\",\n \"nameLocation\": \"4942:9:193\",\n \"overrides\": {\n \"id\": 79059,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"4990:8:193\"\n },\n \"parameters\": {\n \"id\": 79058,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79057,\n \"mutability\": \"mutable\",\n \"name\": \"adaptorData\",\n \"nameLocation\": \"4965:11:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79089,\n \"src\": \"4952:24:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79056,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"4952:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"4951:26:193\"\n },\n \"returnParameters\": {\n \"id\": 79062,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79061,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79089,\n \"src\": \"5008:7:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79060,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5008:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"5007:9:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79116,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"5390:210:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79115,\n \"nodeType\": \"Block\",\n \"src\": \"5470:130:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"assignments\": [\n 79101\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79101,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"5488:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79115,\n \"src\": \"5480:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79100,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79099,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"5480:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"5480:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"5480:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79108,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79104,\n \"name\": \"adaptorData\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79092,\n \"src\": \"5514:11:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n },\n {\n \"components\": [\n {\n \"id\": 79105,\n \"name\": \"IFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 66209,\n \"src\": \"5528:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"id\": 79106,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"5527:9:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n },\n {\n \"typeIdentifier\": \"t_type$_t_contract$_IFToken_$66209_$\",\n \"typeString\": \"type(contract IFToken)\"\n }\n ],\n \"expression\": {\n \"id\": 79102,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"5503:3:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 79103,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"5507:6:193\",\n \"memberName\": \"decode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"5503:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abidecode_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 79107,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5503:34:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"5480:57:193\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79111,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79101,\n \"src\": \"5579:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79110,\n \"name\": \"_fraxlendPairAsset\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79351,\n \"src\": \"5560:18:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_address_$\",\n \"typeString\": \"function (contract IFToken) view returns (address)\"\n }\n },\n \"id\": 79112,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5560:32:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79109,\n \"name\": \"ERC20\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51130,\n \"src\": \"5554:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"type(contract ERC20)\"\n }\n },\n \"id\": 79113,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"5554:39:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"functionReturnParameters\": 79098,\n \"id\": 79114,\n \"nodeType\": \"Return\",\n \"src\": \"5547:46:193\"\n }\n ]\n },\n \"baseFunctions\": [\n 77344\n ],\n \"documentation\": {\n \"id\": 79090,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"5262:123:193\",\n \"text\": \" @notice Returns `assetContract` from respective fraxlend pair, but this is most likely going to be FRAX.\"\n },\n \"functionSelector\": \"e170a9bf\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"assetOf\",\n \"nameLocation\": \"5399:7:193\",\n \"overrides\": {\n \"id\": 79094,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"5445:8:193\"\n },\n \"parameters\": {\n \"id\": 79093,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79092,\n \"mutability\": \"mutable\",\n \"name\": \"adaptorData\",\n \"nameLocation\": \"5420:11:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79116,\n \"src\": \"5407:24:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"memory\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes\"\n },\n \"typeName\": {\n \"id\": 79091,\n \"name\": \"bytes\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5407:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_storage_ptr\",\n \"typeString\": \"bytes\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"5406:26:193\"\n },\n \"returnParameters\": {\n \"id\": 79098,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79097,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79116,\n \"src\": \"5463:5:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 79096,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79095,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"5463:5:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"5463:5:193\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"5463:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"5462:7:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79126,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"5683:82:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79125,\n \"nodeType\": \"Block\",\n \"src\": \"5737:28:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"hexValue\": \"74727565\",\n \"id\": 79123,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"5754:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"true\"\n },\n \"functionReturnParameters\": 79122,\n \"id\": 79124,\n \"nodeType\": \"Return\",\n \"src\": \"5747:11:193\"\n }\n ]\n },\n \"baseFunctions\": [\n 77378\n ],\n \"documentation\": {\n \"id\": 79117,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"5606:72:193\",\n \"text\": \" @notice This adaptor reports values in terms of debt.\"\n },\n \"functionSelector\": \"89353a09\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"isDebt\",\n \"nameLocation\": \"5692:6:193\",\n \"overrides\": {\n \"id\": 79119,\n \"nodeType\": \"OverrideSpecifier\",\n \"overrides\": [],\n \"src\": \"5713:8:193\"\n },\n \"parameters\": {\n \"id\": 79118,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"5698:2:193\"\n },\n \"returnParameters\": {\n \"id\": 79122,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79121,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79126,\n \"src\": \"5731:4:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"typeName\": {\n \"id\": 79120,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"5731:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"5730:6:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"pure\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79167,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"6289:560:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79166,\n \"nodeType\": \"Block\",\n \"src\": \"6370:479:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79136,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79130,\n \"src\": \"6396:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79135,\n \"name\": \"_validateFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79337,\n \"src\": \"6380:15:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (contract IFToken) view\"\n }\n },\n \"id\": 79137,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6380:29:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79138,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"6380:29:193\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79140,\n \"name\": \"amountToBorrow\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79132,\n \"src\": \"6432:14:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"id\": 79141,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79130,\n \"src\": \"6448:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79139,\n \"name\": \"_borrowAsset\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79409,\n \"src\": \"6419:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_uint256_$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (uint256,contract IFToken)\"\n }\n },\n \"id\": 79142,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6419:42:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79143,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"6419:42:193\"\n },\n {\n \"assignments\": [\n 79145\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79145,\n \"mutability\": \"mutable\",\n \"name\": \"_exchangeRate\",\n \"nameLocation\": \"6533:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79166,\n \"src\": \"6525:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79144,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"6525:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79149,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79147,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79130,\n \"src\": \"6570:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79146,\n \"name\": \"_getExchangeRateInfo\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79426,\n \"src\": \"6549:20:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken) returns (uint256)\"\n }\n },\n \"id\": 79148,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6549:34:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"6525:58:193\"\n },\n {\n \"condition\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 79156,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 79150,\n \"name\": \"minimumHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78965,\n \"src\": \"6680:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \">\",\n \"rightExpression\": {\n \"components\": [\n {\n \"arguments\": [\n {\n \"id\": 79152,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79130,\n \"src\": \"6720:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"id\": 79153,\n \"name\": \"_exchangeRate\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79145,\n \"src\": \"6734:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 79151,\n \"name\": \"_getHealthFactor\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80457,\n \"src\": \"6703:16:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken,uint256) view returns (uint256)\"\n }\n },\n \"id\": 79154,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6703:45:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"id\": 79155,\n \"isConstant\": false,\n \"isInlineArray\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"TupleExpression\",\n \"src\": \"6702:47:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"6680:69:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 79165,\n \"nodeType\": \"IfStatement\",\n \"src\": \"6676:167:193\",\n \"trueBody\": {\n \"id\": 79164,\n \"nodeType\": \"Block\",\n \"src\": \"6751:92:193\",\n \"statements\": [\n {\n \"errorCall\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79160,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79130,\n \"src\": \"6818:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79159,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"6810:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79158,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"6810:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79161,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6810:21:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79157,\n \"name\": \"DebtFTokenAdaptor__HealthFactorTooLow\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78950,\n \"src\": \"6772:37:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$_t_address_$returns$__$\",\n \"typeString\": \"function (address) pure\"\n }\n },\n \"id\": 79162,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"6772:60:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79163,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"6765:67:193\"\n }\n ]\n }\n }\n ]\n },\n \"documentation\": {\n \"id\": 79127,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"5909:375:193\",\n \"text\": \" @notice Allows strategists to borrow assets from Fraxlend.\\n @notice `debtTokenToBorrow` must be the debtToken, NOT the underlying ERC20.\\n @param fraxlendPair the Fraxlend Pair to borrow from.\\n @param amountToBorrow the amount of `debtTokenToBorrow` to borrow on Fraxlend.\\n NOTE: `borrowAsset` is the same btw v1 and v2 FraxlendPairs\"\n },\n \"functionSelector\": \"1586ffbb\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"borrowFromFraxlend\",\n \"nameLocation\": \"6298:18:193\",\n \"parameters\": {\n \"id\": 79133,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79130,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"6325:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79167,\n \"src\": \"6317:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79129,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79128,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"6317:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"6317:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"6317:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79132,\n \"mutability\": \"mutable\",\n \"name\": \"amountToBorrow\",\n \"nameLocation\": \"6347:14:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79167,\n \"src\": \"6339:22:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79131,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"6339:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"6316:46:193\"\n },\n \"returnParameters\": {\n \"id\": 79134,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"6370:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79263,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"7262:1157:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79262,\n \"nodeType\": \"Block\",\n \"src\": \"7350:1069:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79177,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"7376:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79176,\n \"name\": \"_validateFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79337,\n \"src\": \"7360:15:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (contract IFToken) view\"\n }\n },\n \"id\": 79178,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7360:30:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79179,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"7360:30:193\"\n },\n {\n \"assignments\": [\n 79182\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79182,\n \"mutability\": \"mutable\",\n \"name\": \"tokenToRepay\",\n \"nameLocation\": \"7406:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79262,\n \"src\": \"7400:18:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n \"typeName\": {\n \"id\": 79181,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79180,\n \"name\": \"ERC20\",\n \"nameLocations\": [\n \"7400:5:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 51130,\n \"src\": \"7400:5:193\"\n },\n \"referencedDeclaration\": 51130,\n \"src\": \"7400:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79188,\n \"initialValue\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79185,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"7446:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79184,\n \"name\": \"_fraxlendPairAsset\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79351,\n \"src\": \"7427:18:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$_t_address_$\",\n \"typeString\": \"function (contract IFToken) view returns (address)\"\n }\n },\n \"id\": 79186,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7427:33:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79183,\n \"name\": \"ERC20\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 51130,\n \"src\": \"7421:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"type(contract ERC20)\"\n }\n },\n \"id\": 79187,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7421:40:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"7400:61:193\"\n },\n {\n \"assignments\": [\n 79190\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79190,\n \"mutability\": \"mutable\",\n \"name\": \"debtTokenToRepay\",\n \"nameLocation\": \"7479:16:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79262,\n \"src\": \"7471:24:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79189,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7471:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79195,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79192,\n \"name\": \"tokenToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79182,\n \"src\": \"7512:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n {\n \"id\": 79193,\n \"name\": \"_debtTokenRepayAmount\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79173,\n \"src\": \"7526:21:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 79191,\n \"name\": \"_maxAvailable\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77408,\n \"src\": \"7498:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_ERC20_$51130_$_t_uint256_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract ERC20,uint256) view returns (uint256)\"\n }\n },\n \"id\": 79194,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7498:50:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"7471:77:193\"\n },\n {\n \"assignments\": [\n 79197\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79197,\n \"mutability\": \"mutable\",\n \"name\": \"sharesToRepay\",\n \"nameLocation\": \"7566:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79262,\n \"src\": \"7558:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79196,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7558:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79204,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79199,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"7597:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"id\": 79200,\n \"name\": \"debtTokenToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79190,\n \"src\": \"7612:16:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"hexValue\": \"66616c7365\",\n \"id\": 79201,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"7630:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"false\"\n },\n {\n \"hexValue\": \"74727565\",\n \"id\": 79202,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"7637:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"true\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n ],\n \"id\": 79198,\n \"name\": \"_toAssetShares\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79388,\n \"src\": \"7582:14:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$_t_uint256_$_t_bool_$_t_bool_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken,uint256,bool,bool) view returns (uint256)\"\n }\n },\n \"id\": 79203,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7582:60:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"7558:84:193\"\n },\n {\n \"assignments\": [\n 79206\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79206,\n \"mutability\": \"mutable\",\n \"name\": \"sharesAccToFraxlend\",\n \"nameLocation\": \"7660:19:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79262,\n \"src\": \"7652:27:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79205,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7652:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79214,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79208,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"7700:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"arguments\": [\n {\n \"id\": 79211,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"7723:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n ],\n \"id\": 79210,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"7715:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79209,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7715:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79212,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7715:13:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79207,\n \"name\": \"_userBorrowShares\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 80497,\n \"src\": \"7682:17:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$_t_address_$returns$_t_uint256_$\",\n \"typeString\": \"function (contract IFToken,address) view returns (uint256)\"\n }\n },\n \"id\": 79213,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7682:47:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"7652:77:193\"\n },\n {\n \"condition\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 79217,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 79215,\n \"name\": \"sharesAccToFraxlend\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79206,\n \"src\": \"7792:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"==\",\n \"rightExpression\": {\n \"hexValue\": \"30\",\n \"id\": 79216,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"7815:1:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n \"src\": \"7792:24:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 79225,\n \"nodeType\": \"IfStatement\",\n \"src\": \"7788:97:193\",\n \"trueBody\": {\n \"errorCall\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79221,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"7870:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79220,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"7862:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79219,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7862:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79222,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7862:22:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79218,\n \"name\": \"DebtFTokenAdaptor__CannotRepayNoDebt\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78955,\n \"src\": \"7825:36:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$_t_address_$returns$__$\",\n \"typeString\": \"function (address) pure\"\n }\n },\n \"id\": 79223,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"7825:60:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79224,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"7818:67:193\"\n }\n },\n {\n \"condition\": {\n \"commonType\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"id\": 79228,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftExpression\": {\n \"id\": 79226,\n \"name\": \"sharesAccToFraxlend\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79206,\n \"src\": \"8115:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"BinaryOperation\",\n \"operator\": \"<\",\n \"rightExpression\": {\n \"id\": 79227,\n \"name\": \"sharesToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79197,\n \"src\": \"8137:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"8115:35:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 79234,\n \"nodeType\": \"IfStatement\",\n \"src\": \"8111:101:193\",\n \"trueBody\": {\n \"id\": 79233,\n \"nodeType\": \"Block\",\n \"src\": \"8152:60:193\",\n \"statements\": [\n {\n \"expression\": {\n \"id\": 79231,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 79229,\n \"name\": \"sharesToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79197,\n \"src\": \"8166:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"id\": 79230,\n \"name\": \"sharesAccToFraxlend\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79206,\n \"src\": \"8182:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"8166:35:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"id\": 79232,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"8166:35:193\"\n }\n ]\n }\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79240,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"8254:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79239,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"8246:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79238,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"8246:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79241,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"8246:22:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79244,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"8275:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_uint256_$\",\n \"typeString\": \"type(uint256)\"\n },\n \"typeName\": {\n \"id\": 79243,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"8275:7:193\",\n \"typeDescriptions\": {}\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_type$_t_uint256_$\",\n \"typeString\": \"type(uint256)\"\n }\n ],\n \"id\": 79242,\n \"name\": \"type\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -27,\n \"src\": \"8270:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_metatype_pure$__$returns$__$\",\n \"typeString\": \"function () pure\"\n }\n },\n \"id\": 79245,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"8270:13:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_meta_type_t_uint256\",\n \"typeString\": \"type(uint256)\"\n }\n },\n \"id\": 79246,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"8284:3:193\",\n \"memberName\": \"max\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"8270:17:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"expression\": {\n \"id\": 79235,\n \"name\": \"tokenToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79182,\n \"src\": \"8221:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n \"id\": 79237,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"8234:11:193\",\n \"memberName\": \"safeApprove\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 51550,\n \"src\": \"8221:24:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$_t_uint256_$returns$__$attached_to$_t_contract$_ERC20_$51130_$\",\n \"typeString\": \"function (contract ERC20,address,uint256)\"\n }\n },\n \"id\": 79247,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"8221:67:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79248,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"8221:67:193\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79250,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"8311:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n {\n \"id\": 79251,\n \"name\": \"sharesToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79197,\n \"src\": \"8326:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n ],\n \"id\": 79249,\n \"name\": \"_repayAsset\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79446,\n \"src\": \"8299:11:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$_t_uint256_$returns$__$\",\n \"typeString\": \"function (contract IFToken,uint256)\"\n }\n },\n \"id\": 79252,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"8299:41:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79253,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"8299:41:193\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79255,\n \"name\": \"tokenToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79182,\n \"src\": \"8375:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n }\n },\n {\n \"arguments\": [\n {\n \"id\": 79258,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79171,\n \"src\": \"8397:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79257,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"8389:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79256,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"8389:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79259,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"8389:22:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_ERC20_$51130\",\n \"typeString\": \"contract ERC20\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79254,\n \"name\": \"_revokeExternalApproval\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 77436,\n \"src\": \"8351:23:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_ERC20_$51130_$_t_address_$returns$__$\",\n \"typeString\": \"function (contract ERC20,address)\"\n }\n },\n \"id\": 79260,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"8351:61:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79261,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"8351:61:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79168,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"6875:382:193\",\n \"text\": \" @notice Allows strategists to repay loan debt on Fraxlend Pair. Make sure to call addInterest() beforehand to ensure we are repaying what is required.\\n @dev Uses `_maxAvailable` helper function, see BaseAdaptor.sol\\n @param _fraxlendPair the Fraxlend Pair to repay debt from.\\n @param _debtTokenRepayAmount the amount of `debtToken` to repay with.\"\n },\n \"functionSelector\": \"8b9b9d40\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"repayFraxlendDebt\",\n \"nameLocation\": \"7271:17:193\",\n \"parameters\": {\n \"id\": 79174,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79171,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"7297:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79263,\n \"src\": \"7289:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79170,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79169,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"7289:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"7289:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"7289:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79173,\n \"mutability\": \"mutable\",\n \"name\": \"_debtTokenRepayAmount\",\n \"nameLocation\": \"7320:21:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79263,\n \"src\": \"7312:29:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79172,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"7312:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"7288:54:193\"\n },\n \"returnParameters\": {\n \"id\": 79175,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"7350:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79279,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"8942:139:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79278,\n \"nodeType\": \"Block\",\n \"src\": \"8997:84:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79271,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79267,\n \"src\": \"9023:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79270,\n \"name\": \"_validateFToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79337,\n \"src\": \"9007:15:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_view$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (contract IFToken) view\"\n }\n },\n \"id\": 79272,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9007:30:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79273,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"9007:30:193\"\n },\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79275,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79267,\n \"src\": \"9060:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79274,\n \"name\": \"_addInterest\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79365,\n \"src\": \"9047:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_nonpayable$_t_contract$_IFToken_$66209_$returns$__$\",\n \"typeString\": \"function (contract IFToken)\"\n }\n },\n \"id\": 79276,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9047:27:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79277,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"9047:27:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79264,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"8425:512:193\",\n \"text\": \" @notice Allows a strategist to call `addInterest` on a Frax Pair they are using.\\n @param _fraxlendPair The specified Fraxlend Pair\\n @dev A strategist might want to do this if a Frax Lend pair has not been interacted\\n in a while, and the strategist does not plan on interacting with it during a\\n rebalance.\\n @dev Calling this can increase the share price during the rebalance,\\n so a strategist should consider moving some assets into reserves.\"\n },\n \"functionSelector\": \"6dd659fd\",\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"callAddInterest\",\n \"nameLocation\": \"8951:15:193\",\n \"parameters\": {\n \"id\": 79268,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79267,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"8975:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79279,\n \"src\": \"8967:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79266,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79265,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"8967:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"8967:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"8967:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"8966:23:193\"\n },\n \"returnParameters\": {\n \"id\": 79269,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"8997:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": false,\n \"visibility\": \"public\"\n },\n {\n \"id\": 79337,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"9326:444:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79336,\n \"nodeType\": \"Block\",\n \"src\": \"9388:382:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"assignments\": [\n 79287\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79287,\n \"mutability\": \"mutable\",\n \"name\": \"positionHash\",\n \"nameLocation\": \"9406:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79336,\n \"src\": \"9398:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n },\n \"typeName\": {\n \"id\": 79286,\n \"name\": \"bytes32\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9398:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79303,\n \"initialValue\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"id\": 79291,\n \"name\": \"identifier\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [\n 79008\n ],\n \"referencedDeclaration\": 79008,\n \"src\": \"9442:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_internal_pure$__$returns$_t_bytes32_$\",\n \"typeString\": \"function () pure returns (bytes32)\"\n }\n },\n \"id\": 79292,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9442:12:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n {\n \"hexValue\": \"74727565\",\n \"id\": 79293,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"9456:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"true\"\n },\n {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79298,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79283,\n \"src\": \"9481:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79297,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"9473:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79296,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9473:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79299,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9473:22:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"expression\": {\n \"id\": 79294,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"9462:3:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 79295,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"9466:6:193\",\n \"memberName\": \"encode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"9462:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\n \"typeString\": \"function () pure returns (bytes memory)\"\n }\n },\n \"id\": 79300,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9462:34:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n ],\n \"expression\": {\n \"id\": 79289,\n \"name\": \"abi\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -1,\n \"src\": \"9431:3:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_magic_abi\",\n \"typeString\": \"abi\"\n }\n },\n \"id\": 79290,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"memberLocation\": \"9435:6:193\",\n \"memberName\": \"encode\",\n \"nodeType\": \"MemberAccess\",\n \"src\": \"9431:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_abiencode_pure$__$returns$_t_bytes_memory_ptr_$\",\n \"typeString\": \"function () pure returns (bytes memory)\"\n }\n },\n \"id\": 79301,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9431:66:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes_memory_ptr\",\n \"typeString\": \"bytes memory\"\n }\n ],\n \"id\": 79288,\n \"name\": \"keccak256\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -8,\n \"src\": \"9421:9:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$\",\n \"typeString\": \"function (bytes memory) pure returns (bytes32)\"\n }\n },\n \"id\": 79302,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9421:77:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"9398:100:193\"\n },\n {\n \"assignments\": [\n 79305\n ],\n \"declarations\": [\n {\n \"constant\": false,\n \"id\": 79305,\n \"mutability\": \"mutable\",\n \"name\": \"positionId\",\n \"nameLocation\": \"9515:10:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79336,\n \"src\": \"9508:17:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n },\n \"typeName\": {\n \"id\": 79304,\n \"name\": \"uint32\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9508:6:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"id\": 79317,\n \"initialValue\": {\n \"arguments\": [\n {\n \"id\": 79315,\n \"name\": \"positionHash\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79287,\n \"src\": \"9589:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bytes32\",\n \"typeString\": \"bytes32\"\n }\n ],\n \"expression\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79309,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"9543:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n ],\n \"id\": 79308,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"9535:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79307,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9535:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79310,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9535:13:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79306,\n \"name\": \"Cellar\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 61030,\n \"src\": \"9528:6:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_Cellar_$61030_$\",\n \"typeString\": \"type(contract Cellar)\"\n }\n },\n \"id\": 79311,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9528:21:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_Cellar_$61030\",\n \"typeString\": \"contract Cellar\"\n }\n },\n \"id\": 79312,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"9550:8:193\",\n \"memberName\": \"registry\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 58935,\n \"src\": \"9528:30:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$__$returns$_t_contract$_Registry_$57893_$\",\n \"typeString\": \"function () view external returns (contract Registry)\"\n }\n },\n \"id\": 79313,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9528:32:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_Registry_$57893\",\n \"typeString\": \"contract Registry\"\n }\n },\n \"id\": 79314,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"9561:27:193\",\n \"memberName\": \"getPositionHashToPositionId\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 57601,\n \"src\": \"9528:60:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$_t_bytes32_$returns$_t_uint32_$\",\n \"typeString\": \"function (bytes32) view external returns (uint32)\"\n }\n },\n \"id\": 79316,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9528:74:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n },\n \"nodeType\": \"VariableDeclarationStatement\",\n \"src\": \"9508:94:193\"\n },\n {\n \"condition\": {\n \"id\": 79327,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"nodeType\": \"UnaryOperation\",\n \"operator\": \"!\",\n \"prefix\": true,\n \"src\": \"9616:49:193\",\n \"subExpression\": {\n \"arguments\": [\n {\n \"id\": 79325,\n \"name\": \"positionId\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79305,\n \"src\": \"9654:10:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint32\",\n \"typeString\": \"uint32\"\n }\n ],\n \"expression\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79321,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"9632:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n ],\n \"id\": 79320,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"9624:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79319,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9624:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79322,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9624:13:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79318,\n \"name\": \"Cellar\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 61030,\n \"src\": \"9617:6:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_contract$_Cellar_$61030_$\",\n \"typeString\": \"type(contract Cellar)\"\n }\n },\n \"id\": 79323,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9617:21:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_Cellar_$61030\",\n \"typeString\": \"contract Cellar\"\n }\n },\n \"id\": 79324,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"9639:14:193\",\n \"memberName\": \"isPositionUsed\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 58190,\n \"src\": \"9617:36:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$_t_uint256_$returns$_t_bool_$\",\n \"typeString\": \"function (uint256) view external returns (bool)\"\n }\n },\n \"id\": 79326,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9617:48:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"id\": 79335,\n \"nodeType\": \"IfStatement\",\n \"src\": \"9612:151:193\",\n \"trueBody\": {\n \"errorCall\": {\n \"arguments\": [\n {\n \"arguments\": [\n {\n \"id\": 79331,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79283,\n \"src\": \"9748:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n ],\n \"id\": 79330,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"9740:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79329,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"9740:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79332,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9740:22:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"id\": 79328,\n \"name\": \"DebtFTokenAdaptor__FraxlendPairPositionsMustBeTracked\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 78945,\n \"src\": \"9686:53:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_error_pure$_t_address_$returns$__$\",\n \"typeString\": \"function (address) pure\"\n }\n },\n \"id\": 79333,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"9686:77:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79334,\n \"nodeType\": \"RevertStatement\",\n \"src\": \"9679:84:193\"\n }\n }\n ]\n },\n \"documentation\": {\n \"id\": 79280,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"9087:234:193\",\n \"text\": \" @notice Validates that a given fraxlendPair is set up as a position in the Cellar.\\n @param _fraxlendPair The specified Fraxlend Pair\\n @dev This function uses `address(this)` as the address of the Cellar.\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_validateFToken\",\n \"nameLocation\": \"9335:15:193\",\n \"parameters\": {\n \"id\": 79284,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79283,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"9359:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79337,\n \"src\": \"9351:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79282,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79281,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"9351:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"9351:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"9351:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"9350:23:193\"\n },\n \"returnParameters\": {\n \"id\": 79285,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"9388:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"view\",\n \"virtual\": false,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 79351,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"11570:142:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79350,\n \"nodeType\": \"Block\",\n \"src\": \"11667:45:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"expression\": {\n \"id\": 79346,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79341,\n \"src\": \"11684:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 79347,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"11698:5:193\",\n \"memberName\": \"asset\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66173,\n \"src\": \"11684:19:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$__$returns$_t_address_$\",\n \"typeString\": \"function () view external returns (address)\"\n }\n },\n \"id\": 79348,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"11684:21:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"functionReturnParameters\": 79345,\n \"id\": 79349,\n \"nodeType\": \"Return\",\n \"src\": \"11677:28:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79338,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"11399:166:193\",\n \"text\": \" @notice gets the asset of the specified fraxlend pair\\n @param _fraxlendPair The specified Fraxlend Pair\\n @return asset of fraxlend pair\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_fraxlendPairAsset\",\n \"nameLocation\": \"11579:18:193\",\n \"parameters\": {\n \"id\": 79342,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79341,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"11606:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79351,\n \"src\": \"11598:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79340,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79339,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"11598:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"11598:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"11598:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"11597:23:193\"\n },\n \"returnParameters\": {\n \"id\": 79345,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79344,\n \"mutability\": \"mutable\",\n \"name\": \"asset\",\n \"nameLocation\": \"11660:5:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79351,\n \"src\": \"11652:13:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n },\n \"typeName\": {\n \"id\": 79343,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"11652:7:193\",\n \"stateMutability\": \"nonpayable\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"11651:15:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"view\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 79365,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"11969:109:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79364,\n \"nodeType\": \"Block\",\n \"src\": \"12030:48:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"hexValue\": \"66616c7365\",\n \"id\": 79361,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"bool\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"12065:5:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"value\": \"false\"\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n ],\n \"expression\": {\n \"id\": 79358,\n \"name\": \"fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79355,\n \"src\": \"12040:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 79360,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"12053:11:193\",\n \"memberName\": \"addInterest\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66087,\n \"src\": \"12040:24:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_nonpayable$_t_bool_$returns$_t_uint256_$_t_uint256_$_t_uint256_$_t_struct$_CurrentRateInfo_$66031_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$\",\n \"typeString\": \"function (bool) external returns (uint256,uint256,uint256,struct IFToken.CurrentRateInfo memory,struct IFToken.VaultAccount memory,struct IFToken.VaultAccount memory)\"\n }\n },\n \"id\": 79362,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"12040:31:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$_t_uint256_$_t_uint256_$_t_uint256_$_t_struct$_CurrentRateInfo_$66031_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$_t_struct$_VaultAccount_$66036_memory_ptr_$\",\n \"typeString\": \"tuple(uint256,uint256,uint256,struct IFToken.CurrentRateInfo memory,struct IFToken.VaultAccount memory,struct IFToken.VaultAccount memory)\"\n }\n },\n \"id\": 79363,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"12040:31:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79352,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"11718:246:193\",\n \"text\": \" @notice Caller calls `addInterest` on specified 'v2' Fraxlend Pair\\n @dev fraxlendPair.addInterest() calls into the respective version (v2 by default) of Fraxlend Pair\\n @param fraxlendPair The specified Fraxlend Pair\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_addInterest\",\n \"nameLocation\": \"11978:12:193\",\n \"parameters\": {\n \"id\": 79356,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79355,\n \"mutability\": \"mutable\",\n \"name\": \"fraxlendPair\",\n \"nameLocation\": \"11999:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79365,\n \"src\": \"11991:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79354,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79353,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"11991:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"11991:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"11991:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"11990:22:193\"\n },\n \"returnParameters\": {\n \"id\": 79357,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"12030:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 79388,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"12642:248:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79387,\n \"nodeType\": \"Block\",\n \"src\": \"12812:78:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79382,\n \"name\": \"amount\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79371,\n \"src\": \"12850:6:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"id\": 79383,\n \"name\": \"roundUp\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79373,\n \"src\": \"12858:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n {\n \"id\": 79384,\n \"name\": \"previewInterest\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79375,\n \"src\": \"12867:15:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n ],\n \"expression\": {\n \"id\": 79380,\n \"name\": \"fToken\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79369,\n \"src\": \"12829:6:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 79381,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"12836:13:193\",\n \"memberName\": \"toAssetShares\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66058,\n \"src\": \"12829:20:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$_t_uint256_$_t_bool_$_t_bool_$returns$_t_uint256_$\",\n \"typeString\": \"function (uint256,bool,bool) view external returns (uint256)\"\n }\n },\n \"id\": 79385,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"12829:54:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"functionReturnParameters\": 79379,\n \"id\": 79386,\n \"nodeType\": \"Return\",\n \"src\": \"12822:61:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79366,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"12084:553:193\",\n \"text\": \" @notice Converts a given asset amount to a number of asset shares (fTokens) from specified 'v2' Fraxlend Pair\\n @dev This is one of the adjusted functions from v1 to v2. ftoken.toAssetShares() calls into the respective version (v2 by default) of Fraxlend Pair\\n @param fToken The specified Fraxlend Pair\\n @param amount The amount of asset\\n @param roundUp Whether to round up after division\\n @param previewInterest Whether to preview interest accrual before calculation\\n @return number of asset shares\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_toAssetShares\",\n \"nameLocation\": \"12651:14:193\",\n \"parameters\": {\n \"id\": 79376,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79369,\n \"mutability\": \"mutable\",\n \"name\": \"fToken\",\n \"nameLocation\": \"12683:6:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79388,\n \"src\": \"12675:14:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79368,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79367,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"12675:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"12675:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"12675:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79371,\n \"mutability\": \"mutable\",\n \"name\": \"amount\",\n \"nameLocation\": \"12707:6:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79388,\n \"src\": \"12699:14:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79370,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"12699:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79373,\n \"mutability\": \"mutable\",\n \"name\": \"roundUp\",\n \"nameLocation\": \"12728:7:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79388,\n \"src\": \"12723:12:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"typeName\": {\n \"id\": 79372,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"12723:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79375,\n \"mutability\": \"mutable\",\n \"name\": \"previewInterest\",\n \"nameLocation\": \"12750:15:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79388,\n \"src\": \"12745:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n },\n \"typeName\": {\n \"id\": 79374,\n \"name\": \"bool\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"12745:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_bool\",\n \"typeString\": \"bool\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"12665:106:193\"\n },\n \"returnParameters\": {\n \"id\": 79379,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79378,\n \"mutability\": \"mutable\",\n \"name\": \"\",\n \"nameLocation\": \"-1:-1:-1\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79388,\n \"src\": \"12803:7:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79377,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"12803:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"12802:9:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"view\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 79409,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"13115:312:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79408,\n \"nodeType\": \"Block\",\n \"src\": \"13200:227:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79400,\n \"name\": \"_borrowAmount\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79391,\n \"src\": \"13236:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"hexValue\": \"30\",\n \"id\": 79401,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"kind\": \"number\",\n \"lValueRequested\": false,\n \"nodeType\": \"Literal\",\n \"src\": \"13251:1:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n \"value\": \"0\"\n },\n {\n \"arguments\": [\n {\n \"id\": 79404,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"13262:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n ],\n \"id\": 79403,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"13254:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79402,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"13254:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79405,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"13254:13:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_rational_0_by_1\",\n \"typeString\": \"int_const 0\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"expression\": {\n \"id\": 79397,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79394,\n \"src\": \"13210:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 79399,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"13224:11:193\",\n \"memberName\": \"borrowAsset\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66013,\n \"src\": \"13210:25:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$_t_uint256_$_t_address_$returns$__$\",\n \"typeString\": \"function (uint256,uint256,address) external\"\n }\n },\n \"id\": 79406,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"13210:58:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79407,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"13210:58:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79389,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"12896:214:193\",\n \"text\": \" @notice Borrow amount of borrowAsset in cellar account within fraxlend pair\\n @param _borrowAmount The amount of borrowAsset to borrow\\n @param _fraxlendPair The specified Fraxlend Pair\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_borrowAsset\",\n \"nameLocation\": \"13124:12:193\",\n \"parameters\": {\n \"id\": 79395,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79391,\n \"mutability\": \"mutable\",\n \"name\": \"_borrowAmount\",\n \"nameLocation\": \"13145:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79409,\n \"src\": \"13137:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79390,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"13137:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79394,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"13168:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79409,\n \"src\": \"13160:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79393,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79392,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"13160:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"13160:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"13160:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"13136:46:193\"\n },\n \"returnParameters\": {\n \"id\": 79396,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"13200:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 79426,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"13658:182:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79425,\n \"nodeType\": \"Block\",\n \"src\": \"13759:81:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"id\": 79423,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"leftHandSide\": {\n \"id\": 79418,\n \"name\": \"exchangeRate\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79416,\n \"src\": \"13769:12:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"nodeType\": \"Assignment\",\n \"operator\": \"=\",\n \"rightHandSide\": {\n \"expression\": {\n \"arguments\": [],\n \"expression\": {\n \"argumentTypes\": [],\n \"expression\": {\n \"id\": 79419,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79413,\n \"src\": \"13784:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 79420,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"13798:16:193\",\n \"memberName\": \"exchangeRateInfo\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66208,\n \"src\": \"13784:30:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_view$__$returns$_t_struct$_ExchangeRateInfo_$66202_memory_ptr_$\",\n \"typeString\": \"function () view external returns (struct IFToken.ExchangeRateInfo memory)\"\n }\n },\n \"id\": 79421,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"13784:32:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_struct$_ExchangeRateInfo_$66202_memory_ptr\",\n \"typeString\": \"struct IFToken.ExchangeRateInfo memory\"\n }\n },\n \"id\": 79422,\n \"isConstant\": false,\n \"isLValue\": true,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"13817:16:193\",\n \"memberName\": \"highExchangeRate\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66201,\n \"src\": \"13784:49:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"src\": \"13769:64:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"id\": 79424,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"13769:64:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79410,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"13433:220:193\",\n \"text\": \" @notice Caller calls `updateExchangeRate()` on specified FraxlendV2 Pair\\n @param _fraxlendPair The specified FraxLendPair\\n @return exchangeRate needed to calculate the current health factor\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_getExchangeRateInfo\",\n \"nameLocation\": \"13667:20:193\",\n \"parameters\": {\n \"id\": 79414,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79413,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"13696:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79426,\n \"src\": \"13688:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79412,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79411,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"13688:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"13688:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"13688:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"13687:23:193\"\n },\n \"returnParameters\": {\n \"id\": 79417,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79416,\n \"mutability\": \"mutable\",\n \"name\": \"exchangeRate\",\n \"nameLocation\": \"13745:12:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79426,\n \"src\": \"13737:20:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79415,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"13737:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"13736:22:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n },\n {\n \"id\": 79446,\n \"nodeType\": \"FunctionDefinition\",\n \"src\": \"14029:155:193\",\n \"nodes\": [],\n \"body\": {\n \"id\": 79445,\n \"nodeType\": \"Block\",\n \"src\": \"14113:71:193\",\n \"nodes\": [],\n \"statements\": [\n {\n \"expression\": {\n \"arguments\": [\n {\n \"id\": 79438,\n \"name\": \"sharesToRepay\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79432,\n \"src\": \"14148:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n {\n \"arguments\": [\n {\n \"id\": 79441,\n \"name\": \"this\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": -28,\n \"src\": \"14171:4:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_contract$_DebtFTokenAdaptor_$79447\",\n \"typeString\": \"contract DebtFTokenAdaptor\"\n }\n ],\n \"id\": 79440,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": true,\n \"lValueRequested\": false,\n \"nodeType\": \"ElementaryTypeNameExpression\",\n \"src\": \"14163:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_type$_t_address_$\",\n \"typeString\": \"type(address)\"\n },\n \"typeName\": {\n \"id\": 79439,\n \"name\": \"address\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"14163:7:193\",\n \"typeDescriptions\": {}\n }\n },\n \"id\": 79442,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"typeConversion\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"14163:13:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n }\n ],\n \"expression\": {\n \"argumentTypes\": [\n {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n {\n \"typeIdentifier\": \"t_address\",\n \"typeString\": \"address\"\n }\n ],\n \"expression\": {\n \"id\": 79435,\n \"name\": \"_fraxlendPair\",\n \"nodeType\": \"Identifier\",\n \"overloadedDeclarations\": [],\n \"referencedDeclaration\": 79430,\n \"src\": \"14123:13:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"id\": 79437,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"lValueRequested\": false,\n \"memberLocation\": \"14137:10:193\",\n \"memberName\": \"repayAsset\",\n \"nodeType\": \"MemberAccess\",\n \"referencedDeclaration\": 66020,\n \"src\": \"14123:24:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_function_external_nonpayable$_t_uint256_$_t_address_$returns$__$\",\n \"typeString\": \"function (uint256,address) external\"\n }\n },\n \"id\": 79443,\n \"isConstant\": false,\n \"isLValue\": false,\n \"isPure\": false,\n \"kind\": \"functionCall\",\n \"lValueRequested\": false,\n \"nameLocations\": [],\n \"names\": [],\n \"nodeType\": \"FunctionCall\",\n \"src\": \"14123:54:193\",\n \"tryCall\": false,\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_tuple$__$\",\n \"typeString\": \"tuple()\"\n }\n },\n \"id\": 79444,\n \"nodeType\": \"ExpressionStatement\",\n \"src\": \"14123:54:193\"\n }\n ]\n },\n \"documentation\": {\n \"id\": 79427,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"13846:178:193\",\n \"text\": \" @notice Repay fraxlend pair debt by an amount\\n @param _fraxlendPair The specified Fraxlend Pair\\n @param sharesToRepay The amount of shares to repay\"\n },\n \"implemented\": true,\n \"kind\": \"function\",\n \"modifiers\": [],\n \"name\": \"_repayAsset\",\n \"nameLocation\": \"14038:11:193\",\n \"parameters\": {\n \"id\": 79433,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [\n {\n \"constant\": false,\n \"id\": 79430,\n \"mutability\": \"mutable\",\n \"name\": \"_fraxlendPair\",\n \"nameLocation\": \"14058:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79446,\n \"src\": \"14050:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n },\n \"typeName\": {\n \"id\": 79429,\n \"nodeType\": \"UserDefinedTypeName\",\n \"pathNode\": {\n \"id\": 79428,\n \"name\": \"IFToken\",\n \"nameLocations\": [\n \"14050:7:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 66209,\n \"src\": \"14050:7:193\"\n },\n \"referencedDeclaration\": 66209,\n \"src\": \"14050:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_contract$_IFToken_$66209\",\n \"typeString\": \"contract IFToken\"\n }\n },\n \"visibility\": \"internal\"\n },\n {\n \"constant\": false,\n \"id\": 79432,\n \"mutability\": \"mutable\",\n \"name\": \"sharesToRepay\",\n \"nameLocation\": \"14081:13:193\",\n \"nodeType\": \"VariableDeclaration\",\n \"scope\": 79446,\n \"src\": \"14073:21:193\",\n \"stateVariable\": false,\n \"storageLocation\": \"default\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n },\n \"typeName\": {\n \"id\": 79431,\n \"name\": \"uint256\",\n \"nodeType\": \"ElementaryTypeName\",\n \"src\": \"14073:7:193\",\n \"typeDescriptions\": {\n \"typeIdentifier\": \"t_uint256\",\n \"typeString\": \"uint256\"\n }\n },\n \"visibility\": \"internal\"\n }\n ],\n \"src\": \"14049:46:193\"\n },\n \"returnParameters\": {\n \"id\": 79434,\n \"nodeType\": \"ParameterList\",\n \"parameters\": [],\n \"src\": \"14113:0:193\"\n },\n \"scope\": 79447,\n \"stateMutability\": \"nonpayable\",\n \"virtual\": true,\n \"visibility\": \"internal\"\n }\n ],\n \"abstract\": false,\n \"baseContracts\": [\n {\n \"baseName\": {\n \"id\": 78930,\n \"name\": \"BaseAdaptor\",\n \"nameLocations\": [\n \"633:11:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 77495,\n \"src\": \"633:11:193\"\n },\n \"id\": 78931,\n \"nodeType\": \"InheritanceSpecifier\",\n \"src\": \"633:11:193\"\n },\n {\n \"baseName\": {\n \"id\": 78932,\n \"name\": \"FraxlendHealthFactorLogic\",\n \"nameLocations\": [\n \"646:25:193\"\n ],\n \"nodeType\": \"IdentifierPath\",\n \"referencedDeclaration\": 80549,\n \"src\": \"646:25:193\"\n },\n \"id\": 78933,\n \"nodeType\": \"InheritanceSpecifier\",\n \"src\": \"646:25:193\"\n }\n ],\n \"canonicalName\": \"DebtFTokenAdaptor\",\n \"contractDependencies\": [],\n \"contractKind\": \"contract\",\n \"documentation\": {\n \"id\": 78929,\n \"nodeType\": \"StructuredDocumentation\",\n \"src\": \"353:249:193\",\n \"text\": \" @title FraxLend Debt Token Adaptor\\n @notice Allows Cellars to borrow assets from FraxLend pairs.\\n @author crispymangoes, 0xEinCodes\\n NOTE: repayAssetWithCollateral() is not allowed from strategist to call in FraxlendCore for cellar.\"\n },\n \"fullyImplemented\": true,\n \"linearizedBaseContracts\": [\n 79447,\n 80549,\n 77495\n ],\n \"name\": \"DebtFTokenAdaptor\",\n \"nameLocation\": \"612:17:193\",\n \"scope\": 79448,\n \"usedErrors\": [\n 77230,\n 77233,\n 77236,\n 77239,\n 77244,\n 77247,\n 78945,\n 78950,\n 78955\n ],\n \"usedEvents\": []\n }\n ],\n \"license\": \"Apache-2.0\"\n },\n \"id\": 193\n}") . expect ("invalid abi") + }); + #[derive(Clone)] + pub struct DebtFTokenAdaptorV1(ethers::contract::Contract); + impl std::ops::Deref for DebtFTokenAdaptorV1 { + type Target = ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl std::fmt::Debug for DebtFTokenAdaptorV1 { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_tuple(stringify!(DebtFTokenAdaptorV1)) + .field(&self.address()) + .finish() + } + } + impl<'a, M: ethers::providers::Middleware> DebtFTokenAdaptorV1 { + #[doc = r" Creates a new contract instance with the specified `ethers`"] + #[doc = r" client at the given `Address`. The contract derefs to a `ethers::Contract`"] + #[doc = r" object"] + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + let contract = ethers::contract::Contract::new( + address.into(), + DEBTFTOKENADAPTORV1_ABI.clone(), + client, + ); + Self(contract) + } + #[doc = "Calls the contract's `ACCOUNT_FOR_INTEREST` (0x19877557) function"] + pub fn account_for_interest(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([25, 135, 117, 87], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `FRAX` (0xb0e4556f) function"] + pub fn frax( + &self, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([176, 228, 85, 111], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `assetOf` (0xe170a9bf) function"] + pub fn asset_of( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 112, 169, 191], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `assetsUsed` (0xaeffddde) function"] + pub fn assets_used( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall< + M, + ::std::vec::Vec, + > { + self.0 + .method_hash([174, 255, 221, 222], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `balanceOf` (0x78415365) function"] + pub fn balance_of( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([120, 65, 83, 101], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `borrowFromFraxlend` (0x1586ffbb) function"] + pub fn borrow_from_fraxlend( + &self, + fraxlend_pair: ethers::core::types::Address, + amount_to_borrow: ethers::core::types::U256, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([21, 134, 255, 187], (fraxlend_pair, amount_to_borrow)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `callAddInterest` (0x6dd659fd) function"] + pub fn call_add_interest( + &self, + fraxlend_pair: ethers::core::types::Address, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([109, 214, 89, 253], fraxlend_pair) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `deposit` (0x69445c31) function"] + pub fn deposit( + &self, + p0: ethers::core::types::U256, + p1: ethers::core::types::Bytes, + p2: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([105, 68, 92, 49], (p0, p1, p2)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `identifier` (0x7998a1c4) function"] + pub fn identifier(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 152, 161, 196], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `isDebt` (0x89353a09) function"] + pub fn is_debt(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([137, 53, 58, 9], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `minimumHealthFactor` (0x1caff8b1) function"] + pub fn minimum_health_factor( + &self, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([28, 175, 248, 177], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `repayFraxlendDebt` (0x8b9b9d40) function"] + pub fn repay_fraxlend_debt( + &self, + fraxlend_pair: ethers::core::types::Address, + debt_token_repay_amount: ethers::core::types::U256, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash( + [139, 155, 157, 64], + (fraxlend_pair, debt_token_repay_amount), + ) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `revokeApproval` (0xd3bfe76a) function"] + pub fn revoke_approval( + &self, + asset: ethers::core::types::Address, + spender: ethers::core::types::Address, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([211, 191, 231, 106], (asset, spender)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `slippage` (0x3e032a3b) function"] + pub fn slippage(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([62, 3, 42, 59], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `withdraw` (0xc9111bd7) function"] + pub fn withdraw( + &self, + p0: ethers::core::types::U256, + p1: ethers::core::types::Address, + p2: ethers::core::types::Bytes, + p3: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 17, 27, 215], (p0, p1, p2, p3)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `withdrawableFrom` (0xfa50e5d2) function"] + pub fn withdrawable_from( + &self, + p0: ethers::core::types::Bytes, + p1: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([250, 80, 229, 210], (p0, p1)) + .expect("method not found (this should never happen)") + } + } + #[doc = "Container type for all input parameters for the `ACCOUNT_FOR_INTEREST`function with signature `ACCOUNT_FOR_INTEREST()` and selector `[25, 135, 117, 87]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "ACCOUNT_FOR_INTEREST", abi = "ACCOUNT_FOR_INTEREST()")] + pub struct AccountForInterestCall; + #[doc = "Container type for all input parameters for the `FRAX`function with signature `FRAX()` and selector `[176, 228, 85, 111]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "FRAX", abi = "FRAX()")] + pub struct FraxCall; + #[doc = "Container type for all input parameters for the `assetOf`function with signature `assetOf(bytes)` and selector `[225, 112, 169, 191]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "assetOf", abi = "assetOf(bytes)")] + pub struct AssetOfCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `assetsUsed`function with signature `assetsUsed(bytes)` and selector `[174, 255, 221, 222]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "assetsUsed", abi = "assetsUsed(bytes)")] + pub struct AssetsUsedCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `balanceOf`function with signature `balanceOf(bytes)` and selector `[120, 65, 83, 101]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(bytes)")] + pub struct BalanceOfCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `borrowFromFraxlend`function with signature `borrowFromFraxlend(address,uint256)` and selector `[21, 134, 255, 187]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall( + name = "borrowFromFraxlend", + abi = "borrowFromFraxlend(address,uint256)" + )] + pub struct BorrowFromFraxlendCall { + pub fraxlend_pair: ethers::core::types::Address, + pub amount_to_borrow: ethers::core::types::U256, + } + #[doc = "Container type for all input parameters for the `callAddInterest`function with signature `callAddInterest(address)` and selector `[109, 214, 89, 253]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "callAddInterest", abi = "callAddInterest(address)")] + pub struct CallAddInterestCall { + pub fraxlend_pair: ethers::core::types::Address, + } + #[doc = "Container type for all input parameters for the `deposit`function with signature `deposit(uint256,bytes,bytes)` and selector `[105, 68, 92, 49]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "deposit", abi = "deposit(uint256,bytes,bytes)")] + pub struct DepositCall( + pub ethers::core::types::U256, + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[doc = "Container type for all input parameters for the `identifier`function with signature `identifier()` and selector `[121, 152, 161, 196]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "identifier", abi = "identifier()")] + pub struct IdentifierCall; + #[doc = "Container type for all input parameters for the `isDebt`function with signature `isDebt()` and selector `[137, 53, 58, 9]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "isDebt", abi = "isDebt()")] + pub struct IsDebtCall; + #[doc = "Container type for all input parameters for the `minimumHealthFactor`function with signature `minimumHealthFactor()` and selector `[28, 175, 248, 177]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "minimumHealthFactor", abi = "minimumHealthFactor()")] + pub struct MinimumHealthFactorCall; + #[doc = "Container type for all input parameters for the `repayFraxlendDebt`function with signature `repayFraxlendDebt(address,uint256)` and selector `[139, 155, 157, 64]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "repayFraxlendDebt", abi = "repayFraxlendDebt(address,uint256)")] + pub struct RepayFraxlendDebtCall { + pub fraxlend_pair: ethers::core::types::Address, + pub debt_token_repay_amount: ethers::core::types::U256, + } + #[doc = "Container type for all input parameters for the `revokeApproval`function with signature `revokeApproval(address,address)` and selector `[211, 191, 231, 106]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "revokeApproval", abi = "revokeApproval(address,address)")] + pub struct RevokeApprovalCall { + pub asset: ethers::core::types::Address, + pub spender: ethers::core::types::Address, + } + #[doc = "Container type for all input parameters for the `slippage`function with signature `slippage()` and selector `[62, 3, 42, 59]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "slippage", abi = "slippage()")] + pub struct SlippageCall; + #[doc = "Container type for all input parameters for the `withdraw`function with signature `withdraw(uint256,address,bytes,bytes)` and selector `[201, 17, 27, 215]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "withdraw", abi = "withdraw(uint256,address,bytes,bytes)")] + pub struct WithdrawCall( + pub ethers::core::types::U256, + pub ethers::core::types::Address, + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[doc = "Container type for all input parameters for the `withdrawableFrom`function with signature `withdrawableFrom(bytes,bytes)` and selector `[250, 80, 229, 210]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "withdrawableFrom", abi = "withdrawableFrom(bytes,bytes)")] + pub struct WithdrawableFromCall( + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[derive(Debug, Clone, PartialEq, Eq, ethers :: contract :: EthAbiType)] + pub enum DebtFTokenAdaptorV1Calls { + AccountForInterest(AccountForInterestCall), + Frax(FraxCall), + AssetOf(AssetOfCall), + AssetsUsed(AssetsUsedCall), + BalanceOf(BalanceOfCall), + BorrowFromFraxlend(BorrowFromFraxlendCall), + CallAddInterest(CallAddInterestCall), + Deposit(DepositCall), + Identifier(IdentifierCall), + IsDebt(IsDebtCall), + MinimumHealthFactor(MinimumHealthFactorCall), + RepayFraxlendDebt(RepayFraxlendDebtCall), + RevokeApproval(RevokeApprovalCall), + Slippage(SlippageCall), + Withdraw(WithdrawCall), + WithdrawableFrom(WithdrawableFromCall), + } + impl ethers::core::abi::AbiDecode for DebtFTokenAdaptorV1Calls { + fn decode(data: impl AsRef<[u8]>) -> Result { + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::AccountForInterest(decoded)); + } + if let Ok(decoded) = ::decode(data.as_ref()) { + return Ok(DebtFTokenAdaptorV1Calls::Frax(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::AssetOf(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::AssetsUsed(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::BalanceOf(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::BorrowFromFraxlend(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::CallAddInterest(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::Deposit(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::Identifier(decoded)); + } + if let Ok(decoded) = ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::IsDebt(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::MinimumHealthFactor(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::RepayFraxlendDebt(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::RevokeApproval(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::Slippage(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::Withdraw(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(DebtFTokenAdaptorV1Calls::WithdrawableFrom(decoded)); + } + Err(ethers::core::abi::Error::InvalidData.into()) + } + } + impl ethers::core::abi::AbiEncode for DebtFTokenAdaptorV1Calls { + fn encode(self) -> Vec { + match self { + DebtFTokenAdaptorV1Calls::AccountForInterest(element) => element.encode(), + DebtFTokenAdaptorV1Calls::Frax(element) => element.encode(), + DebtFTokenAdaptorV1Calls::AssetOf(element) => element.encode(), + DebtFTokenAdaptorV1Calls::AssetsUsed(element) => element.encode(), + DebtFTokenAdaptorV1Calls::BalanceOf(element) => element.encode(), + DebtFTokenAdaptorV1Calls::BorrowFromFraxlend(element) => element.encode(), + DebtFTokenAdaptorV1Calls::CallAddInterest(element) => element.encode(), + DebtFTokenAdaptorV1Calls::Deposit(element) => element.encode(), + DebtFTokenAdaptorV1Calls::Identifier(element) => element.encode(), + DebtFTokenAdaptorV1Calls::IsDebt(element) => element.encode(), + DebtFTokenAdaptorV1Calls::MinimumHealthFactor(element) => element.encode(), + DebtFTokenAdaptorV1Calls::RepayFraxlendDebt(element) => element.encode(), + DebtFTokenAdaptorV1Calls::RevokeApproval(element) => element.encode(), + DebtFTokenAdaptorV1Calls::Slippage(element) => element.encode(), + DebtFTokenAdaptorV1Calls::Withdraw(element) => element.encode(), + DebtFTokenAdaptorV1Calls::WithdrawableFrom(element) => element.encode(), + } + } + } + impl ::std::fmt::Display for DebtFTokenAdaptorV1Calls { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + match self { + DebtFTokenAdaptorV1Calls::AccountForInterest(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::Frax(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::AssetOf(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::AssetsUsed(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::BalanceOf(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::BorrowFromFraxlend(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::CallAddInterest(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::Deposit(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::Identifier(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::IsDebt(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::MinimumHealthFactor(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::RepayFraxlendDebt(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::RevokeApproval(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::Slippage(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::Withdraw(element) => element.fmt(f), + DebtFTokenAdaptorV1Calls::WithdrawableFrom(element) => element.fmt(f), + } + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: AccountForInterestCall) -> Self { + DebtFTokenAdaptorV1Calls::AccountForInterest(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: FraxCall) -> Self { + DebtFTokenAdaptorV1Calls::Frax(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: AssetOfCall) -> Self { + DebtFTokenAdaptorV1Calls::AssetOf(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: AssetsUsedCall) -> Self { + DebtFTokenAdaptorV1Calls::AssetsUsed(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: BalanceOfCall) -> Self { + DebtFTokenAdaptorV1Calls::BalanceOf(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: BorrowFromFraxlendCall) -> Self { + DebtFTokenAdaptorV1Calls::BorrowFromFraxlend(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: CallAddInterestCall) -> Self { + DebtFTokenAdaptorV1Calls::CallAddInterest(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: DepositCall) -> Self { + DebtFTokenAdaptorV1Calls::Deposit(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: IdentifierCall) -> Self { + DebtFTokenAdaptorV1Calls::Identifier(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: IsDebtCall) -> Self { + DebtFTokenAdaptorV1Calls::IsDebt(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: MinimumHealthFactorCall) -> Self { + DebtFTokenAdaptorV1Calls::MinimumHealthFactor(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: RepayFraxlendDebtCall) -> Self { + DebtFTokenAdaptorV1Calls::RepayFraxlendDebt(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: RevokeApprovalCall) -> Self { + DebtFTokenAdaptorV1Calls::RevokeApproval(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: SlippageCall) -> Self { + DebtFTokenAdaptorV1Calls::Slippage(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: WithdrawCall) -> Self { + DebtFTokenAdaptorV1Calls::Withdraw(var) + } + } + impl ::std::convert::From for DebtFTokenAdaptorV1Calls { + fn from(var: WithdrawableFromCall) -> Self { + DebtFTokenAdaptorV1Calls::WithdrawableFrom(var) + } + } +} diff --git a/steward_abi/src/legacy_cellar_adaptor_v1.rs b/steward_abi/src/legacy_cellar_adaptor_v1.rs new file mode 100644 index 00000000..303d3a87 --- /dev/null +++ b/steward_abi/src/legacy_cellar_adaptor_v1.rs @@ -0,0 +1,545 @@ +pub use legacycellaradaptorv1_mod::*; +#[allow(clippy::too_many_arguments)] +mod legacycellaradaptorv1_mod { + #![allow(clippy::enum_variant_names)] + #![allow(dead_code)] + #![allow(clippy::type_complexity)] + #![allow(unused_imports)] + use ethers::contract::{ + builders::{ContractCall, Event}, + Contract, Lazy, + }; + use ethers::core::{ + abi::{Abi, Detokenize, InvalidOutputType, Token, Tokenizable}, + types::*, + }; + use ethers::providers::Middleware; + #[doc = "LegacyCellarAdaptorV1 was auto-generated with ethers-rs Abigen. More information at: https://github.com/gakonst/ethers-rs"] + use std::sync::Arc; + pub static LEGACYCELLARADAPTORV1_ABI: ethers::contract::Lazy = + ethers::contract::Lazy::new(|| { + serde_json :: from_str ("[\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__ConstructorHealthFactorTooLow\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__ExternalReceiverBlocked\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"asset\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"BaseAdaptor__PricingNotSupported\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__Slippage\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__UserDepositsNotAllowed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [],\n \"name\": \"BaseAdaptor__UserWithdrawsNotAllowed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"address\",\n \"name\": \"cellar\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"LegacyCellarAdaptor__CellarPositionNotUsed\",\n \"type\": \"error\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"assetOf\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"\",\n \"type\": \"address\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"assetsUsed\",\n \"outputs\": [\n {\n \"internalType\": \"contract ERC20[]\",\n \"name\": \"assets\",\n \"type\": \"address[]\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"adaptorData\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"balanceOf\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"deposit\",\n \"outputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Cellar\",\n \"name\": \"cellar\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"assets\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"oracle\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"depositToCellar\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"identifier\",\n \"outputs\": [\n {\n \"internalType\": \"bytes32\",\n \"name\": \"\",\n \"type\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"isDebt\",\n \"outputs\": [\n {\n \"internalType\": \"bool\",\n \"name\": \"\",\n \"type\": \"bool\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract ERC20\",\n \"name\": \"asset\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"spender\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"revokeApproval\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [],\n \"name\": \"slippage\",\n \"outputs\": [\n {\n \"internalType\": \"uint32\",\n \"name\": \"\",\n \"type\": \"uint32\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"withdraw\",\n \"outputs\": [],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"contract Cellar\",\n \"name\": \"cellar\",\n \"type\": \"address\"\n },\n {\n \"internalType\": \"uint256\",\n \"name\": \"assets\",\n \"type\": \"uint256\"\n },\n {\n \"internalType\": \"address\",\n \"name\": \"oracle\",\n \"type\": \"address\"\n }\n ],\n \"name\": \"withdrawFromCellar\",\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\",\n \"type\": \"function\"\n },\n {\n \"inputs\": [\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n },\n {\n \"internalType\": \"bytes\",\n \"name\": \"\",\n \"type\": \"bytes\"\n }\n ],\n \"name\": \"withdrawableFrom\",\n \"outputs\": [\n {\n \"internalType\": \"uint256\",\n \"name\": \"\",\n \"type\": \"uint256\"\n }\n ],\n \"stateMutability\": \"pure\",\n \"type\": \"function\"\n }\n]\n") . expect ("invalid abi") + }); + #[derive(Clone)] + pub struct LegacyCellarAdaptorV1(ethers::contract::Contract); + impl std::ops::Deref for LegacyCellarAdaptorV1 { + type Target = ethers::contract::Contract; + fn deref(&self) -> &Self::Target { + &self.0 + } + } + impl std::fmt::Debug for LegacyCellarAdaptorV1 { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + f.debug_tuple(stringify!(LegacyCellarAdaptorV1)) + .field(&self.address()) + .finish() + } + } + impl<'a, M: ethers::providers::Middleware> LegacyCellarAdaptorV1 { + #[doc = r" Creates a new contract instance with the specified `ethers`"] + #[doc = r" client at the given `Address`. The contract derefs to a `ethers::Contract`"] + #[doc = r" object"] + pub fn new>( + address: T, + client: ::std::sync::Arc, + ) -> Self { + let contract = ethers::contract::Contract::new( + address.into(), + LEGACYCELLARADAPTORV1_ABI.clone(), + client, + ); + Self(contract) + } + #[doc = "Calls the contract's `assetOf` (0xe170a9bf) function"] + pub fn asset_of( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([225, 112, 169, 191], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `assetsUsed` (0xaeffddde) function"] + pub fn assets_used( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall< + M, + ::std::vec::Vec, + > { + self.0 + .method_hash([174, 255, 221, 222], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `balanceOf` (0x78415365) function"] + pub fn balance_of( + &self, + adaptor_data: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([120, 65, 83, 101], adaptor_data) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `deposit` (0x69445c31) function"] + pub fn deposit( + &self, + p0: ethers::core::types::U256, + p1: ethers::core::types::Bytes, + p2: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([105, 68, 92, 49], (p0, p1, p2)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `depositToCellar` (0x5e4e5dcd) function"] + pub fn deposit_to_cellar( + &self, + cellar: ethers::core::types::Address, + assets: ethers::core::types::U256, + oracle: ethers::core::types::Address, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([94, 78, 93, 205], (cellar, assets, oracle)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `identifier` (0x7998a1c4) function"] + pub fn identifier(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([121, 152, 161, 196], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `isDebt` (0x89353a09) function"] + pub fn is_debt(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([137, 53, 58, 9], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `revokeApproval` (0xd3bfe76a) function"] + pub fn revoke_approval( + &self, + asset: ethers::core::types::Address, + spender: ethers::core::types::Address, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([211, 191, 231, 106], (asset, spender)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `slippage` (0x3e032a3b) function"] + pub fn slippage(&self) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([62, 3, 42, 59], ()) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `withdraw` (0xc9111bd7) function"] + pub fn withdraw( + &self, + p0: ethers::core::types::U256, + p1: ethers::core::types::Address, + p2: ethers::core::types::Bytes, + p3: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([201, 17, 27, 215], (p0, p1, p2, p3)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `withdrawFromCellar` (0x0f8e350d) function"] + pub fn withdraw_from_cellar( + &self, + cellar: ethers::core::types::Address, + assets: ethers::core::types::U256, + oracle: ethers::core::types::Address, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([15, 142, 53, 13], (cellar, assets, oracle)) + .expect("method not found (this should never happen)") + } + #[doc = "Calls the contract's `withdrawableFrom` (0xfa50e5d2) function"] + pub fn withdrawable_from( + &self, + p0: ethers::core::types::Bytes, + p1: ethers::core::types::Bytes, + ) -> ethers::contract::builders::ContractCall { + self.0 + .method_hash([250, 80, 229, 210], (p0, p1)) + .expect("method not found (this should never happen)") + } + } + #[doc = "Container type for all input parameters for the `assetOf`function with signature `assetOf(bytes)` and selector `[225, 112, 169, 191]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "assetOf", abi = "assetOf(bytes)")] + pub struct AssetOfCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `assetsUsed`function with signature `assetsUsed(bytes)` and selector `[174, 255, 221, 222]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "assetsUsed", abi = "assetsUsed(bytes)")] + pub struct AssetsUsedCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `balanceOf`function with signature `balanceOf(bytes)` and selector `[120, 65, 83, 101]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "balanceOf", abi = "balanceOf(bytes)")] + pub struct BalanceOfCall { + pub adaptor_data: ethers::core::types::Bytes, + } + #[doc = "Container type for all input parameters for the `deposit`function with signature `deposit(uint256,bytes,bytes)` and selector `[105, 68, 92, 49]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "deposit", abi = "deposit(uint256,bytes,bytes)")] + pub struct DepositCall( + pub ethers::core::types::U256, + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[doc = "Container type for all input parameters for the `depositToCellar`function with signature `depositToCellar(address,uint256,address)` and selector `[94, 78, 93, 205]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall( + name = "depositToCellar", + abi = "depositToCellar(address,uint256,address)" + )] + pub struct DepositToCellarCall { + pub cellar: ethers::core::types::Address, + pub assets: ethers::core::types::U256, + pub oracle: ethers::core::types::Address, + } + #[doc = "Container type for all input parameters for the `identifier`function with signature `identifier()` and selector `[121, 152, 161, 196]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "identifier", abi = "identifier()")] + pub struct IdentifierCall; + #[doc = "Container type for all input parameters for the `isDebt`function with signature `isDebt()` and selector `[137, 53, 58, 9]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "isDebt", abi = "isDebt()")] + pub struct IsDebtCall; + #[doc = "Container type for all input parameters for the `revokeApproval`function with signature `revokeApproval(address,address)` and selector `[211, 191, 231, 106]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "revokeApproval", abi = "revokeApproval(address,address)")] + pub struct RevokeApprovalCall { + pub asset: ethers::core::types::Address, + pub spender: ethers::core::types::Address, + } + #[doc = "Container type for all input parameters for the `slippage`function with signature `slippage()` and selector `[62, 3, 42, 59]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "slippage", abi = "slippage()")] + pub struct SlippageCall; + #[doc = "Container type for all input parameters for the `withdraw`function with signature `withdraw(uint256,address,bytes,bytes)` and selector `[201, 17, 27, 215]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "withdraw", abi = "withdraw(uint256,address,bytes,bytes)")] + pub struct WithdrawCall( + pub ethers::core::types::U256, + pub ethers::core::types::Address, + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[doc = "Container type for all input parameters for the `withdrawFromCellar`function with signature `withdrawFromCellar(address,uint256,address)` and selector `[15, 142, 53, 13]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall( + name = "withdrawFromCellar", + abi = "withdrawFromCellar(address,uint256,address)" + )] + pub struct WithdrawFromCellarCall { + pub cellar: ethers::core::types::Address, + pub assets: ethers::core::types::U256, + pub oracle: ethers::core::types::Address, + } + #[doc = "Container type for all input parameters for the `withdrawableFrom`function with signature `withdrawableFrom(bytes,bytes)` and selector `[250, 80, 229, 210]`"] + #[derive( + Clone, + Debug, + Default, + Eq, + PartialEq, + ethers :: contract :: EthCall, + ethers :: contract :: EthDisplay, + serde :: Deserialize, + serde :: Serialize, + )] + #[ethcall(name = "withdrawableFrom", abi = "withdrawableFrom(bytes,bytes)")] + pub struct WithdrawableFromCall( + pub ethers::core::types::Bytes, + pub ethers::core::types::Bytes, + ); + #[derive(Debug, Clone, PartialEq, Eq, ethers :: contract :: EthAbiType)] + pub enum LegacyCellarAdaptorV1Calls { + AssetOf(AssetOfCall), + AssetsUsed(AssetsUsedCall), + BalanceOf(BalanceOfCall), + Deposit(DepositCall), + DepositToCellar(DepositToCellarCall), + Identifier(IdentifierCall), + IsDebt(IsDebtCall), + RevokeApproval(RevokeApprovalCall), + Slippage(SlippageCall), + Withdraw(WithdrawCall), + WithdrawFromCellar(WithdrawFromCellarCall), + WithdrawableFrom(WithdrawableFromCall), + } + impl ethers::core::abi::AbiDecode for LegacyCellarAdaptorV1Calls { + fn decode(data: impl AsRef<[u8]>) -> Result { + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::AssetOf(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::AssetsUsed(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::BalanceOf(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::Deposit(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::DepositToCellar(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::Identifier(decoded)); + } + if let Ok(decoded) = ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::IsDebt(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::RevokeApproval(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::Slippage(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::Withdraw(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::WithdrawFromCellar(decoded)); + } + if let Ok(decoded) = + ::decode(data.as_ref()) + { + return Ok(LegacyCellarAdaptorV1Calls::WithdrawableFrom(decoded)); + } + Err(ethers::core::abi::Error::InvalidData.into()) + } + } + impl ethers::core::abi::AbiEncode for LegacyCellarAdaptorV1Calls { + fn encode(self) -> Vec { + match self { + LegacyCellarAdaptorV1Calls::AssetOf(element) => element.encode(), + LegacyCellarAdaptorV1Calls::AssetsUsed(element) => element.encode(), + LegacyCellarAdaptorV1Calls::BalanceOf(element) => element.encode(), + LegacyCellarAdaptorV1Calls::Deposit(element) => element.encode(), + LegacyCellarAdaptorV1Calls::DepositToCellar(element) => element.encode(), + LegacyCellarAdaptorV1Calls::Identifier(element) => element.encode(), + LegacyCellarAdaptorV1Calls::IsDebt(element) => element.encode(), + LegacyCellarAdaptorV1Calls::RevokeApproval(element) => element.encode(), + LegacyCellarAdaptorV1Calls::Slippage(element) => element.encode(), + LegacyCellarAdaptorV1Calls::Withdraw(element) => element.encode(), + LegacyCellarAdaptorV1Calls::WithdrawFromCellar(element) => element.encode(), + LegacyCellarAdaptorV1Calls::WithdrawableFrom(element) => element.encode(), + } + } + } + impl ::std::fmt::Display for LegacyCellarAdaptorV1Calls { + fn fmt(&self, f: &mut ::std::fmt::Formatter<'_>) -> ::std::fmt::Result { + match self { + LegacyCellarAdaptorV1Calls::AssetOf(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::AssetsUsed(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::BalanceOf(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::Deposit(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::DepositToCellar(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::Identifier(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::IsDebt(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::RevokeApproval(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::Slippage(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::Withdraw(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::WithdrawFromCellar(element) => element.fmt(f), + LegacyCellarAdaptorV1Calls::WithdrawableFrom(element) => element.fmt(f), + } + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: AssetOfCall) -> Self { + LegacyCellarAdaptorV1Calls::AssetOf(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: AssetsUsedCall) -> Self { + LegacyCellarAdaptorV1Calls::AssetsUsed(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: BalanceOfCall) -> Self { + LegacyCellarAdaptorV1Calls::BalanceOf(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: DepositCall) -> Self { + LegacyCellarAdaptorV1Calls::Deposit(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: DepositToCellarCall) -> Self { + LegacyCellarAdaptorV1Calls::DepositToCellar(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: IdentifierCall) -> Self { + LegacyCellarAdaptorV1Calls::Identifier(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: IsDebtCall) -> Self { + LegacyCellarAdaptorV1Calls::IsDebt(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: RevokeApprovalCall) -> Self { + LegacyCellarAdaptorV1Calls::RevokeApproval(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: SlippageCall) -> Self { + LegacyCellarAdaptorV1Calls::Slippage(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: WithdrawCall) -> Self { + LegacyCellarAdaptorV1Calls::Withdraw(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: WithdrawFromCellarCall) -> Self { + LegacyCellarAdaptorV1Calls::WithdrawFromCellar(var) + } + } + impl ::std::convert::From for LegacyCellarAdaptorV1Calls { + fn from(var: WithdrawableFromCall) -> Self { + LegacyCellarAdaptorV1Calls::WithdrawableFrom(var) + } + } +} diff --git a/steward_abi/src/lib.rs b/steward_abi/src/lib.rs index 54dac3f6..7063997b 100644 --- a/steward_abi/src/lib.rs +++ b/steward_abi/src/lib.rs @@ -14,9 +14,12 @@ pub mod cellar_v2; pub mod cellar_v2_2; pub mod cellar_v2_5; pub mod cellar_with_share_lock_period_v1; +pub mod collateral_f_token_adaptor_v1; pub mod compound_c_token_adaptor_v2; +pub mod debt_f_token_adaptor_v1; pub mod f_token_adaptor; pub mod fees_and_reserves_adaptor_v1; +pub mod legacy_cellar_adaptor_v1; pub mod morpho_aave_v2_a_token_adaptor_v1; pub mod morpho_aave_v2_debt_token_adaptor_v1; pub mod morpho_aave_v3_a_token_collateral_adaptor_v1; diff --git a/steward_abi_build/src/main.rs b/steward_abi_build/src/main.rs index 57df46cd..cb7cf53a 100644 --- a/steward_abi_build/src/main.rs +++ b/steward_abi_build/src/main.rs @@ -56,6 +56,9 @@ fn main() { "CellarWithShareLockPeriodV1", "cellar_with_share_lock_period_v1", ), + ("DebtFTokenAdaptorV1", "debt_f_token_adaptor_v1"), + ("CollateralFTokenAdaptorV1", "collateral_f_token_adaptor_v1"), + ("LegacyCellarAdaptorV1", "legacy_cellar_adaptor_v1"), ]; contracts diff --git a/steward_proto_go/steward_proto/aave_v3_debt_token.pb.go b/steward_proto_go/steward_proto/aave_v3_debt_token.pb.go index 28d79b18..0184706c 100644 --- a/steward_proto_go/steward_proto/aave_v3_debt_token.pb.go +++ b/steward_proto_go/steward_proto/aave_v3_debt_token.pb.go @@ -485,6 +485,9 @@ type AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan struct { // *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_MorphoAaveV3ATokenP2PV1Calls // *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_MorphoAaveV3DebtTokenV1Calls // *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_BalancerPoolV1Calls + // *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_LegacyCellarV1Calls + // *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_DebtFTokenV1Calls + // *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CollateralFTokenV1Calls CallData isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData `protobuf_oneof:"call_data"` } @@ -695,6 +698,27 @@ func (x *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan) GetBalancerPool return nil } +func (x *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan) GetLegacyCellarV1Calls() *LegacyCellarAdaptorV1Calls { + if x, ok := x.GetCallData().(*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_LegacyCellarV1Calls); ok { + return x.LegacyCellarV1Calls + } + return nil +} + +func (x *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan) GetDebtFTokenV1Calls() *DebtFTokenAdaptorV1Calls { + if x, ok := x.GetCallData().(*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_DebtFTokenV1Calls); ok { + return x.DebtFTokenV1Calls + } + return nil +} + +func (x *AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan) GetCollateralFTokenV1Calls() *CollateralFTokenAdaptorV1Calls { + if x, ok := x.GetCallData().(*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CollateralFTokenV1Calls); ok { + return x.CollateralFTokenV1Calls + } + return nil +} + type isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData interface { isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData() } @@ -814,6 +838,21 @@ type AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_BalancerPoolV1Calls BalancerPoolV1Calls *BalancerPoolAdaptorV1Calls `protobuf:"bytes,24,opt,name=balancer_pool_v1_calls,json=balancerPoolV1Calls,proto3,oneof"` } +type AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_LegacyCellarV1Calls struct { + // Represents function calls to the LegacyCellarAdaptor V1 + LegacyCellarV1Calls *LegacyCellarAdaptorV1Calls `protobuf:"bytes,25,opt,name=legacy_cellar_v1_calls,json=legacyCellarV1Calls,proto3,oneof"` +} + +type AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_DebtFTokenV1Calls struct { + // Represents function calls to the DebtFTokenAdaptor V1 + DebtFTokenV1Calls *DebtFTokenAdaptorV1Calls `protobuf:"bytes,26,opt,name=debt_f_token_v1_calls,json=debtFTokenV1Calls,proto3,oneof"` +} + +type AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CollateralFTokenV1Calls struct { + // Represents function calls to the CollateralFTokenAdaptor V1 + CollateralFTokenV1Calls *CollateralFTokenAdaptorV1Calls `protobuf:"bytes,27,opt,name=collateral_f_token_v1_calls,json=collateralFTokenV1Calls,proto3,oneof"` +} + func (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_UniswapV3V1Calls) isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData() { } @@ -883,6 +922,15 @@ func (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_MorphoAaveV3DebtTo func (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_BalancerPoolV1Calls) isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData() { } +func (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_LegacyCellarV1Calls) isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData() { +} + +func (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_DebtFTokenV1Calls) isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData() { +} + +func (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CollateralFTokenV1Calls) isAaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CallData() { +} + var File_adaptors_aave_aave_v3_debt_token_proto protoreflect.FileDescriptor var file_adaptors_aave_aave_v3_debt_token_proto_rawDesc = []byte{ @@ -938,220 +986,246 @@ var file_adaptors_aave_aave_v3_debt_token_proto_rawDesc = []byte{ 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x22, 0xe6, 0x19, 0x0a, 0x18, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x12, 0x45, 0x0a, - 0x0f, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, - 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, - 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x5f, 0x0a, 0x10, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x66, - 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, + 0x1a, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x73, 0x6f, 0x6d, 0x6d, 0x65, + 0x6c, 0x69, 0x65, 0x72, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x1a, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x66, 0x72, 0x61, 0x78, 0x2f, + 0x64, 0x65, 0x62, 0x74, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x1a, 0x26, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x66, 0x72, 0x61, + 0x78, 0x2f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x66, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8b, 0x1c, 0x0a, 0x18, 0x41, + 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x12, 0x45, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x6f, 0x6b, + 0x65, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, + 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0e, + 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x5f, + 0x0a, 0x10, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x61, + 0x76, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x42, + 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x61, 0x76, 0x65, 0x48, 0x00, 0x52, + 0x0e, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x61, 0x76, 0x65, 0x12, + 0x5c, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x61, 0x79, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x64, 0x65, + 0x62, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x52, + 0x65, 0x70, 0x61, 0x79, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x48, 0x00, 0x52, 0x0d, + 0x72, 0x65, 0x70, 0x61, 0x79, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x12, 0x66, 0x0a, + 0x13, 0x72, 0x65, 0x70, 0x61, 0x79, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x61, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x35, 0x2e, 0x73, 0x74, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, + 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, + 0x2e, 0x52, 0x65, 0x70, 0x61, 0x79, 0x57, 0x69, 0x74, 0x68, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x73, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x70, 0x61, 0x79, 0x57, 0x69, 0x74, 0x68, 0x41, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x6c, + 0x6f, 0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x73, 0x74, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, + 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, + 0x46, 0x6c, 0x61, 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x6e, 0x48, 0x00, 0x52, 0x09, 0x66, 0x6c, 0x61, + 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x6e, 0x1a, 0x3e, 0x0a, 0x0e, 0x42, 0x6f, 0x72, 0x72, 0x6f, 0x77, + 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x61, 0x76, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, + 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, + 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x3d, 0x0a, 0x0d, 0x52, 0x65, 0x70, 0x61, 0x79, 0x41, + 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x12, 0x14, 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, + 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, + 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x55, 0x0a, 0x10, 0x52, 0x65, 0x70, 0x61, 0x79, 0x57, 0x69, + 0x74, 0x68, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x64, + 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0xab, 0x01, 0x0a, + 0x09, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, + 0x61, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, + 0x0a, 0x6c, 0x6f, 0x61, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6c, + 0x6f, 0x61, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, + 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x61, 0x6e, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x73, 0x12, 0x5a, + 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x41, - 0x61, 0x76, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, 0x6f, - 0x6d, 0x41, 0x61, 0x76, 0x65, 0x12, 0x5c, 0x0a, 0x0f, 0x72, 0x65, 0x70, 0x61, 0x79, 0x5f, 0x61, - 0x61, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, + 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, + 0x46, 0x6f, 0x72, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x6c, 0x6f, + 0x61, 0x6e, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x1a, 0x9f, 0x15, 0x0a, 0x1d, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x6f, 0x72, 0x41, 0x61, 0x76, + 0x65, 0x56, 0x33, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x6c, 0x6f, 0x61, 0x6e, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, + 0x70, 0x5f, 0x76, 0x33, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, + 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x10, 0x75, 0x6e, 0x69, 0x73, + 0x77, 0x61, 0x70, 0x56, 0x33, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, + 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, + 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x64, + 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, + 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x64, 0x0a, 0x19, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, + 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, + 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, + 0x58, 0x0a, 0x15, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, + 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, - 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x79, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, - 0x62, 0x74, 0x48, 0x00, 0x52, 0x0d, 0x72, 0x65, 0x70, 0x61, 0x79, 0x41, 0x61, 0x76, 0x65, 0x44, - 0x65, 0x62, 0x74, 0x12, 0x66, 0x0a, 0x13, 0x72, 0x65, 0x70, 0x61, 0x79, 0x5f, 0x77, 0x69, 0x74, - 0x68, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x35, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, + 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x61, 0x61, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, + 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x5f, 0x0a, 0x18, + 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, + 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, + 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, + 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x68, 0x0a, + 0x1b, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x16, 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x6f, 0x6e, 0x65, 0x5f, 0x69, + 0x6e, 0x63, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, + 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, + 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x66, 0x65, 0x65, 0x73, 0x5f, + 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x65, 0x65, 0x73, 0x41, 0x6e, 0x64, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, 0x66, 0x65, 0x65, 0x73, 0x41, 0x6e, + 0x64, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, + 0x12, 0x48, 0x0a, 0x0f, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x78, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, + 0x6c, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x74, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x58, 0x41, 0x64, 0x61, 0x70, + 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x7a, 0x65, + 0x72, 0x6f, 0x58, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x73, 0x77, + 0x61, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, + 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x77, 0x61, 0x70, + 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, 0x73, 0x77, 0x61, + 0x70, 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x31, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x12, 0x60, 0x0a, 0x17, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x14, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x56, 0x32, + 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x5f, + 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, + 0x48, 0x00, 0x52, 0x0d, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, + 0x73, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x76, 0x33, 0x5f, + 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x55, 0x6e, 0x69, 0x73, + 0x77, 0x61, 0x70, 0x56, 0x33, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x10, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, + 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x2b, 0x61, 0x61, 0x76, 0x65, + 0x5f, 0x76, 0x32, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x76, + 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, + 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x73, 0x43, 0x6f, + 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x24, 0x61, 0x61, 0x76, 0x65, 0x56, 0x32, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x73, 0x43, 0x6f, 0x6c, + 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4b, + 0x0a, 0x10, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, + 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x72, 0x0a, 0x1f, 0x6d, + 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x61, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x41, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, + 0x6c, 0x73, 0x48, 0x00, 0x52, 0x19, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, + 0x56, 0x32, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, + 0x7b, 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, + 0x32, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, + 0x61, 0x76, 0x65, 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, + 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x91, 0x01, 0x0a, + 0x2a, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, + 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, + 0x61, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, + 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x23, 0x6d, 0x6f, 0x72, + 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, + 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, + 0x12, 0x7c, 0x0a, 0x23, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, + 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x76, + 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, + 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x50, + 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, + 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x70, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7b, + 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, + 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, + 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, - 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x79, 0x57, 0x69, 0x74, 0x68, - 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x10, 0x72, 0x65, 0x70, 0x61, 0x79, - 0x57, 0x69, 0x74, 0x68, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, 0x4f, 0x0a, 0x0a, 0x66, - 0x6c, 0x61, 0x73, 0x68, 0x5f, 0x6c, 0x6f, 0x61, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2e, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, - 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x6e, 0x48, - 0x00, 0x52, 0x09, 0x66, 0x6c, 0x61, 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x6e, 0x1a, 0x3e, 0x0a, 0x0e, - 0x42, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x61, 0x76, 0x65, 0x12, 0x14, - 0x0a, 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, - 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x3d, 0x0a, 0x0d, - 0x52, 0x65, 0x70, 0x61, 0x79, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x12, 0x14, 0x0a, - 0x05, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x55, 0x0a, 0x10, 0x52, - 0x65, 0x70, 0x61, 0x79, 0x57, 0x69, 0x74, 0x68, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x12, - 0x29, 0x0a, 0x10, 0x75, 0x6e, 0x64, 0x65, 0x72, 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x75, 0x6e, 0x64, 0x65, 0x72, - 0x6c, 0x79, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x6d, - 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x6d, 0x6f, 0x75, - 0x6e, 0x74, 0x1a, 0xab, 0x01, 0x0a, 0x09, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x4c, 0x6f, 0x61, 0x6e, - 0x12, 0x1f, 0x0a, 0x0b, 0x6c, 0x6f, 0x61, 0x6e, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x6c, 0x6f, 0x61, 0x6e, 0x54, 0x6f, 0x6b, 0x65, 0x6e, - 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6c, 0x6f, 0x61, 0x6e, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, - 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x6c, 0x6f, 0x61, 0x6e, 0x41, 0x6d, 0x6f, - 0x75, 0x6e, 0x74, 0x73, 0x12, 0x5a, 0x0a, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x03, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x42, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, - 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x46, 0x6f, 0x72, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x46, - 0x6c, 0x61, 0x73, 0x68, 0x6c, 0x6f, 0x61, 0x6e, 0x52, 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, - 0x1a, 0xfa, 0x12, 0x0a, 0x1d, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, - 0x46, 0x6f, 0x72, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x46, 0x6c, 0x61, 0x73, 0x68, 0x6c, 0x6f, - 0x61, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x13, - 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x76, 0x33, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, + 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, + 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x50, + 0x6f, 0x6f, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x5f, 0x76, 0x31, 0x5f, 0x63, + 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x65, + 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, + 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, 0x64, 0x65, 0x62, + 0x74, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, - 0x52, 0x10, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x56, 0x31, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, - 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, 0x76, 0x65, 0x41, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x61, 0x0a, 0x18, - 0x61, 0x61, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, - 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, - 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, 0x76, 0x65, 0x44, - 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, - 0x64, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, - 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, - 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, - 0x61, 0x0a, 0x18, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, - 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, - 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x12, 0x5f, 0x0a, 0x18, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, - 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, - 0x6c, 0x6c, 0x73, 0x12, 0x68, 0x0a, 0x1b, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x64, - 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x52, 0x11, 0x64, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x12, 0x6a, 0x0a, 0x1b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, + 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, + 0x61, 0x6c, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x42, + 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0a, 0x0a, 0x08, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x1d, 0x41, 0x61, 0x76, 0x65, + 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, - 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, - 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4e, 0x0a, - 0x11, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x63, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, 0x41, 0x64, 0x61, - 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x6f, - 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x67, 0x0a, - 0x1a, 0x66, 0x65, 0x65, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x73, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, - 0x65, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, - 0x66, 0x65, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x56, - 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x0f, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x78, - 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, - 0x6f, 0x58, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x48, 0x00, 0x52, 0x0c, 0x7a, 0x65, 0x72, 0x6f, 0x58, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x12, 0x67, 0x0a, 0x1a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x75, 0x6e, - 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, - 0x70, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, - 0x00, 0x52, 0x16, 0x73, 0x77, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, - 0x61, 0x70, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x60, 0x0a, 0x17, 0x76, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, - 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x0f, 0x63, - 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, - 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x73, 0x77, - 0x61, 0x70, 0x5f, 0x76, 0x33, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x10, 0x75, 0x6e, 0x69, - 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x94, 0x01, - 0x0a, 0x2b, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x41, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x24, - 0x61, 0x61, 0x76, 0x65, 0x56, 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x41, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, 0x31, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4b, 0x0a, 0x10, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, - 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x48, 0x00, 0x52, 0x0d, 0x66, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, - 0x73, 0x12, 0x72, 0x0a, 0x1f, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, - 0x5f, 0x76, 0x32, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, - 0x76, 0x65, 0x56, 0x32, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, - 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x19, 0x6d, 0x6f, 0x72, 0x70, - 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, - 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7b, 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, - 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, - 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, - 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x12, 0x91, 0x01, 0x0a, 0x2a, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, - 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, - 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, - 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, - 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, - 0x00, 0x52, 0x23, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, - 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7c, 0x0a, 0x23, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, - 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, - 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x70, 0x56, 0x31, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7b, 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, - 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, - 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, - 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, - 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, - 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x42, 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x42, 0x0a, 0x0a, - 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x5b, 0x0a, 0x1d, 0x41, 0x61, 0x76, - 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x3a, 0x0a, 0x05, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, - 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x52, - 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x10, 0x5a, 0x0e, 0x2f, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x52, 0x05, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x10, 0x5a, 0x0e, 0x2f, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1198,6 +1272,9 @@ var file_adaptors_aave_aave_v3_debt_token_proto_goTypes = []interface{}{ (*MorphoAaveV3ATokenP2PAdaptorV1Calls)(nil), // 27: steward.v3.MorphoAaveV3ATokenP2PAdaptorV1Calls (*MorphoAaveV3DebtTokenAdaptorV1Calls)(nil), // 28: steward.v3.MorphoAaveV3DebtTokenAdaptorV1Calls (*BalancerPoolAdaptorV1Calls)(nil), // 29: steward.v3.BalancerPoolAdaptorV1Calls + (*LegacyCellarAdaptorV1Calls)(nil), // 30: steward.v3.LegacyCellarAdaptorV1Calls + (*DebtFTokenAdaptorV1Calls)(nil), // 31: steward.v3.DebtFTokenAdaptorV1Calls + (*CollateralFTokenAdaptorV1Calls)(nil), // 32: steward.v3.CollateralFTokenAdaptorV1Calls } var file_adaptors_aave_aave_v3_debt_token_proto_depIdxs = []int32{ 7, // 0: steward.v3.AaveV3DebtTokenAdaptorV1.revoke_approval:type_name -> steward.v3.RevokeApproval @@ -1230,11 +1307,14 @@ var file_adaptors_aave_aave_v3_debt_token_proto_depIdxs = []int32{ 27, // 27: steward.v3.AaveV3DebtTokenAdaptorV1.AdaptorCallForAaveV3Flashloan.morpho_aave_v3_a_token_p2p_v1_calls:type_name -> steward.v3.MorphoAaveV3ATokenP2PAdaptorV1Calls 28, // 28: steward.v3.AaveV3DebtTokenAdaptorV1.AdaptorCallForAaveV3Flashloan.morpho_aave_v3_debt_token_v1_calls:type_name -> steward.v3.MorphoAaveV3DebtTokenAdaptorV1Calls 29, // 29: steward.v3.AaveV3DebtTokenAdaptorV1.AdaptorCallForAaveV3Flashloan.balancer_pool_v1_calls:type_name -> steward.v3.BalancerPoolAdaptorV1Calls - 30, // [30:30] is the sub-list for method output_type - 30, // [30:30] is the sub-list for method input_type - 30, // [30:30] is the sub-list for extension type_name - 30, // [30:30] is the sub-list for extension extendee - 0, // [0:30] is the sub-list for field type_name + 30, // 30: steward.v3.AaveV3DebtTokenAdaptorV1.AdaptorCallForAaveV3Flashloan.legacy_cellar_v1_calls:type_name -> steward.v3.LegacyCellarAdaptorV1Calls + 31, // 31: steward.v3.AaveV3DebtTokenAdaptorV1.AdaptorCallForAaveV3Flashloan.debt_f_token_v1_calls:type_name -> steward.v3.DebtFTokenAdaptorV1Calls + 32, // 32: steward.v3.AaveV3DebtTokenAdaptorV1.AdaptorCallForAaveV3Flashloan.collateral_f_token_v1_calls:type_name -> steward.v3.CollateralFTokenAdaptorV1Calls + 33, // [33:33] is the sub-list for method output_type + 33, // [33:33] is the sub-list for method input_type + 33, // [33:33] is the sub-list for extension type_name + 33, // [33:33] is the sub-list for extension extendee + 0, // [0:33] is the sub-list for field type_name } func init() { file_adaptors_aave_aave_v3_debt_token_proto_init() } @@ -1262,6 +1342,9 @@ func file_adaptors_aave_aave_v3_debt_token_proto_init() { file_adaptors_base_proto_init() file_adaptors_sommelier_cellar_adaptor_proto_init() file_adaptors_aave_aave_v2_enable_asset_as_collateral_adaptor_proto_init() + file_adaptors_sommelier_legacy_cellar_adaptor_proto_init() + file_adaptors_frax_debt_f_token_proto_init() + file_adaptors_frax_collateral_f_token_proto_init() if !protoimpl.UnsafeEnabled { file_adaptors_aave_aave_v3_debt_token_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*AaveV3DebtTokenAdaptorV1); i { @@ -1379,6 +1462,9 @@ func file_adaptors_aave_aave_v3_debt_token_proto_init() { (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_MorphoAaveV3ATokenP2PV1Calls)(nil), (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_MorphoAaveV3DebtTokenV1Calls)(nil), (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_BalancerPoolV1Calls)(nil), + (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_LegacyCellarV1Calls)(nil), + (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_DebtFTokenV1Calls)(nil), + (*AaveV3DebtTokenAdaptorV1_AdaptorCallForAaveV3Flashloan_CollateralFTokenV1Calls)(nil), } type x struct{} out := protoimpl.TypeBuilder{ diff --git a/steward_proto_go/steward_proto/cellar_v2.pb.go b/steward_proto_go/steward_proto/cellar_v2.pb.go index d2725804..8f57d2fe 100644 --- a/steward_proto_go/steward_proto/cellar_v2.pb.go +++ b/steward_proto_go/steward_proto/cellar_v2.pb.go @@ -459,6 +459,9 @@ type AdaptorCall struct { // *AdaptorCall_MorphoAaveV3ATokenP2PV1Calls // *AdaptorCall_MorphoAaveV3DebtTokenV1Calls // *AdaptorCall_BalancerPoolV1Calls + // *AdaptorCall_LegacyCellarV1Calls + // *AdaptorCall_DebtFTokenV1Calls + // *AdaptorCall_CollateralFTokenV1Calls CallData isAdaptorCall_CallData `protobuf_oneof:"call_data"` } @@ -669,6 +672,27 @@ func (x *AdaptorCall) GetBalancerPoolV1Calls() *BalancerPoolAdaptorV1Calls { return nil } +func (x *AdaptorCall) GetLegacyCellarV1Calls() *LegacyCellarAdaptorV1Calls { + if x, ok := x.GetCallData().(*AdaptorCall_LegacyCellarV1Calls); ok { + return x.LegacyCellarV1Calls + } + return nil +} + +func (x *AdaptorCall) GetDebtFTokenV1Calls() *DebtFTokenAdaptorV1Calls { + if x, ok := x.GetCallData().(*AdaptorCall_DebtFTokenV1Calls); ok { + return x.DebtFTokenV1Calls + } + return nil +} + +func (x *AdaptorCall) GetCollateralFTokenV1Calls() *CollateralFTokenAdaptorV1Calls { + if x, ok := x.GetCallData().(*AdaptorCall_CollateralFTokenV1Calls); ok { + return x.CollateralFTokenV1Calls + } + return nil +} + type isAdaptorCall_CallData interface { isAdaptorCall_CallData() } @@ -788,6 +812,21 @@ type AdaptorCall_BalancerPoolV1Calls struct { BalancerPoolV1Calls *BalancerPoolAdaptorV1Calls `protobuf:"bytes,24,opt,name=balancer_pool_v1_calls,json=balancerPoolV1Calls,proto3,oneof"` } +type AdaptorCall_LegacyCellarV1Calls struct { + // Represents function calls to the LegacyCellarAdaptor V1 + LegacyCellarV1Calls *LegacyCellarAdaptorV1Calls `protobuf:"bytes,25,opt,name=legacy_cellar_v1_calls,json=legacyCellarV1Calls,proto3,oneof"` +} + +type AdaptorCall_DebtFTokenV1Calls struct { + // Represents function calls to the DebtFTokenAdaptor V1 + DebtFTokenV1Calls *DebtFTokenAdaptorV1Calls `protobuf:"bytes,26,opt,name=debt_f_token_v1_calls,json=debtFTokenV1Calls,proto3,oneof"` +} + +type AdaptorCall_CollateralFTokenV1Calls struct { + // Represents function calls to the CollateralFTokenAdaptor V1 + CollateralFTokenV1Calls *CollateralFTokenAdaptorV1Calls `protobuf:"bytes,27,opt,name=collateral_f_token_v1_calls,json=collateralFTokenV1Calls,proto3,oneof"` +} + func (*AdaptorCall_UniswapV3V1Calls) isAdaptorCall_CallData() {} func (*AdaptorCall_AaveATokenV1Calls) isAdaptorCall_CallData() {} @@ -834,6 +873,12 @@ func (*AdaptorCall_MorphoAaveV3DebtTokenV1Calls) isAdaptorCall_CallData() {} func (*AdaptorCall_BalancerPoolV1Calls) isAdaptorCall_CallData() {} +func (*AdaptorCall_LegacyCellarV1Calls) isAdaptorCall_CallData() {} + +func (*AdaptorCall_DebtFTokenV1Calls) isAdaptorCall_CallData() {} + +func (*AdaptorCall_CollateralFTokenV1Calls) isAdaptorCall_CallData() {} + // // Insert a trusted position to the list of positions used by the cellar at a given index. // @@ -4098,651 +4143,677 @@ var file_cellar_v2_proto_rawDesc = []byte{ 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x61, 0x61, 0x76, 0x65, 0x2f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x61, - 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x84, 0x0e, 0x0a, - 0x08, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x12, 0x45, 0x0a, 0x0c, 0x61, 0x64, 0x64, - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, - 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x4c, 0x0a, 0x0f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x2e, 0x61, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x73, 0x6f, 0x6d, 0x6d, 0x65, 0x6c, 0x69, 0x65, 0x72, + 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x5f, 0x61, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x20, 0x61, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x66, 0x72, 0x61, 0x78, 0x2f, 0x64, 0x65, 0x62, 0x74, + 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x26, + 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x66, 0x72, 0x61, 0x78, 0x2f, 0x63, 0x6f, + 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x84, 0x0e, 0x0a, 0x08, 0x43, 0x65, 0x6c, 0x6c, 0x61, + 0x72, 0x56, 0x32, 0x12, 0x45, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, - 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, - 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x4e, - 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, - 0x0a, 0x14, 0x73, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, + 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, + 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4c, 0x0a, 0x0f, 0x63, 0x61, + 0x6c, 0x6c, 0x5f, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, + 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x4f, + 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x4e, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, + 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5b, 0x0a, 0x14, 0x73, 0x65, 0x74, 0x5f, + 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x1d, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x74, 0x0a, 0x1d, 0x73, - 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, - 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, - 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x12, 0x4b, 0x0a, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, + 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, + 0x1a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, + 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4b, 0x0a, 0x0e, 0x73, + 0x77, 0x61, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x77, 0x61, 0x70, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x64, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x5f, + 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, - 0x53, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, - 0x0d, 0x73, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x64, - 0x0a, 0x17, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, - 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x2a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, - 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x73, - 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, 0x0a, 0x15, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, - 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x08, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x48, 0x00, 0x52, 0x12, - 0x73, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, - 0x6f, 0x64, 0x12, 0x48, 0x0a, 0x0d, 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x61, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, - 0x53, 0x65, 0x74, 0x75, 0x70, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0c, - 0x73, 0x65, 0x74, 0x75, 0x70, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x10, - 0x73, 0x65, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x66, 0x65, 0x65, - 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, - 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x65, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x73, - 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x65, 0x65, 0x12, 0x54, 0x0a, - 0x11, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x49, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, - 0x00, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, - 0x6f, 0x77, 0x6e, 0x12, 0x48, 0x0a, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x68, 0x75, 0x74, - 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, - 0x2e, 0x4c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, - 0x0c, 0x6c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x97, 0x01, - 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, - 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x3c, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x4f, - 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, + 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x73, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5c, + 0x0a, 0x15, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, + 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, + 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x48, 0x0a, 0x0d, + 0x73, 0x65, 0x74, 0x75, 0x70, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x09, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x75, 0x70, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0c, 0x73, 0x65, 0x74, 0x75, 0x70, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x4f, 0x0a, 0x10, 0x73, 0x65, 0x74, 0x5f, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, + 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, + 0x72, 0x6d, 0x46, 0x65, 0x65, 0x48, 0x00, 0x52, 0x0e, 0x73, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, + 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x65, 0x65, 0x12, 0x54, 0x0a, 0x11, 0x69, 0x6e, 0x69, 0x74, 0x69, + 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0b, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, + 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x48, 0x0a, + 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0c, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x2e, 0x4c, 0x69, 0x66, 0x74, 0x53, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x69, 0x66, 0x74, 0x53, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x97, 0x01, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, - 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x02, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, + 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, + 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, - 0x79, 0x1a, 0x35, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x34, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x1a, 0x65, - 0x0a, 0x0d, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x31, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x32, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, - 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x2f, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6e, - 0x65, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, - 0x65, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x1a, 0x3c, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x23, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x76, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x28, 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x75, 0x70, 0x41, 0x64, 0x61, - 0x70, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x33, - 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x65, 0x65, - 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x66, 0x65, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, - 0x46, 0x65, 0x65, 0x1a, 0x12, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x0e, 0x0a, 0x0c, 0x4c, 0x69, 0x66, 0x74, 0x53, - 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x42, 0x0a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x22, 0xbe, 0x16, 0x0a, 0x0a, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, - 0x5f, 0x32, 0x12, 0x4a, 0x0a, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, - 0x32, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x48, 0x00, - 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x40, - 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, - 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, - 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, - 0x1a, 0xaa, 0x0c, 0x0a, 0x0c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, - 0x6c, 0x12, 0x47, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, - 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, - 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x63, 0x61, - 0x6c, 0x6c, 0x5f, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x43, 0x61, 0x6c, 0x6c, - 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x61, 0x6c, - 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x0f, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x14, - 0x73, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, - 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, - 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1d, 0x73, - 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, - 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, - 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, - 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, - 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, + 0x79, 0x1a, 0x3c, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, + 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, + 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x35, 0x0a, 0x12, 0x53, + 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x1a, 0x34, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x1a, 0x65, 0x0a, 0x0d, 0x53, 0x77, 0x61, 0x70, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x5f, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x31, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x32, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x32, 0x12, 0x22, 0x0a, 0x0d, 0x69, + 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, + 0x2f, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4c, 0x6f, 0x63, 0x6b, + 0x1a, 0x3c, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x65, 0x77, + 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x28, + 0x0a, 0x0c, 0x53, 0x65, 0x74, 0x75, 0x70, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x18, + 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x33, 0x0a, 0x0e, 0x53, 0x65, 0x74, 0x50, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x65, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x70, 0x6c, + 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x66, 0x65, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x0b, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x46, 0x65, 0x65, 0x1a, 0x12, 0x0a, + 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, + 0x6e, 0x1a, 0x0e, 0x0a, 0x0c, 0x4c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, + 0x6e, 0x42, 0x0a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xbe, 0x16, + 0x0a, 0x0a, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x12, 0x4a, 0x0a, 0x0d, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x46, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x40, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, + 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, - 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x66, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, - 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x52, - 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x48, 0x00, 0x52, 0x15, 0x73, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, - 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x15, 0x73, 0x65, - 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x65, 0x72, - 0x69, 0x6f, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, - 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x56, 0x0a, 0x11, 0x69, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, - 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, - 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x49, 0x6e, - 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, - 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, - 0x77, 0x6e, 0x12, 0x70, 0x0a, 0x1b, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, - 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x75, - 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, - 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, - 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x74, 0x48, 0x00, 0x52, 0x18, 0x73, 0x65, 0x74, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x43, 0x75, 0x74, 0x12, 0x4a, 0x0a, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x68, 0x75, - 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, - 0x32, 0x5f, 0x32, 0x2e, 0x4c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x12, 0x67, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x5f, - 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, - 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, - 0x48, 0x00, 0x52, 0x15, 0x61, 0x64, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, - 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x61, 0x64, 0x64, - 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, + 0x32, 0x5f, 0x32, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, + 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x1a, 0xaa, 0x0c, 0x0a, 0x0c, 0x46, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x47, 0x0a, 0x0c, 0x61, + 0x64, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, + 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x6e, 0x5f, + 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, + 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, + 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, + 0x70, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, + 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x14, 0x73, 0x65, 0x74, 0x5f, 0x68, 0x6f, + 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, + 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, + 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1d, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x16, 0x61, - 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, - 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x76, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, - 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, + 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, + 0x00, 0x52, 0x1a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, + 0x0e, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x77, + 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, + 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x66, 0x0a, 0x17, + 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x65, + 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, + 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, + 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x73, + 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x15, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x08, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, + 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x48, 0x00, + 0x52, 0x12, 0x73, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, + 0x72, 0x69, 0x6f, 0x64, 0x12, 0x56, 0x0a, 0x11, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, + 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, + 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, + 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x70, 0x0a, 0x1b, + 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, + 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, + 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, + 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, + 0x75, 0x74, 0x48, 0x00, 0x52, 0x18, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x74, 0x12, 0x4a, + 0x0a, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, + 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x4c, 0x69, + 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x69, + 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x67, 0x0a, 0x18, 0x61, 0x64, + 0x64, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, - 0x00, 0x52, 0x1a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x79, 0x0a, - 0x1e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, - 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, - 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, - 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x72, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, - 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x63, 0x61, 0x63, 0x68, - 0x65, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x43, 0x61, 0x63, - 0x68, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, - 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, - 0x72, 0x42, 0x0a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x97, 0x01, - 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, - 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, - 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, - 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, - 0x72, 0x72, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, - 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x3c, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x4f, - 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x52, - 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, + 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, + 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x15, 0x61, 0x64, + 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x75, 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x41, + 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x16, 0x61, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, + 0x76, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, + 0x72, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, + 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x79, 0x0a, 0x1e, 0x72, 0x65, 0x6d, 0x6f, 0x76, + 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, + 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x32, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, + 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, + 0x75, 0x65, 0x12, 0x57, 0x0a, 0x12, 0x63, 0x61, 0x63, 0x68, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x63, + 0x65, 0x5f, 0x72, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x48, 0x00, 0x52, 0x10, 0x63, 0x61, 0x63, 0x68, 0x65, + 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x42, 0x0a, 0x0a, 0x08, 0x66, + 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x97, 0x01, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, - 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x02, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, + 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, + 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, + 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, + 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, - 0x79, 0x1a, 0x35, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x34, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x1a, 0x65, - 0x0a, 0x0d, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x31, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, - 0x78, 0x5f, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, - 0x32, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, - 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, - 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x2f, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6e, - 0x65, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, - 0x65, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x1a, 0x3c, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, - 0x23, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x76, 0x69, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x12, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, - 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x33, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, - 0x6d, 0x43, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x75, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x43, 0x75, 0x74, 0x1a, 0x0e, 0x0a, - 0x0c, 0x4c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x31, 0x0a, - 0x15, 0x41, 0x64, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, - 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x1a, 0x57, 0x0a, 0x09, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x4a, 0x0a, - 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, - 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x46, 0x75, - 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x0d, 0x66, 0x75, 0x6e, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x16, 0x41, 0x64, 0x64, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, - 0x67, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x36, 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, - 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x3e, 0x0a, 0x1b, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, - 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, - 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x69, 0x0a, 0x10, - 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, - 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, - 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, - 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x27, - 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, - 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x62, - 0x6c, 0x65, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, - 0x74, 0x79, 0x70, 0x65, 0x22, 0xeb, 0x18, 0x0a, 0x0a, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, - 0x32, 0x5f, 0x35, 0x12, 0x4a, 0x0a, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, - 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, - 0x5f, 0x35, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x48, - 0x00, 0x52, 0x0c, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, - 0x40, 0x0a, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, - 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, - 0x63, 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, - 0x6c, 0x1a, 0x8c, 0x0e, 0x0a, 0x0c, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, - 0x6c, 0x6c, 0x12, 0x47, 0x0a, 0x0c, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, - 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, - 0x61, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x63, - 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x6e, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x43, 0x61, 0x6c, - 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x61, - 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x0f, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, - 0x14, 0x73, 0x65, 0x74, 0x5f, 0x68, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, - 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, - 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x48, 0x6f, 0x6c, - 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1d, - 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, - 0x61, 0x79, 0x6f, 0x75, 0x74, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x53, - 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, - 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x48, 0x00, 0x52, 0x1a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, - 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, 0x0a, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, - 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x73, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x66, 0x0a, 0x17, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, 0x73, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, - 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x15, 0x73, - 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x65, - 0x72, 0x69, 0x6f, 0x64, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, - 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, - 0x65, 0x72, 0x69, 0x6f, 0x64, 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x56, 0x0a, 0x11, 0x69, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x49, - 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, - 0x00, 0x52, 0x10, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, - 0x6f, 0x77, 0x6e, 0x12, 0x70, 0x0a, 0x1b, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, - 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, - 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, - 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x74, 0x48, 0x00, 0x52, 0x18, 0x73, 0x65, 0x74, - 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, - 0x72, 0x6d, 0x43, 0x75, 0x74, 0x12, 0x4a, 0x0a, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x68, - 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, + 0x79, 0x1a, 0x3c, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x17, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, + 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, + 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, + 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, + 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x35, 0x0a, 0x12, 0x53, + 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x49, 0x64, 0x1a, 0x34, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x1a, 0x65, 0x0a, 0x0d, 0x53, 0x77, 0x61, 0x70, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, + 0x65, 0x78, 0x5f, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, + 0x78, 0x31, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x32, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x32, 0x12, 0x22, 0x0a, 0x0d, 0x69, + 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, + 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, + 0x2f, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6c, 0x6f, 0x63, + 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4c, 0x6f, 0x63, 0x6b, + 0x1a, 0x3c, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x65, 0x77, + 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x12, + 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, + 0x77, 0x6e, 0x1a, 0x33, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x74, 0x12, 0x17, + 0x0a, 0x07, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x06, 0x6e, 0x65, 0x77, 0x43, 0x75, 0x74, 0x1a, 0x0e, 0x0a, 0x0c, 0x4c, 0x69, 0x66, 0x74, 0x53, + 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x31, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, + 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x57, 0x0a, 0x09, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x4a, 0x0a, 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, + 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, + 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x32, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, + 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x1f, 0x0a, + 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x36, + 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x46, + 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x3e, 0x0a, 0x1b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, + 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, + 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x69, 0x0a, 0x10, 0x43, 0x61, 0x63, 0x68, 0x65, 0x50, + 0x72, 0x69, 0x63, 0x65, 0x52, 0x6f, 0x75, 0x74, 0x65, 0x72, 0x12, 0x2c, 0x0a, 0x12, 0x63, 0x68, + 0x65, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x10, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x41, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x6c, 0x6c, 0x6f, + 0x77, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0d, 0x52, 0x0e, 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x61, 0x62, 0x6c, 0x65, 0x52, 0x61, 0x6e, 0x67, + 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0xeb, + 0x18, 0x0a, 0x0a, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x12, 0x4a, 0x0a, + 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x46, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x0c, 0x66, 0x75, 0x6e, + 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x40, 0x0a, 0x09, 0x6d, 0x75, 0x6c, + 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x4c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, - 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, - 0x6e, 0x12, 0x67, 0x0a, 0x18, 0x61, 0x64, 0x64, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0c, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x41, 0x64, 0x64, 0x41, - 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, - 0x65, 0x48, 0x00, 0x52, 0x15, 0x61, 0x64, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, - 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x61, 0x64, - 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, - 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, + 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x48, 0x00, + 0x52, 0x09, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x1a, 0x8c, 0x0e, 0x0a, 0x0c, + 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x47, 0x0a, 0x0c, + 0x61, 0x64, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x61, 0x64, 0x64, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x0f, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x6f, 0x6e, + 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, + 0x70, 0x74, 0x6f, 0x72, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x50, 0x0a, 0x0f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, + 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x25, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5d, 0x0a, 0x14, 0x73, 0x65, 0x74, 0x5f, 0x68, + 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, + 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, + 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x48, 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x76, 0x0a, 0x1d, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, + 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, - 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x16, - 0x61, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x76, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x61, - 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, + 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, + 0x48, 0x00, 0x52, 0x1a, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, + 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x4d, + 0x0a, 0x0e, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, + 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, + 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x48, 0x00, 0x52, 0x0d, + 0x73, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x66, 0x0a, + 0x17, 0x73, 0x65, 0x74, 0x5f, 0x72, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x64, + 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x15, + 0x73, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x5e, 0x0a, 0x15, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, + 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x70, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x18, 0x08, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, + 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x48, + 0x00, 0x52, 0x12, 0x73, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, + 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x56, 0x0a, 0x11, 0x69, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, + 0x65, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, + 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, + 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x10, 0x69, 0x6e, 0x69, + 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x70, 0x0a, + 0x1b, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x5f, + 0x70, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x5f, 0x63, 0x75, 0x74, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x74, + 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, + 0x43, 0x75, 0x74, 0x48, 0x00, 0x52, 0x18, 0x73, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x74, 0x12, + 0x4a, 0x0a, 0x0d, 0x6c, 0x69, 0x66, 0x74, 0x5f, 0x73, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, + 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x4c, + 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x48, 0x00, 0x52, 0x0c, 0x6c, + 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x12, 0x67, 0x0a, 0x18, 0x61, + 0x64, 0x64, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, + 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, - 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, - 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, - 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x79, - 0x0a, 0x1e, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, - 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, - 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, - 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x69, 0x6e, 0x63, - 0x72, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x70, 0x70, - 0x6c, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, - 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x61, 0x70, 0x48, 0x00, 0x52, 0x16, 0x69, + 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x41, 0x64, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, + 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x15, 0x61, + 0x64, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x75, 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x61, 0x64, 0x64, 0x5f, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x74, 0x6f, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, + 0x65, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, + 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, + 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x16, 0x61, 0x64, 0x64, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, + 0x12, 0x76, 0x0a, 0x1d, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, + 0x65, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x46, 0x72, 0x6f, + 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x1a, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x79, 0x0a, 0x1e, 0x72, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x66, 0x72, 0x6f, 0x6d, + 0x5f, 0x63, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, + 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, + 0x6f, 0x67, 0x75, 0x65, 0x48, 0x00, 0x52, 0x1b, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, + 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x75, 0x65, 0x12, 0x6a, 0x0a, 0x19, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x5f, + 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x63, 0x61, 0x70, + 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, - 0x6c, 0x79, 0x43, 0x61, 0x70, 0x12, 0x6a, 0x0a, 0x19, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, - 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x63, - 0x61, 0x70, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, - 0x2e, 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, - 0x70, 0x70, 0x6c, 0x79, 0x43, 0x61, 0x70, 0x48, 0x00, 0x52, 0x16, 0x64, 0x65, 0x63, 0x72, 0x65, + 0x6c, 0x79, 0x43, 0x61, 0x70, 0x48, 0x00, 0x52, 0x16, 0x69, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, + 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x61, 0x70, 0x12, + 0x6a, 0x0a, 0x19, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x5f, 0x73, 0x68, 0x61, 0x72, + 0x65, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x11, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x61, - 0x70, 0x12, 0x61, 0x0a, 0x16, 0x73, 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, - 0x72, 0x69, 0x63, 0x65, 0x5f, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, - 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, - 0x72, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x48, 0x00, 0x52, - 0x13, 0x73, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x4f, 0x72, - 0x61, 0x63, 0x6c, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x97, 0x01, 0x0a, 0x0b, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0c, 0x52, 0x11, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, - 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, - 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x3c, 0x0a, 0x0d, 0x43, 0x61, - 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x64, - 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x74, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, - 0x6c, 0x6c, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, + 0x70, 0x48, 0x00, 0x52, 0x16, 0x64, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x61, 0x70, 0x12, 0x61, 0x0a, 0x16, 0x73, + 0x65, 0x74, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x5f, 0x70, 0x72, 0x69, 0x63, 0x65, 0x5f, 0x6f, + 0x72, 0x61, 0x63, 0x6c, 0x65, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, + 0x32, 0x5f, 0x35, 0x2e, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x63, + 0x65, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x48, 0x00, 0x52, 0x13, 0x73, 0x65, 0x74, 0x53, 0x68, + 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x42, 0x0a, + 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x97, 0x01, 0x0a, 0x0b, 0x41, + 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x12, 0x2d, 0x0a, 0x12, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, + 0x6f, 0x6e, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x11, 0x63, + 0x6f, 0x6e, 0x66, 0x69, 0x67, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x61, 0x74, 0x61, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, - 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, - 0x72, 0x72, 0x61, 0x79, 0x1a, 0x35, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, - 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x34, 0x0a, 0x1a, 0x53, - 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, - 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, - 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, - 0x74, 0x1a, 0x65, 0x0a, 0x0d, 0x53, 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x31, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x31, 0x12, 0x17, 0x0a, 0x07, 0x69, - 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x32, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, - 0x64, 0x65, 0x78, 0x32, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, - 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, - 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x2f, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4c, 0x6f, 0x63, 0x6b, 0x1a, 0x3c, 0x0a, 0x15, 0x53, 0x65, 0x74, - 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, 0x6e, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x44, 0x65, - 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x12, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, - 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x33, 0x0a, 0x18, 0x53, - 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, - 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, 0x5f, 0x63, - 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x43, 0x75, 0x74, - 0x1a, 0x0e, 0x0a, 0x0c, 0x4c, 0x69, 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, - 0x1a, 0x31, 0x0a, 0x15, 0x41, 0x64, 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, - 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, - 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x1a, 0x57, 0x0a, 0x09, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, - 0x12, 0x4a, 0x0a, 0x0e, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, - 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x0d, 0x66, - 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x16, - 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, - 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x36, 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, - 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, - 0x3e, 0x0a, 0x1b, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, - 0x31, 0x0a, 0x16, 0x49, 0x6e, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x61, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, - 0x5f, 0x63, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x43, - 0x61, 0x70, 0x1a, 0x31, 0x0a, 0x16, 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, - 0x61, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x43, 0x61, 0x70, 0x12, 0x17, 0x0a, 0x07, - 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, - 0x65, 0x77, 0x43, 0x61, 0x70, 0x1a, 0x4e, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, - 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, - 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0a, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, - 0x06, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, - 0x72, 0x61, 0x63, 0x6c, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, - 0x70, 0x65, 0x22, 0xe8, 0x12, 0x0a, 0x0b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, - 0x6c, 0x6c, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x13, - 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x76, 0x33, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, - 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, - 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, - 0x52, 0x10, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x56, 0x31, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, - 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, 0x76, 0x65, 0x41, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x61, 0x0a, 0x18, - 0x61, 0x61, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, - 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, - 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, - 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, - 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, 0x76, 0x65, 0x44, - 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, - 0x64, 0x0a, 0x19, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x5f, 0x74, 0x6f, - 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, - 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, - 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, - 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, - 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, - 0x61, 0x0a, 0x18, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, - 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, - 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, - 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x12, 0x5f, 0x0a, 0x18, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, - 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, - 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, - 0x6c, 0x6c, 0x73, 0x12, 0x68, 0x0a, 0x1b, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x64, + 0x79, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, + 0x72, 0x72, 0x61, 0x79, 0x1a, 0x3c, 0x0a, 0x0d, 0x43, 0x61, 0x6c, 0x6c, 0x4f, 0x6e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x2b, 0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x04, 0x64, 0x61, + 0x74, 0x61, 0x1a, 0x4a, 0x0a, 0x0e, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0d, 0x52, 0x05, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x12, 0x22, 0x0a, 0x0d, 0x69, 0x6e, + 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, 0x61, 0x79, 0x1a, 0x35, + 0x0a, 0x12, 0x53, 0x65, 0x74, 0x48, 0x6f, 0x6c, 0x64, 0x69, 0x6e, 0x67, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, + 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x34, 0x0a, 0x1a, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x41, 0x64, 0x64, 0x72, + 0x65, 0x73, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x70, 0x61, 0x79, 0x6f, 0x75, 0x74, 0x1a, 0x65, 0x0a, 0x0d, 0x53, + 0x77, 0x61, 0x70, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x17, 0x0a, 0x07, + 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x31, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, + 0x6e, 0x64, 0x65, 0x78, 0x31, 0x12, 0x17, 0x0a, 0x07, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x5f, 0x32, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x06, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x32, 0x12, 0x22, + 0x0a, 0x0d, 0x69, 0x6e, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x61, 0x72, 0x72, 0x61, 0x79, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x6e, 0x44, 0x65, 0x62, 0x74, 0x41, 0x72, 0x72, + 0x61, 0x79, 0x1a, 0x2f, 0x0a, 0x12, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x4c, 0x6f, + 0x63, 0x6b, 0x50, 0x65, 0x72, 0x69, 0x6f, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, + 0x6c, 0x6f, 0x63, 0x6b, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4c, + 0x6f, 0x63, 0x6b, 0x1a, 0x3c, 0x0a, 0x15, 0x53, 0x65, 0x74, 0x52, 0x65, 0x62, 0x61, 0x6c, 0x61, + 0x6e, 0x63, 0x65, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x0a, 0x0d, + 0x6e, 0x65, 0x77, 0x5f, 0x64, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0c, 0x6e, 0x65, 0x77, 0x44, 0x65, 0x76, 0x69, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x1a, 0x12, 0x0a, 0x10, 0x49, 0x6e, 0x69, 0x74, 0x69, 0x61, 0x74, 0x65, 0x53, 0x68, 0x75, + 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x33, 0x0a, 0x18, 0x53, 0x65, 0x74, 0x53, 0x74, 0x72, 0x61, + 0x74, 0x65, 0x67, 0x69, 0x73, 0x74, 0x50, 0x6c, 0x61, 0x74, 0x66, 0x6f, 0x72, 0x6d, 0x43, 0x75, + 0x74, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x75, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x43, 0x75, 0x74, 0x1a, 0x0e, 0x0a, 0x0c, 0x4c, 0x69, + 0x66, 0x74, 0x53, 0x68, 0x75, 0x74, 0x64, 0x6f, 0x77, 0x6e, 0x1a, 0x31, 0x0a, 0x15, 0x41, 0x64, + 0x64, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, + 0x67, 0x75, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x57, 0x0a, + 0x09, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x63, 0x61, 0x6c, 0x6c, 0x12, 0x4a, 0x0a, 0x0e, 0x66, 0x75, + 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, + 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x32, 0x5f, 0x35, 0x2e, 0x46, 0x75, 0x6e, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x52, 0x0d, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x1a, 0x39, 0x0a, 0x16, 0x41, 0x64, 0x64, 0x50, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x6f, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, + 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, + 0x64, 0x1a, 0x36, 0x0a, 0x1a, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x1a, 0x3e, 0x0a, 0x1b, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x65, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x46, 0x72, 0x6f, 0x6d, 0x43, + 0x61, 0x74, 0x61, 0x6c, 0x6f, 0x67, 0x75, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x70, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0a, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x1a, 0x31, 0x0a, 0x16, 0x49, 0x6e, 0x63, + 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, + 0x43, 0x61, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x61, 0x70, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x43, 0x61, 0x70, 0x1a, 0x31, 0x0a, 0x16, + 0x44, 0x65, 0x63, 0x72, 0x65, 0x61, 0x73, 0x65, 0x53, 0x68, 0x61, 0x72, 0x65, 0x53, 0x75, 0x70, + 0x70, 0x6c, 0x79, 0x43, 0x61, 0x70, 0x12, 0x17, 0x0a, 0x07, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x61, + 0x70, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6e, 0x65, 0x77, 0x43, 0x61, 0x70, 0x1a, + 0x4e, 0x0a, 0x13, 0x53, 0x65, 0x74, 0x53, 0x68, 0x61, 0x72, 0x65, 0x50, 0x72, 0x69, 0x63, 0x65, + 0x4f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x72, 0x79, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x72, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x72, 0x79, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, 0x61, 0x63, 0x6c, + 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x42, + 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x22, 0x8d, 0x15, 0x0a, + 0x0b, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x43, 0x61, 0x6c, 0x6c, 0x12, 0x18, 0x0a, 0x07, + 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, + 0x70, 0x5f, 0x76, 0x33, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, + 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x10, 0x75, 0x6e, 0x69, 0x73, + 0x77, 0x61, 0x70, 0x56, 0x33, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, + 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, + 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, - 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, - 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4e, 0x0a, - 0x11, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x63, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, - 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, 0x41, 0x64, 0x61, - 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x6f, - 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x67, 0x0a, - 0x1a, 0x66, 0x65, 0x65, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x73, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, - 0x65, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, - 0x66, 0x65, 0x65, 0x73, 0x41, 0x6e, 0x64, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x56, - 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x48, 0x0a, 0x0f, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x78, - 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, - 0x6f, 0x58, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x48, 0x00, 0x52, 0x0c, 0x7a, 0x65, 0x72, 0x6f, 0x58, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x12, 0x67, 0x0a, 0x1a, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x75, 0x6e, - 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0d, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x53, 0x77, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, - 0x70, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, - 0x00, 0x52, 0x16, 0x73, 0x77, 0x61, 0x70, 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, - 0x61, 0x70, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x60, 0x0a, 0x17, 0x76, 0x65, 0x73, - 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, - 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, - 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x69, - 0x6d, 0x70, 0x6c, 0x65, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x0f, 0x63, - 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0f, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, - 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, - 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x73, 0x77, - 0x61, 0x70, 0x5f, 0x76, 0x33, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x10, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, - 0x33, 0x2e, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x10, 0x75, 0x6e, 0x69, - 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x94, 0x01, - 0x0a, 0x2b, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, - 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, - 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x11, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, - 0x65, 0x74, 0x41, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, - 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x24, - 0x61, 0x61, 0x76, 0x65, 0x56, 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x65, - 0x74, 0x41, 0x73, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, 0x31, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4b, 0x0a, 0x10, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, - 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, - 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x54, 0x6f, 0x6b, - 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x48, 0x00, 0x52, 0x0d, 0x66, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, - 0x73, 0x12, 0x72, 0x0a, 0x1f, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, - 0x5f, 0x76, 0x32, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, - 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, - 0x76, 0x65, 0x56, 0x32, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, - 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x19, 0x6d, 0x6f, 0x72, 0x70, - 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, - 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7b, 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, - 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, - 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, - 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, 0x54, - 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, - 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, - 0x6c, 0x73, 0x12, 0x91, 0x01, 0x0a, 0x2a, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, - 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, - 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, - 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, - 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, - 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, - 0x00, 0x52, 0x23, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, - 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, - 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7c, 0x0a, 0x23, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, - 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, - 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x16, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, - 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, - 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x50, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, - 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x70, 0x56, 0x31, 0x43, - 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7b, 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, - 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, - 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, - 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, + 0x6c, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, - 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, - 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, - 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x70, 0x6f, - 0x6f, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x42, - 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, - 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x62, 0x61, 0x6c, - 0x61, 0x6e, 0x63, 0x65, 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, - 0x42, 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x42, 0x10, 0x5a, - 0x0e, 0x2f, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x64, 0x0a, 0x19, 0x63, 0x6f, 0x6d, + 0x70, 0x6f, 0x75, 0x6e, 0x64, 0x5f, 0x63, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, + 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x73, + 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6d, 0x70, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x15, 0x63, 0x6f, 0x6d, 0x70, 0x6f, 0x75, + 0x6e, 0x64, 0x43, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, + 0x58, 0x0a, 0x15, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, + 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, + 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x11, 0x61, 0x61, 0x76, 0x65, 0x41, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x61, 0x0a, 0x18, 0x61, 0x61, 0x76, + 0x65, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x32, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, + 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x14, 0x61, 0x61, 0x76, 0x65, 0x44, 0x65, 0x62, 0x74, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x5f, 0x0a, 0x18, + 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, + 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, + 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, + 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x68, 0x0a, + 0x1b, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x16, 0x61, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4e, 0x0a, 0x11, 0x6f, 0x6e, 0x65, 0x5f, 0x69, + 0x6e, 0x63, 0x68, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0a, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, + 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, + 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0e, 0x6f, 0x6e, 0x65, 0x49, 0x6e, 0x63, 0x68, + 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x66, 0x65, 0x65, 0x73, 0x5f, + 0x61, 0x6e, 0x64, 0x5f, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x65, 0x65, 0x73, 0x41, 0x6e, 0x64, + 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, 0x66, 0x65, 0x65, 0x73, 0x41, 0x6e, + 0x64, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x73, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, + 0x12, 0x48, 0x0a, 0x0f, 0x7a, 0x65, 0x72, 0x6f, 0x5f, 0x78, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, + 0x6c, 0x6c, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x74, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x5a, 0x65, 0x72, 0x6f, 0x58, 0x41, 0x64, 0x61, 0x70, + 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0c, 0x7a, 0x65, + 0x72, 0x6f, 0x58, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x67, 0x0a, 0x1a, 0x73, 0x77, + 0x61, 0x70, 0x5f, 0x77, 0x69, 0x74, 0x68, 0x5f, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, + 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x53, 0x77, 0x61, 0x70, + 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x16, 0x73, 0x77, 0x61, + 0x70, 0x57, 0x69, 0x74, 0x68, 0x55, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x31, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x12, 0x60, 0x0a, 0x17, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, + 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0e, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, + 0x14, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x53, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x56, 0x32, + 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4a, 0x0a, 0x0f, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x5f, + 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, + 0x48, 0x00, 0x52, 0x0d, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, + 0x73, 0x12, 0x54, 0x0a, 0x13, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x5f, 0x76, 0x33, 0x5f, + 0x76, 0x32, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, + 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x55, 0x6e, 0x69, 0x73, + 0x77, 0x61, 0x70, 0x56, 0x33, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x32, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x10, 0x75, 0x6e, 0x69, 0x73, 0x77, 0x61, 0x70, 0x56, 0x33, + 0x56, 0x32, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x94, 0x01, 0x0a, 0x2b, 0x61, 0x61, 0x76, 0x65, + 0x5f, 0x76, 0x32, 0x5f, 0x65, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x61, 0x73, 0x73, 0x65, 0x74, + 0x5f, 0x61, 0x73, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x76, + 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x37, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x41, 0x61, 0x76, 0x65, 0x56, + 0x32, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x73, 0x43, 0x6f, + 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x24, 0x61, 0x61, 0x76, 0x65, 0x56, 0x32, + 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, 0x73, 0x73, 0x65, 0x74, 0x41, 0x73, 0x43, 0x6f, 0x6c, + 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x4b, + 0x0a, 0x10, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, + 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x0d, 0x66, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x72, 0x0a, 0x1f, 0x6d, + 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x32, 0x5f, 0x61, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x13, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x41, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, + 0x6c, 0x73, 0x48, 0x00, 0x52, 0x19, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, + 0x56, 0x32, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, + 0x7b, 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, + 0x32, 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, + 0x61, 0x76, 0x65, 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, + 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x32, 0x44, 0x65, 0x62, 0x74, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x91, 0x01, 0x0a, + 0x2a, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, 0x5f, + 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, + 0x61, 0x6c, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, + 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x23, 0x6d, 0x6f, 0x72, + 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x43, + 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, + 0x12, 0x7c, 0x0a, 0x23, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, + 0x76, 0x33, 0x5f, 0x61, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x70, 0x32, 0x70, 0x5f, 0x76, + 0x31, 0x5f, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, + 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x50, + 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, + 0x52, 0x1c, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x41, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x50, 0x32, 0x70, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x7b, + 0x0a, 0x22, 0x6d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x5f, 0x61, 0x61, 0x76, 0x65, 0x5f, 0x76, 0x33, + 0x5f, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, + 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4d, 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, + 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, + 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x1c, 0x6d, + 0x6f, 0x72, 0x70, 0x68, 0x6f, 0x41, 0x61, 0x76, 0x65, 0x56, 0x33, 0x44, 0x65, 0x62, 0x74, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x62, + 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x5f, 0x70, 0x6f, 0x6f, 0x6c, 0x5f, 0x76, 0x31, 0x5f, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x42, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, + 0x72, 0x50, 0x6f, 0x6f, 0x6c, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x72, 0x50, + 0x6f, 0x6f, 0x6c, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x5d, 0x0a, 0x16, 0x6c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x5f, 0x76, 0x31, 0x5f, 0x63, + 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x73, 0x74, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x65, + 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, + 0x6c, 0x73, 0x48, 0x00, 0x52, 0x13, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x58, 0x0a, 0x15, 0x64, 0x65, 0x62, + 0x74, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, + 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, + 0x52, 0x11, 0x64, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, + 0x6c, 0x6c, 0x73, 0x12, 0x6a, 0x0a, 0x1b, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x76, 0x31, 0x5f, 0x63, 0x61, 0x6c, + 0x6c, 0x73, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, + 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x48, 0x00, 0x52, 0x17, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, + 0x61, 0x6c, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x42, + 0x0b, 0x0a, 0x09, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x64, 0x61, 0x74, 0x61, 0x42, 0x10, 0x5a, 0x0e, + 0x2f, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -4836,6 +4907,9 @@ var file_cellar_v2_proto_goTypes = []interface{}{ (*MorphoAaveV3ATokenP2PAdaptorV1Calls)(nil), // 74: steward.v3.MorphoAaveV3ATokenP2PAdaptorV1Calls (*MorphoAaveV3DebtTokenAdaptorV1Calls)(nil), // 75: steward.v3.MorphoAaveV3DebtTokenAdaptorV1Calls (*BalancerPoolAdaptorV1Calls)(nil), // 76: steward.v3.BalancerPoolAdaptorV1Calls + (*LegacyCellarAdaptorV1Calls)(nil), // 77: steward.v3.LegacyCellarAdaptorV1Calls + (*DebtFTokenAdaptorV1Calls)(nil), // 78: steward.v3.DebtFTokenAdaptorV1Calls + (*CollateralFTokenAdaptorV1Calls)(nil), // 79: steward.v3.CollateralFTokenAdaptorV1Calls } var file_cellar_v2_proto_depIdxs = []int32{ 4, // 0: steward.v3.CellarV2.add_position:type_name -> steward.v3.CellarV2.AddPosition @@ -4877,50 +4951,53 @@ var file_cellar_v2_proto_depIdxs = []int32{ 74, // 36: steward.v3.AdaptorCall.morpho_aave_v3_a_token_p2p_v1_calls:type_name -> steward.v3.MorphoAaveV3ATokenP2PAdaptorV1Calls 75, // 37: steward.v3.AdaptorCall.morpho_aave_v3_debt_token_v1_calls:type_name -> steward.v3.MorphoAaveV3DebtTokenAdaptorV1Calls 76, // 38: steward.v3.AdaptorCall.balancer_pool_v1_calls:type_name -> steward.v3.BalancerPoolAdaptorV1Calls - 3, // 39: steward.v3.CellarV2.CallOnAdaptor.data:type_name -> steward.v3.AdaptorCall - 17, // 40: steward.v3.CellarV2_2.FunctionCall.add_position:type_name -> steward.v3.CellarV2_2.AddPosition - 18, // 41: steward.v3.CellarV2_2.FunctionCall.call_on_adaptor:type_name -> steward.v3.CellarV2_2.CallOnAdaptor - 19, // 42: steward.v3.CellarV2_2.FunctionCall.remove_position:type_name -> steward.v3.CellarV2_2.RemovePosition - 20, // 43: steward.v3.CellarV2_2.FunctionCall.set_holding_position:type_name -> steward.v3.CellarV2_2.SetHoldingPosition - 21, // 44: steward.v3.CellarV2_2.FunctionCall.set_strategist_payout_address:type_name -> steward.v3.CellarV2_2.SetStrategistPayoutAddress - 22, // 45: steward.v3.CellarV2_2.FunctionCall.swap_positions:type_name -> steward.v3.CellarV2_2.SwapPositions - 24, // 46: steward.v3.CellarV2_2.FunctionCall.set_rebalance_deviation:type_name -> steward.v3.CellarV2_2.SetRebalanceDeviation - 23, // 47: steward.v3.CellarV2_2.FunctionCall.set_share_lock_period:type_name -> steward.v3.CellarV2_2.SetShareLockPeriod - 25, // 48: steward.v3.CellarV2_2.FunctionCall.initiate_shutdown:type_name -> steward.v3.CellarV2_2.InitiateShutdown - 26, // 49: steward.v3.CellarV2_2.FunctionCall.set_strategist_platform_cut:type_name -> steward.v3.CellarV2_2.SetStrategistPlatformCut - 27, // 50: steward.v3.CellarV2_2.FunctionCall.lift_shutdown:type_name -> steward.v3.CellarV2_2.LiftShutdown - 28, // 51: steward.v3.CellarV2_2.FunctionCall.add_adaptor_to_catalogue:type_name -> steward.v3.CellarV2_2.AddAdaptorToCatalogue - 30, // 52: steward.v3.CellarV2_2.FunctionCall.add_position_to_catalogue:type_name -> steward.v3.CellarV2_2.AddPositionToCatalogue - 31, // 53: steward.v3.CellarV2_2.FunctionCall.remove_adaptor_from_catalogue:type_name -> steward.v3.CellarV2_2.RemoveAdaptorFromCatalogue - 32, // 54: steward.v3.CellarV2_2.FunctionCall.remove_position_from_catalogue:type_name -> steward.v3.CellarV2_2.RemovePositionFromCatalogue - 33, // 55: steward.v3.CellarV2_2.FunctionCall.cache_price_router:type_name -> steward.v3.CellarV2_2.CachePriceRouter - 3, // 56: steward.v3.CellarV2_2.CallOnAdaptor.data:type_name -> steward.v3.AdaptorCall - 16, // 57: steward.v3.CellarV2_2.Multicall.function_calls:type_name -> steward.v3.CellarV2_2.FunctionCall - 35, // 58: steward.v3.CellarV2_5.FunctionCall.add_position:type_name -> steward.v3.CellarV2_5.AddPosition - 36, // 59: steward.v3.CellarV2_5.FunctionCall.call_on_adaptor:type_name -> steward.v3.CellarV2_5.CallOnAdaptor - 37, // 60: steward.v3.CellarV2_5.FunctionCall.remove_position:type_name -> steward.v3.CellarV2_5.RemovePosition - 38, // 61: steward.v3.CellarV2_5.FunctionCall.set_holding_position:type_name -> steward.v3.CellarV2_5.SetHoldingPosition - 39, // 62: steward.v3.CellarV2_5.FunctionCall.set_strategist_payout_address:type_name -> steward.v3.CellarV2_5.SetStrategistPayoutAddress - 40, // 63: steward.v3.CellarV2_5.FunctionCall.swap_positions:type_name -> steward.v3.CellarV2_5.SwapPositions - 42, // 64: steward.v3.CellarV2_5.FunctionCall.set_rebalance_deviation:type_name -> steward.v3.CellarV2_5.SetRebalanceDeviation - 41, // 65: steward.v3.CellarV2_5.FunctionCall.set_share_lock_period:type_name -> steward.v3.CellarV2_5.SetShareLockPeriod - 43, // 66: steward.v3.CellarV2_5.FunctionCall.initiate_shutdown:type_name -> steward.v3.CellarV2_5.InitiateShutdown - 44, // 67: steward.v3.CellarV2_5.FunctionCall.set_strategist_platform_cut:type_name -> steward.v3.CellarV2_5.SetStrategistPlatformCut - 45, // 68: steward.v3.CellarV2_5.FunctionCall.lift_shutdown:type_name -> steward.v3.CellarV2_5.LiftShutdown - 46, // 69: steward.v3.CellarV2_5.FunctionCall.add_adaptor_to_catalogue:type_name -> steward.v3.CellarV2_5.AddAdaptorToCatalogue - 48, // 70: steward.v3.CellarV2_5.FunctionCall.add_position_to_catalogue:type_name -> steward.v3.CellarV2_5.AddPositionToCatalogue - 49, // 71: steward.v3.CellarV2_5.FunctionCall.remove_adaptor_from_catalogue:type_name -> steward.v3.CellarV2_5.RemoveAdaptorFromCatalogue - 50, // 72: steward.v3.CellarV2_5.FunctionCall.remove_position_from_catalogue:type_name -> steward.v3.CellarV2_5.RemovePositionFromCatalogue - 51, // 73: steward.v3.CellarV2_5.FunctionCall.increase_share_supply_cap:type_name -> steward.v3.CellarV2_5.IncreaseShareSupplyCap - 52, // 74: steward.v3.CellarV2_5.FunctionCall.decrease_share_supply_cap:type_name -> steward.v3.CellarV2_5.DecreaseShareSupplyCap - 53, // 75: steward.v3.CellarV2_5.FunctionCall.set_share_price_oracle:type_name -> steward.v3.CellarV2_5.SetSharePriceOracle - 3, // 76: steward.v3.CellarV2_5.CallOnAdaptor.data:type_name -> steward.v3.AdaptorCall - 34, // 77: steward.v3.CellarV2_5.Multicall.function_calls:type_name -> steward.v3.CellarV2_5.FunctionCall - 78, // [78:78] is the sub-list for method output_type - 78, // [78:78] is the sub-list for method input_type - 78, // [78:78] is the sub-list for extension type_name - 78, // [78:78] is the sub-list for extension extendee - 0, // [0:78] is the sub-list for field type_name + 77, // 39: steward.v3.AdaptorCall.legacy_cellar_v1_calls:type_name -> steward.v3.LegacyCellarAdaptorV1Calls + 78, // 40: steward.v3.AdaptorCall.debt_f_token_v1_calls:type_name -> steward.v3.DebtFTokenAdaptorV1Calls + 79, // 41: steward.v3.AdaptorCall.collateral_f_token_v1_calls:type_name -> steward.v3.CollateralFTokenAdaptorV1Calls + 3, // 42: steward.v3.CellarV2.CallOnAdaptor.data:type_name -> steward.v3.AdaptorCall + 17, // 43: steward.v3.CellarV2_2.FunctionCall.add_position:type_name -> steward.v3.CellarV2_2.AddPosition + 18, // 44: steward.v3.CellarV2_2.FunctionCall.call_on_adaptor:type_name -> steward.v3.CellarV2_2.CallOnAdaptor + 19, // 45: steward.v3.CellarV2_2.FunctionCall.remove_position:type_name -> steward.v3.CellarV2_2.RemovePosition + 20, // 46: steward.v3.CellarV2_2.FunctionCall.set_holding_position:type_name -> steward.v3.CellarV2_2.SetHoldingPosition + 21, // 47: steward.v3.CellarV2_2.FunctionCall.set_strategist_payout_address:type_name -> steward.v3.CellarV2_2.SetStrategistPayoutAddress + 22, // 48: steward.v3.CellarV2_2.FunctionCall.swap_positions:type_name -> steward.v3.CellarV2_2.SwapPositions + 24, // 49: steward.v3.CellarV2_2.FunctionCall.set_rebalance_deviation:type_name -> steward.v3.CellarV2_2.SetRebalanceDeviation + 23, // 50: steward.v3.CellarV2_2.FunctionCall.set_share_lock_period:type_name -> steward.v3.CellarV2_2.SetShareLockPeriod + 25, // 51: steward.v3.CellarV2_2.FunctionCall.initiate_shutdown:type_name -> steward.v3.CellarV2_2.InitiateShutdown + 26, // 52: steward.v3.CellarV2_2.FunctionCall.set_strategist_platform_cut:type_name -> steward.v3.CellarV2_2.SetStrategistPlatformCut + 27, // 53: steward.v3.CellarV2_2.FunctionCall.lift_shutdown:type_name -> steward.v3.CellarV2_2.LiftShutdown + 28, // 54: steward.v3.CellarV2_2.FunctionCall.add_adaptor_to_catalogue:type_name -> steward.v3.CellarV2_2.AddAdaptorToCatalogue + 30, // 55: steward.v3.CellarV2_2.FunctionCall.add_position_to_catalogue:type_name -> steward.v3.CellarV2_2.AddPositionToCatalogue + 31, // 56: steward.v3.CellarV2_2.FunctionCall.remove_adaptor_from_catalogue:type_name -> steward.v3.CellarV2_2.RemoveAdaptorFromCatalogue + 32, // 57: steward.v3.CellarV2_2.FunctionCall.remove_position_from_catalogue:type_name -> steward.v3.CellarV2_2.RemovePositionFromCatalogue + 33, // 58: steward.v3.CellarV2_2.FunctionCall.cache_price_router:type_name -> steward.v3.CellarV2_2.CachePriceRouter + 3, // 59: steward.v3.CellarV2_2.CallOnAdaptor.data:type_name -> steward.v3.AdaptorCall + 16, // 60: steward.v3.CellarV2_2.Multicall.function_calls:type_name -> steward.v3.CellarV2_2.FunctionCall + 35, // 61: steward.v3.CellarV2_5.FunctionCall.add_position:type_name -> steward.v3.CellarV2_5.AddPosition + 36, // 62: steward.v3.CellarV2_5.FunctionCall.call_on_adaptor:type_name -> steward.v3.CellarV2_5.CallOnAdaptor + 37, // 63: steward.v3.CellarV2_5.FunctionCall.remove_position:type_name -> steward.v3.CellarV2_5.RemovePosition + 38, // 64: steward.v3.CellarV2_5.FunctionCall.set_holding_position:type_name -> steward.v3.CellarV2_5.SetHoldingPosition + 39, // 65: steward.v3.CellarV2_5.FunctionCall.set_strategist_payout_address:type_name -> steward.v3.CellarV2_5.SetStrategistPayoutAddress + 40, // 66: steward.v3.CellarV2_5.FunctionCall.swap_positions:type_name -> steward.v3.CellarV2_5.SwapPositions + 42, // 67: steward.v3.CellarV2_5.FunctionCall.set_rebalance_deviation:type_name -> steward.v3.CellarV2_5.SetRebalanceDeviation + 41, // 68: steward.v3.CellarV2_5.FunctionCall.set_share_lock_period:type_name -> steward.v3.CellarV2_5.SetShareLockPeriod + 43, // 69: steward.v3.CellarV2_5.FunctionCall.initiate_shutdown:type_name -> steward.v3.CellarV2_5.InitiateShutdown + 44, // 70: steward.v3.CellarV2_5.FunctionCall.set_strategist_platform_cut:type_name -> steward.v3.CellarV2_5.SetStrategistPlatformCut + 45, // 71: steward.v3.CellarV2_5.FunctionCall.lift_shutdown:type_name -> steward.v3.CellarV2_5.LiftShutdown + 46, // 72: steward.v3.CellarV2_5.FunctionCall.add_adaptor_to_catalogue:type_name -> steward.v3.CellarV2_5.AddAdaptorToCatalogue + 48, // 73: steward.v3.CellarV2_5.FunctionCall.add_position_to_catalogue:type_name -> steward.v3.CellarV2_5.AddPositionToCatalogue + 49, // 74: steward.v3.CellarV2_5.FunctionCall.remove_adaptor_from_catalogue:type_name -> steward.v3.CellarV2_5.RemoveAdaptorFromCatalogue + 50, // 75: steward.v3.CellarV2_5.FunctionCall.remove_position_from_catalogue:type_name -> steward.v3.CellarV2_5.RemovePositionFromCatalogue + 51, // 76: steward.v3.CellarV2_5.FunctionCall.increase_share_supply_cap:type_name -> steward.v3.CellarV2_5.IncreaseShareSupplyCap + 52, // 77: steward.v3.CellarV2_5.FunctionCall.decrease_share_supply_cap:type_name -> steward.v3.CellarV2_5.DecreaseShareSupplyCap + 53, // 78: steward.v3.CellarV2_5.FunctionCall.set_share_price_oracle:type_name -> steward.v3.CellarV2_5.SetSharePriceOracle + 3, // 79: steward.v3.CellarV2_5.CallOnAdaptor.data:type_name -> steward.v3.AdaptorCall + 34, // 80: steward.v3.CellarV2_5.Multicall.function_calls:type_name -> steward.v3.CellarV2_5.FunctionCall + 81, // [81:81] is the sub-list for method output_type + 81, // [81:81] is the sub-list for method input_type + 81, // [81:81] is the sub-list for extension type_name + 81, // [81:81] is the sub-list for extension extendee + 0, // [0:81] is the sub-list for field type_name } func init() { file_cellar_v2_proto_init() } @@ -4948,6 +5025,9 @@ func file_cellar_v2_proto_init() { file_adaptors_vesting_simple_proto_init() file_adaptors_sommelier_cellar_adaptor_proto_init() file_adaptors_aave_aave_v2_enable_asset_as_collateral_adaptor_proto_init() + file_adaptors_sommelier_legacy_cellar_adaptor_proto_init() + file_adaptors_frax_debt_f_token_proto_init() + file_adaptors_frax_collateral_f_token_proto_init() if !protoimpl.UnsafeEnabled { file_cellar_v2_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*CellarV2); i { @@ -5644,6 +5724,9 @@ func file_cellar_v2_proto_init() { (*AdaptorCall_MorphoAaveV3ATokenP2PV1Calls)(nil), (*AdaptorCall_MorphoAaveV3DebtTokenV1Calls)(nil), (*AdaptorCall_BalancerPoolV1Calls)(nil), + (*AdaptorCall_LegacyCellarV1Calls)(nil), + (*AdaptorCall_DebtFTokenV1Calls)(nil), + (*AdaptorCall_CollateralFTokenV1Calls)(nil), } file_cellar_v2_proto_msgTypes[16].OneofWrappers = []interface{}{ (*CellarV2_2_FunctionCall_AddPosition)(nil), diff --git a/steward_proto_go/steward_proto/collateral_f_token.pb.go b/steward_proto_go/steward_proto/collateral_f_token.pb.go new file mode 100644 index 00000000..033f17b7 --- /dev/null +++ b/steward_proto_go/steward_proto/collateral_f_token.pb.go @@ -0,0 +1,454 @@ +// +// Protos for function calls to the Frax Collateral F Token adaptor. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.12 +// source: adaptors/frax/collateral_f_token.proto + +package steward_proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Represents call data for the Frax Collateral F Token adaptor. +type CollateralFTokenAdaptorV1 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Function: + // *CollateralFTokenAdaptorV1_RevokeApproval + // *CollateralFTokenAdaptorV1_AddCollateral_ + // *CollateralFTokenAdaptorV1_RemoveCollateral_ + Function isCollateralFTokenAdaptorV1_Function `protobuf_oneof:"function"` +} + +func (x *CollateralFTokenAdaptorV1) Reset() { + *x = CollateralFTokenAdaptorV1{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CollateralFTokenAdaptorV1) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CollateralFTokenAdaptorV1) ProtoMessage() {} + +func (x *CollateralFTokenAdaptorV1) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CollateralFTokenAdaptorV1.ProtoReflect.Descriptor instead. +func (*CollateralFTokenAdaptorV1) Descriptor() ([]byte, []int) { + return file_adaptors_frax_collateral_f_token_proto_rawDescGZIP(), []int{0} +} + +func (m *CollateralFTokenAdaptorV1) GetFunction() isCollateralFTokenAdaptorV1_Function { + if m != nil { + return m.Function + } + return nil +} + +func (x *CollateralFTokenAdaptorV1) GetRevokeApproval() *RevokeApproval { + if x, ok := x.GetFunction().(*CollateralFTokenAdaptorV1_RevokeApproval); ok { + return x.RevokeApproval + } + return nil +} + +func (x *CollateralFTokenAdaptorV1) GetAddCollateral() *CollateralFTokenAdaptorV1_AddCollateral { + if x, ok := x.GetFunction().(*CollateralFTokenAdaptorV1_AddCollateral_); ok { + return x.AddCollateral + } + return nil +} + +func (x *CollateralFTokenAdaptorV1) GetRemoveCollateral() *CollateralFTokenAdaptorV1_RemoveCollateral { + if x, ok := x.GetFunction().(*CollateralFTokenAdaptorV1_RemoveCollateral_); ok { + return x.RemoveCollateral + } + return nil +} + +type isCollateralFTokenAdaptorV1_Function interface { + isCollateralFTokenAdaptorV1_Function() +} + +type CollateralFTokenAdaptorV1_RevokeApproval struct { + // Represents function `revokeApproval(ERC20 asset, address spender)` + RevokeApproval *RevokeApproval `protobuf:"bytes,1,opt,name=revoke_approval,json=revokeApproval,proto3,oneof"` +} + +type CollateralFTokenAdaptorV1_AddCollateral_ struct { + // Represents function `addCollateral(IFToken _fraxlendPair, uint256 _collateralToDeposit)` + AddCollateral *CollateralFTokenAdaptorV1_AddCollateral `protobuf:"bytes,2,opt,name=add_collateral,json=addCollateral,proto3,oneof"` +} + +type CollateralFTokenAdaptorV1_RemoveCollateral_ struct { + // Represents function `removeCollateral(uint256 _collateralAmount, IFToken _fraxlendPair)` + RemoveCollateral *CollateralFTokenAdaptorV1_RemoveCollateral `protobuf:"bytes,3,opt,name=remove_collateral,json=removeCollateral,proto3,oneof"` +} + +func (*CollateralFTokenAdaptorV1_RevokeApproval) isCollateralFTokenAdaptorV1_Function() {} + +func (*CollateralFTokenAdaptorV1_AddCollateral_) isCollateralFTokenAdaptorV1_Function() {} + +func (*CollateralFTokenAdaptorV1_RemoveCollateral_) isCollateralFTokenAdaptorV1_Function() {} + +type CollateralFTokenAdaptorV1Calls struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Calls []*CollateralFTokenAdaptorV1 `protobuf:"bytes,1,rep,name=calls,proto3" json:"calls,omitempty"` +} + +func (x *CollateralFTokenAdaptorV1Calls) Reset() { + *x = CollateralFTokenAdaptorV1Calls{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CollateralFTokenAdaptorV1Calls) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CollateralFTokenAdaptorV1Calls) ProtoMessage() {} + +func (x *CollateralFTokenAdaptorV1Calls) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CollateralFTokenAdaptorV1Calls.ProtoReflect.Descriptor instead. +func (*CollateralFTokenAdaptorV1Calls) Descriptor() ([]byte, []int) { + return file_adaptors_frax_collateral_f_token_proto_rawDescGZIP(), []int{1} +} + +func (x *CollateralFTokenAdaptorV1Calls) GetCalls() []*CollateralFTokenAdaptorV1 { + if x != nil { + return x.Calls + } + return nil +} + +// +// Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing. +// +// Represents function `addCollateral(IFToken _fraxlendPair, uint256 _collateralToDeposit)` +type CollateralFTokenAdaptorV1_AddCollateral struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The FraxLend pair to add collateral to. + FraxlendPair string `protobuf:"bytes,1,opt,name=fraxlend_pair,json=fraxlendPair,proto3" json:"fraxlend_pair,omitempty"` + // The amount of collateral to add to the cellar position. + CollateralToDeposit string `protobuf:"bytes,2,opt,name=collateral_to_deposit,json=collateralToDeposit,proto3" json:"collateral_to_deposit,omitempty"` +} + +func (x *CollateralFTokenAdaptorV1_AddCollateral) Reset() { + *x = CollateralFTokenAdaptorV1_AddCollateral{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CollateralFTokenAdaptorV1_AddCollateral) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CollateralFTokenAdaptorV1_AddCollateral) ProtoMessage() {} + +func (x *CollateralFTokenAdaptorV1_AddCollateral) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CollateralFTokenAdaptorV1_AddCollateral.ProtoReflect.Descriptor instead. +func (*CollateralFTokenAdaptorV1_AddCollateral) Descriptor() ([]byte, []int) { + return file_adaptors_frax_collateral_f_token_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *CollateralFTokenAdaptorV1_AddCollateral) GetFraxlendPair() string { + if x != nil { + return x.FraxlendPair + } + return "" +} + +func (x *CollateralFTokenAdaptorV1_AddCollateral) GetCollateralToDeposit() string { + if x != nil { + return x.CollateralToDeposit + } + return "" +} + +// +// Allows strategists to remove collateral from the respective cellar position on FraxLend. +// +// Represents function `removeCollateral(uint256 _collateralAmount, IFToken _fraxlendPair)` +type CollateralFTokenAdaptorV1_RemoveCollateral struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The amount of collateral to remove from the cellar position. + CollateralAmount string `protobuf:"bytes,1,opt,name=collateral_amount,json=collateralAmount,proto3" json:"collateral_amount,omitempty"` + // The FraxLend pair to remove collateral from. + FraxlendPair string `protobuf:"bytes,2,opt,name=fraxlend_pair,json=fraxlendPair,proto3" json:"fraxlend_pair,omitempty"` +} + +func (x *CollateralFTokenAdaptorV1_RemoveCollateral) Reset() { + *x = CollateralFTokenAdaptorV1_RemoveCollateral{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *CollateralFTokenAdaptorV1_RemoveCollateral) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CollateralFTokenAdaptorV1_RemoveCollateral) ProtoMessage() {} + +func (x *CollateralFTokenAdaptorV1_RemoveCollateral) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_collateral_f_token_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CollateralFTokenAdaptorV1_RemoveCollateral.ProtoReflect.Descriptor instead. +func (*CollateralFTokenAdaptorV1_RemoveCollateral) Descriptor() ([]byte, []int) { + return file_adaptors_frax_collateral_f_token_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *CollateralFTokenAdaptorV1_RemoveCollateral) GetCollateralAmount() string { + if x != nil { + return x.CollateralAmount + } + return "" +} + +func (x *CollateralFTokenAdaptorV1_RemoveCollateral) GetFraxlendPair() string { + if x != nil { + return x.FraxlendPair + } + return "" +} + +var File_adaptors_frax_collateral_f_token_proto protoreflect.FileDescriptor + +var file_adaptors_frax_collateral_f_token_proto_rawDesc = []byte{ + 0x0a, 0x26, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x66, 0x72, 0x61, 0x78, 0x2f, + 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0a, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x76, 0x33, 0x1a, 0x13, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x62, + 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x83, 0x04, 0x0a, 0x19, 0x43, 0x6f, + 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x12, 0x45, 0x0a, 0x0f, 0x72, 0x65, 0x76, 0x6f, 0x6b, + 0x65, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x52, 0x65, + 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0e, + 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x5c, + 0x0a, 0x0e, 0x61, 0x64, 0x64, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x33, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x54, + 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x41, 0x64, + 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, 0x00, 0x52, 0x0d, 0x61, + 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x12, 0x65, 0x0a, 0x11, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x5f, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x46, + 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x48, + 0x00, 0x52, 0x10, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, + 0x72, 0x61, 0x6c, 0x1a, 0x68, 0x0a, 0x0d, 0x41, 0x64, 0x64, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, + 0x65, 0x72, 0x61, 0x6c, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, + 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x61, + 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x69, 0x72, 0x12, 0x32, 0x0a, 0x15, 0x63, 0x6f, 0x6c, + 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x65, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x13, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, + 0x65, 0x72, 0x61, 0x6c, 0x54, 0x6f, 0x44, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x1a, 0x64, 0x0a, + 0x10, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, + 0x6c, 0x12, 0x2b, 0x0a, 0x11, 0x63, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x5f, + 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x10, 0x63, 0x6f, + 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x41, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x12, 0x23, + 0x0a, 0x0d, 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x50, + 0x61, 0x69, 0x72, 0x42, 0x0a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, + 0x5d, 0x0a, 0x1e, 0x43, 0x6f, 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, + 0x73, 0x12, 0x3b, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, + 0x32, 0x25, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x43, 0x6f, + 0x6c, 0x6c, 0x61, 0x74, 0x65, 0x72, 0x61, 0x6c, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x10, + 0x5a, 0x0e, 0x2f, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_adaptors_frax_collateral_f_token_proto_rawDescOnce sync.Once + file_adaptors_frax_collateral_f_token_proto_rawDescData = file_adaptors_frax_collateral_f_token_proto_rawDesc +) + +func file_adaptors_frax_collateral_f_token_proto_rawDescGZIP() []byte { + file_adaptors_frax_collateral_f_token_proto_rawDescOnce.Do(func() { + file_adaptors_frax_collateral_f_token_proto_rawDescData = protoimpl.X.CompressGZIP(file_adaptors_frax_collateral_f_token_proto_rawDescData) + }) + return file_adaptors_frax_collateral_f_token_proto_rawDescData +} + +var file_adaptors_frax_collateral_f_token_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_adaptors_frax_collateral_f_token_proto_goTypes = []interface{}{ + (*CollateralFTokenAdaptorV1)(nil), // 0: steward.v3.CollateralFTokenAdaptorV1 + (*CollateralFTokenAdaptorV1Calls)(nil), // 1: steward.v3.CollateralFTokenAdaptorV1Calls + (*CollateralFTokenAdaptorV1_AddCollateral)(nil), // 2: steward.v3.CollateralFTokenAdaptorV1.AddCollateral + (*CollateralFTokenAdaptorV1_RemoveCollateral)(nil), // 3: steward.v3.CollateralFTokenAdaptorV1.RemoveCollateral + (*RevokeApproval)(nil), // 4: steward.v3.RevokeApproval +} +var file_adaptors_frax_collateral_f_token_proto_depIdxs = []int32{ + 4, // 0: steward.v3.CollateralFTokenAdaptorV1.revoke_approval:type_name -> steward.v3.RevokeApproval + 2, // 1: steward.v3.CollateralFTokenAdaptorV1.add_collateral:type_name -> steward.v3.CollateralFTokenAdaptorV1.AddCollateral + 3, // 2: steward.v3.CollateralFTokenAdaptorV1.remove_collateral:type_name -> steward.v3.CollateralFTokenAdaptorV1.RemoveCollateral + 0, // 3: steward.v3.CollateralFTokenAdaptorV1Calls.calls:type_name -> steward.v3.CollateralFTokenAdaptorV1 + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_adaptors_frax_collateral_f_token_proto_init() } +func file_adaptors_frax_collateral_f_token_proto_init() { + if File_adaptors_frax_collateral_f_token_proto != nil { + return + } + file_adaptors_base_proto_init() + if !protoimpl.UnsafeEnabled { + file_adaptors_frax_collateral_f_token_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CollateralFTokenAdaptorV1); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_frax_collateral_f_token_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CollateralFTokenAdaptorV1Calls); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_frax_collateral_f_token_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CollateralFTokenAdaptorV1_AddCollateral); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_frax_collateral_f_token_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*CollateralFTokenAdaptorV1_RemoveCollateral); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_adaptors_frax_collateral_f_token_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*CollateralFTokenAdaptorV1_RevokeApproval)(nil), + (*CollateralFTokenAdaptorV1_AddCollateral_)(nil), + (*CollateralFTokenAdaptorV1_RemoveCollateral_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_adaptors_frax_collateral_f_token_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_adaptors_frax_collateral_f_token_proto_goTypes, + DependencyIndexes: file_adaptors_frax_collateral_f_token_proto_depIdxs, + MessageInfos: file_adaptors_frax_collateral_f_token_proto_msgTypes, + }.Build() + File_adaptors_frax_collateral_f_token_proto = out.File + file_adaptors_frax_collateral_f_token_proto_rawDesc = nil + file_adaptors_frax_collateral_f_token_proto_goTypes = nil + file_adaptors_frax_collateral_f_token_proto_depIdxs = nil +} diff --git a/steward_proto_go/steward_proto/debt_f_token.pb.go b/steward_proto_go/steward_proto/debt_f_token.pb.go new file mode 100644 index 00000000..9fd73301 --- /dev/null +++ b/steward_proto_go/steward_proto/debt_f_token.pb.go @@ -0,0 +1,546 @@ +// +// Protos for function calls to the Frax Debt F Token adaptor. + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.12 +// source: adaptors/frax/debt_f_token.proto + +package steward_proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// Represents call data for the Frax adaptor. +type DebtFTokenAdaptorV1 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Function: + // *DebtFTokenAdaptorV1_RevokeApproval + // *DebtFTokenAdaptorV1_BorrowFromFraxlend_ + // *DebtFTokenAdaptorV1_RepayFraxlendDebt_ + // *DebtFTokenAdaptorV1_CallAddInterest_ + Function isDebtFTokenAdaptorV1_Function `protobuf_oneof:"function"` +} + +func (x *DebtFTokenAdaptorV1) Reset() { + *x = DebtFTokenAdaptorV1{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebtFTokenAdaptorV1) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebtFTokenAdaptorV1) ProtoMessage() {} + +func (x *DebtFTokenAdaptorV1) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebtFTokenAdaptorV1.ProtoReflect.Descriptor instead. +func (*DebtFTokenAdaptorV1) Descriptor() ([]byte, []int) { + return file_adaptors_frax_debt_f_token_proto_rawDescGZIP(), []int{0} +} + +func (m *DebtFTokenAdaptorV1) GetFunction() isDebtFTokenAdaptorV1_Function { + if m != nil { + return m.Function + } + return nil +} + +func (x *DebtFTokenAdaptorV1) GetRevokeApproval() *RevokeApproval { + if x, ok := x.GetFunction().(*DebtFTokenAdaptorV1_RevokeApproval); ok { + return x.RevokeApproval + } + return nil +} + +func (x *DebtFTokenAdaptorV1) GetBorrowFromFraxlend() *DebtFTokenAdaptorV1_BorrowFromFraxlend { + if x, ok := x.GetFunction().(*DebtFTokenAdaptorV1_BorrowFromFraxlend_); ok { + return x.BorrowFromFraxlend + } + return nil +} + +func (x *DebtFTokenAdaptorV1) GetRepayFraxlendDebt() *DebtFTokenAdaptorV1_RepayFraxlendDebt { + if x, ok := x.GetFunction().(*DebtFTokenAdaptorV1_RepayFraxlendDebt_); ok { + return x.RepayFraxlendDebt + } + return nil +} + +func (x *DebtFTokenAdaptorV1) GetCallAddInterest() *DebtFTokenAdaptorV1_CallAddInterest { + if x, ok := x.GetFunction().(*DebtFTokenAdaptorV1_CallAddInterest_); ok { + return x.CallAddInterest + } + return nil +} + +type isDebtFTokenAdaptorV1_Function interface { + isDebtFTokenAdaptorV1_Function() +} + +type DebtFTokenAdaptorV1_RevokeApproval struct { + // Represents function `revokeApproval(ERC20 asset, address spender)` + RevokeApproval *RevokeApproval `protobuf:"bytes,1,opt,name=revoke_approval,json=revokeApproval,proto3,oneof"` +} + +type DebtFTokenAdaptorV1_BorrowFromFraxlend_ struct { + // Represents function `borrowFromFraxlend(IFToken fraxlendPair, uint256 amountToBorrow)` + BorrowFromFraxlend *DebtFTokenAdaptorV1_BorrowFromFraxlend `protobuf:"bytes,2,opt,name=borrow_from_fraxlend,json=borrowFromFraxlend,proto3,oneof"` +} + +type DebtFTokenAdaptorV1_RepayFraxlendDebt_ struct { + // Represents function `repayFraxlendDebt(IFToken _fraxlendPair, uint256 _debtTokenRepayAmount)` + RepayFraxlendDebt *DebtFTokenAdaptorV1_RepayFraxlendDebt `protobuf:"bytes,3,opt,name=repay_fraxlend_debt,json=repayFraxlendDebt,proto3,oneof"` +} + +type DebtFTokenAdaptorV1_CallAddInterest_ struct { + // Represents function `callAddInterest(IFToken _fraxlendPair)` + CallAddInterest *DebtFTokenAdaptorV1_CallAddInterest `protobuf:"bytes,4,opt,name=call_add_interest,json=callAddInterest,proto3,oneof"` +} + +func (*DebtFTokenAdaptorV1_RevokeApproval) isDebtFTokenAdaptorV1_Function() {} + +func (*DebtFTokenAdaptorV1_BorrowFromFraxlend_) isDebtFTokenAdaptorV1_Function() {} + +func (*DebtFTokenAdaptorV1_RepayFraxlendDebt_) isDebtFTokenAdaptorV1_Function() {} + +func (*DebtFTokenAdaptorV1_CallAddInterest_) isDebtFTokenAdaptorV1_Function() {} + +type DebtFTokenAdaptorV1Calls struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Calls []*DebtFTokenAdaptorV1 `protobuf:"bytes,1,rep,name=calls,proto3" json:"calls,omitempty"` +} + +func (x *DebtFTokenAdaptorV1Calls) Reset() { + *x = DebtFTokenAdaptorV1Calls{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebtFTokenAdaptorV1Calls) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebtFTokenAdaptorV1Calls) ProtoMessage() {} + +func (x *DebtFTokenAdaptorV1Calls) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebtFTokenAdaptorV1Calls.ProtoReflect.Descriptor instead. +func (*DebtFTokenAdaptorV1Calls) Descriptor() ([]byte, []int) { + return file_adaptors_frax_debt_f_token_proto_rawDescGZIP(), []int{1} +} + +func (x *DebtFTokenAdaptorV1Calls) GetCalls() []*DebtFTokenAdaptorV1 { + if x != nil { + return x.Calls + } + return nil +} + +// +// Allows a strategist to borrow assets from Fraxlend +// +// Represents `function borrowFromFraxlend(IFToken fraxlendPair, uint256 amountToBorrow)` +type DebtFTokenAdaptorV1_BorrowFromFraxlend struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The address of the Frax Pair to borrow from. + FraxlendPair string `protobuf:"bytes,1,opt,name=fraxlend_pair,json=fraxlendPair,proto3" json:"fraxlend_pair,omitempty"` + // The amount of the asset to borrow. + AmountToBorrow string `protobuf:"bytes,2,opt,name=amount_to_borrow,json=amountToBorrow,proto3" json:"amount_to_borrow,omitempty"` +} + +func (x *DebtFTokenAdaptorV1_BorrowFromFraxlend) Reset() { + *x = DebtFTokenAdaptorV1_BorrowFromFraxlend{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebtFTokenAdaptorV1_BorrowFromFraxlend) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebtFTokenAdaptorV1_BorrowFromFraxlend) ProtoMessage() {} + +func (x *DebtFTokenAdaptorV1_BorrowFromFraxlend) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebtFTokenAdaptorV1_BorrowFromFraxlend.ProtoReflect.Descriptor instead. +func (*DebtFTokenAdaptorV1_BorrowFromFraxlend) Descriptor() ([]byte, []int) { + return file_adaptors_frax_debt_f_token_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *DebtFTokenAdaptorV1_BorrowFromFraxlend) GetFraxlendPair() string { + if x != nil { + return x.FraxlendPair + } + return "" +} + +func (x *DebtFTokenAdaptorV1_BorrowFromFraxlend) GetAmountToBorrow() string { + if x != nil { + return x.AmountToBorrow + } + return "" +} + +// +// Allows strategists to repay loan debt on Fraxlend Pair. +// Make sure to call addInterest() beforehand to ensure we are repaying what is required. +// +// Represents `function repayFraxlendDebt(IFToken _fraxlendPair, uint256 _debtTokenRepayAmount)` +type DebtFTokenAdaptorV1_RepayFraxlendDebt struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The address of the Frax Pair to repay debt on. + FraxlendPair string `protobuf:"bytes,1,opt,name=fraxlend_pair,json=fraxlendPair,proto3" json:"fraxlend_pair,omitempty"` + // The amount of the debt token to repay. + DebtTokenRepayAmount string `protobuf:"bytes,2,opt,name=debt_token_repay_amount,json=debtTokenRepayAmount,proto3" json:"debt_token_repay_amount,omitempty"` +} + +func (x *DebtFTokenAdaptorV1_RepayFraxlendDebt) Reset() { + *x = DebtFTokenAdaptorV1_RepayFraxlendDebt{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebtFTokenAdaptorV1_RepayFraxlendDebt) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebtFTokenAdaptorV1_RepayFraxlendDebt) ProtoMessage() {} + +func (x *DebtFTokenAdaptorV1_RepayFraxlendDebt) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebtFTokenAdaptorV1_RepayFraxlendDebt.ProtoReflect.Descriptor instead. +func (*DebtFTokenAdaptorV1_RepayFraxlendDebt) Descriptor() ([]byte, []int) { + return file_adaptors_frax_debt_f_token_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *DebtFTokenAdaptorV1_RepayFraxlendDebt) GetFraxlendPair() string { + if x != nil { + return x.FraxlendPair + } + return "" +} + +func (x *DebtFTokenAdaptorV1_RepayFraxlendDebt) GetDebtTokenRepayAmount() string { + if x != nil { + return x.DebtTokenRepayAmount + } + return "" +} + +// +// Allows a strategist to call `addInterest` on a Frax Pair they are using +// +// Represents `function callAddInterest(IFToken _fraxlendPair)` +type DebtFTokenAdaptorV1_CallAddInterest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The address of the pair to call addInterest on. + FraxlendPair string `protobuf:"bytes,1,opt,name=fraxlend_pair,json=fraxlendPair,proto3" json:"fraxlend_pair,omitempty"` +} + +func (x *DebtFTokenAdaptorV1_CallAddInterest) Reset() { + *x = DebtFTokenAdaptorV1_CallAddInterest{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *DebtFTokenAdaptorV1_CallAddInterest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DebtFTokenAdaptorV1_CallAddInterest) ProtoMessage() {} + +func (x *DebtFTokenAdaptorV1_CallAddInterest) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_frax_debt_f_token_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DebtFTokenAdaptorV1_CallAddInterest.ProtoReflect.Descriptor instead. +func (*DebtFTokenAdaptorV1_CallAddInterest) Descriptor() ([]byte, []int) { + return file_adaptors_frax_debt_f_token_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *DebtFTokenAdaptorV1_CallAddInterest) GetFraxlendPair() string { + if x != nil { + return x.FraxlendPair + } + return "" +} + +var File_adaptors_frax_debt_f_token_proto protoreflect.FileDescriptor + +var file_adaptors_frax_debt_f_token_proto_rawDesc = []byte{ + 0x0a, 0x20, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x66, 0x72, 0x61, 0x78, 0x2f, + 0x64, 0x65, 0x62, 0x74, 0x5f, 0x66, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x12, 0x0a, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x1a, 0x13, + 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x22, 0xa2, 0x05, 0x0a, 0x13, 0x44, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x12, 0x45, 0x0a, 0x0f, 0x72, + 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x12, 0x66, 0x0a, 0x14, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x5f, 0x66, 0x72, 0x6f, + 0x6d, 0x5f, 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x32, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, + 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, + 0x31, 0x2e, 0x42, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x78, + 0x6c, 0x65, 0x6e, 0x64, 0x48, 0x00, 0x52, 0x12, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, + 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x12, 0x63, 0x0a, 0x13, 0x72, 0x65, + 0x70, 0x61, 0x79, 0x5f, 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x5f, 0x64, 0x65, 0x62, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, + 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x52, 0x65, 0x70, 0x61, 0x79, 0x46, 0x72, + 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x62, 0x74, 0x48, 0x00, 0x52, 0x11, 0x72, 0x65, + 0x70, 0x61, 0x79, 0x46, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x62, 0x74, 0x12, + 0x5d, 0x0a, 0x11, 0x63, 0x61, 0x6c, 0x6c, 0x5f, 0x61, 0x64, 0x64, 0x5f, 0x69, 0x6e, 0x74, 0x65, + 0x72, 0x65, 0x73, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x73, 0x74, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x44, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, + 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x43, 0x61, 0x6c, 0x6c, + 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x48, 0x00, 0x52, 0x0f, 0x63, + 0x61, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x1a, 0x63, + 0x0a, 0x12, 0x42, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x46, 0x72, 0x61, 0x78, + 0x6c, 0x65, 0x6e, 0x64, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, + 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x66, 0x72, 0x61, + 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x69, 0x72, 0x12, 0x28, 0x0a, 0x10, 0x61, 0x6d, 0x6f, + 0x75, 0x6e, 0x74, 0x5f, 0x74, 0x6f, 0x5f, 0x62, 0x6f, 0x72, 0x72, 0x6f, 0x77, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x54, 0x6f, 0x42, 0x6f, 0x72, + 0x72, 0x6f, 0x77, 0x1a, 0x6f, 0x0a, 0x11, 0x52, 0x65, 0x70, 0x61, 0x79, 0x46, 0x72, 0x61, 0x78, + 0x6c, 0x65, 0x6e, 0x64, 0x44, 0x65, 0x62, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x61, 0x78, + 0x6c, 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x0c, 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x69, 0x72, 0x12, 0x35, 0x0a, + 0x17, 0x64, 0x65, 0x62, 0x74, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x61, + 0x79, 0x5f, 0x61, 0x6d, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, + 0x64, 0x65, 0x62, 0x74, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x52, 0x65, 0x70, 0x61, 0x79, 0x41, 0x6d, + 0x6f, 0x75, 0x6e, 0x74, 0x1a, 0x36, 0x0a, 0x0f, 0x43, 0x61, 0x6c, 0x6c, 0x41, 0x64, 0x64, 0x49, + 0x6e, 0x74, 0x65, 0x72, 0x65, 0x73, 0x74, 0x12, 0x23, 0x0a, 0x0d, 0x66, 0x72, 0x61, 0x78, 0x6c, + 0x65, 0x6e, 0x64, 0x5f, 0x70, 0x61, 0x69, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, + 0x66, 0x72, 0x61, 0x78, 0x6c, 0x65, 0x6e, 0x64, 0x50, 0x61, 0x69, 0x72, 0x42, 0x0a, 0x0a, 0x08, + 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x51, 0x0a, 0x18, 0x44, 0x65, 0x62, 0x74, + 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, + 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x35, 0x0a, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, + 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, + 0x2e, 0x44, 0x65, 0x62, 0x74, 0x46, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x41, 0x64, 0x61, 0x70, 0x74, + 0x6f, 0x72, 0x56, 0x31, 0x52, 0x05, 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x10, 0x5a, 0x0e, 0x2f, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_adaptors_frax_debt_f_token_proto_rawDescOnce sync.Once + file_adaptors_frax_debt_f_token_proto_rawDescData = file_adaptors_frax_debt_f_token_proto_rawDesc +) + +func file_adaptors_frax_debt_f_token_proto_rawDescGZIP() []byte { + file_adaptors_frax_debt_f_token_proto_rawDescOnce.Do(func() { + file_adaptors_frax_debt_f_token_proto_rawDescData = protoimpl.X.CompressGZIP(file_adaptors_frax_debt_f_token_proto_rawDescData) + }) + return file_adaptors_frax_debt_f_token_proto_rawDescData +} + +var file_adaptors_frax_debt_f_token_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_adaptors_frax_debt_f_token_proto_goTypes = []interface{}{ + (*DebtFTokenAdaptorV1)(nil), // 0: steward.v3.DebtFTokenAdaptorV1 + (*DebtFTokenAdaptorV1Calls)(nil), // 1: steward.v3.DebtFTokenAdaptorV1Calls + (*DebtFTokenAdaptorV1_BorrowFromFraxlend)(nil), // 2: steward.v3.DebtFTokenAdaptorV1.BorrowFromFraxlend + (*DebtFTokenAdaptorV1_RepayFraxlendDebt)(nil), // 3: steward.v3.DebtFTokenAdaptorV1.RepayFraxlendDebt + (*DebtFTokenAdaptorV1_CallAddInterest)(nil), // 4: steward.v3.DebtFTokenAdaptorV1.CallAddInterest + (*RevokeApproval)(nil), // 5: steward.v3.RevokeApproval +} +var file_adaptors_frax_debt_f_token_proto_depIdxs = []int32{ + 5, // 0: steward.v3.DebtFTokenAdaptorV1.revoke_approval:type_name -> steward.v3.RevokeApproval + 2, // 1: steward.v3.DebtFTokenAdaptorV1.borrow_from_fraxlend:type_name -> steward.v3.DebtFTokenAdaptorV1.BorrowFromFraxlend + 3, // 2: steward.v3.DebtFTokenAdaptorV1.repay_fraxlend_debt:type_name -> steward.v3.DebtFTokenAdaptorV1.RepayFraxlendDebt + 4, // 3: steward.v3.DebtFTokenAdaptorV1.call_add_interest:type_name -> steward.v3.DebtFTokenAdaptorV1.CallAddInterest + 0, // 4: steward.v3.DebtFTokenAdaptorV1Calls.calls:type_name -> steward.v3.DebtFTokenAdaptorV1 + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_adaptors_frax_debt_f_token_proto_init() } +func file_adaptors_frax_debt_f_token_proto_init() { + if File_adaptors_frax_debt_f_token_proto != nil { + return + } + file_adaptors_base_proto_init() + if !protoimpl.UnsafeEnabled { + file_adaptors_frax_debt_f_token_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DebtFTokenAdaptorV1); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_frax_debt_f_token_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DebtFTokenAdaptorV1Calls); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_frax_debt_f_token_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DebtFTokenAdaptorV1_BorrowFromFraxlend); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_frax_debt_f_token_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DebtFTokenAdaptorV1_RepayFraxlendDebt); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_frax_debt_f_token_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*DebtFTokenAdaptorV1_CallAddInterest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_adaptors_frax_debt_f_token_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*DebtFTokenAdaptorV1_RevokeApproval)(nil), + (*DebtFTokenAdaptorV1_BorrowFromFraxlend_)(nil), + (*DebtFTokenAdaptorV1_RepayFraxlendDebt_)(nil), + (*DebtFTokenAdaptorV1_CallAddInterest_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_adaptors_frax_debt_f_token_proto_rawDesc, + NumEnums: 0, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_adaptors_frax_debt_f_token_proto_goTypes, + DependencyIndexes: file_adaptors_frax_debt_f_token_proto_depIdxs, + MessageInfos: file_adaptors_frax_debt_f_token_proto_msgTypes, + }.Build() + File_adaptors_frax_debt_f_token_proto = out.File + file_adaptors_frax_debt_f_token_proto_rawDesc = nil + file_adaptors_frax_debt_f_token_proto_goTypes = nil + file_adaptors_frax_debt_f_token_proto_depIdxs = nil +} diff --git a/steward_proto_go/steward_proto/legacy_cellar_adaptor.pb.go b/steward_proto_go/steward_proto/legacy_cellar_adaptor.pb.go new file mode 100644 index 00000000..f0eb2e11 --- /dev/null +++ b/steward_proto_go/steward_proto/legacy_cellar_adaptor.pb.go @@ -0,0 +1,462 @@ +// Protos for depositing/withdrawing from Legacy Cellars + +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.26.0 +// protoc v3.21.12 +// source: adaptors/sommelier/legacy_cellar_adaptor.proto + +package steward_proto + +import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type LegacyCellarAdaptorV1 struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // Types that are assignable to Function: + // *LegacyCellarAdaptorV1_RevokeApproval + // *LegacyCellarAdaptorV1_DepositToCellar_ + // *LegacyCellarAdaptorV1_WithdrawFromCellar_ + Function isLegacyCellarAdaptorV1_Function `protobuf_oneof:"function"` +} + +func (x *LegacyCellarAdaptorV1) Reset() { + *x = LegacyCellarAdaptorV1{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LegacyCellarAdaptorV1) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LegacyCellarAdaptorV1) ProtoMessage() {} + +func (x *LegacyCellarAdaptorV1) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LegacyCellarAdaptorV1.ProtoReflect.Descriptor instead. +func (*LegacyCellarAdaptorV1) Descriptor() ([]byte, []int) { + return file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescGZIP(), []int{0} +} + +func (m *LegacyCellarAdaptorV1) GetFunction() isLegacyCellarAdaptorV1_Function { + if m != nil { + return m.Function + } + return nil +} + +func (x *LegacyCellarAdaptorV1) GetRevokeApproval() *RevokeApproval { + if x, ok := x.GetFunction().(*LegacyCellarAdaptorV1_RevokeApproval); ok { + return x.RevokeApproval + } + return nil +} + +func (x *LegacyCellarAdaptorV1) GetDepositToCellar() *LegacyCellarAdaptorV1_DepositToCellar { + if x, ok := x.GetFunction().(*LegacyCellarAdaptorV1_DepositToCellar_); ok { + return x.DepositToCellar + } + return nil +} + +func (x *LegacyCellarAdaptorV1) GetWithdrawFromCellar() *LegacyCellarAdaptorV1_WithdrawFromCellar { + if x, ok := x.GetFunction().(*LegacyCellarAdaptorV1_WithdrawFromCellar_); ok { + return x.WithdrawFromCellar + } + return nil +} + +type isLegacyCellarAdaptorV1_Function interface { + isLegacyCellarAdaptorV1_Function() +} + +type LegacyCellarAdaptorV1_RevokeApproval struct { + // Represents function `revokeApproval(ERC20 asset, address spender)` + RevokeApproval *RevokeApproval `protobuf:"bytes,1,opt,name=revoke_approval,json=revokeApproval,proto3,oneof"` +} + +type LegacyCellarAdaptorV1_DepositToCellar_ struct { + // Represents function `depositToCellar(Cellar cellar, uint256 assets, address oracle)` + DepositToCellar *LegacyCellarAdaptorV1_DepositToCellar `protobuf:"bytes,2,opt,name=depositToCellar,proto3,oneof"` +} + +type LegacyCellarAdaptorV1_WithdrawFromCellar_ struct { + // Represents function `withdrawFromCellar(Cellar cellar, uint256 assets, address oracle)` + WithdrawFromCellar *LegacyCellarAdaptorV1_WithdrawFromCellar `protobuf:"bytes,3,opt,name=withdrawFromCellar,proto3,oneof"` +} + +func (*LegacyCellarAdaptorV1_RevokeApproval) isLegacyCellarAdaptorV1_Function() {} + +func (*LegacyCellarAdaptorV1_DepositToCellar_) isLegacyCellarAdaptorV1_Function() {} + +func (*LegacyCellarAdaptorV1_WithdrawFromCellar_) isLegacyCellarAdaptorV1_Function() {} + +type LegacyCellarAdaptorV1Calls struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Calls []*LegacyCellarAdaptorV1 `protobuf:"bytes,1,rep,name=calls,proto3" json:"calls,omitempty"` +} + +func (x *LegacyCellarAdaptorV1Calls) Reset() { + *x = LegacyCellarAdaptorV1Calls{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LegacyCellarAdaptorV1Calls) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LegacyCellarAdaptorV1Calls) ProtoMessage() {} + +func (x *LegacyCellarAdaptorV1Calls) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LegacyCellarAdaptorV1Calls.ProtoReflect.Descriptor instead. +func (*LegacyCellarAdaptorV1Calls) Descriptor() ([]byte, []int) { + return file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescGZIP(), []int{1} +} + +func (x *LegacyCellarAdaptorV1Calls) GetCalls() []*LegacyCellarAdaptorV1 { + if x != nil { + return x.Calls + } + return nil +} + +// +// Allows strategists to deposit into Cellar positions. +// +// Represents function `depositToCellar(Cellar cellar, uint256 assets, address oracle)` +type LegacyCellarAdaptorV1_DepositToCellar struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cellar string `protobuf:"bytes,1,opt,name=cellar,proto3" json:"cellar,omitempty"` + Assets string `protobuf:"bytes,2,opt,name=assets,proto3" json:"assets,omitempty"` + Oracle string `protobuf:"bytes,3,opt,name=oracle,proto3" json:"oracle,omitempty"` +} + +func (x *LegacyCellarAdaptorV1_DepositToCellar) Reset() { + *x = LegacyCellarAdaptorV1_DepositToCellar{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LegacyCellarAdaptorV1_DepositToCellar) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LegacyCellarAdaptorV1_DepositToCellar) ProtoMessage() {} + +func (x *LegacyCellarAdaptorV1_DepositToCellar) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LegacyCellarAdaptorV1_DepositToCellar.ProtoReflect.Descriptor instead. +func (*LegacyCellarAdaptorV1_DepositToCellar) Descriptor() ([]byte, []int) { + return file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *LegacyCellarAdaptorV1_DepositToCellar) GetCellar() string { + if x != nil { + return x.Cellar + } + return "" +} + +func (x *LegacyCellarAdaptorV1_DepositToCellar) GetAssets() string { + if x != nil { + return x.Assets + } + return "" +} + +func (x *LegacyCellarAdaptorV1_DepositToCellar) GetOracle() string { + if x != nil { + return x.Oracle + } + return "" +} + +// +// Allows strategists to withdraw from Cellar positions. +// +// Represents function `withdrawFromCellar(Cellar cellar, uint256 assets, address oracle)` +type LegacyCellarAdaptorV1_WithdrawFromCellar struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Cellar string `protobuf:"bytes,1,opt,name=cellar,proto3" json:"cellar,omitempty"` + Assets string `protobuf:"bytes,2,opt,name=assets,proto3" json:"assets,omitempty"` + Oracle string `protobuf:"bytes,3,opt,name=oracle,proto3" json:"oracle,omitempty"` +} + +func (x *LegacyCellarAdaptorV1_WithdrawFromCellar) Reset() { + *x = LegacyCellarAdaptorV1_WithdrawFromCellar{} + if protoimpl.UnsafeEnabled { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *LegacyCellarAdaptorV1_WithdrawFromCellar) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LegacyCellarAdaptorV1_WithdrawFromCellar) ProtoMessage() {} + +func (x *LegacyCellarAdaptorV1_WithdrawFromCellar) ProtoReflect() protoreflect.Message { + mi := &file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[3] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LegacyCellarAdaptorV1_WithdrawFromCellar.ProtoReflect.Descriptor instead. +func (*LegacyCellarAdaptorV1_WithdrawFromCellar) Descriptor() ([]byte, []int) { + return file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *LegacyCellarAdaptorV1_WithdrawFromCellar) GetCellar() string { + if x != nil { + return x.Cellar + } + return "" +} + +func (x *LegacyCellarAdaptorV1_WithdrawFromCellar) GetAssets() string { + if x != nil { + return x.Assets + } + return "" +} + +func (x *LegacyCellarAdaptorV1_WithdrawFromCellar) GetOracle() string { + if x != nil { + return x.Oracle + } + return "" +} + +var File_adaptors_sommelier_legacy_cellar_adaptor_proto protoreflect.FileDescriptor + +var file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDesc = []byte{ + 0x0a, 0x2e, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x73, 0x6f, 0x6d, 0x6d, 0x65, + 0x6c, 0x69, 0x65, 0x72, 0x2f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x63, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x5f, 0x61, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x12, 0x0a, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x1a, 0x13, 0x61, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x73, 0x2f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x22, 0xea, 0x03, 0x0a, 0x15, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x12, 0x45, 0x0a, 0x0f, 0x72, + 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x5f, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, + 0x33, 0x2e, 0x52, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, 0x61, 0x6c, + 0x48, 0x00, 0x52, 0x0e, 0x72, 0x65, 0x76, 0x6f, 0x6b, 0x65, 0x41, 0x70, 0x70, 0x72, 0x6f, 0x76, + 0x61, 0x6c, 0x12, 0x5d, 0x0a, 0x0f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x54, 0x6f, 0x43, + 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x31, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, + 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x2e, 0x44, + 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x54, 0x6f, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x48, 0x00, + 0x52, 0x0f, 0x64, 0x65, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x54, 0x6f, 0x43, 0x65, 0x6c, 0x6c, 0x61, + 0x72, 0x12, 0x66, 0x0a, 0x12, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x46, 0x72, 0x6f, + 0x6d, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, + 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, + 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, + 0x2e, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x65, 0x6c, + 0x6c, 0x61, 0x72, 0x48, 0x00, 0x52, 0x12, 0x77, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, 0x46, + 0x72, 0x6f, 0x6d, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x1a, 0x59, 0x0a, 0x0f, 0x44, 0x65, 0x70, + 0x6f, 0x73, 0x69, 0x74, 0x54, 0x6f, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, + 0x63, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x65, + 0x6c, 0x6c, 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, + 0x6f, 0x72, 0x61, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x1a, 0x5c, 0x0a, 0x12, 0x57, 0x69, 0x74, 0x68, 0x64, 0x72, 0x61, 0x77, + 0x46, 0x72, 0x6f, 0x6d, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x65, + 0x6c, 0x6c, 0x61, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x65, 0x6c, 0x6c, + 0x61, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x06, 0x61, 0x73, 0x73, 0x65, 0x74, 0x73, 0x12, 0x16, 0x0a, 0x06, 0x6f, 0x72, + 0x61, 0x63, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x6f, 0x72, 0x61, 0x63, + 0x6c, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x55, + 0x0a, 0x1a, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, + 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x43, 0x61, 0x6c, 0x6c, 0x73, 0x12, 0x37, 0x0a, 0x05, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x73, 0x74, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x2e, 0x76, 0x33, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x43, + 0x65, 0x6c, 0x6c, 0x61, 0x72, 0x41, 0x64, 0x61, 0x70, 0x74, 0x6f, 0x72, 0x56, 0x31, 0x52, 0x05, + 0x63, 0x61, 0x6c, 0x6c, 0x73, 0x42, 0x10, 0x5a, 0x0e, 0x2f, 0x73, 0x74, 0x65, 0x77, 0x61, 0x72, + 0x64, 0x5f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescOnce sync.Once + file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescData = file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDesc +) + +func file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescGZIP() []byte { + file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescOnce.Do(func() { + file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescData = protoimpl.X.CompressGZIP(file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescData) + }) + return file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDescData +} + +var file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_adaptors_sommelier_legacy_cellar_adaptor_proto_goTypes = []interface{}{ + (*LegacyCellarAdaptorV1)(nil), // 0: steward.v3.LegacyCellarAdaptorV1 + (*LegacyCellarAdaptorV1Calls)(nil), // 1: steward.v3.LegacyCellarAdaptorV1Calls + (*LegacyCellarAdaptorV1_DepositToCellar)(nil), // 2: steward.v3.LegacyCellarAdaptorV1.DepositToCellar + (*LegacyCellarAdaptorV1_WithdrawFromCellar)(nil), // 3: steward.v3.LegacyCellarAdaptorV1.WithdrawFromCellar + (*RevokeApproval)(nil), // 4: steward.v3.RevokeApproval +} +var file_adaptors_sommelier_legacy_cellar_adaptor_proto_depIdxs = []int32{ + 4, // 0: steward.v3.LegacyCellarAdaptorV1.revoke_approval:type_name -> steward.v3.RevokeApproval + 2, // 1: steward.v3.LegacyCellarAdaptorV1.depositToCellar:type_name -> steward.v3.LegacyCellarAdaptorV1.DepositToCellar + 3, // 2: steward.v3.LegacyCellarAdaptorV1.withdrawFromCellar:type_name -> steward.v3.LegacyCellarAdaptorV1.WithdrawFromCellar + 0, // 3: steward.v3.LegacyCellarAdaptorV1Calls.calls:type_name -> steward.v3.LegacyCellarAdaptorV1 + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 4, // [4:4] is the sub-list for extension type_name + 4, // [4:4] is the sub-list for extension extendee + 0, // [0:4] is the sub-list for field type_name +} + +func init() { file_adaptors_sommelier_legacy_cellar_adaptor_proto_init() } +func file_adaptors_sommelier_legacy_cellar_adaptor_proto_init() { + if File_adaptors_sommelier_legacy_cellar_adaptor_proto != nil { + return + } + file_adaptors_base_proto_init() + if !protoimpl.UnsafeEnabled { + file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LegacyCellarAdaptorV1); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LegacyCellarAdaptorV1Calls); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LegacyCellarAdaptorV1_DepositToCellar); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*LegacyCellarAdaptorV1_WithdrawFromCellar); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes[0].OneofWrappers = []interface{}{ + (*LegacyCellarAdaptorV1_RevokeApproval)(nil), + (*LegacyCellarAdaptorV1_DepositToCellar_)(nil), + (*LegacyCellarAdaptorV1_WithdrawFromCellar_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDesc, + NumEnums: 0, + NumMessages: 4, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_adaptors_sommelier_legacy_cellar_adaptor_proto_goTypes, + DependencyIndexes: file_adaptors_sommelier_legacy_cellar_adaptor_proto_depIdxs, + MessageInfos: file_adaptors_sommelier_legacy_cellar_adaptor_proto_msgTypes, + }.Build() + File_adaptors_sommelier_legacy_cellar_adaptor_proto = out.File + file_adaptors_sommelier_legacy_cellar_adaptor_proto_rawDesc = nil + file_adaptors_sommelier_legacy_cellar_adaptor_proto_goTypes = nil + file_adaptors_sommelier_legacy_cellar_adaptor_proto_depIdxs = nil +} diff --git a/steward_proto_rust/Cargo.toml b/steward_proto_rust/Cargo.toml index 3f408968..4862e58c 100644 --- a/steward_proto_rust/Cargo.toml +++ b/steward_proto_rust/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "steward_proto" -version = "3.4.3" +version = "3.5.0" edition = "2021" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/steward_proto_rust/src/prost/descriptor.bin b/steward_proto_rust/src/prost/descriptor.bin index 368d8971..b4b84cd8 100644 Binary files a/steward_proto_rust/src/prost/descriptor.bin and b/steward_proto_rust/src/prost/descriptor.bin differ diff --git a/steward_proto_rust/src/prost/steward.v3.rs b/steward_proto_rust/src/prost/steward.v3.rs index afb6bfe9..b2893fe3 100644 --- a/steward_proto_rust/src/prost/steward.v3.rs +++ b/steward_proto_rust/src/prost/steward.v3.rs @@ -1071,6 +1071,130 @@ pub struct MorphoAaveV2DebtTokenAdaptorV1Calls { #[prost(message, repeated, tag = "1")] pub calls: ::prost::alloc::vec::Vec, } +/// Represents call data for the Frax Collateral F Token adaptor. +#[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] +pub struct CollateralFTokenAdaptorV1 { + ///**** BASE ADAPTOR FUNCTIONS **** + #[prost(oneof = "collateral_f_token_adaptor_v1::Function", tags = "1, 2, 3")] + pub function: ::core::option::Option, +} +/// Nested message and enum types in `CollateralFTokenAdaptorV1`. +pub mod collateral_f_token_adaptor_v1 { + /// + /// Allows strategists to add collateral to the respective cellar position on FraxLend, enabling borrowing. + /// + /// Represents function `addCollateral(IFToken _fraxlendPair, uint256 _collateralToDeposit)` + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] + pub struct AddCollateral { + /// The FraxLend pair to add collateral to. + #[prost(string, tag = "1")] + pub fraxlend_pair: ::prost::alloc::string::String, + /// The amount of collateral to add to the cellar position. + #[prost(string, tag = "2")] + pub collateral_to_deposit: ::prost::alloc::string::String, + } + /// + /// Allows strategists to remove collateral from the respective cellar position on FraxLend. + /// + /// Represents function `removeCollateral(uint256 _collateralAmount, IFToken _fraxlendPair)` + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] + pub struct RemoveCollateral { + /// The amount of collateral to remove from the cellar position. + #[prost(string, tag = "1")] + pub collateral_amount: ::prost::alloc::string::String, + /// The FraxLend pair to remove collateral from. + #[prost(string, tag = "2")] + pub fraxlend_pair: ::prost::alloc::string::String, + } + ///**** BASE ADAPTOR FUNCTIONS **** + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Oneof)] + pub enum Function { + /// Represents function `revokeApproval(ERC20 asset, address spender)` + #[prost(message, tag = "1")] + RevokeApproval(super::RevokeApproval), + //**** ADAPTOR-SPECIFIC FUNCTIONS **** + /// Represents function `addCollateral(IFToken _fraxlendPair, uint256 _collateralToDeposit)` + #[prost(message, tag = "2")] + AddCollateral(AddCollateral), + /// Represents function `removeCollateral(uint256 _collateralAmount, IFToken _fraxlendPair)` + #[prost(message, tag = "3")] + RemoveCollateral(RemoveCollateral), + } +} +#[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] +pub struct CollateralFTokenAdaptorV1Calls { + #[prost(message, repeated, tag = "1")] + pub calls: ::prost::alloc::vec::Vec, +} +/// Represents call data for the Frax adaptor. +#[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] +pub struct DebtFTokenAdaptorV1 { + ///**** BASE ADAPTOR FUNCTIONS **** + #[prost(oneof = "debt_f_token_adaptor_v1::Function", tags = "1, 2, 3, 4")] + pub function: ::core::option::Option, +} +/// Nested message and enum types in `DebtFTokenAdaptorV1`. +pub mod debt_f_token_adaptor_v1 { + /// + /// Allows a strategist to borrow assets from Fraxlend + /// + /// Represents `function borrowFromFraxlend(IFToken fraxlendPair, uint256 amountToBorrow)` + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] + pub struct BorrowFromFraxlend { + /// The address of the Frax Pair to borrow from. + #[prost(string, tag = "1")] + pub fraxlend_pair: ::prost::alloc::string::String, + /// The amount of the asset to borrow. + #[prost(string, tag = "2")] + pub amount_to_borrow: ::prost::alloc::string::String, + } + /// + /// Allows strategists to repay loan debt on Fraxlend Pair. + /// Make sure to call addInterest() beforehand to ensure we are repaying what is required. + /// + /// Represents `function repayFraxlendDebt(IFToken _fraxlendPair, uint256 _debtTokenRepayAmount)` + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] + pub struct RepayFraxlendDebt { + /// The address of the Frax Pair to repay debt on. + #[prost(string, tag = "1")] + pub fraxlend_pair: ::prost::alloc::string::String, + /// The amount of the debt token to repay. + #[prost(string, tag = "2")] + pub debt_token_repay_amount: ::prost::alloc::string::String, + } + /// + /// Allows a strategist to call `addInterest` on a Frax Pair they are using + /// + /// Represents `function callAddInterest(IFToken _fraxlendPair)` + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] + pub struct CallAddInterest { + /// The address of the pair to call addInterest on. + #[prost(string, tag = "1")] + pub fraxlend_pair: ::prost::alloc::string::String, + } + ///**** BASE ADAPTOR FUNCTIONS **** + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Oneof)] + pub enum Function { + /// Represents function `revokeApproval(ERC20 asset, address spender)` + #[prost(message, tag = "1")] + RevokeApproval(super::RevokeApproval), + //**** ADAPTOR-SPECIFIC FUNCTIONS **** + /// Represents function `borrowFromFraxlend(IFToken fraxlendPair, uint256 amountToBorrow)` + #[prost(message, tag = "2")] + BorrowFromFraxlend(BorrowFromFraxlend), + /// Represents function `repayFraxlendDebt(IFToken _fraxlendPair, uint256 _debtTokenRepayAmount)` + #[prost(message, tag = "3")] + RepayFraxlendDebt(RepayFraxlendDebt), + /// Represents function `callAddInterest(IFToken _fraxlendPair)` + #[prost(message, tag = "4")] + CallAddInterest(CallAddInterest), + } +} +#[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] +pub struct DebtFTokenAdaptorV1Calls { + #[prost(message, repeated, tag = "1")] + pub calls: ::prost::alloc::vec::Vec, +} /// Represents call data for the Frax adaptor. #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] pub struct FTokenAdaptorV1 { @@ -1206,6 +1330,60 @@ pub struct CellarAdaptorV1Calls { pub calls: ::prost::alloc::vec::Vec, } #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] +pub struct LegacyCellarAdaptorV1 { + ///**** BASE ADAPTOR FUNCTIONS **** + #[prost(oneof = "legacy_cellar_adaptor_v1::Function", tags = "1, 2, 3")] + pub function: ::core::option::Option, +} +/// Nested message and enum types in `LegacyCellarAdaptorV1`. +pub mod legacy_cellar_adaptor_v1 { + /// + /// Allows strategists to deposit into Cellar positions. + /// + /// Represents function `depositToCellar(Cellar cellar, uint256 assets, address oracle)` + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] + pub struct DepositToCellar { + #[prost(string, tag = "1")] + pub cellar: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub assets: ::prost::alloc::string::String, + #[prost(string, tag = "3")] + pub oracle: ::prost::alloc::string::String, + } + /// + /// Allows strategists to withdraw from Cellar positions. + /// + /// Represents function `withdrawFromCellar(Cellar cellar, uint256 assets, address oracle)` + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] + pub struct WithdrawFromCellar { + #[prost(string, tag = "1")] + pub cellar: ::prost::alloc::string::String, + #[prost(string, tag = "2")] + pub assets: ::prost::alloc::string::String, + #[prost(string, tag = "3")] + pub oracle: ::prost::alloc::string::String, + } + ///**** BASE ADAPTOR FUNCTIONS **** + #[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Oneof)] + pub enum Function { + /// Represents function `revokeApproval(ERC20 asset, address spender)` + #[prost(message, tag = "1")] + RevokeApproval(super::RevokeApproval), + //**** ADAPTOR-SPECIFIC FUNCTIONS **** + /// Represents function `depositToCellar(Cellar cellar, uint256 assets, address oracle)` + #[prost(message, tag = "2")] + DepositToCellar(DepositToCellar), + /// Represents function `withdrawFromCellar(Cellar cellar, uint256 assets, address oracle)` + #[prost(message, tag = "3")] + WithdrawFromCellar(WithdrawFromCellar), + } +} +#[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] +pub struct LegacyCellarAdaptorV1Calls { + #[prost(message, repeated, tag = "1")] + pub calls: ::prost::alloc::vec::Vec, +} +#[derive(serde::Deserialize, serde::Serialize, Clone, PartialEq, ::prost::Message)] pub struct ZeroXAdaptorV1 { ///**** BASE ADAPTOR FUNCTIONS **** #[prost(oneof = "zero_x_adaptor_v1::Function", tags = "1, 2")] @@ -2204,7 +2382,7 @@ pub mod aave_v3_debt_token_adaptor_v1 { /// The function call data for the adaptor #[prost( oneof = "adaptor_call_for_aave_v3_flashloan::CallData", - tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24" + tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27" )] pub call_data: ::core::option::Option, } @@ -2286,6 +2464,15 @@ pub mod aave_v3_debt_token_adaptor_v1 { /// Represents function calls to the BalancerPoolAdaptor V1 #[prost(message, tag = "24")] BalancerPoolV1Calls(super::super::BalancerPoolAdaptorV1Calls), + /// Represents function calls to the LegacyCellarAdaptor V1 + #[prost(message, tag = "25")] + LegacyCellarV1Calls(super::super::LegacyCellarAdaptorV1Calls), + /// Represents function calls to the DebtFTokenAdaptor V1 + #[prost(message, tag = "26")] + DebtFTokenV1Calls(super::super::DebtFTokenAdaptorV1Calls), + /// Represents function calls to the CollateralFTokenAdaptor V1 + #[prost(message, tag = "27")] + CollateralFTokenV1Calls(super::super::CollateralFTokenAdaptorV1Calls), } } ///**** BASE ADAPTOR FUNCTIONS **** @@ -3037,7 +3224,7 @@ pub struct AdaptorCall { /// The function call data for the adaptor #[prost( oneof = "adaptor_call::CallData", - tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24" + tags = "2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27" )] pub call_data: ::core::option::Option, } @@ -3115,6 +3302,15 @@ pub mod adaptor_call { /// Represents function calls to the BalancerPoolAdaptor V1 #[prost(message, tag = "24")] BalancerPoolV1Calls(super::BalancerPoolAdaptorV1Calls), + /// Represents function calls to the LegacyCellarAdaptor V1 + #[prost(message, tag = "25")] + LegacyCellarV1Calls(super::LegacyCellarAdaptorV1Calls), + /// Represents function calls to the DebtFTokenAdaptor V1 + #[prost(message, tag = "26")] + DebtFTokenV1Calls(super::DebtFTokenAdaptorV1Calls), + /// Represents function calls to the CollateralFTokenAdaptor V1 + #[prost(message, tag = "27")] + CollateralFTokenV1Calls(super::CollateralFTokenAdaptorV1Calls), } } ///