diff --git a/.changeset/seven-forks-hug.md b/.changeset/seven-forks-hug.md new file mode 100644 index 00000000000..5ddcbfe3fec --- /dev/null +++ b/.changeset/seven-forks-hug.md @@ -0,0 +1,5 @@ +--- +"chainlink": minor +--- + +Add encryptionPublicKey to CapabilitiesRegistry.sol diff --git a/contracts/.changeset/hip-cherries-marry.md b/contracts/.changeset/hip-cherries-marry.md new file mode 100644 index 00000000000..d5928a5dbf2 --- /dev/null +++ b/contracts/.changeset/hip-cherries-marry.md @@ -0,0 +1,5 @@ +--- +'@chainlink/contracts': minor +--- + +Add encryptionPublicKey to CapabilitiesRegistry.sol diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 009e7579b45..753e63ca8fc 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -38,52 +38,52 @@ BurnWithFromMintTokenPool_releaseOrMint:test_Setup_Success() (gas: 24547) BurnWithFromMintTokenPool_releaseOrMint:test_releaseOrMint_NegativeMintAmount_reverts() (gas: 93840) BurnWithFromMintTokenPool_releaseOrMint:test_releaseOrMint_Success() (gas: 93423) CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2052431) -CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 334693) -CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 466117) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289739) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 290034) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 292771) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 289373) -CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 337311) -CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 291145) -CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 290604) -CCIPHome__validateConfig:test__validateConfig_NodeNotInRegistry_Reverts() (gas: 344238) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 309179) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1212133) -CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 289400) -CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 289661) -CCIPHome__validateConfig:test__validateConfig_Success() (gas: 300616) -CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 773237) -CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 293988) -CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 294035) -CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 185242) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 347249) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 20631) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 270824) +CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 335794) +CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 468721) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 290481) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 290776) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 293513) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 290114) +CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 338807) +CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 291887) +CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 291345) +CCIPHome__validateConfig:test__validateConfig_NodeNotInRegistry_Reverts() (gas: 345923) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 309921) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1219242) +CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 290141) +CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 290402) +CCIPHome__validateConfig:test__validateConfig_Success() (gas: 301493) +CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 774058) +CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 294730) +CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 294777) +CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 185447) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 347454) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 20802) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 270988) CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14952) -CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 370980) +CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 371186) CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 27137) CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 11783) CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 11038) CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 26150) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1436726) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1437014) CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 63878) -CCIPHome_constructor:test_constructor_success() (gas: 3521034) +CCIPHome_constructor:test_constructor_success() (gas: 3516226) CCIPHome_constructor:test_getCapabilityConfiguration_success() (gas: 9173) CCIPHome_constructor:test_supportsInterface_success() (gas: 9865) -CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2765282) -CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2539724) +CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2765570) +CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2540012) CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() (gas: 9110) CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23052) CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 8818) -CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5096112) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5096688) CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 9068) CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19128) CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 8773) CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 30676) CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 19051) -CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1388198) -CCIPHome_setCandidate:test_setCandidate_success() (gas: 1357740) +CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1388623) +CCIPHome_setCandidate:test_setCandidate_success() (gas: 1357884) CommitStore_constructor:test_Constructor_Success() (gas: 2855567) CommitStore_isUnpausedAndRMNHealthy:test_RMN_Success() (gas: 73954) CommitStore_report:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 28739) diff --git a/contracts/gas-snapshots/keystone.gas-snapshot b/contracts/gas-snapshots/keystone.gas-snapshot index a4067ff2b43..aae929de324 100644 --- a/contracts/gas-snapshots/keystone.gas-snapshot +++ b/contracts/gas-snapshots/keystone.gas-snapshot @@ -4,53 +4,54 @@ CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_CapabilityExists() (gas: 145613) CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractDoesNotMatchInterface() (gas: 94543) CapabilitiesRegistry_AddCapabilitiesTest:test_RevertWhen_ConfigurationContractNotDeployed() (gas: 96326) -CapabilitiesRegistry_AddDONTest:test_AddDON() (gas: 373893) +CapabilitiesRegistry_AddDONTest:test_AddDON() (gas: 373937) CapabilitiesRegistry_AddDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19288) CapabilitiesRegistry_AddDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 169767) -CapabilitiesRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 239739) +CapabilitiesRegistry_AddDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 239761) CapabilitiesRegistry_AddDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 250950) CapabilitiesRegistry_AddDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 116905) CapabilitiesRegistry_AddDONTest:test_RevertWhen_FaultToleranceIsZero() (gas: 43373) CapabilitiesRegistry_AddDONTest:test_RevertWhen_NodeAlreadyBelongsToWorkflowDON() (gas: 344037) CapabilitiesRegistry_AddDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 180165) -CapabilitiesRegistry_AddDONTest_WhenMaliciousCapabilityConfigurationConfigured:test_RevertWhen_MaliciousCapabilitiesConfigContractTriesToRemoveCapabilitiesFromDONNodes() (gas: 340514) -CapabilitiesRegistry_AddNodeOperatorsTest:test_AddNodeOperators() (gas: 184157) -CapabilitiesRegistry_AddNodeOperatorsTest:test_RevertWhen_CalledByNonAdmin() (gas: 17624) -CapabilitiesRegistry_AddNodeOperatorsTest:test_RevertWhen_NodeOperatorAdminAddressZero() (gas: 18520) -CapabilitiesRegistry_AddNodesTest:test_AddsNodeParams() (gas: 358492) -CapabilitiesRegistry_AddNodesTest:test_OwnerCanAddNodes() (gas: 358458) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingDuplicateP2PId() (gas: 301273) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 55196) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidNodeOperator() (gas: 24917) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithoutCapabilities() (gas: 27691) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25130) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 27430) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 27069) -CapabilitiesRegistry_AddNodesTest:test_RevertWhen_SignerAddressNotUnique() (gas: 309723) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_DeprecatesCapability() (gas: 89742) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_EmitsEvent() (gas: 89870) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas: 22879) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 16166) -CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityIsDeprecated() (gas: 91134) -CapabilitiesRegistry_GetCapabilitiesTest:test_ReturnsCapabilities() (gas: 135488) +CapabilitiesRegistry_AddDONTest_WhenMaliciousCapabilityConfigurationConfigured:test_RevertWhen_MaliciousCapabilitiesConfigContractTriesToRemoveCapabilitiesFromDONNodes() (gas: 340698) +CapabilitiesRegistry_AddNodeOperatorsTest:test_AddNodeOperators() (gas: 184179) +CapabilitiesRegistry_AddNodeOperatorsTest:test_RevertWhen_CalledByNonAdmin() (gas: 17646) +CapabilitiesRegistry_AddNodeOperatorsTest:test_RevertWhen_NodeOperatorAdminAddressZero() (gas: 18542) +CapabilitiesRegistry_AddNodesTest:test_AddsNodeParams() (gas: 380818) +CapabilitiesRegistry_AddNodesTest:test_OwnerCanAddNodes() (gas: 380784) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingDuplicateP2PId() (gas: 323624) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 55350) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithInvalidNodeOperator() (gas: 25045) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_AddingNodeWithoutCapabilities() (gas: 27844) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25258) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_EncryptionPublicKeyEmpty() (gas: 29874) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 27558) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 27196) +CapabilitiesRegistry_AddNodesTest:test_RevertWhen_SignerAddressNotUnique() (gas: 332092) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_DeprecatesCapability() (gas: 89764) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_EmitsEvent() (gas: 89892) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CalledByNonAdmin() (gas: 22901) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 16188) +CapabilitiesRegistry_DeprecateCapabilitiesTest:test_RevertWhen_CapabilityIsDeprecated() (gas: 91178) +CapabilitiesRegistry_GetCapabilitiesTest:test_ReturnsCapabilities() (gas: 135510) CapabilitiesRegistry_GetDONsTest:test_CorrectlyFetchesDONs() (gas: 65468) CapabilitiesRegistry_GetDONsTest:test_DoesNotIncludeRemovedDONs() (gas: 65016) CapabilitiesRegistry_GetHashedCapabilityTest:test_CorrectlyGeneratesHashedCapabilityId() (gas: 11428) CapabilitiesRegistry_GetHashedCapabilityTest:test_DoesNotCauseIncorrectClashes() (gas: 13087) CapabilitiesRegistry_GetNodeOperatorsTest:test_CorrectlyFetchesNodeOperators() (gas: 36429) CapabilitiesRegistry_GetNodeOperatorsTest:test_DoesNotIncludeRemovedNodeOperators() (gas: 38714) -CapabilitiesRegistry_GetNodesTest:test_CorrectlyFetchesNodes() (gas: 65288) -CapabilitiesRegistry_GetNodesTest:test_DoesNotIncludeRemovedNodes() (gas: 73497) -CapabilitiesRegistry_RemoveDONsTest:test_RemovesDON() (gas: 54982) +CapabilitiesRegistry_GetNodesTest:test_CorrectlyFetchesNodes() (gas: 69770) +CapabilitiesRegistry_GetNodesTest:test_DoesNotIncludeRemovedNodes() (gas: 79302) +CapabilitiesRegistry_RemoveDONsTest:test_RemovesDON() (gas: 55004) CapabilitiesRegistry_RemoveDONsTest:test_RevertWhen_CalledByNonAdmin() (gas: 15647) CapabilitiesRegistry_RemoveDONsTest:test_RevertWhen_DONDoesNotExist() (gas: 16550) CapabilitiesRegistry_RemoveNodeOperatorsTest:test_RemovesNodeOperator() (gas: 36122) CapabilitiesRegistry_RemoveNodeOperatorsTest:test_RevertWhen_CalledByNonOwner() (gas: 15816) -CapabilitiesRegistry_RemoveNodesTest:test_CanAddNodeWithSameSignerAddressAfterRemoving() (gas: 115150) -CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenDONDeleted() (gas: 287838) -CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenNodeNoLongerPartOfDON() (gas: 561183) -CapabilitiesRegistry_RemoveNodesTest:test_OwnerCanRemoveNodes() (gas: 73358) -CapabilitiesRegistry_RemoveNodesTest:test_RemovesNode() (gas: 75192) +CapabilitiesRegistry_RemoveNodesTest:test_CanAddNodeWithSameSignerAddressAfterRemoving() (gas: 117691) +CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenDONDeleted() (gas: 288096) +CapabilitiesRegistry_RemoveNodesTest:test_CanRemoveWhenNodeNoLongerPartOfDON() (gas: 561442) +CapabilitiesRegistry_RemoveNodesTest:test_OwnerCanRemoveNodes() (gas: 77404) +CapabilitiesRegistry_RemoveNodesTest:test_RemovesNode() (gas: 79239) CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 25008) CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 18373) CapabilitiesRegistry_RemoveNodesTest:test_RevertWhen_NodePartOfCapabilitiesDON() (gas: 385422) @@ -59,29 +60,29 @@ CapabilitiesRegistry_TypeAndVersionTest:test_TypeAndVersion() (gas: 9796) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_CalledByNonAdmin() (gas: 19323) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_CapabilityDoesNotExist() (gas: 152958) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DONDoesNotExist() (gas: 17749) -CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 222975) +CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DeprecatedCapabilityAdded() (gas: 222997) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DuplicateCapabilityAdded() (gas: 236986) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_DuplicateNodeAdded() (gas: 107687) CapabilitiesRegistry_UpdateDONTest:test_RevertWhen_NodeDoesNotSupportCapability() (gas: 163401) -CapabilitiesRegistry_UpdateDONTest:test_UpdatesDON() (gas: 373510) +CapabilitiesRegistry_UpdateDONTest:test_UpdatesDON() (gas: 373532) CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_CalledByNonAdminAndNonOwner() (gas: 20684) CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorAdminIsZeroAddress() (gas: 20008) CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorDoesNotExist() (gas: 19746) CapabilitiesRegistry_UpdateNodeOperatorTest:test_RevertWhen_NodeOperatorIdAndParamLengthsMismatch() (gas: 15386) CapabilitiesRegistry_UpdateNodeOperatorTest:test_UpdatesNodeOperator() (gas: 36990) -CapabilitiesRegistry_UpdateNodesTest:test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() (gas: 256437) -CapabilitiesRegistry_UpdateNodesTest:test_OwnerCanUpdateNodes() (gas: 162210) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 35895) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_CalledByAnotherNodeOperatorAdmin() (gas: 29222) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 29399) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 29221) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() (gas: 31348) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 29187) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByCapabilityDON() (gas: 471030) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByWorkflowDON() (gas: 341311) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 29080) -CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_UpdatingNodeWithoutCapabilities() (gas: 27609) -CapabilitiesRegistry_UpdateNodesTest:test_UpdatesNodeParams() (gas: 162264) +CapabilitiesRegistry_UpdateNodesTest:test_CanUpdateParamsIfNodeSignerAddressNoLongerUsed() (gas: 258926) +CapabilitiesRegistry_UpdateNodesTest:test_OwnerCanUpdateNodes() (gas: 164628) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_AddingNodeWithInvalidCapability() (gas: 36000) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_CalledByAnotherNodeOperatorAdmin() (gas: 29326) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_CalledByNonNodeOperatorAdminAndNonOwner() (gas: 29504) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_NodeDoesNotExist() (gas: 29326) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_NodeSignerAlreadyAssignedToAnotherNode() (gas: 31452) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_P2PIDEmpty() (gas: 29292) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByCapabilityDON() (gas: 471131) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_RemovingCapabilityRequiredByWorkflowDON() (gas: 341412) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_SignerAddressEmpty() (gas: 29184) +CapabilitiesRegistry_UpdateNodesTest:test_RevertWhen_UpdatingNodeWithoutCapabilities() (gas: 27713) +CapabilitiesRegistry_UpdateNodesTest:test_UpdatesNodeParams() (gas: 164682) KeystoneForwarder_ReportTest:test_Report_ConfigVersion() (gas: 2006826) KeystoneForwarder_ReportTest:test_Report_FailedDelieryWhenReportReceiverConsumesAllGas() (gas: 1004827) KeystoneForwarder_ReportTest:test_Report_FailedDeliveryWhenReceiverInterfaceNotSupported() (gas: 124952) diff --git a/contracts/src/v0.8/ccip/interfaces/ICapabilitiesRegistry.sol b/contracts/src/v0.8/ccip/interfaces/ICapabilitiesRegistry.sol index dac7317e418..4c95b4ff77e 100644 --- a/contracts/src/v0.8/ccip/interfaces/ICapabilitiesRegistry.sol +++ b/contracts/src/v0.8/ccip/interfaces/ICapabilitiesRegistry.sol @@ -16,6 +16,8 @@ interface ICapabilitiesRegistry { /// This key is guaranteed to be unique in the CapabilitiesRegistry. It is /// used to identify a node in the the P2P network. bytes32 p2pId; + /// @notice Public key used to encrypt secrets for this node + bytes32 encryptionPublicKey; /// @notice The list of hashed capability IDs supported by the node bytes32[] hashedCapabilityIds; /// @notice The list of capabilities DON Ids supported by the node. A node diff --git a/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol b/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol index f4784b0d0fc..7bfab5fd172 100644 --- a/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol +++ b/contracts/src/v0.8/ccip/test/capability/CCIPHome.t.sol @@ -36,6 +36,7 @@ contract CCIPHomeTest is Test { nodeOperatorId: 1, configCount: 1, workflowDONId: 1, + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), capabilitiesDONIds: new uint256[](0) }); @@ -511,6 +512,7 @@ contract CCIPHome__validateConfig is CCIPHomeTest { nodeOperatorId: 1, signer: bytes32(signers[i]), p2pId: p2pIds[i], + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), configCount: uint32(1), workflowDONId: uint32(1), @@ -723,6 +725,7 @@ contract CCIPHome__validateConfig is CCIPHomeTest { nodeOperatorId: 0, signer: bytes32(0), p2pId: bytes32(uint256(0)), + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), configCount: uint32(1), workflowDONId: uint32(1), @@ -763,6 +766,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { nodeOperatorId: 1, signer: bytes32(uint256(1)), p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), configCount: uint32(1), workflowDONId: uint32(1), @@ -803,6 +807,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { nodeOperatorId: 1, signer: bytes32(uint256(1)), p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), configCount: uint32(1), workflowDONId: uint32(1), @@ -855,6 +860,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { nodeOperatorId: 1, signer: bytes32(uint256(1)), p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), configCount: uint32(1), workflowDONId: uint32(1), @@ -908,6 +914,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { nodeOperatorId: 0, signer: bytes32(0), p2pId: bytes32(uint256(0)), + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), configCount: uint32(1), workflowDONId: uint32(1), @@ -941,6 +948,7 @@ contract CCIPHome_applyChainConfigUpdates is CCIPHomeTest { nodeOperatorId: 1, signer: bytes32(uint256(1)), p2pId: chainReaders[0], + encryptionPublicKey: keccak256("encryptionPublicKey"), hashedCapabilityIds: new bytes32[](0), configCount: uint32(1), workflowDONId: uint32(1), diff --git a/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol b/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol index 68c59c7f8ca..4f4ff6f3280 100644 --- a/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol +++ b/contracts/src/v0.8/keystone/CapabilitiesRegistry.sol @@ -40,6 +40,8 @@ contract CapabilitiesRegistry is OwnerIsCreator, TypeAndVersionInterface { /// This key is guaranteed to be unique in the CapabilitiesRegistry. It is /// used to identify a node in the the P2P network. bytes32 p2pId; + /// @notice Public key used to encrypt secrets for this node + bytes32 encryptionPublicKey; /// @notice The list of hashed capability IDs supported by the node bytes32[] hashedCapabilityIds; } @@ -58,6 +60,8 @@ contract CapabilitiesRegistry is OwnerIsCreator, TypeAndVersionInterface { /// This key is guaranteed to be unique in the CapabilitiesRegistry. It is /// used to identify a node in the the P2P network. bytes32 p2pId; + /// @notice Public key used to encrypt secrets for this node + bytes32 encryptionPublicKey; /// @notice The list of hashed capability IDs supported by the node bytes32[] hashedCapabilityIds; /// @notice The list of capabilities DON Ids supported by the node. A node @@ -87,6 +91,8 @@ contract CapabilitiesRegistry is OwnerIsCreator, TypeAndVersionInterface { /// This key is guaranteed to be unique in the CapabilitiesRegistry. It is /// used to identify a node in the the P2P network. bytes32 p2pId; + /// @notice Public key used to encrypt secrets for this node + bytes32 encryptionPublicKey; /// @notice The node's supported capabilities /// @dev This is stored as a map so that we can easily update to a set of /// new capabilities by incrementing the configCount and creating a @@ -283,6 +289,11 @@ contract CapabilitiesRegistry is OwnerIsCreator, TypeAndVersionInterface { /// @param p2pId The provided P2P ID error InvalidNodeP2PId(bytes32 p2pId); + /// @notice This error is thrown when trying to add a node without + /// including the encryption public key bytes. + /// @param encryptionPublicKey The encryption public key bytes + error InvalidNodeEncryptionPublicKey(bytes32 encryptionPublicKey); + /// @notice This error is thrown when trying to add a node without /// capabilities or with capabilities that do not exist. /// @param hashedCapabilityIds The IDs of the capabilities that are being added. @@ -561,6 +572,8 @@ contract CapabilitiesRegistry is OwnerIsCreator, TypeAndVersionInterface { if (node.signer == bytes32("") || s_nodeSigners.contains(node.signer)) revert InvalidNodeSigner(); + if (node.encryptionPublicKey == bytes32("")) revert InvalidNodeEncryptionPublicKey(node.encryptionPublicKey); + bytes32[] memory capabilityIds = node.hashedCapabilityIds; if (capabilityIds.length == 0) revert InvalidNodeCapabilities(capabilityIds); @@ -572,6 +585,7 @@ contract CapabilitiesRegistry is OwnerIsCreator, TypeAndVersionInterface { storedNode.supportedHashedCapabilityIds[capabilityConfigCount].add(capabilityIds[j]); } + storedNode.encryptionPublicKey = node.encryptionPublicKey; storedNode.nodeOperatorId = node.nodeOperatorId; storedNode.p2pId = node.p2pId; storedNode.signer = node.signer; @@ -678,6 +692,7 @@ contract CapabilitiesRegistry is OwnerIsCreator, TypeAndVersionInterface { nodeOperatorId: s_nodes[p2pId].nodeOperatorId, p2pId: s_nodes[p2pId].p2pId, signer: s_nodes[p2pId].signer, + encryptionPublicKey: s_nodes[p2pId].encryptionPublicKey, hashedCapabilityIds: s_nodes[p2pId].supportedHashedCapabilityIds[s_nodes[p2pId].configCount].values(), configCount: s_nodes[p2pId].configCount, workflowDONId: s_nodes[p2pId].workflowDONId, diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddDONTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddDONTest.t.sol index dc0b85bfa3f..4e8725a2ee1 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddDONTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddDONTest.t.sol @@ -25,6 +25,7 @@ contract CapabilitiesRegistry_AddDONTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: capabilityIds }); @@ -35,6 +36,7 @@ contract CapabilitiesRegistry_AddDONTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: nodeTwoCapabilityIds }); @@ -42,6 +44,7 @@ contract CapabilitiesRegistry_AddDONTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_THREE, hashedCapabilityIds: capabilityIds }); @@ -275,6 +278,7 @@ contract CapabilitiesRegistry_AddDONTest_WhenMaliciousCapabilityConfigurationCon nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: capabilityIds }); @@ -285,6 +289,7 @@ contract CapabilitiesRegistry_AddDONTest_WhenMaliciousCapabilityConfigurationCon nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: nodeTwoCapabilityIds }); @@ -292,6 +297,7 @@ contract CapabilitiesRegistry_AddDONTest_WhenMaliciousCapabilityConfigurationCon nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_THREE, hashedCapabilityIds: capabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddNodesTest.t.sol index c7c92587cf7..aa6cca4aa28 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_AddNodesTest.t.sol @@ -27,6 +27,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -47,6 +48,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: invalidNodeOperatorId, // Invalid NOP p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -67,6 +69,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: bytes32(""), + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -74,6 +77,25 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { s_CapabilitiesRegistry.addNodes(nodes); } + function test_RevertWhen_EncryptionPublicKeyEmpty() public { + changePrank(NODE_OPERATOR_ONE_ADMIN); + CapabilitiesRegistry.NodeParams[] memory nodes = new CapabilitiesRegistry.NodeParams[](1); + + bytes32[] memory hashedCapabilityIds = new bytes32[](1); + hashedCapabilityIds[0] = s_basicHashedCapabilityId; + + nodes[0] = CapabilitiesRegistry.NodeParams({ + nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, + p2pId: P2P_ID, + signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: bytes32(""), + hashedCapabilityIds: hashedCapabilityIds + }); + + vm.expectRevert(abi.encodeWithSelector(CapabilitiesRegistry.InvalidNodeEncryptionPublicKey.selector, bytes32(""))); + s_CapabilitiesRegistry.addNodes(nodes); + } + function test_RevertWhen_SignerAddressNotUnique() public { changePrank(NODE_OPERATOR_ONE_ADMIN); CapabilitiesRegistry.NodeParams[] memory nodes = new CapabilitiesRegistry.NodeParams[](1); @@ -85,6 +107,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -97,6 +120,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); vm.expectRevert(abi.encodeWithSelector(CapabilitiesRegistry.InvalidNodeSigner.selector)); @@ -114,6 +138,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -134,6 +159,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: bytes32(""), signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -151,6 +177,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -169,6 +196,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -188,6 +216,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -216,6 +245,7 @@ contract CapabilitiesRegistry_AddNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetDONsTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetDONsTest.t.sol index a79485abad1..6d8dd13eb6a 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetDONsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetDONsTest.t.sol @@ -27,6 +27,7 @@ contract CapabilitiesRegistry_GetDONsTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: capabilityIds }); @@ -37,6 +38,7 @@ contract CapabilitiesRegistry_GetDONsTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: nodeTwoCapabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol index a5fe5fa1d1a..4fc150e29b1 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_GetNodesTest.t.sol @@ -25,6 +25,7 @@ contract CapabilitiesRegistry_GetNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -32,6 +33,7 @@ contract CapabilitiesRegistry_GetNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: hashedCapabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveDONsTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveDONsTest.t.sol index 0311ffd6f8b..c3a8dc16255 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveDONsTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveDONsTest.t.sol @@ -25,6 +25,7 @@ contract CapabilitiesRegistry_RemoveDONsTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: capabilityIds }); @@ -35,6 +36,7 @@ contract CapabilitiesRegistry_RemoveDONsTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: nodeTwoCapabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol index 08646600a67..dfe63e21925 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_RemoveNodesTest.t.sol @@ -24,6 +24,7 @@ contract CapabilitiesRegistry_RemoveNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -31,6 +32,7 @@ contract CapabilitiesRegistry_RemoveNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: hashedCapabilityIds }); @@ -38,6 +40,7 @@ contract CapabilitiesRegistry_RemoveNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_THREE, hashedCapabilityIds: hashedCapabilityIds }); @@ -205,6 +208,7 @@ contract CapabilitiesRegistry_RemoveNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateDONTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateDONTest.t.sol index 825524ebe86..52b496de2d0 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateDONTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateDONTest.t.sol @@ -25,6 +25,7 @@ contract CapabilitiesRegistry_UpdateDONTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: capabilityIds }); @@ -35,6 +36,7 @@ contract CapabilitiesRegistry_UpdateDONTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: nodeTwoCapabilityIds }); @@ -42,6 +44,7 @@ contract CapabilitiesRegistry_UpdateDONTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_THREE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_THREE, hashedCapabilityIds: capabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol index 9b516767f27..fe846536270 100644 --- a/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol +++ b/contracts/src/v0.8/keystone/test/CapabilitiesRegistry_UpdateNodesTest.t.sol @@ -24,6 +24,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -34,6 +35,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: hashedCapabilityIds }); @@ -52,6 +54,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: hashedCapabilityIds }); @@ -70,6 +73,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID, signer: NEW_NODE_SIGNER, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: hashedCapabilityIds }); @@ -88,6 +92,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: INVALID_P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -106,6 +111,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: bytes32(""), signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -124,6 +130,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: bytes32(""), + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -142,6 +149,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_TWO_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: hashedCapabilityIds }); @@ -159,6 +167,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -177,6 +186,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -206,6 +216,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); uint32 workflowDonId = 1; @@ -246,6 +257,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); uint32 capabilitiesDonId = 1; @@ -276,6 +288,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: bytes32(abi.encodePacked(address(6666))), + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -287,6 +300,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_TWO_ID, p2pId: P2P_ID_TWO, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_TWO, hashedCapabilityIds: hashedCapabilityIds }); s_CapabilitiesRegistry.updateNodes(nodes); @@ -306,6 +320,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NEW_NODE_SIGNER, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -333,6 +348,7 @@ contract CapabilitiesRegistry_UpdateNodesTest is BaseTest { nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NEW_NODE_SIGNER, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); diff --git a/contracts/src/v0.8/keystone/test/Constants.t.sol b/contracts/src/v0.8/keystone/test/Constants.t.sol index a540a255725..a0501a98fb0 100644 --- a/contracts/src/v0.8/keystone/test/Constants.t.sol +++ b/contracts/src/v0.8/keystone/test/Constants.t.sol @@ -10,18 +10,21 @@ contract Constants { string internal constant NODE_OPERATOR_ONE_NAME = "node-operator-one"; bytes32 internal constant NODE_OPERATOR_ONE_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(3333))); bytes32 internal constant P2P_ID = hex"e42415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; + bytes32 internal constant TEST_ENCRYPTION_PUBLIC_KEY = bytes32("test-encryption-public-key"); uint32 internal constant TEST_NODE_OPERATOR_TWO_ID = 2; address internal constant NODE_OPERATOR_TWO_ADMIN = address(4); string internal constant NODE_OPERATOR_TWO_NAME = "node-operator-two"; bytes32 internal constant NODE_OPERATOR_TWO_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(4444))); bytes32 internal constant P2P_ID_TWO = hex"f53415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a05"; + bytes32 internal constant TEST_ENCRYPTION_PUBLIC_KEY_TWO = bytes32("test-encryption-public-key-2"); uint32 internal constant TEST_NODE_OPERATOR_THREE_ID = 3; address internal constant NODE_OPERATOR_THREE = address(4); string internal constant NODE_OPERATOR_THREE_NAME = "node-operator-three"; bytes32 internal constant NODE_OPERATOR_THREE_SIGNER_ADDRESS = bytes32(abi.encodePacked(address(5555))); bytes32 internal constant P2P_ID_THREE = hex"f53415859707d90ed4dc534ad730f187a17b0c368e1beec2e9b995587c4b0a06"; + bytes32 internal constant TEST_ENCRYPTION_PUBLIC_KEY_THREE = bytes32("test-encryption-public-key-3"); uint8 internal constant F_VALUE = 1; uint32 internal constant DON_ID = 1; diff --git a/contracts/src/v0.8/keystone/test/mocks/MaliciousConfigurationContract.sol b/contracts/src/v0.8/keystone/test/mocks/MaliciousConfigurationContract.sol index 2a7fc4d18d5..9325014322c 100644 --- a/contracts/src/v0.8/keystone/test/mocks/MaliciousConfigurationContract.sol +++ b/contracts/src/v0.8/keystone/test/mocks/MaliciousConfigurationContract.sol @@ -28,6 +28,7 @@ contract MaliciousConfigurationContract is ICapabilityConfiguration, IERC165, Co nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID, signer: NODE_OPERATOR_ONE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY, hashedCapabilityIds: hashedCapabilityIds }); @@ -35,6 +36,7 @@ contract MaliciousConfigurationContract is ICapabilityConfiguration, IERC165, Co nodeOperatorId: TEST_NODE_OPERATOR_ONE_ID, p2pId: P2P_ID_THREE, signer: NODE_OPERATOR_THREE_SIGNER_ADDRESS, + encryptionPublicKey: TEST_ENCRYPTION_PUBLIC_KEY_THREE, hashedCapabilityIds: hashedCapabilityIds }); diff --git a/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go b/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go index 23c6a6a9d91..0674d77bfe9 100644 --- a/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go +++ b/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go @@ -211,6 +211,7 @@ func (t *TestUniverse) AddCapability(p2pIDs [][32]byte) { NodeOperatorId: nodeOperatorID, Signer: testutils.Random32Byte(), P2pId: p2pIDs[i], + EncryptionPublicKey: testutils.Random32Byte(), HashedCapabilityIds: [][32]byte{ccipCapabilityID}, }, }) diff --git a/core/capabilities/integration_tests/keystone_contracts_setup.go b/core/capabilities/integration_tests/keystone_contracts_setup.go index fbd3da5cc51..14b7aa1086d 100644 --- a/core/capabilities/integration_tests/keystone_contracts_setup.go +++ b/core/capabilities/integration_tests/keystone_contracts_setup.go @@ -91,9 +91,10 @@ func peerToNode(nopID uint32, p peer) (kcr.CapabilitiesRegistryNodeParams, error copy(sigb[:], signerB) return kcr.CapabilitiesRegistryNodeParams{ - NodeOperatorId: nopID, - P2pId: peerIDB, - Signer: sigb, + NodeOperatorId: nopID, + P2pId: peerIDB, + Signer: sigb, + EncryptionPublicKey: testutils.Random32Byte(), }, nil } diff --git a/core/capabilities/launcher_test.go b/core/capabilities/launcher_test.go index c3bbf71e7f5..d01e2f8f006 100644 --- a/core/capabilities/launcher_test.go +++ b/core/capabilities/launcher_test.go @@ -150,24 +150,28 @@ func TestLauncher_WiresUpExternalCapabilities(t *testing.T) { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, nodes[1]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, nodes[2]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, nodes[3]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[3], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, }, @@ -313,45 +317,53 @@ func TestLauncher_RemoteTriggerModeAggregatorShim(t *testing.T) { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[1]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[2]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[3]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[3], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, workflowDonNodes[0]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[0], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[0], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[1]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[1], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[1], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[2]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[2], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[2], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[3]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[3], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[3], + EncryptionPublicKey: randomWord(), }, }, } @@ -480,24 +492,28 @@ func TestSyncer_IgnoresCapabilitiesForPrivateDON(t *testing.T) { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{hashedTriggerID, hashedTargetID}, }, nodes[1]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{hashedTriggerID, hashedTargetID}, }, nodes[2]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{hashedTriggerID, hashedTargetID}, }, nodes[3]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[3], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{hashedTriggerID, hashedTargetID}, }, }, @@ -617,45 +633,53 @@ func TestLauncher_WiresUpClientsForPublicWorkflowDON(t *testing.T) { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[1]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[2]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[3]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[3], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, workflowDonNodes[0]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[0], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[0], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[1]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[1], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[1], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[2]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[2], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[2], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[3]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[3], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[3], + EncryptionPublicKey: randomWord(), }, }, } @@ -774,45 +798,53 @@ func TestLauncher_WiresUpClientsForPublicWorkflowDONButIgnoresPrivateCapabilitie NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[1]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[2]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, capabilityDonNodes[3]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[3], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID, targetCapID}, }, workflowDonNodes[0]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[0], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[0], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[1]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[1], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[1], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[2]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[2], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[2], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[3]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[3], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[3], + EncryptionPublicKey: randomWord(), }, }, } @@ -914,45 +946,53 @@ func TestLauncher_SucceedsEvenIfDispatcherAlreadyHasReceiver(t *testing.T) { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID}, }, capabilityDonNodes[1]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID}, }, capabilityDonNodes[2]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID}, }, capabilityDonNodes[3]: { NodeOperatorId: 1, Signer: randomWord(), P2pId: capabilityDonNodes[3], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{triggerCapID}, }, workflowDonNodes[0]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[0], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[0], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[1]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[1], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[1], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[2]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[2], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[2], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[3]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[3], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[3], + EncryptionPublicKey: randomWord(), }, }, } diff --git a/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go b/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go index 8976868a430..cdc77007655 100644 --- a/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go +++ b/core/gethwrappers/ccip/generated/ccip_home/ccip_home.go @@ -66,7 +66,7 @@ type CCIPHomeVersionedConfig struct { var CCIPHomeMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expectedConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"gotConfigDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"callDonId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"capabilityRegistryDonId\",\"type\":\"uint32\"}],\"name\":\"DONIdMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fChain\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"FRoleDON\",\"type\":\"uint256\"}],\"name\":\"FChainTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node\",\"name\":\"node\",\"type\":\"tuple\"}],\"name\":\"InvalidNode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"selector\",\"type\":\"bytes4\"}],\"name\":\"InvalidSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"currentActiveDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"currentCandidateDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proposedActiveDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"proposedCandidateDigest\",\"type\":\"bytes32\"}],\"name\":\"InvalidStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOpStateTransitionNotAllowed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RMNHomeAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RevokingZeroDigestNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ActiveConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"CandidateConfigRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigPromoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"update\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getActiveDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.ChainConfigArgs[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getAllConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"activeConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"candidateConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getCandidateDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPHome.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"ok\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getConfigDigests\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"activeConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"candidateConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNumChainConfigurations\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"digestToPromote\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digestToRevoke\",\"type\":\"bytes32\"}],\"name\":\"promoteCandidateAndRevokeActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"revokeCandidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"FRoleDON\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"rmnHomeAddress\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"signerKey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"transmitterKey\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPHome.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digestToOverwrite\",\"type\":\"bytes32\"}],\"name\":\"setCandidate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"newConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040526006805463ffffffff191690553480156200001e57600080fd5b5060405162004f2938038062004f298339810160408190526200004191620001b3565b3380600081620000985760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000cb57620000cb8162000108565b5050506001600160a01b038116620000f6576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001e5565b336001600160a01b03821603620001625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008f565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001c657600080fd5b81516001600160a01b0381168114620001de57600080fd5b9392505050565b608051614d1a6200020f60003960008181610180015281816122360152612cfd0152614d1a6000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806379ba5097116100cd578063b74b235611610081578063f2fde38b11610066578063f2fde38b14610356578063f442c89a14610369578063fba64a7c1461037c57600080fd5b8063b74b235614610323578063bae4e0fa1461034357600080fd5b80638318ed5d116100b25780638318ed5d146102d15780638da5cb5b146102f2578063922ea4061461031057600080fd5b806379ba5097146102c15780637ac0d41e146102c957600080fd5b80633df45a72116101245780635a837f97116101095780635a837f97146102785780635f1edd9c1461028d5780637524051a146102ae57600080fd5b80633df45a721461022f5780634851d5491461025057600080fd5b806301ffc9a714610156578063020330e61461017e578063181f5a77146101c557806333d9704a1461020e575b600080fd5b610169610164366004613157565b61038f565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6102016040518060400160405280601281526020017f43434950486f6d6520312e362e302d646576000000000000000000000000000081525081565b6040516101759190613207565b61022161021c366004613254565b610428565b6040516101759291906134ac565b61024261023d3660046134d0565b610922565b604051610175929190613509565b61026361025e3660046134d0565b611222565b60408051928352602083019190915201610175565b61028b61028636600461352e565b611318565b005b6102a061029b3660046134d0565b61162b565b604051908152602001610175565b61028b6102bc366004613254565b6116a2565b61028b61188d565b6102a061198a565b6102016102df366004613574565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff166101a0565b6102a061031e3660046134d0565b61199b565b610336610331366004613591565b6119ec565b6040516101759190613621565b6102a06103513660046136bf565b611c6d565b61028b61036436600461372f565b611e6b565b61028b6103773660046137aa565b611e7f565b61028b61038a366004613837565b61221e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea72100000000000000000000000000000000000000000000000000000000148061042257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610430612fe0565b6000805b60028110156109145763ffffffff86166000908152600560205260408120859187600181111561046657610466613295565b600181111561047757610477613295565b81526020019081526020016000208260028110610496576104966138f4565b60070201600101541480156104aa57508315155b1561090c5763ffffffff86166000908152600560205260408120908660018111156104d7576104d7613295565b60018111156104e8576104e8613295565b81526020019081526020016000208160028110610507576105076138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054939592949386938501929190829060ff168781111561056057610560613295565b600181111561057157610571613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916105c990613923565b80601f01602080910402602001604051908101604052809291908181526020018280546105f590613923565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050815260200160028201805461065b90613923565b80601f016020809104026020016040519081016040528092919081815260200182805461068790613923565b80156106d45780601f106106a9576101008083540402835291602001916106d4565b820191906000526020600020905b8154815290600101906020018083116106b757829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561086257838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461073f90613923565b80601f016020809104026020016040519081016040528092919081815260200182805461076b90613923565b80156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b505050505081526020016002820180546107d190613923565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613923565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b50505050508152505081526020019060010190610702565b50505050815260200160048201805461087a90613923565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613923565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b505050505081525050815250509150925092505061091a565b600101610434565b50600090505b935093915050565b61092a612fe0565b610932612fe0565b63ffffffff841660009081526005602052604081208185600181111561095a5761095a613295565b600181111561096b5761096b613295565b815260200190815260200160002061098386866124db565b63ffffffff1660028110610999576109996138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff909116908111156109f4576109f4613295565b6001811115610a0557610a05613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610a5d90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8990613923565b8015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b50505050508152602001600282018054610aef90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613923565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610cf6578382906000526020600020906003020160405180606001604052908160008201548152602001600182018054610bd390613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613923565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b50505050508152602001600282018054610c6590613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9190613923565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b50505050508152505081526020019060010190610b96565b505050508152602001600482018054610d0e90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90613923565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b50505091909252505050905250602081015190915015610da5578092505b63ffffffff8516600090815260056020526040812081866001811115610dcd57610dcd613295565b6001811115610dde57610dde613295565b8152602001908152602001600020610df68787612532565b63ffffffff1660028110610e0c57610e0c6138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff90911690811115610e6757610e67613295565b6001811115610e7857610e78613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610ed090613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610efc90613923565b8015610f495780601f10610f1e57610100808354040283529160200191610f49565b820191906000526020600020905b815481529060010190602001808311610f2c57829003601f168201915b50505050508152602001600282018054610f6290613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613923565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561116957838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461104690613923565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613923565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b505050505081526020016002820180546110d890613923565b80601f016020809104026020016040519081016040528092919081815260200182805461110490613923565b80156111515780601f1061112657610100808354040283529160200191611151565b820191906000526020600020905b81548152906001019060200180831161113457829003601f168201915b50505050508152505081526020019060010190611009565b50505050815260200160048201805461118190613923565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613923565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b50505091909252505050905250602081015190915015611218578092505b50505b9250929050565b63ffffffff8216600090815260056020526040812081908184600181111561124c5761124c613295565b600181111561125d5761125d613295565b815260200190815260200160002061127585856124db565b63ffffffff166002811061128b5761128b6138f4565b6007020160010154600560008663ffffffff1663ffffffff16815260200190815260200160002060008560018111156112c6576112c6613295565b60018111156112d7576112d7613295565b81526020019081526020016000206112ef8686612532565b63ffffffff1660028110611305576113056138f4565b6007020160010154915091509250929050565b61132061258d565b8115801561132c575080155b15611363576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061136f8585612532565b63ffffffff86811660009081526005602052604081209290911692508491908660018111156113a0576113a0613295565b60018111156113b1576113b1613295565b815260200190815260200160002082600281106113d0576113d06138f4565b6007020160010154146114845763ffffffff851660009081526005602052604081209085600181111561140557611405613295565b600181111561141657611416613295565b81526020019081526020016000208160028110611435576114356138f4565b6007020160010154836040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405180910390fd5b63ffffffff85166000908152600560205260408120818660018111156114ac576114ac613295565b60018111156114bd576114bd613295565b81526020019081526020016000206114d587876124db565b63ffffffff16600281106114eb576114eb6138f4565b6007020190508281600101541461153e5760018101546040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101919091526024810184905260440161147b565b6000600180830182905563ffffffff881682526007602052604082209091878381111561156d5761156d613295565b600181111561157e5761157e613295565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000811663ffffffff918216939093181691909117905582156115f85760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a2505050505050565b63ffffffff821660009081526005602052604081208183600181111561165357611653613295565b600181111561166457611664613295565b815260200190815260200160002061167c84846124db565b63ffffffff1660028110611692576116926138f4565b6007020160010154905092915050565b6116aa61258d565b806116e1576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116ed8484612532565b63ffffffff858116600090815260056020526040812092909116925083919085600181111561171e5761171e613295565b600181111561172f5761172f613295565b8152602001908152602001600020826002811061174e5761174e6138f4565b6007020160010154146117f95763ffffffff841660009081526005602052604081209084600181111561178357611783613295565b600181111561179457611794613295565b815260200190815260200160002081600281106117b3576117b36138f4565b6007020160010154826040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a263ffffffff841660009081526005602052604081209084600181111561184c5761184c613295565b600181111561185d5761185d613295565b8152602001908152602001600020816002811061187c5761187c6138f4565b600702016001016000905550505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161147b565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600061199660036125c8565b905090565b63ffffffff82166000908152600560205260408120818360018111156119c3576119c3613295565b60018111156119d4576119d4613295565b815260200190815260200160002061167c8484612532565b606060006119fa60036125c8565b90506000611a0884866139a5565b9050831580611a175750818110155b15611a57576040805160008082526020820190925290611a4d565b611a3a61305c565b815260200190600190039081611a325790505b5092505050610422565b6000611a6385836139eb565b905082811115611a705750815b6000611a7c83836139fe565b67ffffffffffffffff811115611a9457611a946139bc565b604051908082528060200260200182016040528015611acd57816020015b611aba61305c565b815260200190600190039081611ab25790505b5090506000611adc60036125d2565b9050835b83811015611c60576000828281518110611afc57611afc6138f4565b60209081029190910181015160408051808201825267ffffffffffffffff831680825260009081526002855282902082518154608081880283018101909552606082018181529597509295860194909391928492849190840182828015611b8257602002820191906000526020600020905b815481526020019060010190808311611b6e575b5050509183525050600182015460ff166020820152600282018054604090920191611bac90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613923565b8015611c255780601f10611bfa57610100808354040283529160200191611c25565b820191906000526020600020905b815481529060010190602001808311611c0857829003601f168201915b50505091909252505050905284611c3c88856139fe565b81518110611c4c57611c4c6138f4565b602090810291909101015250600101611ae0565b5090979650505050505050565b6000611c7761258d565b611c88611c8384613cb4565b6125e6565b6000611c94868661199b565b9050828114611cd9576040517f93df584c000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161147b565b8015611d0b5760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b60068054600091908290611d249063ffffffff16613db0565b91906101000a81548163ffffffff021916908363ffffffff16021790559050611d6e878787604051602001611d5991906140be565b60405160208183030381529060405284612a54565b63ffffffff881660009081526005602052604081209194509081886001811115611d9a57611d9a613295565b6001811115611dab57611dab613295565b8152602001908152602001600020611dc38989612532565b63ffffffff1660028110611dd957611dd96138f4565b600702016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff841617815590508560028201611e2382826145e0565b905050837f94f085b7c57ec2a270befd0b7b2ec7452580040edee8bb0fb04609c81f0359c68388604051611e589291906147a7565b60405180910390a2505050949350505050565b611e73612b50565b611e7c81612bd1565b50565b611e87612b50565b60005b8381101561206d57611ece858583818110611ea757611ea76138f4565b9050602002016020810190611ebc91906147ce565b60039067ffffffffffffffff16612cc6565b611f3857848482818110611ee457611ee46138f4565b9050602002016020810190611ef991906147ce565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60026000868684818110611f4e57611f4e6138f4565b9050602002016020810190611f6391906147ce565b67ffffffffffffffff1681526020810191909152604001600090812090611f8a828261309f565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611fc26002830160006130bd565b5050612000858583818110611fd957611fd96138f4565b9050602002016020810190611fee91906147ce565b60039067ffffffffffffffff16612cde565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110612034576120346138f4565b905060200201602081019061204991906147ce565b60405167ffffffffffffffff909116815260200160405180910390a1600101611e8a565b5060005b8181101561221757600083838381811061208d5761208d6138f4565b905060200281019061209f91906147eb565b6120ad906020810190614325565b6120b69061481f565b905060008484848181106120cc576120cc6138f4565b90506020028101906120de91906147eb565b6120ec9060208101906147ce565b90506120fb8260000151612cea565b816020015160ff1660000361213c576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8116600090815260026020908152604090912083518051859361216c9284929101906130f7565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff909216919091179055604082015160028201906121b990826148f1565b506121d391506003905067ffffffffffffffff8316612e36565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e08183604051612205929190614a0b565b60405180910390a15050600101612071565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461228d576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061229c6004828688614a2e565b6122a591614a58565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbae4e0fa000000000000000000000000000000000000000000000000000000001480159061233b57507fffffffff0000000000000000000000000000000000000000000000000000000081167f7524051a0000000000000000000000000000000000000000000000000000000014155b801561238957507fffffffff0000000000000000000000000000000000000000000000000000000081167f5a837f970000000000000000000000000000000000000000000000000000000014155b156123e4576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008216600482015260240161147b565b60006123f4602460048789614a2e565b8101906124019190614aa0565b90508263ffffffff168114612452576040517f8a6e4ce800000000000000000000000000000000000000000000000000000000815263ffffffff80831660048301528416602482015260440161147b565b6000803073ffffffffffffffffffffffffffffffffffffffff16888860405161247c929190614ab9565b6000604051808303816000865af19150503d80600081146124b9576040519150601f19603f3d011682016040523d82523d6000602084013e6124be565b606091505b5091509150816124cf573d60208201fd5b50505050505050505050565b63ffffffff821660009081526007602052604081208183600181111561250357612503613295565b600181111561251457612514613295565b815260208101919091526040016000205463ffffffff169392505050565b63ffffffff821660009081526007602052604081208183600181111561255a5761255a613295565b600181111561256b5761256b613295565b815260208101919091526040016000205463ffffffff16600118905092915050565b3330146125c6576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610422825490565b606060006125df83612e42565b9392505050565b806020015167ffffffffffffffff1660000361262e576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151600181111561264357612643613295565b14158015612664575060018151600181111561266157612661613295565b14155b1561269b576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60808101515115806126d8575060408051600060208201520160405160208183030381529060405280519060200120816080015180519060200120145b1561270f576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a081015151158061274c5750604080516000602082015201604051602081830303815290604052805190602001208160a0015180519060200120145b15612783576040517fdee9857400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015161279e9060039067ffffffffffffffff16612cc6565b6127e65760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60408082015160208084015167ffffffffffffffff1660009081526002909152919091206001015460ff918216911681811115612859576040517f2db22040000000000000000000000000000000000000000000000000000000008152600481018290526024810183905260440161147b565b60c08301515161010081111561289b576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128a68360036139a5565b81116128de576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808267ffffffffffffffff8111156128fa576128fa6139bc565b604051908082528060200260200182016040528015612923578160200160208202803683370190505b50905060005b838110156129e35760008760c001518281518110612949576129496138f4565b6020026020010151905080604001515160001461296e578361296a81614ac9565b9450505b602081015151158061297f57508051155b156129b857806040517f9fa4031400000000000000000000000000000000000000000000000000000000815260040161147b9190614b01565b80600001518383815181106129cf576129cf6138f4565b602090810291909101015250600101612929565b5060006129f18560036139a5565b6129fc9060016139eb565b905080831015612a42576040517f548dd21f000000000000000000000000000000000000000000000000000000008152600481018490526024810182905260440161147b565b612a4b82612cea565b50505050505050565b6040516000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612ab2907f45564d000000000000000000000000000000000000000000000000000000000090469030908a908a908990602001614b14565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612aef918690602001614b6d565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120167e0a0000000000000000000000000000000000000000000000000000000000001795945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161147b565b3373ffffffffffffffffffffffffffffffffffffffff821603612c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161147b565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205415156125df565b60006125df8383612e9e565b60005b8151811015612e325760008019167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350c946fe848481518110612d4957612d496138f4565b60200260200101516040518263ffffffff1660e01b8152600401612d6f91815260200190565b600060405180830381865afa158015612d8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612dd29190810190614c06565b6080015103612e2a57818181518110612ded57612ded6138f4565b60200260200101516040517f8907a4fa00000000000000000000000000000000000000000000000000000000815260040161147b91815260200190565b600101612ced565b5050565b60006125df8383612f91565b606081600001805480602002602001604051908101604052809291908181526020018280548015612e9257602002820191906000526020600020905b815481526020019060010190808311612e7e575b50505050509050919050565b60008181526001830160205260408120548015612f87576000612ec26001836139fe565b8554909150600090612ed6906001906139fe565b9050808214612f3b576000866000018281548110612ef657612ef66138f4565b9060005260206000200154905080876000018481548110612f1957612f196138f4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f4c57612f4c614cde565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610422565b6000915050610422565b6000818152600183016020526040812054612fd857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610422565b506000610422565b60408051606081018252600080825260208201529081016130576040805161010081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff168152602001606081526020016060815260200160608152602001606081525090565b905290565b6040518060400160405280600067ffffffffffffffff168152602001613057604051806060016040528060608152602001600060ff168152602001606081525090565b5080546000825590600052602060002090810190611e7c9190613142565b5080546130c990613923565b6000825580601f106130d9575050565b601f016020900490600052602060002090810190611e7c9190613142565b828054828255906000526020600020908101928215613132579160200282015b82811115613132578251825591602001919060010190613117565b5061313e929150613142565b5090565b5b8082111561313e5760008155600101613143565b60006020828403121561316957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146125df57600080fd5b60005b838110156131b457818101518382015260200161319c565b50506000910152565b600081518084526131d5816020860160208601613199565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125df60208301846131bd565b63ffffffff81168114611e7c57600080fd5b80356132378161321a565b919050565b60028110611e7c57600080fd5b80356132378161323c565b60008060006060848603121561326957600080fd5b83356132748161321a565b925060208401356132848161323c565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106132fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b80518252600060208201516060602085015261331e60608501826131bd565b90506040830151848203604086015261333782826131bd565b95945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015611c60577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030189526133998383516132ff565b9884019892509083019060010161335f565b63ffffffff81511682526020810151602083015260006040820151606060408501526133db6060850182516132c4565b602081015167ffffffffffffffff8116608086015250604081015160ff811660a086015250606081015167ffffffffffffffff811660c08601525060808101516101008060e08701526134326101608701836131bd565b915060a08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa080888503018389015261346d84836131bd565b935060c08501519250808885030161012089015261348b8484613340565b935060e08501519450808885030161014089015250505061333781836131bd565b6040815260006134bf60408301856133ab565b905082151560208301529392505050565b600080604083850312156134e357600080fd5b82356134ee8161321a565b915060208301356134fe8161323c565b809150509250929050565b60408152600061351c60408301856133ab565b828103602084015261333781856133ab565b6000806000806080858703121561354457600080fd5b843561354f8161321a565b9350602085013561355f8161323c565b93969395505050506040820135916060013590565b60006020828403121561358657600080fd5b81356125df8161321a565b600080604083850312156135a457600080fd5b50508035926020909101359150565b805160608084528151908401819052600091602091908201906080860190845b818110156135ef578351835292840192918401916001016135d3565b505060ff602086015116602087015260408501519250858103604087015261361781846131bd565b9695505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156136b1578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff16845287015187840187905261369e878501826135b3565b958801959350509086019060010161364a565b509098975050505050505050565b600080600080608085870312156136d557600080fd5b84356136e08161321a565b935060208501356136f08161323c565b9250604085013567ffffffffffffffff81111561370c57600080fd5b8501610100818803121561371f57600080fd5b9396929550929360600135925050565b60006020828403121561374157600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146125df57600080fd5b60008083601f84011261377757600080fd5b50813567ffffffffffffffff81111561378f57600080fd5b6020830191508360208260051b850101111561121b57600080fd5b600080600080604085870312156137c057600080fd5b843567ffffffffffffffff808211156137d857600080fd5b6137e488838901613765565b909650945060208701359150808211156137fd57600080fd5b5061380a87828801613765565b95989497509550505050565b67ffffffffffffffff81168114611e7c57600080fd5b803561323781613816565b6000806000806000806080878903121561385057600080fd5b863567ffffffffffffffff8082111561386857600080fd5b6138748a838b01613765565b9098509650602089013591508082111561388d57600080fd5b818901915089601f8301126138a157600080fd5b8135818111156138b057600080fd5b8a60208285010111156138c257600080fd5b6020830196508095505050506138da6040880161382c565b91506138e86060880161322c565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061393757607f821691505b602082108103613970577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761042257610422613976565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8082018082111561042257610422613976565b8181038181111561042257610422613976565b6040516060810167ffffffffffffffff81118282101715613a3457613a346139bc565b60405290565b604051610100810167ffffffffffffffff81118282101715613a3457613a346139bc565b60405160e0810167ffffffffffffffff81118282101715613a3457613a346139bc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ac857613ac86139bc565b604052919050565b60ff81168114611e7c57600080fd5b803561323781613ad0565b600082601f830112613afb57600080fd5b813567ffffffffffffffff811115613b1557613b156139bc565b613b4660207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613a81565b818152846020838601011115613b5b57600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115613b9257613b926139bc565b5060051b60200190565b600082601f830112613bad57600080fd5b81356020613bc2613bbd83613b78565b613a81565b82815260059290921b84018101918181019086841115613be157600080fd5b8286015b84811015613ca957803567ffffffffffffffff80821115613c065760008081fd5b81890191506060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215613c3f5760008081fd5b613c47613a11565b87840135815260408085013584811115613c615760008081fd5b613c6f8e8b83890101613aea565b838b015250918401359183831115613c875760008081fd5b613c958d8a85880101613aea565b908201528652505050918301918301613be5565b509695505050505050565b60006101008236031215613cc757600080fd5b613ccf613a3a565b613cd883613249565b8152613ce66020840161382c565b6020820152613cf760408401613adf565b6040820152613d086060840161382c565b6060820152608083013567ffffffffffffffff80821115613d2857600080fd5b613d3436838701613aea565b608084015260a0850135915080821115613d4d57600080fd5b613d5936838701613aea565b60a084015260c0850135915080821115613d7257600080fd5b613d7e36838701613b9c565b60c084015260e0850135915080821115613d9757600080fd5b50613da436828601613aea565b60e08301525092915050565b600063ffffffff808316818103613dc957613dc9613976565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e0857600080fd5b830160208101925035905067ffffffffffffffff811115613e2857600080fd5b80360382131561121b57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613eb557600080fd5b830160208101925035905067ffffffffffffffff811115613ed557600080fd5b8060051b360382131561121b57600080fd5b60008383855260208086019550808560051b830101846000805b88811015613fc3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868503018a5282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1893603018112613f61578283fd5b8801803585526060613f7587830183613dd3565b8289890152613f878389018284613e37565b925050506040613f9981840184613dd3565b935087830382890152613fad838583613e37565b9d89019d97505050938601935050600101613f01565b509198975050505050505050565b6000610100613fe884613fe385613249565b6132c4565b613ff46020840161382c565b67ffffffffffffffff16602085015261400f60408401613adf565b60ff1660408501526140236060840161382c565b67ffffffffffffffff16606085015261403f6080840184613dd3565b8260808701526140528387018284613e37565b9250505061406360a0840184613dd3565b85830360a0870152614076838284613e37565b9250505061408760c0840184613e80565b85830360c087015261409a838284613ee7565b925050506140ab60e0840184613dd3565b85830360e0870152613617838284613e37565b6020815260006125df6020830184613fd1565b6000813561042281613816565b6000813561042281613ad0565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261412057600080fd5b83018035915067ffffffffffffffff82111561413b57600080fd5b60200191503681900382131561121b57600080fd5b5b81811015612e325760008155600101614151565b601f82111561419e57806000526020600020601f840160051c8101602085101561418c5750805b612217601f850160051c830182614150565b505050565b67ffffffffffffffff8311156141bb576141bb6139bc565b6141cf836141c98354613923565b83614165565b6000601f84116001811461422157600085156141eb5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612217565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156142705786850135825560209485019460019092019101614250565b50868210156142ab577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126142f257600080fd5b83018035915067ffffffffffffffff82111561430d57600080fd5b6020019150600581901b360382131561121b57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261435957600080fd5b9190910192915050565b61436d8154613923565b8015612e3257601f81116001811461438757505060009055565b8260005260206000206143a5601f840160051c820160018301614150565b60008085559055505050565b81358155600180820160206143c960208601866140eb565b67ffffffffffffffff8111156143e1576143e16139bc565b6143f5816143ef8654613923565b86614165565b6000601f82116001811461444757600083156144115750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1786556144da565b6000868152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841690835b828110156144935786850135825593870193908901908701614476565b50848210156144ce577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19848701351681555b505060018360011b0186555b505050505050506144ee60408301836140eb565b6144fc8183600286016141a3565b50505050565b6801000000000000000083111561451b5761451b6139bc565b80548382558084101561459a5760038160030260038104831461454057614540613976565b8560030260038104871461455657614556613976565b6000858152602081209283019291909101905b828210156145955780825561458060018301614363565b61458c60028301614363565b90830190614569565b505050505b5060008181526020812083915b858110156145d8576145c26145bc8487614325565b836143b1565b60209290920191600391909101906001016145a7565b505050505050565b81356145eb8161323c565b60028110614622577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541660ff821681178355505061469961465f602084016140d1565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b6146e36146a8604084016140de565b82547fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1660489190911b69ff00000000000000000016178255565b6147356146f2606084016140d1565b82547fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff1660509190911b71ffffffffffffffff0000000000000000000016178255565b61474260808301836140eb565b6147508183600186016141a3565b505061475f60a08301836140eb565b61476d8183600286016141a3565b505061477c60c08301836142bd565b61478a818360038601614502565b505061479960e08301836140eb565b6144fc8183600486016141a3565b63ffffffff831681526040602082015260006147c66040830184613fd1565b949350505050565b6000602082840312156147e057600080fd5b81356125df81613816565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261435957600080fd5b60006060823603121561483157600080fd5b614839613a11565b823567ffffffffffffffff8082111561485157600080fd5b9084019036601f83011261486457600080fd5b81356020614874613bbd83613b78565b82815260059290921b8401810191818101903684111561489357600080fd5b948201945b838610156148b157853582529482019490820190614898565b8652506148bf878201613adf565b908501525060408501359150808211156148d857600080fd5b506148e536828601613aea565b60408301525092915050565b815167ffffffffffffffff81111561490b5761490b6139bc565b61491f816149198454613923565b84614165565b602080601f831160018114614972576000841561493c5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556145d8565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b828110156149bf578886015182559484019460019091019084016149a0565b50858210156149fb57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831681526040602082015260006147c660408301846135b3565b60008085851115614a3e57600080fd5b83861115614a4b57600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015614a985780818660040360031b1b83161692505b505092915050565b600060208284031215614ab257600080fd5b5035919050565b8183823760009101908152919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614afa57614afa613976565b5060010190565b6020815260006125df60208301846132ff565b8681526020810186905273ffffffffffffffffffffffffffffffffffffffff8516604082015263ffffffff848116606083015260c0820190614b5960808401866132c4565b80841660a084015250979650505050505050565b60008351614b7f818460208801613199565b835190830190614b93818360208801613199565b01949350505050565b80516132378161321a565b600082601f830112614bb857600080fd5b81516020614bc8613bbd83613b78565b8083825260208201915060208460051b870101935086841115614bea57600080fd5b602086015b84811015613ca95780518352918301918301614bef565b600060208284031215614c1857600080fd5b815167ffffffffffffffff80821115614c3057600080fd5b9083019060e08286031215614c4457600080fd5b614c4c613a5e565b614c5583614b9c565b8152614c6360208401614b9c565b6020820152614c7460408401614b9c565b6040820152606083015160608201526080830151608082015260a083015182811115614c9f57600080fd5b614cab87828601614ba7565b60a08301525060c083015182811115614cc357600080fd5b614ccf87828601614ba7565b60c08301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + Bin: "0x60a06040526006805463ffffffff191690553480156200001e57600080fd5b5060405162004f1138038062004f118339810160408190526200004191620001b3565b3380600081620000985760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000cb57620000cb8162000108565b5050506001600160a01b038116620000f6576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001e5565b336001600160a01b03821603620001625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016200008f565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001c657600080fd5b81516001600160a01b0381168114620001de57600080fd5b9392505050565b608051614d026200020f60003960008181610180015281816122360152612cfd0152614d026000f3fe608060405234801561001057600080fd5b50600436106101515760003560e01c806379ba5097116100cd578063b74b235611610081578063f2fde38b11610066578063f2fde38b14610356578063f442c89a14610369578063fba64a7c1461037c57600080fd5b8063b74b235614610323578063bae4e0fa1461034357600080fd5b80638318ed5d116100b25780638318ed5d146102d15780638da5cb5b146102f2578063922ea4061461031057600080fd5b806379ba5097146102c15780637ac0d41e146102c957600080fd5b80633df45a72116101245780635a837f97116101095780635a837f97146102785780635f1edd9c1461028d5780637524051a146102ae57600080fd5b80633df45a721461022f5780634851d5491461025057600080fd5b806301ffc9a714610156578063020330e61461017e578063181f5a77146101c557806333d9704a1461020e575b600080fd5b610169610164366004613157565b61038f565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610175565b6102016040518060400160405280601281526020017f43434950486f6d6520312e362e302d646576000000000000000000000000000081525081565b6040516101759190613207565b61022161021c366004613254565b610428565b6040516101759291906134ac565b61024261023d3660046134d0565b610922565b604051610175929190613509565b61026361025e3660046134d0565b611222565b60408051928352602083019190915201610175565b61028b61028636600461352e565b611318565b005b6102a061029b3660046134d0565b61162b565b604051908152602001610175565b61028b6102bc366004613254565b6116a2565b61028b61188d565b6102a061198a565b6102016102df366004613574565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff166101a0565b6102a061031e3660046134d0565b61199b565b610336610331366004613591565b6119ec565b6040516101759190613621565b6102a06103513660046136bf565b611c6d565b61028b61036436600461372f565b611e6b565b61028b6103773660046137aa565b611e7f565b61028b61038a366004613837565b61221e565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea72100000000000000000000000000000000000000000000000000000000148061042257507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b610430612fe0565b6000805b60028110156109145763ffffffff86166000908152600560205260408120859187600181111561046657610466613295565b600181111561047757610477613295565b81526020019081526020016000208260028110610496576104966138f4565b60070201600101541480156104aa57508315155b1561090c5763ffffffff86166000908152600560205260408120908660018111156104d7576104d7613295565b60018111156104e8576104e8613295565b81526020019081526020016000208160028110610507576105076138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054939592949386938501929190829060ff168781111561056057610560613295565b600181111561057157610571613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916105c990613923565b80601f01602080910402602001604051908101604052809291908181526020018280546105f590613923565b80156106425780601f1061061757610100808354040283529160200191610642565b820191906000526020600020905b81548152906001019060200180831161062557829003601f168201915b5050505050815260200160028201805461065b90613923565b80601f016020809104026020016040519081016040528092919081815260200182805461068790613923565b80156106d45780601f106106a9576101008083540402835291602001916106d4565b820191906000526020600020905b8154815290600101906020018083116106b757829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561086257838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461073f90613923565b80601f016020809104026020016040519081016040528092919081815260200182805461076b90613923565b80156107b85780601f1061078d576101008083540402835291602001916107b8565b820191906000526020600020905b81548152906001019060200180831161079b57829003601f168201915b505050505081526020016002820180546107d190613923565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd90613923565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b50505050508152505081526020019060010190610702565b50505050815260200160048201805461087a90613923565b80601f01602080910402602001604051908101604052809291908181526020018280546108a690613923565b80156108f35780601f106108c8576101008083540402835291602001916108f3565b820191906000526020600020905b8154815290600101906020018083116108d657829003601f168201915b505050505081525050815250509150925092505061091a565b600101610434565b50600090505b935093915050565b61092a612fe0565b610932612fe0565b63ffffffff841660009081526005602052604081208185600181111561095a5761095a613295565b600181111561096b5761096b613295565b815260200190815260200160002061098386866124db565b63ffffffff1660028110610999576109996138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff909116908111156109f4576109f4613295565b6001811115610a0557610a05613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610a5d90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610a8990613923565b8015610ad65780601f10610aab57610100808354040283529160200191610ad6565b820191906000526020600020905b815481529060010190602001808311610ab957829003601f168201915b50505050508152602001600282018054610aef90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610b1b90613923565b8015610b685780601f10610b3d57610100808354040283529160200191610b68565b820191906000526020600020905b815481529060010190602001808311610b4b57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b82821015610cf6578382906000526020600020906003020160405180606001604052908160008201548152602001600182018054610bd390613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610bff90613923565b8015610c4c5780601f10610c2157610100808354040283529160200191610c4c565b820191906000526020600020905b815481529060010190602001808311610c2f57829003601f168201915b50505050508152602001600282018054610c6590613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610c9190613923565b8015610cde5780601f10610cb357610100808354040283529160200191610cde565b820191906000526020600020905b815481529060010190602001808311610cc157829003601f168201915b50505050508152505081526020019060010190610b96565b505050508152602001600482018054610d0e90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610d3a90613923565b8015610d875780601f10610d5c57610100808354040283529160200191610d87565b820191906000526020600020905b815481529060010190602001808311610d6a57829003601f168201915b50505091909252505050905250602081015190915015610da5578092505b63ffffffff8516600090815260056020526040812081866001811115610dcd57610dcd613295565b6001811115610dde57610dde613295565b8152602001908152602001600020610df68787612532565b63ffffffff1660028110610e0c57610e0c6138f4565b6040805160608101825260079290920292909201805463ffffffff1682526001808201546020840152835161010081018552600283018054949593949386019391929091839160ff90911690811115610e6757610e67613295565b6001811115610e7857610e78613295565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191610ed090613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610efc90613923565b8015610f495780601f10610f1e57610100808354040283529160200191610f49565b820191906000526020600020905b815481529060010190602001808311610f2c57829003601f168201915b50505050508152602001600282018054610f6290613923565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e90613923565b8015610fdb5780601f10610fb057610100808354040283529160200191610fdb565b820191906000526020600020905b815481529060010190602001808311610fbe57829003601f168201915b5050505050815260200160038201805480602002602001604051908101604052809291908181526020016000905b8282101561116957838290600052602060002090600302016040518060600160405290816000820154815260200160018201805461104690613923565b80601f016020809104026020016040519081016040528092919081815260200182805461107290613923565b80156110bf5780601f10611094576101008083540402835291602001916110bf565b820191906000526020600020905b8154815290600101906020018083116110a257829003601f168201915b505050505081526020016002820180546110d890613923565b80601f016020809104026020016040519081016040528092919081815260200182805461110490613923565b80156111515780601f1061112657610100808354040283529160200191611151565b820191906000526020600020905b81548152906001019060200180831161113457829003601f168201915b50505050508152505081526020019060010190611009565b50505050815260200160048201805461118190613923565b80601f01602080910402602001604051908101604052809291908181526020018280546111ad90613923565b80156111fa5780601f106111cf576101008083540402835291602001916111fa565b820191906000526020600020905b8154815290600101906020018083116111dd57829003601f168201915b50505091909252505050905250602081015190915015611218578092505b50505b9250929050565b63ffffffff8216600090815260056020526040812081908184600181111561124c5761124c613295565b600181111561125d5761125d613295565b815260200190815260200160002061127585856124db565b63ffffffff166002811061128b5761128b6138f4565b6007020160010154600560008663ffffffff1663ffffffff16815260200190815260200160002060008560018111156112c6576112c6613295565b60018111156112d7576112d7613295565b81526020019081526020016000206112ef8686612532565b63ffffffff1660028110611305576113056138f4565b6007020160010154915091509250929050565b61132061258d565b8115801561132c575080155b15611363576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061136f8585612532565b63ffffffff86811660009081526005602052604081209290911692508491908660018111156113a0576113a0613295565b60018111156113b1576113b1613295565b815260200190815260200160002082600281106113d0576113d06138f4565b6007020160010154146114845763ffffffff851660009081526005602052604081209085600181111561140557611405613295565b600181111561141657611416613295565b81526020019081526020016000208160028110611435576114356138f4565b6007020160010154836040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405180910390fd5b63ffffffff85166000908152600560205260408120818660018111156114ac576114ac613295565b60018111156114bd576114bd613295565b81526020019081526020016000206114d587876124db565b63ffffffff16600281106114eb576114eb6138f4565b6007020190508281600101541461153e5760018101546040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101919091526024810184905260440161147b565b6000600180830182905563ffffffff881682526007602052604082209091878381111561156d5761156d613295565b600181111561157e5761157e613295565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000811663ffffffff918216939093181691909117905582156115f85760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a2505050505050565b63ffffffff821660009081526005602052604081208183600181111561165357611653613295565b600181111561166457611664613295565b815260200190815260200160002061167c84846124db565b63ffffffff1660028110611692576116926138f4565b6007020160010154905092915050565b6116aa61258d565b806116e1576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006116ed8484612532565b63ffffffff858116600090815260056020526040812092909116925083919085600181111561171e5761171e613295565b600181111561172f5761172f613295565b8152602001908152602001600020826002811061174e5761174e6138f4565b6007020160010154146117f95763ffffffff841660009081526005602052604081209084600181111561178357611783613295565b600181111561179457611794613295565b815260200190815260200160002081600281106117b3576117b36138f4565b6007020160010154826040517f93df584c00000000000000000000000000000000000000000000000000000000815260040161147b929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a263ffffffff841660009081526005602052604081209084600181111561184c5761184c613295565b600181111561185d5761185d613295565b8152602001908152602001600020816002811061187c5761187c6138f4565b600702016001016000905550505050565b60015473ffffffffffffffffffffffffffffffffffffffff16331461190e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e657200000000000000000000604482015260640161147b565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600061199660036125c8565b905090565b63ffffffff82166000908152600560205260408120818360018111156119c3576119c3613295565b60018111156119d4576119d4613295565b815260200190815260200160002061167c8484612532565b606060006119fa60036125c8565b90506000611a0884866139a5565b9050831580611a175750818110155b15611a57576040805160008082526020820190925290611a4d565b611a3a61305c565b815260200190600190039081611a325790505b5092505050610422565b6000611a6385836139eb565b905082811115611a705750815b6000611a7c83836139fe565b67ffffffffffffffff811115611a9457611a946139bc565b604051908082528060200260200182016040528015611acd57816020015b611aba61305c565b815260200190600190039081611ab25790505b5090506000611adc60036125d2565b9050835b83811015611c60576000828281518110611afc57611afc6138f4565b60209081029190910181015160408051808201825267ffffffffffffffff831680825260009081526002855282902082518154608081880283018101909552606082018181529597509295860194909391928492849190840182828015611b8257602002820191906000526020600020905b815481526020019060010190808311611b6e575b5050509183525050600182015460ff166020820152600282018054604090920191611bac90613923565b80601f0160208091040260200160405190810160405280929190818152602001828054611bd890613923565b8015611c255780601f10611bfa57610100808354040283529160200191611c25565b820191906000526020600020905b815481529060010190602001808311611c0857829003601f168201915b50505091909252505050905284611c3c88856139fe565b81518110611c4c57611c4c6138f4565b602090810291909101015250600101611ae0565b5090979650505050505050565b6000611c7761258d565b611c88611c8384613c91565b6125e6565b6000611c94868661199b565b9050828114611cd9576040517f93df584c000000000000000000000000000000000000000000000000000000008152600481018290526024810184905260440161147b565b8015611d0b5760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b60068054600091908290611d249063ffffffff16613d8d565b91906101000a81548163ffffffff021916908363ffffffff16021790559050611d6e878787604051602001611d59919061409b565b60405160208183030381529060405284612a54565b63ffffffff881660009081526005602052604081209194509081886001811115611d9a57611d9a613295565b6001811115611dab57611dab613295565b8152602001908152602001600020611dc38989612532565b63ffffffff1660028110611dd957611dd96138f4565b600702016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff841617815590508560028201611e2382826145bd565b905050837f94f085b7c57ec2a270befd0b7b2ec7452580040edee8bb0fb04609c81f0359c68388604051611e58929190614784565b60405180910390a2505050949350505050565b611e73612b50565b611e7c81612bd1565b50565b611e87612b50565b60005b8381101561206d57611ece858583818110611ea757611ea76138f4565b9050602002016020810190611ebc91906147ab565b60039067ffffffffffffffff16612cc6565b611f3857848482818110611ee457611ee46138f4565b9050602002016020810190611ef991906147ab565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60026000868684818110611f4e57611f4e6138f4565b9050602002016020810190611f6391906147ab565b67ffffffffffffffff1681526020810191909152604001600090812090611f8a828261309f565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055611fc26002830160006130bd565b5050612000858583818110611fd957611fd96138f4565b9050602002016020810190611fee91906147ab565b60039067ffffffffffffffff16612cde565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110612034576120346138f4565b905060200201602081019061204991906147ab565b60405167ffffffffffffffff909116815260200160405180910390a1600101611e8a565b5060005b8181101561221757600083838381811061208d5761208d6138f4565b905060200281019061209f91906147c8565b6120ad906020810190614302565b6120b6906147fc565b905060008484848181106120cc576120cc6138f4565b90506020028101906120de91906147c8565b6120ec9060208101906147ab565b90506120fb8260000151612cea565b816020015160ff1660000361213c576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff8116600090815260026020908152604090912083518051859361216c9284929101906130f7565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff909216919091179055604082015160028201906121b990826148ce565b506121d391506003905067ffffffffffffffff8316612e36565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e081836040516122059291906149e8565b60405180910390a15050600101612071565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461228d576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061229c6004828688614a0b565b6122a591614a35565b90507fffffffff0000000000000000000000000000000000000000000000000000000081167fbae4e0fa000000000000000000000000000000000000000000000000000000001480159061233b57507fffffffff0000000000000000000000000000000000000000000000000000000081167f7524051a0000000000000000000000000000000000000000000000000000000014155b801561238957507fffffffff0000000000000000000000000000000000000000000000000000000081167f5a837f970000000000000000000000000000000000000000000000000000000014155b156123e4576040517f12ba286f0000000000000000000000000000000000000000000000000000000081527fffffffff000000000000000000000000000000000000000000000000000000008216600482015260240161147b565b60006123f4602460048789614a0b565b8101906124019190614a7d565b90508263ffffffff168114612452576040517f8a6e4ce800000000000000000000000000000000000000000000000000000000815263ffffffff80831660048301528416602482015260440161147b565b6000803073ffffffffffffffffffffffffffffffffffffffff16888860405161247c929190614a96565b6000604051808303816000865af19150503d80600081146124b9576040519150601f19603f3d011682016040523d82523d6000602084013e6124be565b606091505b5091509150816124cf573d60208201fd5b50505050505050505050565b63ffffffff821660009081526007602052604081208183600181111561250357612503613295565b600181111561251457612514613295565b815260208101919091526040016000205463ffffffff169392505050565b63ffffffff821660009081526007602052604081208183600181111561255a5761255a613295565b600181111561256b5761256b613295565b815260208101919091526040016000205463ffffffff16600118905092915050565b3330146125c6576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6000610422825490565b606060006125df83612e42565b9392505050565b806020015167ffffffffffffffff1660000361262e576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151600181111561264357612643613295565b14158015612664575060018151600181111561266157612661613295565b14155b1561269b576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60808101515115806126d8575060408051600060208201520160405160208183030381529060405280519060200120816080015180519060200120145b1561270f576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60a081015151158061274c5750604080516000602082015201604051602081830303815290604052805190602001208160a0015180519060200120145b15612783576040517fdee9857400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015161279e9060039067ffffffffffffffff16612cc6565b6127e65760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161147b565b60408082015160208084015167ffffffffffffffff1660009081526002909152919091206001015460ff918216911681811115612859576040517f2db22040000000000000000000000000000000000000000000000000000000008152600481018290526024810183905260440161147b565b60c08301515161010081111561289b576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6128a68360036139a5565b81116128de576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000808267ffffffffffffffff8111156128fa576128fa6139bc565b604051908082528060200260200182016040528015612923578160200160208202803683370190505b50905060005b838110156129e35760008760c001518281518110612949576129496138f4565b6020026020010151905080604001515160001461296e578361296a81614aa6565b9450505b602081015151158061297f57508051155b156129b857806040517f9fa4031400000000000000000000000000000000000000000000000000000000815260040161147b9190614ade565b80600001518383815181106129cf576129cf6138f4565b602090810291909101015250600101612929565b5060006129f18560036139a5565b6129fc9060016139eb565b905080831015612a42576040517f548dd21f000000000000000000000000000000000000000000000000000000008152600481018490526024810182905260440161147b565b612a4b82612cea565b50505050505050565b6040516000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90612ab2907f45564d000000000000000000000000000000000000000000000000000000000090469030908a908a908990602001614af1565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815290829052612aef918690602001614b4a565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120167e0a0000000000000000000000000000000000000000000000000000000000001795945050505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146125c6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161147b565b3373ffffffffffffffffffffffffffffffffffffffff821603612c50576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161147b565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205415156125df565b60006125df8383612e9e565b60005b8151811015612e325760008019167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350c946fe848481518110612d4957612d496138f4565b60200260200101516040518263ffffffff1660e01b8152600401612d6f91815260200190565b600060405180830381865afa158015612d8c573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201604052612dd29190810190614be3565b6080015103612e2a57818181518110612ded57612ded6138f4565b60200260200101516040517f8907a4fa00000000000000000000000000000000000000000000000000000000815260040161147b91815260200190565b600101612ced565b5050565b60006125df8383612f91565b606081600001805480602002602001604051908101604052809291908181526020018280548015612e9257602002820191906000526020600020905b815481526020019060010190808311612e7e575b50505050509050919050565b60008181526001830160205260408120548015612f87576000612ec26001836139fe565b8554909150600090612ed6906001906139fe565b9050808214612f3b576000866000018281548110612ef657612ef66138f4565b9060005260206000200154905080876000018481548110612f1957612f196138f4565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080612f4c57612f4c614cc6565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610422565b6000915050610422565b6000818152600183016020526040812054612fd857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610422565b506000610422565b60408051606081018252600080825260208201529081016130576040805161010081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff168152602001606081526020016060815260200160608152602001606081525090565b905290565b6040518060400160405280600067ffffffffffffffff168152602001613057604051806060016040528060608152602001600060ff168152602001606081525090565b5080546000825590600052602060002090810190611e7c9190613142565b5080546130c990613923565b6000825580601f106130d9575050565b601f016020900490600052602060002090810190611e7c9190613142565b828054828255906000526020600020908101928215613132579160200282015b82811115613132578251825591602001919060010190613117565b5061313e929150613142565b5090565b5b8082111561313e5760008155600101613143565b60006020828403121561316957600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146125df57600080fd5b60005b838110156131b457818101518382015260200161319c565b50506000910152565b600081518084526131d5816020860160208601613199565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125df60208301846131bd565b63ffffffff81168114611e7c57600080fd5b80356132378161321a565b919050565b60028110611e7c57600080fd5b80356132378161323c565b60008060006060848603121561326957600080fd5b83356132748161321a565b925060208401356132848161323c565b929592945050506040919091013590565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600281106132fb577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b9052565b80518252600060208201516060602085015261331e60608501826131bd565b90506040830151848203604086015261333782826131bd565b95945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015611c60577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08684030189526133998383516132ff565b9884019892509083019060010161335f565b63ffffffff81511682526020810151602083015260006040820151606060408501526133db6060850182516132c4565b602081015167ffffffffffffffff8116608086015250604081015160ff811660a086015250606081015167ffffffffffffffff811660c08601525060808101516101008060e08701526134326101608701836131bd565b915060a08301517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa080888503018389015261346d84836131bd565b935060c08501519250808885030161012089015261348b8484613340565b935060e08501519450808885030161014089015250505061333781836131bd565b6040815260006134bf60408301856133ab565b905082151560208301529392505050565b600080604083850312156134e357600080fd5b82356134ee8161321a565b915060208301356134fe8161323c565b809150509250929050565b60408152600061351c60408301856133ab565b828103602084015261333781856133ab565b6000806000806080858703121561354457600080fd5b843561354f8161321a565b9350602085013561355f8161323c565b93969395505050506040820135916060013590565b60006020828403121561358657600080fd5b81356125df8161321a565b600080604083850312156135a457600080fd5b50508035926020909101359150565b805160608084528151908401819052600091602091908201906080860190845b818110156135ef578351835292840192918401916001016135d3565b505060ff602086015116602087015260408501519250858103604087015261361781846131bd565b9695505050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156136b1578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff16845287015187840187905261369e878501826135b3565b958801959350509086019060010161364a565b509098975050505050505050565b600080600080608085870312156136d557600080fd5b84356136e08161321a565b935060208501356136f08161323c565b9250604085013567ffffffffffffffff81111561370c57600080fd5b8501610100818803121561371f57600080fd5b9396929550929360600135925050565b60006020828403121561374157600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146125df57600080fd5b60008083601f84011261377757600080fd5b50813567ffffffffffffffff81111561378f57600080fd5b6020830191508360208260051b850101111561121b57600080fd5b600080600080604085870312156137c057600080fd5b843567ffffffffffffffff808211156137d857600080fd5b6137e488838901613765565b909650945060208701359150808211156137fd57600080fd5b5061380a87828801613765565b95989497509550505050565b67ffffffffffffffff81168114611e7c57600080fd5b803561323781613816565b6000806000806000806080878903121561385057600080fd5b863567ffffffffffffffff8082111561386857600080fd5b6138748a838b01613765565b9098509650602089013591508082111561388d57600080fd5b818901915089601f8301126138a157600080fd5b8135818111156138b057600080fd5b8a60208285010111156138c257600080fd5b6020830196508095505050506138da6040880161382c565b91506138e86060880161322c565b90509295509295509295565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600181811c9082168061393757607f821691505b602082108103613970577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808202811582820484141761042257610422613976565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b8082018082111561042257610422613976565b8181038181111561042257610422613976565b6040516060810167ffffffffffffffff81118282101715613a3457613a346139bc565b60405290565b604051610100810167ffffffffffffffff81118282101715613a3457613a346139bc565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613aa557613aa56139bc565b604052919050565b60ff81168114611e7c57600080fd5b803561323781613aad565b600082601f830112613ad857600080fd5b813567ffffffffffffffff811115613af257613af26139bc565b613b2360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601613a5e565b818152846020838601011115613b3857600080fd5b816020850160208301376000918101602001919091529392505050565b600067ffffffffffffffff821115613b6f57613b6f6139bc565b5060051b60200190565b600082601f830112613b8a57600080fd5b81356020613b9f613b9a83613b55565b613a5e565b82815260059290921b84018101918181019086841115613bbe57600080fd5b8286015b84811015613c8657803567ffffffffffffffff80821115613be35760008081fd5b81890191506060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0848d03011215613c1c5760008081fd5b613c24613a11565b87840135815260408085013584811115613c3e5760008081fd5b613c4c8e8b83890101613ac7565b838b015250918401359183831115613c645760008081fd5b613c728d8a85880101613ac7565b908201528652505050918301918301613bc2565b509695505050505050565b60006101008236031215613ca457600080fd5b613cac613a3a565b613cb583613249565b8152613cc36020840161382c565b6020820152613cd460408401613abc565b6040820152613ce56060840161382c565b6060820152608083013567ffffffffffffffff80821115613d0557600080fd5b613d1136838701613ac7565b608084015260a0850135915080821115613d2a57600080fd5b613d3636838701613ac7565b60a084015260c0850135915080821115613d4f57600080fd5b613d5b36838701613b79565b60c084015260e0850135915080821115613d7457600080fd5b50613d8136828601613ac7565b60e08301525092915050565b600063ffffffff808316818103613da657613da6613976565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613de557600080fd5b830160208101925035905067ffffffffffffffff811115613e0557600080fd5b80360382131561121b57600080fd5b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112613e9257600080fd5b830160208101925035905067ffffffffffffffff811115613eb257600080fd5b8060051b360382131561121b57600080fd5b60008383855260208086019550808560051b830101846000805b88811015613fa0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0868503018a5282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1893603018112613f3e578283fd5b8801803585526060613f5287830183613db0565b8289890152613f648389018284613e14565b925050506040613f7681840184613db0565b935087830382890152613f8a838583613e14565b9d89019d97505050938601935050600101613ede565b509198975050505050505050565b6000610100613fc584613fc085613249565b6132c4565b613fd16020840161382c565b67ffffffffffffffff166020850152613fec60408401613abc565b60ff1660408501526140006060840161382c565b67ffffffffffffffff16606085015261401c6080840184613db0565b82608087015261402f8387018284613e14565b9250505061404060a0840184613db0565b85830360a0870152614053838284613e14565b9250505061406460c0840184613e5d565b85830360c0870152614077838284613ec4565b9250505061408860e0840184613db0565b85830360e0870152613617838284613e14565b6020815260006125df6020830184613fae565b6000813561042281613816565b6000813561042281613aad565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126140fd57600080fd5b83018035915067ffffffffffffffff82111561411857600080fd5b60200191503681900382131561121b57600080fd5b5b81811015612e32576000815560010161412e565b601f82111561417b57806000526020600020601f840160051c810160208510156141695750805b612217601f850160051c83018261412d565b505050565b67ffffffffffffffff831115614198576141986139bc565b6141ac836141a68354613923565b83614142565b6000601f8411600181146141fe57600085156141c85750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355612217565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561424d578685013582556020948501946001909201910161422d565b5086821015614288577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555050505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126142cf57600080fd5b83018035915067ffffffffffffffff8211156142ea57600080fd5b6020019150600581901b360382131561121b57600080fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261433657600080fd5b9190910192915050565b61434a8154613923565b8015612e3257601f81116001811461436457505060009055565b826000526020600020614382601f840160051c82016001830161412d565b60008085559055505050565b81358155600180820160206143a660208601866140c8565b67ffffffffffffffff8111156143be576143be6139bc565b6143d2816143cc8654613923565b86614142565b6000601f82116001811461442457600083156143ee5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600385901b1c1916600184901b1786556144b7565b6000868152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0841690835b828110156144705786850135825593870193908901908701614453565b50848210156144ab577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88660031b161c19848701351681555b505060018360011b0186555b505050505050506144cb60408301836140c8565b6144d9818360028601614180565b50505050565b680100000000000000008311156144f8576144f86139bc565b8054838255808410156145775760038160030260038104831461451d5761451d613976565b8560030260038104871461453357614533613976565b6000858152602081209283019291909101905b828210156145725780825561455d60018301614340565b61456960028301614340565b90830190614546565b505050505b5060008181526020812083915b858110156145b55761459f6145998487614302565b8361438e565b6020929092019160039190910190600101614584565b505050505050565b81356145c88161323c565b600281106145ff577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541660ff821681178355505061467661463c602084016140ae565b82547fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff1660089190911b68ffffffffffffffff0016178255565b6146c0614685604084016140bb565b82547fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1660489190911b69ff00000000000000000016178255565b6147126146cf606084016140ae565b82547fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff1660509190911b71ffffffffffffffff0000000000000000000016178255565b61471f60808301836140c8565b61472d818360018601614180565b505061473c60a08301836140c8565b61474a818360028601614180565b505061475960c083018361429a565b6147678183600386016144df565b505061477660e08301836140c8565b6144d9818360048601614180565b63ffffffff831681526040602082015260006147a36040830184613fae565b949350505050565b6000602082840312156147bd57600080fd5b81356125df81613816565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261433657600080fd5b60006060823603121561480e57600080fd5b614816613a11565b823567ffffffffffffffff8082111561482e57600080fd5b9084019036601f83011261484157600080fd5b81356020614851613b9a83613b55565b82815260059290921b8401810191818101903684111561487057600080fd5b948201945b8386101561488e57853582529482019490820190614875565b86525061489c878201613abc565b908501525060408501359150808211156148b557600080fd5b506148c236828601613ac7565b60408301525092915050565b815167ffffffffffffffff8111156148e8576148e86139bc565b6148fc816148f68454613923565b84614142565b602080601f83116001811461494f57600084156149195750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556145b5565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b8281101561499c5788860151825594840194600190910190840161497d565b50858210156149d857878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff831681526040602082015260006147a360408301846135b3565b60008085851115614a1b57600080fd5b83861115614a2857600080fd5b5050820193919092039150565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015614a755780818660040360031b1b83161692505b505092915050565b600060208284031215614a8f57600080fd5b5035919050565b8183823760009101908152919050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614ad757614ad7613976565b5060010190565b6020815260006125df60208301846132ff565b8681526020810186905273ffffffffffffffffffffffffffffffffffffffff8516604082015263ffffffff848116606083015260c0820190614b3660808401866132c4565b80841660a084015250979650505050505050565b60008351614b5c818460208801613199565b835190830190614b70818360208801613199565b01949350505050565b80516132378161321a565b600082601f830112614b9557600080fd5b81516020614ba5613b9a83613b55565b8083825260208201915060208460051b870101935086841115614bc757600080fd5b602086015b84811015613c865780518352918301918301614bcc565b600060208284031215614bf557600080fd5b815167ffffffffffffffff80821115614c0d57600080fd5b908301906101008286031215614c2257600080fd5b614c2a613a3a565b614c3383614b79565b8152614c4160208401614b79565b6020820152614c5260408401614b79565b6040820152606083015160608201526080830151608082015260a083015160a082015260c083015182811115614c8757600080fd5b614c9387828601614b84565b60c08301525060e083015182811115614cab57600080fd5b614cb787828601614b84565b60e08301525095945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var CCIPHomeABI = CCIPHomeMetaData.ABI diff --git a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt index f63f97fdda1..763dd0c7103 100644 --- a/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/ccip/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -6,7 +6,7 @@ burn_with_from_mint_rebasing_token_pool: ../../../contracts/solc/v0.8.24/BurnWit burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 734c2a0ea8f1224b5f01ed849410209e74b4e3427e8bfddb8ff5dd8ead5f2d8d burn_with_from_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.bin 1ed5c299f928529081dc01b7a46db2b5e6728001767863495a7675d8db99a9e2 ccip_encoding_utils: ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.abi ../../../contracts/solc/v0.8.24/ICCIPEncodingUtils/ICCIPEncodingUtils.bin a074f2ecf2749a1d5afc4cd9bfa48677f09c2be4e076776f87c6feb767432ecb -ccip_home: ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin c570b86f8ae7697d3478e70625e06f0f682e75c1f0b7538f4b6f581b0d294b2b +ccip_home: ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.abi ../../../contracts/solc/v0.8.24/CCIPHome/CCIPHome.bin 079b70ad36b4a9522518df82f01bdb8480fb9bb8de5791ef17ea1ddf044814be ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin 1a446106c0c93a97c2c4201319d4d41c79f0ac2ff369c97c4f9cc42b5e8e5a3d commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin 274d87db70b643e00ab0a7e7845bb4b791f3b613bfc87708d33fc5a8369e2a41 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin f7128dcc2ee6dbcbc976288abcc16970ffb19b59412c5202ef6b259d2007f801 diff --git a/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go b/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go index d9c7dbe69fb..971d2264d61 100644 --- a/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go +++ b/core/gethwrappers/keystone/generated/capabilities_registry/capabilities_registry.go @@ -69,6 +69,7 @@ type CapabilitiesRegistryNodeInfo struct { WorkflowDONId uint32 Signer [32]byte P2pId [32]byte + EncryptionPublicKey [32]byte HashedCapabilityIds [][32]byte CapabilitiesDONIds []*big.Int } @@ -82,12 +83,13 @@ type CapabilitiesRegistryNodeParams struct { NodeOperatorId uint32 Signer [32]byte P2pId [32]byte + EncryptionPublicKey [32]byte HashedCapabilityIds [][32]byte } var CapabilitiesRegistryMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"CapabilityRequiredByDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nodeCount\",\"type\":\"uint256\"}],\"name\":\"InvalidFaultTolerance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfCapabilitiesDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfWorkflowDON\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilitiesRegistry.Capability[]\",\"name\":\"capabilities\",\"type\":\"tuple[]\"}],\"name\":\"addCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"deprecateCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getCapabilityConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeInfo\",\"name\":\"nodeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeOperators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x6080604052600e80546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61514e80620001776000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c80635d83d967116100ee57806386fa424611610097578063d8bc7b6811610071578063d8bc7b68146103f6578063ddbe4f8214610409578063e29581aa1461041e578063f2fde38b1461043357600080fd5b806386fa42461461039b5780638da5cb5b146103ae5780639cb7c5f4146103d657600080fd5b8063715f5295116100c8578063715f52951461036d57806373ac22b41461038057806379ba50971461039357600080fd5b80635d83d967146103325780635e65e3091461034557806366acaa331461035857600080fd5b8063235374051161015b5780632c01a1e8116101355780632c01a1e8146102cb578063398f3773146102de5780633f2a13c9146102f157806350c946fe1461031257600080fd5b80632353740514610285578063275459f2146102a55780632a852933146102b857600080fd5b80631d05394c1161018c5780631d05394c1461023b578063214502431461025057806322bdbcbc1461026557600080fd5b80630fe5800a146101b357806312570011146101d9578063181f5a77146101fc575b600080fd5b6101c66101c1366004613f30565b610446565b6040519081526020015b60405180910390f35b6101ec6101e7366004613f94565b61047a565b60405190151581526020016101d0565b604080518082018252601a81527f4361706162696c6974696573526567697374727920312e302e30000000000000602082015290516101d0919061401b565b61024e610249366004614073565b610487565b005b610258610694565b6040516101d091906141f5565b610278610273366004614290565b6107f1565b6040516101d091906142e8565b610298610293366004614290565b6108de565b6040516101d091906142fb565b61024e6102b3366004614073565b610922565b61024e6102c636600461432f565b6109f9565b61024e6102d9366004614073565b610ad9565b61024e6102ec366004614073565b610d75565b6103046102ff3660046143d1565b610f34565b6040516101d09291906143fb565b610325610320366004613f94565b611120565b6040516101d091906144c0565b61024e610340366004614073565b6111fa565b61024e610353366004614073565b6112ef565b610360611a17565b6040516101d091906144d3565b61024e61037b366004614073565b611bfa565b61024e61038e366004614073565b611cac565b61024e61217a565b61024e6103a9366004614548565b612277565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b6103e96103e4366004613f94565b6125b7565b6040516101d09190614697565b61024e6104043660046146aa565b6127f2565b6104116128bc565b6040516101d09190614730565b6104266129b0565b6040516101d091906147a5565b61024e61044136600461483e565b612ab9565b6000828260405160200161045b9291906143fb565b6040516020818303038152906040528051906020012090505b92915050565b6000610474600583612acd565b61048f612ae8565b60005b8181101561068f5760008383838181106104ae576104ae614859565b90506020020160208101906104c39190614290565b63ffffffff8181166000908152600d60209081526040808320805464010000000081049095168085526001820190935290832094955093909290916a010000000000000000000090910460ff16905b61051b83612b6b565b8110156105bb57811561057157600c60006105368584612b75565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff1690556105b3565b6105b18663ffffffff16600c60006105928588612b7590919063ffffffff16565b8152602001908152602001600020600401612b8190919063ffffffff16565b505b600101610512565b508354640100000000900463ffffffff16600003610612576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff861660048201526024015b60405180910390fd5b63ffffffff85166000818152600d6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000169055519182527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a25050505050806001019050610492565b505050565b600e54606090640100000000900463ffffffff1660006106b56001836148b7565b63ffffffff1667ffffffffffffffff8111156106d3576106d3613dca565b60405190808252806020026020018201604052801561075a57816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816106f15790505b509050600060015b8363ffffffff168163ffffffff1610156107ce5763ffffffff8082166000908152600d602052604090205416156107c65761079c81612b8d565b8383815181106107ae576107ae614859565b6020026020010181905250816107c3906148d4565b91505b600101610762565b506107da6001846148b7565b63ffffffff1681146107ea578082525b5092915050565b60408051808201909152600081526060602082015263ffffffff82166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff16835260018101805491928401916108559061490c565b80601f01602080910402602001604051908101604052809291908181526020018280546108819061490c565b80156108ce5780601f106108a3576101008083540402835291602001916108ce565b820191906000526020600020905b8154815290600101906020018083116108b157829003601f168201915b5050505050815250509050919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c081019190915261047482612b8d565b61092a612ae8565b60005b63ffffffff811682111561068f57600083838363ffffffff1681811061095557610955614859565b905060200201602081019061096a9190614290565b63ffffffff81166000908152600b6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681559192506109b56001830182613d5d565b505060405163ffffffff8216907fa59268ca81d40429e65ccea5385b59cf2d3fc6519371dee92f8eb1dae5107a7a90600090a2506109f28161495f565b905061092d565b610a01612ae8565b63ffffffff8088166000908152600d60205260408120805490926401000000009091041690819003610a67576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8a166004820152602401610609565b610ace888888886040518060a001604052808f63ffffffff16815260200187610a8f9061495f565b63ffffffff811682528b15156020830152895460ff6a01000000000000000000009091048116151560408401528b166060909201919091529650612e58565b505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d6f576000848483818110610b1357610b13614859565b602090810292909201356000818152600c90935260409092206001810154929350919050610b70576040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260048101839052602401610609565b6000610b7e82600401612b6b565b1115610bd357610b916004820184612b75565b6040517f60a6d89800000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101839052604401610609565b805468010000000000000000900463ffffffff1615610c3b5780546040517f60b9df730000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff16600482015260248101839052604401610609565b83158015610c755750805463ffffffff166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610cae576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b6001810154610cbf90600790612b81565b506002810154610cd190600990612b81565b506000828152600c6020526040812080547fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016815560018101829055600281018290559060048201818181610d268282613d97565b5050505050507f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320582604051610d5d91815260200190565b60405180910390a15050600101610af7565b50505050565b610d7d612ae8565b60005b8181101561068f576000838383818110610d9c57610d9c614859565b9050602002810190610dae9190614982565b610db7906149c0565b805190915073ffffffffffffffffffffffffffffffffffffffff16610e08576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600b909252939020825181547fffffffffffffffffffffffff00000000000000000000000000000000000000001692169190911781559251919290916001820190610e949082614a7a565b5050600e8054909150600090610eaf9063ffffffff1661495f565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f78e94ca80be2c30abc061b99e7eb8583b1254781734b1e3ce339abb57da2fe8e8460200151604051610f22919061401b565b60405180910390a35050600101610d80565b63ffffffff8083166000908152600d60209081526040808320805464010000000090049094168084526001909401825280832085845260030190915281208054606093849390929091610f869061490c565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb29061490c565b8015610fff5780601f10610fd457610100808354040283529160200191610fff565b820191906000526020600020905b815481529060010190602001808311610fe257829003601f168201915b5050506000888152600260208190526040909120015492935060609262010000900473ffffffffffffffffffffffffffffffffffffffff16159150611112905057600086815260026020819052604091829020015490517f8318ed5d00000000000000000000000000000000000000000000000000000000815263ffffffff891660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638318ed5d90602401600060405180830381865afa1580156110c9573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261110f9190810190614b94565b90505b9093509150505b9250929050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c08101919091526040805160e0810182526000848152600c6020908152838220805463ffffffff8082168652640100000000820481168487018190526801000000000000000090920416858701526001820154606086015260028201546080860152835260030190529190912060a08201906111cf9061366f565b81526020016111f2600c600086815260200190815260200160002060040161366f565b905292915050565b611202612ae8565b60005b8181101561068f57600083838381811061122157611221614859565b90506020020135905061123e816003612acd90919063ffffffff16565b611277576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610609565b61128260058261367c565b6112bb576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610609565b60405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250600101611205565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d6f57600084848381811061132957611329614859565b905060200281019061133b9190614c02565b61134490614c36565b6040808201516000908152600c6020908152828220805463ffffffff168352600b82528383208451808601909552805473ffffffffffffffffffffffffffffffffffffffff16855260018101805496975091959394939092840191906113a99061490c565b80601f01602080910402602001604051908101604052809291908181526020018280546113d59061490c565b80156114225780601f106113f757610100808354040283529160200191611422565b820191906000526020600020905b81548152906001019060200180831161140557829003601f168201915b5050509190925250505060018301549091506114725782604001516040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260040161060991815260200190565b841580156114975750805173ffffffffffffffffffffffffffffffffffffffff163314155b156114d0576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b602083015161150b576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018201546020840151811461158c57602084015161152c90600790612acd565b15611563576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208401516001840155611578600782612b81565b50602084015161158a9060079061367c565b505b606084015180516000036115ce57806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614d09565b835460009085906004906115ef90640100000000900463ffffffff1661495f565b91906101000a81548163ffffffff021916908363ffffffff1602179055905060005b82518110156116d45761164783828151811061162f5761162f614859565b60200260200101516003612acd90919063ffffffff16565b61167f57826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614d09565b6116cb83828151811061169457611694614859565b60200260200101518760030160008563ffffffff1663ffffffff16815260200190815260200160002061367c90919063ffffffff16565b50600101611611565b50845468010000000000000000900463ffffffff1680156118355763ffffffff8082166000908152600d60209081526040808320805464010000000090049094168352600190930181528282206002018054845181840281018401909552808552929392909183018282801561176957602002820191906000526020600020905b815481526020019060010190808311611755575b5050505050905060005b8151811015611832576117c882828151811061179157611791614859565b60200260200101518960030160008763ffffffff1663ffffffff168152602001908152602001600020612acd90919063ffffffff16565b61182a578181815181106117de576117de614859565b6020026020010151836040517f03dcd86200000000000000000000000000000000000000000000000000000000815260040161060992919091825263ffffffff16602082015260400190565b600101611773565b50505b60006118438760040161366f565b905060005b81518163ffffffff161015611989576000828263ffffffff168151811061187157611871614859565b60209081029190910181015163ffffffff8082166000908152600d845260408082208054640100000000900490931682526001909201845281812060020180548351818702810187019094528084529395509093919290918301828280156118f857602002820191906000526020600020905b8154815260200190600101908083116118e4575b5050505050905060005b81518110156119755761195782828151811061192057611920614859565b60200260200101518c60030160008a63ffffffff1663ffffffff168152602001908152602001600020612acd90919063ffffffff16565b61196d578181815181106117de576117de614859565b600101611902565b505050806119829061495f565b9050611848565b50875187547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff90911690811788556040808a015160028a018190556020808c01518351928352908201527f4b5b465e22eea0c3d40c30e936643245b80d19b2dcf75788c0699fe8d8db645b910160405180910390a2505050505050505080600101905061130d565b600e5460609063ffffffff166000611a306001836148b7565b63ffffffff1667ffffffffffffffff811115611a4e57611a4e613dca565b604051908082528060200260200182016040528015611a9457816020015b604080518082019091526000815260606020820152815260200190600190039081611a6c5790505b509050600060015b8363ffffffff168163ffffffff161015611be45763ffffffff81166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611bdc5763ffffffff81166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191611b309061490c565b80601f0160208091040260200160405190810160405280929190818152602001828054611b5c9061490c565b8015611ba95780601f10611b7e57610100808354040283529160200191611ba9565b820191906000526020600020905b815481529060010190602001808311611b8c57829003601f168201915b505050505081525050838381518110611bc457611bc4614859565b602002602001018190525081611bd9906148d4565b91505b600101611a9c565b50600e546107da9060019063ffffffff166148b7565b611c02612ae8565b60005b8181101561068f576000838383818110611c2157611c21614859565b9050602002810190611c339190614d4d565b611c3c90614d90565b90506000611c5282600001518360200151610446565b9050611c5f60038261367c565b611c98576040517febf5255100000000000000000000000000000000000000000000000000000000815260048101829052602401610609565b611ca28183613688565b5050600101611c05565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d6f576000848483818110611ce657611ce6614859565b9050602002810190611cf89190614c02565b611d0190614c36565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff168252600181018054959650939491939092840191611d579061490c565b80601f0160208091040260200160405190810160405280929190818152602001828054611d839061490c565b8015611dd05780601f10611da557610100808354040283529160200191611dd0565b820191906000526020600020905b815481529060010190602001808311611db357829003601f168201915b50505091909252505081519192505073ffffffffffffffffffffffffffffffffffffffff16611e365781516040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610609565b83158015611e5b5750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611e94576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b6040808301516000908152600c60205220600181015415611ee95782604001516040517f5461848300000000000000000000000000000000000000000000000000000000815260040161060991815260200190565b6040830151611f2c5782604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161060991815260200190565b60208301511580611f4957506020830151611f4990600790612acd565b15611f80576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608301518051600003611fc257806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614d09565b81548290600490611fe090640100000000900463ffffffff1661495f565b82546101009290920a63ffffffff818102199093169183160217909155825464010000000090041660005b82518110156120b65761202983828151811061162f5761162f614859565b61206157826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614d09565b6120ad83828151811061207657612076614859565b60200260200101518560030160008563ffffffff1663ffffffff16815260200190815260200160002061367c90919063ffffffff16565b5060010161200b565b50845183547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9182161784556040860151600285015560208601516001850181905561210c916007919061367c16565b50604085015161211e9060099061367c565b50845160408087015160208089015183519283529082015263ffffffff909216917f74becb12a5e8fd0e98077d02dfba8f647c9670c9df177e42c2418cf17a636f05910160405180910390a25050505050806001019050611cca565b60015473ffffffffffffffffffffffffffffffffffffffff1633146121fb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610609565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b8281146122ba576040517fab8b67c60000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610609565b6000805473ffffffffffffffffffffffffffffffffffffffff16905b848110156125af5760008686838181106122f2576122f2614859565b90506020020160208101906123079190614290565b63ffffffff81166000908152600b6020526040902080549192509073ffffffffffffffffffffffffffffffffffffffff16612376576040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610609565b600086868581811061238a5761238a614859565b905060200281019061239c9190614982565b6123a5906149c0565b805190915073ffffffffffffffffffffffffffffffffffffffff166123f6576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815473ffffffffffffffffffffffffffffffffffffffff16331480159061243357503373ffffffffffffffffffffffffffffffffffffffff861614155b1561246c576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b8051825473ffffffffffffffffffffffffffffffffffffffff90811691161415806124e857506020808201516040516124a5920161401b565b60405160208183030381529060405280519060200120826001016040516020016124cf9190614e36565b6040516020818303038152906040528051906020012014155b156125a157805182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602081015160018301906125429082614a7a565b50806000015173ffffffffffffffffffffffffffffffffffffffff168363ffffffff167f86f41145bde5dd7f523305452e4aad3685508c181432ec733d5f345009358a288360200151604051612598919061401b565b60405180910390a35b5050508060010190506122d6565b505050505050565b6125f86040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b6040805160e081018252838152600084815260026020908152929020805491928301916126249061490c565b80601f01602080910402602001604051908101604052809291908181526020018280546126509061490c565b801561269d5780601f106126725761010080835404028352916020019161269d565b820191906000526020600020905b81548152906001019060200180831161268057829003601f168201915b505050505081526020016002600085815260200190815260200160002060010180546126c89061490c565b80601f01602080910402602001604051908101604052809291908181526020018280546126f49061490c565b80156127415780601f1061271657610100808354040283529160200191612741565b820191906000526020600020905b81548152906001019060200180831161272457829003601f168201915b50505091835250506000848152600260208181526040909220015491019060ff166003811115612773576127736145b4565b815260008481526002602081815260409092200154910190610100900460ff1660018111156127a4576127a46145b4565b81526000848152600260208181526040928390209091015462010000900473ffffffffffffffffffffffffffffffffffffffff1690830152016127e8600585612acd565b1515905292915050565b6127fa612ae8565b600e805460009164010000000090910463ffffffff1690600461281c8361495f565b82546101009290920a63ffffffff81810219909316918316021790915581166000818152600d602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001684179055815160a08101835292835260019083015286151590820152841515606082015260ff841660808201529091506128b2908990899089908990612e58565b5050505050505050565b606060006128ca600361366f565b90506000815167ffffffffffffffff8111156128e8576128e8613dca565b60405190808252806020026020018201604052801561295a57816020015b6129476040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b8152602001906001900390816129065790505b50905060005b82518110156107ea5761298b83828151811061297e5761297e614859565b60200260200101516125b7565b82828151811061299d5761299d614859565b6020908102919091010152600101612960565b606060006129be600961366f565b90506000815167ffffffffffffffff8111156129dc576129dc613dca565b604051908082528060200260200182016040528015612a6357816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816129fa5790505b50905060005b82518110156107ea57612a94838281518110612a8757612a87614859565b6020026020010151611120565b828281518110612aa657612aa6614859565b6020908102919091010152600101612a69565b612ac1612ae8565b612aca81613870565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612b69576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610609565b565b6000610474825490565b6000612ae18383613965565b6000612ae1838361398f565b6040805160e0810182526000808252602080830182905282840182905260608084018390526080840183905260a0840181905260c084015263ffffffff8581168352600d8252848320805464010000000090049091168084526001909101825284832060028101805487518186028101860190985280885295969295919493909190830182828015612c3e57602002820191906000526020600020905b815481526020019060010190808311612c2a575b505050505090506000815167ffffffffffffffff811115612c6157612c61613dca565b604051908082528060200260200182016040528015612ca757816020015b604080518082019091526000815260606020820152815260200190600190039081612c7f5790505b50905060005b8151811015612dbf576040518060400160405280848381518110612cd357612cd3614859565b60200260200101518152602001856003016000868581518110612cf857612cf8614859565b602002602001015181526020019081526020016000208054612d199061490c565b80601f0160208091040260200160405190810160405280929190818152602001828054612d459061490c565b8015612d925780601f10612d6757610100808354040283529160200191612d92565b820191906000526020600020905b815481529060010190602001808311612d7557829003601f168201915b5050505050815250828281518110612dac57612dac614859565b6020908102919091010152600101612cad565b506040805160e08101825263ffffffff8089166000818152600d6020818152868320548086168752948b168187015260ff680100000000000000008604811697870197909752690100000000000000000085048716151560608701529290915290526a010000000000000000000090049091161515608082015260a08101612e468561366f565b81526020019190915295945050505050565b805163ffffffff9081166000908152600d602090815260408083208286015190941683526001909301905220608082015160ff161580612eaa575060808201518590612ea5906001614ee4565b60ff16115b15612ef35760808201516040517f25b4d61800000000000000000000000000000000000000000000000000000000815260ff909116600482015260248101869052604401610609565b6001826020015163ffffffff161115612fdb57815163ffffffff166000908152600d602090815260408220908401516001918201918391612f3491906148b7565b63ffffffff1663ffffffff168152602001908152602001600020905060005b612f5c82612b6b565b811015612fd857612f8b846000015163ffffffff16600c60006105928587600001612b7590919063ffffffff16565b50600c6000612f9a8484612b75565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff169055600101612f53565b50505b60005b858110156132155761300b878783818110612ffb57612ffb614859565b859260209091020135905061367c565b61306c57825187878381811061302357613023614859565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610609565b8260600151156131c357825163ffffffff16600c600089898581811061309457613094614859565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff161480159061310e5750600c60008888848181106130df576130df614859565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff1615155b1561317057825187878381811061312757613127614859565b6040517f60b9df7300000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610609565b8251600c600089898581811061318857613188614859565b90506020020135815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff16021790555061320d565b825161320b9063ffffffff16600c60008a8a868181106131e5576131e5614859565b90506020020135815260200190815260200160002060040161367c90919063ffffffff16565b505b600101612fde565b5060005b83811015613623573685858381811061323457613234614859565b90506020028101906132469190614982565b905061325460038235612acd565b61328d576040517fe181733f00000000000000000000000000000000000000000000000000000000815281356004820152602401610609565b61329960058235612acd565b156132d3576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815281356004820152602401610609565b80356000908152600384016020526040812080546132f09061490c565b9050111561333c5783516040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015281356024820152604401610609565b60005b87811015613446576133e38235600c60008c8c8681811061336257613362614859565b9050602002013581526020019081526020016000206003016000600c60008e8e8881811061339257613392614859565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020612acd90919063ffffffff16565b61343e578888828181106133f9576133f9614859565b6040517fa7e792500000000000000000000000000000000000000000000000000000000081526020909102929092013560048301525082356024820152604401610609565b60010161333f565b506002830180546001810182556000918252602091829020833591015561346f90820182614efd565b8235600090815260038601602052604090209161348d919083614f62565b50604080850151855163ffffffff9081166000908152600d602090815284822080549415156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff90951694909417909355606088015188518316825284822080549115156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff9092169190911790556080880151885183168252848220805460ff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055828801805189518416835294909120805494909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9094169390931790558551915161361a92918435908c908c906135e090880188614efd565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613a8292505050565b50600101613219565b50815160208084015160405163ffffffff91821681529216917ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a2505050505050565b60606000612ae183613b63565b6000612ae18383613bbf565b608081015173ffffffffffffffffffffffffffffffffffffffff161561372a576136d681608001517f78bea72100000000000000000000000000000000000000000000000000000000613c0e565b61372a5760808101516040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610609565b6000828152600260205260409020815182919081906137499082614a7a565b506020820151600182019061375e9082614a7a565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018360038111156137a0576137a06145b4565b021790555060608201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101008360018111156137e7576137e76145b4565b0217905550608091909101516002909101805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90921691909117905560405182907f04f0a9bcf3f3a3b42a4d7ca081119755f82ebe43e0d30c8f7292c4fe0dc4a2ae90600090a25050565b3373ffffffffffffffffffffffffffffffffffffffff8216036138ef576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610609565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600082600001828154811061397c5761397c614859565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613a785760006139b360018361507d565b85549091506000906139c79060019061507d565b9050818114613a2c5760008660000182815481106139e7576139e7614859565b9060005260206000200154905080876000018481548110613a0a57613a0a614859565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613a3d57613a3d615090565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610474565b6000915050610474565b6000848152600260208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff16156125af57600084815260026020819052604091829020015490517ffba64a7c0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c90613b29908690869086908b908d906004016150bf565b600060405180830381600087803b158015613b4357600080fd5b505af1158015613b57573d6000803e3d6000fd5b50505050505050505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613bb357602002820191906000526020600020905b815481526020019060010190808311613b9f575b50505050509050919050565b6000818152600183016020526040812054613c0657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610474565b506000610474565b6000613c1983613c2a565b8015612ae15750612ae18383613c8e565b6000613c56827f01ffc9a700000000000000000000000000000000000000000000000000000000613c8e565b80156104745750613c87827fffffffff00000000000000000000000000000000000000000000000000000000613c8e565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613d46575060208210155b8015613d525750600081115b979650505050505050565b508054613d699061490c565b6000825580601f10613d79575050565b601f016020900490600052602060002090810190612aca9190613db1565b5080546000825590600052602060002090810190612aca91905b5b80821115613dc65760008155600101613db2565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613e1c57613e1c613dca565b60405290565b60405160a0810167ffffffffffffffff81118282101715613e1c57613e1c613dca565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613e8c57613e8c613dca565b604052919050565b600067ffffffffffffffff821115613eae57613eae613dca565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613eeb57600080fd5b8135613efe613ef982613e94565b613e45565b818152846020838601011115613f1357600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613f4357600080fd5b823567ffffffffffffffff80821115613f5b57600080fd5b613f6786838701613eda565b93506020850135915080821115613f7d57600080fd5b50613f8a85828601613eda565b9150509250929050565b600060208284031215613fa657600080fd5b5035919050565b60005b83811015613fc8578181015183820152602001613fb0565b50506000910152565b60008151808452613fe9816020860160208601613fad565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612ae16020830184613fd1565b60008083601f84011261404057600080fd5b50813567ffffffffffffffff81111561405857600080fd5b6020830191508360208260051b850101111561111957600080fd5b6000806020838503121561408657600080fd5b823567ffffffffffffffff81111561409d57600080fd5b6140a98582860161402e565b90969095509350505050565b60008151808452602080850194506020840160005b838110156140e6578151875295820195908201906001016140ca565b509495945050505050565b600082825180855260208086019550808260051b84010181860160005b8481101561416e578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018952815180518452840151604085850181905261415a81860183613fd1565b9a86019a945050509083019060010161410e565b5090979650505050505050565b600063ffffffff8083511684528060208401511660208501525060ff604083015116604084015260608201511515606084015260808201511515608084015260a082015160e060a08501526141d360e08501826140b5565b905060c083015184820360c08601526141ec82826140f1565b95945050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561426a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261425885835161417b565b9450928501929085019060010161421e565b5092979650505050505050565b803563ffffffff8116811461428b57600080fd5b919050565b6000602082840312156142a257600080fd5b612ae182614277565b73ffffffffffffffffffffffffffffffffffffffff815116825260006020820151604060208501526142e06040850182613fd1565b949350505050565b602081526000612ae160208301846142ab565b602081526000612ae1602083018461417b565b8035801515811461428b57600080fd5b803560ff8116811461428b57600080fd5b600080600080600080600060a0888a03121561434a57600080fd5b61435388614277565b9650602088013567ffffffffffffffff8082111561437057600080fd5b61437c8b838c0161402e565b909850965060408a013591508082111561439557600080fd5b506143a28a828b0161402e565b90955093506143b590506060890161430e565b91506143c36080890161431e565b905092959891949750929550565b600080604083850312156143e457600080fd5b6143ed83614277565b946020939093013593505050565b60408152600061440e6040830185613fd1565b82810360208401526141ec8185613fd1565b600063ffffffff808351168452602081818501511681860152816040850151166040860152606084015160608601526080840151608086015260a0840151915060e060a086015261447460e08601836140b5565b60c08581015187830391880191909152805180835290830193506000918301905b808310156144b55784518252938301936001929092019190830190614495565b509695505050505050565b602081526000612ae16020830184614420565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561426a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526145368583516142ab565b945092850192908501906001016144fc565b6000806000806040858703121561455e57600080fd5b843567ffffffffffffffff8082111561457657600080fd5b6145828883890161402e565b9096509450602087013591508082111561459b57600080fd5b506145a88782880161402e565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b805182526000602082015160e0602085015261460260e0850182613fd1565b90506040830151848203604086015261461b8282613fd1565b915050606083015160048110614633576146336145b4565b606085015260808301516002811061464d5761464d6145b4565b8060808601525060a083015161467b60a086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c083015161468f60c086018215159052565b509392505050565b602081526000612ae160208301846145e3565b600080600080600080600060a0888a0312156146c557600080fd5b873567ffffffffffffffff808211156146dd57600080fd5b6146e98b838c0161402e565b909950975060208a013591508082111561470257600080fd5b5061470f8a828b0161402e565b909650945061472290506040890161430e565b92506143b56060890161430e565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561426a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147938583516145e3565b94509285019290850190600101614759565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561426a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614808858351614420565b945092850192908501906001016147ce565b803573ffffffffffffffffffffffffffffffffffffffff8116811461428b57600080fd5b60006020828403121561485057600080fd5b612ae18261481a565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff8281168282160390808211156107ea576107ea614888565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361490557614905614888565b5060010190565b600181811c9082168061492057607f821691505b602082108103614959577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600063ffffffff80831681810361497857614978614888565b6001019392505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126149b657600080fd5b9190910192915050565b6000604082360312156149d257600080fd5b6040516040810167ffffffffffffffff82821081831117156149f6576149f6613dca565b81604052614a038561481a565b83526020850135915080821115614a1957600080fd5b50614a2636828601613eda565b60208301525092915050565b601f82111561068f576000816000526020600020601f850160051c81016020861015614a5b5750805b601f850160051c820191505b818110156125af57828155600101614a67565b815167ffffffffffffffff811115614a9457614a94613dca565b614aa881614aa2845461490c565b84614a32565b602080601f831160018114614afb5760008415614ac55750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b1785556125af565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614b4857888601518255948401946001909101908401614b29565b5085821015614b8457878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614ba657600080fd5b815167ffffffffffffffff811115614bbd57600080fd5b8201601f81018413614bce57600080fd5b8051614bdc613ef982613e94565b818152856020838501011115614bf157600080fd5b6141ec826020830160208601613fad565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff818336030181126149b657600080fd5b600060808236031215614c4857600080fd5b614c50613df9565b614c5983614277565b81526020808401358183015260408401356040830152606084013567ffffffffffffffff80821115614c8a57600080fd5b9085019036601f830112614c9d57600080fd5b813581811115614caf57614caf613dca565b8060051b9150614cc0848301613e45565b8181529183018401918481019036841115614cda57600080fd5b938501935b83851015614cf857843582529385019390850190614cdf565b606087015250939695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614d4157835183529284019291840191600101614d25565b50909695505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126149b657600080fd5b80356002811061428b57600080fd5b600060a08236031215614da257600080fd5b614daa613e22565b823567ffffffffffffffff80821115614dc257600080fd5b614dce36838701613eda565b83526020850135915080821115614de457600080fd5b50614df136828601613eda565b602083015250604083013560048110614e0957600080fd5b6040820152614e1a60608401614d81565b6060820152614e2b6080840161481a565b608082015292915050565b6000602080835260008454614e4a8161490c565b8060208701526040600180841660008114614e6c5760018114614ea657614ed6565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550614ed6565b89600052602060002060005b85811015614ecd5781548b8201860152908301908801614eb2565b8a016040019650505b509398975050505050505050565b60ff818116838216019081111561047457610474614888565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f3257600080fd5b83018035915067ffffffffffffffff821115614f4d57600080fd5b60200191503681900382131561111957600080fd5b67ffffffffffffffff831115614f7a57614f7a613dca565b614f8e83614f88835461490c565b83614a32565b6000601f841160018114614fe05760008515614faa5750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355615076565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561502f578685013582556020948501946001909201910161500f565b508682101561506a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b8181038181111561047457610474614888565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156150f857600080fd5b8560051b808860a0850137820182810360a0908101602085015261511e90820187613fd1565b91505063ffffffff8085166040840152808416606084015250969550505050505056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"AccessForbidden\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityIsDeprecated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"CapabilityRequiredByDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"DONDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"DuplicateDONNode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedConfigurationContract\",\"type\":\"address\"}],\"name\":\"InvalidCapabilityConfigurationContractInterface\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"nodeCount\",\"type\":\"uint256\"}],\"name\":\"InvalidFaultTolerance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"InvalidNodeCapabilities\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeEncryptionPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeOperatorAdmin\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"InvalidNodeP2PId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidNodeSigner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"lengthOne\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"lengthTwo\",\"type\":\"uint256\"}],\"name\":\"LengthMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeAlreadyExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"NodeDoesNotSupportCapability\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfCapabilitiesDON\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"nodeP2PId\",\"type\":\"bytes32\"}],\"name\":\"NodePartOfWorkflowDON\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityConfigured\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"CapabilityDeprecated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"NodeOperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"name\":\"NodeOperatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"}],\"name\":\"NodeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"}],\"internalType\":\"structCapabilitiesRegistry.Capability[]\",\"name\":\"capabilities\",\"type\":\"tuple[]\"}],\"name\":\"addCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"addDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"addNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"addNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"name\":\"deprecateCapabilities\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilities\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"}],\"name\":\"getCapability\",\"outputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"hashedId\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityType\",\"name\":\"capabilityType\",\"type\":\"uint8\"},{\"internalType\":\"enumCapabilitiesRegistry.CapabilityResponseType\",\"name\":\"responseType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"configurationContract\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isDeprecated\",\"type\":\"bool\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"}],\"name\":\"getCapabilityConfigs\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"getDON\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDONs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"id\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"bool\",\"name\":\"acceptsWorkflows\",\"type\":\"bool\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodeP2PIds\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"}],\"internalType\":\"structCapabilitiesRegistry.DONInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"labelledName\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"name\":\"getHashedCapabilityId\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"getNode\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeInfo\",\"name\":\"nodeInfo\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"}],\"name\":\"getNodeOperator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodeOperators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNodes\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"workflowDONId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256[]\",\"name\":\"capabilitiesDONIds\",\"type\":\"uint256[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"hashedCapabilityId\",\"type\":\"bytes32\"}],\"name\":\"isCapabilityDeprecated\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"donIds\",\"type\":\"uint32[]\"}],\"name\":\"removeDONs\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"}],\"name\":\"removeNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"removedNodeP2PIds\",\"type\":\"bytes32[]\"}],\"name\":\"removeNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"nodes\",\"type\":\"bytes32[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"capabilityId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCapabilitiesRegistry.CapabilityConfiguration[]\",\"name\":\"capabilityConfigurations\",\"type\":\"tuple[]\"},{\"internalType\":\"bool\",\"name\":\"isPublic\",\"type\":\"bool\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"}],\"name\":\"updateDON\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32[]\",\"name\":\"nodeOperatorIds\",\"type\":\"uint32[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"}],\"internalType\":\"structCapabilitiesRegistry.NodeOperator[]\",\"name\":\"nodeOperators\",\"type\":\"tuple[]\"}],\"name\":\"updateNodeOperators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"nodeOperatorId\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"signer\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"encryptionPublicKey\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32[]\",\"name\":\"hashedCapabilityIds\",\"type\":\"bytes32[]\"}],\"internalType\":\"structCapabilitiesRegistry.NodeParams[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"}],\"name\":\"updateNodes\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x6080604052600e80546001600160401b0319166401000000011790553480156200002857600080fd5b503380600081620000805760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000b357620000b381620000bc565b50505062000167565b336001600160a01b03821603620001165760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000077565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61514880620001776000396000f3fe608060405234801561001057600080fd5b50600436106101ae5760003560e01c806350c946fe116100ee57806386fa424611610097578063d8bc7b6811610071578063d8bc7b68146103f6578063ddbe4f8214610409578063e29581aa1461041e578063f2fde38b1461043357600080fd5b806386fa42461461039b5780638da5cb5b146103ae5780639cb7c5f4146103d657600080fd5b8063715f5295116100c8578063715f52951461036d57806379ba50971461038057806384f5ed8a1461038857600080fd5b806350c946fe146103255780635d83d9671461034557806366acaa331461035857600080fd5b8063235374051161015b5780632c01a1e8116101355780632c01a1e8146102cb578063358039f4146102de578063398f3773146102f15780633f2a13c91461030457600080fd5b80632353740514610285578063275459f2146102a55780632a852933146102b857600080fd5b80631d05394c1161018c5780631d05394c1461023b578063214502431461025057806322bdbcbc1461026557600080fd5b80630fe5800a146101b357806312570011146101d9578063181f5a77146101fc575b600080fd5b6101c66101c1366004613f7c565b610446565b6040519081526020015b60405180910390f35b6101ec6101e7366004613fe0565b61047a565b60405190151581526020016101d0565b604080518082018252601a81527f4361706162696c6974696573526567697374727920312e302e30000000000000602082015290516101d09190614067565b61024e6102493660046140bf565b610487565b005b610258610694565b6040516101d09190614241565b6102786102733660046142dc565b6107f1565b6040516101d09190614334565b6102986102933660046142dc565b6108de565b6040516101d09190614347565b61024e6102b33660046140bf565b610922565b61024e6102c636600461437b565b6109f9565b61024e6102d93660046140bf565b610ad9565b61024e6102ec3660046140bf565b610d7c565b61024e6102ff3660046140bf565b6114a4565b61031761031236600461441d565b611663565b6040516101d0929190614447565b610338610333366004613fe0565b61184f565b6040516101d091906144e4565b61024e6103533660046140bf565b61193c565b610360611a31565b6040516101d091906144f7565b61024e61037b3660046140bf565b611c14565b61024e611cc6565b61024e6103963660046140bf565b611dc3565b61024e6103a936600461456c565b6122de565b60005460405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101d0565b6103e96103e4366004613fe0565b61261e565b6040516101d091906146bb565b61024e6104043660046146ce565b612859565b610411612923565b6040516101d09190614754565b610426612a17565b6040516101d091906147c9565b61024e610441366004614862565b612b28565b6000828260405160200161045b929190614447565b6040516020818303038152906040528051906020012090505b92915050565b6000610474600583612b3c565b61048f612b57565b60005b8181101561068f5760008383838181106104ae576104ae61487d565b90506020020160208101906104c391906142dc565b63ffffffff8181166000908152600d60209081526040808320805464010000000081049095168085526001820190935290832094955093909290916a010000000000000000000090910460ff16905b61051b83612bda565b8110156105bb57811561057157600c60006105368584612be4565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff1690556105b3565b6105b18663ffffffff16600c60006105928588612be490919063ffffffff16565b8152602001908152602001600020600501612bf090919063ffffffff16565b505b600101610512565b508354640100000000900463ffffffff16600003610612576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff861660048201526024015b60405180910390fd5b63ffffffff85166000818152600d6020908152604080832080547fffffffffffffffffffffffffffffffffffffffffff0000000000000000000000169055519182527ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a25050505050806001019050610492565b505050565b600e54606090640100000000900463ffffffff1660006106b56001836148db565b63ffffffff1667ffffffffffffffff8111156106d3576106d3613e39565b60405190808252806020026020018201604052801561075a57816020015b6040805160e081018252600080825260208083018290529282018190526060808301829052608083019190915260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816106f15790505b509050600060015b8363ffffffff168163ffffffff1610156107ce5763ffffffff8082166000908152600d602052604090205416156107c65761079c81612bfc565b8383815181106107ae576107ae61487d565b6020026020010181905250816107c3906148f8565b91505b600101610762565b506107da6001846148db565b63ffffffff1681146107ea578082525b5092915050565b60408051808201909152600081526060602082015263ffffffff82166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff168352600181018054919284019161085590614930565b80601f016020809104026020016040519081016040528092919081815260200182805461088190614930565b80156108ce5780601f106108a3576101008083540402835291602001916108ce565b820191906000526020600020905b8154815290600101906020018083116108b157829003601f168201915b5050505050815250509050919050565b6040805160e0810182526000808252602082018190529181018290526060808201839052608082019290925260a0810182905260c081019190915261047482612bfc565b61092a612b57565b60005b63ffffffff811682111561068f57600083838363ffffffff168181106109555761095561487d565b905060200201602081019061096a91906142dc565b63ffffffff81166000908152600b6020526040812080547fffffffffffffffffffffffff00000000000000000000000000000000000000001681559192506109b56001830182613dcc565b505060405163ffffffff8216907fa59268ca81d40429e65ccea5385b59cf2d3fc6519371dee92f8eb1dae5107a7a90600090a2506109f281614983565b905061092d565b610a01612b57565b63ffffffff8088166000908152600d60205260408120805490926401000000009091041690819003610a67576040517f2b62be9b00000000000000000000000000000000000000000000000000000000815263ffffffff8a166004820152602401610609565b610ace888888886040518060a001604052808f63ffffffff16815260200187610a8f90614983565b63ffffffff811682528b15156020830152895460ff6a01000000000000000000009091048116151560408401528b166060909201919091529650612ec7565b505050505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d76576000848483818110610b1357610b1361487d565b602090810292909201356000818152600c90935260409092206001810154929350919050610b70576040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260048101839052602401610609565b6000610b7e82600501612bda565b1115610bd357610b916005820184612be4565b6040517f60a6d89800000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101839052604401610609565b805468010000000000000000900463ffffffff1615610c3b5780546040517f60b9df730000000000000000000000000000000000000000000000000000000081526801000000000000000090910463ffffffff16600482015260248101839052604401610609565b83158015610c755750805463ffffffff166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff163314155b15610cae576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b6001810154610cbf90600790612bf0565b506002810154610cd190600990612bf0565b506000828152600c6020526040812080547fffffffffffffffffffffffffffffffffffffffff0000000000000000000000001681556001810182905560028101829055600381018290559060058201818181610d2d8282613e06565b5050505050507f5254e609a97bab37b7cc79fe128f85c097bd6015c6e1624ae0ba392eb975320582604051610d6491815260200190565b60405180910390a15050600101610af7565b50505050565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d76576000848483818110610db657610db661487d565b9050602002810190610dc891906149a6565b610dd1906149e4565b6040808201516000908152600c6020908152828220805463ffffffff168352600b82528383208451808601909552805473ffffffffffffffffffffffffffffffffffffffff1685526001810180549697509195939493909284019190610e3690614930565b80601f0160208091040260200160405190810160405280929190818152602001828054610e6290614930565b8015610eaf5780601f10610e8457610100808354040283529160200191610eaf565b820191906000526020600020905b815481529060010190602001808311610e9257829003601f168201915b505050919092525050506001830154909150610eff5782604001516040517fd82f6adb00000000000000000000000000000000000000000000000000000000815260040161060991815260200190565b84158015610f245750805173ffffffffffffffffffffffffffffffffffffffff163314155b15610f5d576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b6020830151610f98576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600182015460208401518114611019576020840151610fb990600790612b3c565b15610ff0576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208401516001840155611005600782612bf0565b506020840151611017906007906136de565b505b6080840151805160000361105b57806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614ac1565b8354600090859060049061107c90640100000000900463ffffffff16614983565b91906101000a81548163ffffffff021916908363ffffffff1602179055905060005b8251811015611161576110d48382815181106110bc576110bc61487d565b60200260200101516003612b3c90919063ffffffff16565b61110c57826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614ac1565b6111588382815181106111215761112161487d565b60200260200101518760040160008563ffffffff1663ffffffff1681526020019081526020016000206136de90919063ffffffff16565b5060010161109e565b50845468010000000000000000900463ffffffff1680156112c25763ffffffff8082166000908152600d6020908152604080832080546401000000009004909416835260019093018152828220600201805484518184028101840190955280855292939290918301828280156111f657602002820191906000526020600020905b8154815260200190600101908083116111e2575b5050505050905060005b81518110156112bf5761125582828151811061121e5761121e61487d565b60200260200101518960040160008763ffffffff1663ffffffff168152602001908152602001600020612b3c90919063ffffffff16565b6112b75781818151811061126b5761126b61487d565b6020026020010151836040517f03dcd86200000000000000000000000000000000000000000000000000000000815260040161060992919091825263ffffffff16602082015260400190565b600101611200565b50505b60006112d0876005016136ea565b905060005b81518163ffffffff161015611416576000828263ffffffff16815181106112fe576112fe61487d565b60209081029190910181015163ffffffff8082166000908152600d8452604080822080546401000000009004909316825260019092018452818120600201805483518187028101870190945280845293955090939192909183018282801561138557602002820191906000526020600020905b815481526020019060010190808311611371575b5050505050905060005b8151811015611402576113e48282815181106113ad576113ad61487d565b60200260200101518c60040160008a63ffffffff1663ffffffff168152602001908152602001600020612b3c90919063ffffffff16565b6113fa5781818151811061126b5761126b61487d565b60010161138f565b5050508061140f90614983565b90506112d5565b50875187547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff90911690811788556040808a015160028a018190556020808c01518351928352908201527f4b5b465e22eea0c3d40c30e936643245b80d19b2dcf75788c0699fe8d8db645b910160405180910390a25050505050505050806001019050610d9a565b6114ac612b57565b60005b8181101561068f5760008383838181106114cb576114cb61487d565b90506020028101906114dd9190614b05565b6114e690614b39565b805190915073ffffffffffffffffffffffffffffffffffffffff16611537576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54604080518082018252835173ffffffffffffffffffffffffffffffffffffffff908116825260208086015181840190815263ffffffff9095166000818152600b909252939020825181547fffffffffffffffffffffffff000000000000000000000000000000000000000016921691909117815592519192909160018201906115c39082614bf3565b5050600e80549091506000906115de9063ffffffff16614983565b91906101000a81548163ffffffff021916908363ffffffff160217905550816000015173ffffffffffffffffffffffffffffffffffffffff168163ffffffff167f78e94ca80be2c30abc061b99e7eb8583b1254781734b1e3ce339abb57da2fe8e84602001516040516116519190614067565b60405180910390a350506001016114af565b63ffffffff8083166000908152600d602090815260408083208054640100000000900490941680845260019094018252808320858452600301909152812080546060938493909290916116b590614930565b80601f01602080910402602001604051908101604052809291908181526020018280546116e190614930565b801561172e5780601f106117035761010080835404028352916020019161172e565b820191906000526020600020905b81548152906001019060200180831161171157829003601f168201915b5050506000888152600260208190526040909120015492935060609262010000900473ffffffffffffffffffffffffffffffffffffffff16159150611841905057600086815260026020819052604091829020015490517f8318ed5d00000000000000000000000000000000000000000000000000000000815263ffffffff891660048201526201000090910473ffffffffffffffffffffffffffffffffffffffff1690638318ed5d90602401600060405180830381865afa1580156117f8573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261183e9190810190614d0d565b90505b9093509150505b9250929050565b604080516101008101825260008082526020820181905291810182905260608082018390526080820183905260a082019290925260c0810182905260e081019190915260408051610100810182526000848152600c6020908152838220805463ffffffff8082168652640100000000820481168487018190526801000000000000000090920416858701526001820154606086015260028201546080860152600382015460a0860152835260040190529190912060c0820190611911906136ea565b8152602001611934600c60008681526020019081526020016000206005016136ea565b905292915050565b611944612b57565b60005b8181101561068f5760008383838181106119635761196361487d565b905060200201359050611980816003612b3c90919063ffffffff16565b6119b9576040517fe181733f00000000000000000000000000000000000000000000000000000000815260048101829052602401610609565b6119c46005826136de565b6119fd576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815260048101829052602401610609565b60405181907fdcea1b78b6ddc31592a94607d537543fcaafda6cc52d6d5cc7bbfca1422baf2190600090a250600101611947565b600e5460609063ffffffff166000611a4a6001836148db565b63ffffffff1667ffffffffffffffff811115611a6857611a68613e39565b604051908082528060200260200182016040528015611aae57816020015b604080518082019091526000815260606020820152815260200190600190039081611a865790505b509050600060015b8363ffffffff168163ffffffff161015611bfe5763ffffffff81166000908152600b602052604090205473ffffffffffffffffffffffffffffffffffffffff1615611bf65763ffffffff81166000908152600b60209081526040918290208251808401909352805473ffffffffffffffffffffffffffffffffffffffff1683526001810180549192840191611b4a90614930565b80601f0160208091040260200160405190810160405280929190818152602001828054611b7690614930565b8015611bc35780601f10611b9857610100808354040283529160200191611bc3565b820191906000526020600020905b815481529060010190602001808311611ba657829003601f168201915b505050505081525050838381518110611bde57611bde61487d565b602002602001018190525081611bf3906148f8565b91505b600101611ab6565b50600e546107da9060019063ffffffff166148db565b611c1c612b57565b60005b8181101561068f576000838383818110611c3b57611c3b61487d565b9050602002810190611c4d91906149a6565b611c5690614d8a565b90506000611c6c82600001518360200151610446565b9050611c796003826136de565b611cb2576040517febf5255100000000000000000000000000000000000000000000000000000000815260048101829052602401610609565b611cbc81836136f7565b5050600101611c1f565b60015473ffffffffffffffffffffffffffffffffffffffff163314611d47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610609565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6000805473ffffffffffffffffffffffffffffffffffffffff163314905b82811015610d76576000848483818110611dfd57611dfd61487d565b9050602002810190611e0f91906149a6565b611e18906149e4565b805163ffffffff166000908152600b602090815260408083208151808301909252805473ffffffffffffffffffffffffffffffffffffffff168252600181018054959650939491939092840191611e6e90614930565b80601f0160208091040260200160405190810160405280929190818152602001828054611e9a90614930565b8015611ee75780601f10611ebc57610100808354040283529160200191611ee7565b820191906000526020600020905b815481529060010190602001808311611eca57829003601f168201915b50505091909252505081519192505073ffffffffffffffffffffffffffffffffffffffff16611f4d5781516040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff9091166004820152602401610609565b83158015611f725750805173ffffffffffffffffffffffffffffffffffffffff163314155b15611fab576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b6040808301516000908152600c602052206001810154156120005782604001516040517f5461848300000000000000000000000000000000000000000000000000000000815260040161060991815260200190565b60408301516120435782604001516040517f64e2ee9200000000000000000000000000000000000000000000000000000000815260040161060991815260200190565b602083015115806120605750602083015161206090600790612b3c565b15612097576040517f8377314600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60608301516120da5782606001516040517f37d8976500000000000000000000000000000000000000000000000000000000815260040161060991815260200190565b6080830151805160000361211c57806040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614ac1565b8154829060049061213a90640100000000900463ffffffff16614983565b82546101009290920a63ffffffff818102199093169183160217909155825464010000000090041660005b8251811015612210576121838382815181106110bc576110bc61487d565b6121bb57826040517f3748d4c60000000000000000000000000000000000000000000000000000000081526004016106099190614ac1565b6122078382815181106121d0576121d061487d565b60200260200101518560040160008563ffffffff1663ffffffff1681526020019081526020016000206136de90919063ffffffff16565b50600101612165565b5060608501516003840155845183547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff9182161784556040860151600285015560208601516001850181905561227091600791906136de16565b506040850151612282906009906136de565b50845160408087015160208089015183519283529082015263ffffffff909216917f74becb12a5e8fd0e98077d02dfba8f647c9670c9df177e42c2418cf17a636f05910160405180910390a25050505050806001019050611de1565b828114612321576040517fab8b67c60000000000000000000000000000000000000000000000000000000081526004810184905260248101829052604401610609565b6000805473ffffffffffffffffffffffffffffffffffffffff16905b848110156126165760008686838181106123595761235961487d565b905060200201602081019061236e91906142dc565b63ffffffff81166000908152600b6020526040902080549192509073ffffffffffffffffffffffffffffffffffffffff166123dd576040517fadd9ae1e00000000000000000000000000000000000000000000000000000000815263ffffffff83166004820152602401610609565b60008686858181106123f1576123f161487d565b90506020028101906124039190614b05565b61240c90614b39565b805190915073ffffffffffffffffffffffffffffffffffffffff1661245d576040517feeacd93900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b815473ffffffffffffffffffffffffffffffffffffffff16331480159061249a57503373ffffffffffffffffffffffffffffffffffffffff861614155b156124d3576040517f9473075d000000000000000000000000000000000000000000000000000000008152336004820152602401610609565b8051825473ffffffffffffffffffffffffffffffffffffffff908116911614158061254f575060208082015160405161250c9201614067565b60405160208183030381529060405280519060200120826001016040516020016125369190614e30565b6040516020818303038152906040528051906020012014155b1561260857805182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602081015160018301906125a99082614bf3565b50806000015173ffffffffffffffffffffffffffffffffffffffff168363ffffffff167f86f41145bde5dd7f523305452e4aad3685508c181432ec733d5f345009358a2883602001516040516125ff9190614067565b60405180910390a35b50505080600101905061233d565b505050505050565b61265f6040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b6040805160e0810182528381526000848152600260209081529290208054919283019161268b90614930565b80601f01602080910402602001604051908101604052809291908181526020018280546126b790614930565b80156127045780601f106126d957610100808354040283529160200191612704565b820191906000526020600020905b8154815290600101906020018083116126e757829003601f168201915b5050505050815260200160026000858152602001908152602001600020600101805461272f90614930565b80601f016020809104026020016040519081016040528092919081815260200182805461275b90614930565b80156127a85780601f1061277d576101008083540402835291602001916127a8565b820191906000526020600020905b81548152906001019060200180831161278b57829003601f168201915b50505091835250506000848152600260208181526040909220015491019060ff1660038111156127da576127da6145d8565b815260008481526002602081815260409092200154910190610100900460ff16600181111561280b5761280b6145d8565b81526000848152600260208181526040928390209091015462010000900473ffffffffffffffffffffffffffffffffffffffff16908301520161284f600585612b3c565b1515905292915050565b612861612b57565b600e805460009164010000000090910463ffffffff1690600461288383614983565b82546101009290920a63ffffffff81810219909316918316021790915581166000818152600d602090815260409182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001684179055815160a08101835292835260019083015286151590820152841515606082015260ff84166080820152909150612919908990899089908990612ec7565b5050505050505050565b6060600061293160036136ea565b90506000815167ffffffffffffffff81111561294f5761294f613e39565b6040519080825280602002602001820160405280156129c157816020015b6129ae6040805160e0810182526000808252606060208301819052928201839052909182019081526020016000815260006020820181905260409091015290565b81526020019060019003908161296d5790505b50905060005b82518110156107ea576129f28382815181106129e5576129e561487d565b602002602001015161261e565b828281518110612a0457612a0461487d565b60209081029190910101526001016129c7565b60606000612a2560096136ea565b90506000815167ffffffffffffffff811115612a4357612a43613e39565b604051908082528060200260200182016040528015612ad257816020015b60408051610100810182526000808252602080830182905292820181905260608083018290526080830182905260a083019190915260c0820181905260e082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612a615790505b50905060005b82518110156107ea57612b03838281518110612af657612af661487d565b602002602001015161184f565b828281518110612b1557612b1561487d565b6020908102919091010152600101612ad8565b612b30612b57565b612b39816138df565b50565b600081815260018301602052604081205415155b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314612bd8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610609565b565b6000610474825490565b6000612b5083836139d4565b6000612b5083836139fe565b6040805160e0810182526000808252602080830182905282840182905260608084018390526080840183905260a0840181905260c084015263ffffffff8581168352600d8252848320805464010000000090049091168084526001909101825284832060028101805487518186028101860190985280885295969295919493909190830182828015612cad57602002820191906000526020600020905b815481526020019060010190808311612c99575b505050505090506000815167ffffffffffffffff811115612cd057612cd0613e39565b604051908082528060200260200182016040528015612d1657816020015b604080518082019091526000815260606020820152815260200190600190039081612cee5790505b50905060005b8151811015612e2e576040518060400160405280848381518110612d4257612d4261487d565b60200260200101518152602001856003016000868581518110612d6757612d6761487d565b602002602001015181526020019081526020016000208054612d8890614930565b80601f0160208091040260200160405190810160405280929190818152602001828054612db490614930565b8015612e015780601f10612dd657610100808354040283529160200191612e01565b820191906000526020600020905b815481529060010190602001808311612de457829003601f168201915b5050505050815250828281518110612e1b57612e1b61487d565b6020908102919091010152600101612d1c565b506040805160e08101825263ffffffff8089166000818152600d6020818152868320548086168752948b168187015260ff680100000000000000008604811697870197909752690100000000000000000085048716151560608701529290915290526a010000000000000000000090049091161515608082015260a08101612eb5856136ea565b81526020019190915295945050505050565b805163ffffffff9081166000908152600d602090815260408083208286015190941683526001909301905220608082015160ff161580612f19575060808201518590612f14906001614ede565b60ff16115b15612f625760808201516040517f25b4d61800000000000000000000000000000000000000000000000000000000815260ff909116600482015260248101869052604401610609565b6001826020015163ffffffff16111561304a57815163ffffffff166000908152600d602090815260408220908401516001918201918391612fa391906148db565b63ffffffff1663ffffffff168152602001908152602001600020905060005b612fcb82612bda565b81101561304757612ffa846000015163ffffffff16600c60006105928587600001612be490919063ffffffff16565b50600c60006130098484612be4565b8152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffff00000000ffffffffffffffff169055600101612fc2565b50505b60005b858110156132845761307a87878381811061306a5761306a61487d565b85926020909102013590506136de565b6130db5782518787838181106130925761309261487d565b6040517f636e405700000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610609565b82606001511561323257825163ffffffff16600c60008989858181106131035761310361487d565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff161480159061317d5750600c600088888481811061314e5761314e61487d565b602090810292909201358352508101919091526040016000205468010000000000000000900463ffffffff1615155b156131df5782518787838181106131965761319661487d565b6040517f60b9df7300000000000000000000000000000000000000000000000000000000815263ffffffff90941660048501526020029190910135602483015250604401610609565b8251600c60008989858181106131f7576131f761487d565b90506020020135815260200190815260200160002060000160086101000a81548163ffffffff021916908363ffffffff16021790555061327c565b825161327a9063ffffffff16600c60008a8a868181106132545761325461487d565b9050602002013581526020019081526020016000206005016136de90919063ffffffff16565b505b60010161304d565b5060005b8381101561369257368585838181106132a3576132a361487d565b90506020028101906132b59190614b05565b90506132c360038235612b3c565b6132fc576040517fe181733f00000000000000000000000000000000000000000000000000000000815281356004820152602401610609565b61330860058235612b3c565b15613342576040517ff7d7a29400000000000000000000000000000000000000000000000000000000815281356004820152602401610609565b803560009081526003840160205260408120805461335f90614930565b905011156133ab5783516040517f3927d08000000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015281356024820152604401610609565b60005b878110156134b5576134528235600c60008c8c868181106133d1576133d161487d565b9050602002013581526020019081526020016000206004016000600c60008e8e888181106134015761340161487d565b90506020020135815260200190815260200160002060000160049054906101000a900463ffffffff1663ffffffff1663ffffffff168152602001908152602001600020612b3c90919063ffffffff16565b6134ad578888828181106134685761346861487d565b6040517fa7e792500000000000000000000000000000000000000000000000000000000081526020909102929092013560048301525082356024820152604401610609565b6001016133ae565b50600283018054600181018255600091825260209182902083359101556134de90820182614ef7565b823560009081526003860160205260409020916134fc919083614f5c565b50604080850151855163ffffffff9081166000908152600d602090815284822080549415156901000000000000000000027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff90951694909417909355606088015188518316825284822080549115156a0100000000000000000000027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff9092169190911790556080880151885183168252848220805460ff9290921668010000000000000000027fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff909216919091179055828801805189518416835294909120805494909216640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff9094169390931790558551915161368992918435908c908c9061364f90880188614ef7565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250613af192505050565b50600101613288565b50815160208084015160405163ffffffff91821681529216917ff264aae70bf6a9d90e68e0f9b393f4e7fbea67b063b0f336e0b36c1581703651910160405180910390a2505050505050565b6000612b508383613bd2565b60606000612b5083613c21565b608081015173ffffffffffffffffffffffffffffffffffffffff16156137995761374581608001517f78bea72100000000000000000000000000000000000000000000000000000000613c7d565b6137995760808101516040517fabb5e3fd00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610609565b6000828152600260205260409020815182919081906137b89082614bf3565b50602082015160018201906137cd9082614bf3565b5060408201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600183600381111561380f5761380f6145d8565b021790555060608201516002820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff16610100836001811115613856576138566145d8565b0217905550608091909101516002909101805473ffffffffffffffffffffffffffffffffffffffff90921662010000027fffffffffffffffffffff0000000000000000000000000000000000000000ffff90921691909117905560405182907f04f0a9bcf3f3a3b42a4d7ca081119755f82ebe43e0d30c8f7292c4fe0dc4a2ae90600090a25050565b3373ffffffffffffffffffffffffffffffffffffffff82160361395e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610609565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008260000182815481106139eb576139eb61487d565b9060005260206000200154905092915050565b60008181526001830160205260408120548015613ae7576000613a22600183615077565b8554909150600090613a3690600190615077565b9050818114613a9b576000866000018281548110613a5657613a5661487d565b9060005260206000200154905080876000018481548110613a7957613a7961487d565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613aac57613aac61508a565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610474565b6000915050610474565b6000848152600260208190526040909120015462010000900473ffffffffffffffffffffffffffffffffffffffff161561261657600084815260026020819052604091829020015490517ffba64a7c0000000000000000000000000000000000000000000000000000000081526201000090910473ffffffffffffffffffffffffffffffffffffffff169063fba64a7c90613b98908690869086908b908d906004016150b9565b600060405180830381600087803b158015613bb257600080fd5b505af1158015613bc6573d6000803e3d6000fd5b50505050505050505050565b6000818152600183016020526040812054613c1957508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610474565b506000610474565b606081600001805480602002602001604051908101604052809291908181526020018280548015613c7157602002820191906000526020600020905b815481526020019060010190808311613c5d575b50505050509050919050565b6000613c8883613c99565b8015612b505750612b508383613cfd565b6000613cc5827f01ffc9a700000000000000000000000000000000000000000000000000000000613cfd565b80156104745750613cf6827fffffffff00000000000000000000000000000000000000000000000000000000613cfd565b1592915050565b604080517fffffffff000000000000000000000000000000000000000000000000000000008316602480830191909152825180830390910181526044909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825160009392849283928392918391908a617530fa92503d91506000519050828015613db5575060208210155b8015613dc15750600081115b979650505050505050565b508054613dd890614930565b6000825580601f10613de8575050565b601f016020900490600052602060002090810190612b399190613e20565b5080546000825590600052602060002090810190612b3991905b5b80821115613e355760008155600101613e21565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff81118282101715613e8b57613e8b613e39565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715613ed857613ed8613e39565b604052919050565b600067ffffffffffffffff821115613efa57613efa613e39565b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b600082601f830112613f3757600080fd5b8135613f4a613f4582613ee0565b613e91565b818152846020838601011115613f5f57600080fd5b816020850160208301376000918101602001919091529392505050565b60008060408385031215613f8f57600080fd5b823567ffffffffffffffff80821115613fa757600080fd5b613fb386838701613f26565b93506020850135915080821115613fc957600080fd5b50613fd685828601613f26565b9150509250929050565b600060208284031215613ff257600080fd5b5035919050565b60005b83811015614014578181015183820152602001613ffc565b50506000910152565b60008151808452614035816020860160208601613ff9565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000612b50602083018461401d565b60008083601f84011261408c57600080fd5b50813567ffffffffffffffff8111156140a457600080fd5b6020830191508360208260051b850101111561184857600080fd5b600080602083850312156140d257600080fd5b823567ffffffffffffffff8111156140e957600080fd5b6140f58582860161407a565b90969095509350505050565b60008151808452602080850194506020840160005b8381101561413257815187529582019590820190600101614116565b509495945050505050565b600082825180855260208086019550808260051b84010181860160005b848110156141ba578583037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001895281518051845284015160408585018190526141a68186018361401d565b9a86019a945050509083019060010161415a565b5090979650505050505050565b600063ffffffff8083511684528060208401511660208501525060ff604083015116604084015260608201511515606084015260808201511515608084015260a082015160e060a085015261421f60e0850182614101565b905060c083015184820360c0860152614238828261413d565b95945050505050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156142b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526142a48583516141c7565b9450928501929085019060010161426a565b5092979650505050505050565b803563ffffffff811681146142d757600080fd5b919050565b6000602082840312156142ee57600080fd5b612b50826142c3565b73ffffffffffffffffffffffffffffffffffffffff8151168252600060208201516040602085015261432c604085018261401d565b949350505050565b602081526000612b5060208301846142f7565b602081526000612b5060208301846141c7565b803580151581146142d757600080fd5b803560ff811681146142d757600080fd5b600080600080600080600060a0888a03121561439657600080fd5b61439f886142c3565b9650602088013567ffffffffffffffff808211156143bc57600080fd5b6143c88b838c0161407a565b909850965060408a01359150808211156143e157600080fd5b506143ee8a828b0161407a565b909550935061440190506060890161435a565b915061440f6080890161436a565b905092959891949750929550565b6000806040838503121561443057600080fd5b614439836142c3565b946020939093013593505050565b60408152600061445a604083018561401d565b8281036020840152614238818561401d565b600061010063ffffffff80845116855280602085015116602086015280604085015116604086015250606083015160608501526080830151608085015260a083015160a085015260c08301518160c08601526144ca82860182614101565b91505060e083015184820360e08601526142388282614101565b602081526000612b50602083018461446c565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156142b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261455a8583516142f7565b94509285019290850190600101614520565b6000806000806040858703121561458257600080fd5b843567ffffffffffffffff8082111561459a57600080fd5b6145a68883890161407a565b909650945060208701359150808211156145bf57600080fd5b506145cc8782880161407a565b95989497509550505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b805182526000602082015160e0602085015261462660e085018261401d565b90506040830151848203604086015261463f828261401d565b915050606083015160048110614657576146576145d8565b6060850152608083015160028110614671576146716145d8565b8060808601525060a083015161469f60a086018273ffffffffffffffffffffffffffffffffffffffff169052565b5060c08301516146b360c086018215159052565b509392505050565b602081526000612b506020830184614607565b600080600080600080600060a0888a0312156146e957600080fd5b873567ffffffffffffffff8082111561470157600080fd5b61470d8b838c0161407a565b909950975060208a013591508082111561472657600080fd5b506147338a828b0161407a565b909650945061474690506040890161435a565b92506144016060890161435a565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156142b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526147b7858351614607565b9450928501929085019060010161477d565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b828110156142b6577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261482c85835161446c565b945092850192908501906001016147f2565b803573ffffffffffffffffffffffffffffffffffffffff811681146142d757600080fd5b60006020828403121561487457600080fd5b612b508261483e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b63ffffffff8281168282160390808211156107ea576107ea6148ac565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614929576149296148ac565b5060010190565b600181811c9082168061494457607f821691505b60208210810361497d577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600063ffffffff80831681810361499c5761499c6148ac565b6001019392505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126149da57600080fd5b9190910192915050565b600060a082360312156149f657600080fd5b6149fe613e68565b614a07836142c3565b8152602080840135818301526040840135604083015260608401356060830152608084013567ffffffffffffffff80821115614a4257600080fd5b9085019036601f830112614a5557600080fd5b813581811115614a6757614a67613e39565b8060051b9150614a78848301613e91565b8181529183018401918481019036841115614a9257600080fd5b938501935b83851015614ab057843582529385019390850190614a97565b608087015250939695505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614af957835183529284019291840191600101614add565b50909695505050505050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18336030181126149da57600080fd5b600060408236031215614b4b57600080fd5b6040516040810167ffffffffffffffff8282108183111715614b6f57614b6f613e39565b81604052614b7c8561483e565b83526020850135915080821115614b9257600080fd5b50614b9f36828601613f26565b60208301525092915050565b601f82111561068f576000816000526020600020601f850160051c81016020861015614bd45750805b601f850160051c820191505b8181101561261657828155600101614be0565b815167ffffffffffffffff811115614c0d57614c0d613e39565b614c2181614c1b8454614930565b84614bab565b602080601f831160018114614c745760008415614c3e5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555612616565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015614cc157888601518255948401946001909101908401614ca2565b5085821015614cfd57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b600060208284031215614d1f57600080fd5b815167ffffffffffffffff811115614d3657600080fd5b8201601f81018413614d4757600080fd5b8051614d55613f4582613ee0565b818152856020838501011115614d6a57600080fd5b614238826020830160208601613ff9565b8035600281106142d757600080fd5b600060a08236031215614d9c57600080fd5b614da4613e68565b823567ffffffffffffffff80821115614dbc57600080fd5b614dc836838701613f26565b83526020850135915080821115614dde57600080fd5b50614deb36828601613f26565b602083015250604083013560048110614e0357600080fd5b6040820152614e1460608401614d7b565b6060820152614e256080840161483e565b608082015292915050565b6000602080835260008454614e4481614930565b8060208701526040600180841660008114614e665760018114614ea057614ed0565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00851660408a0152604084151560051b8a01019550614ed0565b89600052602060002060005b85811015614ec75781548b8201860152908301908801614eac565b8a016040019650505b509398975050505050505050565b60ff8181168382160190811115610474576104746148ac565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f2c57600080fd5b83018035915067ffffffffffffffff821115614f4757600080fd5b60200191503681900382131561184857600080fd5b67ffffffffffffffff831115614f7457614f74613e39565b614f8883614f828354614930565b83614bab565b6000601f841160018114614fda5760008515614fa45750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b178355615070565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156150295786850135825560209485019460019092019101615009565b5086821015615064577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81810381811115610474576104746148ac565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6080815284608082015260007f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8611156150f257600080fd5b8560051b808860a0850137820182810360a090810160208501526151189082018761401d565b91505063ffffffff8085166040840152808416606084015250969550505050505056fea164736f6c6343000818000a", } var CapabilitiesRegistryABI = CapabilitiesRegistryMetaData.ABI diff --git a/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 74d3b73e6a9..24d463c9b04 100644 --- a/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/keystone/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -1,5 +1,5 @@ GETH_VERSION: 1.13.8 -capabilities_registry: ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.abi ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.bin cb3e79280a928979bc37de154b12b876996bdbe10f1827e683ee2bfa7a429a6c +capabilities_registry: ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.abi ../../../contracts/solc/v0.8.24/CapabilitiesRegistry/CapabilitiesRegistry.bin 5c97ce78e6b13502b654c4ba0ff0ad6348a40435f709b6d157e6709d43360bbe feeds_consumer: ../../../contracts/solc/v0.8.24/KeystoneFeedsConsumer/KeystoneFeedsConsumer.abi ../../../contracts/solc/v0.8.24/KeystoneFeedsConsumer/KeystoneFeedsConsumer.bin 6ac5b12eff3b022a35c3c40d5ed0285bf9bfec0e3669a4b12307332a216048ca forwarder: ../../../contracts/solc/v0.8.24/KeystoneForwarder/KeystoneForwarder.abi ../../../contracts/solc/v0.8.24/KeystoneForwarder/KeystoneForwarder.bin 03911334d0c88f8ee8ee2d9832fd312bc8a48c824fcda5c807585af2d0e6a148 ocr3_capability: ../../../contracts/solc/v0.8.24/OCR3Capability/OCR3Capability.abi ../../../contracts/solc/v0.8.24/OCR3Capability/OCR3Capability.bin 2a6bfae30ccf38327fc7e78605a226839dfa0ce5a1a22e0414b91d24c35b3a53 diff --git a/core/scripts/keystone/src/05_deploy_initialize_capabilities_registry.go b/core/scripts/keystone/src/05_deploy_initialize_capabilities_registry.go index 43132f1d47c..2fb3065f7fe 100644 --- a/core/scripts/keystone/src/05_deploy_initialize_capabilities_registry.go +++ b/core/scripts/keystone/src/05_deploy_initialize_capabilities_registry.go @@ -26,110 +26,134 @@ import ( ) type peer struct { - PeerID string - Signer string + PeerID string + Signer string + EncryptionPublicKey string } var ( workflowDonPeers = []peer{ { - PeerID: "12D3KooWBCF1XT5Wi8FzfgNCqRL76Swv8TRU3TiD4QiJm8NMNX7N", - Signer: "0x9639dCc7D0ca4468B5f684ef89F12F0B365c9F6d", + PeerID: "12D3KooWBCF1XT5Wi8FzfgNCqRL76Swv8TRU3TiD4QiJm8NMNX7N", + Signer: "0x9639dCc7D0ca4468B5f684ef89F12F0B365c9F6d", + EncryptionPublicKey: "0xe7f44e3eedf3527199efec7334183b5384ba0e7c7c57b390b63a3de5a10cd53c", }, { - PeerID: "12D3KooWG1AyvwmCpZ93J8pBQUE1SuzrjDXnT4BeouncHR3jWLCG", - Signer: "0x8f0fAE64f5f75067833ed5deDC2804B62b21383d", + PeerID: "12D3KooWG1AyvwmCpZ93J8pBQUE1SuzrjDXnT4BeouncHR3jWLCG", + Signer: "0x8f0fAE64f5f75067833ed5deDC2804B62b21383d", + EncryptionPublicKey: "0x315c6097f89baef3c3ae1503b801aaabf411134ffec66bbe8d1d184540588728", }, { - PeerID: "12D3KooWGeUKZBRMbx27FUTgBwZa9Ap9Ym92mywwpuqkEtz8XWyv", - Signer: "0xf09A863D920840c13277e76F43CFBdfB22b8FB7C", + PeerID: "12D3KooWGeUKZBRMbx27FUTgBwZa9Ap9Ym92mywwpuqkEtz8XWyv", + Signer: "0xf09A863D920840c13277e76F43CFBdfB22b8FB7C", + EncryptionPublicKey: "0xa7a5e118213552a939f310e19167f49e9ad952cfe9d51eaae1ad37d92d9f0583", }, { - PeerID: "12D3KooW9zYWQv3STmDeNDidyzxsJSTxoCTLicafgfeEz9nhwhC4", - Signer: "0x7eD90b519bC3054a575C464dBf39946b53Ff90EF", + PeerID: "12D3KooW9zYWQv3STmDeNDidyzxsJSTxoCTLicafgfeEz9nhwhC4", + Signer: "0x7eD90b519bC3054a575C464dBf39946b53Ff90EF", + EncryptionPublicKey: "0x75f75a86910eed0259e3107b3c368f72c0ad0301bac696fd340916e2437194c3", }, { - PeerID: "12D3KooWG1AeBnSJH2mdcDusXQVye2jqodZ6pftTH98HH6xvrE97", - Signer: "0x8F572978673d711b2F061EB7d514BD46EAD6668A", + PeerID: "12D3KooWG1AeBnSJH2mdcDusXQVye2jqodZ6pftTH98HH6xvrE97", + Signer: "0x8F572978673d711b2F061EB7d514BD46EAD6668A", + EncryptionPublicKey: "0xd032f1e884a22fd05151f59565f05a4ccbf984afccbbee13469fc25947e69360", }, { - PeerID: "12D3KooWBf3PrkhNoPEmp7iV291YnPuuTsgEDHTscLajxoDvwHGA", - Signer: "0x21eF07Dfaf8f7C10CB0d53D18b641ee690541f9D", + PeerID: "12D3KooWBf3PrkhNoPEmp7iV291YnPuuTsgEDHTscLajxoDvwHGA", + Signer: "0x21eF07Dfaf8f7C10CB0d53D18b641ee690541f9D", + EncryptionPublicKey: "0xed64ed4a2c2954f7390bfdf41a714934c0e55693ad1c0b91505d51f4eb9e4c06", }, { - PeerID: "12D3KooWP3FrMTFXXRU2tBC8aYvEBgUX6qhcH9q2JZCUi9Wvc2GX", - Signer: "0x7Fa21F6f716CFaF8f249564D72Ce727253186C89", + PeerID: "12D3KooWP3FrMTFXXRU2tBC8aYvEBgUX6qhcH9q2JZCUi9Wvc2GX", + Signer: "0x7Fa21F6f716CFaF8f249564D72Ce727253186C89", + EncryptionPublicKey: "0xed64ed4a2c2954f7390bfdf41a714934c0e55693ad1c0b91505d51f4eb9e4c06", }, } triggerDonPeers = []peer{ { - PeerID: "12D3KooWBaiTbbRwwt2fbNifiL7Ew9tn3vds9AJE3Nf3eaVBX36m", - Signer: "0x9CcE7293a4Cc2621b61193135A95928735e4795F", + PeerID: "12D3KooWBaiTbbRwwt2fbNifiL7Ew9tn3vds9AJE3Nf3eaVBX36m", + Signer: "0x9CcE7293a4Cc2621b61193135A95928735e4795F", + EncryptionPublicKey: "0xed64ed4a2c2954f7390bfdf41a714934c0e55693ad1c0b91505d51f4eb9e4c06", }, { - PeerID: "12D3KooWS7JSY9fzSfWgbCE1S3W2LNY6ZVpRuun74moVBkKj6utE", - Signer: "0x3c775F20bCB2108C1A818741Ce332Bb5fe0dB925", + PeerID: "12D3KooWS7JSY9fzSfWgbCE1S3W2LNY6ZVpRuun74moVBkKj6utE", + Signer: "0x3c775F20bCB2108C1A818741Ce332Bb5fe0dB925", + EncryptionPublicKey: "0xed64ed4a2c2954f7390bfdf41a714934c0e55693ad1c0b91505d51f4eb9e4c06", }, { - PeerID: "12D3KooWMMTDXcWhpVnwrdAer1jnVARTmnr3RyT3v7Djg8ZuoBh9", - Signer: "0x50314239e2CF05555ceeD53E7F47eB2A8Eab0dbB", + PeerID: "12D3KooWMMTDXcWhpVnwrdAer1jnVARTmnr3RyT3v7Djg8ZuoBh9", + Signer: "0x50314239e2CF05555ceeD53E7F47eB2A8Eab0dbB", + EncryptionPublicKey: "0xce0e88d12d568653757f1db154f9c503db3d3d7b37cb03d84b61f39f09824cc0", }, { - PeerID: "12D3KooWGzVXsKxXsF4zLgxSDM8Gzx1ywq2pZef4PrHMKuVg4K3P", - Signer: "0xd76A4f98898c3b9A72b244476d7337b50D54BCd8", + PeerID: "12D3KooWGzVXsKxXsF4zLgxSDM8Gzx1ywq2pZef4PrHMKuVg4K3P", + Signer: "0xd76A4f98898c3b9A72b244476d7337b50D54BCd8", + EncryptionPublicKey: "0xce0e88d12d568653757f1db154f9c503db3d3d7b37cb03d84b61f39f09824cc0", }, { - PeerID: "12D3KooWSyjmmzjVtCzwN7bXzZQFmWiJRuVcKBerNjVgL7HdLJBW", - Signer: "0x656A873f6895b8a03Fb112dE927d43FA54B2c92A", + PeerID: "12D3KooWSyjmmzjVtCzwN7bXzZQFmWiJRuVcKBerNjVgL7HdLJBW", + Signer: "0x656A873f6895b8a03Fb112dE927d43FA54B2c92A", + EncryptionPublicKey: "0x91f11910104ff55209d6d344a15eef6a222a54d4973aaebd301807444b555e3f", }, { - PeerID: "12D3KooWLGz9gzhrNsvyM6XnXS3JRkZoQdEzuAvysovnSChNK5ZK", - Signer: "0x5d1e87d87bF2e0cD4Ea64F381a2dbF45e5f0a553", + PeerID: "12D3KooWLGz9gzhrNsvyM6XnXS3JRkZoQdEzuAvysovnSChNK5ZK", + Signer: "0x5d1e87d87bF2e0cD4Ea64F381a2dbF45e5f0a553", + EncryptionPublicKey: "0x20ff771215e567cf7e9a1fea8f2d4df90adc8303794175f79893037ff8808b51", }, { - PeerID: "12D3KooWAvZnvknFAfSiUYjATyhzEJLTeKvAzpcLELHi4ogM3GET", - Signer: "0x91d9b0062265514f012Eb8fABA59372fD9520f56", + PeerID: "12D3KooWAvZnvknFAfSiUYjATyhzEJLTeKvAzpcLELHi4ogM3GET", + Signer: "0x91d9b0062265514f012Eb8fABA59372fD9520f56", + EncryptionPublicKey: "0x54176f154052068943569b676fa7eec7dc836e17bbe743ce56b1c7e205191d9c", }, } targetDonPeers = []peer{ { - PeerID: "12D3KooWJrthXtnPHw7xyHFAxo6NxifYTvc8igKYaA6wRRRqtsMb", - Signer: "0x3F82750353Ea7a051ec9bA011BC628284f9a5327", + PeerID: "12D3KooWJrthXtnPHw7xyHFAxo6NxifYTvc8igKYaA6wRRRqtsMb", + Signer: "0x3F82750353Ea7a051ec9bA011BC628284f9a5327", + EncryptionPublicKey: "0x1a746e0fcaf3e50db87bcc765fbbaee7d24a28166ea1461338a03fcbffb088cf", }, { - PeerID: "12D3KooWFQekP9sGex4XhqEJav5EScjTpDVtDqJFg1JvrePBCEGJ", - Signer: "0xc23545876A208AA0443B1b8d552c7be4FF4b53F0", + PeerID: "12D3KooWFQekP9sGex4XhqEJav5EScjTpDVtDqJFg1JvrePBCEGJ", + Signer: "0xc23545876A208AA0443B1b8d552c7be4FF4b53F0", + EncryptionPublicKey: "0x1a746e0fcaf3e50db87bcc765fbbaee7d24a28166ea1461338a03fcbffb088cf", }, { - PeerID: "12D3KooWFLEq4hYtdyKWwe47dXGEbSiHMZhmr5xLSJNhpfiEz8NF", - Signer: "0x82601Fa43d8B1dC1d4eB640451aC86a7CDA37011", + PeerID: "12D3KooWFLEq4hYtdyKWwe47dXGEbSiHMZhmr5xLSJNhpfiEz8NF", + Signer: "0x82601Fa43d8B1dC1d4eB640451aC86a7CDA37011", + EncryptionPublicKey: "0x1a746e0fcaf3e50db87bcc765fbbaee7d24a28166ea1461338a03fcbffb088cf", }, { - PeerID: "12D3KooWN2hztiXNNS1jMQTTvvPRYcarK1C7T3Mdqk4x4gwyo5WS", - Signer: "0x1a684B3d8f917fe496b7B1A8b29EDDAED64F649f", + PeerID: "12D3KooWN2hztiXNNS1jMQTTvvPRYcarK1C7T3Mdqk4x4gwyo5WS", + Signer: "0x1a684B3d8f917fe496b7B1A8b29EDDAED64F649f", + EncryptionPublicKey: "0x1a746e0fcaf3e50db87bcc765fbbaee7d24a28166ea1461338a03fcbffb088cf", }, } aptosTargetDonPeers = []peer{ { - PeerID: "12D3KooWNBr1AD3vD3dzSLgg1tK56qyJoenDx7EYNnZpbr1g4jD6", - Signer: "a41f9a561ff2266d94240996a76f9c2b3b7d8184", + PeerID: "12D3KooWNBr1AD3vD3dzSLgg1tK56qyJoenDx7EYNnZpbr1g4jD6", + Signer: "a41f9a561ff2266d94240996a76f9c2b3b7d8184", + EncryptionPublicKey: "0xf28fcfaf2933289b3a98d387f6edf85853df32528c094dee9e737f4ca63e5a30", }, { - PeerID: "12D3KooWRRgWiZGw5GYsPa62CkwFNKJb5u4hWo4DinnvjG6GE6Nj", - Signer: "e4f3c7204776530fb7833db6f9dbfdb8bd0ec96892965324a71c20d6776f67f0", + PeerID: "12D3KooWRRgWiZGw5GYsPa62CkwFNKJb5u4hWo4DinnvjG6GE6Nj", + Signer: "e4f3c7204776530fb7833db6f9dbfdb8bd0ec96892965324a71c20d6776f67f0", + EncryptionPublicKey: "0x49c837675372d8f430e69ccd91c43029600c2c6469a2f933c4a1c4bbbc974c6d", }, { - PeerID: "12D3KooWKwzgUHw5YbqUsYUVt3yiLSJcqc8ANofUtqHX6qTm7ox2", - Signer: "4071ea00e2e2c76b3406018ba9f66bf6b9aee3a6762e62ac823b1ee91ba7d7b0", + PeerID: "12D3KooWKwzgUHw5YbqUsYUVt3yiLSJcqc8ANofUtqHX6qTm7ox2", + Signer: "4071ea00e2e2c76b3406018ba9f66bf6b9aee3a6762e62ac823b1ee91ba7d7b0", + EncryptionPublicKey: "0x8fe005ef16d57091160c0b4373232e7389c321dff971fc0251a39e360d9ac34a", }, { - PeerID: "12D3KooWBRux5o2bw1j3SQwEHzCspjkt7Xe3Y3agRUuab2SUnExj", - Signer: "6f5180c7d276876dbe413bf9b0efff7301d1367f39f4bac64180090cab70989b", + PeerID: "12D3KooWBRux5o2bw1j3SQwEHzCspjkt7Xe3Y3agRUuab2SUnExj", + Signer: "6f5180c7d276876dbe413bf9b0efff7301d1367f39f4bac64180090cab70989b", + EncryptionPublicKey: "0x90dd41db21351c06396761dd683a82c791cd71e536fce246e582a4ef058091ae", }, { - PeerID: "12D3KooWFqvDaMSDGa6eMSTF9en6G2c3ZbGLmaA5Xs3AgxVBPb8B", - Signer: "dbce9a6df8a04d54e52a109d01ee9b5d32873b1d2436cf7b7fae61fd6eca46f8", + PeerID: "12D3KooWFqvDaMSDGa6eMSTF9en6G2c3ZbGLmaA5Xs3AgxVBPb8B", + Signer: "dbce9a6df8a04d54e52a109d01ee9b5d32873b1d2436cf7b7fae61fd6eca46f8", + EncryptionPublicKey: "0x87cf298dd236a307ea887cd5d81eb0b708e3dd48c984c0700bb26c072e427942", }, } ) @@ -180,13 +204,22 @@ func peerToNode(nopID uint32, p peer) (kcr.CapabilitiesRegistryNodeParams, error return kcr.CapabilitiesRegistryNodeParams{}, fmt.Errorf("failed to convert signer: %w", err) } + keyStr := strings.TrimPrefix(p.EncryptionPublicKey, "0x") + encKey, err := hex.DecodeString(keyStr) + if err != nil { + return kcr.CapabilitiesRegistryNodeParams{}, fmt.Errorf("failed to convert encryptionPublicKey: %w", err) + } + var sigb [32]byte + var encKeyB [32]byte copy(sigb[:], signerB) + copy(encKeyB[:], encKey) return kcr.CapabilitiesRegistryNodeParams{ - NodeOperatorId: nopID, - P2pId: peerIDB, - Signer: sigb, + NodeOperatorId: nopID, + P2pId: peerIDB, + Signer: sigb, + EncryptionPublicKey: encKeyB, }, nil } diff --git a/core/services/registrysyncer/orm.go b/core/services/registrysyncer/orm.go index cb08eaafeaf..bd2fde73567 100644 --- a/core/services/registrysyncer/orm.go +++ b/core/services/registrysyncer/orm.go @@ -20,6 +20,7 @@ type capabilitiesRegistryNodeInfo struct { WorkflowDONId uint32 `json:"workflowDONId"` Signer p2ptypes.PeerID `json:"signer"` P2pId p2ptypes.PeerID `json:"p2pId"` + EncryptionPublicKey [32]byte `json:"encryptionPublicKey"` HashedCapabilityIds []p2ptypes.PeerID `json:"hashedCapabilityIds"` CapabilitiesDONIds []string `json:"capabilitiesDONIds"` } @@ -41,6 +42,7 @@ func (l *LocalRegistry) MarshalJSON() ([]byte, error) { WorkflowDONId: v.WorkflowDONId, Signer: p2ptypes.PeerID(v.Signer[:]), P2pId: p2ptypes.PeerID(v.P2pId[:]), + EncryptionPublicKey: v.EncryptionPublicKey, HashedCapabilityIds: hashedCapabilityIds, CapabilitiesDONIds: capabilitiesDONIds, } @@ -97,6 +99,7 @@ func (l *LocalRegistry) UnmarshalJSON(data []byte) error { WorkflowDONId: v.WorkflowDONId, Signer: v.Signer, P2pId: v.P2pId, + EncryptionPublicKey: v.EncryptionPublicKey, HashedCapabilityIds: hashedCapabilityIds, CapabilitiesDONIds: capabilitiesDONIds, } diff --git a/core/services/registrysyncer/orm_test.go b/core/services/registrysyncer/orm_test.go index 03772ea22bf..cea20076126 100644 --- a/core/services/registrysyncer/orm_test.go +++ b/core/services/registrysyncer/orm_test.go @@ -116,6 +116,7 @@ func generateState(t *testing.T) registrysyncer.LocalRegistry { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{capabilityID, capabilityID2}, CapabilitiesDONIds: []*big.Int{}, }, @@ -123,6 +124,7 @@ func generateState(t *testing.T) registrysyncer.LocalRegistry { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{capabilityID, capabilityID2}, CapabilitiesDONIds: []*big.Int{}, }, @@ -130,6 +132,7 @@ func generateState(t *testing.T) registrysyncer.LocalRegistry { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{capabilityID, capabilityID2}, CapabilitiesDONIds: []*big.Int{}, }, @@ -137,6 +140,7 @@ func generateState(t *testing.T) registrysyncer.LocalRegistry { NodeOperatorId: 1, Signer: randomWord(), P2pId: nodes[3], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{capabilityID, capabilityID2}, CapabilitiesDONIds: []*big.Int{}, }, diff --git a/core/services/registrysyncer/syncer.go b/core/services/registrysyncer/syncer.go index 1ef78b6edcc..4e9dd471bde 100644 --- a/core/services/registrysyncer/syncer.go +++ b/core/services/registrysyncer/syncer.go @@ -366,6 +366,7 @@ func deepCopyLocalRegistry(lr *LocalRegistry) LocalRegistry { WorkflowDONId: node.WorkflowDONId, Signer: node.Signer, P2pId: node.P2pId, + EncryptionPublicKey: node.EncryptionPublicKey, HashedCapabilityIds: make([][32]byte, len(node.HashedCapabilityIds)), CapabilitiesDONIds: make([]*big.Int, len(node.CapabilitiesDONIds)), } diff --git a/core/services/registrysyncer/syncer_test.go b/core/services/registrysyncer/syncer_test.go index 9e51b7498f0..8aaa49eab0a 100644 --- a/core/services/registrysyncer/syncer_test.go +++ b/core/services/registrysyncer/syncer_test.go @@ -215,12 +215,17 @@ func TestReader_Integration(t *testing.T) { randomWord(), } + encPubKey1 := randomWord() + encPubKey2 := randomWord() + encPubKey3 := randomWord() + nodes := []kcr.CapabilitiesRegistryNodeParams{ { // The first NodeOperatorId has id 1 since the id is auto-incrementing. NodeOperatorId: uint32(1), Signer: signersSet[0], P2pId: nodeSet[0], + EncryptionPublicKey: encPubKey1, HashedCapabilityIds: [][32]byte{hid}, }, { @@ -228,6 +233,7 @@ func TestReader_Integration(t *testing.T) { NodeOperatorId: uint32(1), Signer: signersSet[1], P2pId: nodeSet[1], + EncryptionPublicKey: encPubKey2, HashedCapabilityIds: [][32]byte{hid}, }, { @@ -235,6 +241,7 @@ func TestReader_Integration(t *testing.T) { NodeOperatorId: uint32(1), Signer: signersSet[2], P2pId: nodeSet[2], + EncryptionPublicKey: encPubKey3, HashedCapabilityIds: [][32]byte{hid}, }, } @@ -317,6 +324,7 @@ func TestReader_Integration(t *testing.T) { WorkflowDONId: 1, Signer: signersSet[0], P2pId: nodeSet[0], + EncryptionPublicKey: encPubKey1, HashedCapabilityIds: [][32]byte{hid}, CapabilitiesDONIds: []*big.Int{}, }, @@ -327,6 +335,7 @@ func TestReader_Integration(t *testing.T) { WorkflowDONId: 1, Signer: signersSet[1], P2pId: nodeSet[1], + EncryptionPublicKey: encPubKey2, HashedCapabilityIds: [][32]byte{hid}, CapabilitiesDONIds: []*big.Int{}, }, @@ -337,6 +346,7 @@ func TestReader_Integration(t *testing.T) { WorkflowDONId: 1, Signer: signersSet[2], P2pId: nodeSet[2], + EncryptionPublicKey: encPubKey3, HashedCapabilityIds: [][32]byte{hid}, CapabilitiesDONIds: []*big.Int{}, }, @@ -387,6 +397,7 @@ func TestSyncer_DBIntegration(t *testing.T) { NodeOperatorId: uint32(1), Signer: signersSet[0], P2pId: nodeSet[0], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{cid}, }, { @@ -394,6 +405,7 @@ func TestSyncer_DBIntegration(t *testing.T) { NodeOperatorId: uint32(1), Signer: signersSet[1], P2pId: nodeSet[1], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{cid}, }, { @@ -401,6 +413,7 @@ func TestSyncer_DBIntegration(t *testing.T) { NodeOperatorId: uint32(1), Signer: signersSet[2], P2pId: nodeSet[2], + EncryptionPublicKey: randomWord(), HashedCapabilityIds: [][32]byte{cid}, }, } @@ -507,24 +520,28 @@ func TestSyncer_LocalNode(t *testing.T) { }, map[p2ptypes.PeerID]kcr.CapabilitiesRegistryNodeInfo{ workflowDonNodes[0]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[0], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[0], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[1]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[1], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[1], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[2]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[2], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[2], + EncryptionPublicKey: randomWord(), }, workflowDonNodes[3]: { - NodeOperatorId: 1, - Signer: randomWord(), - P2pId: workflowDonNodes[3], + NodeOperatorId: 1, + Signer: randomWord(), + P2pId: workflowDonNodes[3], + EncryptionPublicKey: randomWord(), }, }, map[string]registrysyncer.Capability{}, diff --git a/integration-tests/deployment/ccip/deploy_home_chain.go b/integration-tests/deployment/ccip/deploy_home_chain.go index 4e34d01b9c8..1d7c9f98fdc 100644 --- a/integration-tests/deployment/ccip/deploy_home_chain.go +++ b/integration-tests/deployment/ccip/deploy_home_chain.go @@ -208,6 +208,7 @@ func AddNodes( NodeOperatorId: NodeOperatorID, Signer: p2pID, // Not used in tests P2pId: p2pID, + EncryptionPublicKey: p2pID, // Not used in tests HashedCapabilityIds: [][32]byte{CCIPCapabilityID}, } nodeParams = append(nodeParams, nodeParam) diff --git a/integration-tests/deployment/keystone/deploy.go b/integration-tests/deployment/keystone/deploy.go index e108bc6ba4e..67a5fc7c219 100644 --- a/integration-tests/deployment/keystone/deploy.go +++ b/integration-tests/deployment/keystone/deploy.go @@ -572,6 +572,7 @@ func registerNodes(lggr logger.Logger, req *registerNodesRequest) (*registerNode NodeOperatorId: nop.NodeOperatorId, Signer: n.Signer, P2pId: n.P2PKey, + EncryptionPublicKey: [32]byte{0x01}, // unused in tests HashedCapabilityIds: hashedCapabilityIds, } } else {