{
  "contractName": "CECRegistry",
  "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 ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "",
          "type": "tuple"
        }
      ],
      "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 ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32[]",
          "name": "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 ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CECTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "setTerms",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506000620000276001600160e01b036200007716565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200007b565b3390565b614b31806200008b6000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c8063a17b75b51161019d578063d51dc3dc116100e9578063e8f7ca3e116100a2578063ee43eda11161007c578063ee43eda11461072e578063f2fde38b14610741578063f52f84e114610754578063f82277d2146107675761030c565b8063e8f7ca3e146106f5578063eb01255914610708578063ecef55771461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063e05a66e0146106af578063e50e0ef7146106c2578063e7dc3188146106e25761030c565b8063ba4d2d2811610156578063c364ac9c11610130578063c364ac9c1461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063ba4d2d28146105c9578063bc6a7d76146105ea578063bd1f0a6c1461060a5761030c565b8063a17b75b51461054a578063b02ca0c01461055d578063b0b4888f14610570578063b3c45ebe14610590578063b461dd4f146105a3578063b8282041146105b65761030c565b8063512872f41161025c5780636fe55baa1161021557806375e86ae4116101ef57806375e86ae4146104fc5780637d870dd41461050f578063811322fb146105225780638da5cb5b146105355761030c565b80636fe55baa146104b3578063715018a6146104d357806372540003146104db5761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d57806367fe5d70146104805780636a899b9b1461046d5780636be39bda146104935761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613981565b61077a565b005b610339610334366004613951565b61084f565b6040516103469190614928565b60405180910390f35b61036261035d366004613951565b610876565b604051610346919061405b565b61032461037d366004613981565b6108ed565b6103626103903660046139b0565b610992565b6103246103a33660046139fc565b610a31565b6103bb6103b63660046139fc565b610ae7565b6040516103469190614040565b6103bb6103d6366004613951565b610b64565b6103626103e9366004613951565b610b79565b6103246103fc366004613981565b610b8e565b61033961040f366004613951565b610c69565b6103246104223660046139fc565b610c88565b61043a610435366004613951565b610d2d565b6040516103469190613ffc565b610324610455366004613981565b610d47565b610324610468366004613981565b610e0e565b61036261047b3660046139b0565b610ee9565b61032461048e366004613b5d565b610f07565b6104a66104a1366004613951565b610fcd565b60405161034691906147ae565b6104c66104c13660046139b0565b61106b565b60405161034691906148f8565b61032461110a565b6104ee6104e9366004613951565b611189565b604051610346929190614120565b61036261050a366004613951565b6111b2565b61032461051d366004613b5d565b611586565b610362610530366004613b81565b61163f565b61053d61164d565b6040516103469190613fce565b610362610558366004613951565b61165c565b61036261056b3660046139b0565b611671565b61058361057e3660046139b0565b611692565b60405161034691906148b5565b61053d61059e366004613951565b611731565b6103626105b13660046139b0565b611750565b6103626105c4366004613951565b611796565b6105dc6105d73660046139b0565b611869565b60405161034692919061404b565b6105fd6105f83660046139b0565b611893565b60405161034691906148a7565b610324610618366004613981565b611932565b61032461062b366004613a49565b6119ca565b61036261063e366004613951565b611aca565b6103bb6106513660046138f9565b611cc7565b6106696106643660046139b0565b611cdc565b6040516103469190614a0d565b6103626106843660046139b0565b611cfa565b6103246106973660046139b0565b611d40565b6103246106aa3660046139d1565b611daf565b6103626106bd366004613ba0565b611e4b565b6106d56106d0366004613951565b611e69565b6040516103469190614623565b6103246106f03660046138f9565b611ec7565b6103bb610703366004613981565b611f20565b61053d6107163660046139b0565b611f56565b6106696107293660046139b0565b611fec565b61053d61073c366004613951565b612082565b61032461074f3660046138f9565b6120a2565b610362610762366004613951565b612158565b610324610775366004613a76565b61216d565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d390614295565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a20906108419084908790613fe2565b60405180910390a250505050565b610857613657565b600082815260016020526040902061086e9061227c565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d390614295565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614567565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e259061098590859084908690614064565b60405180910390a1505050565b600082815260016020526040808220905163bb63c3b560e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163bb63c3b5916109d89190869060040161465e565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613969565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614518565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada90869061410b565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d390614138565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d390614195565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce9061098590859084908690614064565b610c71613657565b600082815260016020526040902061086e90612574565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614518565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada90869061410b565b600081815260016020526040902060609061086e90612896565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d390614295565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb906108419084908790613fe2565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d3906144bb565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d390614383565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce9061098590859084908690614064565b6000828152600160205260408120610a28908363ffffffff61292c16565b6000828152600160208190526040909120015482906001600160a01b0316331480610f445750610f44816000356001600160e01b03191633610ae7565b610f605760405162461bcd60e51b81526004016107d390614295565b610f8c610f7236849003840184613dfa565b60008581526001602052604090209063ffffffff61294216565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f8360200135604051610fc0919061405b565b60405180910390a2505050565b610fd56136f1565b600082815260016020526040908190209051630f4835d760e41b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163f4835d709161101a919060040161405b565b6102a06040518083038186803b15801561103357600080fd5b505af4158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190613c36565b611073613773565b6000838152600160205260409081902090516320384a4b60e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__916380e1292c916110ba9190869060040161465e565b60606040518083038186803b1580156110d257600080fd5b505af41580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613daf565b611112612c70565b6000546001600160a01b0390811691161461113f5760405162461bcd60e51b81526004016107d390614429565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c81111561119d57fe5b92505067ffffffffffffffff83169050915091565b60006111bc613796565b6111dc8372636f6e74726163745265666572656e63655f3160681b611893565b8051909150158015906111fe57506003816060015160048111156111fc57fe5b145b1561157d5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b229061123690859060040161405b565b60206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613931565b6112a25760405162461bcd60e51b81526004016107d3906145bb565b60006112bd866b65786572636973654461746560a01b610ee9565b905060006112e4877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b611fec565b60ff1660058111156112f257fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b815260040161132291906140e6565b60206040518083038186803b15801561133a57600080fd5b505afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190613ef7565b60ff16600581111561138057fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016113b091906140c3565b60206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190613969565b9050831561142157611413601b42611e4b565b975050505050505050610871565b600083600581111561142f57fe5b14158015611452575082600581111561144457fe5b82600581111561145057fe5b145b1561157657600182600581111561146557fe5b141561147657611413601a82611e4b565b600282600581111561148457fe5b141561152e57611492613773565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a90600401614083565b60606040518083038186803b1580156114d657600080fd5b505afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190613daf565b905061151f601a6106bd8385612c74565b98505050505050505050610871565b600382600581111561153c57fe5b14156115765761154a613773565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a906004016140a0565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806115c357506115c3816000356001600160e01b03191633610ae7565b6115df5760405162461bcd60e51b81526004016107d390614295565b61160b6115f136849003840184613dfa565b60008581526001602052604090209063ffffffff612da016565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec68360200135604051610fc0919061405b565b600081601c81111561086e57fe5b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b61169a6137bd565b600083815260016020526040908190209051638155522160e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__916381555221916116e19190869060040161465e565b60806040518083038186803b1580156116f957600080fd5b505af415801561170d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613d5d565b600090815260016020819052604090912001546001600160a01b031690565b60008281526001602052604080822090516309b9f6ab60e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__916326e7daac916109d89190869060040161465e565b6000818152600160205260408120816117ae84613096565b600583015460009081526003840160205260409020546004840154919250901580156117d8575081155b156117ea575060009250610871915050565b6000806117f684611189565b9150915060008061180685611189565b9150915080600014806118225750821580159061182257508083105b8061184657508083148015611846575061183b8261163f565b6118448561163f565b105b1561185a5785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b61189b613796565b60008381526001602052604090819020905163bce57f1b60e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163bce57f1b916118e29190869060040161465e565b60806040518083038186803b1580156118fa57600080fd5b505af415801561190e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613d42565b611949826000356001600160e01b03191633610ae7565b6119655760405162461bcd60e51b81526004016107d390614238565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e259061098590859084908690614064565b6000828152600160208190526040909120015482906001600160a01b0316331480611a075750611a07816000356001600160e01b03191633610ae7565b611a235760405162461bcd60e51b81526004016107d390614295565b60008381526001602052604090819020905163215ac35960e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163856b0d6491611a6a9190869060040161466c565b60006040518083038186803b158015611a8257600080fd5b505af4158015611a96573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b60008181526001602081905260408220015482906001600160a01b0316331480611b065750611b06816000356001600160e01b03191633610ae7565b611b225760405162461bcd60e51b81526004016107d390614295565b600083815260016020526040812090611b3a85613096565b60058301546000908152600384016020526040902054600484015491925090158015611b64575081155b15611b765750600093506108e7915050565b600080611b8284611189565b91509150600080611b9285611189565b9150915084861415611c07578260028801600086601c811115611bb157fe5b601c811115611bbc57fe5b8152602081019190915260400160002055600487015460058801541415611bee5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c1d57508215801590611c1d57508083105b80611c4157508083148015611c415750611c368261163f565b611c3f8561163f565b105b15611c84578260028801600086601c811115611c5957fe5b601c811115611c6457fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611c98575060048701546005880154145b15611cae5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff61309c16565b6000828152600160205260408082209051632802ab6f60e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163a00aadbc916109d89190869060040161465e565b6000828152600160208190526040909120015482906001600160a01b0316331480611d7d5750611d7d816000356001600160e01b03191633610ae7565b611d995760405162461bcd60e51b81526004016107d390614295565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dec5750611dec816000356001600160e01b03191633610ae7565b611e085760405162461bcd60e51b81526004016107d390614295565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b60008160f884601c811115611e5c57fe5b60ff16901b179392505050565b611e716137de565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611ecf612c70565b6000546001600160a01b03908116911614611efc5760405162461bcd60e51b81526004016107d390614429565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b600082815260016020526040808220905163cabb242960e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163cabb242991611f9c9190869060040161465e565b60206040518083038186803b158015611fb457600080fd5b505af4158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613915565b600082815260016020526040808220905163a5be46bb60e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163a5be46bb916120329190869060040161465e565b60206040518083038186803b15801561204a57600080fd5b505af415801561205e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613ef7565b60009081526001602052604090205461010090046001600160a01b031690565b6120aa612c70565b6000546001600160a01b039081169116146120d75760405162461bcd60e51b81526004016107d390614429565b6001600160a01b0381166120fd5760405162461bcd60e51b81526004016107d3906141f2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b3360009081526002602052604090205460ff1661219c5760405162461bcd60e51b81526004016107d39061432f565b6121fa896121af368a90038a018a613dfa565b8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506121f29250505036899003890189613bce565b878787613148565b60008981526001602052604090819020905163215ac35960e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163856b0d649161224191908c9060040161466c565b60006040518083038186803b15801561225957600080fd5b505af415801561226d573d6000803e3d6000fd5b50505050505050505050505050565b612284613657565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c757fe5b60058111156122d257fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257c613657565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125c157fe5b60058111156125cc57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b757600080fd5b506040519080825280602002602001820160405280156128e1578160200160208202803683370190505b50905060005b6004840154811015612925576000818152600385016020526040902054825183908390811061291257fe5b60209081029190910101526001016128e7565b5092915050565b6000908152600e91909101602052604090205490565b61297b8274465f636f6e7472616374506572666f726d616e636560581b60f88460000151600581111561297157fe5b60ff16901b6132cd565b61299c826b465f7374617475734461746560a01b836020015160001b6132cd565b6129c48272465f6e6f6e506572666f726d696e674461746560681b836040015160001b6132cd565b6129e7826d465f6d617475726974794461746560901b836060015160001b6132cd565b612a0a826d465f65786572636973654461746560901b836080015160001b6132cd565b612a308270465f7465726d696e6174696f6e4461746560781b8360a0015160001b6132cd565b612a5882721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b6132cd565b612a7f82701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b6132cd565b612aa1826b1197d999595058d8dc9d595960a21b83610120015160001b6132cd565b612acc8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b6132cd565b612aff827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b6132cd565b612b32827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b6132cd565b612b65827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b6132cd565b612b8b826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b6132cd565b612bb38271465f65786572636973655175616e7469747960701b836101e0015160001b6132cd565b612bd38269465f7175616e7469747960b01b83610200015160001b6132cd565b612bfc82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b6132cd565b612c20826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b6132cd565b612c488271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b6132cd565b612c6c826e465f6c617374436f75706f6e44617960881b8360c0015160001b6132cd565b5050565b3390565b6000808084602001516005811115612c8857fe5b1415612ca8578351612ca190849063ffffffff61330316565b9050610a28565b600184602001516005811115612cba57fe5b1415612cd6578351612ca190849060070263ffffffff61330316565b600284602001516005811115612ce857fe5b1415612d01578351612ca190849063ffffffff61331816565b600384602001516005811115612d1357fe5b1415612d2f578351612ca190849060030263ffffffff61331816565b600484602001516005811115612d4157fe5b1415612d5d578351612ca190849060060263ffffffff61331816565b600584602001516005811115612d6f57fe5b1415612d88578351612ca190849063ffffffff61339416565b60405162461bcd60e51b81526004016107d39061445e565b612dcd8272636f6e7472616374506572666f726d616e636560681b60f88460000151600581111561297157fe5b612dec82697374617475734461746560b01b836020015160001b6132cd565b612e1282706e6f6e506572666f726d696e674461746560781b836040015160001b6132cd565b612e33826b6d617475726974794461746560a01b836060015160001b6132cd565b612e54826b65786572636973654461746560a01b836080015160001b6132cd565b612e78826e7465726d696e6174696f6e4461746560881b8360a0015160001b6132cd565b612e9e82701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b6132cd565b612ec3826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b6132cd565b612ee382691999595058d8dc9d595960b21b83610120015160001b6132cd565b612f0c82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b6132cd565b612f3b827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b6132cd565b612f6a82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b6132cd565b612f9d827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b6132cd565b612fc1826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b6132cd565b612fe7826f65786572636973655175616e7469747960801b836101e0015160001b6132cd565b61300582677175616e7469747960c01b83610200015160001b6132cd565b61302c827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b6132cd565b61304e826b36b0b933b4b72330b1ba37b960a11b83610240015160001b6132cd565b613074826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b6132cd565b612c6c826c6c617374436f75706f6e44617960981b8360c0015160001b6132cd565b50600090565b600072636f6e7472616374506572666f726d616e636560681b8214156130ed575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b821415613140575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b6000878152600160205260409020805460ff16156131785760405162461bcd60e51b81526004016107d3906142e4565b6001600160a01b03831660009081526002602052604090205460ff1615156001146131b55760405162461bcd60e51b81526004016107d3906143e0565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b03191661010088841602178455830180549092169085161790556132538188612da0565b613263818863ffffffff61294216565b613273818763ffffffff6133bb16565b6001600160a01b0382161561328c5761328c8883613423565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd89646886040516132bb919061405b565b60405180910390a15050505050505050565b6000828152600e840160205260409020548114156132ea576132fe565b6000828152600e8401602052604090208190555b505050565b620151808102820182811015610a2b57600080fd5b600080808061332c62015180875b0461349a565b600c9188016000198101838104949094019650945092509006600101915060006133568484613530565b905080821115613364578091505b620151808706620151806133798686866135b6565b020194508685101561338a57600080fd5b5050505092915050565b60008080806133a66201518087613326565b91870194509250905060006133568484613530565b60005b81518110156132fe576000801b8282815181106133d757fe5b602002602001015114156133ea576132fe565b8181815181106133f657fe5b602090810291909101810151600083815260038601909252604090912055600101600483018190556133be565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659161348e9161410b565b60405180910390a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816134f157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806135415750816003145b8061354c5750816005145b806135575750816007145b806135625750816008145b8061356d575081600a145b80613578575081600c145b156135855750601f610a2b565b816002146135955750601e610a2b565b61359e83613632565b6135a957601c6135ac565b601d5b60ff169392505050565b60006107b28410156135c757600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161360357fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b60006004820615801561364757506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516101e081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613761613796565b815260200161376e613796565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b6040805160808101825260008082526020820181905290918201908152602001600061376e565b60408051608081019091526000808252602082019081526020016000613789565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b81614a98565b80518015158114610a2b57600080fd5b8051610a2b81614aad565b8051610a2b81614aba565b8035610a2b81614ac7565b8051610a2b81614ac7565b8051610a2b81614ae1565b8035610a2b81614aee565b8051610a2b81614aee565b6000608082840312156108e7578081fd5b60006102a082840312156108e7578081fd5b6000608082840312156138a1578081fd5b6138ab6080614a1b565b9050815181526020820151602082015260408201516138c981614ad4565b604082015260608201516138dc81614ad4565b606082015292915050565b600061028082840312156108e7578081fd5b60006020828403121561390a578081fd5b8135610a2881614a98565b600060208284031215613926578081fd5b8151610a2881614a98565b600060208284031215613942578081fd5b81518015158114610a28578182fd5b600060208284031215613962578081fd5b5035919050565b60006020828403121561397a578081fd5b5051919050565b60008060408385031215613993578081fd5b8235915060208301356139a581614a98565b809150509250929050565b600080604083850312156139c2578182fd5b50508035926020909101359150565b6000806000606084860312156139e5578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613a10578081fd5b8335925060208401356001600160e01b031981168114613a2e578182fd5b91506040840135613a3e81614a98565b809150509250925092565b6000806102c08385031215613a5c578182fd5b82359150613a6d846020850161387e565b90509250929050565b60008060008060008060008060006106408a8c031215613a94578687fd5b89359850613aa58b60208c0161387e565b9750613ab58b6102c08c016138e7565b96506105408a013567ffffffffffffffff80821115613ad2578687fd5b818c018d601f820112613ae3578788fd5b8035925081831115613af3578788fd5b8d60208085028301011115613b06578788fd5b6020019750909550613b1e90508b6105608c0161386d565b9350613b2e8b6105e08c01613805565b9250613b3e8b6106008c01613805565b9150613b4e8b6106208c01613805565b90509295985092959850929598565b6000806102a08385031215613b70578182fd5b82359150613a6d84602085016138e7565b600060208284031215613b92578081fd5b8135601d8110610a28578182fd5b60008060408385031215613bb2578182fd5b8235601d8110613bc0578283fd5b946020939093013593505050565b600060808284031215613bdf578081fd5b613be96080614a1b565b8235613bf481614a98565b81526020830135613c0481614a98565b60208201526040830135613c1781614a98565b60408201526060830135613c2a81614a98565b60608201529392505050565b60006102a08284031215613c48578081fd5b613c536101e0614a1b565b613c5d8484613862565b8152613c6c846020850161382b565b6020820152613c7e846040850161384c565b6040820152613c908460608501613841565b6060820152613ca28460808501613820565b6080820152613cb48460a0850161382b565b60a0820152613cc68460c08501613841565b60c0820152613cd88460e0850161382b565b60e0820152610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a0613d2385828601613890565b90820152613d35846102208501613890565b6101c08201529392505050565b600060808284031215613d53578081fd5b610a288383613890565b600060808284031215613d6e578081fd5b613d786080614a1b565b825181526020830151613d8a81614ac7565b60208201526040830151613d9d81614aba565b6040820152613c2a8460608501613810565b600060608284031215613dc0578081fd5b613dca6060614a1b565b825181526020830151613ddc81614ac7565b6020820152613dee8460408501613810565b60408201529392505050565b6000610280808385031215613e0d578182fd5b613e1681614a1b565b613e208585613836565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600060208284031215613f08578081fd5b815160ff81168114610a28578182fd5b60098110613f2257fe5b9052565b613f2281614a81565b613f2281614a8e565b600d8110613f2257fe5b60138110613f2257fe5b80358252602081013560208301526040810135613f6881614ad4565b613f7181614a76565b6040840152506060810135613f8581614ad4565b613f8e81614a76565b6060840152505050565b8051825260208101516020830152613fb36040820151614a76565b6040830152613fc56060820151614a76565b60608301525050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561403457835183529284019291840191600101614018565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101601d841061412e57fe5b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b8281526102c0810160208381019061468f90840161468a8387613857565b613f42565b6146998185614a4f565b6146a66040850182613f26565b50506146b56040840184614a69565b6146c26060840182613f38565b506146d06060840184614a5c565b6146dd6080840182613f2f565b506146eb6080840184614a42565b6146f860a0840182613f18565b5061470660a0840184614a4f565b61471360c0840182613f26565b5061472160c0840184614a5c565b61472e60e0840182613f2f565b5061473c60e0840184614a4f565b61010061474b81850183613f26565b61012091508085013582850152506101408185013581850152610160915080850135828501525061018081850135818501526101a0915080850135828501525061479b6101c08401828601613f4c565b50610b5d61024083016102208501613f4c565b60006102a0820190506147c2828451613f42565b60208301516147d46020840182613f26565b5060408301516147e76040840182613f38565b5060608301516147fa6060840182613f2f565b50608083015161480d6080840182613f18565b5060a083015161482060a0840182613f26565b5060c083015161483360c0840182613f2f565b5060e083015161484660e0840182613f26565b50610100838101519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a08084015161489182850182613f98565b50506101c0830151612925610220840182613f98565b60808101610a2b8284613f98565b81518152602082015160808201906148cc81614a8e565b602083015260408301516148df81614a81565b8060408401525060608301511515606083015292915050565b815181526020820151606082019061490f81614a8e565b8060208401525060408301511515604083015292915050565b60006102808201905061493c828451613f2f565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614a3a57600080fd5b604052919050565b60008235610a2881614aad565b60008235610a2881614aba565b60008235610a2881614ac7565b60008235610a2881614ae1565b806005811061087157fe5b60028110614a8b57fe5b50565b60068110614a8b57fe5b6001600160a01b0381168114614a8b57600080fd5b60098110614a8b57600080fd5b60028110614a8b57600080fd5b60068110614a8b57600080fd5b60058110614a8b57600080fd5b600d8110614a8b57600080fd5b60138110614a8b57600080fdfea264697066735822122093868d92bdfce04c03e325233edadfe43228716d24b1a1d7941ab65f29dc5e3f64736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c8063a17b75b51161019d578063d51dc3dc116100e9578063e8f7ca3e116100a2578063ee43eda11161007c578063ee43eda11461072e578063f2fde38b14610741578063f52f84e114610754578063f82277d2146107675761030c565b8063e8f7ca3e146106f5578063eb01255914610708578063ecef55771461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063e05a66e0146106af578063e50e0ef7146106c2578063e7dc3188146106e25761030c565b8063ba4d2d2811610156578063c364ac9c11610130578063c364ac9c1461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063ba4d2d28146105c9578063bc6a7d76146105ea578063bd1f0a6c1461060a5761030c565b8063a17b75b51461054a578063b02ca0c01461055d578063b0b4888f14610570578063b3c45ebe14610590578063b461dd4f146105a3578063b8282041146105b65761030c565b8063512872f41161025c5780636fe55baa1161021557806375e86ae4116101ef57806375e86ae4146104fc5780637d870dd41461050f578063811322fb146105225780638da5cb5b146105355761030c565b80636fe55baa146104b3578063715018a6146104d357806372540003146104db5761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d57806367fe5d70146104805780636a899b9b1461046d5780636be39bda146104935761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613981565b61077a565b005b610339610334366004613951565b61084f565b6040516103469190614928565b60405180910390f35b61036261035d366004613951565b610876565b604051610346919061405b565b61032461037d366004613981565b6108ed565b6103626103903660046139b0565b610992565b6103246103a33660046139fc565b610a31565b6103bb6103b63660046139fc565b610ae7565b6040516103469190614040565b6103bb6103d6366004613951565b610b64565b6103626103e9366004613951565b610b79565b6103246103fc366004613981565b610b8e565b61033961040f366004613951565b610c69565b6103246104223660046139fc565b610c88565b61043a610435366004613951565b610d2d565b6040516103469190613ffc565b610324610455366004613981565b610d47565b610324610468366004613981565b610e0e565b61036261047b3660046139b0565b610ee9565b61032461048e366004613b5d565b610f07565b6104a66104a1366004613951565b610fcd565b60405161034691906147ae565b6104c66104c13660046139b0565b61106b565b60405161034691906148f8565b61032461110a565b6104ee6104e9366004613951565b611189565b604051610346929190614120565b61036261050a366004613951565b6111b2565b61032461051d366004613b5d565b611586565b610362610530366004613b81565b61163f565b61053d61164d565b6040516103469190613fce565b610362610558366004613951565b61165c565b61036261056b3660046139b0565b611671565b61058361057e3660046139b0565b611692565b60405161034691906148b5565b61053d61059e366004613951565b611731565b6103626105b13660046139b0565b611750565b6103626105c4366004613951565b611796565b6105dc6105d73660046139b0565b611869565b60405161034692919061404b565b6105fd6105f83660046139b0565b611893565b60405161034691906148a7565b610324610618366004613981565b611932565b61032461062b366004613a49565b6119ca565b61036261063e366004613951565b611aca565b6103bb6106513660046138f9565b611cc7565b6106696106643660046139b0565b611cdc565b6040516103469190614a0d565b6103626106843660046139b0565b611cfa565b6103246106973660046139b0565b611d40565b6103246106aa3660046139d1565b611daf565b6103626106bd366004613ba0565b611e4b565b6106d56106d0366004613951565b611e69565b6040516103469190614623565b6103246106f03660046138f9565b611ec7565b6103bb610703366004613981565b611f20565b61053d6107163660046139b0565b611f56565b6106696107293660046139b0565b611fec565b61053d61073c366004613951565b612082565b61032461074f3660046138f9565b6120a2565b610362610762366004613951565b612158565b610324610775366004613a76565b61216d565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d390614295565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a20906108419084908790613fe2565b60405180910390a250505050565b610857613657565b600082815260016020526040902061086e9061227c565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d390614295565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614567565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e259061098590859084908690614064565b60405180910390a1505050565b600082815260016020526040808220905163bb63c3b560e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163bb63c3b5916109d89190869060040161465e565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613969565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614518565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada90869061410b565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d390614138565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d390614195565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce9061098590859084908690614064565b610c71613657565b600082815260016020526040902061086e90612574565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614518565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada90869061410b565b600081815260016020526040902060609061086e90612896565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d390614295565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb906108419084908790613fe2565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d3906144bb565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d390614383565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce9061098590859084908690614064565b6000828152600160205260408120610a28908363ffffffff61292c16565b6000828152600160208190526040909120015482906001600160a01b0316331480610f445750610f44816000356001600160e01b03191633610ae7565b610f605760405162461bcd60e51b81526004016107d390614295565b610f8c610f7236849003840184613dfa565b60008581526001602052604090209063ffffffff61294216565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f8360200135604051610fc0919061405b565b60405180910390a2505050565b610fd56136f1565b600082815260016020526040908190209051630f4835d760e41b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163f4835d709161101a919060040161405b565b6102a06040518083038186803b15801561103357600080fd5b505af4158015611047573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190613c36565b611073613773565b6000838152600160205260409081902090516320384a4b60e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__916380e1292c916110ba9190869060040161465e565b60606040518083038186803b1580156110d257600080fd5b505af41580156110e6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613daf565b611112612c70565b6000546001600160a01b0390811691161461113f5760405162461bcd60e51b81526004016107d390614429565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c81111561119d57fe5b92505067ffffffffffffffff83169050915091565b60006111bc613796565b6111dc8372636f6e74726163745265666572656e63655f3160681b611893565b8051909150158015906111fe57506003816060015160048111156111fc57fe5b145b1561157d5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b229061123690859060040161405b565b60206040518083038186803b15801561124e57600080fd5b505afa158015611262573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112869190613931565b6112a25760405162461bcd60e51b81526004016107d3906145bb565b60006112bd866b65786572636973654461746560a01b610ee9565b905060006112e4877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b611fec565b60ff1660058111156112f257fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b815260040161132291906140e6565b60206040518083038186803b15801561133a57600080fd5b505afa15801561134e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113729190613ef7565b60ff16600581111561138057fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016113b091906140c3565b60206040518083038186803b1580156113c857600080fd5b505afa1580156113dc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114009190613969565b9050831561142157611413601b42611e4b565b975050505050505050610871565b600083600581111561142f57fe5b14158015611452575082600581111561144457fe5b82600581111561145057fe5b145b1561157657600182600581111561146557fe5b141561147657611413601a82611e4b565b600282600581111561148457fe5b141561152e57611492613773565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a90600401614083565b60606040518083038186803b1580156114d657600080fd5b505afa1580156114ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150e9190613daf565b905061151f601a6106bd8385612c74565b98505050505050505050610871565b600382600581111561153c57fe5b14156115765761154a613773565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906114be908a906004016140a0565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806115c357506115c3816000356001600160e01b03191633610ae7565b6115df5760405162461bcd60e51b81526004016107d390614295565b61160b6115f136849003840184613dfa565b60008581526001602052604090209063ffffffff612da016565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec68360200135604051610fc0919061405b565b600081601c81111561086e57fe5b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b61169a6137bd565b600083815260016020526040908190209051638155522160e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__916381555221916116e19190869060040161465e565b60806040518083038186803b1580156116f957600080fd5b505af415801561170d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613d5d565b600090815260016020819052604090912001546001600160a01b031690565b60008281526001602052604080822090516309b9f6ab60e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__916326e7daac916109d89190869060040161465e565b6000818152600160205260408120816117ae84613096565b600583015460009081526003840160205260409020546004840154919250901580156117d8575081155b156117ea575060009250610871915050565b6000806117f684611189565b9150915060008061180685611189565b9150915080600014806118225750821580159061182257508083105b8061184657508083148015611846575061183b8261163f565b6118448561163f565b105b1561185a5785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b61189b613796565b60008381526001602052604090819020905163bce57f1b60e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163bce57f1b916118e29190869060040161465e565b60806040518083038186803b1580156118fa57600080fd5b505af415801561190e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613d42565b611949826000356001600160e01b03191633610ae7565b6119655760405162461bcd60e51b81526004016107d390614238565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e259061098590859084908690614064565b6000828152600160208190526040909120015482906001600160a01b0316331480611a075750611a07816000356001600160e01b03191633610ae7565b611a235760405162461bcd60e51b81526004016107d390614295565b60008381526001602052604090819020905163215ac35960e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163856b0d6491611a6a9190869060040161466c565b60006040518083038186803b158015611a8257600080fd5b505af4158015611a96573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b60008181526001602081905260408220015482906001600160a01b0316331480611b065750611b06816000356001600160e01b03191633610ae7565b611b225760405162461bcd60e51b81526004016107d390614295565b600083815260016020526040812090611b3a85613096565b60058301546000908152600384016020526040902054600484015491925090158015611b64575081155b15611b765750600093506108e7915050565b600080611b8284611189565b91509150600080611b9285611189565b9150915084861415611c07578260028801600086601c811115611bb157fe5b601c811115611bbc57fe5b8152602081019190915260400160002055600487015460058801541415611bee5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c1d57508215801590611c1d57508083105b80611c4157508083148015611c415750611c368261163f565b611c3f8561163f565b105b15611c84578260028801600086601c811115611c5957fe5b601c811115611c6457fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611c98575060048701546005880154145b15611cae5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff61309c16565b6000828152600160205260408082209051632802ab6f60e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163a00aadbc916109d89190869060040161465e565b6000828152600160208190526040909120015482906001600160a01b0316331480611d7d5750611d7d816000356001600160e01b03191633610ae7565b611d995760405162461bcd60e51b81526004016107d390614295565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dec5750611dec816000356001600160e01b03191633610ae7565b611e085760405162461bcd60e51b81526004016107d390614295565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b60008160f884601c811115611e5c57fe5b60ff16901b179392505050565b611e716137de565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611ecf612c70565b6000546001600160a01b03908116911614611efc5760405162461bcd60e51b81526004016107d390614429565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b600082815260016020526040808220905163cabb242960e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163cabb242991611f9c9190869060040161465e565b60206040518083038186803b158015611fb457600080fd5b505af4158015611fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613915565b600082815260016020526040808220905163a5be46bb60e01b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163a5be46bb916120329190869060040161465e565b60206040518083038186803b15801561204a57600080fd5b505af415801561205e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613ef7565b60009081526001602052604090205461010090046001600160a01b031690565b6120aa612c70565b6000546001600160a01b039081169116146120d75760405162461bcd60e51b81526004016107d390614429565b6001600160a01b0381166120fd5760405162461bcd60e51b81526004016107d3906141f2565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b3360009081526002602052604090205460ff1661219c5760405162461bcd60e51b81526004016107d39061432f565b6121fa896121af368a90038a018a613dfa565b8888808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152506121f29250505036899003890189613bce565b878787613148565b60008981526001602052604090819020905163215ac35960e21b815273__$6ff22f96d3b2cd35acb8be8b05224cf18b$__9163856b0d649161224191908c9060040161466c565b60006040518083038186803b15801561225957600080fd5b505af415801561226d573d6000803e3d6000fd5b50505050505050505050505050565b612284613657565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c757fe5b60058111156122d257fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257c613657565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125c157fe5b60058111156125cc57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b757600080fd5b506040519080825280602002602001820160405280156128e1578160200160208202803683370190505b50905060005b6004840154811015612925576000818152600385016020526040902054825183908390811061291257fe5b60209081029190910101526001016128e7565b5092915050565b6000908152600e91909101602052604090205490565b61297b8274465f636f6e7472616374506572666f726d616e636560581b60f88460000151600581111561297157fe5b60ff16901b6132cd565b61299c826b465f7374617475734461746560a01b836020015160001b6132cd565b6129c48272465f6e6f6e506572666f726d696e674461746560681b836040015160001b6132cd565b6129e7826d465f6d617475726974794461746560901b836060015160001b6132cd565b612a0a826d465f65786572636973654461746560901b836080015160001b6132cd565b612a308270465f7465726d696e6174696f6e4461746560781b8360a0015160001b6132cd565b612a5882721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b6132cd565b612a7f82701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b6132cd565b612aa1826b1197d999595058d8dc9d595960a21b83610120015160001b6132cd565b612acc8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b6132cd565b612aff827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b6132cd565b612b32827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b6132cd565b612b65827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b6132cd565b612b8b826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b6132cd565b612bb38271465f65786572636973655175616e7469747960701b836101e0015160001b6132cd565b612bd38269465f7175616e7469747960b01b83610200015160001b6132cd565b612bfc82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b6132cd565b612c20826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b6132cd565b612c488271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b6132cd565b612c6c826e465f6c617374436f75706f6e44617960881b8360c0015160001b6132cd565b5050565b3390565b6000808084602001516005811115612c8857fe5b1415612ca8578351612ca190849063ffffffff61330316565b9050610a28565b600184602001516005811115612cba57fe5b1415612cd6578351612ca190849060070263ffffffff61330316565b600284602001516005811115612ce857fe5b1415612d01578351612ca190849063ffffffff61331816565b600384602001516005811115612d1357fe5b1415612d2f578351612ca190849060030263ffffffff61331816565b600484602001516005811115612d4157fe5b1415612d5d578351612ca190849060060263ffffffff61331816565b600584602001516005811115612d6f57fe5b1415612d88578351612ca190849063ffffffff61339416565b60405162461bcd60e51b81526004016107d39061445e565b612dcd8272636f6e7472616374506572666f726d616e636560681b60f88460000151600581111561297157fe5b612dec82697374617475734461746560b01b836020015160001b6132cd565b612e1282706e6f6e506572666f726d696e674461746560781b836040015160001b6132cd565b612e33826b6d617475726974794461746560a01b836060015160001b6132cd565b612e54826b65786572636973654461746560a01b836080015160001b6132cd565b612e78826e7465726d696e6174696f6e4461746560881b8360a0015160001b6132cd565b612e9e82701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b6132cd565b612ec3826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b6132cd565b612ee382691999595058d8dc9d595960b21b83610120015160001b6132cd565b612f0c82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b6132cd565b612f3b827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b6132cd565b612f6a82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b6132cd565b612f9d827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b6132cd565b612fc1826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b6132cd565b612fe7826f65786572636973655175616e7469747960801b836101e0015160001b6132cd565b61300582677175616e7469747960c01b83610200015160001b6132cd565b61302c827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b6132cd565b61304e826b36b0b933b4b72330b1ba37b960a11b83610240015160001b6132cd565b613074826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b6132cd565b612c6c826c6c617374436f75706f6e44617960981b8360c0015160001b6132cd565b50600090565b600072636f6e7472616374506572666f726d616e636560681b8214156130ed575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b821415613140575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b6000878152600160205260409020805460ff16156131785760405162461bcd60e51b81526004016107d3906142e4565b6001600160a01b03831660009081526002602052604090205460ff1615156001146131b55760405162461bcd60e51b81526004016107d3906143e0565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b03191661010088841602178455830180549092169085161790556132538188612da0565b613263818863ffffffff61294216565b613273818763ffffffff6133bb16565b6001600160a01b0382161561328c5761328c8883613423565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd89646886040516132bb919061405b565b60405180910390a15050505050505050565b6000828152600e840160205260409020548114156132ea576132fe565b6000828152600e8401602052604090208190555b505050565b620151808102820182811015610a2b57600080fd5b600080808061332c62015180875b0461349a565b600c9188016000198101838104949094019650945092509006600101915060006133568484613530565b905080821115613364578091505b620151808706620151806133798686866135b6565b020194508685101561338a57600080fd5b5050505092915050565b60008080806133a66201518087613326565b91870194509250905060006133568484613530565b60005b81518110156132fe576000801b8282815181106133d757fe5b602002602001015114156133ea576132fe565b8181815181106133f657fe5b602090810291909101810151600083815260038601909252604090912055600101600483018190556133be565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659161348e9161410b565b60405180910390a35050565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f84605002816134f157fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806135415750816003145b8061354c5750816005145b806135575750816007145b806135625750816008145b8061356d575081600a145b80613578575081600c145b156135855750601f610a2b565b816002146135955750601e610a2b565b61359e83613632565b6135a957601c6135ac565b601d5b60ff169392505050565b60006107b28410156135c757600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161360357fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b60006004820615801561364757506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b604080516101e081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001613761613796565b815260200161376e613796565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b6040805160808101825260008082526020820181905290918201908152602001600061376e565b60408051608081019091526000808252602082019081526020016000613789565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b81614a98565b80518015158114610a2b57600080fd5b8051610a2b81614aad565b8051610a2b81614aba565b8035610a2b81614ac7565b8051610a2b81614ac7565b8051610a2b81614ae1565b8035610a2b81614aee565b8051610a2b81614aee565b6000608082840312156108e7578081fd5b60006102a082840312156108e7578081fd5b6000608082840312156138a1578081fd5b6138ab6080614a1b565b9050815181526020820151602082015260408201516138c981614ad4565b604082015260608201516138dc81614ad4565b606082015292915050565b600061028082840312156108e7578081fd5b60006020828403121561390a578081fd5b8135610a2881614a98565b600060208284031215613926578081fd5b8151610a2881614a98565b600060208284031215613942578081fd5b81518015158114610a28578182fd5b600060208284031215613962578081fd5b5035919050565b60006020828403121561397a578081fd5b5051919050565b60008060408385031215613993578081fd5b8235915060208301356139a581614a98565b809150509250929050565b600080604083850312156139c2578182fd5b50508035926020909101359150565b6000806000606084860312156139e5578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613a10578081fd5b8335925060208401356001600160e01b031981168114613a2e578182fd5b91506040840135613a3e81614a98565b809150509250925092565b6000806102c08385031215613a5c578182fd5b82359150613a6d846020850161387e565b90509250929050565b60008060008060008060008060006106408a8c031215613a94578687fd5b89359850613aa58b60208c0161387e565b9750613ab58b6102c08c016138e7565b96506105408a013567ffffffffffffffff80821115613ad2578687fd5b818c018d601f820112613ae3578788fd5b8035925081831115613af3578788fd5b8d60208085028301011115613b06578788fd5b6020019750909550613b1e90508b6105608c0161386d565b9350613b2e8b6105e08c01613805565b9250613b3e8b6106008c01613805565b9150613b4e8b6106208c01613805565b90509295985092959850929598565b6000806102a08385031215613b70578182fd5b82359150613a6d84602085016138e7565b600060208284031215613b92578081fd5b8135601d8110610a28578182fd5b60008060408385031215613bb2578182fd5b8235601d8110613bc0578283fd5b946020939093013593505050565b600060808284031215613bdf578081fd5b613be96080614a1b565b8235613bf481614a98565b81526020830135613c0481614a98565b60208201526040830135613c1781614a98565b60408201526060830135613c2a81614a98565b60608201529392505050565b60006102a08284031215613c48578081fd5b613c536101e0614a1b565b613c5d8484613862565b8152613c6c846020850161382b565b6020820152613c7e846040850161384c565b6040820152613c908460608501613841565b6060820152613ca28460808501613820565b6080820152613cb48460a0850161382b565b60a0820152613cc68460c08501613841565b60c0820152613cd88460e0850161382b565b60e0820152610100838101519082015261012080840151908201526101408084015190820152610160808401519082015261018080840151908201526101a0613d2385828601613890565b90820152613d35846102208501613890565b6101c08201529392505050565b600060808284031215613d53578081fd5b610a288383613890565b600060808284031215613d6e578081fd5b613d786080614a1b565b825181526020830151613d8a81614ac7565b60208201526040830151613d9d81614aba565b6040820152613c2a8460608501613810565b600060608284031215613dc0578081fd5b613dca6060614a1b565b825181526020830151613ddc81614ac7565b6020820152613dee8460408501613810565b60408201529392505050565b6000610280808385031215613e0d578182fd5b613e1681614a1b565b613e208585613836565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b600060208284031215613f08578081fd5b815160ff81168114610a28578182fd5b60098110613f2257fe5b9052565b613f2281614a81565b613f2281614a8e565b600d8110613f2257fe5b60138110613f2257fe5b80358252602081013560208301526040810135613f6881614ad4565b613f7181614a76565b6040840152506060810135613f8581614ad4565b613f8e81614a76565b6060840152505050565b8051825260208101516020830152613fb36040820151614a76565b6040830152613fc56060820151614a76565b60608301525050565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b8181101561403457835183529284019291840191600101614018565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101601d841061412e57fe5b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b8281526102c0810160208381019061468f90840161468a8387613857565b613f42565b6146998185614a4f565b6146a66040850182613f26565b50506146b56040840184614a69565b6146c26060840182613f38565b506146d06060840184614a5c565b6146dd6080840182613f2f565b506146eb6080840184614a42565b6146f860a0840182613f18565b5061470660a0840184614a4f565b61471360c0840182613f26565b5061472160c0840184614a5c565b61472e60e0840182613f2f565b5061473c60e0840184614a4f565b61010061474b81850183613f26565b61012091508085013582850152506101408185013581850152610160915080850135828501525061018081850135818501526101a0915080850135828501525061479b6101c08401828601613f4c565b50610b5d61024083016102208501613f4c565b60006102a0820190506147c2828451613f42565b60208301516147d46020840182613f26565b5060408301516147e76040840182613f38565b5060608301516147fa6060840182613f2f565b50608083015161480d6080840182613f18565b5060a083015161482060a0840182613f26565b5060c083015161483360c0840182613f2f565b5060e083015161484660e0840182613f26565b50610100838101519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a08084015161489182850182613f98565b50506101c0830151612925610220840182613f98565b60808101610a2b8284613f98565b81518152602082015160808201906148cc81614a8e565b602083015260408301516148df81614a81565b8060408401525060608301511515606083015292915050565b815181526020820151606082019061490f81614a8e565b8060208401525060408301511515604083015292915050565b60006102808201905061493c828451613f2f565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614a3a57600080fd5b604052919050565b60008235610a2881614aad565b60008235610a2881614aba565b60008235610a2881614ac7565b60008235610a2881614ae1565b806005811061087157fe5b60028110614a8b57fe5b50565b60068110614a8b57fe5b6001600160a01b0381168114614a8b57600080fd5b60098110614a8b57600080fd5b60028110614a8b57600080fd5b60068110614a8b57600080fd5b60058110614a8b57600080fd5b600d8110614a8b57600080fd5b60138110614a8b57600080fdfea264697066735822122093868d92bdfce04c03e325233edadfe43228716d24b1a1d7941ab65f29dc5e3f64736f6c634300060b0033",
  "linkReferences": {
    "contracts/Core/CEC/CECEncoder.sol": {
      "CECEncoder": [
        {
          "length": 20,
          "start": 2618
        },
        {
          "length": 20,
          "start": 4222
        },
        {
          "length": 20,
          "start": 4380
        },
        {
          "length": 20,
          "start": 5955
        },
        {
          "length": 20,
          "start": 6136
        },
        {
          "length": 20,
          "start": 6468
        },
        {
          "length": 20,
          "start": 6860
        },
        {
          "length": 20,
          "start": 7586
        },
        {
          "length": 20,
          "start": 8190
        },
        {
          "length": 20,
          "start": 8340
        },
        {
          "length": 20,
          "start": 8867
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/Core/CEC/CECEncoder.sol": {
      "CECEncoder": [
        {
          "length": 20,
          "start": 2479
        },
        {
          "length": 20,
          "start": 4083
        },
        {
          "length": 20,
          "start": 4241
        },
        {
          "length": 20,
          "start": 5816
        },
        {
          "length": 20,
          "start": 5997
        },
        {
          "length": 20,
          "start": 6329
        },
        {
          "length": 20,
          "start": 6721
        },
        {
          "length": 20,
          "start": 7447
        },
        {
          "length": 20,
          "start": 8051
        },
        {
          "length": 20,
          "start": 8201
        },
        {
          "length": 20,
          "start": 8728
        }
      ]
    }
  }
}
