{
  "contractName": "CERTFRegistry",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "GrantedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "RegisteredAsset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "RevokedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevActor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newActor",
          "type": "address"
        }
      ],
      "name": "UpdatedActor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevBeneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newBeneficiary",
          "type": "address"
        }
      ],
      "name": "UpdatedBeneficiary",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevEngine",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newEngine",
          "type": "address"
        }
      ],
      "name": "UpdatedEngine",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedFinalizedState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevObligor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newObligor",
          "type": "address"
        }
      ],
      "name": "UpdatedObligor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "UpdatedTerms",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        }
      ],
      "name": "approveActor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "approvedActors",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getActor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getAddressValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getBytes32ValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getContractReferenceValueForTermsAttribute",
      "outputs": [
        {
          "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": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getCycleValueForTermsAttribute",
      "outputs": [
        {
          "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": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getEngine",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getEnumValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getEnumValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "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": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getEventAtIndex",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getFinalizedState",
      "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": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getIntValueForStateAttribute",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getIntValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextScheduleIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextScheduledEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextUnderlyingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getOwnership",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getPendingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getPeriodValueForTermsAttribute",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IP",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getSchedule",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getScheduleLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getState",
      "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": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getTerms",
      "outputs": [
        {
          "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 CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "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": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "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": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "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": "cycleOfCoupon",
              "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_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 CERTFTerms",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getUIntValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getUintValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRootAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "isEventSettled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "int256",
          "name": "_payoff",
          "type": "int256"
        }
      ],
      "name": "markEventAsSettled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "popNextScheduledEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "popPendingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pendingEvent",
          "type": "bytes32"
        }
      ],
      "name": "pushPendingEvent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "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 CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "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": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "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": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "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": "cycleOfCoupon",
              "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_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 CERTFTerms",
          "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": "schedule",
          "type": "bytes32[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "ownership",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "registerAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        }
      ],
      "name": "setActor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCounterpartyBeneficiary",
          "type": "address"
        }
      ],
      "name": "setCounterpartyBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCounterpartyObligor",
          "type": "address"
        }
      ],
      "name": "setCounterpartyObligor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCreatorBeneficiary",
          "type": "address"
        }
      ],
      "name": "setCreatorBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCreatorObligor",
          "type": "address"
        }
      ],
      "name": "setCreatorObligor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        }
      ],
      "name": "setEngine",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "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"
        }
      ],
      "name": "setFinalizedState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "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"
        }
      ],
      "name": "setState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "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 CouponType",
              "name": "couponType",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "initialExchangeDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "issueDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfRedemption",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfTermination",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfCoupon",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "nominalPrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "issuePrice",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "denominationRatio",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponRate",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "settlementPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "fixingPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "exercisePeriod",
              "type": "tuple"
            },
            {
              "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": "cycleOfRedemption",
              "type": "tuple"
            },
            {
              "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": "cycleOfTermination",
              "type": "tuple"
            },
            {
              "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": "cycleOfCoupon",
              "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_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 CERTFTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "setTerms",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506000620000276001600160e01b036200007716565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200007b565b3390565b6154b8806200008b6000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c80638da5cb5b1161019d578063d51dc3dc116100e9578063e8f7ca3e116100a2578063ee43eda11161007c578063ee43eda11461072e578063f2fde38b14610741578063f52f84e114610754578063f7f729ad146107675761030c565b8063e8f7ca3e146106f5578063eb01255914610708578063ecef55771461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063e05a66e0146106af578063e50e0ef7146106c2578063e7dc3188146106e25761030c565b8063b828204111610156578063bd1f0a6c11610130578063bd1f0a6c1461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063b8282041146105c9578063ba4d2d28146105dc578063bc6a7d76146105fd5761030c565b80638da5cb5b14610548578063a17b75b51461055d578063b02ca0c014610570578063b0b4888f14610583578063b3c45ebe146105a3578063b461dd4f146105b65761030c565b8063512872f41161025c5780636fe55baa1161021557806375e86ae4116101ef57806375e86ae4146104fc5780637d870dd41461050f578063811322fb146105225780638c81ed92146105355761030c565b80636fe55baa146104b3578063715018a6146104d357806372540003146104db5761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d57806367fe5d70146104805780636a899b9b1461046d5780636be39bda146104935761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613f1a565b61077a565b005b610339610334366004613eea565b61084f565b6040516103469190615270565b60405180910390f35b61036261035d366004613eea565b610876565b60405161034691906149a5565b61032461037d366004613f1a565b6108ed565b610362610390366004613f49565b610992565b6103246103a3366004613f95565b610a31565b6103bb6103b6366004613f95565b610ae7565b604051610346919061498a565b6103bb6103d6366004613eea565b610b64565b6103626103e9366004613eea565b610b79565b6103246103fc366004613f1a565b610b8e565b61033961040f366004613eea565b610c69565b610324610422366004613f95565b610c88565b61043a610435366004613eea565b610d2d565b6040516103469190614946565b610324610455366004613f1a565b610d47565b610324610468366004613f1a565b610e0e565b61036261047b366004613f49565b610ee9565b61032461048e3660046140f6565b610f07565b6104a66104a1366004613eea565b610fcd565b6040516103469190615209565b6104c66104c1366004613f49565b61106b565b6040516103469190615262565b61032461110a565b6104ee6104e9366004613eea565b611189565b604051610346929190614a6a565b61036261050a366004613eea565b6111b2565b61032461051d3660046140f6565b611586565b61036261053036600461411a565b61163f565b61032461054336600461400f565b61164d565b61055061175c565b6040516103469190614918565b61036261056b366004613eea565b61176b565b61036261057e366004613f49565b611780565b610596610591366004613f49565b6117a1565b6040516103469190615254565b6105506105b1366004613eea565b611840565b6103626105c4366004613f49565b61185f565b6103626105d7366004613eea565b6118a5565b6105ef6105ea366004613f49565b611978565b604051610346929190614995565b61061061060b366004613f49565b6119a2565b6040516103469190615246565b61032461062b366004613f1a565b611a41565b61036261063e366004613eea565b611ad9565b6103bb610651366004613e96565b611cd6565b610669610664366004613f49565b611ceb565b6040516103469190615355565b610362610684366004613f49565b611d09565b610324610697366004613f49565b611d4f565b6103246106aa366004613f6a565b611dbe565b6103626106bd366004614139565b611e5a565b6106d56106d0366004613eea565b611e78565b6040516103469190614f6c565b6103246106f0366004613e96565b611ed6565b6103bb610703366004613f1a565b611f2f565b610550610716366004613f49565b611f65565b610669610729366004613f49565b611ffb565b61055061073c366004613eea565b612091565b61032461074f366004613e96565b6120b1565b610362610762366004613eea565b612167565b610324610775366004613fe2565b61217c565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d390614bde565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a2090610841908490879061492c565b60405180910390a250505050565b610857613a93565b600082815260016020526040902061086e9061227c565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d390614bde565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614eb0565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149ae565b60405180910390a1505050565b600082815260016020526040808220905163aaaf608760e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163aaaf6087916109d891908690600401614fa7565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613f02565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614e61565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada908690614a55565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d390614a81565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d390614ade565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149ae565b610c71613a93565b600082815260016020526040902061086e90612574565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614e61565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada908690614a55565b600081815260016020526040902060609061086e90612896565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d390614bde565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb90610841908490879061492c565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d390614e04565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d390614ccc565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149ae565b6000828152600160205260408120610a28908363ffffffff61292c16565b6000828152600160208190526040909120015482906001600160a01b0316331480610f445750610f44816000356001600160e01b03191633610ae7565b610f605760405162461bcd60e51b81526004016107d390614bde565b610f8c610f7236849003840184614437565b60008581526001602052604090209063ffffffff61294216565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f8360200135604051610fc091906149a5565b60405180910390a2505050565b610fd5613b2d565b6000828152600160205260409081902090516307c055c760e31b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91633e02ae389161101a91906004016149a5565b6107206040518083038186803b15801561103357600080fd5b505af4158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906141cf565b611073613c68565b6000838152600160205260409081902090516305c6b05560e41b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91635c6b0550916110ba91908690600401614fa7565b60606040518083038186803b1580156110d257600080fd5b505af41580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a28919061441c565b611112612c70565b6000546001600160a01b0390811691161461113f5760405162461bcd60e51b81526004016107d390614d72565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c81111561119d57fe5b92505067ffffffffffffffff83169050915091565b60006111bc613c8b565b6111dc8372636f6e74726163745265666572656e63655f3160681b6119a2565b8051909150158015906111fe57506003816060015160048111156111fc57fe5b145b1561157d5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b22906112369085906004016149a5565b60206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613ece565b6112a25760405162461bcd60e51b81526004016107d390614f04565b60006112bd866b65786572636973654461746560a01b610ee9565b905060006112e4877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b611ffb565b60ff1660058111156112f257fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b81526004016113229190614a30565b60206040518083038186803b15801561133a57600080fd5b505afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190614534565b60ff16600581111561138057fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016113b09190614a0d565b60206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190613f02565b9050831561142157611413601b42611e5a565b975050505050505050610871565b600083600581111561142f57fe5b14158015611452575082600581111561144457fe5b82600581111561145057fe5b145b1561157657600182600581111561146557fe5b141561147657611413601a82611e5a565b600282600581111561148457fe5b141561152e57611492613c68565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a906004016149cd565b60606040518083038186803b1580156114d657600080fd5b505afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e919061441c565b905061151f601a6106bd8385612c74565b98505050505050505050610871565b600382600581111561153c57fe5b14156115765761154a613c68565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a906004016149ea565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806115c357506115c3816000356001600160e01b03191633610ae7565b6115df5760405162461bcd60e51b81526004016107d390614bde565b61160b6115f136849003840184614437565b60008581526001602052604090209063ffffffff612da016565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec68360200135604051610fc091906149a5565b600081601c81111561086e57fe5b3360009081526002602052604090205460ff1661167c5760405162461bcd60e51b81526004016107d390614c78565b6116da8961168f368a90038a018a614437565b8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506116d29250505036899003890189614167565b878787613096565b600089815260016020526040908190209051635445aa9b60e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91635445aa9b9161172191908c90600401614fb5565b60006040518083038186803b15801561173957600080fd5b505af415801561174d573d6000803e3d6000fd5b50505050505050505050505050565b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b6117a9613cb2565b60008381526001602052604090819020905163063a179b60e21b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__916318e85e6c916117f091908690600401614fa7565b60806040518083038186803b15801561180857600080fd5b505af415801561181c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614401565b600090815260016020819052604090912001546001600160a01b031690565b600082815260016020526040808220905163e0660e8160e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163e0660e81916109d891908690600401614fa7565b6000818152600160205260408120816118bd8461321b565b600583015460009081526003840160205260409020546004840154919250901580156118e7575081155b156118f9575060009250610871915050565b60008061190584611189565b9150915060008061191585611189565b9150915080600014806119315750821580159061193157508083105b8061195557508083148015611955575061194a8261163f565b6119538561163f565b105b156119695785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b6119aa613c8b565b60008381526001602052604090819020905163799b1f8160e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163799b1f81916119f191908690600401614fa7565b60806040518083038186803b158015611a0957600080fd5b505af4158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906143e6565b611a58826000356001600160e01b03191633610ae7565b611a745760405162461bcd60e51b81526004016107d390614b81565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149ae565b60008181526001602081905260408220015482906001600160a01b0316331480611b155750611b15816000356001600160e01b03191633610ae7565b611b315760405162461bcd60e51b81526004016107d390614bde565b600083815260016020526040812090611b498561321b565b60058301546000908152600384016020526040902054600484015491925090158015611b73575081155b15611b855750600093506108e7915050565b600080611b9184611189565b91509150600080611ba185611189565b9150915084861415611c16578260028801600086601c811115611bc057fe5b601c811115611bcb57fe5b8152602081019190915260400160002055600487015460058801541415611bfd5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c2c57508215801590611c2c57508083105b80611c5057508083148015611c505750611c458261163f565b611c4e8561163f565b105b15611c93578260028801600086601c811115611c6857fe5b601c811115611c7357fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611ca7575060048701546005880154145b15611cbd5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff61365d16565b600082815260016020526040808220905163ada653a360e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163ada653a3916109d891908690600401614fa7565b6000828152600160208190526040909120015482906001600160a01b0316331480611d8c5750611d8c816000356001600160e01b03191633610ae7565b611da85760405162461bcd60e51b81526004016107d390614bde565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dfb5750611dfb816000356001600160e01b03191633610ae7565b611e175760405162461bcd60e51b81526004016107d390614bde565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b60008160f884601c811115611e6b57fe5b60ff16901b179392505050565b611e80613cd3565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611ede612c70565b6000546001600160a01b03908116911614611f0b5760405162461bcd60e51b81526004016107d390614d72565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b60008281526001602052604080822090516359603f8160e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__916359603f8191611fab91908690600401614fa7565b60206040518083038186803b158015611fc357600080fd5b505af4158015611fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613eb2565b6000828152600160205260408082209051633438aa2360e21b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163d0e2a88c9161204191908690600401614fa7565b60206040518083038186803b15801561205957600080fd5b505af415801561206d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614534565b60009081526001602052604090205461010090046001600160a01b031690565b6120b9612c70565b6000546001600160a01b039081169116146120e65760405162461bcd60e51b81526004016107d390614d72565b6001600160a01b03811661210c5760405162461bcd60e51b81526004016107d390614b3b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b6000828152600160208190526040909120015482906001600160a01b03163314806121b957506121b9816000356001600160e01b03191633610ae7565b6121d55760405162461bcd60e51b81526004016107d390614bde565b600083815260016020526040908190209051635445aa9b60e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91635445aa9b9161221c91908690600401614fb5565b60006040518083038186803b15801561223457600080fd5b505af4158015612248573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b612284613a93565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c757fe5b60058111156122d257fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257c613a93565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125c157fe5b60058111156125cc57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b757600080fd5b506040519080825280602002602001820160405280156128e1578160200160208202803683370190505b50905060005b6004840154811015612925576000818152600385016020526040902054825183908390811061291257fe5b60209081029190910101526001016128e7565b5092915050565b6000908152600e91909101602052604090205490565b61297b8274465f636f6e7472616374506572666f726d616e636560581b60f88460000151600581111561297157fe5b60ff16901b613709565b61299c826b465f7374617475734461746560a01b836020015160001b613709565b6129c48272465f6e6f6e506572666f726d696e674461746560681b836040015160001b613709565b6129e7826d465f6d617475726974794461746560901b836060015160001b613709565b612a0a826d465f65786572636973654461746560901b836080015160001b613709565b612a308270465f7465726d696e6174696f6e4461746560781b8360a0015160001b613709565b612a5882721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b613709565b612a7f82701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b613709565b612aa1826b1197d999595058d8dc9d595960a21b83610120015160001b613709565b612acc8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b613709565b612aff827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b613709565b612b32827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b613709565b612b65827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b613709565b612b8b826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b613709565b612bb38271465f65786572636973655175616e7469747960701b836101e0015160001b613709565b612bd38269465f7175616e7469747960b01b83610200015160001b613709565b612bfc82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b613709565b612c20826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b613709565b612c488271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b613709565b612c6c826e465f6c617374436f75706f6e44617960881b8360c0015160001b613709565b5050565b3390565b6000808084602001516005811115612c8857fe5b1415612ca8578351612ca190849063ffffffff61373f16565b9050610a28565b600184602001516005811115612cba57fe5b1415612cd6578351612ca190849060070263ffffffff61373f16565b600284602001516005811115612ce857fe5b1415612d01578351612ca190849063ffffffff61375416565b600384602001516005811115612d1357fe5b1415612d2f578351612ca190849060030263ffffffff61375416565b600484602001516005811115612d4157fe5b1415612d5d578351612ca190849060060263ffffffff61375416565b600584602001516005811115612d6f57fe5b1415612d88578351612ca190849063ffffffff6137d016565b60405162461bcd60e51b81526004016107d390614da7565b612dcd8272636f6e7472616374506572666f726d616e636560681b60f88460000151600581111561297157fe5b612dec82697374617475734461746560b01b836020015160001b613709565b612e1282706e6f6e506572666f726d696e674461746560781b836040015160001b613709565b612e33826b6d617475726974794461746560a01b836060015160001b613709565b612e54826b65786572636973654461746560a01b836080015160001b613709565b612e78826e7465726d696e6174696f6e4461746560881b8360a0015160001b613709565b612e9e82701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b613709565b612ec3826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b613709565b612ee382691999595058d8dc9d595960b21b83610120015160001b613709565b612f0c82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b613709565b612f3b827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b613709565b612f6a82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b613709565b612f9d827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b613709565b612fc1826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b613709565b612fe7826f65786572636973655175616e7469747960801b836101e0015160001b613709565b61300582677175616e7469747960c01b83610200015160001b613709565b61302c827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b613709565b61304e826b36b0b933b4b72330b1ba37b960a11b83610240015160001b613709565b613074826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b613709565b612c6c826c6c617374436f75706f6e44617960981b8360c0015160001b613709565b6000878152600160205260409020805460ff16156130c65760405162461bcd60e51b81526004016107d390614c2d565b6001600160a01b03831660009081526002602052604090205460ff1615156001146131035760405162461bcd60e51b81526004016107d390614d29565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b03191661010088841602178455830180549092169085161790556131a18188612da0565b6131b1818863ffffffff61294216565b6131c1818763ffffffff6137f716565b6001600160a01b038216156131da576131da888361385f565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd896468860405161320991906149a5565b60405180910390a15050505050505050565b6000818152600160205260408120613231613b2d565b6040516307c055c760e31b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__90633e02ae38906132689085906004016149a5565b6107206040518083038186803b15801561328157600080fd5b505af4158015613295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b991906141cf565b82549091506000908190819081906133659061010090046001600160a01b03166334a64ea28760028a0185601581526020019081526020016000205460156040518463ffffffff1660e01b815260040161331593929190615218565b60206040518083038186803b15801561332d57600080fd5b505afa158015613341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190613f02565b91509150826000148061337757508281105b8061339b5750808314801561339b57506133908461163f565b6133998361163f565b105b156133a7578092508193505b5050835460166000818152600287016020526040808220549051631a53275160e11b8152919384936133f8936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b9150915082600014806134145750801580159061341457508281105b806134435750801580159061342857508083145b801561344357506134388461163f565b6134418361163f565b105b1561344f578092508193505b5050835460176000818152600287016020526040808220549051631a53275160e11b8152919384936134a0936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b9150915082600014806134bc575080158015906134bc57508281105b806134eb575080158015906134d057508083145b80156134eb57506134e08461163f565b6134e98361163f565b105b156134f7578092508193505b5050835460186000818152600287016020526040808220549051631a53275160e11b815291938493613548936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b9150915082600014806135645750801580159061356457508281105b806135935750801580159061357857508083145b801561359357506135888461163f565b6135918361163f565b105b1561359f578092508193505b50508354601a6000818152600287016020526040808220549051631a53275160e11b8152919384936135f0936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b91509150826000148061360c5750801580159061360c57508281105b8061363b5750801580159061362057508083145b801561363b57506136308461163f565b6136398361163f565b105b15613647578092508193505b50506136538282611e5a565b9695505050505050565b600072636f6e7472616374506572666f726d616e636560681b8214156136ae575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b821415613701575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b6000828152600e840160205260409020548114156137265761373a565b6000828152600e8401602052604090208190555b505050565b620151808102820182811015610a2b57600080fd5b600080808061376862015180875b046138d6565b600c918801600019810183810494909401965094509250900660010191506000613792848461396c565b9050808211156137a0578091505b620151808706620151806137b58686866139f2565b02019450868510156137c657600080fd5b5050505092915050565b60008080806137e26201518087613762565b9187019450925090506000613792848461396c565b60005b815181101561373a576000801b82828151811061381357fe5b602002602001015114156138265761373a565b81818151811061383257fe5b602090810291909101810151600083815260038601909252604090912055600101600483018190556137fa565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb47865916138ca91614a55565b60405180910390a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161392d57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b6000816001148061397d5750816003145b806139885750816005145b806139935750816007145b8061399e5750816008145b806139a9575081600a145b806139b4575081600c145b156139c15750601f610a2b565b816002146139d15750601e610a2b565b6139da83613a6e565b6139e557601c6139e8565b601d5b60ff169392505050565b60006107b2841015613a0357600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281613a3f57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600060048206158015613a8357506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516104008101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613bee613c68565b8152602001613bfb613c68565b8152602001613c08613c68565b8152602001613c15613c68565b8152602001613c22613c68565b8152602001613c2f613cb2565b8152602001613c3c613cb2565b8152602001613c49613cb2565b8152602001613c56613c8b565b8152602001613c63613c8b565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b60408051608081018252600080825260208201819052909182019081526020016000613c63565b60408051608081019091526000808252602082019081526020016000613c7e565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b81615404565b8051610a2b81615404565b8051610a2b81615427565b8051610a2b81615434565b8035610a2b81615441565b8051610a2b8161545b565b8035610a2b81615468565b8051610a2b81615468565b8051610a2b81615475565b8051610a2b81615441565b6000608082840312156108e7578081fd5b600061072082840312156108e7578081fd5b600060808284031215613d9c578081fd5b613da66080615363565b905081518152602082015160208201526040820151613dc48161544e565b60408201526060820151613dd78161544e565b606082015292915050565b600060808284031215613df3578081fd5b613dfd6080615363565b9050815181526020820151613e1181615441565b60208201526040820151613e2481615434565b60408201526060820151613dd781615419565b600060608284031215613e48578081fd5b613e526060615363565b9050815181526020820151613e6681615441565b60208201526040820151613e7981615419565b604082015292915050565b600061028082840312156108e7578081fd5b600060208284031215613ea7578081fd5b8135610a2881615404565b600060208284031215613ec3578081fd5b8151610a2881615404565b600060208284031215613edf578081fd5b8151610a2881615419565b600060208284031215613efb578081fd5b5035919050565b600060208284031215613f13578081fd5b5051919050565b60008060408385031215613f2c578081fd5b823591506020830135613f3e81615404565b809150509250929050565b60008060408385031215613f5b578182fd5b50508035926020909101359150565b600080600060608486031215613f7e578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613fa9578081fd5b8335925060208401356001600160e01b031981168114613fc7578182fd5b91506040840135613fd781615404565b809150509250925092565b6000806107408385031215613ff5578182fd5b823591506140068460208501613d79565b90509250929050565b6000806000806000806000806000610ac08a8c03121561402d578687fd5b8935985061403e8b60208c01613d79565b975061404e8b6107408c01613e84565b96506109c08a013567ffffffffffffffff8082111561406b578687fd5b818c018d601f82011261407c578788fd5b803592508183111561408c578788fd5b8d6020808502830101111561409f578788fd5b60200197509095506140b790508b6109e08c01613d68565b93506140c78b610a608c01613cfa565b92506140d78b610a808c01613cfa565b91506140e78b610aa08c01613cfa565b90509295985092959850929598565b6000806102a08385031215614109578182fd5b823591506140068460208501613e84565b60006020828403121561412b578081fd5b8135601d8110610a28578182fd5b6000806040838503121561414b578182fd5b8235601d8110614159578283fd5b946020939093013593505050565b600060808284031215614178578081fd5b6141826080615363565b823561418d81615404565b8152602083013561419d81615404565b602082015260408301356141b081615404565b604082015260608301356141c381615404565b60608201529392505050565b600061072082840312156141e1578081fd5b6141ec610400615363565b6141f68484613d47565b81526142058460208501613d1b565b60208201526142178460408501613d31565b60408201526142298460608501613d5d565b606082015261423b8460808501613d10565b608082015261424d8460a08501613d1b565b60a082015261425f8460c08501613d52565b60c08201526142718460e08501613d05565b60e082015261010061428585828601613d05565b9082015261012083810151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a080840151908201526102c061432785828601613e37565b9082015261032061433a85858301613e37565b6102e083015261038061434f86828701613e37565b6103008401526103e061436487828801613e37565b83850152614376876104408801613e37565b61034085015261438a876104a08801613de2565b61036085015261439e876105208801613de2565b828501526143b0876105a08801613de2565b6103a08501526143c4876106208801613d8b565b6103c08501526143d8876106a08801613d8b565b908401525090949350505050565b6000608082840312156143f7578081fd5b610a288383613d8b565b600060808284031215614412578081fd5b610a288383613de2565b60006060828403121561442d578081fd5b610a288383613e37565b600061028080838503121561444a578182fd5b61445381615363565b61445d8585613d26565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600060208284031215614545578081fd5b815160ff81168114610a28578182fd5b6001600160a01b03169052565b6009811061456c57fe5b9052565b61456c816153e3565b61456c816153f0565b600d811061456c57fe5b6013811061456c57fe5b6004811061456c57fe5b6145ab82825161458c565b60208101516145bd6020840182614570565b5060408101516145d06040840182614582565b5060608101516145e36060840182614579565b5060808101516145f66080840182614562565b5060a081015161460960a0840182614570565b5060c081015161461c60c0840182614596565b5060e081015161462f60e0840182614555565b506101008082015161464382850182614555565b505061012081810151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015190830152610200808201519083015261022080820151908301526102408082015190830152610260808201519083015261028080820151908301526102a080820151908301526102c0808201516146e7828501826148f4565b50506102e08101516103206146fe818501836148f4565b6103008301519150610380614715818601846148f4565b9083015191506103e09061472b858301846148f4565b61034084015192506147416104408601846148f4565b61036084015192506147576104a0860184614882565b830151915061476a610520850183614882565b6103a083015191506147806105a0850183614882565b6103c083015191506147966106208501836147f5565b820151905061373a6106a08401826147f5565b803582526020810135602083015260408101356147c58161544e565b6147ce816153d8565b60408401525060608101356147e28161544e565b6147eb816153d8565b6060840152505050565b805182526020810151602083015261481060408201516153d8565b604083015261482260608201516153d8565b60608301525050565b80358252602081013561483d81615441565b614846816153f0565b6020830152604081013561485981615434565b614862816153e3565b6040830152606081013561487581615419565b8015156060840152505050565b805182526020810151614894816153f0565b602083015260408101516148a7816153e3565b60408301526060908101511515910152565b8035825260208101356148cb81615441565b6148d4816153f0565b602083015260408101356148e781615419565b8015156040840152505050565b805182526020810151614906816153f0565b60208301526040908101511515910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561497e57835183529284019291840191600101614962565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101614a77846153fa565b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b8281526107408101602083810190614fd8908401614fd38387613d3c565b61458c565b614fe281856153a4565b614fef6040850182614570565b5050614ffe60408401846153b1565b61500b6060840182614582565b5061501960608401846153cb565b6150266080840182614579565b506150346080840184615397565b61504160a0840182614562565b5061504f60a08401846153a4565b61505c60c0840182614570565b5061506a60c08401846153be565b61507760e0840182614596565b5061508560e084018461538a565b61010061509481850183614555565b6150a08186018661538a565b9150506101206150b281850183614555565b6101409150808501358285015250610160818501358185015261018091508085013582850152506101a081850135818501526101c091508085013582850152506101e08185013581850152610200915080850135828501525061022081850135818501526102409150808501358285015250610260818501358185015261028091508085013582850152506102a081850135818501526102c091508085013582850152506151666102e084018286016148b9565b50615179610340830161032085016148b9565b61518b6103a0830161038085016148b9565b61519d61040083016103e085016148b9565b6151af610460830161044085016148b9565b6151c16104c083016104a0850161482b565b6151d36105408301610520850161482b565b6151e56105c083016105a0850161482b565b6151f7610640830161062085016147a9565b610b5d6106c083016106a085016147a9565b6107208101610a2b82846145a0565b610760810161522782866145a0565b83610720830152615237836153fa565b82610740830152949350505050565b60808101610a2b82846147f5565b60808101610a2b8284614882565b60608101610a2b82846148f4565b600061028082019050615284828451614579565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561538257600080fd5b604052919050565b60008235610a2881615404565b60008235610a2881615427565b60008235610a2881615434565b60008235610a288161545b565b60008235610a2881615475565b60008235610a2881615441565b806005811061087157fe5b600281106153ed57fe5b50565b600681106153ed57fe5b601d81106153ed57fe5b6001600160a01b03811681146153ed57600080fd5b80151581146153ed57600080fd5b600981106153ed57600080fd5b600281106153ed57600080fd5b600681106153ed57600080fd5b600581106153ed57600080fd5b600d81106153ed57600080fd5b601381106153ed57600080fd5b600481106153ed57600080fdfea26469706673582212208b078f5e72474b4e60a8c0b7d458b2181261df3fc5b997bb33e7433387c5f25764736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c80638da5cb5b1161019d578063d51dc3dc116100e9578063e8f7ca3e116100a2578063ee43eda11161007c578063ee43eda11461072e578063f2fde38b14610741578063f52f84e114610754578063f7f729ad146107675761030c565b8063e8f7ca3e146106f5578063eb01255914610708578063ecef55771461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063e05a66e0146106af578063e50e0ef7146106c2578063e7dc3188146106e25761030c565b8063b828204111610156578063bd1f0a6c11610130578063bd1f0a6c1461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063b8282041146105c9578063ba4d2d28146105dc578063bc6a7d76146105fd5761030c565b80638da5cb5b14610548578063a17b75b51461055d578063b02ca0c014610570578063b0b4888f14610583578063b3c45ebe146105a3578063b461dd4f146105b65761030c565b8063512872f41161025c5780636fe55baa1161021557806375e86ae4116101ef57806375e86ae4146104fc5780637d870dd41461050f578063811322fb146105225780638c81ed92146105355761030c565b80636fe55baa146104b3578063715018a6146104d357806372540003146104db5761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d57806367fe5d70146104805780636a899b9b1461046d5780636be39bda146104935761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613f1a565b61077a565b005b610339610334366004613eea565b61084f565b6040516103469190615270565b60405180910390f35b61036261035d366004613eea565b610876565b60405161034691906149a5565b61032461037d366004613f1a565b6108ed565b610362610390366004613f49565b610992565b6103246103a3366004613f95565b610a31565b6103bb6103b6366004613f95565b610ae7565b604051610346919061498a565b6103bb6103d6366004613eea565b610b64565b6103626103e9366004613eea565b610b79565b6103246103fc366004613f1a565b610b8e565b61033961040f366004613eea565b610c69565b610324610422366004613f95565b610c88565b61043a610435366004613eea565b610d2d565b6040516103469190614946565b610324610455366004613f1a565b610d47565b610324610468366004613f1a565b610e0e565b61036261047b366004613f49565b610ee9565b61032461048e3660046140f6565b610f07565b6104a66104a1366004613eea565b610fcd565b6040516103469190615209565b6104c66104c1366004613f49565b61106b565b6040516103469190615262565b61032461110a565b6104ee6104e9366004613eea565b611189565b604051610346929190614a6a565b61036261050a366004613eea565b6111b2565b61032461051d3660046140f6565b611586565b61036261053036600461411a565b61163f565b61032461054336600461400f565b61164d565b61055061175c565b6040516103469190614918565b61036261056b366004613eea565b61176b565b61036261057e366004613f49565b611780565b610596610591366004613f49565b6117a1565b6040516103469190615254565b6105506105b1366004613eea565b611840565b6103626105c4366004613f49565b61185f565b6103626105d7366004613eea565b6118a5565b6105ef6105ea366004613f49565b611978565b604051610346929190614995565b61061061060b366004613f49565b6119a2565b6040516103469190615246565b61032461062b366004613f1a565b611a41565b61036261063e366004613eea565b611ad9565b6103bb610651366004613e96565b611cd6565b610669610664366004613f49565b611ceb565b6040516103469190615355565b610362610684366004613f49565b611d09565b610324610697366004613f49565b611d4f565b6103246106aa366004613f6a565b611dbe565b6103626106bd366004614139565b611e5a565b6106d56106d0366004613eea565b611e78565b6040516103469190614f6c565b6103246106f0366004613e96565b611ed6565b6103bb610703366004613f1a565b611f2f565b610550610716366004613f49565b611f65565b610669610729366004613f49565b611ffb565b61055061073c366004613eea565b612091565b61032461074f366004613e96565b6120b1565b610362610762366004613eea565b612167565b610324610775366004613fe2565b61217c565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d390614bde565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a2090610841908490879061492c565b60405180910390a250505050565b610857613a93565b600082815260016020526040902061086e9061227c565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d390614bde565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614eb0565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149ae565b60405180910390a1505050565b600082815260016020526040808220905163aaaf608760e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163aaaf6087916109d891908690600401614fa7565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613f02565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614e61565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada908690614a55565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d390614a81565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d390614ade565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149ae565b610c71613a93565b600082815260016020526040902061086e90612574565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614e61565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada908690614a55565b600081815260016020526040902060609061086e90612896565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d390614bde565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb90610841908490879061492c565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d390614e04565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d390614ccc565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906149ae565b6000828152600160205260408120610a28908363ffffffff61292c16565b6000828152600160208190526040909120015482906001600160a01b0316331480610f445750610f44816000356001600160e01b03191633610ae7565b610f605760405162461bcd60e51b81526004016107d390614bde565b610f8c610f7236849003840184614437565b60008581526001602052604090209063ffffffff61294216565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f8360200135604051610fc091906149a5565b60405180910390a2505050565b610fd5613b2d565b6000828152600160205260409081902090516307c055c760e31b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91633e02ae389161101a91906004016149a5565b6107206040518083038186803b15801561103357600080fd5b505af4158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e91906141cf565b611073613c68565b6000838152600160205260409081902090516305c6b05560e41b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91635c6b0550916110ba91908690600401614fa7565b60606040518083038186803b1580156110d257600080fd5b505af41580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a28919061441c565b611112612c70565b6000546001600160a01b0390811691161461113f5760405162461bcd60e51b81526004016107d390614d72565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c81111561119d57fe5b92505067ffffffffffffffff83169050915091565b60006111bc613c8b565b6111dc8372636f6e74726163745265666572656e63655f3160681b6119a2565b8051909150158015906111fe57506003816060015160048111156111fc57fe5b145b1561157d5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b22906112369085906004016149a5565b60206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613ece565b6112a25760405162461bcd60e51b81526004016107d390614f04565b60006112bd866b65786572636973654461746560a01b610ee9565b905060006112e4877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b611ffb565b60ff1660058111156112f257fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b81526004016113229190614a30565b60206040518083038186803b15801561133a57600080fd5b505afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190614534565b60ff16600581111561138057fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016113b09190614a0d565b60206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190613f02565b9050831561142157611413601b42611e5a565b975050505050505050610871565b600083600581111561142f57fe5b14158015611452575082600581111561144457fe5b82600581111561145057fe5b145b1561157657600182600581111561146557fe5b141561147657611413601a82611e5a565b600282600581111561148457fe5b141561152e57611492613c68565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a906004016149cd565b60606040518083038186803b1580156114d657600080fd5b505afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e919061441c565b905061151f601a6106bd8385612c74565b98505050505050505050610871565b600382600581111561153c57fe5b14156115765761154a613c68565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a906004016149ea565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806115c357506115c3816000356001600160e01b03191633610ae7565b6115df5760405162461bcd60e51b81526004016107d390614bde565b61160b6115f136849003840184614437565b60008581526001602052604090209063ffffffff612da016565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec68360200135604051610fc091906149a5565b600081601c81111561086e57fe5b3360009081526002602052604090205460ff1661167c5760405162461bcd60e51b81526004016107d390614c78565b6116da8961168f368a90038a018a614437565b8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506116d29250505036899003890189614167565b878787613096565b600089815260016020526040908190209051635445aa9b60e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91635445aa9b9161172191908c90600401614fb5565b60006040518083038186803b15801561173957600080fd5b505af415801561174d573d6000803e3d6000fd5b50505050505050505050505050565b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b6117a9613cb2565b60008381526001602052604090819020905163063a179b60e21b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__916318e85e6c916117f091908690600401614fa7565b60806040518083038186803b15801561180857600080fd5b505af415801561181c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614401565b600090815260016020819052604090912001546001600160a01b031690565b600082815260016020526040808220905163e0660e8160e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163e0660e81916109d891908690600401614fa7565b6000818152600160205260408120816118bd8461321b565b600583015460009081526003840160205260409020546004840154919250901580156118e7575081155b156118f9575060009250610871915050565b60008061190584611189565b9150915060008061191585611189565b9150915080600014806119315750821580159061193157508083105b8061195557508083148015611955575061194a8261163f565b6119538561163f565b105b156119695785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b6119aa613c8b565b60008381526001602052604090819020905163799b1f8160e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163799b1f81916119f191908690600401614fa7565b60806040518083038186803b158015611a0957600080fd5b505af4158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906143e6565b611a58826000356001600160e01b03191633610ae7565b611a745760405162461bcd60e51b81526004016107d390614b81565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906149ae565b60008181526001602081905260408220015482906001600160a01b0316331480611b155750611b15816000356001600160e01b03191633610ae7565b611b315760405162461bcd60e51b81526004016107d390614bde565b600083815260016020526040812090611b498561321b565b60058301546000908152600384016020526040902054600484015491925090158015611b73575081155b15611b855750600093506108e7915050565b600080611b9184611189565b91509150600080611ba185611189565b9150915084861415611c16578260028801600086601c811115611bc057fe5b601c811115611bcb57fe5b8152602081019190915260400160002055600487015460058801541415611bfd5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c2c57508215801590611c2c57508083105b80611c5057508083148015611c505750611c458261163f565b611c4e8561163f565b105b15611c93578260028801600086601c811115611c6857fe5b601c811115611c7357fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611ca7575060048701546005880154145b15611cbd5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff61365d16565b600082815260016020526040808220905163ada653a360e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163ada653a3916109d891908690600401614fa7565b6000828152600160208190526040909120015482906001600160a01b0316331480611d8c5750611d8c816000356001600160e01b03191633610ae7565b611da85760405162461bcd60e51b81526004016107d390614bde565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dfb5750611dfb816000356001600160e01b03191633610ae7565b611e175760405162461bcd60e51b81526004016107d390614bde565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b60008160f884601c811115611e6b57fe5b60ff16901b179392505050565b611e80613cd3565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611ede612c70565b6000546001600160a01b03908116911614611f0b5760405162461bcd60e51b81526004016107d390614d72565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b60008281526001602052604080822090516359603f8160e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__916359603f8191611fab91908690600401614fa7565b60206040518083038186803b158015611fc357600080fd5b505af4158015611fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613eb2565b6000828152600160205260408082209051633438aa2360e21b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__9163d0e2a88c9161204191908690600401614fa7565b60206040518083038186803b15801561205957600080fd5b505af415801561206d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190614534565b60009081526001602052604090205461010090046001600160a01b031690565b6120b9612c70565b6000546001600160a01b039081169116146120e65760405162461bcd60e51b81526004016107d390614d72565b6001600160a01b03811661210c5760405162461bcd60e51b81526004016107d390614b3b565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b6000828152600160208190526040909120015482906001600160a01b03163314806121b957506121b9816000356001600160e01b03191633610ae7565b6121d55760405162461bcd60e51b81526004016107d390614bde565b600083815260016020526040908190209051635445aa9b60e01b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__91635445aa9b9161221c91908690600401614fb5565b60006040518083038186803b15801561223457600080fd5b505af4158015612248573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b612284613a93565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c757fe5b60058111156122d257fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257c613a93565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125c157fe5b60058111156125cc57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b757600080fd5b506040519080825280602002602001820160405280156128e1578160200160208202803683370190505b50905060005b6004840154811015612925576000818152600385016020526040902054825183908390811061291257fe5b60209081029190910101526001016128e7565b5092915050565b6000908152600e91909101602052604090205490565b61297b8274465f636f6e7472616374506572666f726d616e636560581b60f88460000151600581111561297157fe5b60ff16901b613709565b61299c826b465f7374617475734461746560a01b836020015160001b613709565b6129c48272465f6e6f6e506572666f726d696e674461746560681b836040015160001b613709565b6129e7826d465f6d617475726974794461746560901b836060015160001b613709565b612a0a826d465f65786572636973654461746560901b836080015160001b613709565b612a308270465f7465726d696e6174696f6e4461746560781b8360a0015160001b613709565b612a5882721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b613709565b612a7f82701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b613709565b612aa1826b1197d999595058d8dc9d595960a21b83610120015160001b613709565b612acc8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b613709565b612aff827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b613709565b612b32827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b613709565b612b65827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b613709565b612b8b826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b613709565b612bb38271465f65786572636973655175616e7469747960701b836101e0015160001b613709565b612bd38269465f7175616e7469747960b01b83610200015160001b613709565b612bfc82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b613709565b612c20826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b613709565b612c488271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b613709565b612c6c826e465f6c617374436f75706f6e44617960881b8360c0015160001b613709565b5050565b3390565b6000808084602001516005811115612c8857fe5b1415612ca8578351612ca190849063ffffffff61373f16565b9050610a28565b600184602001516005811115612cba57fe5b1415612cd6578351612ca190849060070263ffffffff61373f16565b600284602001516005811115612ce857fe5b1415612d01578351612ca190849063ffffffff61375416565b600384602001516005811115612d1357fe5b1415612d2f578351612ca190849060030263ffffffff61375416565b600484602001516005811115612d4157fe5b1415612d5d578351612ca190849060060263ffffffff61375416565b600584602001516005811115612d6f57fe5b1415612d88578351612ca190849063ffffffff6137d016565b60405162461bcd60e51b81526004016107d390614da7565b612dcd8272636f6e7472616374506572666f726d616e636560681b60f88460000151600581111561297157fe5b612dec82697374617475734461746560b01b836020015160001b613709565b612e1282706e6f6e506572666f726d696e674461746560781b836040015160001b613709565b612e33826b6d617475726974794461746560a01b836060015160001b613709565b612e54826b65786572636973654461746560a01b836080015160001b613709565b612e78826e7465726d696e6174696f6e4461746560881b8360a0015160001b613709565b612e9e82701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b613709565b612ec3826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b613709565b612ee382691999595058d8dc9d595960b21b83610120015160001b613709565b612f0c82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b613709565b612f3b827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b613709565b612f6a82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b613709565b612f9d827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b613709565b612fc1826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b613709565b612fe7826f65786572636973655175616e7469747960801b836101e0015160001b613709565b61300582677175616e7469747960c01b83610200015160001b613709565b61302c827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b613709565b61304e826b36b0b933b4b72330b1ba37b960a11b83610240015160001b613709565b613074826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b613709565b612c6c826c6c617374436f75706f6e44617960981b8360c0015160001b613709565b6000878152600160205260409020805460ff16156130c65760405162461bcd60e51b81526004016107d390614c2d565b6001600160a01b03831660009081526002602052604090205460ff1615156001146131035760405162461bcd60e51b81526004016107d390614d29565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b03191661010088841602178455830180549092169085161790556131a18188612da0565b6131b1818863ffffffff61294216565b6131c1818763ffffffff6137f716565b6001600160a01b038216156131da576131da888361385f565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd896468860405161320991906149a5565b60405180910390a15050505050505050565b6000818152600160205260408120613231613b2d565b6040516307c055c760e31b815273__$7d2c2eb2ff29afdcefe0bc8b190fcef71d$__90633e02ae38906132689085906004016149a5565b6107206040518083038186803b15801561328157600080fd5b505af4158015613295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b991906141cf565b82549091506000908190819081906133659061010090046001600160a01b03166334a64ea28760028a0185601581526020019081526020016000205460156040518463ffffffff1660e01b815260040161331593929190615218565b60206040518083038186803b15801561332d57600080fd5b505afa158015613341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190613f02565b91509150826000148061337757508281105b8061339b5750808314801561339b57506133908461163f565b6133998361163f565b105b156133a7578092508193505b5050835460166000818152600287016020526040808220549051631a53275160e11b8152919384936133f8936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b9150915082600014806134145750801580159061341457508281105b806134435750801580159061342857508083145b801561344357506134388461163f565b6134418361163f565b105b1561344f578092508193505b5050835460176000818152600287016020526040808220549051631a53275160e11b8152919384936134a0936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b9150915082600014806134bc575080158015906134bc57508281105b806134eb575080158015906134d057508083145b80156134eb57506134e08461163f565b6134e98361163f565b105b156134f7578092508193505b5050835460186000818152600287016020526040808220549051631a53275160e11b815291938493613548936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b9150915082600014806135645750801580159061356457508281105b806135935750801580159061357857508083145b801561359357506135888461163f565b6135918361163f565b105b1561359f578092508193505b50508354601a6000818152600287016020526040808220549051631a53275160e11b8152919384936135f0936101009092046001600160a01b0316926334a64ea292613315928b9291600401615218565b91509150826000148061360c5750801580159061360c57508281105b8061363b5750801580159061362057508083145b801561363b57506136308461163f565b6136398361163f565b105b15613647578092508193505b50506136538282611e5a565b9695505050505050565b600072636f6e7472616374506572666f726d616e636560681b8214156136ae575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b821415613701575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b6000828152600e840160205260409020548114156137265761373a565b6000828152600e8401602052604090208190555b505050565b620151808102820182811015610a2b57600080fd5b600080808061376862015180875b046138d6565b600c918801600019810183810494909401965094509250900660010191506000613792848461396c565b9050808211156137a0578091505b620151808706620151806137b58686866139f2565b02019450868510156137c657600080fd5b5050505092915050565b60008080806137e26201518087613762565b9187019450925090506000613792848461396c565b60005b815181101561373a576000801b82828151811061381357fe5b602002602001015114156138265761373a565b81818151811061383257fe5b602090810291909101810151600083815260038601909252604090912055600101600483018190556137fa565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb47865916138ca91614a55565b60405180910390a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161392d57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b6000816001148061397d5750816003145b806139885750816005145b806139935750816007145b8061399e5750816008145b806139a9575081600a145b806139b4575081600c145b156139c15750601f610a2b565b816002146139d15750601e610a2b565b6139da83613a6e565b6139e557601c6139e8565b601d5b60ff169392505050565b60006107b2841015613a0357600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f0281613a3f57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b600060048206158015613a8357506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516104008101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613bee613c68565b8152602001613bfb613c68565b8152602001613c08613c68565b8152602001613c15613c68565b8152602001613c22613c68565b8152602001613c2f613cb2565b8152602001613c3c613cb2565b8152602001613c49613cb2565b8152602001613c56613c8b565b8152602001613c63613c8b565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b60408051608081018252600080825260208201819052909182019081526020016000613c63565b60408051608081019091526000808252602082019081526020016000613c7e565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b81615404565b8051610a2b81615404565b8051610a2b81615427565b8051610a2b81615434565b8035610a2b81615441565b8051610a2b8161545b565b8035610a2b81615468565b8051610a2b81615468565b8051610a2b81615475565b8051610a2b81615441565b6000608082840312156108e7578081fd5b600061072082840312156108e7578081fd5b600060808284031215613d9c578081fd5b613da66080615363565b905081518152602082015160208201526040820151613dc48161544e565b60408201526060820151613dd78161544e565b606082015292915050565b600060808284031215613df3578081fd5b613dfd6080615363565b9050815181526020820151613e1181615441565b60208201526040820151613e2481615434565b60408201526060820151613dd781615419565b600060608284031215613e48578081fd5b613e526060615363565b9050815181526020820151613e6681615441565b60208201526040820151613e7981615419565b604082015292915050565b600061028082840312156108e7578081fd5b600060208284031215613ea7578081fd5b8135610a2881615404565b600060208284031215613ec3578081fd5b8151610a2881615404565b600060208284031215613edf578081fd5b8151610a2881615419565b600060208284031215613efb578081fd5b5035919050565b600060208284031215613f13578081fd5b5051919050565b60008060408385031215613f2c578081fd5b823591506020830135613f3e81615404565b809150509250929050565b60008060408385031215613f5b578182fd5b50508035926020909101359150565b600080600060608486031215613f7e578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613fa9578081fd5b8335925060208401356001600160e01b031981168114613fc7578182fd5b91506040840135613fd781615404565b809150509250925092565b6000806107408385031215613ff5578182fd5b823591506140068460208501613d79565b90509250929050565b6000806000806000806000806000610ac08a8c03121561402d578687fd5b8935985061403e8b60208c01613d79565b975061404e8b6107408c01613e84565b96506109c08a013567ffffffffffffffff8082111561406b578687fd5b818c018d601f82011261407c578788fd5b803592508183111561408c578788fd5b8d6020808502830101111561409f578788fd5b60200197509095506140b790508b6109e08c01613d68565b93506140c78b610a608c01613cfa565b92506140d78b610a808c01613cfa565b91506140e78b610aa08c01613cfa565b90509295985092959850929598565b6000806102a08385031215614109578182fd5b823591506140068460208501613e84565b60006020828403121561412b578081fd5b8135601d8110610a28578182fd5b6000806040838503121561414b578182fd5b8235601d8110614159578283fd5b946020939093013593505050565b600060808284031215614178578081fd5b6141826080615363565b823561418d81615404565b8152602083013561419d81615404565b602082015260408301356141b081615404565b604082015260608301356141c381615404565b60608201529392505050565b600061072082840312156141e1578081fd5b6141ec610400615363565b6141f68484613d47565b81526142058460208501613d1b565b60208201526142178460408501613d31565b60408201526142298460608501613d5d565b606082015261423b8460808501613d10565b608082015261424d8460a08501613d1b565b60a082015261425f8460c08501613d52565b60c08201526142718460e08501613d05565b60e082015261010061428585828601613d05565b9082015261012083810151908201526101408084015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a080840151908201526102c061432785828601613e37565b9082015261032061433a85858301613e37565b6102e083015261038061434f86828701613e37565b6103008401526103e061436487828801613e37565b83850152614376876104408801613e37565b61034085015261438a876104a08801613de2565b61036085015261439e876105208801613de2565b828501526143b0876105a08801613de2565b6103a08501526143c4876106208801613d8b565b6103c08501526143d8876106a08801613d8b565b908401525090949350505050565b6000608082840312156143f7578081fd5b610a288383613d8b565b600060808284031215614412578081fd5b610a288383613de2565b60006060828403121561442d578081fd5b610a288383613e37565b600061028080838503121561444a578182fd5b61445381615363565b61445d8585613d26565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600060208284031215614545578081fd5b815160ff81168114610a28578182fd5b6001600160a01b03169052565b6009811061456c57fe5b9052565b61456c816153e3565b61456c816153f0565b600d811061456c57fe5b6013811061456c57fe5b6004811061456c57fe5b6145ab82825161458c565b60208101516145bd6020840182614570565b5060408101516145d06040840182614582565b5060608101516145e36060840182614579565b5060808101516145f66080840182614562565b5060a081015161460960a0840182614570565b5060c081015161461c60c0840182614596565b5060e081015161462f60e0840182614555565b506101008082015161464382850182614555565b505061012081810151908301526101408082015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015190830152610200808201519083015261022080820151908301526102408082015190830152610260808201519083015261028080820151908301526102a080820151908301526102c0808201516146e7828501826148f4565b50506102e08101516103206146fe818501836148f4565b6103008301519150610380614715818601846148f4565b9083015191506103e09061472b858301846148f4565b61034084015192506147416104408601846148f4565b61036084015192506147576104a0860184614882565b830151915061476a610520850183614882565b6103a083015191506147806105a0850183614882565b6103c083015191506147966106208501836147f5565b820151905061373a6106a08401826147f5565b803582526020810135602083015260408101356147c58161544e565b6147ce816153d8565b60408401525060608101356147e28161544e565b6147eb816153d8565b6060840152505050565b805182526020810151602083015261481060408201516153d8565b604083015261482260608201516153d8565b60608301525050565b80358252602081013561483d81615441565b614846816153f0565b6020830152604081013561485981615434565b614862816153e3565b6040830152606081013561487581615419565b8015156060840152505050565b805182526020810151614894816153f0565b602083015260408101516148a7816153e3565b60408301526060908101511515910152565b8035825260208101356148cb81615441565b6148d4816153f0565b602083015260408101356148e781615419565b8015156040840152505050565b805182526020810151614906816153f0565b60208301526040908101511515910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561497e57835183529284019291840191600101614962565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101614a77846153fa565b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b8281526107408101602083810190614fd8908401614fd38387613d3c565b61458c565b614fe281856153a4565b614fef6040850182614570565b5050614ffe60408401846153b1565b61500b6060840182614582565b5061501960608401846153cb565b6150266080840182614579565b506150346080840184615397565b61504160a0840182614562565b5061504f60a08401846153a4565b61505c60c0840182614570565b5061506a60c08401846153be565b61507760e0840182614596565b5061508560e084018461538a565b61010061509481850183614555565b6150a08186018661538a565b9150506101206150b281850183614555565b6101409150808501358285015250610160818501358185015261018091508085013582850152506101a081850135818501526101c091508085013582850152506101e08185013581850152610200915080850135828501525061022081850135818501526102409150808501358285015250610260818501358185015261028091508085013582850152506102a081850135818501526102c091508085013582850152506151666102e084018286016148b9565b50615179610340830161032085016148b9565b61518b6103a0830161038085016148b9565b61519d61040083016103e085016148b9565b6151af610460830161044085016148b9565b6151c16104c083016104a0850161482b565b6151d36105408301610520850161482b565b6151e56105c083016105a0850161482b565b6151f7610640830161062085016147a9565b610b5d6106c083016106a085016147a9565b6107208101610a2b82846145a0565b610760810161522782866145a0565b83610720830152615237836153fa565b82610740830152949350505050565b60808101610a2b82846147f5565b60808101610a2b8284614882565b60608101610a2b82846148f4565b600061028082019050615284828451614579565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff8111828210171561538257600080fd5b604052919050565b60008235610a2881615404565b60008235610a2881615427565b60008235610a2881615434565b60008235610a288161545b565b60008235610a2881615475565b60008235610a2881615441565b806005811061087157fe5b600281106153ed57fe5b50565b600681106153ed57fe5b601d81106153ed57fe5b6001600160a01b03811681146153ed57600080fd5b80151581146153ed57600080fd5b600981106153ed57600080fd5b600281106153ed57600080fd5b600681106153ed57600080fd5b600581106153ed57600080fd5b600d81106153ed57600080fd5b601381106153ed57600080fd5b600481106153ed57600080fdfea26469706673582212208b078f5e72474b4e60a8c0b7d458b2181261df3fc5b997bb33e7433387c5f25764736f6c634300060b0033",
  "linkReferences": {
    "contracts/Core/CERTF/CERTFEncoder.sol": {
      "CERTFEncoder": [
        {
          "length": 20,
          "start": 2618
        },
        {
          "length": 20,
          "start": 4222
        },
        {
          "length": 20,
          "start": 4380
        },
        {
          "length": 20,
          "start": 6019
        },
        {
          "length": 20,
          "start": 6226
        },
        {
          "length": 20,
          "start": 6407
        },
        {
          "length": 20,
          "start": 6739
        },
        {
          "length": 20,
          "start": 7601
        },
        {
          "length": 20,
          "start": 8205
        },
        {
          "length": 20,
          "start": 8355
        },
        {
          "length": 20,
          "start": 8830
        },
        {
          "length": 20,
          "start": 13003
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/Core/CERTF/CERTFEncoder.sol": {
      "CERTFEncoder": [
        {
          "length": 20,
          "start": 2479
        },
        {
          "length": 20,
          "start": 4083
        },
        {
          "length": 20,
          "start": 4241
        },
        {
          "length": 20,
          "start": 5880
        },
        {
          "length": 20,
          "start": 6087
        },
        {
          "length": 20,
          "start": 6268
        },
        {
          "length": 20,
          "start": 6600
        },
        {
          "length": 20,
          "start": 7462
        },
        {
          "length": 20,
          "start": 8066
        },
        {
          "length": 20,
          "start": 8216
        },
        {
          "length": 20,
          "start": 8691
        },
        {
          "length": 20,
          "start": 12864
        }
      ]
    }
  }
}
