{
  "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": [
        {
          "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"
    }
  ],
  "bytecode": "0x608060405234801561001057600080fd5b50612431806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063e05a66e011610071578063e05a66e014610269578063e726d6801461027c578063edc0465f14610239578063f5586e051461028f578063f73ca804146102a257610121565b8063aaf5eb681461021e578063c26b940b14610226578063c40c5a9814610239578063cb2ef6f714610241578063d4f8d3f31461025657610121565b806356972fbe116100f457806356972fbe146101a25780636f37e55b146101c257806372540003146101ca578063811322fb146101eb57806398c29ea4146101fe57610121565b8063179331f314610126578063183ced6e1461014f5780631a2e165d1461016f57806352d183751461018f575b600080fd5b6101396101343660046118c9565b6102b5565b6040516101469190611d5f565b60405180910390f35b61016261015d366004611a7c565b610385565b6040516101469190611cf3565b61018261017d366004611802565b61039d565b6040516101469190611d42565b61018261019d366004611a03565b6103c2565b6101b56101b0366004611848565b6103cb565b6040516101469190611d37565b6101826103d6565b6101dd6101d83660046117ea565b6103e2565b604051610146929190611d6d565b6101826101f936600461195a565b61040b565b61021161020c3660046119a0565b610421565b60405161014691906122aa565b61018261047d565b6101826102343660046119bc565b610482565b6101826104b5565b6102496104ba565b6040516101469190611d4b565b6102116102643660046119bc565b6104bf565b610182610277366004611975565b6104ef565b61018261028a366004611cd0565b61050f565b61018261029d366004611cd0565b610662565b6101626102b0366004611a46565b6106cd565b600060018460018111156102c557fe5b1415610341576102d4836107b0565b6102dd846107d2565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b8152600401610375906121b7565b60405180910390fd5b9392505050565b6040805160008152602081019091525b949350505050565b6000806103a9866103e2565b9150506103b88186868661050f565b9695505050505050565b60009392505050565b600195945050505050565b670de0b6b3a764000081565b6000808060f884901c601c8111156103f657fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561041957fe5b90505b919050565b61042961165e565b61043161165e565b6000815261010083013560208201526101208301356060808301919091526101408401359061046e90610469908601604087016118ae565b6107e1565b60000b0260e082015292915050565b601281565b60006104ac61049636879003870187611ac7565b6104a536879003870187611bd3565b85856108a5565b95945050505050565b607881565b601190565b6104c761165e565b6104ac6104d936879003870187611ac7565b6104e836879003870187611bd3565b8585610956565b60008160f884601c81111561050057fe5b60ff16901b1790505b92915050565b600081851415610520575083610395565b600184600881111561052e57fe5b14806105455750600384600881111561054357fe5b145b1561055b576105548584610a07565b9050610395565b600284600881111561056957fe5b14806105805750600484600881111561057e57fe5b145b156105c45760006105918685610a07565b905061059c86610a63565b6105a582610a63565b14156105b2579050610395565b6105bc8685610a7a565b915050610395565b60058460088111156105d257fe5b14806105e9575060078460088111156105e757fe5b145b156105f8576105548584610a7a565b600684600881111561060657fe5b148061061d5750600884600881111561061b57fe5b145b1561065957600061062e8685610a7a565b905061063986610a63565b61064282610a63565b141561064f579050610395565b6105bc8685610a07565b50929392505050565b6000600384600881111561067257fe5b14806106895750600484600881111561068757fe5b145b8061069f5750600784600881111561069d57fe5b145b806106b5575060088460088111156106b357fe5b145b156106c1575083610395565b6104ac8585858561050f565b60606106d76116f8565b60006106e98661012001358686610ac8565b15156001141561071c5761070360148761012001356104ef565b828261ffff166078811061071357fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561073957600080fd5b50604051908082528060200260200182016040528015610763578160200160208202803683370190505b50905060005b8261ffff168110156107a55783816078811061078157fe5b602002015182828151811061079257fe5b6020908102919091010152600101610769565b509695505050505050565b600080806107c362015180855b04610b01565b50915091506103958282610b97565b600061039562015180836107bd565b60008082600c8111156107f057fe5b14156107fe5750600161041c565b600182600c81111561080c57fe5b141561081b575060001961041c565b600682600c81111561082957fe5b14156108375750600161041c565b600782600c81111561084557fe5b1415610854575060001961041c565b600282600c81111561086257fe5b14156108705750600161041c565b600382600c81111561087e57fe5b141561088d575060001961041c565b60405162461bcd60e51b815260040161037590611f4d565b60008060006108b3856103e2565b9092509050600b82601c8111156108c657fe5b14156108d757600092505050610395565b601a82601c8111156108e557fe5b14156108f657600092505050610395565b601b82601c81111561090457fe5b141561091f5761091687878387610c1d565b92505050610395565b601482601c81111561092d57fe5b141561093e57600092505050610395565b60405162461bcd60e51b81526004016103759061216a565b61095e61165e565b60008061096a856103e2565b9092509050601a82601c81111561097d57fe5b141561098f5761091687878387610c32565b601482601c81111561099d57fe5b14156109af5761091687878387610d3e565b601b82601c8111156109bd57fe5b14156109cf5761091687878387610d6d565b600b82601c8111156109dd57fe5b14156109ef5761091687878387610d8c565b60405162461bcd60e51b815260040161037590611dd8565b60006001826001811115610a1757fe5b1415610a5c57610a2683610d9d565b60061415610a4057610a39836002610db0565b9050610509565b610a4983610d9d565b60071415610a5c57610a39836001610db0565b5090919050565b6000610a7262015180836107bd565b509392505050565b60006001826001811115610a8a57fe5b1415610a5c57610a9983610d9d565b60061415610aac57610a39836001610dc5565b610ab583610d9d565b60071415610a5c57610a39836002610dc5565b600081831115610ada5750600061037e565b838311158015610aea5750818411155b15610af75750600161037e565b5060009392505050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281610b5857fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480610ba85750816003145b80610bb35750816005145b80610bbe5750816007145b80610bc95750816008145b80610bd4575081600a145b80610bdf575081600c145b15610bec5750601f610509565b81600214610bfc5750601e610509565b610c0583610dda565b610c1057601c610c13565b601d5b60ff169392505050565b6101208301516101c084015101949350505050565b610c3a61165e565b6000610c85610c5c8660200151886080015189602001518a6101200151610662565b610c758689608001518a602001518b6101200151610662565b8860600151896101200151610dff565b60208601859052610180870151909150610ca5908463ffffffff610efc16565b6101c08601526080850184905260008660e001516001811115610cc457fe5b1415610cec57856101600151610cdd87604001516107e1565b60000b02610120860152610d34565b610d2d610d1b8660e00151610d0f89610160015185610efc90919063ffffffff16565b9063ffffffff610efc16565b6101208701519063ffffffff610f9a16565b6101208601525b5092949350505050565b610d4661165e565b600060e08501528360045b90816005811115610d5e57fe5b90525050506020820152919050565b610d7561165e565b600060e08501819052610120850152836004610d51565b610d9461165e565b50919392505050565b6007620151809091046003010660010190565b62015180810282018281101561050957600080fd5b62015180810282038281111561050957600080fd5b600060048206158015610def57506064820615155b8061041957505061019090061590565b600084841015610e215760405162461bcd60e51b815260040161037590612096565b6000836005811115610e2f57fe5b1415610e3f576105548585610fe0565b6001836005811115610e4d57fe5b1415610e5d576105548585611100565b6002836005811115610e6b57fe5b1415610e7b57610554858561112b565b6004836005811115610e8957fe5b1415610e9957610554858561114a565b6003836005811115610ea757fe5b1415610eb85761055485858461120b565b6005836005811115610ec657fe5b1415610ee45760405162461bcd60e51b815260040161037590611fe8565b60405162461bcd60e51b815260040161037590611e2e565b6000821580610f09575081155b15610f1657506000610509565b82600019148015610f2a5750600160ff1b82145b15610f475760405162461bcd60e51b815260040161037590611fa1565b82820282848281610f5457fe5b0514610f725760405162461bcd60e51b815260040161037590611fa1565b670de0b6b3a76400008105806103955760405162461bcd60e51b815260040161037590611eba565b6000828201818312801590610faf5750838112155b80610fc45750600083128015610fc457508381125b61037e5760405162461bcd60e51b815260040161037590611f0c565b600080610fec846112e1565b90506000610ff9846112e1565b90506000611006866112f9565b6110125761016d611016565b61016e5b61ffff169050818314156110485761103e816110328888611316565b9063ffffffff61133116565b9350505050610509565b6000611053866112f9565b61105f5761016d611063565b61016e5b61ffff1690506000611094836110328a61108f6110878a600163ffffffff6113ed16565b600180611412565b611316565b905060006110b1836110326110ab88600180611412565b8b611316565b90506110f36110d760016110cb888a63ffffffff61142c16565b9063ffffffff61142c16565b6110e7848463ffffffff610f9a16565b9063ffffffff610f9a16565b9998505050505050505050565b600061037e6101686110326201518061111f868863ffffffff61142c16565b9063ffffffff61146e16565b600061037e61016d6110326201518061111f868863ffffffff61142c16565b600080600080600080600061115e896114b0565b97509550935061116d886114b0565b945092509050601f86141561118157601e95505b82601f141561118f57601e92505b60006111a1848863ffffffff6114ce16565b905060006111b5848863ffffffff6114ce16565b905060006111c9848863ffffffff6114ce16565b90506111fb610168611032856110e76111e987601e63ffffffff61151416565b6110e78761016863ffffffff61151416565b9c9b505050505050505050505050565b600080600080600080600061121f8a6114b0565b97509550935061122e896114b0565b94509250905061123d8a6107b0565b86141561124957601e95505b87891480156112585750816002145b15801561126c5750611269896107b0565b83145b1561127657601e92505b6000611288848863ffffffff6114ce16565b9050600061129c848863ffffffff6114ce16565b905060006112b0848863ffffffff6114ce16565b90506112d0610168611032856110e76111e987601e63ffffffff61151416565b9d9c50505050505050505050505050565b60006112f062015180836107bd565b50909392505050565b60008061130962015180846107bd565b5050905061037e81610dda565b60008183111561132557600080fd5b50620151809190030490565b6000816113505760405162461bcd60e51b815260040161037590612266565b8261135d57506000610509565b670de0b6b3a76400008381029084828161137357fe5b05146113915760405162461bcd60e51b815260040161037590612124565b826000191480156113a55750600160ff1b84145b156113c25760405162461bcd60e51b815260040161037590612124565b60008382816113cd57fe5b059050806103955760405162461bcd60e51b815260040161037590612045565b60008282018381101561037e5760405162461bcd60e51b815260040161037590611e83565b60006201518061142385858561157f565b02949350505050565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115fb565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611627565b600080806114c162015180856107bd565b9196909550909350915050565b60008183038183128015906114e35750838113155b806114f857506000831280156114f857508381135b61037e5760405162461bcd60e51b815260040161037590612222565b60008261152357506000610509565b826000191480156115375750600160ff1b82145b156115545760405162461bcd60e51b8152600401610375906120dd565b8282028284828161156157fe5b051461037e5760405162461bcd60e51b8152600401610375906120dd565b60006107b284101561159057600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f02816115cc57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000818484111561161f5760405162461bcd60e51b81526004016103759190611d85565b505050900390565b600081836116485760405162461bcd60e51b81526004016103759190611d85565b50600083858161165457fe5b0495945050505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610f0001604052806078906020820280368337509192915050565b80356009811061050957600080fd5b8035610509816123c7565b8035610509816123d4565b8035600d811061050957600080fd5b80356013811061050957600080fd5b8035601d811061050957600080fd5b60006102a0828403121561177b578081fd5b50919050565b600060808284031215611792578081fd5b61179c608061238f565b9050813581526020820135602082015260408201356117ba816123e1565b604082015260608201356117cd816123e1565b606082015292915050565b6000610280828403121561177b578081fd5b6000602082840312156117fb578081fd5b5035919050565b60008060008060808587031215611817578283fd5b843593506118288660208701611717565b92506040850135611838816123c7565b9396929550929360600135925050565b60008060008060006107e08688031215611860578283fd5b853594506118718760208801611769565b9350611881876102c088016117d8565b9250610540860135611892816123b6565b91506118a28761056088016117d8565b90509295509295909350565b6000602082840312156118bf578081fd5b61037e838361173c565b600080600083850360c08112156118de578182fd5b84356118e9816123c7565b9350602085013592506080603f1982011215611903578182fd5b5061190e608061238f565b604085013581526060850135611923816123d4565b60208201526080850135611936816123c7565b604082015260a0850135611949816123b6565b606082015292959194509192509050565b60006020828403121561196b578081fd5b61037e838361175a565b60008060408385031215611987578182fd5b8235611992816123ee565b946020939093013593505050565b60006102a082840312156119b2578081fd5b61037e8383611769565b60008060008061056085870312156119d2578182fd5b6119dc8686611769565b93506119ec866102a087016117d8565b939693955050505061052082013591610540013590565b60008060006102e08486031215611a18578081fd5b611a228585611769565b92506102a084013591506102c0840135611a3b816123ee565b809150509250925092565b60008060006102e08486031215611a5b578081fd5b611a658585611769565b956102a085013595506102c0909401359392505050565b6000806000806103008587031215611a92578182fd5b611a9c8686611769565b93506102a085013592506102c08501359150611abc866102e0870161175a565b905092959194509250565b60006102a08284031215611ad9578081fd5b611ae46101e061238f565b611aee848461174b565b8152611afd8460208501611726565b6020820152611b0f846040850161173c565b6040820152611b218460608501611731565b6060820152611b338460808501611717565b6080820152611b458460a08501611726565b60a0820152611b578460c08501611731565b60c0820152611b698460e08501611726565b60e0820152610100838101359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a0611bb485828601611781565b90820152611bc6846102208501611781565b6101c08201529392505050565b6000610280808385031215611be6578182fd5b611bef8161238f565b611bf98585611731565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215611817578182fd5b60068110611cef57fe5b9052565b6020808252825182820181905260009190848201906040850190845b81811015611d2b57835183529284019291840191600101611d0f565b50909695505050505050565b901515815260200190565b90815260200190565b6020810160138310611d5957fe5b91905290565b6020810160028310611d5957fe5b60408101601d8410611d7b57fe5b9281526020015290565b6000602080835283518082850152825b81811015611db157858101830151858201604001528201611d95565b81811115611dc25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526036908201527f434543456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b6020808252602d908201527f434543456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b6000610280820190506122be828451611ce5565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff811182821017156123ae57600080fd5b604052919050565b80151581146123c457600080fd5b50565b600281106123c457600080fd5b600681106123c457600080fd5b600581106123c457600080fd5b601d81106123c457600080fdfea2646970667358221220b69598ff05b9170120ece0ac9f49f3cf2850280f4d40c8464f5fda2942b82e8364736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c8063aaf5eb68116100ad578063e05a66e011610071578063e05a66e014610269578063e726d6801461027c578063edc0465f14610239578063f5586e051461028f578063f73ca804146102a257610121565b8063aaf5eb681461021e578063c26b940b14610226578063c40c5a9814610239578063cb2ef6f714610241578063d4f8d3f31461025657610121565b806356972fbe116100f457806356972fbe146101a25780636f37e55b146101c257806372540003146101ca578063811322fb146101eb57806398c29ea4146101fe57610121565b8063179331f314610126578063183ced6e1461014f5780631a2e165d1461016f57806352d183751461018f575b600080fd5b6101396101343660046118c9565b6102b5565b6040516101469190611d5f565b60405180910390f35b61016261015d366004611a7c565b610385565b6040516101469190611cf3565b61018261017d366004611802565b61039d565b6040516101469190611d42565b61018261019d366004611a03565b6103c2565b6101b56101b0366004611848565b6103cb565b6040516101469190611d37565b6101826103d6565b6101dd6101d83660046117ea565b6103e2565b604051610146929190611d6d565b6101826101f936600461195a565b61040b565b61021161020c3660046119a0565b610421565b60405161014691906122aa565b61018261047d565b6101826102343660046119bc565b610482565b6101826104b5565b6102496104ba565b6040516101469190611d4b565b6102116102643660046119bc565b6104bf565b610182610277366004611975565b6104ef565b61018261028a366004611cd0565b61050f565b61018261029d366004611cd0565b610662565b6101626102b0366004611a46565b6106cd565b600060018460018111156102c557fe5b1415610341576102d4836107b0565b6102dd846107d2565b14801561032c57506002826020015160058111156102f757fe5b1480610312575060038260200151600581111561031057fe5b145b8061032c575060048260200151600581111561032a57fe5b145b156103395750600161037e565b50600061037e565b600084600181111561034f57fe5b141561035d5750600061037e565b60405162461bcd60e51b8152600401610375906121b7565b60405180910390fd5b9392505050565b6040805160008152602081019091525b949350505050565b6000806103a9866103e2565b9150506103b88186868661050f565b9695505050505050565b60009392505050565b600195945050505050565b670de0b6b3a764000081565b6000808060f884901c601c8111156103f657fe5b92505067ffffffffffffffff83169050915091565b600081601c81111561041957fe5b90505b919050565b61042961165e565b61043161165e565b6000815261010083013560208201526101208301356060808301919091526101408401359061046e90610469908601604087016118ae565b6107e1565b60000b0260e082015292915050565b601281565b60006104ac61049636879003870187611ac7565b6104a536879003870187611bd3565b85856108a5565b95945050505050565b607881565b601190565b6104c761165e565b6104ac6104d936879003870187611ac7565b6104e836879003870187611bd3565b8585610956565b60008160f884601c81111561050057fe5b60ff16901b1790505b92915050565b600081851415610520575083610395565b600184600881111561052e57fe5b14806105455750600384600881111561054357fe5b145b1561055b576105548584610a07565b9050610395565b600284600881111561056957fe5b14806105805750600484600881111561057e57fe5b145b156105c45760006105918685610a07565b905061059c86610a63565b6105a582610a63565b14156105b2579050610395565b6105bc8685610a7a565b915050610395565b60058460088111156105d257fe5b14806105e9575060078460088111156105e757fe5b145b156105f8576105548584610a7a565b600684600881111561060657fe5b148061061d5750600884600881111561061b57fe5b145b1561065957600061062e8685610a7a565b905061063986610a63565b61064282610a63565b141561064f579050610395565b6105bc8685610a07565b50929392505050565b6000600384600881111561067257fe5b14806106895750600484600881111561068757fe5b145b8061069f5750600784600881111561069d57fe5b145b806106b5575060088460088111156106b357fe5b145b156106c1575083610395565b6104ac8585858561050f565b60606106d76116f8565b60006106e98661012001358686610ac8565b15156001141561071c5761070360148761012001356104ef565b828261ffff166078811061071357fe5b60200201526001015b60608161ffff1667ffffffffffffffff8111801561073957600080fd5b50604051908082528060200260200182016040528015610763578160200160208202803683370190505b50905060005b8261ffff168110156107a55783816078811061078157fe5b602002015182828151811061079257fe5b6020908102919091010152600101610769565b509695505050505050565b600080806107c362015180855b04610b01565b50915091506103958282610b97565b600061039562015180836107bd565b60008082600c8111156107f057fe5b14156107fe5750600161041c565b600182600c81111561080c57fe5b141561081b575060001961041c565b600682600c81111561082957fe5b14156108375750600161041c565b600782600c81111561084557fe5b1415610854575060001961041c565b600282600c81111561086257fe5b14156108705750600161041c565b600382600c81111561087e57fe5b141561088d575060001961041c565b60405162461bcd60e51b815260040161037590611f4d565b60008060006108b3856103e2565b9092509050600b82601c8111156108c657fe5b14156108d757600092505050610395565b601a82601c8111156108e557fe5b14156108f657600092505050610395565b601b82601c81111561090457fe5b141561091f5761091687878387610c1d565b92505050610395565b601482601c81111561092d57fe5b141561093e57600092505050610395565b60405162461bcd60e51b81526004016103759061216a565b61095e61165e565b60008061096a856103e2565b9092509050601a82601c81111561097d57fe5b141561098f5761091687878387610c32565b601482601c81111561099d57fe5b14156109af5761091687878387610d3e565b601b82601c8111156109bd57fe5b14156109cf5761091687878387610d6d565b600b82601c8111156109dd57fe5b14156109ef5761091687878387610d8c565b60405162461bcd60e51b815260040161037590611dd8565b60006001826001811115610a1757fe5b1415610a5c57610a2683610d9d565b60061415610a4057610a39836002610db0565b9050610509565b610a4983610d9d565b60071415610a5c57610a39836001610db0565b5090919050565b6000610a7262015180836107bd565b509392505050565b60006001826001811115610a8a57fe5b1415610a5c57610a9983610d9d565b60061415610aac57610a39836001610dc5565b610ab583610d9d565b60071415610a5c57610a39836002610dc5565b600081831115610ada5750600061037e565b838311158015610aea5750818411155b15610af75750600161037e565b5060009392505050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f8460500281610b5857fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b60008160011480610ba85750816003145b80610bb35750816005145b80610bbe5750816007145b80610bc95750816008145b80610bd4575081600a145b80610bdf575081600c145b15610bec5750601f610509565b81600214610bfc5750601e610509565b610c0583610dda565b610c1057601c610c13565b601d5b60ff169392505050565b6101208301516101c084015101949350505050565b610c3a61165e565b6000610c85610c5c8660200151886080015189602001518a6101200151610662565b610c758689608001518a602001518b6101200151610662565b8860600151896101200151610dff565b60208601859052610180870151909150610ca5908463ffffffff610efc16565b6101c08601526080850184905260008660e001516001811115610cc457fe5b1415610cec57856101600151610cdd87604001516107e1565b60000b02610120860152610d34565b610d2d610d1b8660e00151610d0f89610160015185610efc90919063ffffffff16565b9063ffffffff610efc16565b6101208701519063ffffffff610f9a16565b6101208601525b5092949350505050565b610d4661165e565b600060e08501528360045b90816005811115610d5e57fe5b90525050506020820152919050565b610d7561165e565b600060e08501819052610120850152836004610d51565b610d9461165e565b50919392505050565b6007620151809091046003010660010190565b62015180810282018281101561050957600080fd5b62015180810282038281111561050957600080fd5b600060048206158015610def57506064820615155b8061041957505061019090061590565b600084841015610e215760405162461bcd60e51b815260040161037590612096565b6000836005811115610e2f57fe5b1415610e3f576105548585610fe0565b6001836005811115610e4d57fe5b1415610e5d576105548585611100565b6002836005811115610e6b57fe5b1415610e7b57610554858561112b565b6004836005811115610e8957fe5b1415610e9957610554858561114a565b6003836005811115610ea757fe5b1415610eb85761055485858461120b565b6005836005811115610ec657fe5b1415610ee45760405162461bcd60e51b815260040161037590611fe8565b60405162461bcd60e51b815260040161037590611e2e565b6000821580610f09575081155b15610f1657506000610509565b82600019148015610f2a5750600160ff1b82145b15610f475760405162461bcd60e51b815260040161037590611fa1565b82820282848281610f5457fe5b0514610f725760405162461bcd60e51b815260040161037590611fa1565b670de0b6b3a76400008105806103955760405162461bcd60e51b815260040161037590611eba565b6000828201818312801590610faf5750838112155b80610fc45750600083128015610fc457508381125b61037e5760405162461bcd60e51b815260040161037590611f0c565b600080610fec846112e1565b90506000610ff9846112e1565b90506000611006866112f9565b6110125761016d611016565b61016e5b61ffff169050818314156110485761103e816110328888611316565b9063ffffffff61133116565b9350505050610509565b6000611053866112f9565b61105f5761016d611063565b61016e5b61ffff1690506000611094836110328a61108f6110878a600163ffffffff6113ed16565b600180611412565b611316565b905060006110b1836110326110ab88600180611412565b8b611316565b90506110f36110d760016110cb888a63ffffffff61142c16565b9063ffffffff61142c16565b6110e7848463ffffffff610f9a16565b9063ffffffff610f9a16565b9998505050505050505050565b600061037e6101686110326201518061111f868863ffffffff61142c16565b9063ffffffff61146e16565b600061037e61016d6110326201518061111f868863ffffffff61142c16565b600080600080600080600061115e896114b0565b97509550935061116d886114b0565b945092509050601f86141561118157601e95505b82601f141561118f57601e92505b60006111a1848863ffffffff6114ce16565b905060006111b5848863ffffffff6114ce16565b905060006111c9848863ffffffff6114ce16565b90506111fb610168611032856110e76111e987601e63ffffffff61151416565b6110e78761016863ffffffff61151416565b9c9b505050505050505050505050565b600080600080600080600061121f8a6114b0565b97509550935061122e896114b0565b94509250905061123d8a6107b0565b86141561124957601e95505b87891480156112585750816002145b15801561126c5750611269896107b0565b83145b1561127657601e92505b6000611288848863ffffffff6114ce16565b9050600061129c848863ffffffff6114ce16565b905060006112b0848863ffffffff6114ce16565b90506112d0610168611032856110e76111e987601e63ffffffff61151416565b9d9c50505050505050505050505050565b60006112f062015180836107bd565b50909392505050565b60008061130962015180846107bd565b5050905061037e81610dda565b60008183111561132557600080fd5b50620151809190030490565b6000816113505760405162461bcd60e51b815260040161037590612266565b8261135d57506000610509565b670de0b6b3a76400008381029084828161137357fe5b05146113915760405162461bcd60e51b815260040161037590612124565b826000191480156113a55750600160ff1b84145b156113c25760405162461bcd60e51b815260040161037590612124565b60008382816113cd57fe5b059050806103955760405162461bcd60e51b815260040161037590612045565b60008282018381101561037e5760405162461bcd60e51b815260040161037590611e83565b60006201518061142385858561157f565b02949350505050565b600061037e83836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506115fb565b600061037e83836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250611627565b600080806114c162015180856107bd565b9196909550909350915050565b60008183038183128015906114e35750838113155b806114f857506000831280156114f857508381135b61037e5760405162461bcd60e51b815260040161037590612222565b60008261152357506000610509565b826000191480156115375750600160ff1b82145b156115545760405162461bcd60e51b8152600401610375906120dd565b8282028284828161156157fe5b051461037e5760405162461bcd60e51b8152600401610375906120dd565b60006107b284101561159057600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f02816115cc57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000818484111561161f5760405162461bcd60e51b81526004016103759190611d85565b505050900390565b600081836116485760405162461bcd60e51b81526004016103759190611d85565b50600083858161165457fe5b0495945050505050565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60405180610f0001604052806078906020820280368337509192915050565b80356009811061050957600080fd5b8035610509816123c7565b8035610509816123d4565b8035600d811061050957600080fd5b80356013811061050957600080fd5b8035601d811061050957600080fd5b60006102a0828403121561177b578081fd5b50919050565b600060808284031215611792578081fd5b61179c608061238f565b9050813581526020820135602082015260408201356117ba816123e1565b604082015260608201356117cd816123e1565b606082015292915050565b6000610280828403121561177b578081fd5b6000602082840312156117fb578081fd5b5035919050565b60008060008060808587031215611817578283fd5b843593506118288660208701611717565b92506040850135611838816123c7565b9396929550929360600135925050565b60008060008060006107e08688031215611860578283fd5b853594506118718760208801611769565b9350611881876102c088016117d8565b9250610540860135611892816123b6565b91506118a28761056088016117d8565b90509295509295909350565b6000602082840312156118bf578081fd5b61037e838361173c565b600080600083850360c08112156118de578182fd5b84356118e9816123c7565b9350602085013592506080603f1982011215611903578182fd5b5061190e608061238f565b604085013581526060850135611923816123d4565b60208201526080850135611936816123c7565b604082015260a0850135611949816123b6565b606082015292959194509192509050565b60006020828403121561196b578081fd5b61037e838361175a565b60008060408385031215611987578182fd5b8235611992816123ee565b946020939093013593505050565b60006102a082840312156119b2578081fd5b61037e8383611769565b60008060008061056085870312156119d2578182fd5b6119dc8686611769565b93506119ec866102a087016117d8565b939693955050505061052082013591610540013590565b60008060006102e08486031215611a18578081fd5b611a228585611769565b92506102a084013591506102c0840135611a3b816123ee565b809150509250925092565b60008060006102e08486031215611a5b578081fd5b611a658585611769565b956102a085013595506102c0909401359392505050565b6000806000806103008587031215611a92578182fd5b611a9c8686611769565b93506102a085013592506102c08501359150611abc866102e0870161175a565b905092959194509250565b60006102a08284031215611ad9578081fd5b611ae46101e061238f565b611aee848461174b565b8152611afd8460208501611726565b6020820152611b0f846040850161173c565b6040820152611b218460608501611731565b6060820152611b338460808501611717565b6080820152611b458460a08501611726565b60a0820152611b578460c08501611731565b60c0820152611b698460e08501611726565b60e0820152610100838101359082015261012080840135908201526101408084013590820152610160808401359082015261018080840135908201526101a0611bb485828601611781565b90820152611bc6846102208501611781565b6101c08201529392505050565b6000610280808385031215611be6578182fd5b611bef8161238f565b611bf98585611731565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b60008060008060808587031215611817578182fd5b60068110611cef57fe5b9052565b6020808252825182820181905260009190848201906040850190845b81811015611d2b57835183529284019291840191600101611d0f565b50909695505050505050565b901515815260200190565b90815260200190565b6020810160138310611d5957fe5b91905290565b6020810160028310611d5957fe5b60408101601d8410611d7b57fe5b9281526020015290565b6000602080835283518082850152825b81811015611db157858101830151858201604001528201611d95565b81811115611dc25783604083870101525b50601f01601f1916929092016040019392505050565b60208082526036908201527f434543456e67696e652e73746174655472616e736974696f6e46756e6374696f6040820152751b8e8810551514925095551157d393d517d193d5539160521b606082015260800190565b60208082526035908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a6040820152741020aa2a2924a12aaa22afa727aa2fa327aaa7221760591b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526032908201527f5369676e65644d6174682e666c6f61744d756c743a2043414e4e4f545f524550604082015271524553454e545f4752414e554c415249545960701b606082015260800190565b60208082526021908201527f5369676e6564536166654d6174683a206164646974696f6e206f766572666c6f6040820152607760f81b606082015260800190565b60208082526034908201527f436f6e7472616374526f6c65436f6e76656e74696f6e2e726f6c655369676e3a6040820152730810551514925095551157d393d517d193d5539160621b606082015260800190565b60208082526027908201527f5369676e65644d6174682e666c6f61744d756c743a204f564552464c4f575f4460408201526611551150d5115160ca1b606082015260800190565b60208082526039908201527f446179436f756e74436f6e76656e74696f6e2e796561724672616374696f6e3a60408201527f204154545249425554455f4e4f545f535550504f525445442e00000000000000606082015260800190565b60208082526031908201527f5369676e65644d6174682e666c6f61744469763a2043414e4e4f545f524550526040820152704553454e545f4752414e554c415249545960781b606082015260800190565b60208082526027908201527f436f72652e796561724672616374696f6e3a2053544152545f4e4f545f42454660408201526613d49157d1539160ca1b606082015260800190565b60208082526027908201527f5369676e6564536166654d6174683a206d756c7469706c69636174696f6e206f604082015266766572666c6f7760c81b606082015260800190565b60208082526026908201527f5369676e65644d6174682e666c6f61744469763a204f564552464c4f575f4445604082015265151150d5115160d21b606082015260800190565b6020808252602d908201527f434543456e67696e652e7061796f666646756e6374696f6e3a2041545452494260408201526c15551157d393d517d193d55391609a1b606082015260800190565b60208082526045908201527f456e644f664d6f6e7468436f6e76656e74696f6e2e61646a757374456e644f6660408201527f4d6f6e7468436f6e76656e74696f6e3a204154545249425554455f4e4f545f4660608201526427aaa7221760d91b608082015260a00190565b60208082526024908201527f5369676e6564536166654d6174683a207375627472616374696f6e206f766572604082015263666c6f7760e01b606082015260800190565b60208082526024908201527f5369676e65644d6174682e666c6f61744469763a20444956494445445f42595f6040820152635a45524f60e01b606082015260800190565b6000610280820190506122be828451611ce5565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60405181810167ffffffffffffffff811182821017156123ae57600080fd5b604052919050565b80151581146123c457600080fd5b50565b600281106123c457600080fd5b600681106123c457600080fd5b600581106123c457600080fd5b601d81106123c457600080fdfea2646970667358221220b69598ff05b9170120ece0ac9f49f3cf2850280f4d40c8464f5fda2942b82e8364736f6c634300060b0033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
