{
    "Function": "_checkCyclicDependency",
    "File": "contracts/implementations/recovery/StrategyControllerPaused.sol",
    "Parent Contracts": [
        "node_modules/@openzeppelin/contracts/proxy/Initializable.sol",
        "contracts/StrategyControllerStorage.sol",
        "contracts/interfaces/IStrategyController.sol",
        "contracts/helpers/StrategyTypes.sol"
    ],
    "High-Level Calls": [
        "IStrategy",
        "IStrategy",
        "ITokenRegistry"
    ],
    "Internal Calls": [
        "require(bool,string)",
        "_checkCyclicDependency",
        "require(bool,string)"
    ],
    "Library Calls": [],
    "Low-Level Calls": [],
    "Code": "function _checkCyclicDependency(address test, IStrategy strategy, ITokenRegistry registry) private view {\n        require(address(strategy) != test, \"Cyclic dependency\");\n        require(!strategy.supportsSynths(), \"Synths not supported\");\n        address[] memory strategyItems = strategy.items();\n        for (uint256 i = 0; i < strategyItems.length; i++) {\n          if (registry.estimatorCategories(strategyItems[i]) == uint256(EstimatorCategory.STRATEGY))\n              _checkCyclicDependency(test, IStrategy(strategyItems[i]), registry);\n        }\n    }"
}