{
  "contractName": "CECEngine",
  "abi": [
    {
      "inputs": [],
      "name": "MAX_CYCLE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "MAX_EVENT_SCHEDULE_SIZE",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "ONE_POINT_ZERO",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PRECISION",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "eomc",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "startTime",
          "type": "uint256"
        },
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "cycle",
          "type": "tuple"
        }
      ],
      "name": "adjustEndOfMonthConvention",
      "outputs": [
        {
          "internalType": "enum EndOfMonthConvention",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "bdc",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "computeEventTimeForEvent",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "decodeEvent",
      "outputs": [
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "scheduleTime",
          "type": "uint256"
        }
      ],
      "name": "encodeEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "getEpochOffset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftCalcTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "timestamp",
          "type": "uint256"
        },
        {
          "internalType": "enum BusinessDayConvention",
          "name": "convention",
          "type": "uint8"
        },
        {
          "internalType": "enum Calendar",
          "name": "calendar",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "maturityDate",
          "type": "uint256"
        }
      ],
      "name": "shiftEventTime",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "contractType",
      "outputs": [
        {
          "internalType": "enum ContractType",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computeStateForEvent",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "externalData",
          "type": "bytes32"
        }
      ],
      "name": "computePayoffForEvent",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "computeInitialState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "segmentStart",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "segmentEnd",
          "type": "uint256"
        }
      ],
      "name": "computeNonCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "computeCyclicScheduleSegment",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        },
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        }
      ],
      "name": "computeNextCyclicEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        },
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "name": "isEventScheduled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.11+commit.5ef660b1\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"MAX_CYCLE_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_EVENT_SCHEDULE_SIZE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"ONE_POINT_ZERO\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PRECISION\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"eomc\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"startTime\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"i\",\"type\":\"uint256\"},{\"internalType\":\"enum P\",\"name\":\"p\",\"type\":\"uint8\"},{\"internalType\":\"enum S\",\"name\":\"s\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSet\",\"type\":\"bool\"}],\"internalType\":\"struct IPS\",\"name\":\"cycle\",\"type\":\"tuple\"}],\"name\":\"adjustEndOfMonthConvention\",\"outputs\":[{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"enum EventType\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"computeCyclicScheduleSegment\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"bdc\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"computeEventTimeForEvent\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"terms\",\"type\":\"tuple\"}],\"name\":\"computeInitialState\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"enum EventType\",\"name\":\"\",\"type\":\"uint8\"}],\"name\":\"computeNextCyclicEvent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"internalType\":\"uint256\",\"name\":\"segmentStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"segmentEnd\",\"type\":\"uint256\"}],\"name\":\"computeNonCyclicScheduleSegment\",\"outputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"externalData\",\"type\":\"bytes32\"}],\"name\":\"computePayoffForEvent\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"terms\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"state\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"externalData\",\"type\":\"bytes32\"}],\"name\":\"computeStateForEvent\",\"outputs\":[{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"contractType\",\"outputs\":[{\"internalType\":\"enum ContractType\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"_event\",\"type\":\"bytes32\"}],\"name\":\"decodeEvent\",\"outputs\":[{\"internalType\":\"enum EventType\",\"name\":\"\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum EventType\",\"name\":\"eventType\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"scheduleTime\",\"type\":\"uint256\"}],\"name\":\"encodeEvent\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enum EventType\",\"name\":\"eventType\",\"type\":\"uint8\"}],\"name\":\"getEpochOffset\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enum ContractType\",\"name\":\"contractType\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractRole\",\"name\":\"contractRole\",\"type\":\"uint8\"},{\"internalType\":\"enum DayCountConvention\",\"name\":\"dayCountConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"businessDayConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum EndOfMonthConvention\",\"name\":\"endOfMonthConvention\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractPerformance\",\"name\":\"creditEventTypeCovered\",\"type\":\"uint8\"},{\"internalType\":\"enum FeeBasis\",\"name\":\"feeBasis\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"coverageOfCreditEnhancement\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_1\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"object\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"object2\",\"type\":\"bytes32\"},{\"internalType\":\"enum ContractReferenceType\",\"name\":\"_type\",\"type\":\"uint8\"},{\"internalType\":\"enum ContractReferenceRole\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"struct ContractReference\",\"name\":\"contractReference_2\",\"type\":\"tuple\"}],\"internalType\":\"struct CECTerms\",\"name\":\"\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"},{\"components\":[{\"internalType\":\"enum ContractPerformance\",\"name\":\"contractPerformance\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"statusDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"nonPerformingDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"exerciseDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"terminationDate\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lastCouponDay\",\"type\":\"uint256\"},{\"internalType\":\"int256\",\"name\":\"notionalPrincipal\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"accruedInterest\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"feeAccrued\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nominalInterestRate\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"interestScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"notionalScalingMultiplier\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"nextPrincipalRedemptionPayment\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseAmount\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"exerciseQuantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"quantity\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"couponAmountFixed\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"marginFactor\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"adjustmentFactor\",\"type\":\"int256\"}],\"internalType\":\"struct State\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"isEventScheduled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"convention\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"shiftCalcTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"},{\"internalType\":\"enum BusinessDayConvention\",\"name\":\"convention\",\"type\":\"uint8\"},{\"internalType\":\"enum Calendar\",\"name\":\"calendar\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"maturityDate\",\"type\":\"uint256\"}],\"name\":\"shiftEventTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"All numbers except unix timestamp are represented as multiple of 10 ** 18 inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18\",\"kind\":\"dev\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"details\":\"The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \\\"M\\\" period unit or multiple thereof\",\"params\":{\"cycle\":\"the cycle struct\",\"eomc\":\"the end of month convention to adjust\",\"startTime\":\"timestamp of the cycle start\"},\"returns\":{\"_0\":\"the adjusted end of month convention\"}},\"computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)\":{\"returns\":{\"_0\":\"event schedule segment\"}},\"computeEventTimeForEvent(bytes32,uint8,uint8,uint256)\":{\"details\":\"For optimization reasons not located in EventUtil by applying the BDC specified in the terms\"},\"computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))\":{\"params\":{\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"initial state of the contract\"}},\"computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)\":{\"returns\":{\"_0\":\"event schedule segment\"}},\"computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)\":{\"params\":{\"segmentEnd\":\"end timestamp of the segement\",\"segmentStart\":\"start timestamp of the segment\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"segment of the non-cyclic schedule\"}},\"computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"params\":{\"_event\":\"event for which the payoff should be evaluated\",\"externalData\":\"external data needed for POF evaluation (e.g. fxRate)\",\"state\":\"current state of the contract\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"the payoff of the event\"}},\"computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"params\":{\"_event\":\"event to be applied to the contract state\",\"externalData\":\"external data needed for STF evaluation (e.g. rate for RR events)\",\"state\":\"current state of the contract\",\"terms\":\"terms of the contract\"},\"returns\":{\"_0\":\"the resulting contract state\"}},\"isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))\":{\"returns\":{\"_0\":\"boolean indicating whether event is still scheduled\"}}},\"title\":\"CECEngine\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))\":{\"notice\":\"This function makes an adjustment on the end of month convention.\"},\"computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)\":{\"notice\":\"Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps. param terms terms of the contract param segmentStart start timestamp of the segment param segmentEnd end timestamp of the segement param eventType eventType of the cyclic schedule\"},\"computeEventTimeForEvent(bytes32,uint8,uint8,uint256)\":{\"notice\":\"Returns the event time for a given schedule time\"},\"computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))\":{\"notice\":\"Initialize contract state space based on the contract terms.\"},\"computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)\":{\"notice\":\"Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps. param terms terms of the contract param lastScheduleTime last occurrence of cyclic event param eventType eventType of the cyclic schedule\"},\"computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)\":{\"notice\":\"Computes a schedule segment of non-cyclic contract events based on the contract terms and the specified timestamps.\"},\"computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"notice\":\"Evaluates the payoff for an event under the current state of the contract.\"},\"computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)\":{\"notice\":\"Applys an event to the current state of a contract and returns the resulting contract state.\"},\"getEpochOffset(uint8)\":{\"notice\":\"Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp\"},\"isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))\":{\"notice\":\"Verifies that the provided event is still scheduled under the terms, the current state of the contract and the current state of the underlying. param _event event for which to check if its still scheduled param terms terms of the contract param state current state of the contract param hasUnderlying boolean indicating whether the contract has an underlying contract param underlyingState state of the underlying (empty state object if non-existing)\"},\"shiftCalcTime(uint256,uint8,uint8,uint256)\":{\"notice\":\"Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided.\"}},\"notice\":\"Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"@atpar/actus-solidity/contracts/Engines/CEC/CECEngine.sol\":\"CECEngine\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@atpar/actus-solidity/contracts/Core/ACTUSConstants.sol\":{\"keccak256\":\"0xd7588866afdab6298dd5b64c5fe0ca63230236538d711932e7a5a17928d1226b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://2a0678d5f895239119f463a3ae8a58c5c27b872c91db1cd4253ce5866481c6cd\",\"dweb:/ipfs/QmPXsMXFf1Qar8JCnKTL6Nizf63sZEQQt7XosrdeEnG2CE\"]},\"@atpar/actus-solidity/contracts/Core/ACTUSTypes.sol\":{\"keccak256\":\"0x4374a4c79ef02bb008994431870badedd532d09639fef8d7378039faee88d4dd\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c0d32929c237f8d04ff4117611292f874bb1dd785b8ec94c04389d608c11481c\",\"dweb:/ipfs/QmVu3awVGWDvqMCjPhmzcCQCRg4VNr5XxcDRWDECTr17TV\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/BusinessDayConventions.sol\":{\"keccak256\":\"0xb67309595d06a957324467896ed9ece5db6c064a40733528d2405593d083f358\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a77e96b548901c4ee87943de5a7093d178bffe1daa72b6e303ddc1fac93f5173\",\"dweb:/ipfs/QmctKP5Hp7B4YtzzC5q3cRJJiiPS4a5US6vpHDb94paaFT\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/ContractRoleConventions.sol\":{\"keccak256\":\"0x0e86e103607557626fc092ae2c9e2ea643115640a0b212ec34ef074edb3cc048\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://91386c9f6d3f83f6712eb0cb6378cfb7de4ef9745280e4ac7e12bad1dd97c4b3\",\"dweb:/ipfs/QmSJ9EoPorkSrhKSNhM9WBYMTtYuLqjHCpPThf8KHWRp7r\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/DayCountConventions.sol\":{\"keccak256\":\"0x7147f1662bbd8abd04dffe454db3743828bae4476621ff158c94dd967b8573e1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d3be9ed484ad75d87b485d7c779d72b980c711735ed7e2ebc9622949a51857a0\",\"dweb:/ipfs/QmVdyMD4PW8wMdhbxoQBqAVNNN7fRwvpTVpCWKBLbLoqmh\"]},\"@atpar/actus-solidity/contracts/Core/Conventions/EndOfMonthConventions.sol\":{\"keccak256\":\"0xe004912bd32ef22ac6ee91f35a3855b06492d8a89f585f1a508c1c26349fd880\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e70d558bee746b797cdcadf84d5c9cd1b77fc6e99a089524ecaeb91201c71dcd\",\"dweb:/ipfs/QmcxpSKn5ZG4DPrSkm1Pxd21So6NKcHdiX5zfpExD5eLpv\"]},\"@atpar/actus-solidity/contracts/Core/Core.sol\":{\"keccak256\":\"0x0863cccef5f0e90e295c9b913a7d18b7e029cbd33179d4d23b2e5c8479b2077b\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d7a9fb13a29e64eaad1e97129952d23c6be6e2c5224dfdd0b62766330b05efd1\",\"dweb:/ipfs/QmUyTmuSfv3kDw4wGrP7ZemJJcxWRNRPYvwNc3WEC1YWoR\"]},\"@atpar/actus-solidity/contracts/Core/SignedMath.sol\":{\"keccak256\":\"0x179745be164f4540d848a50eeb8aea4ec3a0ddabc50f4c122c41ec0463e849c7\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e1088b178902de60c611c2dffd2c8943cc7b68988c9083936b760864775db7da\",\"dweb:/ipfs/QmV9XYTU6a8nPzoJv9FjRV4Z2rfbymGGARmzka57ydD1FG\"]},\"@atpar/actus-solidity/contracts/Core/Utils/CycleUtils.sol\":{\"keccak256\":\"0x230700c45141dbc7973f813d1eae8ea2fe3a804489b7f29f46d44ac5d5f12048\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://a2bebe3ddd62e9c2ede6a298ef956b8315198da601223a3900d07490dab3b7f1\",\"dweb:/ipfs/QmWyQxUsCjGMRKmxseE61qaipeqHVcZ6tLhVXvLfKnFkxo\"]},\"@atpar/actus-solidity/contracts/Core/Utils/EventUtils.sol\":{\"keccak256\":\"0x9995f89d4c5981ed389e941f578414eb901a4fde0b2eb5d815a43d86a9f53d98\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://bc3b3a4f33554f80e19328158ff913d700ff8133d08f434b33a846852cb927dd\",\"dweb:/ipfs/QmawYPv9PguBqrFN5YquvUvbYC2MdtTC4Zkyj3uGxiieHW\"]},\"@atpar/actus-solidity/contracts/Core/Utils/PeriodUtils.sol\":{\"keccak256\":\"0xb549e34dc631989f8aae1b8a397bf77598b8c018860645a627d2929229543a79\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://8a0ef5e2ad69ef87b9fc2beeed66336b3857c576efb9833b40a1be2ee35786fc\",\"dweb:/ipfs/QmT33MWqdjecGoPj8Js6a5fgESTcGW5vbQqYamKRDJZnhS\"]},\"@atpar/actus-solidity/contracts/Core/Utils/Utils.sol\":{\"keccak256\":\"0xeb3b016061350187b61618b1f0fed88e3dcc6feb8098a873ac55ae861a61a280\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://eff5591bd3ea0d66b85c0d0ed9d92388946f6ee67e8079656a828cc7a94d6bf1\",\"dweb:/ipfs/QmZPfJpENC62LEZWqWDnu8LmTrrv6CDtJkbTdQtdNpuDds\"]},\"@atpar/actus-solidity/contracts/Engines/CEC/CECEngine.sol\":{\"keccak256\":\"0xbda2a155aa7b2d2a5913ac0c2dc9e4f0c8eb5bbfa59b8eae1f7f213bcab6c28e\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://ed084212852396488be5f647ffb615735ec9e222a11610f182a4ebe6cad8ce28\",\"dweb:/ipfs/QmR8PYUXPuhHekJ3exVnKVcmDnzz9iqQoLNjiRJGoMJfJy\"]},\"@atpar/actus-solidity/contracts/Engines/CEC/CECPOF.sol\":{\"keccak256\":\"0x7f4e4183a22faf2b30a344ffc7072d41fa41419956f6654bda905236da0be2e3\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://e57499dd7b2a72727e2b71804916b8300c844c6eee4cde0ec4377a0c6e944740\",\"dweb:/ipfs/QmQS38WjC9EVZSxG3ksYn1kBmCWAc2H4rGXhPdGRGDK61v\"]},\"@atpar/actus-solidity/contracts/Engines/CEC/CECSTF.sol\":{\"keccak256\":\"0x692dc1c470dd47fae162501aeeea193dcc2c670110a1be094659740ccf907db1\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://d75921660b8a6c66d62fad1cc944868fa465e575a758f27d894c6d7794870761\",\"dweb:/ipfs/QmZPey49CqGeMNJn8mVkuXJ1NB9Mu7hbEEVShzKxLYdy1e\"]},\"@atpar/actus-solidity/contracts/Engines/CEC/ICECEngine.sol\":{\"keccak256\":\"0x0bfba7d3dade34a306b829221bff999da6e76e785257e9cadb3a226b91f2f9c2\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://c22e7eaea7aed3f798b29ec8a39d253c02d403fcc34b74dbfa7eb279c2f649c1\",\"dweb:/ipfs/QmNwDr3xx3rpm1vNipSDCFZeknpu1RUtTE5VunrQiaJKPv\"]},\"@atpar/actus-solidity/contracts/Engines/IEngine.sol\":{\"keccak256\":\"0xdee7e7d2f233c108231be14130dc2dbcf8eb0374636034f75c330a4cd3e1c7cc\",\"license\":\"Apache-2.0\",\"urls\":[\"bzz-raw://0fe8e1c0c4d447b4b180f53574016ff852af90faa1230be5b4c81464b9b5ffc8\",\"dweb:/ipfs/QmctLgYPvacjTzNS7iJBDkXjEzdbD4GDkVnZE9FJa26oX4\"]},\"@atpar/actus-solidity/contracts/external/BokkyPooBah/BokkyPooBahsDateTimeLibrary.sol\":{\"keccak256\":\"0x679533db9ba3257086015c0435c7d0de7a0a2f352a9de725db294e3f42c17391\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c586a5d8d9a654840c3655ccd4e47458d1e781c7542ec6fd2c29638b0dee57d\",\"dweb:/ipfs/QmeoQpnTMU4pa4iwKJcKmbNm7P54UCxux2G9rJyTCyq8GZ\"]},\"openzeppelin-solidity/contracts/math/SafeMath.sol\":{\"keccak256\":\"0xaa0e11a791bc975d581a4f5b7a8d9c16a880a354c89312318ae072ae3e740409\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://982d8b344f76193834260436d74c81e5a8f9e89106bb4cd72bbaabda4f3f59c2\",\"dweb:/ipfs/QmSrvP5TkQRhKDVCTpsV3uaKLBhkt7PjUY89vdtM9o5ybK\"]},\"openzeppelin-solidity/contracts/math/SignedSafeMath.sol\":{\"keccak256\":\"0xb2db870ccd849f107e3196d346fc4983eb9a041d117b9ff3a53950df606658b7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0add6dbdceb130d5cd140b8106e7884606dce98e817b3547e0967b76921bd473\",\"dweb:/ipfs/QmRUhmQKxoVFhHaQKHPNUYeSty1rw9TDcDPB5PdDUkqvbg\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b5061243d806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063e05a66e011610071578063e05a66e014610269578063e726d6801461027c578063edc0465f14610239578063f5586e051461028f578063f73ca804146102a257610121565b8063aaf5eb681461021e578063c26b940b14610226578063c40c5a9814610239578063cb2ef6f714610241578063d4f8d3f31461025657610121565b806356972fbe116100f457806356972fbe146101a25780636f37e55b146101c257806372540003146101ca578063811322fb146101eb57806398c29ea4146101fe57610121565b8063179331f314610126578063183ced6e1461014f5780631a2e165d1461016f57806352d183751461018f575b600080fd5b6101396101343660046118c2565b6102b5565b6040516101469190611d6b565b60405180910390f35b61016261015d366004611a76565b610385565b6040516101469190611cff565b61018261017d3660046117f3565b61039d565b6040516101469190611d4e565b61018261019d3660046119fd565b6103c2565b6101b56101b036600461183d565b6103cb565b6040516101469190611d43565b6101826103d6565b6101dd6101d83660046117db565b6103e2565b604051610146929190611d79565b6101826101f9366004611953565b61040b565b61021161020c36600461199a565b610421565b60405161014691906122b6565b61018261047d565b6101826102343660046119b6565b610482565b6101826104b5565b6102496104ba565b6040516101469190611d57565b6102116102643660046119b6565b6104bf565b61018261027736600461196f565b6104ef565b61018261028a366004611ccb565b61050f565b61018261029d366004611ccb565b610662565b6101626102b0366004611a40565b6106cd565b600060018460018111156102c557fe5b1415610341576102d4836107b0565b6102dd846107d2565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b8152600401610375906121c3565b60405180910390fd5b9392505050565b6040805160008152602081019091525b949350505050565b6000806103a9866103e2565b9150506103b88186868661050f565b9695505050505050565b60009392505050565b600195945050505050565b670de0b6b3a764000081565b6000808060f884901c601c8111156103f657fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561041957fe5b90505b919050565b61042961165e565b61043161165e565b6000815261010083013560208201526101208301356060808301919091526101408401359061046e90610469908601604087016118a3565b6107e1565b60000b0260e082015292915050565b601281565b60006104ac61049636879003870187611ac2565b6104a536879003870187611bce565b85856108a5565b95945050505050565b607881565b601190565b6104c761165e565b6104ac6104d936879003870187611ac2565b6104e836879003870187611bce565b8585610956565b60008160f884601c81111561050057fe5b60ff16901b1790505b92915050565b600081851415610520575083610395565b600184600881111561052e57fe5b14806105455750600384600881111561054357fe5b145b1561055b576105548584610a07565b9050610395565b600284600881111561056957fe5b14806105805750600484600881111561057e57fe5b145b156105c45760006105918685610a07565b905061059c86610a63565b6105a582610a63565b14156105b2579050610395565b6105bc8685610a7a565b915050610395565b60058460088111156105d257fe5b14806105e9575060078460088111156105e757fe5b145b156105f8576105548584610a7a565b600684600881111561060657fe5b148061061d5750600884600881111561061b57fe5b145b1561065957600061062e8685610a7a565b905061063986610a63565b61064282610a63565b141561064f579050610395565b6105bc8685610a07565b50929392505050565b6000600384600881111561067257fe5b14806106895750600484600881111561068757fe5b145b8061069f5750600784600881111561069d57fe5b145b806106b5575060088460088111156106b357fe5b145b156106c1575083610395565b6104ac8585858561050f565b60606106d76116f8565b60006106e98661012001358686610ac8565b15156001141561071c5761070360148761012001356104ef565b828261ffff166078811061071357fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561073957600080fd5b50604051908082528060200260200182016040528015610763578160200160208202803683370190505b50905060005b8261ffff168110156107a55783816078811061078157fe5b602002015182828151811061079257fe5b6020908102919091010152600101610769565b509695505050505050565b600080806107c362015180855b04610b01565b50915091506103958282610b97565b600061039562015180836107bd565b60008082600c8111156107f057fe5b14156107fe5750600161041c565b600182600c81111561080c57fe5b141561081b575060001961041c565b600682600c81111561082957fe5b14156108375750600161041c565b600782600c81111561084557fe5b1415610854575060001961041c565b600282600c81111561086257fe5b14156108705750600161041c565b600382600c81111561087e57fe5b141561088d575060001961041c565b60405162461bcd60e51b815260040161037590611f59565b60008060006108b3856103e2565b9092509050600b82601c8111156108c657fe5b14156108d757600092505050610395565b601a82601c8111156108e557fe5b14156108f657600092505050610395565b601b82601c81111561090457fe5b141561091f5761091687878387610c1d565b92505050610395565b601482601c81111561092d57fe5b141561093e57600092505050610395565b60405162461bcd60e51b815260040161037590612176565b61095e61165e565b60008061096a856103e2565b9092509050601a82601c81111561097d57fe5b141561098f5761091687878387610c32565b601482601c81111561099d57fe5b14156109af5761091687878387610d3e565b601b82601c8111156109bd57fe5b14156109cf5761091687878387610d6d565b600b82601c8111156109dd57fe5b14156109ef5761091687878387610d8c565b60405162461bcd60e51b815260040161037590611de4565b60006001826001811115610a1757fe5b1415610a5c57610a2683610d9d565b60061415610a4057610a39836002610db0565b9050610509565b610a4983610d9d565b60071415610a5c57610a39836001610db0565b5090919050565b6000610a7262015180836107bd565b509392505050565b60006001826001811115610a8a57fe5b1415610a5c57610a9983610d9d565b60061415610aac57610a39836001610dc5565b610ab583610d9d565b60071415610a5c57610a39836002610dc5565b600081831115610ada5750600061037e565b838311158015610aea5750818411155b15610af75750600161037e565b5060009392505050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281610b5857fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480610ba85750816003145b80610bb35750816005145b80610bbe5750816007145b80610bc95750816008145b80610bd4575081600a145b80610bdf575081600c145b15610bec5750601f610509565b81600214610bfc5750601e610509565b610c0583610dda565b610c1057601c610c13565b601d5b60ff169392505050565b6101208301516101c084015101949350505050565b610c3a61165e565b6000610c85610c5c8660200151886080015189602001518a6101200151610662565b610c758689608001518a602001518b6101200151610662565b8860600151896101200151610dff565b60208601859052610180870151909150610ca5908463ffffffff610efc16565b6101c08601526080850184905260008660e001516001811115610cc457fe5b1415610cec57856101600151610cdd87604001516107e1565b60000b02610120860152610d34565b610d2d610d1b8660e00151610d0f89610160015185610efc90919063ffffffff16565b9063ffffffff610efc16565b6101208701519063ffffffff610f9a16565b6101208601525b5092949350505050565b610d4661165e565b600060e08501528360045b90816005811115610d5e57fe5b90525050506020820152919050565b610d7561165e565b600060e08501819052610120850152836004610d51565b610d9461165e565b50919392505050565b6007620151809091046003010660010190565b62015180810282018281101561050957600080fd5b62015180810282038281111561050957600080fd5b600060048206158015610def57506064820615155b8061041957505061019090061590565b600084841015610e215760405162461bcd60e51b8152600401610375906120a2565b6000836005811115610e2f57fe5b1415610e3f576105548585610fe0565b6001836005811115610e4d57fe5b1415610e5d576105548585611100565b6002836005811115610e6b57fe5b1415610e7b57610554858561112b565b6004836005811115610e8957fe5b1415610e9957610554858561114a565b6003836005811115610ea757fe5b1415610eb85761055485858461120b565b6005836005811115610ec657fe5b1415610ee45760405162461bcd60e51b815260040161037590611ff4565b60405162461bcd60e51b815260040161037590611e3a565b6000821580610f09575081155b15610f1657506000610509565b82600019148015610f2a5750600160ff1b82145b15610f475760405162461bcd60e51b815260040161037590611fad565b82820282848281610f5457fe5b0514610f725760405162461bcd60e51b815260040161037590611fad565b670de0b6b3a76400008105806103955760405162461bcd60e51b815260040161037590611ec6565b6000828201818312801590610faf5750838112155b80610fc45750600083128015610fc457508381125b61037e5760405162461bcd60e51b815260040161037590611f18565b600080610fec846112e1565b90506000610ff9846112e1565b90506000611006866112f9565b6110125761016d611016565b61016e5b61ffff169050818314156110485761103e816110328888611316565b9063ffffffff61133116565b9350505050610509565b6000611053866112f9565b61105f5761016d611063565b61016e5b61ffff1690506000611094836110328a61108f6110878a600163ffffffff6113ed16565b600180611412565b611316565b905060006110b1836110326110ab88600180611412565b8b611316565b90506110f36110d760016110cb888a63ffffffff61142c16565b9063ffffffff61142c16565b6110e7848463ffffffff610f9a16565b9063ffffffff610f9a16565b9998505050505050505050565b600061037e6101686110326201518061111f868863ffffffff61142c16565b9063ffffffff61146e16565b600061037e61016d6110326201518061111f868863ffffffff61142c16565b600080600080600080600061115e896114b0565b97509550935061116d886114b0565b945092509050601f86141561118157601e95505b82601f141561118f57601e92505b60006111a1848863ffffffff6114ce16565b905060006111b5848863ffffffff6114ce16565b905060006111c9848863ffffffff6114ce16565b90506111fb610168611032856110e76111e987601e63ffffffff61151416565b6110e78761016863ffffffff61151416565b9c9b505050505050505050505050565b600080600080600080600061121f8a6114b0565b97509550935061122e896114b0565b94509250905061123d8a6107b0565b86141561124957601e95505b87891480156112585750816002145b15801561126c5750611269896107b0565b83145b1561127657601e92505b6000611288848863ffffffff6114ce16565b9050600061129c848863ffffffff6114ce16565b905060006112b0848863ffffffff6114ce16565b90506112d0610168611032856110e76111e987601e63ffffffff61151416565b9d9c50505050505050505050505050565b60006112f062015180836107bd565b50909392505050565b60008061130962015180846107bd565b5050905061037e81610dda565b60008183111561132557600080fd5b50620151809190030490565b6000816113505760405162461bcd60e51b815260040161037590612272565b8261135d57506000610509565b670de0b6b3a76400008381029084828161137357fe5b05146113915760405162461bcd60e51b815260040161037590612130565b826000191480156113a55750600160ff1b84145b156113c25760405162461bcd60e51b815260040161037590612130565b60008382816113cd57fe5b059050806103955760405162461bcd60e51b815260040161037590612051565b60008282018381101561037e5760405162461bcd60e51b815260040161037590611e8f565b60006201518061142385858561157f565b02949350505050565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115fb565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611627565b600080806114c162015180856107bd565b9196909550909350915050565b60008183038183128015906114e35750838113155b806114f857506000831280156114f857508381135b61037e5760405162461bcd60e51b81526004016103759061222e565b60008261152357506000610509565b826000191480156115375750600160ff1b82145b156115545760405162461bcd60e51b8152600401610375906120e9565b8282028284828161156157fe5b051461037e5760405162461bcd60e51b8152600401610375906120e9565b60006107b284101561159057600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f02816115cc57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000818484111561161f5760405162461bcd60e51b81526004016103759190611d91565b505050900390565b600081836116485760405162461bcd60e51b81526004016103759190611d91565b50600083858161165457fe5b0495945050505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610f0001604052806078906020820280368337509192915050565b80356009811061050957600080fd5b8035610509816123d3565b8035610509816123e0565b8035600d811061050957600080fd5b80356013811061050957600080fd5b60006102a0828403121561176c578081fd5b50919050565b600060808284031215611783578081fd5b61178d608061239b565b9050813581526020820135602082015260408201356117ab816123ed565b604082015260608201356117be816123ed565b606082015292915050565b6000610280828403121561176c578081fd5b6000602082840312156117ec578081fd5b5035919050565b60008060008060808587031215611808578283fd5b8435935060208501356009811061181d578384fd5b9250604085013561182d816123d3565b9396929550929360600135925050565b60008060008060006107e08688031215611855578283fd5b85359450611866876020880161175a565b9350611876876102c088016117c9565b9250610540860135611887816123c2565b91506118978761056088016117c9565b90509295509295909350565b6000602082840312156118b4578081fd5b8135600d811061037e578182fd5b600080600083850360c08112156118d7578182fd5b84356118e2816123d3565b9350602085013592506080603f19820112156118fc578182fd5b50611907608061239b565b60408501358152606085013561191c816123e0565b6020820152608085013561192f816123d3565b604082015260a0850135611942816123c2565b606082015292959194509192509050565b600060208284031215611964578081fd5b813561037e816123fa565b60008060408385031215611981578182fd5b823561198c816123fa565b946020939093013593505050565b60006102a082840312156119ac578081fd5b61037e838361175a565b60008060008061056085870312156119cc578182fd5b6119d6868661175a565b93506119e6866102a087016117c9565b939693955050505061052082013591610540013590565b60008060006102e08486031215611a12578081fd5b611a1c858561175a565b92506102a084013591506102c0840135611a35816123fa565b809150509250925092565b60008060006102e08486031215611a55578081fd5b611a5f858561175a565b956102a085013595506102c0909401359392505050565b6000806000806103008587031215611a8c578182fd5b611a96868661175a565b93506102a085013592506102c085013591506102e0850135611ab7816123fa565b939692955090935050565b60006102a08284031215611ad4578081fd5b611adf6101e061239b565b611ae9848461174b565b8152611af88460208501611726565b6020820152611b0a846040850161173c565b6040820152611b1c8460608501611731565b6060820152611b2e8460808501611717565b6080820152611b408460a08501611726565b60a0820152611b528460c08501611731565b60c0820152611b648460e08501611726565b60e0820152610100838101359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a0611baf85828601611772565b90820152611bc1846102208501611772565b6101c08201529392505050565b6000610280808385031215611be1578182fd5b611bea8161239b565b611bf48585611731565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215611ce0578182fd5b8435935061181d8660208701611717565b60068110611cfb57fe5b9052565b6020808252825182820181905260009190848201906040850190845b81811015611d3757835183529284019291840191600101611d1b565b50909695505050505050565b901515815260200190565b90815260200190565b6020810160138310611d6557fe5b91905290565b6020810160028310611d6557fe5b60408101601d8410611d8757fe5b9281526020015290565b6000602080835283518082850152825b81811015611dbd57858101830151858201604001528201611da1565b81811115611dce5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526036908201527f434543456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b6020808252602d908201527f434543456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b6000610280820190506122ca828451611cf1565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff811182821017156123ba57600080fd5b604052919050565b80151581146123d057600080fd5b50565b600281106123d057600080fd5b600681106123d057600080fd5b600581106123d057600080fd5b601d81106123d057600080fdfea2646970667358221220b69598ff05b9170120ece0ac9f49f3cf2850280f4d40c8464f5fda2942b82e8364736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063e05a66e011610071578063e05a66e014610269578063e726d6801461027c578063edc0465f14610239578063f5586e051461028f578063f73ca804146102a257610121565b8063aaf5eb681461021e578063c26b940b14610226578063c40c5a9814610239578063cb2ef6f714610241578063d4f8d3f31461025657610121565b806356972fbe116100f457806356972fbe146101a25780636f37e55b146101c257806372540003146101ca578063811322fb146101eb57806398c29ea4146101fe57610121565b8063179331f314610126578063183ced6e1461014f5780631a2e165d1461016f57806352d183751461018f575b600080fd5b6101396101343660046118c2565b6102b5565b6040516101469190611d6b565b60405180910390f35b61016261015d366004611a76565b610385565b6040516101469190611cff565b61018261017d3660046117f3565b61039d565b6040516101469190611d4e565b61018261019d3660046119fd565b6103c2565b6101b56101b036600461183d565b6103cb565b6040516101469190611d43565b6101826103d6565b6101dd6101d83660046117db565b6103e2565b604051610146929190611d79565b6101826101f9366004611953565b61040b565b61021161020c36600461199a565b610421565b60405161014691906122b6565b61018261047d565b6101826102343660046119b6565b610482565b6101826104b5565b6102496104ba565b6040516101469190611d57565b6102116102643660046119b6565b6104bf565b61018261027736600461196f565b6104ef565b61018261028a366004611ccb565b61050f565b61018261029d366004611ccb565b610662565b6101626102b0366004611a40565b6106cd565b600060018460018111156102c557fe5b1415610341576102d4836107b0565b6102dd846107d2565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b8152600401610375906121c3565b60405180910390fd5b9392505050565b6040805160008152602081019091525b949350505050565b6000806103a9866103e2565b9150506103b88186868661050f565b9695505050505050565b60009392505050565b600195945050505050565b670de0b6b3a764000081565b6000808060f884901c601c8111156103f657fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561041957fe5b90505b919050565b61042961165e565b61043161165e565b6000815261010083013560208201526101208301356060808301919091526101408401359061046e90610469908601604087016118a3565b6107e1565b60000b0260e082015292915050565b601281565b60006104ac61049636879003870187611ac2565b6104a536879003870187611bce565b85856108a5565b95945050505050565b607881565b601190565b6104c761165e565b6104ac6104d936879003870187611ac2565b6104e836879003870187611bce565b8585610956565b60008160f884601c81111561050057fe5b60ff16901b1790505b92915050565b600081851415610520575083610395565b600184600881111561052e57fe5b14806105455750600384600881111561054357fe5b145b1561055b576105548584610a07565b9050610395565b600284600881111561056957fe5b14806105805750600484600881111561057e57fe5b145b156105c45760006105918685610a07565b905061059c86610a63565b6105a582610a63565b14156105b2579050610395565b6105bc8685610a7a565b915050610395565b60058460088111156105d257fe5b14806105e9575060078460088111156105e757fe5b145b156105f8576105548584610a7a565b600684600881111561060657fe5b148061061d5750600884600881111561061b57fe5b145b1561065957600061062e8685610a7a565b905061063986610a63565b61064282610a63565b141561064f579050610395565b6105bc8685610a07565b50929392505050565b6000600384600881111561067257fe5b14806106895750600484600881111561068757fe5b145b8061069f5750600784600881111561069d57fe5b145b806106b5575060088460088111156106b357fe5b145b156106c1575083610395565b6104ac8585858561050f565b60606106d76116f8565b60006106e98661012001358686610ac8565b15156001141561071c5761070360148761012001356104ef565b828261ffff166078811061071357fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561073957600080fd5b50604051908082528060200260200182016040528015610763578160200160208202803683370190505b50905060005b8261ffff168110156107a55783816078811061078157fe5b602002015182828151811061079257fe5b6020908102919091010152600101610769565b509695505050505050565b600080806107c362015180855b04610b01565b50915091506103958282610b97565b600061039562015180836107bd565b60008082600c8111156107f057fe5b14156107fe5750600161041c565b600182600c81111561080c57fe5b141561081b575060001961041c565b600682600c81111561082957fe5b14156108375750600161041c565b600782600c81111561084557fe5b1415610854575060001961041c565b600282600c81111561086257fe5b14156108705750600161041c565b600382600c81111561087e57fe5b141561088d575060001961041c565b60405162461bcd60e51b815260040161037590611f59565b60008060006108b3856103e2565b9092509050600b82601c8111156108c657fe5b14156108d757600092505050610395565b601a82601c8111156108e557fe5b14156108f657600092505050610395565b601b82601c81111561090457fe5b141561091f5761091687878387610c1d565b92505050610395565b601482601c81111561092d57fe5b141561093e57600092505050610395565b60405162461bcd60e51b815260040161037590612176565b61095e61165e565b60008061096a856103e2565b9092509050601a82601c81111561097d57fe5b141561098f5761091687878387610c32565b601482601c81111561099d57fe5b14156109af5761091687878387610d3e565b601b82601c8111156109bd57fe5b14156109cf5761091687878387610d6d565b600b82601c8111156109dd57fe5b14156109ef5761091687878387610d8c565b60405162461bcd60e51b815260040161037590611de4565b60006001826001811115610a1757fe5b1415610a5c57610a2683610d9d565b60061415610a4057610a39836002610db0565b9050610509565b610a4983610d9d565b60071415610a5c57610a39836001610db0565b5090919050565b6000610a7262015180836107bd565b509392505050565b60006001826001811115610a8a57fe5b1415610a5c57610a9983610d9d565b60061415610aac57610a39836001610dc5565b610ab583610d9d565b60071415610a5c57610a39836002610dc5565b600081831115610ada5750600061037e565b838311158015610aea5750818411155b15610af75750600161037e565b5060009392505050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281610b5857fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480610ba85750816003145b80610bb35750816005145b80610bbe5750816007145b80610bc95750816008145b80610bd4575081600a145b80610bdf575081600c145b15610bec5750601f610509565b81600214610bfc5750601e610509565b610c0583610dda565b610c1057601c610c13565b601d5b60ff169392505050565b6101208301516101c084015101949350505050565b610c3a61165e565b6000610c85610c5c8660200151886080015189602001518a6101200151610662565b610c758689608001518a602001518b6101200151610662565b8860600151896101200151610dff565b60208601859052610180870151909150610ca5908463ffffffff610efc16565b6101c08601526080850184905260008660e001516001811115610cc457fe5b1415610cec57856101600151610cdd87604001516107e1565b60000b02610120860152610d34565b610d2d610d1b8660e00151610d0f89610160015185610efc90919063ffffffff16565b9063ffffffff610efc16565b6101208701519063ffffffff610f9a16565b6101208601525b5092949350505050565b610d4661165e565b600060e08501528360045b90816005811115610d5e57fe5b90525050506020820152919050565b610d7561165e565b600060e08501819052610120850152836004610d51565b610d9461165e565b50919392505050565b6007620151809091046003010660010190565b62015180810282018281101561050957600080fd5b62015180810282038281111561050957600080fd5b600060048206158015610def57506064820615155b8061041957505061019090061590565b600084841015610e215760405162461bcd60e51b8152600401610375906120a2565b6000836005811115610e2f57fe5b1415610e3f576105548585610fe0565b6001836005811115610e4d57fe5b1415610e5d576105548585611100565b6002836005811115610e6b57fe5b1415610e7b57610554858561112b565b6004836005811115610e8957fe5b1415610e9957610554858561114a565b6003836005811115610ea757fe5b1415610eb85761055485858461120b565b6005836005811115610ec657fe5b1415610ee45760405162461bcd60e51b815260040161037590611ff4565b60405162461bcd60e51b815260040161037590611e3a565b6000821580610f09575081155b15610f1657506000610509565b82600019148015610f2a5750600160ff1b82145b15610f475760405162461bcd60e51b815260040161037590611fad565b82820282848281610f5457fe5b0514610f725760405162461bcd60e51b815260040161037590611fad565b670de0b6b3a76400008105806103955760405162461bcd60e51b815260040161037590611ec6565b6000828201818312801590610faf5750838112155b80610fc45750600083128015610fc457508381125b61037e5760405162461bcd60e51b815260040161037590611f18565b600080610fec846112e1565b90506000610ff9846112e1565b90506000611006866112f9565b6110125761016d611016565b61016e5b61ffff169050818314156110485761103e816110328888611316565b9063ffffffff61133116565b9350505050610509565b6000611053866112f9565b61105f5761016d611063565b61016e5b61ffff1690506000611094836110328a61108f6110878a600163ffffffff6113ed16565b600180611412565b611316565b905060006110b1836110326110ab88600180611412565b8b611316565b90506110f36110d760016110cb888a63ffffffff61142c16565b9063ffffffff61142c16565b6110e7848463ffffffff610f9a16565b9063ffffffff610f9a16565b9998505050505050505050565b600061037e6101686110326201518061111f868863ffffffff61142c16565b9063ffffffff61146e16565b600061037e61016d6110326201518061111f868863ffffffff61142c16565b600080600080600080600061115e896114b0565b97509550935061116d886114b0565b945092509050601f86141561118157601e95505b82601f141561118f57601e92505b60006111a1848863ffffffff6114ce16565b905060006111b5848863ffffffff6114ce16565b905060006111c9848863ffffffff6114ce16565b90506111fb610168611032856110e76111e987601e63ffffffff61151416565b6110e78761016863ffffffff61151416565b9c9b505050505050505050505050565b600080600080600080600061121f8a6114b0565b97509550935061122e896114b0565b94509250905061123d8a6107b0565b86141561124957601e95505b87891480156112585750816002145b15801561126c5750611269896107b0565b83145b1561127657601e92505b6000611288848863ffffffff6114ce16565b9050600061129c848863ffffffff6114ce16565b905060006112b0848863ffffffff6114ce16565b90506112d0610168611032856110e76111e987601e63ffffffff61151416565b9d9c50505050505050505050505050565b60006112f062015180836107bd565b50909392505050565b60008061130962015180846107bd565b5050905061037e81610dda565b60008183111561132557600080fd5b50620151809190030490565b6000816113505760405162461bcd60e51b815260040161037590612272565b8261135d57506000610509565b670de0b6b3a76400008381029084828161137357fe5b05146113915760405162461bcd60e51b815260040161037590612130565b826000191480156113a55750600160ff1b84145b156113c25760405162461bcd60e51b815260040161037590612130565b60008382816113cd57fe5b059050806103955760405162461bcd60e51b815260040161037590612051565b60008282018381101561037e5760405162461bcd60e51b815260040161037590611e8f565b60006201518061142385858561157f565b02949350505050565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115fb565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611627565b600080806114c162015180856107bd565b9196909550909350915050565b60008183038183128015906114e35750838113155b806114f857506000831280156114f857508381135b61037e5760405162461bcd60e51b81526004016103759061222e565b60008261152357506000610509565b826000191480156115375750600160ff1b82145b156115545760405162461bcd60e51b8152600401610375906120e9565b8282028284828161156157fe5b051461037e5760405162461bcd60e51b8152600401610375906120e9565b60006107b284101561159057600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f02816115cc57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000818484111561161f5760405162461bcd60e51b81526004016103759190611d91565b505050900390565b600081836116485760405162461bcd60e51b81526004016103759190611d91565b50600083858161165457fe5b0495945050505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610f0001604052806078906020820280368337509192915050565b80356009811061050957600080fd5b8035610509816123d3565b8035610509816123e0565b8035600d811061050957600080fd5b80356013811061050957600080fd5b60006102a0828403121561176c578081fd5b50919050565b600060808284031215611783578081fd5b61178d608061239b565b9050813581526020820135602082015260408201356117ab816123ed565b604082015260608201356117be816123ed565b606082015292915050565b6000610280828403121561176c578081fd5b6000602082840312156117ec578081fd5b5035919050565b60008060008060808587031215611808578283fd5b8435935060208501356009811061181d578384fd5b9250604085013561182d816123d3565b9396929550929360600135925050565b60008060008060006107e08688031215611855578283fd5b85359450611866876020880161175a565b9350611876876102c088016117c9565b9250610540860135611887816123c2565b91506118978761056088016117c9565b90509295509295909350565b6000602082840312156118b4578081fd5b8135600d811061037e578182fd5b600080600083850360c08112156118d7578182fd5b84356118e2816123d3565b9350602085013592506080603f19820112156118fc578182fd5b50611907608061239b565b60408501358152606085013561191c816123e0565b6020820152608085013561192f816123d3565b604082015260a0850135611942816123c2565b606082015292959194509192509050565b600060208284031215611964578081fd5b813561037e816123fa565b60008060408385031215611981578182fd5b823561198c816123fa565b946020939093013593505050565b60006102a082840312156119ac578081fd5b61037e838361175a565b60008060008061056085870312156119cc578182fd5b6119d6868661175a565b93506119e6866102a087016117c9565b939693955050505061052082013591610540013590565b60008060006102e08486031215611a12578081fd5b611a1c858561175a565b92506102a084013591506102c0840135611a35816123fa565b809150509250925092565b60008060006102e08486031215611a55578081fd5b611a5f858561175a565b956102a085013595506102c0909401359392505050565b6000806000806103008587031215611a8c578182fd5b611a96868661175a565b93506102a085013592506102c085013591506102e0850135611ab7816123fa565b939692955090935050565b60006102a08284031215611ad4578081fd5b611adf6101e061239b565b611ae9848461174b565b8152611af88460208501611726565b6020820152611b0a846040850161173c565b6040820152611b1c8460608501611731565b6060820152611b2e8460808501611717565b6080820152611b408460a08501611726565b60a0820152611b528460c08501611731565b60c0820152611b648460e08501611726565b60e0820152610100838101359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a0611baf85828601611772565b90820152611bc1846102208501611772565b6101c08201529392505050565b6000610280808385031215611be1578182fd5b611bea8161239b565b611bf48585611731565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215611ce0578182fd5b8435935061181d8660208701611717565b60068110611cfb57fe5b9052565b6020808252825182820181905260009190848201906040850190845b81811015611d3757835183529284019291840191600101611d1b565b50909695505050505050565b901515815260200190565b90815260200190565b6020810160138310611d6557fe5b91905290565b6020810160028310611d6557fe5b60408101601d8410611d8757fe5b9281526020015290565b6000602080835283518082850152825b81811015611dbd57858101830151858201604001528201611da1565b81811115611dce5783604083870101525b50601f01601f1916929092016040019392505050565b60208082526036908201527f434543456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b6020808252602d908201527f434543456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b6000610280820190506122ca828451611cf1565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff811182821017156123ba57600080fd5b604052919050565b80151581146123d057600080fd5b50565b600281106123d057600080fd5b600681106123d057600080fd5b600581106123d057600080fd5b601d81106123d057600080fdfea2646970667358221220b69598ff05b9170120ece0ac9f49f3cf2850280f4d40c8464f5fda2942b82e8364736f6c634300060b0033",
  "immutableReferences": {},
  "sourceMap": "514:8641:89:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "514:8641:89:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1010:924:78;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4764:361:89;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;631:346:84:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5478:262:89:-;;;;;;:::i;:::-;;:::i;6337:319::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;298:52:73:-;;;:::i;487:293:82:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;956:145::-;;;;;;:::i;:::-;;:::i;2806:439:89:-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;254:38:73:-;;;:::i;1860:761:89:-;;;;;;:::i;:::-;;:::i;356:44:73:-;;;:::i;576:110:89:-;;;:::i;:::-;;;;;;;:::i;1100:376::-;;;;;;:::i;:::-;;:::i;234:247:82:-;;;;;;:::i;:::-;;:::i;1599:2214:75:-;;;;;;:::i;:::-;;:::i;648:583::-;;;;;;:::i;:::-;;:::i;3610:752:89:-;;;;;;:::i;:::-;;:::i;1010:924:78:-;1185:20;1233:24;1225:4;:32;;;;;;;;;1221:618;;;1483:53;1526:9;1483:42;:53::i;:::-;1434:45;1469:9;1434:34;:45::i;:::-;:102;:174;;;;-1:-1:-1;1568:3:78;1557:5;:7;;;:14;;;;;;;;;:32;;;-1:-1:-1;1586:3:78;1575:5;:7;;;:14;;;;;;;;;1557:32;:50;;;-1:-1:-1;1604:3:78;1593:5;:7;;;:14;;;;;;;;;1557:50;1413:274;;;-1:-1:-1;1648:24:78;1641:31;;1413:274;-1:-1:-1;1707:23:78;1700:30;;1221:618;1759:23;1751:4;:31;;;;;;;;;1747:92;;;-1:-1:-1;1805:23:78;1798:30;;1747:92;1848:79;;-1:-1:-1;;;1848:79:78;;;;;;;:::i;:::-;;;;;;;;1010:924;;;;;;:::o;4764:361:89:-;5076:16;;;5090:1;5076:16;;;;;;;;4764:361;;;;;;;:::o;631:346:84:-;794:7;820:20;844:19;856:6;844:11;:19::i;:::-;817:46;;;913:57;928:12;942:3;947:8;957:12;913:14;:57::i;:::-;906:64;631:346;-1:-1:-1;;;;;;631:346:84:o;5478:262:89:-;5693:7;5478:262;;;;;:::o;6337:319::-;6645:4;6337:319;;;;;;;:::o;298:52:73:-;338:12;298:52;:::o;487:293:82:-;569:9;;;659:3;649:13;;;625:40;;;;;;;;603:62;-1:-1:-1;;698:32:82;;;;-1:-1:-1;487:293:82;;;:::o;956:145::-;1046:7;1084:9;1076:18;;;;;;;;1069:25;;956:145;;;;:::o;2806:439:89:-;2924:12;;:::i;:::-;2952:18;;:::i;:::-;3009:22;2981:50;;3060:16;;;;3041;;;:35;3107:18;;;;3086;;;;:39;;;;3192:23;;;;;3161:28;;3170:18;;;;;;;;:::i;:::-;3161:8;:28::i;:::-;:54;;;3135:23;;;:80;:23;2806:439;-1:-1:-1;;2806:439:89:o;254:38:73:-;290:2;254:38;:::o;1860:761:89:-;2078:6;2506:108;;;;;;;;2534:5;2506:108;:::i;:::-;;;;;;;;2553:5;2506:108;:::i;:::-;2572:6;2592:12;2506:14;:108::i;:::-;2499:115;1860:761;-1:-1:-1;;;;;1860:761:89:o;356:44:73:-;397:3;356:44;:::o;576:110:89:-;663:16;576:110;:::o;1100:376::-;1317:12;;:::i;:::-;1352:117;;;;;;;;1389:5;1352:117;:::i;:::-;;;;;;;;1408:5;1352:117;:::i;:::-;1427:6;1447:12;1352:23;:117::i;234:247:82:-;343:7;451:12;425:3;409:9;403:16;;;;;;;;395:25;;387:41;;:77;;-1:-1:-1;234:247:82;;;;;:::o;1599:2214:75:-;1800:7;1890:12;1877:9;:25;1873:47;;;-1:-1:-1;1911:9:75;1904:16;;1873:47;2003:25;1989:10;:39;;;;;;;;;:82;;;-1:-1:-1;2046:25:75;2032:10;:39;;;;;;;;;1989:82;1985:1795;;;2094:60;2134:9;2145:8;2094:39;:60::i;:::-;2087:67;;;;1985:1795;2372:26;2358:10;:40;;;;;;;;;:84;;;-1:-1:-1;2416:26:75;2402:10;:40;;;;;;;;;2358:84;2354:1426;;;2458:34;2495:60;2535:9;2546:8;2495:39;:60::i;:::-;2458:97;;2641:47;2678:9;2641:36;:47::i;:::-;2573:64;2610:26;2573:36;:64::i;:::-;:115;2569:187;;;2715:26;-1:-1:-1;2708:33:75;;2569:187;2776:61;2817:9;2828:8;2776:40;:61::i;:::-;2769:68;;;;;2354:1426;2928:25;2914:10;:39;;;;;;;;;:82;;;-1:-1:-1;2971:25:75;2957:10;:39;;;;;;;;;2914:82;2910:870;;;3019:61;3060:9;3071:8;3019:40;:61::i;2910:870::-;3301:26;3287:10;:40;;;;;;;;;:84;;;-1:-1:-1;3345:26:75;3331:10;:40;;;;;;;;;3287:84;3283:497;;;3387:35;3425:61;3466:9;3477:8;3425:40;:61::i;:::-;3387:99;;3573:47;3610:9;3573:36;:47::i;:::-;3504:65;3541:27;3504:36;:65::i;:::-;:116;3500:189;;;3647:27;-1:-1:-1;3640:34:75;;3500:189;3709:60;3749:9;3760:8;3709:39;:60::i;3283:497::-;-1:-1:-1;3797:9:75;;1599:2214;-1:-1:-1;;;1599:2214:75:o;648:583::-;848:7;902:25;888:10;:39;;;;;;;;;:95;;;-1:-1:-1;957:26:75;943:10;:40;;;;;;;;;888:95;:150;;;-1:-1:-1;1013:25:75;999:10;:39;;;;;;;;;888:150;:206;;;-1:-1:-1;1068:26:75;1054:10;:40;;;;;;;;;888:206;871:275;;;-1:-1:-1;1126:9:75;1119:16;;871:275;1163:61;1178:9;1189:10;1201:8;1211:12;1163:14;:61::i;3610:752:89:-;3812:16;3844:46;;:::i;:::-;3900:12;3953:57;3965:5;:18;;;3985:12;3999:10;3953:11;:57::i;:::-;:65;;4014:4;3953:65;3949:178;;;4050:45;4062:12;4076:5;:18;;;4050:11;:45::i;:::-;4034:6;4041:5;4034:13;;;;;;;;;;;;:61;4109:7;;3949:178;4188:25;4230:5;4216:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4216:20:89;-1:-1:-1;4188:48:89;-1:-1:-1;4251:9:89;4246:84;4270:5;4266:9;;:1;:9;4246:84;;;4310:6;4317:1;4310:9;;;;;;;;;;;4296:8;4305:1;4296:11;;;;;;;;;;;;;;;;;:23;4277:3;;4246:84;;;-1:-1:-1;4347:8:89;3610:752;-1:-1:-1;;;;;;3610:752:89:o;6258:217:106:-;6321:16;;;6376:40;1020:12;6388:9;:27;;6376:11;:40::i;:::-;6349:67;;;;;6440:28;6456:4;6462:5;6440:15;:28::i;7362:132::-;7417:8;7447:40;1020:12;7459:9;:27;;251:523:76;343:4;;367:12;:32;;;;;;;;;363:46;;;-1:-1:-1;408:1:76;401:8;;363:46;439:16;423:12;:32;;;;;;;;;419:47;;;-1:-1:-1;;;457:9:76;;419:47;497:16;481:12;:32;;;;;;;;;477:46;;;-1:-1:-1;522:1:76;515:8;;477:46;553:16;537:12;:32;;;;;;;;;533:47;;;-1:-1:-1;;;571:9:76;;533:47;611:16;595:12;:32;;;;;;;;;591:46;;;-1:-1:-1;636:1:76;629:8;;591:46;667:16;651:12;:32;;;;;;;;;647:47;;;-1:-1:-1;;;685:9:76;;647:47;705:62;;-1:-1:-1;;;705:62:76;;;;;;;:::i;8553:600:89:-;8743:6;8766:19;8787:20;8811:19;8823:6;8811:11;:19::i;:::-;8765:65;;-1:-1:-1;8765:65:89;-1:-1:-1;8858:12:89;8845:9;:25;;;;;;;;;8841:39;;;8879:1;8872:8;;;;;;8841:39;8907:12;8894:9;:25;;;;;;;;;8890:39;;;8928:1;8921:8;;;;;;8890:39;8956:13;8943:9;:26;;;;;;;;;8939:92;;;8978:53;8990:5;8997;9004:12;9018;8978:11;:53::i;:::-;8971:60;;;;;;8939:92;9058:12;9045:9;:25;;;;;;;;;9041:39;;;9079:1;9072:8;;;;;;9041:39;9091:55;;-1:-1:-1;;;9091:55:89;;;;;;;:::i;7231:777::-;7430:12;;:::i;:::-;7459:19;7480:20;7504:19;7516:6;7504:11;:19::i;:::-;7458:65;;-1:-1:-1;7458:65:89;-1:-1:-1;7551:12:89;7538:9;:25;;;;;;;;;7534:90;;;7572:52;7583:5;7590;7597:12;7611;7572:10;:52::i;7534:90::-;7651:12;7638:9;:25;;;;;;;;;7634:90;;;7672:52;7683:5;7690;7697:12;7711;7672:10;:52::i;7634:90::-;7751:13;7738:9;:26;;;;;;;;;7734:92;;;7773:53;7785:5;7792;7799:12;7813;7773:11;:53::i;7734:92::-;7853:12;7840:9;:25;;;;;;;;;7836:90;;;7874:52;7885:5;7892;7899:12;7913;7874:10;:52::i;7836:90::-;7937:64;;-1:-1:-1;;;7937:64:89;;;;;;;:::i;3980:550:75:-;4114:7;4153:11;4141:8;:23;;;;;;;;;4137:361;;;4184:51;4225:9;4184:40;:51::i;:::-;4239:1;4184:56;4180:308;;;4267:49;4303:9;4314:1;4267:35;:49::i;:::-;4260:56;;;;4180:308;4341:51;4382:9;4341:40;:51::i;:::-;4396:1;4341:56;4337:151;;;4424:49;4460:9;4471:1;4424:35;:49::i;4337:151::-;-1:-1:-1;4514:9:75;;3980:550;-1:-1:-1;3980:550:75:o;7219:138:106:-;7276:10;7310:40;1020:12;7322:9;:27;;7310:40;-1:-1:-1;7298:52:106;7219:138;-1:-1:-1;;;7219:138:106:o;4694:551:75:-;4829:7;4868:11;4856:8;:23;;;;;;;;;4852:361;;;4899:51;4940:9;4899:40;:51::i;:::-;4954:1;4899:56;4895:308;;;4982:49;5018:9;5029:1;4982:35;:49::i;4895:308::-;5056:51;5097:9;5056:40;:51::i;:::-;5111:1;5056:56;5052:151;;;5139:49;5175:9;5186:1;5139:35;:49::i;5714:342:81:-;5877:4;5918:12;5901:14;:29;5897:47;;;-1:-1:-1;5939:5:81;5932:12;;5897:47;5976:9;5958:14;:27;;:56;;;;;6002:12;5989:9;:25;;5958:56;5954:73;;;-1:-1:-1;6023:4:81;6016:11;;5954:73;-1:-1:-1;6044:5:81;5714:342;;;;;:::o;3309:605:106:-;3365:9;;;3425:5;3450:31;;;3365:9;3507:6;3499:1;:5;;:14;;-1:-1:-1;3550:1:106;3545;3532:6;:10;;:14;3531:20;3527:24;;;;3561:9;3590:7;3573:4;3585:1;3581:5;;3573:14;:24;;-1:-1:-1;3630:1:106;3615:4;:12;;:16;3611:1;:20;3634:2;3611:25;3607:29;;3646:10;3668:4;3664:1;3659:2;:6;:13;;;;;;;-1:-1:-1;3682:8:106;3713:2;3697:4;:13;;:18;3693:22;;;-1:-1:-1;3738:2:106;3729:6;:11;-1:-1:-1;;3803:6:106;;;;3796:3;:14;:22;;;;:26;;;3768:1;3772:2;:6;;;3759:19;;;;;;;;-1:-1:-1;3729:11:106;-1:-1:-1;3796:26:106;-1:-1:-1;;;;3309:605:106:o;6480:383::-;6551:16;6583:5;6592:1;6583:10;:24;;;;6597:5;6606:1;6597:10;6583:24;:38;;;;6611:5;6620:1;6611:10;6583:38;:52;;;;6625:5;6634:1;6625:10;6583:52;:66;;;;6639:5;6648:1;6639:10;6583:66;:81;;;;6653:5;6662:2;6653:11;6583:81;:96;;;;6668:5;6677:2;6668:11;6583:96;6579:278;;;-1:-1:-1;6709:2:106;6579:278;;;6732:5;6741:1;6732:10;6728:129;;-1:-1:-1;6772:2:106;6728:129;;;6819:17;6831:4;6819:11;:17::i;:::-;:27;;6844:2;6819:27;;;6839:2;6819:27;6805:41;;;6480:383;-1:-1:-1;;;6480:383:106:o;392:286:90:-;655:16;;;;632:20;;;;:39;392:286;;;;;;:::o;1059:1271:91:-;1252:12;;:::i;:::-;1280:24;1348:328;1378:96;1392:5;:16;;;1410:5;:27;;;1439:5;:14;;;1455:5;:18;;;1378:13;:96::i;:::-;1492:92;1506:12;1520:5;:27;;;1549:5;:14;;;1565:5;:18;;;1492:13;:92::i;:::-;1602:5;:24;;;1644:5;:18;;;1348:12;:328::i;:::-;1696:16;;;:31;;;1834:33;;;;1328:348;;-1:-1:-1;1834:65:91;;1885:12;1834:65;:43;:65;:::i;:::-;1811:20;;;:88;1909:18;;;:33;;;-1:-1:-1;1957:5:91;:14;;;:28;;;;;;;;;1953:348;;;2051:5;:13;;;2020:28;2029:5;:18;;;2020:8;:28::i;:::-;:44;;;2001:16;;;:63;1953:348;;;2114:176;2165:111;2252:5;:23;;;2165:59;2210:5;:13;;;2165:17;:44;;:59;;;;:::i;:::-;:86;:111;:86;:111;:::i;:::-;2114:16;;;;;:176;:33;:176;:::i;:::-;2095:16;;;:195;1953:348;-1:-1:-1;2318:5:91;;1059:1271;-1:-1:-1;;;;1059:1271:91:o;662:391::-;867:12;;:::i;:::-;921:1;895:23;;;:27;:5;960:22;932:50;;;;;;;;;;;;;-1:-1:-1;;;992:16:91;;;:31;:16;662:391;-1:-1:-1;662:391:91:o;2336:422::-;2542:12;;:::i;:::-;2596:1;2570:23;;;:27;;;2607:16;;;:20;2570:5;2665:22;2637:50;;399:257;609:12;;:::i;:::-;-1:-1:-1;644:5:91;;399:257;-1:-1:-1;;;399:257:91:o;6898:175:106:-;7061:1;1020:12;6998:27;;;7056:1;7048:9;7047:15;7065:1;7047:19;;6898:175::o;9033:198::-;1020:12;9157:23;;9145:35;;9198:25;;;;9190:34;;;;;10938:198;1020:12;11062:23;;11050:35;;11103:25;;;;11095:34;;;;;5820:157;5875:13;5920:1;5913:4;:8;:13;5912:36;;;;-1:-1:-1;5939:3:106;5932:4;:10;:15;;5912:36;5911:59;;;-1:-1:-1;;5961:3:106;5954:10;;:15;;5820:157::o;648:1214:77:-;848:6;894:14;878:12;:30;;870:82;;;;-1:-1:-1;;;870:82:77;;;;;;;:::i;:::-;974:21;966:4;:29;;;;;;;;;962:894;;;1018:42;1031:14;1047:12;1018;:42::i;962:894::-;1089:23;1081:4;:31;;;;;;;;;1077:779;;;1135:46;1152:14;1168:12;1135:16;:46::i;1077:779::-;1210:23;1202:4;:31;;;;;;;;;1198:658;;;1256:50;1277:14;1293:12;1256:20;:50::i;1198:658::-;1335:26;1327:4;:34;;;;;;;;;1323:533;;;1384:47;1402:14;1418:12;1384:17;:47::i;1323:533::-;1460:30;1452:4;:38;;;;;;;;;1448:408;;;1513:65;1535:14;1551:12;1565;1513:21;:65::i;1448:408::-;1607:26;1599:4;:34;;;;;;;;;1595:261;;;1684:67;;-1:-1:-1;;;1684:67:77;;;;;;;:::i;1595:261::-;1782:63;;-1:-1:-1;;;1782:63:77;;;;;;;:::i;613:527:80:-;699:6;725;;;:16;;-1:-1:-1;735:6:80;;725:16;721:30;;;-1:-1:-1;750:1:80;743:8;;721:30;772:1;-1:-1:-1;;772:7:80;:26;;;;;-1:-1:-1;;;783:1:80;:15;772:26;770:29;762:81;;;;-1:-1:-1;;;762:81:80;;;;;;;:::i;:::-;864:5;;;868:1;864;:5;:1;887:5;;;;;:10;879:62;;;;-1:-1:-1;;;879:62:80;;;;;;;:::i;:::-;353:15;1010:25;;;1045:69;;;;-1:-1:-1;;;1045:69:80;;;;;;;:::i;1651:210:118:-;1707:6;1736:5;;;1760:6;;;;;;:16;;;1775:1;1770;:6;;1760:16;1759:38;;;;1786:1;1782;:5;:14;;;;;1795:1;1791;:5;1782:14;1751:84;;;;-1:-1:-1;;;1751:84:118;;;;;;;:::i;1921:1110:77:-;2026:6;2048:14;2065:46;2101:9;2065:35;:46::i;:::-;2048:63;;2121:14;2138:44;2174:7;2138:35;:44::i;:::-;2121:61;;2193:17;2214:49;2253:9;2214:38;:49::i;:::-;2213:63;;2273:3;2213:63;;;2267:3;2213:63;2193:83;;;;2301:6;2291;:16;2287:139;;;2330:85;2404:10;2337:56;2374:9;2385:7;2337:36;:56::i;:::-;2330:73;:85;:73;:85;:::i;:::-;2323:92;;;;;;;2287:139;2436:18;2458:47;2497:7;2458:38;:47::i;:::-;2457:61;;2515:3;2457:61;;;2509:3;2457:61;2436:82;;;-1:-1:-1;2529:20:77;2552:178;2719:10;2559:149;2609:9;2632:66;2678:13;:6;2689:1;2678:13;:10;:13;:::i;:::-;2693:1;2696;2632:45;:66::i;:::-;2559:36;:149::i;2552:178::-;2529:201;;2740:21;2764:170;2922:11;2771:140;2821:59;2867:6;2875:1;2878;2821:45;:59::i;:::-;2894:7;2771:36;:140::i;2764:170::-;2740:194;-1:-1:-1;2952:72:77;2997:25;3020:1;2997:18;:6;3008;2997:18;:10;:18;:::i;:::-;:22;:25;:22;:25;:::i;:::-;2952:33;:13;2970:14;2952:33;:17;:33;:::i;:::-;:37;:72;:37;:72;:::i;:::-;2945:79;1921:1110;-1:-1:-1;;;;;;;;;1921:1110:77:o;3092:204::-;3201:6;3231:57;3284:3;3238:35;3267:5;3239:22;:7;3251:9;3239:22;:11;:22;:::i;:::-;3238:28;:35;:28;:35;:::i;3363:208::-;3476:6;3506:57;3559:3;3513:35;3542:5;3514:22;:7;3526:9;3514:22;:11;:22;:::i;3634:831::-;3744:6;3766:13;3789:15;3814:14;3839:13;3862:15;3887:14;3939:54;3983:9;3939:43;:54::i;:::-;3912:81;-1:-1:-1;3912:81:77;-1:-1:-1;3912:81:77;-1:-1:-1;4030:52:77;4074:7;4030:43;:52::i;:::-;4003:79;-1:-1:-1;4003:79:77;-1:-1:-1;4003:79:77;-1:-1:-1;4106:2:77;4097:11;;4093:52;;;4132:2;4124:10;;4093:52;4159:5;4168:2;4159:11;4155:52;;;4194:2;4186:10;;4155:52;4217:11;4231:32;4238:5;4256;4231:32;:17;:32;:::i;:::-;4217:46;-1:-1:-1;4273:11:77;4287:36;4294:7;4314;4287:36;:19;:36;:::i;:::-;4273:50;-1:-1:-1;4333:11:77;4347:34;4354:6;4373;4347:34;:18;:34;:::i;:::-;4333:48;-1:-1:-1;4400:57:77;4453:3;4401:41;4437:4;4401:31;4419:12;:4;4428:2;4419:12;:8;:12;:::i;:::-;4401:13;:4;4410:3;4401:13;:8;:13;:::i;4400:57::-;4392:66;3634:831;-1:-1:-1;;;;;;;;;;;;3634:831:77:o;4533:1003::-;4669:6;4691:13;4714:15;4739:14;4764:13;4787:15;4812:14;4864:54;4908:9;4864:43;:54::i;:::-;4837:81;-1:-1:-1;4837:81:77;-1:-1:-1;4837:81:77;-1:-1:-1;4955:52:77;4999:7;4955:43;:52::i;:::-;4928:79;-1:-1:-1;4928:79:77;-1:-1:-1;4928:79:77;-1:-1:-1;5031:53:77;5074:9;5031:42;:53::i;:::-;5022:5;:62;5018:103;;;5108:2;5100:10;;5018:103;5148:12;5137:7;:23;:39;;;;;5164:7;5175:1;5164:12;5137:39;5135:42;:106;;;;;5190:51;5233:7;5190:42;:51::i;:::-;5181:5;:60;5135:106;5131:147;;;5265:2;5257:10;;5131:147;5288:11;5302:32;5309:5;5327;5302:32;:17;:32;:::i;:::-;5288:46;-1:-1:-1;5344:11:77;5358:36;5365:7;5385;5358:36;:19;:36;:::i;:::-;5344:50;-1:-1:-1;5404:11:77;5418:34;5425:6;5444;5418:34;:18;:34;:::i;:::-;5404:48;-1:-1:-1;5471:57:77;5524:3;5472:41;5508:4;5472:31;5490:12;:4;5499:2;5490:12;:8;:12;:::i;5471:57::-;5463:66;4533:1003;-1:-1:-1;;;;;;;;;;;;;4533:1003:77:o;7079:135:106:-;7135:9;7167:40;1020:12;7179:9;:27;;7167:40;-1:-1:-1;7156:51:106;;7079:135;-1:-1:-1;;;7079:135:106:o;5630:185::-;5689:13;;5730:40;1020:12;5742:9;:27;;5730:40;5714:56;;;;5791:17;5803:4;5791:11;:17::i;12485:210::-;12564:10;12611:11;12594:13;:28;;12586:37;;;;;;-1:-1:-1;1020:12:106;12642:27;;;12641:47;;12485:210::o;1146:600:80:-;1231:6;1261;1253:55;;;;-1:-1:-1;;;1253:55:80;;;;;;;:::i;:::-;1372:6;1368:20;;-1:-1:-1;1387:1:80;1380:8;;1368:20;353:15;1409:25;;;;:1;:25;:1;1452:5;;;;;:30;1444:81;;;;-1:-1:-1;;;1444:81:80;;;;;;;:::i;:::-;1546:1;-1:-1:-1;;1546:7:80;:26;;;;;-1:-1:-1;;;1557:1:80;:15;1546:26;1544:29;1536:80;;;;-1:-1:-1;;;1536:80:80;;;;;;;:::i;:::-;1626:8;1641:1;1637;:5;;;;;;;-1:-1:-1;1660:6:80;1652:68;;;;-1:-1:-1;;;1652:68:80;;;;;;;:::i;867:176:117:-;925:7;956:5;;;979:6;;;;971:46;;;;-1:-1:-1;;;971:46:117;;;;;;;:::i;3920:177:106:-;4003:14;1020:12;4041:31;4055:4;4061:5;4068:3;4041:13;:31::i;:::-;:49;;3920:177;-1:-1:-1;;;;3920:177:106:o;1307:134:117:-;1365:7;1391:43;1395:1;1398;1391:43;;;;;;;;;;;;;;;;;:3;:43::i;3066:130::-;3124:7;3150:39;3154:1;3157;3150:39;;;;;;;;;;;;;;;;;:3;:39::i;4390:175:106:-;4454:9;;;4518:40;1020:12;4530:9;:27;;4518:40;4497:61;;;;-1:-1:-1;4497:61:106;;-1:-1:-1;4390:175:106;-1:-1:-1;;4390:175:106:o;1357:213:118:-;1413:6;1442:5;;;1466:6;;;;;;:16;;;1481:1;1476;:6;;1466:16;1465:38;;;;1492:1;1488;:5;:14;;;;;1501:1;1497;:5;1488:14;1457:87;;;;-1:-1:-1;;;1457:87:118;;;;;;;:::i;325:554::-;381:6;621;617:45;;-1:-1:-1;650:1:118;643:8;;617:45;682:1;-1:-1:-1;;682:7:118;:27;;;;;-1:-1:-1;;;693:1:118;:16;682:27;680:30;672:82;;;;-1:-1:-1;;;672:82:118;;;;;;;:::i;:::-;776:5;;;780:1;776;:5;:1;799:5;;;;;:10;791:62;;;;-1:-1:-1;;;791:62:118;;;;;;;:::i;2045:511:106:-;2124:10;2162:4;2154;:12;;2146:21;;;;;;2193:4;2225:5;2256:3;2177:9;1157:7;2490:1;2440;2483:3;2454:4;2477:2;-1:-1:-1;;2462:11:106;;2461:18;2446:33;;;2445:41;2440:47;:51;2425:2;;-1:-1:-1;;2399:11:106;;2398:18;2419:2;2398:23;2394:1;2385:6;:10;:36;2378:3;:44;:49;;;;;;2364:1;2319:4;2358:2;-1:-1:-1;;2343:11:106;;2342:18;2327:33;;2335:4;2327:33;2319:42;:46;2301:5;2284:4;:22;:81;:143;:207;:234;2271:247;;2542:6;2529:20;;2045:511;;;;;;;;;:::o;1725:187:117:-;1811:7;1846:12;1838:6;;;;1830:29;;;;-1:-1:-1;;;1830:29:117;;;;;;;;:::i;:::-;-1:-1:-1;;;1881:5:117;;;1725:187::o;3671:338::-;3757:7;3857:12;3850:5;3842:28;;;;-1:-1:-1;;;3842:28:117;;;;;;;;:::i;:::-;;3880:9;3896:1;3892;:5;;;;;;;3671:338;-1:-1:-1;;;;;3671:338:117:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;:::o;273:184::-;367:20;;44763:1;44753:12;;44743:2;;44779:1;;44769:12;464:158;545:20;;570:47;545:20;570:47;:::i;629:180::-;721:20;;746:58;721:20;746:58;:::i;1198:166::-;1283:20;;45379:2;45369:13;;45359:2;;45396:1;;45386:12;1371:166;1456:20;;45499:2;45489:13;;45479:2;;45516:1;;45506:12;2711:161;;2824:3;2815:6;2810:3;2806:16;2802:26;2799:2;;;-1:-1;;2831:12;2799:2;-1:-1;2851:15;2792:80;-1:-1;2792:80::o;5716:826::-;;5841:4;5829:9;5824:3;5820:19;5816:30;5813:2;;;-1:-1;;5849:12;5813:2;5877:20;5841:4;5877:20;:::i;:::-;5868:29;;216:6;203:20;5963:16;5956:75;6095:2;6153:9;6149:22;203:20;6095:2;6114:5;6110:16;6103:75;6240:2;6325:9;6321:22;910:20;935:60;989:5;935:60;:::i;:::-;6240:2;6255:16;;6248:102;6411:2;6492:22;;910:20;935:60;910:20;935:60;:::i;:::-;6411:2;6426:16;;6419:102;6430:5;5807:735;-1:-1;;5807:735::o;7349:158::-;;7459:3;7450:6;7445:3;7441:16;7437:26;7434:2;;;-1:-1;;7466:12;11033:241;;11137:2;11125:9;11116:7;11112:23;11108:32;11105:2;;;-1:-1;;11143:12;11105:2;-1:-1;203:20;;11099:175;-1:-1;11099:175::o;11281:699::-;;;;;11477:3;11465:9;11456:7;11452:23;11448:33;11445:2;;;-1:-1;;11484:12;11445:2;216:6;203:20;11536:63;;11636:2;11706:9;11702:22;367:20;44763:1;44756:5;44753:12;44743:2;;-1:-1;;44769:12;44743:2;11644:90;-1:-1;11771:2;11824:22;;545:20;570:47;545:20;570:47;:::i;:::-;11439:541;;;;-1:-1;11779:77;;11893:2;11932:22;10963:20;;-1:-1;;11439:541::o;11987:904::-;;;;;;12237:4;12225:9;12216:7;12212:23;12208:34;12205:2;;;-1:-1;;12245:12;12205:2;216:6;203:20;12297:63;;12415:82;12489:7;12397:2;12469:9;12465:22;12415:82;:::i;:::-;12405:92;;12553:79;12624:7;12534:3;12604:9;12600:22;12553:79;:::i;:::-;12543:89;;12669:4;12711:9;12707:22;69:20;94:30;118:5;94:30;:::i;:::-;12679:60;-1:-1;12796:79;12867:7;12776:4;12843:22;;12796:79;:::i;:::-;12786:89;;12199:692;;;;;;;;:::o;12898:277::-;;13020:2;13008:9;12999:7;12995:23;12991:32;12988:2;;;-1:-1;;13026:12;12988:2;1296:6;1283:20;45379:2;45372:5;45369:13;45359:2;;-1:-1;;45386:12;13182:588;;;;13356:9;13347:7;13343:23;13368:3;13343:23;13339:33;13336:2;;;-1:-1;;13375:12;13336:2;558:6;545:20;570:47;611:5;570:47;:::i;:::-;13427:89;-1:-1;13553:2;13592:22;;10963:20;;-1:-1;6677:4;-1:-1;;6656:19;;6652:30;6649:2;;;-1:-1;;6685:12;6649:2;;6713:20;6677:4;6713:20;:::i;:::-;13661:2;13726:9;13722:22;10963:20;6794:16;6787:75;6981:22;13726:9;6981:22;721:20;746:58;798:5;746:58;:::i;:::-;13553:2;6935:16;;6928:82;6677:4;7129:22;;545:20;570:47;545:20;570:47;:::i;:::-;13661:2;7083:16;;7076:82;7271:22;;;69:20;94:30;69:20;94:30;:::i;:::-;6981:22;7235:16;;7228:72;13330:440;;;;-1:-1;7239:5;;-1:-1;13330:440;-1:-1;13330:440::o;13777:271::-;;13896:2;13884:9;13875:7;13871:23;13867:32;13864:2;;;-1:-1;;13902:12;13864:2;2013:6;2000:20;2025:48;2067:5;2025:48;:::i;14055:396::-;;;14191:2;14179:9;14170:7;14166:23;14162:32;14159:2;;;-1:-1;;14197:12;14159:2;2013:6;2000:20;2025:48;2067:5;2025:48;:::i;:::-;14249:78;14364:2;14403:22;;;;10963:20;;-1:-1;;;14153:298::o;14458:300::-;;14591:3;14579:9;14570:7;14566:23;14562:33;14559:2;;;-1:-1;;14598:12;14559:2;14660:82;14734:7;14710:22;14660:82;:::i;14765:733::-;;;;;14975:4;14963:9;14954:7;14950:23;14946:34;14943:2;;;-1:-1;;14983:12;14943:2;15045:82;15119:7;15095:22;15045:82;:::i;:::-;15035:92;;15183:79;15254:7;15164:3;15234:9;15230:22;15183:79;:::i;:::-;14937:561;;15173:89;;-1:-1;;;;15299:4;15340:22;;203:20;;15409:4;15450:22;203:20;;14937:561::o;15505:582::-;;;;15687:3;15675:9;15666:7;15662:23;15658:33;15655:2;;;-1:-1;;15694:12;15655:2;15756:82;15830:7;15806:22;15756:82;:::i;:::-;15746:92;;15875:3;15919:9;15915:22;10963:20;15884:63;;15984:3;16043:9;16039:22;2000:20;2025:48;2067:5;2025:48;:::i;:::-;15993:78;;;;15649:438;;;;;:::o;16094:552::-;;;;16261:3;16249:9;16240:7;16236:23;16232:33;16229:2;;;-1:-1;;16268:12;16229:2;16330:82;16404:7;16380:22;16330:82;:::i;:::-;16320:92;16449:3;16489:22;;10963:20;;-1:-1;16558:3;16598:22;;;10963:20;;16223:423;-1:-1;;;16223:423::o;16653:708::-;;;;;16852:3;16840:9;16831:7;16827:23;16823:33;16820:2;;;-1:-1;;16859:12;16820:2;16921:82;16995:7;16971:22;16921:82;:::i;:::-;16911:92;;17040:3;17084:9;17080:22;10963:20;17049:63;;17149:3;17193:9;17189:22;10963:20;17158:63;;17258:3;17317:9;17313:22;2000:20;2025:48;2067:5;2025:48;:::i;:::-;16814:547;;;;-1:-1;16814:547;;-1:-1;;16814:547::o;17368:296::-;;17499:3;17487:9;17478:7;17474:23;17470:33;17467:2;;;-1:-1;;17506:12;17467:2;3055:22;3070:6;3055:22;:::i;:::-;3167:67;3230:3;3206:22;3167:67;:::i;:::-;3149:16;3142:93;3333:63;3392:3;3300:2;3372:9;3368:22;3333:63;:::i;:::-;3300:2;3319:5;3315:16;3308:89;3499:67;3562:3;3466:2;3542:9;3538:22;3499:67;:::i;:::-;3466:2;3485:5;3481:16;3474:93;3675:73;3744:3;3642:2;3724:9;3720:22;3675:73;:::i;:::-;3642:2;3661:5;3657:16;3650:99;3861:76;3933:3;3827;3913:9;3909:22;3861:76;:::i;:::-;3827:3;3847:5;3843:16;3836:102;4049:75;4120:3;4015;4100:9;4096:22;4049:75;:::i;:::-;4015:3;4035:5;4031:16;4024:101;4238:74;4308:3;4204;4288:9;4284:22;4238:74;:::i;:::-;4204:3;4224:5;4220:16;4213:100;4412:63;4471:3;4378;4451:9;4447:22;4412:63;:::i;:::-;4378:3;4394:16;;4387:89;4543:3;4600:22;;;10963:20;4559:18;;;4552:77;4698:3;4755:22;;;10963:20;4714:18;;;4707:77;4858:3;4914:22;;;2618:20;4874:18;;;4867:76;5007:3;5063:22;;;2618:20;5023:18;;;5016:76;5176:3;5232:22;;;2618:20;5192:18;;;5185:76;5337:3;5373:85;5454:3;5430:22;;;5373:85;:::i;:::-;5353:18;;;5346:113;5571:85;5652:3;5535;5628:22;;5571:85;:::i;:::-;5562:6;5551:18;;5544:113;5555:5;17461:203;-1:-1;;;17461:203::o;17671:290::-;;17799:3;;17787:9;17778:7;17774:23;17770:33;17767:2;;;-1:-1;;17806:12;17767:2;7684:22;17799:3;7684:22;:::i;:::-;7803:74;7873:3;7849:22;7803:74;:::i;:::-;7778:100;;7945:2;7999:22;;;10963:20;7960:16;;;7953:75;8102:2;8156:22;;;10963:20;8117:16;;;8110:75;8254:2;8308:22;;;10963:20;8269:16;;;8262:75;8406:3;8461:22;;;10963:20;8422:16;;;8415:75;8562:3;8617:22;;;10963:20;8578:16;;;8571:75;8716:3;8771:22;;;10963:20;8732:16;;;8725:75;8874:3;8928:22;;;2618:20;8890:16;;;8883:74;9029:3;9085:22;;;2618:20;9045:18;;;9038:76;9181:3;9237:22;;;2618:20;9197:18;;;9190:76;9342:3;9398:22;;;2618:20;9358:18;;;9351:76;9509:3;9565:22;;;2618:20;9525:18;;;9518:76;9676:3;9732:22;;;2618:20;9692:18;;;9685:76;9848:3;9904:22;;;2618:20;9864:18;;;9857:76;10004:3;10060:22;;;2618:20;10020:18;;;10013:76;10162:3;10218:22;;;2618:20;10178:18;;;10171:76;10312:3;10368:22;;;2618:20;10328:18;;;10321:76;10471:3;10527:22;;;2618:20;10487:18;;;10480:76;10625:3;10681:22;;;2618:20;10641:18;;;10634:76;10783:3;10839:22;;;2618:20;10799:18;;;10792:76;;;;-1:-1;7785:16;;17761:200;-1:-1;;17761:200::o;17968:699::-;;;;;18164:3;18152:9;18143:7;18139:23;18135:33;18132:2;;;-1:-1;;18171:12;18132:2;10976:6;10963:20;18223:63;;18341:80;18413:7;18323:2;18393:9;18389:22;18341:80;:::i;19926:162::-;44041:1;44034:5;44031:12;44021:2;;44047:9;44021:2;20010:73;;20004:84::o;31237:370::-;31414:2;31428:47;;;41353:12;;31399:18;;;41757:19;;;31237:370;;31414:2;41207:14;;;;41797;;;;31237:370;19295:260;19320:6;19317:1;19314:13;19295:260;;;19381:13;;19757:37;;41612:14;;;;18828;;;;19342:1;19335:9;19295:260;;;-1:-1;31481:116;;31385:222;-1:-1;;;;;;31385:222::o;31614:210::-;42063:13;;42056:21;19650:34;;31735:2;31720:18;;31706:118::o;31831:222::-;19757:37;;;31958:2;31943:18;;31929:124::o;32060:254::-;32203:2;32188:18;;44157:2;44147:13;;44137:2;;44164:9;44137:2;20182:66;;;32174:140;:::o;32321:270::-;32472:2;32457:18;;44282:1;44272:12;;44262:2;;44288:9;32598:359;32766:2;32751:18;;44395:2;44385:13;;44375:2;;44402:9;44375:2;20525:63;;;32943:2;32928:18;19757:37;32737:220;:::o;33189:310::-;;33336:2;;33357:17;33350:47;20969:5;41353:12;41769:6;33336:2;33325:9;33321:18;41757:19;-1:-1;43638:101;43652:6;43649:1;43646:13;43638:101;;;43719:11;;;;;43713:18;43700:11;;;41797:14;43700:11;43693:39;43667:10;;43638:101;;;43754:6;43751:1;43748:13;43745:2;;;-1:-1;41797:14;43810:6;33325:9;43801:16;;43794:27;43745:2;-1:-1;43926:7;43910:14;-1:-1;;43906:28;21127:39;;;;41797:14;21127:39;;33307:192;-1:-1;;;33307:192::o;33506:416::-;33706:2;33720:47;;;21403:2;33691:18;;;41757:19;21439:34;41797:14;;;21419:55;-1:-1;;;21494:12;;;21487:46;21552:12;;;33677:245::o;33929:416::-;34129:2;34143:47;;;21803:2;34114:18;;;41757:19;21839:34;41797:14;;;21819:55;-1:-1;;;21894:12;;;21887:45;21951:12;;;34100:245::o;34352:416::-;34552:2;34566:47;;;22202:2;34537:18;;;41757:19;22238:29;41797:14;;;22218:50;22287:12;;;34523:245::o;34775:416::-;34975:2;34989:47;;;22538:2;34960:18;;;41757:19;22574:34;41797:14;;;22554:55;-1:-1;;;22629:12;;;22622:42;22683:12;;;34946:245::o;35198:416::-;35398:2;35412:47;;;22934:2;35383:18;;;41757:19;22970:34;41797:14;;;22950:55;-1:-1;;;23025:12;;;23018:25;23062:12;;;35369:245::o;35621:416::-;35821:2;35835:47;;;23313:2;35806:18;;;41757:19;23349:34;41797:14;;;23329:55;-1:-1;;;23404:12;;;23397:44;23460:12;;;35792:245::o;36044:416::-;36244:2;36258:47;;;23711:2;36229:18;;;41757:19;23747:34;41797:14;;;23727:55;-1:-1;;;23802:12;;;23795:31;23845:12;;;36215:245::o;36467:416::-;36667:2;36681:47;;;24096:2;36652:18;;;41757:19;24132:34;41797:14;;;24112:55;24201:27;24187:12;;;24180:49;24248:12;;;36638:245::o;36890:416::-;37090:2;37104:47;;;24499:2;37075:18;;;41757:19;24535:34;41797:14;;;24515:55;-1:-1;;;24590:12;;;24583:41;24643:12;;;37061:245::o;37313:416::-;37513:2;37527:47;;;24894:2;37498:18;;;41757:19;24930:34;41797:14;;;24910:55;-1:-1;;;24985:12;;;24978:31;25028:12;;;37484:245::o;37736:416::-;37936:2;37950:47;;;25279:2;37921:18;;;41757:19;25315:34;41797:14;;;25295:55;-1:-1;;;25370:12;;;25363:31;25413:12;;;37907:245::o;38159:416::-;38359:2;38373:47;;;25664:2;38344:18;;;41757:19;25700:34;41797:14;;;25680:55;-1:-1;;;25755:12;;;25748:30;25797:12;;;38330:245::o;38582:416::-;38782:2;38796:47;;;26048:2;38767:18;;;41757:19;26084:34;41797:14;;;26064:55;-1:-1;;;26139:12;;;26132:37;26188:12;;;38753:245::o;39005:416::-;39205:2;39219:47;;;26439:2;39190:18;;;41757:19;26475:34;41797:14;;;26455:55;26544:34;26530:12;;;26523:56;-1:-1;;;26599:12;;;26592:29;26640:12;;;39176:245::o;39428:416::-;39628:2;39642:47;;;26891:2;39613:18;;;41757:19;26927:34;41797:14;;;26907:55;-1:-1;;;26982:12;;;26975:28;27022:12;;;39599:245::o;39851:416::-;40051:2;40065:47;;;27273:2;40036:18;;;41757:19;27309:34;41797:14;;;27289:55;-1:-1;;;27364:12;;;27357:28;27404:12;;;40022:245::o;40274:319::-;;40449:3;40438:9;40434:19;40426:27;;27718:86;27789:14;27695:16;27689:23;27718:86;:::i;:::-;27889:4;27878:16;;;27872:23;27949:14;;;19757:37;28056:4;28045:16;;;28039:23;28116:14;;;19757:37;28218:4;28207:16;;;28201:23;28278:14;;;19757:37;28380:4;28369:16;;;28363:23;28440:14;;;19757:37;28545:4;28534:16;;;28528:23;28605:14;;;19757:37;28708:4;28697:16;;;28691:23;28768:14;;;19757:37;28875:4;28864:16;;;28858:23;28933:14;;;19757:37;29038:6;29027:18;;;29021:25;29098:16;;;19757:37;29200:6;29189:18;;;29183:25;29260:16;;;19757:37;29371:6;29360:18;;;29354:25;29431:16;;;19757:37;29548:6;29537:18;;;29531:25;29608:16;;;19757:37;29725:6;29714:18;;;29708:25;29785:16;;;19757:37;29907:6;29896:18;;;29890:25;29967:16;;;19757:37;30073:6;30062:18;;;30056:25;30133:16;;;19757:37;30241:6;30230:18;;;30224:25;30301:16;;;19757:37;30401:6;30390:18;;;30384:25;30461:16;;;19757:37;30570:6;30559:18;;;30553:25;30630:16;;;19757:37;30734:6;30723:18;;;30717:25;30794:16;;;19757:37;30902:6;30891:18;;;30885:25;30962:16;;;;19757:37;;;;40420:173;:::o;40829:256::-;40891:2;40885:9;40917:17;;;40992:18;40977:34;;41013:22;;;40974:62;40971:2;;;41049:1;;41039:12;40971:2;40891;41058:22;40869:216;;-1:-1;40869:216::o;44425:111::-;44506:5;42063:13;42056:21;44484:5;44481:32;44471:2;;44527:1;;44517:12;44471:2;44465:71;:::o;44795:108::-;44878:1;44871:5;44868:12;44858:2;;44894:1;;44884:12;44910:119;45004:1;44997:5;44994:12;44984:2;;45020:1;;45010:12;45036:121;45132:1;45125:5;45122:12;45112:2;;45148:1;;45138:12;45784:110;45868:2;45861:5;45858:13;45848:2;;45885:1;;45875:12",
  "source": "// \"SPDX-License-Identifier: Apache-2.0\"\npragma solidity ^0.6.11;\npragma experimental ABIEncoderV2;\n\nimport \"../../Core/Core.sol\";\nimport \"./ICECEngine.sol\";\nimport \"./CECSTF.sol\";\nimport \"./CECPOF.sol\";\n\n\n/**\n * @title CECEngine\n * @notice Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\n * @dev All numbers except unix timestamp are represented as multiple of 10 ** 18\n * inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18\n */\ncontract CECEngine is Core, CECSTF, CECPOF, ICECEngine {\n\n    function contractType() external pure override returns (ContractType) {\n        return ContractType.CEC;\n    }\n\n    /**\n     * Applys an event to the current state of a contract and returns the resulting contract state.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event to be applied to the contract state\n     * @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n     * @return the resulting contract state\n     */\n    function computeStateForEvent(\n        CECTerms calldata terms,\n        State calldata state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        external\n        pure\n        override\n        returns (State memory)\n    {\n        return stateTransitionFunction(\n            terms,\n            state,\n            _event,\n            externalData\n        );\n    }\n\n    /**\n     * Evaluates the payoff for an event under the current state of the contract.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event for which the payoff should be evaluated\n     * @param externalData external data needed for POF evaluation (e.g. fxRate)\n     * @return the payoff of the event\n     */\n    function computePayoffForEvent(\n        CECTerms calldata terms,\n        State calldata state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        external\n        pure\n        override\n        returns (int256)\n    {\n        // // if alternative settlementCurrency is set then apply fxRate to payoff\n        // if (terms.settlementCurrency != address(0) && terms.currency != terms.settlementCurrency) {\n        //     return payoffFunction(\n        //         terms,\n        //         state,\n        //         _event,\n        //         externalData\n        //     ).floatMult(int256(externalData));\n        // }\n\n        return payoffFunction(\n            terms,\n            state,\n            _event,\n            externalData\n        );\n    }\n\n    /**\n     * @notice Initialize contract state space based on the contract terms.\n     * @param terms terms of the contract\n     * @return initial state of the contract\n     */\n    function computeInitialState(CECTerms calldata terms)\n        external\n        pure\n        override\n        returns (State memory)\n    {\n        State memory state;\n\n        state.contractPerformance = ContractPerformance.PF;\n        state.statusDate = terms.statusDate;\n        state.maturityDate = terms.maturityDate;\n        state.notionalPrincipal = roleSign(terms.contractRole) * terms.notionalPrincipal;\n\n        return state;\n    }\n\n    /**\n     * @notice Computes a schedule segment of non-cyclic contract events based on the contract terms\n     * and the specified timestamps.\n     * @param terms terms of the contract\n     * @param segmentStart start timestamp of the segment\n     * @param segmentEnd end timestamp of the segement\n     * @return segment of the non-cyclic schedule\n     */\n    function computeNonCyclicScheduleSegment(\n        CECTerms calldata terms,\n        uint256 segmentStart,\n        uint256 segmentEnd\n    )\n        external\n        pure\n        override\n        returns (bytes32[] memory)\n    {\n        bytes32[MAX_EVENT_SCHEDULE_SIZE] memory events;\n        uint16 index;\n\n        // maturity event\n        if (isInSegment(terms.maturityDate, segmentStart, segmentEnd) == true) {\n            events[index] = encodeEvent(EventType.MD, terms.maturityDate);\n            index++;\n        }\n\n        // remove null entries from returned array\n        bytes32[] memory schedule = new bytes32[](index);\n        for (uint256 i = 0; i < index; i++) {\n            schedule[i] = events[i];\n        }\n\n        return schedule;\n    }\n\n    /**\n     * @notice Computes a schedule segment of cyclic contract events based on the contract terms\n     * and the specified timestamps.\n     * param terms terms of the contract\n     * param segmentStart start timestamp of the segment\n     * param segmentEnd end timestamp of the segement\n     * param eventType eventType of the cyclic schedule\n     * @return event schedule segment\n     */\n    function computeCyclicScheduleSegment(\n        CECTerms calldata /* terms */,\n        uint256 /* segmentStart */,\n        uint256 /* segmentEnd */,\n        EventType /* eventType */\n    )\n        external\n        pure\n        override\n        returns (bytes32[] memory)\n    {\n        bytes32[] memory schedule = new bytes32[](0);\n\n        return schedule;\n    }\n\n    /**\n     * @notice Computes a schedule segment of cyclic contract events based on the contract terms\n     * and the specified timestamps.\n     * param terms terms of the contract\n     * param lastScheduleTime last occurrence of cyclic event\n     * param eventType eventType of the cyclic schedule\n     * @return event schedule segment\n     */\n    function computeNextCyclicEvent(\n        CECTerms calldata /* terms */,\n        uint256 /* lastScheduleTime */,\n        EventType /* eventType */\n    )\n        external\n        pure\n        override\n        returns(bytes32)\n    {\n        return bytes32(0);\n    }\n\n    /**\n     * @notice Verifies that the provided event is still scheduled under the terms, the current state of the\n     * contract and the current state of the underlying.\n     * param _event event for which to check if its still scheduled\n     * param terms terms of the contract\n     * param state current state of the contract\n     * param hasUnderlying boolean indicating whether the contract has an underlying contract\n     * param underlyingState state of the underlying (empty state object if non-existing)\n     * @return boolean indicating whether event is still scheduled\n     */\n    function isEventScheduled(\n        bytes32 /* _event */,\n        CECTerms calldata /* terms */,\n        State calldata /* state */,\n        bool /* hasUnderlying */,\n        State calldata /* underlyingState */\n    )\n        external\n        pure\n        override\n        returns (bool)\n    {\n        return true;\n    }\n\n    /**\n     * @notice Implements abstract method which is defined in BaseEngine.\n     * Applies an event to the current state of the contract and returns the resulting state.\n     * The inheriting Engine contract has to map the events type to the designated STF.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event for which to evaluate the next state for\n     * @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n     * @return the resulting contract state\n     */\n    function stateTransitionFunction(\n        CECTerms memory terms,\n        State memory state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        internal\n        pure\n        returns (State memory)\n    {\n        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);\n\n        if (eventType == EventType.XD) return STF_CEC_XD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.MD) return STF_CEC_MD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.STD) return STF_CEC_STD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.CE) return STF_CEC_CE(terms, state, scheduleTime, externalData);\n\n        revert(\"CECEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\");\n    }\n\n    /**\n     * @notice Implements abstract method which is defined in BaseEngine.\n     * Computes the payoff for an event under the current state of the contract.\n     * The inheriting Engine contract has to map the events type to the designated POF.\n     * @param terms terms of the contract\n     * @param state current state of the contract\n     * @param _event event for which the payoff should be evaluated\n     * @param externalData external data needed for POF evaluation (e.g. fxRate)\n     * @return the payoff of the event\n     */\n    function payoffFunction(\n        CECTerms memory terms,\n        State memory state,\n        bytes32 _event,\n        bytes32 externalData\n    )\n        internal\n        pure\n        returns (int256)\n    {\n        (EventType eventType, uint256 scheduleTime) = decodeEvent(_event);\n\n        if (eventType == EventType.CE) return 0;\n        if (eventType == EventType.XD) return 0;\n        if (eventType == EventType.STD) return POF_CEC_STD(terms, state, scheduleTime, externalData);\n        if (eventType == EventType.MD) return 0;\n\n        revert(\"CECEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\");\n    }\n}\n",
  "sourcePath": "@atpar/actus-solidity/contracts/Engines/CEC/CECEngine.sol",
  "ast": {
    "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/CECEngine.sol",
    "exportedSymbols": {
      "CECEngine": [
        28675
      ]
    },
    "id": 28676,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 28270,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:89"
      },
      {
        "id": 28271,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:89"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Core.sol",
        "file": "../../Core/Core.sol",
        "id": 28272,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 24036,
        "src": "101:29:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/ICECEngine.sol",
        "file": "./ICECEngine.sol",
        "id": 28273,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 29018,
        "src": "131:26:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/CECSTF.sol",
        "file": "./CECSTF.sol",
        "id": 28274,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 28917,
        "src": "158:22:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/CECPOF.sol",
        "file": "./CECPOF.sol",
        "id": 28275,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 28705,
        "src": "181:22:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28277,
              "name": "Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24035,
              "src": "536:4:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Core_$24035",
                "typeString": "contract Core"
              }
            },
            "id": 28278,
            "nodeType": "InheritanceSpecifier",
            "src": "536:4:89"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28279,
              "name": "CECSTF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28916,
              "src": "542:6:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CECSTF_$28916",
                "typeString": "contract CECSTF"
              }
            },
            "id": 28280,
            "nodeType": "InheritanceSpecifier",
            "src": "542:6:89"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28281,
              "name": "CECPOF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28704,
              "src": "550:6:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CECPOF_$28704",
                "typeString": "contract CECPOF"
              }
            },
            "id": 28282,
            "nodeType": "InheritanceSpecifier",
            "src": "550:6:89"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28283,
              "name": "ICECEngine",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29017,
              "src": "558:10:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICECEngine_$29017",
                "typeString": "contract ICECEngine"
              }
            },
            "id": 28284,
            "nodeType": "InheritanceSpecifier",
            "src": "558:10:89"
          }
        ],
        "contractDependencies": [
          22465,
          23277,
          23340,
          23895,
          24013,
          24035,
          24668,
          24758,
          24885,
          24931,
          28704,
          28916,
          29017,
          32432
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 28276,
          "nodeType": "StructuredDocumentation",
          "src": "206:307:89",
          "text": " @title CECEngine\n @notice Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\n @dev All numbers except unix timestamp are represented as multiple of 10 ** 18\n inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18"
        },
        "fullyImplemented": true,
        "id": 28675,
        "linearizedBaseContracts": [
          28675,
          29017,
          32432,
          28704,
          28916,
          24035,
          24931,
          24668,
          24885,
          24013,
          23895,
          23340,
          22465,
          24758,
          23277
        ],
        "name": "CECEngine",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "baseFunctions": [
              32431
            ],
            "body": {
              "id": 28293,
              "nodeType": "Block",
              "src": "646:40:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 28290,
                      "name": "ContractType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22559,
                      "src": "663:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                        "typeString": "type(enum ContractType)"
                      }
                    },
                    "id": 28291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "CEC",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "663:16:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "functionReturnParameters": 28289,
                  "id": 28292,
                  "nodeType": "Return",
                  "src": "656:23:89"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "cb2ef6f7",
            "id": 28294,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contractType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28286,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "614:8:89"
            },
            "parameters": {
              "id": 28285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "597:2:89"
            },
            "returnParameters": {
              "id": 28289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28288,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28294,
                  "src": "632:12:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ContractType_$22559",
                    "typeString": "enum ContractType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28287,
                    "name": "ContractType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22559,
                    "src": "632:12:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "631:14:89"
            },
            "scope": 28675,
            "src": "576:110:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28946
            ],
            "body": {
              "id": 28316,
              "nodeType": "Block",
              "src": "1335:141:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28310,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28297,
                        "src": "1389:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28311,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28299,
                        "src": "1408:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28312,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28301,
                        "src": "1427:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28313,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28303,
                        "src": "1447:12:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28309,
                      "name": "stateTransitionFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28614,
                      "src": "1352:23:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (struct CECTerms memory,struct State memory,bytes32,bytes32) pure returns (struct State memory)"
                      }
                    },
                    "id": 28314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1352:117:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 28308,
                  "id": 28315,
                  "nodeType": "Return",
                  "src": "1345:124:89"
                }
              ]
            },
            "documentation": {
              "id": 28295,
              "nodeType": "StructuredDocumentation",
              "src": "692:403:89",
              "text": " Applys an event to the current state of a contract and returns the resulting contract state.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event to be applied to the contract state\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "functionSelector": "d4f8d3f3",
            "id": 28317,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeStateForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28305,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1291:8:89"
            },
            "parameters": {
              "id": 28304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28297,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1139:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28296,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "1139:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28299,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1172:20:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28298,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1172:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28301,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1202:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28300,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28303,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1226:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28302,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1129:123:89"
            },
            "returnParameters": {
              "id": 28308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28307,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1317:12:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28306,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1317:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1316:14:89"
            },
            "scope": 28675,
            "src": "1100:376:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28960
            ],
            "body": {
              "id": 28339,
              "nodeType": "Block",
              "src": "2090:531:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28333,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28320,
                        "src": "2534:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28334,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28322,
                        "src": "2553:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28335,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28324,
                        "src": "2572:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28336,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28326,
                        "src": "2592:12:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28332,
                      "name": "payoffFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28674,
                      "src": "2506:14:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                        "typeString": "function (struct CECTerms memory,struct State memory,bytes32,bytes32) pure returns (int256)"
                      }
                    },
                    "id": 28337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2506:108:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 28331,
                  "id": 28338,
                  "nodeType": "Return",
                  "src": "2499:115:89"
                }
              ]
            },
            "documentation": {
              "id": 28318,
              "nodeType": "StructuredDocumentation",
              "src": "1482:373:89",
              "text": " Evaluates the payoff for an event under the current state of the contract.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "functionSelector": "c26b940b",
            "id": 28340,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computePayoffForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28328,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2052:8:89"
            },
            "parameters": {
              "id": 28327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28320,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1900:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28319,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "1900:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28322,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1933:20:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28321,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1933:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28324,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1963:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28323,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1963:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28326,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1987:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28325,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1987:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1890:123:89"
            },
            "returnParameters": {
              "id": 28331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28330,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "2078:6:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 28329,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2078:6:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2077:8:89"
            },
            "scope": 28675,
            "src": "1860:761:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28932
            ],
            "body": {
              "id": 28387,
              "nodeType": "Block",
              "src": "2942:303:89",
              "statements": [
                {
                  "assignments": [
                    28350
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28350,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28387,
                      "src": "2952:18:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 28349,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "2952:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28351,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2952:18:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28352,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "2981:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28354,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractPerformance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22634,
                      "src": "2981:25:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28355,
                        "name": "ContractPerformance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22513,
                        "src": "3009:19:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                          "typeString": "type(enum ContractPerformance)"
                        }
                      },
                      "id": 28356,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "PF",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3009:22:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "src": "2981:50:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                      "typeString": "enum ContractPerformance"
                    }
                  },
                  "id": 28358,
                  "nodeType": "ExpressionStatement",
                  "src": "2981:50:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28359,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "3041:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28361,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3041:16:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28362,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28343,
                        "src": "3060:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      "id": 28363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22786,
                      "src": "3060:16:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3041:35:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28365,
                  "nodeType": "ExpressionStatement",
                  "src": "3041:35:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28366,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "3086:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28368,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "3086:18:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28369,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28343,
                        "src": "3107:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      "id": 28370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22788,
                      "src": "3107:18:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3086:39:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28372,
                  "nodeType": "ExpressionStatement",
                  "src": "3086:39:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28373,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "3135:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28375,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "notionalPrincipal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22648,
                      "src": "3135:23:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 28382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 28377,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28343,
                              "src": "3170:5:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 28378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "3170:18:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          ],
                          "id": 28376,
                          "name": "roleSign",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23339,
                          "src": "3161:8:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_enum$_ContractRole_$22539_$returns$_t_int8_$",
                            "typeString": "function (enum ContractRole) pure returns (int8)"
                          }
                        },
                        "id": 28379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3161:28:89",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int8",
                          "typeString": "int8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 28380,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28343,
                          "src": "3192:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                            "typeString": "struct CECTerms calldata"
                          }
                        },
                        "id": 28381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "notionalPrincipal",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22790,
                        "src": "3192:23:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "3161:54:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3135:80:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 28384,
                  "nodeType": "ExpressionStatement",
                  "src": "3135:80:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28385,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28350,
                    "src": "3233:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 28348,
                  "id": 28386,
                  "nodeType": "Return",
                  "src": "3226:12:89"
                }
              ]
            },
            "documentation": {
              "id": 28341,
              "nodeType": "StructuredDocumentation",
              "src": "2627:174:89",
              "text": " @notice Initialize contract state space based on the contract terms.\n @param terms terms of the contract\n @return initial state of the contract"
            },
            "functionSelector": "98c29ea4",
            "id": 28388,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeInitialState",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28345,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2898:8:89"
            },
            "parameters": {
              "id": 28344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28343,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28388,
                  "src": "2835:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28342,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "2835:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2834:25:89"
            },
            "returnParameters": {
              "id": 28348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28347,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28388,
                  "src": "2924:12:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28346,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2924:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2923:14:89"
            },
            "scope": 28675,
            "src": "2806:439:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28973
            ],
            "body": {
              "id": 28469,
              "nodeType": "Block",
              "src": "3834:528:89",
              "statements": [
                {
                  "assignments": [
                    28407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28407,
                      "mutability": "mutable",
                      "name": "events",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28469,
                      "src": "3844:46:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                        "typeString": "bytes32[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28405,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3844:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28406,
                        "length": {
                          "argumentTypes": null,
                          "id": 28404,
                          "name": "MAX_EVENT_SCHEDULE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22464,
                          "src": "3852:23:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3844:32:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$120_storage_ptr",
                          "typeString": "bytes32[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28408,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3844:46:89"
                },
                {
                  "assignments": [
                    28410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28410,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28469,
                      "src": "3900:12:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 28409,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "3900:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28411,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3900:12:89"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 28419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 28413,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28391,
                            "src": "3965:5:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                              "typeString": "struct CECTerms calldata"
                            }
                          },
                          "id": 28414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturityDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22788,
                          "src": "3965:18:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28415,
                          "name": "segmentStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28393,
                          "src": "3985:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28416,
                          "name": "segmentEnd",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28395,
                          "src": "3999:10:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 28412,
                        "name": "isInSegment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24667,
                        "src": "3953:11:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 28417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3953:57:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 28418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4014:4:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "3953:65:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28435,
                  "nodeType": "IfStatement",
                  "src": "3949:178:89",
                  "trueBody": {
                    "id": 28434,
                    "nodeType": "Block",
                    "src": "4020:107:89",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 28429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 28420,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28407,
                              "src": "4034:6:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 28422,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 28421,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28410,
                              "src": "4041:5:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4034:13:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 28424,
                                  "name": "EventType",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22610,
                                  "src": "4062:9:89",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                    "typeString": "type(enum EventType)"
                                  }
                                },
                                "id": 28425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "MD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4062:12:89",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 28426,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28391,
                                  "src": "4076:5:89",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                    "typeString": "struct CECTerms calldata"
                                  }
                                },
                                "id": 28427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22788,
                                "src": "4076:18:89",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 28423,
                              "name": "encodeEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24702,
                              "src": "4050:11:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                              }
                            },
                            "id": 28428,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4050:45:89",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4034:61:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28430,
                        "nodeType": "ExpressionStatement",
                        "src": "4034:61:89"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 28432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "4109:7:89",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 28431,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28410,
                            "src": "4109:5:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 28433,
                        "nodeType": "ExpressionStatement",
                        "src": "4109:7:89"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    28440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28440,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28469,
                      "src": "4188:25:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28438,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4188:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28439,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4188:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28446,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28444,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28410,
                        "src": "4230:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 28443,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4216:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28441,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4220:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28442,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4220:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 28445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4216:20:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4188:48:89"
                },
                {
                  "body": {
                    "id": 28465,
                    "nodeType": "Block",
                    "src": "4282:48:89",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 28463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 28457,
                              "name": "schedule",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28440,
                              "src": "4296:8:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 28459,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 28458,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28448,
                              "src": "4305:1:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4296:11:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 28460,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28407,
                              "src": "4310:6:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 28462,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 28461,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28448,
                              "src": "4317:1:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4310:9:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4296:23:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28464,
                        "nodeType": "ExpressionStatement",
                        "src": "4296:23:89"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28451,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28448,
                      "src": "4266:1:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 28452,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28410,
                      "src": "4270:5:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "4266:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28466,
                  "initializationExpression": {
                    "assignments": [
                      28448
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 28448,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 28466,
                        "src": "4251:9:89",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 28447,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4251:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 28450,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4263:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4251:13:89"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 28455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4277:3:89",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 28454,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28448,
                        "src": "4277:1:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 28456,
                    "nodeType": "ExpressionStatement",
                    "src": "4277:3:89"
                  },
                  "nodeType": "ForStatement",
                  "src": "4246:84:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28467,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28440,
                    "src": "4347:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 28401,
                  "id": 28468,
                  "nodeType": "Return",
                  "src": "4340:15:89"
                }
              ]
            },
            "documentation": {
              "id": 28389,
              "nodeType": "StructuredDocumentation",
              "src": "3251:354:89",
              "text": " @notice Computes a schedule segment of non-cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param segmentStart start timestamp of the segment\n @param segmentEnd end timestamp of the segement\n @return segment of the non-cyclic schedule"
            },
            "functionSelector": "f73ca804",
            "id": 28470,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNonCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28397,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3786:8:89"
            },
            "parameters": {
              "id": 28396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28391,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3660:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28390,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "3660:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28393,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3693:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3693:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28395,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3723:18:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28394,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3723:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3650:97:89"
            },
            "returnParameters": {
              "id": 28401,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28400,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3812:16:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 28398,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3812:7:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 28399,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3812:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3811:18:89"
            },
            "scope": 28675,
            "src": "3610:752:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28988
            ],
            "body": {
              "id": 28499,
              "nodeType": "Block",
              "src": "5038:87:89",
              "statements": [
                {
                  "assignments": [
                    28490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28490,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28499,
                      "src": "5048:25:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28488,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5048:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28489,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5048:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28496,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 28494,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5090:1:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 28493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5076:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28491,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5080:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28492,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5080:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 28495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5076:16:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5048:44:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28497,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28490,
                    "src": "5110:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 28485,
                  "id": 28498,
                  "nodeType": "Return",
                  "src": "5103:15:89"
                }
              ]
            },
            "documentation": {
              "id": 28471,
              "nodeType": "StructuredDocumentation",
              "src": "4368:391:89",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n param terms terms of the contract\n param segmentStart start timestamp of the segment\n param segmentEnd end timestamp of the segement\n param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "183ced6e",
            "id": 28500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28481,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4990:8:89"
            },
            "parameters": {
              "id": 28480,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28473,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4811:17:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28472,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "4811:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28475,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4850:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28474,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4850:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28477,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4886:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4886:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28479,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4920:9:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28478,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "4920:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4801:150:89"
            },
            "returnParameters": {
              "id": 28485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28484,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "5016:16:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 28482,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5016:7:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 28483,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5016:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5015:18:89"
            },
            "scope": 28675,
            "src": "4764:361:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              29000
            ],
            "body": {
              "id": 28518,
              "nodeType": "Block",
              "src": "5706:34:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 28515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5731:1:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 28514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5723:7:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 28513,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5723:7:89",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 28516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5723:10:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 28512,
                  "id": 28517,
                  "nodeType": "Return",
                  "src": "5716:17:89"
                }
              ]
            },
            "documentation": {
              "id": 28501,
              "nodeType": "StructuredDocumentation",
              "src": "5131:342:89",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n param terms terms of the contract\n param lastScheduleTime last occurrence of cyclic event\n param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "52d18375",
            "id": 28519,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNextCyclicEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28509,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5668:8:89"
            },
            "parameters": {
              "id": 28508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28503,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5519:17:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28502,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "5519:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28505,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5558:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28504,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5558:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28507,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5598:9:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28506,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "5598:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5509:120:89"
            },
            "returnParameters": {
              "id": 28512,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28511,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5693:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28510,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5693:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5692:9:89"
            },
            "scope": 28675,
            "src": "5478:262:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              29016
            ],
            "body": {
              "id": 28538,
              "nodeType": "Block",
              "src": "6628:28:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 28536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6645:4:89",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 28535,
                  "id": 28537,
                  "nodeType": "Return",
                  "src": "6638:11:89"
                }
              ]
            },
            "documentation": {
              "id": 28520,
              "nodeType": "StructuredDocumentation",
              "src": "5746:586:89",
              "text": " @notice Verifies that the provided event is still scheduled under the terms, the current state of the\n contract and the current state of the underlying.\n param _event event for which to check if its still scheduled\n param terms terms of the contract\n param state current state of the contract\n param hasUnderlying boolean indicating whether the contract has an underlying contract\n param underlyingState state of the underlying (empty state object if non-existing)\n @return boolean indicating whether event is still scheduled"
            },
            "functionSelector": "56972fbe",
            "id": 28539,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isEventScheduled",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28532,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6592:8:89"
            },
            "parameters": {
              "id": 28531,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28522,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6372:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28521,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6372:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28524,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6402:17:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28523,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "6402:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28526,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6441:14:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28525,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "6441:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28528,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6477:4:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28527,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6477:4:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28530,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6511:14:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28529,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "6511:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6362:191:89"
            },
            "returnParameters": {
              "id": 28535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28534,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6618:4:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28533,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6618:4:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6617:6:89"
            },
            "scope": 28675,
            "src": "6337:319:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 28613,
              "nodeType": "Block",
              "src": "7448:560:89",
              "statements": [
                {
                  "assignments": [
                    28554,
                    28556
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28554,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28613,
                      "src": "7459:19:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 28553,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "7459:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 28556,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28613,
                      "src": "7480:20:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28555,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7480:7:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28560,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28558,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28546,
                        "src": "7516:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28557,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "7504:11:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 28559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7504:19:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7458:65:89"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28561,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7538:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28562,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7551:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7551:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7538:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28572,
                  "nodeType": "IfStatement",
                  "src": "7534:90:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28566,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7583:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28567,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7590:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28568,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7597:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28569,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7611:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28565,
                        "name": "STF_CEC_XD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28874,
                        "src": "7572:10:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7572:52:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28571,
                    "nodeType": "Return",
                    "src": "7565:59:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28573,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7638:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28574,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7651:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7651:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7638:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28584,
                  "nodeType": "IfStatement",
                  "src": "7634:90:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28578,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7683:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28579,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7690:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28580,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7697:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28581,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7711:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28577,
                        "name": "STF_CEC_MD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28763,
                        "src": "7672:10:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7672:52:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28583,
                    "nodeType": "Return",
                    "src": "7665:59:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28585,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7738:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28586,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7751:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7751:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7738:26:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28596,
                  "nodeType": "IfStatement",
                  "src": "7734:92:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28590,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7785:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28591,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7792:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28592,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7799:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28593,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7813:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28589,
                        "name": "STF_CEC_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28915,
                        "src": "7773:11:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7773:53:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28595,
                    "nodeType": "Return",
                    "src": "7766:60:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28597,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7840:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28598,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7853:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7853:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7840:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28608,
                  "nodeType": "IfStatement",
                  "src": "7836:90:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28602,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7885:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28603,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7892:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28604,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7899:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28605,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7913:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28601,
                        "name": "STF_CEC_CE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28728,
                        "src": "7874:10:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7874:52:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28607,
                    "nodeType": "Return",
                    "src": "7867:59:89"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434543456e67696e652e73746174655472616e736974696f6e46756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 28610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7944:56:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_18c682338c6698c3f96b016c8f3f22618d14b84974a8f1b1e2191b8999f4efdc",
                          "typeString": "literal_string \"CECEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CECEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_18c682338c6698c3f96b016c8f3f22618d14b84974a8f1b1e2191b8999f4efdc",
                          "typeString": "literal_string \"CECEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 28609,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "7937:6:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 28611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7937:64:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 28612,
                  "nodeType": "ExpressionStatement",
                  "src": "7937:64:89"
                }
              ]
            },
            "documentation": {
              "id": 28540,
              "nodeType": "StructuredDocumentation",
              "src": "6662:564:89",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Applies an event to the current state of the contract and returns the resulting state.\n The inheriting Engine contract has to map the events type to the designated STF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which to evaluate the next state for\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "id": 28614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stateTransitionFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 28549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28542,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7273:21:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28541,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "7273:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28544,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7304:18:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28543,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "7304:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28546,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7332:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28545,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7332:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28548,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7356:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28547,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7356:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7263:119:89"
            },
            "returnParameters": {
              "id": 28552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28551,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7430:12:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28550,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "7430:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7429:14:89"
            },
            "scope": 28675,
            "src": "7231:777:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28673,
              "nodeType": "Block",
              "src": "8755:398:89",
              "statements": [
                {
                  "assignments": [
                    28629,
                    28631
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28629,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28673,
                      "src": "8766:19:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 28628,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "8766:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 28631,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28673,
                      "src": "8787:20:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28630,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8787:7:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28635,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28633,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28621,
                        "src": "8823:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28632,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "8811:11:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 28634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8811:19:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8765:65:89"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28636,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "8845:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28637,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "8858:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8858:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "8845:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28642,
                  "nodeType": "IfStatement",
                  "src": "8841:39:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8879:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 28627,
                    "id": 28641,
                    "nodeType": "Return",
                    "src": "8872:8:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28643,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "8894:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28644,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "8907:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8907:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "8894:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28649,
                  "nodeType": "IfStatement",
                  "src": "8890:39:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8928:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 28627,
                    "id": 28648,
                    "nodeType": "Return",
                    "src": "8921:8:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28650,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "8943:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28651,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "8956:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8956:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "8943:26:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28661,
                  "nodeType": "IfStatement",
                  "src": "8939:92:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28655,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28617,
                          "src": "8990:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28656,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28619,
                          "src": "8997:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28657,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28631,
                          "src": "9004:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28658,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28623,
                          "src": "9018:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28654,
                        "name": "POF_CEC_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28703,
                        "src": "8978:11:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_int256_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (int256)"
                        }
                      },
                      "id": 28659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8978:53:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "functionReturnParameters": 28627,
                    "id": 28660,
                    "nodeType": "Return",
                    "src": "8971:60:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28662,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "9045:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28663,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "9058:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28664,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9058:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "9045:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28668,
                  "nodeType": "IfStatement",
                  "src": "9041:39:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9079:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 28627,
                    "id": 28667,
                    "nodeType": "Return",
                    "src": "9072:8:89"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434543456e67696e652e7061796f666646756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 28670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9098:47:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c1d3a70ab702451fea9e0bb859ace15f26227e93b46fef5341b28df442210da1",
                          "typeString": "literal_string \"CECEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CECEngine.payoffFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_c1d3a70ab702451fea9e0bb859ace15f26227e93b46fef5341b28df442210da1",
                          "typeString": "literal_string \"CECEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 28669,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "9091:6:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 28671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9091:55:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 28672,
                  "nodeType": "ExpressionStatement",
                  "src": "9091:55:89"
                }
              ]
            },
            "documentation": {
              "id": 28615,
              "nodeType": "StructuredDocumentation",
              "src": "8014:534:89",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Computes the payoff for an event under the current state of the contract.\n The inheriting Engine contract has to map the events type to the designated POF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "id": 28674,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payoffFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 28624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28617,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8586:21:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28616,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "8586:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28619,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8617:18:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28618,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "8617:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28621,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8645:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28620,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8645:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28623,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8669:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28622,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8669:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8576:119:89"
            },
            "returnParameters": {
              "id": 28627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28626,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8743:6:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 28625,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8743:6:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8742:8:89"
            },
            "scope": 28675,
            "src": "8553:600:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 28676,
        "src": "514:8641:89"
      }
    ],
    "src": "41:9115:89"
  },
  "legacyAST": {
    "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/CECEngine.sol",
    "exportedSymbols": {
      "CECEngine": [
        28675
      ]
    },
    "id": 28676,
    "license": "Apache-2.0",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 28270,
        "literals": [
          "solidity",
          "^",
          "0.6",
          ".11"
        ],
        "nodeType": "PragmaDirective",
        "src": "41:24:89"
      },
      {
        "id": 28271,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "66:33:89"
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Core/Core.sol",
        "file": "../../Core/Core.sol",
        "id": 28272,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 24036,
        "src": "101:29:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/ICECEngine.sol",
        "file": "./ICECEngine.sol",
        "id": 28273,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 29018,
        "src": "131:26:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/CECSTF.sol",
        "file": "./CECSTF.sol",
        "id": 28274,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 28917,
        "src": "158:22:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@atpar/actus-solidity/contracts/Engines/CEC/CECPOF.sol",
        "file": "./CECPOF.sol",
        "id": 28275,
        "nodeType": "ImportDirective",
        "scope": 28676,
        "sourceUnit": 28705,
        "src": "181:22:89",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28277,
              "name": "Core",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 24035,
              "src": "536:4:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_Core_$24035",
                "typeString": "contract Core"
              }
            },
            "id": 28278,
            "nodeType": "InheritanceSpecifier",
            "src": "536:4:89"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28279,
              "name": "CECSTF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28916,
              "src": "542:6:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CECSTF_$28916",
                "typeString": "contract CECSTF"
              }
            },
            "id": 28280,
            "nodeType": "InheritanceSpecifier",
            "src": "542:6:89"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28281,
              "name": "CECPOF",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 28704,
              "src": "550:6:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_CECPOF_$28704",
                "typeString": "contract CECPOF"
              }
            },
            "id": 28282,
            "nodeType": "InheritanceSpecifier",
            "src": "550:6:89"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 28283,
              "name": "ICECEngine",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 29017,
              "src": "558:10:89",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_ICECEngine_$29017",
                "typeString": "contract ICECEngine"
              }
            },
            "id": 28284,
            "nodeType": "InheritanceSpecifier",
            "src": "558:10:89"
          }
        ],
        "contractDependencies": [
          22465,
          23277,
          23340,
          23895,
          24013,
          24035,
          24668,
          24758,
          24885,
          24931,
          28704,
          28916,
          29017,
          32432
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 28276,
          "nodeType": "StructuredDocumentation",
          "src": "206:307:89",
          "text": " @title CECEngine\n @notice Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract\n @dev All numbers except unix timestamp are represented as multiple of 10 ** 18\n inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18"
        },
        "fullyImplemented": true,
        "id": 28675,
        "linearizedBaseContracts": [
          28675,
          29017,
          32432,
          28704,
          28916,
          24035,
          24931,
          24668,
          24885,
          24013,
          23895,
          23340,
          22465,
          24758,
          23277
        ],
        "name": "CECEngine",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "baseFunctions": [
              32431
            ],
            "body": {
              "id": 28293,
              "nodeType": "Block",
              "src": "646:40:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 28290,
                      "name": "ContractType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 22559,
                      "src": "663:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_enum$_ContractType_$22559_$",
                        "typeString": "type(enum ContractType)"
                      }
                    },
                    "id": 28291,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "lValueRequested": false,
                    "memberName": "CEC",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "663:16:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "functionReturnParameters": 28289,
                  "id": 28292,
                  "nodeType": "Return",
                  "src": "656:23:89"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "cb2ef6f7",
            "id": 28294,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "contractType",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28286,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "614:8:89"
            },
            "parameters": {
              "id": 28285,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "597:2:89"
            },
            "returnParameters": {
              "id": 28289,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28288,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28294,
                  "src": "632:12:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_ContractType_$22559",
                    "typeString": "enum ContractType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28287,
                    "name": "ContractType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22559,
                    "src": "632:12:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractType_$22559",
                      "typeString": "enum ContractType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "631:14:89"
            },
            "scope": 28675,
            "src": "576:110:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28946
            ],
            "body": {
              "id": 28316,
              "nodeType": "Block",
              "src": "1335:141:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28310,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28297,
                        "src": "1389:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28311,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28299,
                        "src": "1408:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28312,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28301,
                        "src": "1427:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28313,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28303,
                        "src": "1447:12:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28309,
                      "name": "stateTransitionFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28614,
                      "src": "1352:23:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                        "typeString": "function (struct CECTerms memory,struct State memory,bytes32,bytes32) pure returns (struct State memory)"
                      }
                    },
                    "id": 28314,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1352:117:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 28308,
                  "id": 28315,
                  "nodeType": "Return",
                  "src": "1345:124:89"
                }
              ]
            },
            "documentation": {
              "id": 28295,
              "nodeType": "StructuredDocumentation",
              "src": "692:403:89",
              "text": " Applys an event to the current state of a contract and returns the resulting contract state.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event to be applied to the contract state\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "functionSelector": "d4f8d3f3",
            "id": 28317,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeStateForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28305,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "1291:8:89"
            },
            "parameters": {
              "id": 28304,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28297,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1139:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28296,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "1139:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28299,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1172:20:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28298,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1172:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28301,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1202:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28300,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1202:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28303,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1226:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28302,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1226:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1129:123:89"
            },
            "returnParameters": {
              "id": 28308,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28307,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28317,
                  "src": "1317:12:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28306,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1317:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1316:14:89"
            },
            "scope": 28675,
            "src": "1100:376:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28960
            ],
            "body": {
              "id": 28339,
              "nodeType": "Block",
              "src": "2090:531:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28333,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28320,
                        "src": "2534:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28334,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28322,
                        "src": "2553:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28335,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28324,
                        "src": "2572:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 28336,
                        "name": "externalData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28326,
                        "src": "2592:12:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        },
                        {
                          "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                          "typeString": "struct State calldata"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28332,
                      "name": "payoffFunction",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28674,
                      "src": "2506:14:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_bytes32_$_t_bytes32_$returns$_t_int256_$",
                        "typeString": "function (struct CECTerms memory,struct State memory,bytes32,bytes32) pure returns (int256)"
                      }
                    },
                    "id": 28337,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2506:108:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "functionReturnParameters": 28331,
                  "id": 28338,
                  "nodeType": "Return",
                  "src": "2499:115:89"
                }
              ]
            },
            "documentation": {
              "id": 28318,
              "nodeType": "StructuredDocumentation",
              "src": "1482:373:89",
              "text": " Evaluates the payoff for an event under the current state of the contract.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "functionSelector": "c26b940b",
            "id": 28340,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computePayoffForEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28328,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2052:8:89"
            },
            "parameters": {
              "id": 28327,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28320,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1900:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28319,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "1900:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28322,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1933:20:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28321,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "1933:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28324,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1963:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28323,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1963:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28326,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "1987:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28325,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1987:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "1890:123:89"
            },
            "returnParameters": {
              "id": 28331,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28330,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28340,
                  "src": "2078:6:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 28329,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2078:6:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2077:8:89"
            },
            "scope": 28675,
            "src": "1860:761:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28932
            ],
            "body": {
              "id": 28387,
              "nodeType": "Block",
              "src": "2942:303:89",
              "statements": [
                {
                  "assignments": [
                    28350
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28350,
                      "mutability": "mutable",
                      "name": "state",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28387,
                      "src": "2952:18:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 28349,
                        "name": "State",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22673,
                        "src": "2952:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                          "typeString": "struct State"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28351,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "2952:18:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28357,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28352,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "2981:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28354,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "contractPerformance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22634,
                      "src": "2981:25:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28355,
                        "name": "ContractPerformance",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22513,
                        "src": "3009:19:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_ContractPerformance_$22513_$",
                          "typeString": "type(enum ContractPerformance)"
                        }
                      },
                      "id": 28356,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "PF",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "3009:22:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                        "typeString": "enum ContractPerformance"
                      }
                    },
                    "src": "2981:50:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_ContractPerformance_$22513",
                      "typeString": "enum ContractPerformance"
                    }
                  },
                  "id": 28358,
                  "nodeType": "ExpressionStatement",
                  "src": "2981:50:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28364,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28359,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "3041:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28361,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22636,
                      "src": "3041:16:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28362,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28343,
                        "src": "3060:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      "id": 28363,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "statusDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22786,
                      "src": "3060:16:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3041:35:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28365,
                  "nodeType": "ExpressionStatement",
                  "src": "3041:35:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28371,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28366,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "3086:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28368,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22640,
                      "src": "3086:18:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28369,
                        "name": "terms",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28343,
                        "src": "3107:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                          "typeString": "struct CECTerms calldata"
                        }
                      },
                      "id": 28370,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "maturityDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22788,
                      "src": "3107:18:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "3086:39:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 28372,
                  "nodeType": "ExpressionStatement",
                  "src": "3086:39:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28383,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28373,
                        "name": "state",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28350,
                        "src": "3135:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                          "typeString": "struct State memory"
                        }
                      },
                      "id": 28375,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "notionalPrincipal",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 22648,
                      "src": "3135:23:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "commonType": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      },
                      "id": 28382,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 28377,
                              "name": "terms",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28343,
                              "src": "3170:5:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                "typeString": "struct CECTerms calldata"
                              }
                            },
                            "id": 28378,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "contractRole",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 22774,
                            "src": "3170:18:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_enum$_ContractRole_$22539",
                              "typeString": "enum ContractRole"
                            }
                          ],
                          "id": 28376,
                          "name": "roleSign",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 23339,
                          "src": "3161:8:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_enum$_ContractRole_$22539_$returns$_t_int8_$",
                            "typeString": "function (enum ContractRole) pure returns (int8)"
                          }
                        },
                        "id": 28379,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "3161:28:89",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_int8",
                          "typeString": "int8"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "*",
                      "rightExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 28380,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28343,
                          "src": "3192:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                            "typeString": "struct CECTerms calldata"
                          }
                        },
                        "id": 28381,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "notionalPrincipal",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 22790,
                        "src": "3192:23:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_int256",
                          "typeString": "int256"
                        }
                      },
                      "src": "3161:54:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "src": "3135:80:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "id": 28384,
                  "nodeType": "ExpressionStatement",
                  "src": "3135:80:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28385,
                    "name": "state",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28350,
                    "src": "3233:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                      "typeString": "struct State memory"
                    }
                  },
                  "functionReturnParameters": 28348,
                  "id": 28386,
                  "nodeType": "Return",
                  "src": "3226:12:89"
                }
              ]
            },
            "documentation": {
              "id": 28341,
              "nodeType": "StructuredDocumentation",
              "src": "2627:174:89",
              "text": " @notice Initialize contract state space based on the contract terms.\n @param terms terms of the contract\n @return initial state of the contract"
            },
            "functionSelector": "98c29ea4",
            "id": 28388,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeInitialState",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28345,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2898:8:89"
            },
            "parameters": {
              "id": 28344,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28343,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28388,
                  "src": "2835:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28342,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "2835:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2834:25:89"
            },
            "returnParameters": {
              "id": 28348,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28347,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28388,
                  "src": "2924:12:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28346,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "2924:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2923:14:89"
            },
            "scope": 28675,
            "src": "2806:439:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28973
            ],
            "body": {
              "id": 28469,
              "nodeType": "Block",
              "src": "3834:528:89",
              "statements": [
                {
                  "assignments": [
                    28407
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28407,
                      "mutability": "mutable",
                      "name": "events",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28469,
                      "src": "3844:46:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                        "typeString": "bytes32[120]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28405,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "3844:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28406,
                        "length": {
                          "argumentTypes": null,
                          "id": 28404,
                          "name": "MAX_EVENT_SCHEDULE_SIZE",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 22464,
                          "src": "3852:23:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "ArrayTypeName",
                        "src": "3844:32:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$120_storage_ptr",
                          "typeString": "bytes32[120]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28408,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3844:46:89"
                },
                {
                  "assignments": [
                    28410
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28410,
                      "mutability": "mutable",
                      "name": "index",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28469,
                      "src": "3900:12:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      },
                      "typeName": {
                        "id": 28409,
                        "name": "uint16",
                        "nodeType": "ElementaryTypeName",
                        "src": "3900:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28411,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "3900:12:89"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 28419,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 28413,
                            "name": "terms",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28391,
                            "src": "3965:5:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                              "typeString": "struct CECTerms calldata"
                            }
                          },
                          "id": 28414,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "maturityDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 22788,
                          "src": "3965:18:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28415,
                          "name": "segmentStart",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28393,
                          "src": "3985:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28416,
                          "name": "segmentEnd",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28395,
                          "src": "3999:10:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 28412,
                        "name": "isInSegment",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 24667,
                        "src": "3953:11:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$_t_uint256_$returns$_t_bool_$",
                          "typeString": "function (uint256,uint256,uint256) pure returns (bool)"
                        }
                      },
                      "id": 28417,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "3953:57:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "74727565",
                      "id": 28418,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4014:4:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "3953:65:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28435,
                  "nodeType": "IfStatement",
                  "src": "3949:178:89",
                  "trueBody": {
                    "id": 28434,
                    "nodeType": "Block",
                    "src": "4020:107:89",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 28429,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 28420,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28407,
                              "src": "4034:6:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 28422,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 28421,
                              "name": "index",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28410,
                              "src": "4041:5:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint16",
                                "typeString": "uint16"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4034:13:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 28424,
                                  "name": "EventType",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 22610,
                                  "src": "4062:9:89",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                                    "typeString": "type(enum EventType)"
                                  }
                                },
                                "id": 28425,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "memberName": "MD",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": null,
                                "src": "4062:12:89",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                }
                              },
                              {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 28426,
                                  "name": "terms",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 28391,
                                  "src": "4076:5:89",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                                    "typeString": "struct CECTerms calldata"
                                  }
                                },
                                "id": 28427,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "maturityDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 22788,
                                "src": "4076:18:89",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_enum$_EventType_$22610",
                                  "typeString": "enum EventType"
                                },
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "id": 28423,
                              "name": "encodeEvent",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 24702,
                              "src": "4050:11:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_enum$_EventType_$22610_$_t_uint256_$returns$_t_bytes32_$",
                                "typeString": "function (enum EventType,uint256) pure returns (bytes32)"
                              }
                            },
                            "id": 28428,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "4050:45:89",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4034:61:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28430,
                        "nodeType": "ExpressionStatement",
                        "src": "4034:61:89"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 28432,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "++",
                          "prefix": false,
                          "src": "4109:7:89",
                          "subExpression": {
                            "argumentTypes": null,
                            "id": 28431,
                            "name": "index",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 28410,
                            "src": "4109:5:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint16",
                              "typeString": "uint16"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint16",
                            "typeString": "uint16"
                          }
                        },
                        "id": 28433,
                        "nodeType": "ExpressionStatement",
                        "src": "4109:7:89"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    28440
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28440,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28469,
                      "src": "4188:25:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28438,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4188:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28439,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4188:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28446,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28444,
                        "name": "index",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28410,
                        "src": "4230:5:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint16",
                          "typeString": "uint16"
                        }
                      ],
                      "id": 28443,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "4216:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28441,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "4220:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28442,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "4220:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 28445,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4216:20:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "4188:48:89"
                },
                {
                  "body": {
                    "id": 28465,
                    "nodeType": "Block",
                    "src": "4282:48:89",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 28463,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 28457,
                              "name": "schedule",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28440,
                              "src": "4296:8:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            "id": 28459,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 28458,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28448,
                              "src": "4305:1:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "4296:11:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 28460,
                              "name": "events",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28407,
                              "src": "4310:6:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$120_memory_ptr",
                                "typeString": "bytes32[120] memory"
                              }
                            },
                            "id": 28462,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 28461,
                              "name": "i",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 28448,
                              "src": "4317:1:89",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "4310:9:89",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "src": "4296:23:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28464,
                        "nodeType": "ExpressionStatement",
                        "src": "4296:23:89"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 28453,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28451,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28448,
                      "src": "4266:1:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "id": 28452,
                      "name": "index",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28410,
                      "src": "4270:5:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint16",
                        "typeString": "uint16"
                      }
                    },
                    "src": "4266:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 28466,
                  "initializationExpression": {
                    "assignments": [
                      28448
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 28448,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 28466,
                        "src": "4251:9:89",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 28447,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "4251:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 28450,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28449,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "4263:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "4251:13:89"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 28455,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "4277:3:89",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 28454,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28448,
                        "src": "4277:1:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 28456,
                    "nodeType": "ExpressionStatement",
                    "src": "4277:3:89"
                  },
                  "nodeType": "ForStatement",
                  "src": "4246:84:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28467,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28440,
                    "src": "4347:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 28401,
                  "id": 28468,
                  "nodeType": "Return",
                  "src": "4340:15:89"
                }
              ]
            },
            "documentation": {
              "id": 28389,
              "nodeType": "StructuredDocumentation",
              "src": "3251:354:89",
              "text": " @notice Computes a schedule segment of non-cyclic contract events based on the contract terms\n and the specified timestamps.\n @param terms terms of the contract\n @param segmentStart start timestamp of the segment\n @param segmentEnd end timestamp of the segement\n @return segment of the non-cyclic schedule"
            },
            "functionSelector": "f73ca804",
            "id": 28470,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNonCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28397,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3786:8:89"
            },
            "parameters": {
              "id": 28396,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28391,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3660:23:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28390,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "3660:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28393,
                  "mutability": "mutable",
                  "name": "segmentStart",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3693:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28392,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3693:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28395,
                  "mutability": "mutable",
                  "name": "segmentEnd",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3723:18:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28394,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3723:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3650:97:89"
            },
            "returnParameters": {
              "id": 28401,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28400,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28470,
                  "src": "3812:16:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 28398,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "3812:7:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 28399,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "3812:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3811:18:89"
            },
            "scope": 28675,
            "src": "3610:752:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              28988
            ],
            "body": {
              "id": 28499,
              "nodeType": "Block",
              "src": "5038:87:89",
              "statements": [
                {
                  "assignments": [
                    28490
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28490,
                      "mutability": "mutable",
                      "name": "schedule",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28499,
                      "src": "5048:25:89",
                      "stateVariable": false,
                      "storageLocation": "memory",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                        "typeString": "bytes32[]"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28488,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5048:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28489,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5048:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28496,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 28494,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5090:1:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 28493,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "NewExpression",
                      "src": "5076:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_bytes32_$dyn_memory_ptr_$",
                        "typeString": "function (uint256) pure returns (bytes32[] memory)"
                      },
                      "typeName": {
                        "baseType": {
                          "id": 28491,
                          "name": "bytes32",
                          "nodeType": "ElementaryTypeName",
                          "src": "5080:7:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "id": 28492,
                        "length": null,
                        "nodeType": "ArrayTypeName",
                        "src": "5080:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                          "typeString": "bytes32[]"
                        }
                      }
                    },
                    "id": 28495,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5076:16:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "5048:44:89"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 28497,
                    "name": "schedule",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 28490,
                    "src": "5110:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                      "typeString": "bytes32[] memory"
                    }
                  },
                  "functionReturnParameters": 28485,
                  "id": 28498,
                  "nodeType": "Return",
                  "src": "5103:15:89"
                }
              ]
            },
            "documentation": {
              "id": 28471,
              "nodeType": "StructuredDocumentation",
              "src": "4368:391:89",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n param terms terms of the contract\n param segmentStart start timestamp of the segment\n param segmentEnd end timestamp of the segement\n param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "183ced6e",
            "id": 28500,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeCyclicScheduleSegment",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28481,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4990:8:89"
            },
            "parameters": {
              "id": 28480,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28473,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4811:17:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28472,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "4811:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28475,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4850:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28474,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4850:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28477,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4886:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28476,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4886:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28479,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "4920:9:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28478,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "4920:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4801:150:89"
            },
            "returnParameters": {
              "id": 28485,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28484,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28500,
                  "src": "5016:16:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 28482,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "5016:7:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 28483,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "5016:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5015:18:89"
            },
            "scope": 28675,
            "src": "4764:361:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              29000
            ],
            "body": {
              "id": 28518,
              "nodeType": "Block",
              "src": "5706:34:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 28515,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5731:1:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 28514,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "nodeType": "ElementaryTypeNameExpression",
                      "src": "5723:7:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_type$_t_bytes32_$",
                        "typeString": "type(bytes32)"
                      },
                      "typeName": {
                        "id": 28513,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "5723:7:89",
                        "typeDescriptions": {
                          "typeIdentifier": null,
                          "typeString": null
                        }
                      }
                    },
                    "id": 28516,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "typeConversion",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5723:10:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 28512,
                  "id": 28517,
                  "nodeType": "Return",
                  "src": "5716:17:89"
                }
              ]
            },
            "documentation": {
              "id": 28501,
              "nodeType": "StructuredDocumentation",
              "src": "5131:342:89",
              "text": " @notice Computes a schedule segment of cyclic contract events based on the contract terms\n and the specified timestamps.\n param terms terms of the contract\n param lastScheduleTime last occurrence of cyclic event\n param eventType eventType of the cyclic schedule\n @return event schedule segment"
            },
            "functionSelector": "52d18375",
            "id": 28519,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "computeNextCyclicEvent",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28509,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5668:8:89"
            },
            "parameters": {
              "id": 28508,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28503,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5519:17:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28502,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "5519:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28505,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5558:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 28504,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5558:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28507,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5598:9:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_enum$_EventType_$22610",
                    "typeString": "enum EventType"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28506,
                    "name": "EventType",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22610,
                    "src": "5598:9:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5509:120:89"
            },
            "returnParameters": {
              "id": 28512,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28511,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28519,
                  "src": "5693:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28510,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "5693:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "5692:9:89"
            },
            "scope": 28675,
            "src": "5478:262:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "baseFunctions": [
              29016
            ],
            "body": {
              "id": 28538,
              "nodeType": "Block",
              "src": "6628:28:89",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "hexValue": "74727565",
                    "id": 28536,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "6645:4:89",
                    "subdenomination": null,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 28535,
                  "id": 28537,
                  "nodeType": "Return",
                  "src": "6638:11:89"
                }
              ]
            },
            "documentation": {
              "id": 28520,
              "nodeType": "StructuredDocumentation",
              "src": "5746:586:89",
              "text": " @notice Verifies that the provided event is still scheduled under the terms, the current state of the\n contract and the current state of the underlying.\n param _event event for which to check if its still scheduled\n param terms terms of the contract\n param state current state of the contract\n param hasUnderlying boolean indicating whether the contract has an underlying contract\n param underlyingState state of the underlying (empty state object if non-existing)\n @return boolean indicating whether event is still scheduled"
            },
            "functionSelector": "56972fbe",
            "id": 28539,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isEventScheduled",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 28532,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6592:8:89"
            },
            "parameters": {
              "id": 28531,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28522,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6372:7:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28521,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "6372:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28524,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6402:17:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_calldata_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28523,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "6402:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28526,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6441:14:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28525,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "6441:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28528,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6477:4:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28527,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6477:4:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28530,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6511:14:89",
                  "stateVariable": false,
                  "storageLocation": "calldata",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_calldata_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28529,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "6511:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6362:191:89"
            },
            "returnParameters": {
              "id": 28535,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28534,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28539,
                  "src": "6618:4:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 28533,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "6618:4:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6617:6:89"
            },
            "scope": 28675,
            "src": "6337:319:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "external"
          },
          {
            "body": {
              "id": 28613,
              "nodeType": "Block",
              "src": "7448:560:89",
              "statements": [
                {
                  "assignments": [
                    28554,
                    28556
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28554,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28613,
                      "src": "7459:19:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 28553,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "7459:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 28556,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28613,
                      "src": "7480:20:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28555,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "7480:7:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28560,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28558,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28546,
                        "src": "7516:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28557,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "7504:11:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 28559,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7504:19:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7458:65:89"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28564,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28561,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7538:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28562,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7551:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28563,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7551:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7538:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28572,
                  "nodeType": "IfStatement",
                  "src": "7534:90:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28566,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7583:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28567,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7590:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28568,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7597:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28569,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7611:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28565,
                        "name": "STF_CEC_XD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28874,
                        "src": "7572:10:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28570,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7572:52:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28571,
                    "nodeType": "Return",
                    "src": "7565:59:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28576,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28573,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7638:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28574,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7651:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28575,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7651:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7638:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28584,
                  "nodeType": "IfStatement",
                  "src": "7634:90:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28578,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7683:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28579,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7690:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28580,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7697:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28581,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7711:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28577,
                        "name": "STF_CEC_MD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28763,
                        "src": "7672:10:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28582,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7672:52:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28583,
                    "nodeType": "Return",
                    "src": "7665:59:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28588,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28585,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7738:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28586,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7751:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28587,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7751:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7738:26:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28596,
                  "nodeType": "IfStatement",
                  "src": "7734:92:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28590,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7785:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28591,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7792:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28592,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7799:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28593,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7813:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28589,
                        "name": "STF_CEC_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28915,
                        "src": "7773:11:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28594,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7773:53:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28595,
                    "nodeType": "Return",
                    "src": "7766:60:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28597,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28554,
                      "src": "7840:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28598,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "7853:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28599,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7853:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "7840:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28608,
                  "nodeType": "IfStatement",
                  "src": "7836:90:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28602,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28542,
                          "src": "7885:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28603,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28544,
                          "src": "7892:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28604,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28556,
                          "src": "7899:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28605,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28548,
                          "src": "7913:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28601,
                        "name": "STF_CEC_CE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28728,
                        "src": "7874:10:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_struct$_State_$22673_memory_ptr_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (struct State memory)"
                        }
                      },
                      "id": 28606,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "7874:52:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                        "typeString": "struct State memory"
                      }
                    },
                    "functionReturnParameters": 28552,
                    "id": 28607,
                    "nodeType": "Return",
                    "src": "7867:59:89"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434543456e67696e652e73746174655472616e736974696f6e46756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 28610,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7944:56:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_18c682338c6698c3f96b016c8f3f22618d14b84974a8f1b1e2191b8999f4efdc",
                          "typeString": "literal_string \"CECEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CECEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_18c682338c6698c3f96b016c8f3f22618d14b84974a8f1b1e2191b8999f4efdc",
                          "typeString": "literal_string \"CECEngine.stateTransitionFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 28609,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "7937:6:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 28611,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7937:64:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 28612,
                  "nodeType": "ExpressionStatement",
                  "src": "7937:64:89"
                }
              ]
            },
            "documentation": {
              "id": 28540,
              "nodeType": "StructuredDocumentation",
              "src": "6662:564:89",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Applies an event to the current state of the contract and returns the resulting state.\n The inheriting Engine contract has to map the events type to the designated STF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which to evaluate the next state for\n @param externalData external data needed for STF evaluation (e.g. rate for RR events)\n @return the resulting contract state"
            },
            "id": 28614,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "stateTransitionFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 28549,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28542,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7273:21:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28541,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "7273:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28544,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7304:18:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28543,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "7304:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28546,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7332:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28545,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7332:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28548,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7356:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28547,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "7356:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7263:119:89"
            },
            "returnParameters": {
              "id": 28552,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28551,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28614,
                  "src": "7430:12:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28550,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "7430:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7429:14:89"
            },
            "scope": 28675,
            "src": "7231:777:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 28673,
              "nodeType": "Block",
              "src": "8755:398:89",
              "statements": [
                {
                  "assignments": [
                    28629,
                    28631
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 28629,
                      "mutability": "mutable",
                      "name": "eventType",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28673,
                      "src": "8766:19:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 28628,
                        "name": "EventType",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 22610,
                        "src": "8766:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_enum$_EventType_$22610",
                          "typeString": "enum EventType"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    },
                    {
                      "constant": false,
                      "id": 28631,
                      "mutability": "mutable",
                      "name": "scheduleTime",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 28673,
                      "src": "8787:20:89",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 28630,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "8787:7:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 28635,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 28633,
                        "name": "_event",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28621,
                        "src": "8823:6:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "id": 28632,
                      "name": "decodeEvent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 24743,
                      "src": "8811:11:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_bytes32_$returns$_t_enum$_EventType_$22610_$_t_uint256_$",
                        "typeString": "function (bytes32) pure returns (enum EventType,uint256)"
                      }
                    },
                    "id": 28634,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8811:19:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$_t_enum$_EventType_$22610_$_t_uint256_$",
                      "typeString": "tuple(enum EventType,uint256)"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8765:65:89"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28639,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28636,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "8845:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28637,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "8858:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28638,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "CE",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8858:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "8845:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28642,
                  "nodeType": "IfStatement",
                  "src": "8841:39:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28640,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8879:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 28627,
                    "id": 28641,
                    "nodeType": "Return",
                    "src": "8872:8:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28643,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "8894:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28644,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "8907:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28645,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "XD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8907:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "8894:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28649,
                  "nodeType": "IfStatement",
                  "src": "8890:39:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28647,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "8928:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 28627,
                    "id": 28648,
                    "nodeType": "Return",
                    "src": "8921:8:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28653,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28650,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "8943:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28651,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "8956:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28652,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "STD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "8956:13:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "8943:26:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28661,
                  "nodeType": "IfStatement",
                  "src": "8939:92:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 28655,
                          "name": "terms",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28617,
                          "src": "8990:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28656,
                          "name": "state",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28619,
                          "src": "8997:5:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28657,
                          "name": "scheduleTime",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28631,
                          "src": "9004:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        {
                          "argumentTypes": null,
                          "id": 28658,
                          "name": "externalData",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 28623,
                          "src": "9018:12:89",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                            "typeString": "struct CECTerms memory"
                          },
                          {
                            "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                            "typeString": "struct State memory"
                          },
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        ],
                        "id": 28654,
                        "name": "POF_CEC_STD",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 28703,
                        "src": "8978:11:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_struct$_CECTerms_$22799_memory_ptr_$_t_struct$_State_$22673_memory_ptr_$_t_uint256_$_t_bytes32_$returns$_t_int256_$",
                          "typeString": "function (struct CECTerms memory,struct State memory,uint256,bytes32) pure returns (int256)"
                        }
                      },
                      "id": 28659,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "8978:53:89",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_int256",
                        "typeString": "int256"
                      }
                    },
                    "functionReturnParameters": 28627,
                    "id": 28660,
                    "nodeType": "Return",
                    "src": "8971:60:89"
                  }
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_enum$_EventType_$22610",
                      "typeString": "enum EventType"
                    },
                    "id": 28665,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 28662,
                      "name": "eventType",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 28629,
                      "src": "9045:9:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 28663,
                        "name": "EventType",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 22610,
                        "src": "9058:9:89",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_enum$_EventType_$22610_$",
                          "typeString": "type(enum EventType)"
                        }
                      },
                      "id": 28664,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "MD",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9058:12:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_enum$_EventType_$22610",
                        "typeString": "enum EventType"
                      }
                    },
                    "src": "9045:25:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 28668,
                  "nodeType": "IfStatement",
                  "src": "9041:39:89",
                  "trueBody": {
                    "expression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 28666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "9079:1:89",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "functionReturnParameters": 28627,
                    "id": 28667,
                    "nodeType": "Return",
                    "src": "9072:8:89"
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "hexValue": "434543456e67696e652e7061796f666646756e6374696f6e3a204154545249425554455f4e4f545f464f554e44",
                        "id": 28670,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9098:47:89",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c1d3a70ab702451fea9e0bb859ace15f26227e93b46fef5341b28df442210da1",
                          "typeString": "literal_string \"CECEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        },
                        "value": "CECEngine.payoffFunction: ATTRIBUTE_NOT_FOUND"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_stringliteral_c1d3a70ab702451fea9e0bb859ace15f26227e93b46fef5341b28df442210da1",
                          "typeString": "literal_string \"CECEngine.payoffFunction: ATTRIBUTE_NOT_FOUND\""
                        }
                      ],
                      "id": 28669,
                      "name": "revert",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -19,
                        -19
                      ],
                      "referencedDeclaration": -19,
                      "src": "9091:6:89",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_revert_pure$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (string memory) pure"
                      }
                    },
                    "id": 28671,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9091:55:89",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 28672,
                  "nodeType": "ExpressionStatement",
                  "src": "9091:55:89"
                }
              ]
            },
            "documentation": {
              "id": 28615,
              "nodeType": "StructuredDocumentation",
              "src": "8014:534:89",
              "text": " @notice Implements abstract method which is defined in BaseEngine.\n Computes the payoff for an event under the current state of the contract.\n The inheriting Engine contract has to map the events type to the designated POF.\n @param terms terms of the contract\n @param state current state of the contract\n @param _event event for which the payoff should be evaluated\n @param externalData external data needed for POF evaluation (e.g. fxRate)\n @return the payoff of the event"
            },
            "id": 28674,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "payoffFunction",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 28624,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28617,
                  "mutability": "mutable",
                  "name": "terms",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8586:21:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_CECTerms_$22799_memory_ptr",
                    "typeString": "struct CECTerms"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28616,
                    "name": "CECTerms",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22799,
                    "src": "8586:8:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_CECTerms_$22799_storage_ptr",
                      "typeString": "struct CECTerms"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28619,
                  "mutability": "mutable",
                  "name": "state",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8617:18:89",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_State_$22673_memory_ptr",
                    "typeString": "struct State"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 28618,
                    "name": "State",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 22673,
                    "src": "8617:5:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_State_$22673_storage_ptr",
                      "typeString": "struct State"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28621,
                  "mutability": "mutable",
                  "name": "_event",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8645:14:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28620,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8645:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 28623,
                  "mutability": "mutable",
                  "name": "externalData",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8669:20:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 28622,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "8669:7:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8576:119:89"
            },
            "returnParameters": {
              "id": 28627,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 28626,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 28674,
                  "src": "8743:6:89",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_int256",
                    "typeString": "int256"
                  },
                  "typeName": {
                    "id": 28625,
                    "name": "int256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8743:6:89",
                    "typeDescriptions": {
                      "typeIdentifier": "t_int256",
                      "typeString": "int256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "8742:8:89"
            },
            "scope": 28675,
            "src": "8553:600:89",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 28676,
        "src": "514:8641:89"
      }
    ],
    "src": "41:9115:89"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.11+commit.5ef660b1.Emscripten.clang"
  },
  "networks": {
    "4": {
      "events": {},
      "links": {},
      "address": "0x5a75677b7714769625addf6507333EC377bc01bd",
      "transactionHash": "0xd0d02a6d0e1a4ca1bdb36ff9e0831c4d56338c8f0ad44117b6f58257ade777d2"
    },
    "5": {
      "events": {},
      "links": {},
      "address": "0x09588b3283edfC135f3cE635bbda7ada3Df8c091",
      "transactionHash": "0x8e0c1f1bc613b1d7858d48661c79ec7be16615c8d10128bc0dda8551d54cce42"
    },
    "1994": {
      "events": {},
      "links": {},
      "address": "0x1725b9c802415a25202B3Da4A33E0631f44BBbf2",
      "transactionHash": "0x7f70fe81591889f87df972dca12949ad9b1ba9c69914206423a77752e384d0f5"
    }
  },
  "schemaVersion": "3.2.0",
  "updatedAt": "2020-08-12T09:47:18.359Z",
  "devdoc": {
    "details": "All numbers except unix timestamp are represented as multiple of 10 ** 18 inputs have to be multiplied by 10 ** 18, outputs have to multplied by 10 ** -18",
    "kind": "dev",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "details": "The following is considered to dertermine if schedule dates are shifted to the end of month: - The convention SD (same day) means not adjusting, EM (end of month) means adjusting - Dates are only shifted if the schedule start date is an end-of-month date - Dates are only shifted if the schedule cycle is based on an \"M\" period unit or multiple thereof",
        "params": {
          "cycle": "the cycle struct",
          "eomc": "the end of month convention to adjust",
          "startTime": "timestamp of the cycle start"
        },
        "returns": {
          "_0": "the adjusted end of month convention"
        }
      },
      "computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)": {
        "returns": {
          "_0": "event schedule segment"
        }
      },
      "computeEventTimeForEvent(bytes32,uint8,uint8,uint256)": {
        "details": "For optimization reasons not located in EventUtil by applying the BDC specified in the terms"
      },
      "computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))": {
        "params": {
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "initial state of the contract"
        }
      },
      "computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)": {
        "returns": {
          "_0": "event schedule segment"
        }
      },
      "computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)": {
        "params": {
          "segmentEnd": "end timestamp of the segement",
          "segmentStart": "start timestamp of the segment",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "segment of the non-cyclic schedule"
        }
      },
      "computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "params": {
          "_event": "event for which the payoff should be evaluated",
          "externalData": "external data needed for POF evaluation (e.g. fxRate)",
          "state": "current state of the contract",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "the payoff of the event"
        }
      },
      "computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "params": {
          "_event": "event to be applied to the contract state",
          "externalData": "external data needed for STF evaluation (e.g. rate for RR events)",
          "state": "current state of the contract",
          "terms": "terms of the contract"
        },
        "returns": {
          "_0": "the resulting contract state"
        }
      },
      "isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))": {
        "returns": {
          "_0": "boolean indicating whether event is still scheduled"
        }
      }
    },
    "title": "CECEngine",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "adjustEndOfMonthConvention(uint8,uint256,(uint256,uint8,uint8,bool))": {
        "notice": "This function makes an adjustment on the end of month convention."
      },
      "computeCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256,uint8)": {
        "notice": "Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps. param terms terms of the contract param segmentStart start timestamp of the segment param segmentEnd end timestamp of the segement param eventType eventType of the cyclic schedule"
      },
      "computeEventTimeForEvent(bytes32,uint8,uint8,uint256)": {
        "notice": "Returns the event time for a given schedule time"
      },
      "computeInitialState((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)))": {
        "notice": "Initialize contract state space based on the contract terms."
      },
      "computeNextCyclicEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint8)": {
        "notice": "Computes a schedule segment of cyclic contract events based on the contract terms and the specified timestamps. param terms terms of the contract param lastScheduleTime last occurrence of cyclic event param eventType eventType of the cyclic schedule"
      },
      "computeNonCyclicScheduleSegment((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),uint256,uint256)": {
        "notice": "Computes a schedule segment of non-cyclic contract events based on the contract terms and the specified timestamps."
      },
      "computePayoffForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "notice": "Evaluates the payoff for an event under the current state of the contract."
      },
      "computeStateForEvent((uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bytes32,bytes32)": {
        "notice": "Applys an event to the current state of a contract and returns the resulting contract state."
      },
      "getEpochOffset(uint8)": {
        "notice": "Returns the epoch offset for a given event type to determine the correct order of events if multiple events have the same timestamp"
      },
      "isEventScheduled(bytes32,(uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint8,uint256,uint256,int256,int256,int256,(bytes32,bytes32,uint8,uint8),(bytes32,bytes32,uint8,uint8)),(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256),bool,(uint8,uint256,uint256,uint256,uint256,uint256,uint256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256,int256))": {
        "notice": "Verifies that the provided event is still scheduled under the terms, the current state of the contract and the current state of the underlying. param _event event for which to check if its still scheduled param terms terms of the contract param state current state of the contract param hasUnderlying boolean indicating whether the contract has an underlying contract param underlyingState state of the underlying (empty state object if non-existing)"
      },
      "shiftCalcTime(uint256,uint8,uint8,uint256)": {
        "notice": "Used in POFs and STFs for DCFs. No shifting is applied if a Calc/Shift instead of Shift/Calc BDC is provided."
      }
    },
    "notice": "Inherits from BaseEngine by implementing STFs, POFs according to the ACTUS standard for a CEC contract",
    "version": 1
  }
}