Repository: centrifuge/protocol-v3
Pull request #336: Fix: MaxAge prices 
Author: login: mustermeiszer
Created: 2025-04-30T08:55:51Z | Merged: 2025-05-02T12:09:44Z

Fixes 
* maxAge default to `uint64.max`
* adapts price API of pool manager for apps
* fixes registering balance sheet during deployment


Diff:
diff --git a/script/VaultsDeployer.s.sol b/script/VaultsDeployer.s.sol
index 8fbbc0856..22fa4c28e 100644
--- a/script/VaultsDeployer.s.sol
+++ b/script/VaultsDeployer.s.sol
@@ -90,6 +90,7 @@ contract VaultsDeployer is CommonDeployer {
         register("syncDepositVaultFactory", address(syncDepositVaultFactory));
         register("poolManager", address(poolManager));
         register("vaultRouter", address(vaultRouter));
+        register("balanceSheet", address(balanceSheet));
     }
 
     function _vaultsEndorse() private {
diff --git a/snapshots/AsyncVault.json b/snapshots/AsyncVault.json
index 527fa9c1b..7a2a7be6f 100644
--- a/snapshots/AsyncVault.json
+++ b/snapshots/AsyncVault.json
@@ -1,4 +1,4 @@
 {
-  "fulfillDepositRequest": "1336235",
-  "requestDeposit": "515892"
+  "fulfillDepositRequest": "1336360",
+  "requestDeposit": "515936"
 }
\ No newline at end of file
diff --git a/snapshots/VaultRouter.json b/snapshots/VaultRouter.json
index a57a2e089..5d87db143 100644
--- a/snapshots/VaultRouter.json
+++ b/snapshots/VaultRouter.json
@@ -1,7 +1,7 @@
 {
-  "claimDeposit": "1576706",
+  "claimDeposit": "1576831",
   "enable": "60953",
   "lockDepositRequest": "95797",
-  "requestDeposit": "553058",
-  "requestRedeem": "2509850"
+  "requestDeposit": "553102",
+  "requestRedeem": "2510063"
 }
\ No newline at end of file
diff --git a/src/vaults/BalanceSheet.sol b/src/vaults/BalanceSheet.sol
index f5953d01f..11812af51 100644
--- a/src/vaults/BalanceSheet.sol
+++ b/src/vaults/BalanceSheet.sol
@@ -342,7 +342,7 @@ contract BalanceSheet is Auth, Recoverable, IBalanceSheet, IBalanceSheetGatewayH
                 d18(TransientStorageLib.tloadUint128(keccak256(abi.encode("pricePoolPerAsset", poolId, scId, assetId))));
         }
 
-        (D18 pricePoolPerAsset,) = poolManager.pricePoolPerAsset(poolId, scId, assetId, true);
+        D18 pricePoolPerAsset = poolManager.pricePoolPerAsset(poolId, scId, assetId, true);
         return pricePoolPerAsset;
     }
 
@@ -351,7 +351,7 @@ contract BalanceSheet is Auth, Recoverable, IBalanceSheet, IBalanceSheetGatewayH
             return d18(TransientStorageLib.tloadUint128(keccak256(abi.encode("pricePoolPerShare", poolId, scId))));
         }
 
-        (D18 pricePoolPerShare,) = poolManager.pricePoolPerShare(poolId, scId, true);
+        D18 pricePoolPerShare = poolManager.pricePoolPerShare(poolId, scId, true);
         return pricePoolPerShare;
     }
 }
diff --git a/src/vaults/BaseInvestmentManager.sol b/src/vaults/BaseInvestmentManager.sol
index 4556250d5..6106bd9f6 100644
--- a/src/vaults/BaseInvestmentManager.sol
+++ b/src/vaults/BaseInvestmentManager.sol
@@ -71,7 +71,12 @@ abstract contract BaseInvestmentManager is Auth, Recoverable, IBaseInvestmentMan
     function priceLastUpdated(IBaseVault vault_) public view virtual returns (uint64 lastUpdated) {
         VaultDetails memory vaultDetails = poolManager.vaultDetails(vault_);
 
-        (, lastUpdated) = poolManager.priceAssetPerShare(vault_.poolId(), vault_.scId(), vaultDetails.assetId, false);
+        (uint64 shareLastUpdated,,) = poolManager.markersPricePoolPerShare(vault_.poolId(), vault_.scId());
+        (uint64 assetLastUpdated,,) =
+            poolManager.markersPricePoolPerAsset(vault_.poolId(), vault_.scId(), vaultDetails.assetId);
+
+        // Choose the latest update to be the marker
+        lastUpdated = MathLib.max(shareLastUpdated, assetLastUpdated).toUint64();
     }
 
     /// @inheritdoc IBaseInvestmentManager
diff --git a/src/vaults/PoolManager.sol b/src/vaults/PoolManager.sol
index a4dff1847..58b396d21 100644
--- a/src/vaults/PoolManager.sol
+++ b/src/vaults/PoolManager.sol
@@ -267,6 +267,10 @@ contract PoolManager is
         Price storage poolPerAsset = shareClass.pricePoolPerAsset[asset][tokenId];
         require(computedAt >= poolPerAsset.computedAt, CannotSetOlderPrice());
 
+        // Disable expiration of the price
+        if (poolPerAsset.computedAt == 0) {
+            poolPerAsset.maxAge = type(uint64).max;
+        }
         poolPerAsset.price = poolPerAsset_;
         poolPerAsset.computedAt = computedAt;
 
@@ -415,9 +419,9 @@ contract PoolManager is
         _vaultDetails[vault] = VaultDetails(assetId, assetIdKey.asset, assetIdKey.tokenId, isWrappedERC20, false);
 
         // NOTE - Reverting the manager approvals is not easy. We SHOULD do that if we phase-out a manager
-        _relyShareToken(vault, shareClass.shareToken);
+        VaultKind vaultKind = _relyShareToken(vault, shareClass.shareToken);
 
-        emit DeployVault(poolId, scId, assetIdKey.asset, assetIdKey.tokenId, factory, vault);
+        emit DeployVault(poolId, scId, assetIdKey.asset, assetIdKey.tokenId, factory, vault, vaultKind);
         return vault;
     }
 
@@ -469,20 +473,15 @@ contract PoolManager is
     function priceAssetPerShare(PoolId poolId, ShareClassId scId, AssetId assetId, bool checkValidity)
         public
         view
-        returns (D18 price, uint64 computedAt)
+        returns (D18 price)
     {
         (Price memory poolPerAsset, Price memory poolPerShare) = _pricesPoolPer(poolId, scId, assetId, checkValidity);
 
         price = PricingLib.priceAssetPerShare(poolPerShare.asPrice(), poolPerAsset.asPrice());
-        computedAt = poolPerShare.computedAt;
     }
 
     /// @inheritdoc IPoolManager
-    function pricePoolPerShare(PoolId poolId, ShareClassId scId, bool checkValidity)
-        public
-        view
-        returns (D18 price, uint64 computedAt)
-    {
+    function pricePoolPerShare(PoolId poolId, ShareClassId scId, bool checkValidity) public view returns (D18 price) {
         ShareClassDetails storage shareClass = _shareClass(poolId, scId);
 
         if (checkValidity) {
@@ -490,14 +489,13 @@ contract PoolManager is
         }
 
         price = shareClass.pricePoolPerShare.asPrice();
-        computedAt = shareClass.pricePoolPerShare.computedAt;
     }
 
     /// @inheritdoc IPoolManager
     function pricePoolPerAsset(PoolId poolId, ShareClassId scId, AssetId assetId, bool checkValidity)
         public
         view
-        returns (D18 price, uint64 computedAt)
+        returns (D18 price)
     {
         (Price memory poolPerAsset,) = _pricesPoolPer(poolId, scId, assetId, false);
 
@@ -506,7 +504,6 @@ contract PoolManager is
         }
 
         price = poolPerAsset.asPrice();
-        computedAt = poolPerAsset.computedAt;
     }
 
     /// @inheritdoc IPoolManager
@@ -519,6 +516,30 @@ contract PoolManager is
         return (poolPerAsset.asPrice(), poolPerShare.asPrice());
     }
 
+    /// @inheritdoc IPoolManager
+    function markersPricePoolPerShare(PoolId poolId, ShareClassId scId)
+        external
+        view
+        returns (uint64 computedAt, uint64 maxAge, uint64 validUntil)
+    {
+        ShareClassDetails storage shareClass = _shareClass(poolId, scId);
+        computedAt = shareClass.pricePoolPerShare.computedAt;
+        maxAge = shareClass.pricePoolPerShare.maxAge;
+        validUntil = shareClass.pricePoolPerShare.validUntil();
+    }
+
+    /// @inheritdoc IPoolManager
+    function markersPricePoolPerAsset(PoolId poolId, ShareClassId scId, AssetId assetId)
+        external
+        view
+        returns (uint64 computedAt, uint64 maxAge, uint64 validUntil)
+    {
+        (Price memory poolPerAsset,) = _pricesPoolPer(poolId, scId, assetId, false);
+        computedAt = poolPerAsset.computedAt;
+        maxAge = poolPerAsset.maxAge;
+        validUntil = poolPerAsset.validUntil();
+    }
+
     //----------------------------------------------------------------------------------------------
     // Internal methods
     //----------------------------------------------------------------------------------------------
@@ -542,7 +563,7 @@ contract PoolManager is
 
     /// @dev Sets up approval permissions for pool, i.e. the pool escrow, the base vault manager and potentially a
     /// secondary manager (in case of partially sync vault)
-    function _relyShareToken(IBaseVault vault, IShareToken shareToken_) internal {
+    function _relyShareToken(IBaseVault vault, IShareToken shareToken_) internal returns (VaultKind) {
         address manager = address(IBaseVault(vault).manager());
         IAuth(address(shareToken_)).rely(manager);
 
@@ -551,6 +572,8 @@ contract PoolManager is
         if (vaultKind == VaultKind.SyncDepositAsyncRedeem) {
             IAuth(address(shareToken_)).rely(secondaryVaultManager);
         }
+
+        return vaultKind;
     }
 
     function _safeGetAssetDecimals(address asset, uint256 tokenId) private view returns (uint8) {
diff --git a/src/vaults/SyncRequestManager.sol b/src/vaults/SyncRequestManager.sol
index acc52e89a..842e51171 100644
--- a/src/vaults/SyncRequestManager.sol
+++ b/src/vaults/SyncRequestManager.sol
@@ -269,7 +269,7 @@ contract SyncRequestManager is BaseInvestmentManager, ISyncRequestManager {
         ISyncDepositValuation valuation_ = valuation[poolId][scId];
 
         if (address(valuation_) == address(0)) {
-            (price,) = poolManager.pricePoolPerShare(poolId, scId, true);
+            price = poolManager.pricePoolPerShare(poolId, scId, true);
         } else {
             price = valuation_.pricePoolPerShare(poolId, scId);
         }
@@ -278,7 +278,7 @@ contract SyncRequestManager is BaseInvestmentManager, ISyncRequestManager {
     /// @inheritdoc ISyncRequestManager
     function prices(PoolId poolId, ShareClassId scId, AssetId assetId) public view returns (Prices memory priceData) {
         priceData.poolPerShare = pricePoolPerShare(poolId, scId);
-        (priceData.poolPerAsset,) = poolManager.pricePoolPerAsset(poolId, scId, assetId, true);
+        priceData.poolPerAsset = poolManager.pricePoolPerAsset(poolId, scId, assetId, true);
         priceData.assetPerShare = PricingLib.priceAssetPerShare(priceData.poolPerShare, priceData.poolPerAsset);
     }
 
diff --git a/src/vaults/interfaces/IPoolManager.sol b/src/vaults/interfaces/IPoolManager.sol
index 01652df5c..98833c0f0 100644
--- a/src/vaults/interfaces/IPoolManager.sol
+++ b/src/vaults/interfaces/IPoolManager.sol
@@ -9,6 +9,7 @@ import {AssetId} from "src/common/types/AssetId.sol";
 
 import {IShareToken} from "src/vaults/interfaces/token/IShareToken.sol";
 import {IVaultFactory} from "src/vaults/interfaces/factories/IVaultFactory.sol";
+import {VaultKind} from "src/vaults/interfaces/IVaultManager.sol";
 import {IBaseVault} from "src/vaults/interfaces/IBaseVaults.sol";
 
 /// @dev Centrifuge pools
@@ -41,18 +42,29 @@ struct Price {
 /// timestamp <= computedAt + maxAge
 function isValid(Price memory price) view returns (bool) {
     if (price.computedAt != 0 && price.price != 0) {
-        return block.timestamp <= price.computedAt + price.maxAge;
+        return block.timestamp <= price.validUntil();
     } else {
         return false;
     }
 }
 
+/// @dev Computes the timestamp until the price is valid. Saturates at uint64.MAX.
+function validUntil(Price memory price) pure returns (uint64) {
+    unchecked {
+        uint64 validUntil_ = price.computedAt + price.maxAge;
+        if (validUntil_ < price.computedAt) {
+            return type(uint64).max;
+        }
+        return validUntil_;
+    }
+}
+
 /// @dev Retrieves the price as an D18 from the struct
 function asPrice(Price memory price) pure returns (D18) {
     return d18(price.price);
 }
 
-using {isValid, asPrice} for Price global;
+using {isValid, asPrice, validUntil} for Price global;
 
 struct VaultDetails {
     /// @dev AssetId of the asset
@@ -93,7 +105,8 @@ interface IPoolManager {
         address indexed asset,
         uint256 tokenId,
         IVaultFactory factory,
-        IBaseVault vault
+        IBaseVault vault,
+        VaultKind kind
     );
     event PriceUpdate(
         PoolId indexed poolId,
@@ -261,11 +274,10 @@ interface IPoolManager {
     /// @param assetId The asset id for which we want to know the ASSET_UNIT/SHARE_UNIT price
     /// @param checkValidity Whether to check if the price is valid
     /// @return price The asset price per share
-    /// @return computedAt The timestamp at which the price was computed
     function priceAssetPerShare(PoolId poolId, ShareClassId scId, AssetId assetId, bool checkValidity)
         external
         view
-        returns (D18 price, uint64 computedAt);
+        returns (D18 price);
 
     /// @notice Returns the price per share for a given pool and share class. The Provided price is defined as
     /// POOL_UNIT/SHARE_UNIT.
@@ -275,11 +287,10 @@ interface IPoolManager {
     /// @param scId The share class id
     /// @param checkValidity Whether to check if the price is valid
     /// @return price The pool price per share
-    /// @return computedAt The timestamp at which the price was computed
     function pricePoolPerShare(PoolId poolId, ShareClassId scId, bool checkValidity)
         external
         view
-        returns (D18 price, uint64 computedAt);
+        returns (D18 price);
 
     /// @notice Returns the price per asset for a given pool, share class and the underlying asset id. The Provided
     /// price is defined as POOL_UNIT/ASSET_UNIT.
@@ -290,11 +301,10 @@ interface IPoolManager {
     /// @param assetId The asset id for which we want to know the POOL_UNIT/ASSET_UNIT.
     /// @param checkValidity Whether to check if the price is valid
     /// @return price The pool price per asset unit
-    /// @return computedAt The timestamp at which the price was computed
     function pricePoolPerAsset(PoolId poolId, ShareClassId scId, AssetId assetId, bool checkValidity)
         external
         view
-        returns (D18 price, uint64 computedAt);
+        returns (D18 price);
 
     /// @notice Returns the both prices per pool for a given pool, share class and the underlying asset id. The Provided
     /// prices is defined as POOL_UNIT/ASSET_UNIT and POOL_UNIT/SHARE_UNIT.
@@ -310,4 +320,29 @@ interface IPoolManager {
         external
         view
         returns (D18 pricePoolPerAsset, D18 pricePoolPerShare);
+
+    /// @notice Returns the age related markers for a share class price
+    ///
+    /// @param poolId The pool id
+    /// @param scId The share class id
+    /// @return computedAt The timestamp when this price was computed
+    /// @return maxAge The maximum age this price is allowed to have
+    /// @return validUntil The timestamp until this price is valid
+    function markersPricePoolPerShare(PoolId poolId, ShareClassId scId)
+        external
+        view
+        returns (uint64 computedAt, uint64 maxAge, uint64 validUntil);
+
+    /// @notice Returns the age related markers for an asset price
+    ///
+    /// @param poolId The pool id
+    /// @param scId The share class id
+    /// @param assetId The asset id for which we want to know pool price per asset
+    /// @return computedAt The timestamp when this price was computed
+    /// @return maxAge The maximum age this price is allowed to have
+    /// @return validUntil The timestamp until this price is valid
+    function markersPricePoolPerAsset(PoolId poolId, ShareClassId scId, AssetId assetId)
+        external
+        view
+        returns (uint64 computedAt, uint64 maxAge, uint64 validUntil);
 }
diff --git a/test/vaults/integration/PoolManager.t.sol b/test/vaults/integration/PoolManager.t.sol
index ccd0c148f..c28368087 100644
--- a/test/vaults/integration/PoolManager.t.sol
+++ b/test/vaults/integration/PoolManager.t.sol
@@ -20,7 +20,7 @@ import {AssetId} from "src/common/types/AssetId.sol";
 
 import {IPoolManager, VaultDetails} from "src/vaults/interfaces/IPoolManager.sol";
 import {IBaseVault} from "src/vaults/interfaces/IBaseVaults.sol";
-import {IVaultManager} from "src/vaults/interfaces/IVaultManager.sol";
+import {IVaultManager, VaultKind} from "src/vaults/interfaces/IVaultManager.sol";
 import {IUpdateContract} from "src/vaults/interfaces/IUpdateContract.sol";
 import {IHook} from "src/common/interfaces/IHook.sol";
 
@@ -552,9 +552,8 @@ contract PoolManagerTest is BaseTest, PoolManagerTestHelper {
         poolManager.updatePricePoolPerAsset(poolId, scId, assetId, price, uint64(block.timestamp));
 
         poolManager.updatePricePoolPerShare(poolId, scId, price, uint64(block.timestamp));
-        (D18 latestPrice, uint64 lastUpdated) = poolManager.priceAssetPerShare(poolId, scId, assetId, false);
+        D18 latestPrice = poolManager.priceAssetPerShare(poolId, scId, assetId, false);
         assertEq(latestPrice.raw(), price);
-        assertEq(lastUpdated, block.timestamp);
 
         vm.expectRevert(IPoolManager.CannotSetOlderPrice.selector);
         poolManager.updatePricePoolPerShare(poolId, scId, price, uint64(block.timestamp - 1));
@@ -565,9 +564,8 @@ contract PoolManagerTest is BaseTest, PoolManagerTestHelper {
         poolManager.priceAssetPerShare(poolId, scId, assetId, true);
 
         // NOTE: Unchecked version will work
-        (latestPrice, lastUpdated) = poolManager.priceAssetPerShare(poolId, scId, assetId, false);
+        latestPrice = poolManager.priceAssetPerShare(poolId, scId, assetId, false);
         assertEq(latestPrice.raw(), price);
-        assertEq(lastUpdated, block.timestamp - 1);
     }
 
     function testVaultMigration() public {
@@ -772,7 +770,9 @@ contract PoolManagerDeployVaultTest is BaseTest, PoolManagerTestHelper {
         // Check event except for vault address which cannot be known
         AssetId assetId = poolManager.registerAsset{value: defaultGas}(OTHER_CHAIN_ID, asset, erc20TokenId);
         vm.expectEmit(true, true, true, false);
-        emit IPoolManager.DeployVault(poolId, scId, asset, erc20TokenId, asyncVaultFactory, IBaseVault(address(0)));
+        emit IPoolManager.DeployVault(
+            poolId, scId, asset, erc20TokenId, asyncVaultFactory, IBaseVault(address(0)), VaultKind.Async
+        );
         IBaseVault vault = poolManager.deployVault(poolId, scId, assetId, asyncVaultFactory);
 
         _assertDeployedVault(address(vault), assetId, asset, erc20TokenId, false);


Reviews:
user: login: hieronx
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-05-02T11:54:38Z

Review comments:
diff_hunk: @@ -71,7 +71,12 @@ abstract contract BaseInvestmentManager is Auth, Recoverable, IBaseInvestmentMan
     function priceLastUpdated(IBaseVault vault_) public view virtual returns (uint64 lastUpdated) {
         VaultDetails memory vaultDetails = poolManager.vaultDetails(vault_);
 
-        (, lastUpdated) = poolManager.priceAssetPerShare(vault_.poolId(), vault_.scId(), vaultDetails.assetId, false);
+        (uint64 shareLastUpdated,,) = poolManager.markersPricePoolPerShare(vault_.poolId(), vault_.scId());
+        (uint64 assetLastUpdated,,) =
+            poolManager.markersPricePoolPerAsset(vault_.poolId(), vault_.scId(), vaultDetails.assetId);
+
+        // Choose the latest update to be the marker
+        lastUpdated = shareLastUpdated > assetLastUpdated ? shareLastUpdated : assetLastUpdated;
path: src/vaults/BaseInvestmentManager.sol
user: login: hieronx
body: ```suggestion
        lastUpdated = MathLib.max(shareLastUpdated, assetLastUpdated);
```
created_at: 2025-05-02T11:53:29Z
author_association: CONTRIBUTOR
diff_hunk: @@ -267,6 +267,10 @@ contract PoolManager is
         Price storage poolPerAsset = shareClass.pricePoolPerAsset[asset][tokenId];
         require(computedAt >= poolPerAsset.computedAt, CannotSetOlderPrice());
 
+        // Init the price with maxAge = uint64::MAX
path: src/vaults/PoolManager.sol
user: login: hieronx
body: Too Rusty ;-) Plus think a better explanation of what this is doing:
```suggestion
        // Disable expiration of the price
```
created_at: 2025-05-02T11:54:17Z
author_association: CONTRIBUTOR

PR comments:
user: login: github-actions[bot]
created_at: 2025-05-02T12:14:27Z
body: Coverage after merging <b>fix/prices-register-ageDefault</b> into <b>spearbit-fix-review</b> will be<table><tbody><tr><th>88.73%</th></tr></tbody></table>

<details><summary>Coverage Report</summary><table><tbody><tr><th>File</th><th>Stmts</th><th>Branches</th><th>Funcs</th><th>Lines</th><th>Uncovered Lines</th></tr><tr><td colspan='6'><b>src/common</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/GasService.sol'>GasService.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Gateway.sol'>Gateway.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol'>Guardian.sol</a></td><td><b>66.67%</b></td><td><b>41.67%</b></td><td><b>73.33%</b></td><td><b>71.79%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L102'>102</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L106'>106</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L110'>110</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L128'>128</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L128-L129'>128&ndash;129</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L31'>31</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L31'>31</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L46-L47'>46&ndash;47</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L47-L49'>47&ndash;49</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L84-L85'>84&ndash;85</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L89-L90'>89&ndash;90</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Guardian.sol#L94'>94</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol'>MessageDispatcher.sol</a></td><td><b>56.25%</b></td><td><b>48.65%</b></td><td><b>62.86%</b></td><td><b>58.50%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L127'>127</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L134'>134</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L134'>134</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L134-L135'>134&ndash;135</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L137'>137</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L150-L151'>150&ndash;151</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L151'>151</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L151-L152'>151&ndash;152</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L154'>154</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L237-L238'>237&ndash;238</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L257'>257</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L264'>264</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L264'>264</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L264-L265'>264&ndash;265</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L269'>269</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L283'>283</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L290'>290</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L290'>290</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L290-L291'>290&ndash;291</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L293'>293</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L307'>307</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L311'>311</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L311'>311</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L311-L312'>311&ndash;312</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L314'>314</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L396-L397'>396&ndash;397</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L414'>414</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L418'>418</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L418'>418</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L418-L419'>418&ndash;419</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L421'>421</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L434-L435'>434&ndash;435</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L435'>435</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L435-L436'>435&ndash;436</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L438'>438</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L445-L446'>445&ndash;446</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L446'>446</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L446-L447'>446&ndash;447</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L449'>449</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L458-L459'>458&ndash;459</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L459'>459</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L459-L460'>459&ndash;460</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L462'>462</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L470-L471'>470&ndash;471</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L471'>471</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L471-L472'>471&ndash;472</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L474'>474</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L479-L480'>479&ndash;480</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L480'>480</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L480-L481'>480&ndash;481</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L483'>483</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L488'>488</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L496'>496</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L496'>496</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L496-L497'>496&ndash;497</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L501'>501</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L510'>510</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L514'>514</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L514'>514</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L514-L515'>514&ndash;515</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L517'>517</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L530'>530</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L533'>533</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L546-L547'>546&ndash;547</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L583-L584'>583&ndash;584</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L604-L605'>604&ndash;605</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L624-L625'>624&ndash;625</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L65-L67'>65&ndash;67</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L671'>671</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L674'>674</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageDispatcher.sol#L68-L69'>68&ndash;69</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol'>MessageProcessor.sol</a></td><td><b>62.50%</b></td><td><b>36.84%</b></td><td>100%</td><td><b>77.12%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L105'>105</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L108'>108</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L113'>113</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L113-L115'>113&ndash;115</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L118'>118</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L118-L121'>118&ndash;121</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L121-L123'>121&ndash;123</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L126'>126</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L129'>129</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L134'>134</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L139'>139</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L144'>144</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L144-L146'>144&ndash;146</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L149'>149</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L149-L151'>149&ndash;151</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L154'>154</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L164'>164</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L174'>174</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L184'>184</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L193'>193</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L193-L195'>193&ndash;195</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L198'>198</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L208'>208</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L215'>215</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L224'>224</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L229'>229</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L239'>239</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L239'>239</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L239-L242'>239&ndash;242</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L242'>242</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L242-L245'>242&ndash;245</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L245'>245</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L245-L247'>245&ndash;247</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L249'>249</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L54-L59'>54&ndash;59</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L72'>72</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L75'>75</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L75-L78'>75&ndash;78</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L81'>81</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L84'>84</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L84-L86'>84&ndash;86</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L89'>89</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L92'>92</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/MessageProcessor.sol#L94'>94</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Root.sol'>Root.sol</a></td><td><b>98.48%</b></td><td><b>91.67%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/Root.sol#L23'>23</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/TokenRecoverer.sol'>TokenRecoverer.sol</a></td><td><b>84.62%</b></td><td><b>50%</b></td><td>100%</td><td><b>88.89%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/TokenRecoverer.sol#L25-L26'>25&ndash;26</a></td></tr><tr><td colspan='6'><b>src/common/adapters</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/adapters/AxelarAdapter.sol'>AxelarAdapter.sol</a></td><td><b>91.11%</b></td><td><b>83.33%</b></td><td>100%</td><td><b>92.86%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/adapters/AxelarAdapter.sol#L43-L44'>43&ndash;44</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/adapters/AxelarAdapter.sol#L50-L51'>50&ndash;51</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/adapters/WormholeAdapter.sol'>WormholeAdapter.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/common/libraries</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol'>MessageLib.sol</a></td><td><b>88.49%</b></td><td><b>52.81%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1033'>1033</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1061'>1061</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1090'>1090</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1118'>1118</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1148'>1148</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1176'>1176</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1199'>1199</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L1219'>1219</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L137'>137</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L181'>181</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L200'>200</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L217'>217</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L234'>234</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L255'>255</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L279'>279</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L296'>296</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L319'>319</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L360'>360</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L390'>390</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L416'>416</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L442'>442</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L462'>462</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L486'>486</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L514'>514</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L536'>536</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L558'>558</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L579'>579</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L610'>610</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L637'>637</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L660'>660</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L682'>682</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L704'>704</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L727'>727</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L749'>749</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L776'>776</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L802'>802</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L827'>827</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L858'>858</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L893'>893</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L927'>927</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L960'>960</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageLib.sol#L992'>992</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageProofLib.sol'>MessageProofLib.sol</a></td><td><b>88.89%</b></td><td><b>50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/MessageProofLib.sol#L14'>14</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/PricingLib.sol'>PricingLib.sol</a></td><td><b>89.19%</b></td><td><b>71.43%</b></td><td><b>90%</b></td><td><b>91.23%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/PricingLib.sol#L102-L103'>102&ndash;103</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/PricingLib.sol#L259-L261'>259&ndash;261</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/common/libraries/PricingLib.sol#L56-L57'>56&ndash;57</a></td></tr><tr><td colspan='6'><b>src/hooks</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol'>FreezeOnly.sol</a></td><td><b>5.08%</b></td><td><b>0%</b></td><td><b>11.11%</b></td><td><b>5.26%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L101'>101</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L106-L107'>106&ndash;107</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L107'>107</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L107-L108'>107&ndash;108</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L108'>108</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L108'>108</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L110-L111'>110&ndash;111</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L113'>113</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L117-L119'>117&ndash;119</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L121'>121</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L125-L126'>125&ndash;126</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L134-L135'>134&ndash;135</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L45'>45</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L50'>50</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L50'>50</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L50-L51'>50&ndash;51</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L55'>55</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L62'>62</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L66'>66</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L71-L72'>71&ndash;72</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L72'>72</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L74'>74</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L77-L78'>77&ndash;78</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L78'>78</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L80'>80</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L83'>83</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L91-L92'>91&ndash;92</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L94'>94</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L94'>94</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L94-L97'>94&ndash;97</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L97'>97</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FreezeOnly.sol#L97-L99'>97&ndash;99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FullRestrictions.sol'>FullRestrictions.sol</a></td><td><b>97.65%</b></td><td><b>90%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FullRestrictions.sol#L122'>122</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/FullRestrictions.sol#L146'>146</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol'>RedemptionRestrictions.sol</a></td><td><b>52.33%</b></td><td><b>25%</b></td><td><b>63.64%</b></td><td><b>60%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L107'>107</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L110'>110</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L110'>110</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L110-L113'>110&ndash;113</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L113'>113</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L113-L115'>113&ndash;115</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L117'>117</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L122-L123'>122&ndash;123</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L123'>123</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L123-L124'>123&ndash;124</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L124'>124</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L124'>124</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L126-L127'>126&ndash;127</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L129'>129</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L133-L135'>133&ndash;135</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L137'>137</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L141'>141</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L146-L148'>146&ndash;148</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L53'>53</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L75'>75</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L77'>77</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L81'>81</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L83'>83</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L86'>86</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hooks/RedemptionRestrictions.sol#L88'>88</a></td></tr><tr><td colspan='6'><b>src/hub</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol'>Accounting.sol</a></td><td><b>90.63%</b></td><td><b>88%</b></td><td>100%</td><td><b>89.83%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol#L113-L114'>113&ndash;114</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol#L117-L118'>117&ndash;118</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol#L131'>131</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol#L133'>133</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol#L136'>136</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol#L140'>140</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Accounting.sol#L143'>143</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Holdings.sol'>Holdings.sol</a></td><td><b>97.92%</b></td><td><b>91.67%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Holdings.sol#L177'>177</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Holdings.sol#L72'>72</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol'>Hub.sol</a></td><td><b>74.93%</b></td><td><b>36.17%</b></td><td><b>97.92%</b></td><td><b>77.78%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L124-L125'>124&ndash;125</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L138-L139'>138&ndash;139</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L164-L165'>164&ndash;165</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L178-L179'>178&ndash;179</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L212'>212</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L214-L215'>214&ndash;215</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L222-L223'>222&ndash;223</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L251'>251</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L258'>258</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L265'>265</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L272'>272</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L283'>283</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L287'>287</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L289'>289</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L296'>296</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L380'>380</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L380'>380</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L380'>380</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L382-L383'>382&ndash;383</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L396'>396</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L423'>423</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L449-L450'>449&ndash;450</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L450'>450</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L450'>450</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L455-L457'>455&ndash;457</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L459'>459</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L466'>466</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L468'>468</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L471'>471</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L471'>471</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L471-L472'>471&ndash;472</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L472'>472</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L472-L474'>472&ndash;474</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L476-L477'>476&ndash;477</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L480'>480</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L480'>480</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L480-L482'>480&ndash;482</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L484-L485'>484&ndash;485</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L489'>489</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L499'>499</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L509'>509</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L523'>523</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L530'>530</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L532'>532</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L534'>534</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L572'>572</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L575'>575</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L575-L576'>575&ndash;576</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L584'>584</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L587'>587</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L587-L588'>587&ndash;588</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L645'>645</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L65-L66'>65&ndash;66</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L66'>66</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L66-L67'>66&ndash;67</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L67'>67</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L67-L68'>67&ndash;68</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L68'>68</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L68-L69'>68&ndash;69</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L69'>69</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L69-L70'>69&ndash;70</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/Hub.sol#L95'>95</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/HubRegistry.sol'>HubRegistry.sol</a></td><td><b>93.51%</b></td><td><b>79.17%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/HubRegistry.sol#L103'>103</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/HubRegistry.sol#L109'>109</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/HubRegistry.sol#L115'>115</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/HubRegistry.sol#L32'>32</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/HubRegistry.sol#L43'>43</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/hub/ShareClassManager.sol'>ShareClassManager.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/misc</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/Auth.sol'>Auth.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/BaseValuation.sol'>BaseValuation.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/ERC20.sol'>ERC20.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/IdentityValuation.sol'>IdentityValuation.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/Multicall.sol'>Multicall.sol</a></td><td><b>83.33%</b></td><td><b>33.33%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/Multicall.sol#L17'>17</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/Multicall.sol#L17'>17</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/Recoverable.sol'>Recoverable.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/ReentrancyProtection.sol'>ReentrancyProtection.sol</a></td><td><b>90%</b></td><td><b>75%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/ReentrancyProtection.sol#L22'>22</a></td></tr><tr><td colspan='6'><b>src/misc/libraries</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/ArrayLib.sol'>ArrayLib.sol</a></td><td><b>95.83%</b></td><td><b>75%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/ArrayLib.sol#L26'>26</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BitmapLib.sol'>BitmapLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol'>BytesLib.sol</a></td><td><b>89.72%</b></td><td><b>54.17%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L102'>102</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L113'>113</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L124'>124</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L135'>135</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L146'>146</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L157'>157</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L168'>168</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L17'>17</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L179'>179</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L75'>75</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/BytesLib.sol#L80'>80</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/CastLib.sol'>CastLib.sol</a></td><td><b>93.75%</b></td><td><b>62.50%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/CastLib.sol#L16'>16</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/CastLib.sol#L40'>40</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/CastLib.sol#L7'>7</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/EIP712Lib.sol'>EIP712Lib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol'>MathLib.sol</a></td><td><b>72.04%</b></td><td><b>64.71%</b></td><td>100%</td><td><b>70.59%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L100'>100</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L108'>108</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L111'>111</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L114'>114</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L117'>117</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L121'>121</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L126'>126</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L131-L136'>131&ndash;136</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L142-L143'>142&ndash;143</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L33-L34'>33&ndash;34</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L43'>43</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L45'>45</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L47'>47</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L49'>49</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L51'>51</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L86'>86</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L93'>93</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L96'>96</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/MathLib.sol#L99'>99</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/SafeTransferLib.sol'>SafeTransferLib.sol</a></td><td><b>96.97%</b></td><td><b>92.86%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/SafeTransferLib.sol#L59'>59</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/SignatureLib.sol'>SignatureLib.sol</a></td><td><b>95.24%</b></td><td><b>80%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/SignatureLib.sol#L17'>17</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/StringLib.sol'>StringLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/TransientArrayLib.sol'>TransientArrayLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/TransientBytesLib.sol'>TransientBytesLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/misc/libraries/TransientStorageLib.sol'>TransientStorageLib.sol</a></td><td>100%</td><td>100%</td><td>100%</td><td>100%</td><td></td></tr><tr><td colspan='6'><b>src/vaults</b></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol'>AsyncRequestManager.sol</a></td><td><b>97.06%</b></td><td><b>87.18%</b></td><td>100%</td><td>100%</td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L144'>144</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L314'>314</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L410'>410</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L415'>415</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L452'>452</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L454'>454</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L75-L76'>75&ndash;76</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncRequestManager.sol#L91-L92'>91&ndash;92</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncVault.sol'>AsyncVault.sol</a></td><td><b>96%</b></td><td><b>83.33%</b></td><td><b>94.12%</b></td><td><b>98.08%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncVault.sol#L146'>146</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/AsyncVault.sol#L47'>47</a></td></tr><tr><td>&nbsp; &nbsp;<a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol'>BalanceSheet.sol</a></td><td><b>87.23%</b></td><td><b>81.25%</b></td><td><b>89.66%</b></td><td><b>88.19%</b></td><td><a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L182'>182</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L186-L188'>186&ndash;188</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L192'>192</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L196-L197'>196&ndash;197</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L201-L202'>201&ndash;202</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L248'>248</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L251'>251</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L311'>311</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L313'>313</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L313-L314'>313&ndash;314</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L325'>325</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L329'>329</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.sol#L329-L330'>329&ndash;330</a>, <a href='https://github.com/centrifuge/protocol-v3/blob/52e687e2b8da2ed407493d7a2444f13a3decf3ce/src/vaults/BalanceSheet.
author_association: NONE