@settlemint/solidity-diamond-bond
Version:
Smart contract set to build an enterprise bond usecase in SettleMint
1,400 lines (1,398 loc) • 116 kB
TypeScript
// This file was autogenerated by hardhat-viem, do not edit it.
// prettier-ignore
// tslint:disable
// eslint-disable
import type { Address } from "viem";
import type { GetContractReturnType } from "@nomicfoundation/hardhat-viem/types";
import "@nomicfoundation/hardhat-viem/types";
export interface BondFacet$Type {
"_format": "hh-sol-artifact-1",
"contractName": "BondFacet",
"sourceName": "contracts/facets/BondFacet.sol",
"abi": [
{
"inputs": [],
"name": "BondAlreadyInitialized",
"type": "error"
},
{
"inputs": [],
"name": "BondAlreadyIssued",
"type": "error"
},
{
"inputs": [],
"name": "BondHasNotBeenIssued",
"type": "error"
},
{
"inputs": [],
"name": "CampaignAlreadyPaused",
"type": "error"
},
{
"inputs": [],
"name": "CampaignIsClosed",
"type": "error"
},
{
"inputs": [],
"name": "CampaignIsPaused",
"type": "error"
},
{
"inputs": [],
"name": "CampaignNotPaused",
"type": "error"
},
{
"inputs": [],
"name": "CannotReserveAfterCampaignEnd",
"type": "error"
},
{
"inputs": [],
"name": "CannotReserveBeforeSignupDate",
"type": "error"
},
{
"inputs": [],
"name": "CapitalAmortizationFreePeriodDurationIsNotAMultpleOfThree",
"type": "error"
},
{
"inputs": [],
"name": "CapitalAmortizationFreePeriodDurationIsNotAMultpleOfTwelve",
"type": "error"
},
{
"inputs": [],
"name": "DivideByZero",
"type": "error"
},
{
"inputs": [],
"name": "DurationIsNotAMultpleOfThree",
"type": "error"
},
{
"inputs": [],
"name": "DurationIsNotAMultpleOfTwelve",
"type": "error"
},
{
"inputs": [],
"name": "ExceedingMaxAmountPerInvestor",
"type": "error"
},
{
"inputs": [],
"name": "GracePeriodDurationIsNotAMultpleOfThree",
"type": "error"
},
{
"inputs": [],
"name": "GracePeriodDurationIsNotAMultpleOfTwelve",
"type": "error"
},
{
"inputs": [],
"name": "NoMoreBondsToBuy",
"type": "error"
},
{
"inputs": [],
"name": "OldAccountDoesNotHaveEnoughBonds",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "x",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "y",
"type": "uint256"
}
],
"name": "PRBMath_MulDiv18_Overflow",
"type": "error"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "x",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "y",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "denominator",
"type": "uint256"
}
],
"name": "PRBMath_MulDiv_Overflow",
"type": "error"
},
{
"inputs": [
{
"internalType": "UD60x18",
"name": "x",
"type": "uint256"
}
],
"name": "PRBMath_UD60x18_Exp2_InputTooBig",
"type": "error"
},
{
"inputs": [
{
"internalType": "UD60x18",
"name": "x",
"type": "uint256"
}
],
"name": "PRBMath_UD60x18_Log_InputTooSmall",
"type": "error"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "balloonRateNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "balloonRateDen",
"type": "uint256"
}
],
"name": "BalloonRateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "coupure",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "issuer",
"type": "address"
}
],
"name": "BondInitializedPart1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicInterestRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "netReturn",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicity",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "methodOfRepayment",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxSupply",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "formOfFinancing",
"type": "uint256"
}
],
"name": "BondInitializedPart2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "timestamp",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "issuedAmount",
"type": "uint256"
}
],
"name": "BondIssued",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "coupure",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "interestDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxNum",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "withholdingTaxDen",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "issuer",
"type": "address"
}
],
"name": "BondParametersEditedPart1",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicInterestRate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "netReturn",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicity",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "duration",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "methodOfRepayment",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxSupply",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "formOfFinancing",
"type": "uint256"
}
],
"name": "BondParametersEditedPart2",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "bondTransferId",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "oldAccount",
"type": "address"
},
{
"indexed": false,
"internalType": "address",
"name": "newAccount",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "BondTransferred",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "string",
"name": "bondPurchaseId",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "address",
"name": "holder",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "BondsWithdrawn",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
}
],
"name": "CampaignPaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "startDate",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "endDate",
"type": "uint256"
}
],
"name": "CampaignStartAndEndDateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
}
],
"name": "CampaignUnpaused",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "capitalAmortizationFreePeriodDuration",
"type": "uint256"
}
],
"name": "CapitalAmortizationFreePeriodSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "string",
"name": "capitalClaimId",
"type": "string"
},
{
"indexed": false,
"internalType": "uint256",
"name": "capitalAmount",
"type": "uint256"
}
],
"name": "CapitalClaimAmountSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "couponDates",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "remainingCapital",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "capitalRepayments",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "grossCouponRates",
"type": "uint256[]"
},
{
"indexed": false,
"internalType": "uint256[]",
"name": "netCouponRates",
"type": "uint256[]"
}
],
"name": "CouponsComputed",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "gracePeriodDuration",
"type": "uint256"
}
],
"name": "GracePeriodSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "investorsCount",
"type": "uint256"
}
],
"name": "InvestorsCountChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "issueDate",
"type": "uint256"
}
],
"name": "IssueDateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "minAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxAmount",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "maxAmountPerInvestor",
"type": "uint256"
}
],
"name": "MinAndMaxAmountSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "periodicInterest",
"type": "uint256"
}
],
"name": "PeriodicInterestRateSet",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "reservedAmount",
"type": "uint256"
}
],
"name": "ReservedAmountChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": false,
"internalType": "uint256",
"name": "bondId",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "revocationsCount",
"type": "uint256"
}
],
"name": "RevocationsCountChanged",
"type": "event"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "__bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMinAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMaxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignStartDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__expectedIssueDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__coupure",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__capitalAmortizationDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__gracePeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__maxAmountPerInvestor",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__periodicity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__formOfFinancing",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__methodOfRepayment",
"type": "uint256"
},
{
"internalType": "address",
"name": "__issuer",
"type": "address"
}
],
"internalType": "struct BondInitParams.BondInit",
"name": "bi",
"type": "tuple"
}
],
"name": "editBondParameters",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "getSelectors",
"outputs": [
{
"internalType": "bytes4[]",
"name": "",
"type": "bytes4[]"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [],
"name": "getSelectorsOwnership",
"outputs": [
{
"internalType": "bytes4[]",
"name": "",
"type": "bytes4[]"
}
],
"stateMutability": "pure",
"type": "function"
},
{
"inputs": [
{
"components": [
{
"internalType": "uint256",
"name": "__bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMinAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignMaxAmount",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__campaignStartDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__expectedIssueDate",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__coupure",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__interestDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__withholdingTaxDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__balloonRateDen",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__duration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__capitalAmortizationDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__gracePeriodDuration",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__maxAmountPerInvestor",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__periodicity",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__formOfFinancing",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "__methodOfRepayment",
"type": "uint256"
},
{
"internalType": "address",
"name": "__issuer",
"type": "address"
}
],
"internalType": "struct BondInitParams.BondInit",
"name": "bi",
"type": "tuple"
}
],
"name": "initializeBond",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "initializeOwner",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_issueDate",
"type": "uint256"
}
],
"name": "issueBond",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "uint256[]",
"name": "",
"type": "uint256[]"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155BatchReceived",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "address",
"name": "",
"type": "address"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "",
"type": "uint256"
},
{
"internalType": "bytes",
"name": "",
"type": "bytes"
}
],
"name": "onERC1155Received",
"outputs": [
{
"internalType": "bytes4",
"name": "",
"type": "bytes4"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
}
],
"name": "pauseCampaign",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_bondPurchaseId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_buyer",
"type": "address"
}
],
"name": "rescindReservation",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_bondPurchaseId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_bondAmount",
"type": "uint256"
},
{
"internalType": "address",
"name": "_buyer",
"type": "address"
}
],
"name": "reserve",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_balloonRateNum",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_balloonRateDen",
"type": "uint256"
}
],
"name": "setBalloonRate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
}
],
"name": "setCapitalAmortizationFreeDuration",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_currencyAddress",
"type": "address"
}
],
"name": "setCurrencyAddress",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "_duration",
"type": "uint256"
}
],
"name": "setGracePeriodDuration",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "bytes4",
"name": "interfaceId",
"type": "bytes4"
}
],
"name": "supportsInterface",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_bondTransferId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "address",
"name": "_old",
"type": "address"
},
{
"internalType": "address",
"name": "_new",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "transferBond",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
}
],
"name": "unpauseCampaign",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "string",
"name": "_bondPurchaseId",
"type": "string"
},
{
"internalType": "uint256",
"name": "_bondId",
"type": "uint256"
},
{
"internalType": "address",
"name": "holder",
"type": "address"
}
],
"name": "withdrawBondsPurchased",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x60808060405234601557615061908161001b8239f35b600080fdfe608080604052600436101561001357600080fd5b600090813560e01c90816301ffc9a714611fd25750806325830db314611d225780632dcb118e14611ce457806343a19a6514611c125780634b503f0b146118f757806360332e891461170457806368aea41b14611686578063796b89ec1461162a5780638c5f36bb146114f65780638da5cb5b146114a35780638dea1f4714611071578063906b131a14610d435780639226537e14610ae8578063b410500414610a29578063bc197c8114610975578063de99347a14610876578063e3adc7ee14610511578063ee5b280a146104c3578063f23a6e611461044f578063f2fde38b146103125763f844a31c1461010857600080fd5b3461030f57610116366121ca565b61015873ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416331461249e565b61016182612669565b9160016018840155601b830160ff815460201c166102e757610183838361326e565b61018c82613751565b5050506401000000007fffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffffff8254161790556025830163010000007fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff825416179055836017601185015494019380855573ffffffffffffffffffffffffffffffffffffffff825416803b156102e3576040517f731133e900000000000000000000000000000000000000000000000000000000815230600482015260248101859052604481019290925260806064830152600060848301528290829060a490829084905af180156102d8576102bf575b50509154604080519384526020840192909252908201527fb5c3204064d2ac62821e92f17e7e2c1e9971c89f07fa01b6dab37145db86dc559080606081015b0390a180f35b816102c991612072565b6102d457833861027a565b8380fd5b6040513d84823e3d90fd5b8280fd5b6004857fdecaae02000000000000000000000000000000000000000000000000000000008152fd5b80fd5b503461030f57602060031936011261030f5761032c61210e565b7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c549073ffffffffffffffffffffffffffffffffffffffff8083163314916103738361249e565b169182156103cc576103a57fffffffffffffffffffffffff00000000000000000000000000000000000000009261249e565b16177f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5580f35b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4e6577206f776e65722063616e6e6f7420626520746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b503461030f5760a060031936011261030f5761046961210e565b50610472612154565b5060843567ffffffffffffffff81116104bf57610493903690600401612385565b505060206040517ff23a6e61000000000000000000000000000000000000000000000000000000008152f35b5080fd5b503461030f577f8a7a5c9c34210b39b0dd6c746e4824f7af2a84c059d4dcbc168a2036d26df99060406104f5366121ca565b80600f61050184612669565b015582519182526020820152a180f35b503461030f5761052036612177565b919061052b81612669565b9260ff601b85015460201c161561084e5761054960248501846123d6565b5490610559600586015483612529565b6001546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301523060248301529091169190602081604481865afa908115610843578991610808575b5090610650926105d582602094101561253c565b73ffffffffffffffffffffffffffffffffffffffff60268a0154168a6040518096819582947f23b872dd0000000000000000000000000000000000000000000000000000000084528a6004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03925af180156107fd5761066b9188916107ce575b506125df565b8573ffffffffffffffffffffffffffffffffffffffff815416803b156104bf578160405180927f731133e90000000000000000000000000000000000000000000000000000000082528183816106fa8a8c8b600485019173ffffffffffffffffffffffffffffffffffffffff60a094921683526020830152604082015260806060820152600060808201520190565b03925af180156102d8576107ad575b507f99c110e7b335cff55cab2cfe92e319ad78396f17234debbb5860886aa0244cca61079686868673ffffffffffffffffffffffffffffffffffffffff8760228d83831660005201602052604060002060017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00825416179055604051958695608087526080870190612644565b93602086015216604084015260608301520390a180f35b816107bc919695949396612072565b6107ca579091928538610709565b8580fd5b6107f0915060203d6020116107f6575b6107e88183612072565b8101906125c7565b38610665565b503d6107de565b6040513d89823e3d90fd5b9190506020823d60201161083b575b8161082460209383612072565b810103126108365790516106506105c1565b600080fd5b3d9150610817565b6040513d8b823e3d90fd5b6004857fc4d56880000000000000000000000000000000000000000000000000000000008152fd5b503461030f57602060031936011261030f5760043561089481612669565b601b81019081549060ff8260181c1661094d57600281015442119081159161093d575b50610915577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1663010000001790556040519081527fab1902ee37c92d1a78dda53814d64b815e7e3ee287d60843a3dbd6954e3206b490602090a180f35b6004847febd7e129000000000000000000000000000000000000000000000000000000008152fd5b90506003429101541115386108b7565b6004857f5cebfd4a000000000000000000000000000000000000000000000000000000008152fd5b503461030f5760a060031936011261030f5761098f61210e565b50610998612154565b5060443567ffffffffffffffff81116104bf576109b9903690600401612354565b505060643567ffffffffffffffff81116104bf576109db903690600401612354565b505060843567ffffffffffffffff81116104bf576109fd903690600401612385565b505060206040517fbc197c81000000000000000000000000000000000000000000000000000000008152f35b503461030f578060031936011261030f57610ae4604051610a4b608082612072565b6003815260603660208301377f8da5cb5b00000000000000000000000000000000000000000000000000000000610a818261243b565b527ff2fde38b00000000000000000000000000000000000000000000000000000000610aac8261245e565b527f8c5f36bb00000000000000000000000000000000000000000000000000000000610ad78261246e565b52604051918291826121e0565b0390f35b503461030f57610af73661223c565b610b018151612669565b60ff601b82015460201c16610d1b57907f182cb671939e46d1345c30b51134e41ef7782a2113747a93b4dc3c31b91ea81e610d1592610b3f8361284a565b825160028201546003830154604080519384526020840192909252908201527f05b741eb5649daedcc851ef6f057b1bf89b49d12357d31c478c425b6eb1ce9c590606090a182518154600183015460128401546040805194855260208501939093529183015260608201527f1ada3075f8dc673c9de9ba7c0b8e81065d996d1faa99feb6d0a648c8b7a1516d90608090a17fc64d8be5e3585a2141489e772ad1096418b37137a76298a309a5f1095f95f1ca835160a085015190610c7d60c087015160e08801516101008901516101208a01519173ffffffffffffffffffffffffffffffffffffffff6102608c015116936040519788978895919360c0959198979373ffffffffffffffffffffffffffffffffffffffff9560e089019a8952602089015260408801526060870152608086015260a085015216910152565b0390a18251610cfc6008830154926007810154906102008701516101808801516102408901519160ff6025601086015495015460081c1694610cbe8661247e565b6040519889988994919260e0969399989794919961010087019a8752602087015260408601526060850152608084015260a083015260c08201520152565b0390a1610d0f815160808301519061326e565b51613751565b50505080f35b6004837fdecaae02000000000000000000000000000000000000000000000000000000008152fd5b503461030f57608060031936011261030f5760043567ffffffffffffffff81116104bf57610d759036906004016120c7565b9060243560443592610d85612131565b9260ff601b610d9385612669565b015460181c1661104957610da683612669565b9060108201549460118301968754968780821160001461104057610dc991612421565b905b818111156110385750955b600284015442106110105760038401544211610fe8578615610fc057602384019273ffffffffffffffffffffffffffffffffffffffff831660005283602052610e248860406000205461242e565b601286015410610f985773ffffffffffffffffffffffffffffffffffffffff83166000528360205260406000205415610edd575b5060409460247f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f979560209a9573ffffffffffffffffffffffffffffffffffffffff8b96610ea988610ec99861242e565b8955166000528b5287600020610ec086825461242e565b905501906123d6565b5554825191825285820152a1604051908152f35b6014850180549160018301809311610f845750879560209a9573ffffffffffffffffffffffffffffffffffffffff8b96610ea988610ec9987ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e917f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9f60409f9a906040918060249c5582519182526020820152a198505050965050959a509597505094610e58565b80634e487b7160e01b602492526011600452fd5b807f2b42b1220000000000000000000000000000000000000000000000000000000060049252fd5b6004837f7eec29e0000000000000000000000000000000000000000000000000000000008152fd5b6004837f0c32ed70000000000000000000000000000000000000000000000000000000008152fd5b6004837ff2b4a12c000000000000000000000000000000000000000000000000000000008152fd5b905095610dd6565b50508290610dcb565b807fa6a992df0000000000000000000000000000000000000000000000000000000060049252fd5b503461030f5760a060031936011261030f5760043567ffffffffffffffff81116104bf576110a39036906004016120c7565b60243560443573ffffffffffffffffffffffffffffffffffffffff811680820361149f576110cf612131565b906084359261111673ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416331461249e565b61111f85612669565b60ff601b82015460201c1615611477576044602073ffffffffffffffffffffffffffffffffffffffff8a5416604051928380927efdd58e0000000000000000000000000000000000000000000000000000000082528860048301528b60248301525afa80156108435786918a9161143e575b50106114165760056111a591015485612529565b6001546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff868116600483015230602483015290911690602081604481855afa90811561140b578a916113cd575b5090611281936112218460209594101561253c565b8a6040518096819582947f23b872dd0000000000000000000000000000000000000000000000000000000084528b6004850173ffffffffffffffffffffffffffffffffffffffff6040929594938160608401971683521660208201520152565b03925af180156107fd5761129b9188916107ce57506125df565b8573ffffffffffffffffffffffffffffffffffffffff81541692833b156104bf5773ffffffffffffffffffffffffffffffffffffffff60c4839260405194859384927ff242432a00000000000000000000000000000000000000000000000000000000845288600485015216978860248401528a604484015289606484015260a060848401528160a48401525af180156107fd5761138d575b509161137293917f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f959360405195869560a0875260a0870190612644565b9360208601526040850152606084015260808301520390a180f35b91866113c17f38db1382a58023a1d5d8aaab1581199c9b7d9ed33223c18beeaab57924aff20f979593986113729795612072565b96919395509193611334565b929190506020833d602011611403575b816113ea60209383612072565b810103126113ff57915190919061128161120c565b8980fd5b3d91506113dd565b6040513d8c823e3d90fd5b6004887f91df618a000000000000000000000000000000000000000000000000000000008152fd5b9150506020813d60201161146f575b8161145a60209383612072565b8101031261146b5785905138611191565b8880fd5b3d915061144d565b6004887fc4d56880000000000000000000000000000000000000000000000000000000008152fd5b8480fd5b503461030f578060031936011261030f57602073ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416604051908152f35b503461030f57602060031936011261030f5761151061210e565b73ffffffffffffffffffffffffffffffffffffffff7f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c54166115cc5773ffffffffffffffffffffffffffffffffffffffff167fffffffffffffffffffffffff00000000000000000000000000000000000000007f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5416177f586d3bf3558e5ffe721c6f44f4451880e303fa89b73bd2c30250f8d38c80d09c5580f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601160248201527f4f776e657220616c7265616479207365740000000000000000000000000000006044820152fd5b503461030f57602060031936011261030f5773ffffffffffffffffffffffffffffffffffffffff61165961210e565b167fffffffffffffffffffffffff0000000000000000000000000000000000000000600154161760015580f35b503461030f57606060031936011261030f577f9cc9725ee02d8f0a4d8b30054405939f4d872cc6a5c2d677e02f5bd87e5dea2a6024356004356102b96044356116ce83612669565b600a670de0b6b3a76400006116e3848861445a565b04910155604051938493846040919493926060820195825260208201520152565b503461030f576117133661223c565b307fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782556117458151612669565b601b810160ff815460101c166118cf5782917fb42ebd0ad22561f77328ee457d5ba2a08a7c2847ff88c663cca9dcc8c53dc08691611785610d159561284a565b6201000062ff0000198254161790556001549060258101917fffffffffffffffff0000000000000000000000000000000000000000ffffffff77ffffffffffffffffffffffffffffffffffffffff0000000084549260201b169116178092557ff5d1b3af18a6e549e23801b7a43bec54699badce37e0f7e96e0a4ebb65143d74845160a08601519061189160c088015160e08901516101008a01516101208b01519173ffffffffffffffffffffffffffffffffffffffff6102608d015116936040519788978895919360c0959198979373ffffffffffffffffffffffffffffffffffffffff9560e089019a8952602089015260408801526060870152608086015260a085015216910152565b0390a1610cfc8451916008810154936007820154916102008801516101808901519060ff60106102408c01519401549460081c1694610cbe8661247e565b6004847fe2003eba000000000000000000000000000000000000000000000000000000008152fd5b503461030f578060031936011261030f5760405190601f1961020061191c8185612072565b600f8452013660208401377f60332e89000000000000000000000000000000000000000000000000000000006119518361243b565b527f796b89ec0000000000000000000000000000000000000000000000000000000061197c8361245e565b527f9226537e000000000000000000000000000000000000000000000000000000006119a78361246e565b52815160031015611bfe577f68aea41b000000000000000000000000000000000000000000000000000000006080830152815160041015611bfe577f2dcb118e0000000000000000000000000000000000000000000000000000000060a0830152815160051015611bfe577fee5b280a0000000000000000000000000000000000000000000000000000000060c0830152815160061015611bfe577f906b131a0000000000000000000000000000000000000000000000000000000060e0830152815160071015611bfe577fde99347a00000000000000000000000000000000000000000000000000000000610100830152815160081015611bfe577f43a19a6500000000000000000000000000000000000000000000000000000000610120830152815160091015611bfe577f25830db3000000000000000000000000000000000000000000000000000000006101408301528151600a1015611bfe577f8dea1f47000000000000000000000000000000000000000000000000000000006101608301528151600b1015611bfe577fe3adc7ee000000000000000000000000000000000000000000000000000000006101808301528151600c1015611bfe577ff844a31c000000000000000000000000000000000000000000000000000000006101a08301528151600d1015611bfe577ff23a6e61000000000000000000000000000000000000000000000000000000006101c08301528151600e1015611bfe577fbc197c81000000000000000000000000000000000000000000000000000000006101e083015260405180610ae484826121e0565b80634e487b7160e01b602492526032600452fd5b503461030f57602060031936011261030f57600435611c3081612669565b601b81019081549060ff8260181c1615611cbc576002810154421190811591611cac575b50610915577fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffffff1690556040519081527f11aa0bd3fb4d9c5622c703f91610a74140a4f88a7ebc7b4faaeaf52e3cb7aa9490602090a180f35b9050600342910154111538611c54565b6004857fc851109a000000000000000000000000000000000000000000000000000000008152fd5b503461030f577f091a72ed52432e53c748925ef46b36a19f93cb874539b387d4f3b1f92aa33e116040611d16366121ca565b80600e61050184612669565b503461030f57611d3136612177565b9091611d3c83612669565b9160118301928354916024820192611d5484866123d6565b548110611f7457602383019173ffffffffffffffffffffffffffffffffffffffff81168952826020526040892054611d8c86886123d6565b5411611ef057611dbc73ffffffffffffffffffffffffffffffffffffffff92611db587896123d6565b5490612421565b8755611dc885876123d6565b548282168a5283602052611de160408b20918254612421565b9055168752602052604086205415611e8c575b60150191825460018101809111611e78578387611e5b604097957f499925bc28b60b5b11b1841f8f51318fa4484237122fb618e76c3195b37d9eb89589957f83518b027c8ada9071fa7643b5352e180e42cf5a021d61294e5880408643c97f9b99556123d6565b55548151908582526020820152a15482519182526020820152a180f35b602487634e487b7160e01b81526011600452fd5b601481018054906000198201918211611edc57604082601594937ff865af89149aa92dd957b447226842542090f013d1c80f4f66f6eb3ea79f8e9193558151908982526020820152a19050611df4565b602488634e487b7160e01b81526011600452fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f556e646572666c6f773a20726573657276656420616d6f756e7420627920616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601a60248201527f556e646572666c6f773a20726573657276656420616d6f756e740000000000006044820152fd5b9050346104bf5760206003193601126104bf576004357fffffffff0000000000000000000000000000000000000000000000000000000081168091036102e357602092507f4e2312e0000000000000000000000000000000000000000000000000000000008114908115612048575b5015158152f35b7f01ffc9a70000000000000000000000000000000000000000000000000000000091501438612041565b90601f601f19910116810190811067ffffffffffffffff82111761209557604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff811161209557601f01601f191660200190565b81601f82011215610836578035906120de826120ab565b926120ec6040519485612072565b8284526020838301011161083657816000926020809301838601378301015290565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361083657565b6064359073ffffffffffffffffffffffffffffffffffffffff8216820361083657565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361083657565b6060600319820112610836576004359067ffffffffffffffff8211610836576121a2916004016120c7565b906024359060443573ffffffffffffffffffffffffffffffffffffffff811681036108365790565b6003196040910112610836576004359060243590565b602060408183019282815284518094520192019060005b8181106122045750505090565b82517fffffffff00000000000000000000000000000000000000000000000000000000168452602093840193909201916001016121f7565b600319610280910112610836576040516000610280820167ffffffffffffffff8111838210176123405760405260043582526024356020830152604435604083015