{
  "id": "1301a1b652667598e7fa488902386cf0",
  "_format": "hh-sol-build-info-1",
  "solcVersion": "0.6.11",
  "solcLongVersion": "0.6.11+commit.5ef660b1",
  "input": {
    "language": "Solidity",
    "sources": {
      "contracts/core/premium-calculator/v1/interfaces/IPremiumCalc.sol": {
        "content": "// SPDX-License-Identifier: AGPL-3.0-or-later // hevm: flattened sources of contracts/core/premium-calculator/v1/interfaces/IPremiumCalc.sol\npragma solidity =0.6.11;\n\n////// contracts/core/calculator/v1/interfaces/ICalc.sol\n/* pragma solidity 0.6.11; */\n\n/// @title Calc calculates.\ninterface ICalc {\n\n    /**\n        @dev The Calculator type.\n     */\n    function calcType() external pure returns (uint8);\n\n    /**\n        @dev The Calculator name.\n     */\n    function name() external pure returns (bytes32);\n\n}\n\n////// contracts/core/premium-calculator/v1/interfaces/IPremiumCalc.sol\n/* pragma solidity 0.6.11; */\n\n/* import { ICalc } from \"../../../calculator/v1/interfaces/ICalc.sol\"; */\n\n/// @title PremiumCalc calculates premium fees on Loans.\ninterface IPremiumCalc is ICalc {\n\n    /**\n        @dev The flat percentage fee (in basis points) of principal to charge as a premium when calling a Loan.\n     */\n    function premiumFee() external view returns (uint256);\n\n    /**\n        @dev    Calculates the premium payment for a Loan, when making a full payment.\n        @param  _loan         The address of a Loan to calculate a premium payment for.\n        @return total         The principal + interest.\n        @return principalOwed The principal.\n        @return interest      The interest.\n     */\n    function getPremiumPayment(address _loan) external view returns (uint256 total, uint256 principalOwed, uint256 interest);\n\n}\n"
      }
    },
    "settings": {
      "optimizer": {
        "enabled": true,
        "runs": 200
      },
      "outputSelection": {
        "*": {
          "*": [
            "abi",
            "evm.bytecode",
            "evm.deployedBytecode",
            "evm.methodIdentifiers"
          ],
          "": [
            "ast"
          ]
        }
      }
    }
  },
  "output": {
    "contracts": {
      "contracts/core/premium-calculator/v1/interfaces/IPremiumCalc.sol": {
        "ICalc": {
          "abi": [
            {
              "inputs": [],
              "name": "calcType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "calcType()": "9d8ae446",
              "name()": "06fdde03"
            }
          }
        },
        "IPremiumCalc": {
          "abi": [
            {
              "inputs": [],
              "name": "calcType",
              "outputs": [
                {
                  "internalType": "uint8",
                  "name": "",
                  "type": "uint8"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [
                {
                  "internalType": "address",
                  "name": "_loan",
                  "type": "address"
                }
              ],
              "name": "getPremiumPayment",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "total",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "principalOwed",
                  "type": "uint256"
                },
                {
                  "internalType": "uint256",
                  "name": "interest",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "name",
              "outputs": [
                {
                  "internalType": "bytes32",
                  "name": "",
                  "type": "bytes32"
                }
              ],
              "stateMutability": "pure",
              "type": "function"
            },
            {
              "inputs": [],
              "name": "premiumFee",
              "outputs": [
                {
                  "internalType": "uint256",
                  "name": "",
                  "type": "uint256"
                }
              ],
              "stateMutability": "view",
              "type": "function"
            }
          ],
          "evm": {
            "bytecode": {
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "deployedBytecode": {
              "immutableReferences": {},
              "linkReferences": {},
              "object": "",
              "opcodes": "",
              "sourceMap": ""
            },
            "methodIdentifiers": {
              "calcType()": "9d8ae446",
              "getPremiumPayment(address)": "de6d72cb",
              "name()": "06fdde03",
              "premiumFee()": "209c9523"
            }
          }
        }
      }
    },
    "sources": {
      "contracts/core/premium-calculator/v1/interfaces/IPremiumCalc.sol": {
        "ast": {
          "absolutePath": "contracts/core/premium-calculator/v1/interfaces/IPremiumCalc.sol",
          "exportedSymbols": {
            "ICalc": [
              15
            ],
            "IPremiumCalc": [
              37
            ]
          },
          "id": 38,
          "license": "AGPL-3.0-or-later",
          "nodeType": "SourceUnit",
          "nodes": [
            {
              "id": 1,
              "literals": [
                "solidity",
                "=",
                "0.6",
                ".11"
              ],
              "nodeType": "PragmaDirective",
              "src": "141:24:0"
            },
            {
              "abstract": false,
              "baseContracts": [],
              "contractDependencies": [],
              "contractKind": "interface",
              "documentation": {
                "id": 2,
                "nodeType": "StructuredDocumentation",
                "src": "255:28:0",
                "text": "@title Calc calculates."
              },
              "fullyImplemented": false,
              "id": 15,
              "linearizedBaseContracts": [
                15
              ],
              "name": "ICalc",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 3,
                    "nodeType": "StructuredDocumentation",
                    "src": "306:45:0",
                    "text": "@dev The Calculator type."
                  },
                  "functionSelector": "9d8ae446",
                  "id": 8,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "calcType",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 4,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "373:2:0"
                  },
                  "returnParameters": {
                    "id": 7,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 6,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 8,
                        "src": "399:5:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 5,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "399:5:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "398:7:0"
                  },
                  "scope": 15,
                  "src": "356:50:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 9,
                    "nodeType": "StructuredDocumentation",
                    "src": "412:45:0",
                    "text": "@dev The Calculator name."
                  },
                  "functionSelector": "06fdde03",
                  "id": 14,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "name",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 10,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "475:2:0"
                  },
                  "returnParameters": {
                    "id": 13,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 12,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 14,
                        "src": "501:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        "typeName": {
                          "id": 11,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "501:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "500:9:0"
                  },
                  "scope": 15,
                  "src": "462:48:0",
                  "stateMutability": "pure",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 38,
              "src": "283:230:0"
            },
            {
              "abstract": false,
              "baseContracts": [
                {
                  "arguments": null,
                  "baseName": {
                    "contractScope": null,
                    "id": 17,
                    "name": "ICalc",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 15,
                    "src": "777:5:0",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ICalc_$15",
                      "typeString": "contract ICalc"
                    }
                  },
                  "id": 18,
                  "nodeType": "InheritanceSpecifier",
                  "src": "777:5:0"
                }
              ],
              "contractDependencies": [
                15
              ],
              "contractKind": "interface",
              "documentation": {
                "id": 16,
                "nodeType": "StructuredDocumentation",
                "src": "694:57:0",
                "text": "@title PremiumCalc calculates premium fees on Loans."
              },
              "fullyImplemented": false,
              "id": 37,
              "linearizedBaseContracts": [
                37,
                15
              ],
              "name": "IPremiumCalc",
              "nodeType": "ContractDefinition",
              "nodes": [
                {
                  "body": null,
                  "documentation": {
                    "id": 19,
                    "nodeType": "StructuredDocumentation",
                    "src": "790:123:0",
                    "text": "@dev The flat percentage fee (in basis points) of principal to charge as a premium when calling a Loan."
                  },
                  "functionSelector": "209c9523",
                  "id": 24,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "premiumFee",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 20,
                    "nodeType": "ParameterList",
                    "parameters": [],
                    "src": "937:2:0"
                  },
                  "returnParameters": {
                    "id": 23,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 22,
                        "mutability": "mutable",
                        "name": "",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 24,
                        "src": "963:7:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 21,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "963:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "962:9:0"
                  },
                  "scope": 37,
                  "src": "918:54:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                },
                {
                  "body": null,
                  "documentation": {
                    "id": 25,
                    "nodeType": "StructuredDocumentation",
                    "src": "978:331:0",
                    "text": "@dev    Calculates the premium payment for a Loan, when making a full payment.\n@param  _loan         The address of a Loan to calculate a premium payment for.\n@return total         The principal + interest.\n@return principalOwed The principal.\n@return interest      The interest."
                  },
                  "functionSelector": "de6d72cb",
                  "id": 36,
                  "implemented": false,
                  "kind": "function",
                  "modifiers": [],
                  "name": "getPremiumPayment",
                  "nodeType": "FunctionDefinition",
                  "overrides": null,
                  "parameters": {
                    "id": 28,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 27,
                        "mutability": "mutable",
                        "name": "_loan",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1341:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "typeName": {
                          "id": 26,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "1341:7:0",
                          "stateMutability": "nonpayable",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1340:15:0"
                  },
                  "returnParameters": {
                    "id": 35,
                    "nodeType": "ParameterList",
                    "parameters": [
                      {
                        "constant": false,
                        "id": 30,
                        "mutability": "mutable",
                        "name": "total",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1379:13:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 29,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1379:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 32,
                        "mutability": "mutable",
                        "name": "principalOwed",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1394:21:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 31,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1394:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      },
                      {
                        "constant": false,
                        "id": 34,
                        "mutability": "mutable",
                        "name": "interest",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 36,
                        "src": "1417:16:0",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 33,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "1417:7:0",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "src": "1378:56:0"
                  },
                  "scope": 37,
                  "src": "1314:121:0",
                  "stateMutability": "view",
                  "virtual": false,
                  "visibility": "external"
                }
              ],
              "scope": 38,
              "src": "751:687:0"
            }
          ],
          "src": "141:1298:0"
        },
        "id": 0
      }
    }
  }
}
