{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bool",
          "name": "positive",
          "type": "bool"
        }
      ],
      "name": "assetEarnings",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "config",
      "outputs": [
        {
          "internalType": "contract IPolicyPoolConfig",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "currency",
      "outputs": [
        {
          "internalType": "contract IERC20Metadata",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "eToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "deposit",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getETokenAt",
      "outputs": [
        {
          "internalType": "contract IEToken",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getETokenCount",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getInvestable",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "scr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForEnsuro",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForRm",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForLps",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "customer",
          "type": "address"
        },
        {
          "internalType": "uint96",
          "name": "internalId",
          "type": "uint96"
        }
      ],
      "name": "newPolicy",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "policyNFT",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "receiveGrant",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "scr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForEnsuro",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForRm",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForLps",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "payout",
          "type": "uint256"
        }
      ],
      "name": "resolvePolicy",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "id",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "payout",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "scr",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lossProb",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purePremium",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForEnsuro",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForRm",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "premiumForLps",
              "type": "uint256"
            },
            {
              "internalType": "contract IRiskModule",
              "name": "riskModule",
              "type": "address"
            },
            {
              "internalType": "uint40",
              "name": "start",
              "type": "uint40"
            },
            {
              "internalType": "uint40",
              "name": "expiration",
              "type": "uint40"
            }
          ],
          "internalType": "struct Policy.PolicyData",
          "name": "policy",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "customerWon",
          "type": "bool"
        }
      ],
      "name": "resolvePolicyFullPayout",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IAssetManager",
          "name": "newAssetManager",
          "type": "address"
        }
      ],
      "name": "setAssetManager",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalETokenSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract IEToken",
          "name": "eToken",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "withdraw",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "ast": {
    "absolutePath": "interfaces/IPolicyPool.sol",
    "exportedSymbols": {
      "IAssetManager": [
        13
      ],
      "IERC20Metadata": [
        1097
      ],
      "IEToken": [
        132
      ],
      "IPolicyPool": [
        383
      ],
      "IPolicyPoolConfig": [
        516
      ],
      "Policy": [
        1072
      ]
    },
    "id": 384,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 268,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "39:23:8"
      },
      {
        "absolutePath": "node_modules/@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol",
        "id": 270,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 384,
        "sourceUnit": 1098,
        "src": "64:97:8",
        "symbolAliases": [
          {
            "foreign": {
              "id": 269,
              "name": "IERC20Metadata",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "72:14:8",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "contracts/Policy.sol",
        "file": "../contracts/Policy.sol",
        "id": 272,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 384,
        "sourceUnit": 1073,
        "src": "162:47:8",
        "symbolAliases": [
          {
            "foreign": {
              "id": 271,
              "name": "Policy",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "170:6:8",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IEToken.sol",
        "file": "./IEToken.sol",
        "id": 274,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 384,
        "sourceUnit": 133,
        "src": "210:38:8",
        "symbolAliases": [
          {
            "foreign": {
              "id": 273,
              "name": "IEToken",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "218:7:8",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IPolicyPoolConfig.sol",
        "file": "./IPolicyPoolConfig.sol",
        "id": 276,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 384,
        "sourceUnit": 517,
        "src": "249:58:8",
        "symbolAliases": [
          {
            "foreign": {
              "id": 275,
              "name": "IPolicyPoolConfig",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "257:17:8",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "absolutePath": "interfaces/IAssetManager.sol",
        "file": "./IAssetManager.sol",
        "id": 278,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 384,
        "sourceUnit": 14,
        "src": "308:50:8",
        "symbolAliases": [
          {
            "foreign": {
              "id": 277,
              "name": "IAssetManager",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "src": "316:13:8",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [],
        "contractDependencies": [],
        "contractKind": "interface",
        "fullyImplemented": false,
        "id": 383,
        "linearizedBaseContracts": [
          383
        ],
        "name": "IPolicyPool",
        "nameLocation": "370:11:8",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "functionSelector": "e5a6b10f",
            "id": 284,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "currency",
            "nameLocation": "395:8:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 279,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "403:2:8"
            },
            "returnParameters": {
              "id": 283,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 282,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 284,
                  "src": "429:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IERC20Metadata_$1097",
                    "typeString": "contract IERC20Metadata"
                  },
                  "typeName": {
                    "id": 281,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 280,
                      "name": "IERC20Metadata",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 1097,
                      "src": "429:14:8"
                    },
                    "referencedDeclaration": 1097,
                    "src": "429:14:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IERC20Metadata_$1097",
                      "typeString": "contract IERC20Metadata"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "428:16:8"
            },
            "scope": 383,
            "src": "386:59:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "79502c55",
            "id": 290,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "config",
            "nameLocation": "458:6:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "464:2:8"
            },
            "returnParameters": {
              "id": 289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 288,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 290,
                  "src": "490:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IPolicyPoolConfig_$516",
                    "typeString": "contract IPolicyPoolConfig"
                  },
                  "typeName": {
                    "id": 287,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 286,
                      "name": "IPolicyPoolConfig",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 516,
                      "src": "490:17:8"
                    },
                    "referencedDeclaration": 516,
                    "src": "490:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IPolicyPoolConfig_$516",
                      "typeString": "contract IPolicyPoolConfig"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "489:19:8"
            },
            "scope": 383,
            "src": "449:60:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "af02808a",
            "id": 295,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "policyNFT",
            "nameLocation": "522:9:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 291,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "531:2:8"
            },
            "returnParameters": {
              "id": 294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 293,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 295,
                  "src": "557:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 292,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "557:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "556:9:8"
            },
            "scope": 383,
            "src": "513:53:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "43060237",
            "id": 301,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "setAssetManager",
            "nameLocation": "579:15:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 299,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 298,
                  "mutability": "mutable",
                  "name": "newAssetManager",
                  "nameLocation": "609:15:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 301,
                  "src": "595:29:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IAssetManager_$13",
                    "typeString": "contract IAssetManager"
                  },
                  "typeName": {
                    "id": 297,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 296,
                      "name": "IAssetManager",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 13,
                      "src": "595:13:8"
                    },
                    "referencedDeclaration": 13,
                    "src": "595:13:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IAssetManager_$13",
                      "typeString": "contract IAssetManager"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "594:31:8"
            },
            "returnParameters": {
              "id": 300,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "634:0:8"
            },
            "scope": 383,
            "src": "570:65:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "19704a3a",
            "id": 313,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "newPolicy",
            "nameLocation": "648:9:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 309,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 304,
                  "mutability": "mutable",
                  "name": "policy",
                  "nameLocation": "688:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 313,
                  "src": "663:31:8",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_PolicyData_$806_memory_ptr",
                    "typeString": "struct Policy.PolicyData"
                  },
                  "typeName": {
                    "id": 303,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 302,
                      "name": "Policy.PolicyData",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 806,
                      "src": "663:17:8"
                    },
                    "referencedDeclaration": 806,
                    "src": "663:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PolicyData_$806_storage_ptr",
                      "typeString": "struct Policy.PolicyData"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 306,
                  "mutability": "mutable",
                  "name": "customer",
                  "nameLocation": "708:8:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 313,
                  "src": "700:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 305,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "700:7:8",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 308,
                  "mutability": "mutable",
                  "name": "internalId",
                  "nameLocation": "729:10:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 313,
                  "src": "722:17:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint96",
                    "typeString": "uint96"
                  },
                  "typeName": {
                    "id": 307,
                    "name": "uint96",
                    "nodeType": "ElementaryTypeName",
                    "src": "722:6:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint96",
                      "typeString": "uint96"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "657:86:8"
            },
            "returnParameters": {
              "id": 312,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 311,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 313,
                  "src": "762:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 310,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "762:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "761:9:8"
            },
            "scope": 383,
            "src": "639:132:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "9e556b2b",
            "id": 321,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "resolvePolicy",
            "nameLocation": "784:13:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 319,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 316,
                  "mutability": "mutable",
                  "name": "policy",
                  "nameLocation": "825:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 321,
                  "src": "798:33:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_PolicyData_$806_calldata_ptr",
                    "typeString": "struct Policy.PolicyData"
                  },
                  "typeName": {
                    "id": 315,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 314,
                      "name": "Policy.PolicyData",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 806,
                      "src": "798:17:8"
                    },
                    "referencedDeclaration": 806,
                    "src": "798:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PolicyData_$806_storage_ptr",
                      "typeString": "struct Policy.PolicyData"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 318,
                  "mutability": "mutable",
                  "name": "payout",
                  "nameLocation": "841:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 321,
                  "src": "833:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 317,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "833:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "797:51:8"
            },
            "returnParameters": {
              "id": 320,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "857:0:8"
            },
            "scope": 383,
            "src": "775:83:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "066dda0e",
            "id": 329,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "resolvePolicyFullPayout",
            "nameLocation": "871:23:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 324,
                  "mutability": "mutable",
                  "name": "policy",
                  "nameLocation": "922:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 329,
                  "src": "895:33:8",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_PolicyData_$806_calldata_ptr",
                    "typeString": "struct Policy.PolicyData"
                  },
                  "typeName": {
                    "id": 323,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 322,
                      "name": "Policy.PolicyData",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 806,
                      "src": "895:17:8"
                    },
                    "referencedDeclaration": 806,
                    "src": "895:17:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_PolicyData_$806_storage_ptr",
                      "typeString": "struct Policy.PolicyData"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 326,
                  "mutability": "mutable",
                  "name": "customerWon",
                  "nameLocation": "935:11:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 329,
                  "src": "930:16:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 325,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "930:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "894:53:8"
            },
            "returnParameters": {
              "id": 328,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "956:0:8"
            },
            "scope": 383,
            "src": "862:95:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "81ced71f",
            "id": 334,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "receiveGrant",
            "nameLocation": "970:12:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 332,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 331,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "991:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 334,
                  "src": "983:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 330,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "983:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "982:16:8"
            },
            "returnParameters": {
              "id": 333,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1007:0:8"
            },
            "scope": 383,
            "src": "961:47:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "65e29c7e",
            "id": 339,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getInvestable",
            "nameLocation": "1021:13:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 335,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1034:2:8"
            },
            "returnParameters": {
              "id": 338,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 337,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 339,
                  "src": "1060:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 336,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1060:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1059:9:8"
            },
            "scope": 383,
            "src": "1012:57:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "dea167d5",
            "id": 344,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getETokenCount",
            "nameLocation": "1082:14:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 340,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1096:2:8"
            },
            "returnParameters": {
              "id": 343,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 342,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 344,
                  "src": "1122:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 341,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1122:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1121:9:8"
            },
            "scope": 383,
            "src": "1073:58:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "b0ec4bcf",
            "id": 352,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "getETokenAt",
            "nameLocation": "1144:11:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 347,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 346,
                  "mutability": "mutable",
                  "name": "index",
                  "nameLocation": "1164:5:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "1156:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 345,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1156:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1155:15:8"
            },
            "returnParameters": {
              "id": 351,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 350,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 352,
                  "src": "1194:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IEToken_$132",
                    "typeString": "contract IEToken"
                  },
                  "typeName": {
                    "id": 349,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 348,
                      "name": "IEToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 132,
                      "src": "1194:7:8"
                    },
                    "referencedDeclaration": 132,
                    "src": "1194:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IEToken_$132",
                      "typeString": "contract IEToken"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1193:9:8"
            },
            "scope": 383,
            "src": "1135:68:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "ab600169",
            "id": 359,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "assetEarnings",
            "nameLocation": "1216:13:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 357,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 354,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1238:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 359,
                  "src": "1230:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 353,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1230:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 356,
                  "mutability": "mutable",
                  "name": "positive",
                  "nameLocation": "1251:8:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 359,
                  "src": "1246:13:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 355,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1246:4:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1229:31:8"
            },
            "returnParameters": {
              "id": 358,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1269:0:8"
            },
            "scope": 383,
            "src": "1207:63:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "47e7ef24",
            "id": 367,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "deposit",
            "nameLocation": "1283:7:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 365,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 362,
                  "mutability": "mutable",
                  "name": "eToken",
                  "nameLocation": "1299:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 367,
                  "src": "1291:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IEToken_$132",
                    "typeString": "contract IEToken"
                  },
                  "typeName": {
                    "id": 361,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 360,
                      "name": "IEToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 132,
                      "src": "1291:7:8"
                    },
                    "referencedDeclaration": 132,
                    "src": "1291:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IEToken_$132",
                      "typeString": "contract IEToken"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 364,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1315:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 367,
                  "src": "1307:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 363,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1307:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1290:32:8"
            },
            "returnParameters": {
              "id": 366,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1331:0:8"
            },
            "scope": 383,
            "src": "1274:58:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "f3fef3a3",
            "id": 377,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "withdraw",
            "nameLocation": "1345:8:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 373,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 370,
                  "mutability": "mutable",
                  "name": "eToken",
                  "nameLocation": "1362:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 377,
                  "src": "1354:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_IEToken_$132",
                    "typeString": "contract IEToken"
                  },
                  "typeName": {
                    "id": 369,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 368,
                      "name": "IEToken",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 132,
                      "src": "1354:7:8"
                    },
                    "referencedDeclaration": 132,
                    "src": "1354:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_IEToken_$132",
                      "typeString": "contract IEToken"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 372,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1378:6:8",
                  "nodeType": "VariableDeclaration",
                  "scope": 377,
                  "src": "1370:14:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 371,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1370:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1353:32:8"
            },
            "returnParameters": {
              "id": 376,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 375,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 377,
                  "src": "1404:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1404:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1403:9:8"
            },
            "scope": 383,
            "src": "1336:77:8",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "functionSelector": "b77ddfea",
            "id": 382,
            "implemented": false,
            "kind": "function",
            "modifiers": [],
            "name": "totalETokenSupply",
            "nameLocation": "1426:17:8",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 378,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1443:2:8"
            },
            "returnParameters": {
              "id": 381,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 380,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 382,
                  "src": "1469:7:8",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 379,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1469:7:8",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1468:9:8"
            },
            "scope": 383,
            "src": "1417:61:8",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "external"
          }
        ],
        "scope": 384,
        "src": "360:1120:8",
        "usedErrors": []
      }
    ],
    "src": "39:1442:8"
  },
  "contractName": "IPolicyPool",
  "dependencies": [
    "IAssetManager",
    "IERC20",
    "IERC20Metadata",
    "IEToken",
    "IExchange",
    "IInsolvencyHook",
    "ILPWhitelist",
    "IPolicyPoolConfig",
    "IRiskModule"
  ],
  "offset": [
    360,
    1480
  ],
  "sha1": "76d1723e8d08cfda611d7ff05228b3e82161c06b",
  "source": "// SPDX-License-Identifier: Apache-2.0\npragma solidity ^0.8.0;\n\nimport {IERC20Metadata} from \"@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol\";\nimport {Policy} from \"../contracts/Policy.sol\";\nimport {IEToken} from \"./IEToken.sol\";\nimport {IPolicyPoolConfig} from \"./IPolicyPoolConfig.sol\";\nimport {IAssetManager} from \"./IAssetManager.sol\";\n\ninterface IPolicyPool {\n  function currency() external view returns (IERC20Metadata);\n\n  function config() external view returns (IPolicyPoolConfig);\n\n  function policyNFT() external view returns (address);\n\n  function setAssetManager(IAssetManager newAssetManager) external;\n\n  function newPolicy(\n    Policy.PolicyData memory policy,\n    address customer,\n    uint96 internalId\n  ) external returns (uint256);\n\n  function resolvePolicy(Policy.PolicyData calldata policy, uint256 payout) external;\n\n  function resolvePolicyFullPayout(Policy.PolicyData calldata policy, bool customerWon) external;\n\n  function receiveGrant(uint256 amount) external;\n\n  function getInvestable() external view returns (uint256);\n\n  function getETokenCount() external view returns (uint256);\n\n  function getETokenAt(uint256 index) external view returns (IEToken);\n\n  function assetEarnings(uint256 amount, bool positive) external;\n\n  function deposit(IEToken eToken, uint256 amount) external;\n\n  function withdraw(IEToken eToken, uint256 amount) external returns (uint256);\n\n  function totalETokenSupply() external view returns (uint256);\n}\n",
  "type": "interface"
}