diff --git a/contracts/.changeset/swift-pumpkins-impress.md b/contracts/.changeset/swift-pumpkins-impress.md new file mode 100644 index 00000000000..d3a94f0a49c --- /dev/null +++ b/contracts/.changeset/swift-pumpkins-impress.md @@ -0,0 +1,10 @@ +--- +'@chainlink/contracts': minor +--- + +change minSigners to f in RMNRemote/RMNHome + + +PR issue: CCIP-3614 + +Solidity Review issue: CCIP-3966 \ No newline at end of file diff --git a/contracts/foundry.toml b/contracts/foundry.toml index 1a3ca784048..0e9347a63b5 100644 --- a/contracts/foundry.toml +++ b/contracts/foundry.toml @@ -26,7 +26,7 @@ single_line_statement_blocks = "preserve" solc_version = '0.8.24' src = 'src/v0.8/ccip' test = 'src/v0.8/ccip/test' -optimizer_runs = 800 +optimizer_runs = 500 evm_version = 'paris' [profile.functions] diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 0b1c9e9a796..771bf054bb5 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -1,292 +1,292 @@ -ARMProxyStandaloneTest:test_ARMCallEmptyContractRevert() (gas: 19720) -ARMProxyStandaloneTest:test_Constructor() (gas: 310043) -ARMProxyStandaloneTest:test_SetARM() (gas: 16587) -ARMProxyStandaloneTest:test_SetARMzero() (gas: 11297) -ARMProxyTest:test_ARMCallRevertReasonForwarded() (gas: 45120) -ARMProxyTest:test_ARMIsCursed_Success() (gas: 47070) -BurnFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28842) -BurnFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55271) -BurnFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244065) -BurnFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24187) -BurnMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27609) -BurnMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55271) -BurnMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 241948) -BurnMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 17851) -BurnMintTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 28783) -BurnMintTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 56259) -BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 112372) -BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData_Success() (gas: 242288) -BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28842) -BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55271) -BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244092) -BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24189) -CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2108425) -CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 332601) -CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 458549) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289173) -CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 289468) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 292198) -CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 288806) -CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 336339) -CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 290572) -CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 290037) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 308628) -CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1191207) -CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 288900) -CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 289094) -CCIPHome__validateConfig:test__validateConfig_Success() (gas: 299779) -CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 773087) -CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 293437) -CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 293485) -CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 187716) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 349798) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 18043) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 272797) -CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14930) -CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 373719) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 38052) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 11783) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 11038) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 37071) -CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1455626) -CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 63886) -CCIPHome_constructor:test_constructor_success() (gas: 3526450) -CCIPHome_constructor:test_getCapabilityConfiguration_success() (gas: 9151) -CCIPHome_constructor:test_supportsInterface_success() (gas: 9931) -CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2772754) -CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2547429) -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: 5113562) -CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 9046) -CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19106) -CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 8773) -CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 30699) -CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 29359) -CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1395130) -CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365381) -DefensiveExampleTest:test_HappyPath_Success() (gas: 200048) -DefensiveExampleTest:test_Recovery() (gas: 424306) -E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1516297) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96909) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49796) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17435) -EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 15709) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_feeToken() (gas: 99887) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_native() (gas: 76138) -EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_weth() (gas: 99931) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_feeToken() (gas: 145010) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_native() (gas: 80373) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_nativeExcess() (gas: 80560) -EtherSenderReceiverTest_ccipSend:test_ccipSend_success_weth() (gas: 96064) -EtherSenderReceiverTest_constructor:test_constructor() (gas: 17553) -EtherSenderReceiverTest_getFee:test_getFee() (gas: 27412) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_reverts_feeToken_tokenAmountNotEqualToMsgValue() (gas: 20378) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 16705) -EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 16638) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 25457) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 25307) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 17925) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 25329) -EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26348) -FactoryBurnMintERC20approve:test_Approve_Success() (gas: 55766) +ARMProxyStandaloneTest:test_ARMCallEmptyContractRevert() (gas: 19709) +ARMProxyStandaloneTest:test_Constructor() (gas: 302231) +ARMProxyStandaloneTest:test_SetARM() (gas: 16599) +ARMProxyStandaloneTest:test_SetARMzero() (gas: 11319) +ARMProxyTest:test_ARMCallRevertReasonForwarded() (gas: 45153) +ARMProxyTest:test_ARMIsCursed_Success() (gas: 47082) +BurnFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28962) +BurnFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55341) +BurnFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244152) +BurnFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24209) +BurnMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 27681) +BurnMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55341) +BurnMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 242036) +BurnMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 17873) +BurnMintTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 28903) +BurnMintTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 56355) +BurnMintTokenPool_releaseOrMint:test_PoolMint_Success() (gas: 112556) +BurnMintWithLockReleaseFlagTokenPool_lockOrBurn:test_LockOrBurn_CorrectReturnData_Success() (gas: 242665) +BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28962) +BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55341) +BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 244179) +BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 24211) +CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2104880) +CCIPHome__validateConfig:test__validateConfigLessTransmittersThanSigners_Success() (gas: 332619) +CCIPHome__validateConfig:test__validateConfigSmallerFChain_Success() (gas: 458568) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 289191) +CCIPHome__validateConfig:test__validateConfig_ABIEncodedAddress_RMNHomeAddressCannotBeZero_Reverts() (gas: 289486) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 292216) +CCIPHome__validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 288824) +CCIPHome__validateConfig:test__validateConfig_FChainTooHigh_Reverts() (gas: 336363) +CCIPHome__validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 290590) +CCIPHome__validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 290055) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmittersEmptyAddresses_Reverts() (gas: 308646) +CCIPHome__validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1191231) +CCIPHome__validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 288918) +CCIPHome__validateConfig:test__validateConfig_RMNHomeAddressCannotBeZero_Reverts() (gas: 289112) +CCIPHome__validateConfig:test__validateConfig_Success() (gas: 299797) +CCIPHome__validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 773105) +CCIPHome__validateConfig:test__validateConfig_ZeroP2PId_Reverts() (gas: 293455) +CCIPHome__validateConfig:test__validateConfig_ZeroSignerKey_Reverts() (gas: 293503) +CCIPHome_applyChainConfigUpdates:test__applyChainConfigUpdates_FChainNotPositive_Reverts() (gas: 187738) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_addChainConfigs_Success() (gas: 349752) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_nodeNotInRegistry_Reverts() (gas: 18065) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_removeChainConfigs_Success() (gas: 272742) +CCIPHome_applyChainConfigUpdates:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14952) +CCIPHome_applyChainConfigUpdates:test_getPaginatedCCIPHomes_Success() (gas: 373741) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_DONIdMismatch_reverts() (gas: 38098) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InnerCallReverts_reverts() (gas: 11827) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_InvalidSelector_reverts() (gas: 11015) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_reverts() (gas: 37072) +CCIPHome_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_success() (gas: 1455716) +CCIPHome_constructor:test_constructor_CapabilitiesRegistryAddressZero_reverts() (gas: 63876) +CCIPHome_constructor:test_constructor_success() (gas: 3499586) +CCIPHome_constructor:test_getCapabilityConfiguration_success() (gas: 9150) +CCIPHome_constructor:test_supportsInterface_success() (gas: 9907) +CCIPHome_getAllConfigs:test_getAllConfigs_success() (gas: 2773000) +CCIPHome_getConfigDigests:test_getConfigDigests_success() (gas: 2547397) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_CanOnlySelfCall_reverts() (gas: 9087) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23005) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 8817) +CCIPHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_multiplePlugins_success() (gas: 5113570) +CCIPHome_revokeCandidate:test_revokeCandidate_CanOnlySelfCall_reverts() (gas: 9068) +CCIPHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19105) +CCIPHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 8817) +CCIPHome_revokeCandidate:test_revokeCandidate_success() (gas: 30674) +CCIPHome_setCandidate:test_setCandidate_CanOnlySelfCall_reverts() (gas: 29383) +CCIPHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 1395154) +CCIPHome_setCandidate:test_setCandidate_success() (gas: 1365439) +DefensiveExampleTest:test_HappyPath_Success() (gas: 200473) +DefensiveExampleTest:test_Recovery() (gas: 424859) +E2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1522070) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_fallbackToWethTransfer() (gas: 96962) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_happyPath() (gas: 49812) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongToken() (gas: 17457) +EtherSenderReceiverTest_ccipReceive:test_ccipReceive_wrongTokenAmount() (gas: 15753) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_feeToken() (gas: 99930) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_native() (gas: 76182) +EtherSenderReceiverTest_ccipSend:test_ccipSend_reverts_insufficientFee_weth() (gas: 99974) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_feeToken() (gas: 145007) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_native() (gas: 80439) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_nativeExcess() (gas: 80604) +EtherSenderReceiverTest_ccipSend:test_ccipSend_success_weth() (gas: 96107) +EtherSenderReceiverTest_constructor:test_constructor() (gas: 17575) +EtherSenderReceiverTest_getFee:test_getFee() (gas: 27456) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_reverts_feeToken_tokenAmountNotEqualToMsgValue() (gas: 20355) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_feeToken() (gas: 16682) +EtherSenderReceiverTest_validateFeeToken:test_validateFeeToken_valid_native() (gas: 16615) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_dataOverwrittenToMsgSender() (gas: 25456) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_emptyDataOverwrittenToMsgSender() (gas: 25351) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_invalidTokenAmounts() (gas: 17969) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_tokenOverwrittenToWeth() (gas: 25328) +EtherSenderReceiverTest_validatedMessage:test_validatedMessage_validMessage_extraArgs() (gas: 26392) +FactoryBurnMintERC20approve:test_Approve_Success() (gas: 55819) FactoryBurnMintERC20approve:test_InvalidAddress_Reverts() (gas: 10703) -FactoryBurnMintERC20burn:test_BasicBurn_Success() (gas: 172367) -FactoryBurnMintERC20burn:test_BurnFromZeroAddress_Reverts() (gas: 47272) -FactoryBurnMintERC20burn:test_ExceedsBalance_Reverts() (gas: 21939) -FactoryBurnMintERC20burn:test_SenderNotBurner_Reverts() (gas: 13487) -FactoryBurnMintERC20burnFrom:test_BurnFrom_Success() (gas: 58221) -FactoryBurnMintERC20burnFrom:test_ExceedsBalance_Reverts() (gas: 36138) -FactoryBurnMintERC20burnFrom:test_InsufficientAllowance_Reverts() (gas: 22025) -FactoryBurnMintERC20burnFrom:test_SenderNotBurner_Reverts() (gas: 13454) -FactoryBurnMintERC20burnFromAlias:test_BurnFrom_Success() (gas: 58196) -FactoryBurnMintERC20burnFromAlias:test_ExceedsBalance_Reverts() (gas: 36102) -FactoryBurnMintERC20burnFromAlias:test_InsufficientAllowance_Reverts() (gas: 21980) -FactoryBurnMintERC20burnFromAlias:test_SenderNotBurner_Reverts() (gas: 13409) -FactoryBurnMintERC20constructor:test_Constructor_Success() (gas: 1503941) -FactoryBurnMintERC20decreaseApproval:test_DecreaseApproval_Success() (gas: 31331) -FactoryBurnMintERC20getCCIPAdmin:test_getCCIPAdmin_Success() (gas: 12684) -FactoryBurnMintERC20getCCIPAdmin:test_setCCIPAdmin_Success() (gas: 23757) -FactoryBurnMintERC20grantMintAndBurnRoles:test_GrantMintAndBurnRoles_Success() (gas: 121062) -FactoryBurnMintERC20grantRole:test_GrantBurnAccess_Success() (gas: 53324) -FactoryBurnMintERC20grantRole:test_GrantMany_Success() (gas: 961398) -FactoryBurnMintERC20grantRole:test_GrantMintAccess_Success() (gas: 94068) -FactoryBurnMintERC20increaseApproval:test_IncreaseApproval_Success() (gas: 44311) -FactoryBurnMintERC20mint:test_BasicMint_Success() (gas: 149771) -FactoryBurnMintERC20mint:test_MaxSupplyExceeded_Reverts() (gas: 50659) -FactoryBurnMintERC20mint:test_SenderNotMinter_Reverts() (gas: 11372) -FactoryBurnMintERC20supportsInterface:test_SupportsInterface_Success() (gas: 11439) +FactoryBurnMintERC20burn:test_BasicBurn_Success() (gas: 172464) +FactoryBurnMintERC20burn:test_BurnFromZeroAddress_Reverts() (gas: 47338) +FactoryBurnMintERC20burn:test_ExceedsBalance_Reverts() (gas: 22005) +FactoryBurnMintERC20burn:test_SenderNotBurner_Reverts() (gas: 13520) +FactoryBurnMintERC20burnFrom:test_BurnFrom_Success() (gas: 58274) +FactoryBurnMintERC20burnFrom:test_ExceedsBalance_Reverts() (gas: 36191) +FactoryBurnMintERC20burnFrom:test_InsufficientAllowance_Reverts() (gas: 22113) +FactoryBurnMintERC20burnFrom:test_SenderNotBurner_Reverts() (gas: 13487) +FactoryBurnMintERC20burnFromAlias:test_BurnFrom_Success() (gas: 58248) +FactoryBurnMintERC20burnFromAlias:test_ExceedsBalance_Reverts() (gas: 36155) +FactoryBurnMintERC20burnFromAlias:test_InsufficientAllowance_Reverts() (gas: 22068) +FactoryBurnMintERC20burnFromAlias:test_SenderNotBurner_Reverts() (gas: 13442) +FactoryBurnMintERC20constructor:test_Constructor_Success() (gas: 1478933) +FactoryBurnMintERC20decreaseApproval:test_DecreaseApproval_Success() (gas: 31419) +FactoryBurnMintERC20getCCIPAdmin:test_getCCIPAdmin_Success() (gas: 12717) +FactoryBurnMintERC20getCCIPAdmin:test_setCCIPAdmin_Success() (gas: 23874) +FactoryBurnMintERC20grantMintAndBurnRoles:test_GrantMintAndBurnRoles_Success() (gas: 121194) +FactoryBurnMintERC20grantRole:test_GrantBurnAccess_Success() (gas: 53403) +FactoryBurnMintERC20grantRole:test_GrantMany_Success() (gas: 961486) +FactoryBurnMintERC20grantRole:test_GrantMintAccess_Success() (gas: 94165) +FactoryBurnMintERC20increaseApproval:test_IncreaseApproval_Success() (gas: 44398) +FactoryBurnMintERC20mint:test_BasicMint_Success() (gas: 149804) +FactoryBurnMintERC20mint:test_MaxSupplyExceeded_Reverts() (gas: 50679) +FactoryBurnMintERC20mint:test_SenderNotMinter_Reverts() (gas: 11405) +FactoryBurnMintERC20supportsInterface:test_SupportsInterface_Success() (gas: 11538) FactoryBurnMintERC20transfer:test_InvalidAddress_Reverts() (gas: 10701) -FactoryBurnMintERC20transfer:test_Transfer_Success() (gas: 42449) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16856) -FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 16736) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 16778) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 41181) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroIntput_Success() (gas: 12462) -FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 140340) -FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 162349) -FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12265) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 11613) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 54728) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 45219) -FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 12376) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 87827) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13233) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 17397) -FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12330) -FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106738) -FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 111088) -FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 111141) -FeeQuoter_constructor:test_Setup_Success() (gas: 5086711) -FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 68361) -FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29234) -FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 96069) -FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 14774) -FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20832) -FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 72793) -FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 26388) -FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 111816) -FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 16081) -FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 108993) -FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 67849) -FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 33342) -FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78366) -FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 39282) -FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 34919) -FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 28015) -FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 97630) -FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 20506) -FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 27823) -FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 27846) -FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40609) -FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29542) -FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18377) -FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 82916) -FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 53483) -FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 239378) -FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22594) -FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29902) -FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100353) -FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 142587) -FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21234) -FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 113938) -FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 23409) -FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 63711) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 1974510) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 1974468) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 1954587) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 1974242) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 1974446) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 1974258) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 65176) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 65056) +FactoryBurnMintERC20transfer:test_Transfer_Success() (gas: 42482) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidChainFamilySelector_Revert() (gas: 16846) +FeeQuoter_applyDestChainConfigUpdates:test_InvalidDestChainConfigDestChainSelectorEqZero_Revert() (gas: 16759) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitEqZero_Revert() (gas: 16813) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesDefaultTxGasLimitGtMaxPerMessageGasLimit_Revert() (gas: 41217) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdatesZeroIntput_Success() (gas: 12452) +FeeQuoter_applyDestChainConfigUpdates:test_applyDestChainConfigUpdates_Success() (gas: 140665) +FeeQuoter_applyFeeTokensUpdates:test_ApplyFeeTokensUpdates_Success() (gas: 162508) +FeeQuoter_applyFeeTokensUpdates:test_OnlyCallableByOwner_Revert() (gas: 12331) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 11657) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesMultipleTokens_Success() (gas: 54882) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesSingleToken_Success() (gas: 45290) +FeeQuoter_applyPremiumMultiplierWeiPerEthUpdates:test_applyPremiumMultiplierWeiPerEthUpdatesZeroInput() (gas: 12434) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Success() (gas: 88930) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13324) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 17501) +FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12395) +FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106705) +FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 111055) +FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 111130) +FeeQuoter_constructor:test_Setup_Success() (gas: 5037555) +FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 68394) +FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29300) +FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 96323) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 14857) +FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20877) +FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 73071) +FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 26476) +FeeQuoter_getTokenAndGasPrices:test_StalenessCheckDisabled_Success() (gas: 112021) +FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 16184) +FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 109131) +FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 68015) +FeeQuoter_getTokenPrice:test_GetTokenPrice_LocalMoreRecent_Success() (gas: 33463) +FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78498) +FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 39502) +FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 35151) +FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 28241) +FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 98330) +FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 20702) +FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 28049) +FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 28072) +FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40887) +FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29801) +FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18465) +FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 83208) +FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 53548) +FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 239604) +FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22646) +FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29966) +FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100417) +FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 143157) +FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21280) +FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 114442) +FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 23473) +FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 63843) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 1960306) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 1960264) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 1940383) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 1960038) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 1960242) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 1960054) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 65210) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 65090) FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 58872) -FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 1973884) +FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 1959680) FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 61821) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 116870) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 116926) FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 14160) -FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 1972561) -FeeQuoter_onReport:test_OnReport_StaleUpdate_Revert() (gas: 43873) -FeeQuoter_onReport:test_onReport_InvalidForwarder_Reverts() (gas: 23492) -FeeQuoter_onReport:test_onReport_Success() (gas: 80467) -FeeQuoter_onReport:test_onReport_TokenNotSupported_Revert() (gas: 22771) -FeeQuoter_onReport:test_onReport_UnsupportedToken_Reverts() (gas: 26982) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 17471) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 21589) +FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 1958357) +FeeQuoter_onReport:test_OnReport_StaleUpdate_Revert() (gas: 44107) +FeeQuoter_onReport:test_onReport_InvalidForwarder_Reverts() (gas: 23657) +FeeQuoter_onReport:test_onReport_Success() (gas: 80720) +FeeQuoter_onReport:test_onReport_TokenNotSupported_Revert() (gas: 22936) +FeeQuoter_onReport:test_onReport_UnsupportedToken_Reverts() (gas: 27202) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 17448) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 21620) FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsGasLimitTooHigh_Revert() (gas: 18680) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 18198) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 18557) -FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 18680) -FeeQuoter_processMessageArgs:test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() (gas: 21372) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 44681) -FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 19914) -FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 20311) -FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 17882) -FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 122505) -FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 42010) -FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 28534) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 29927) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 75957) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 28132) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 26003) -FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 19501) -FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 12154) -FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 23840) -FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 28572) -FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 74668) -FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 145584) -FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 52376) -FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 66245) -FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 20192) -FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 93429) -FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 53087) -FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 12409) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 10633) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 3979031) -FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 10840) -FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 6775) -FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 6489) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209283) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 135915) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 109794) -HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 147082) -HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 217024) -HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 425962) -HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 268984) -HybridUSDCTokenPoolMigrationTests:test_ProposeMigration_ChainNotUsingLockRelease_Revert() (gas: 15843) -HybridUSDCTokenPoolMigrationTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 113503) -HybridUSDCTokenPoolMigrationTests:test_burnLockedUSDC_invalidPermissions_Revert() (gas: 39300) -HybridUSDCTokenPoolMigrationTests:test_cancelExistingCCTPMigrationProposal() (gas: 56208) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsInvalidExtraArgsTag_Revert() (gas: 18220) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV1_Success() (gas: 18534) +FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsV2_Success() (gas: 18657) +FeeQuoter_processMessageArgs:test_applyTokensTransferFeeConfigUpdates_InvalidFeeRange_Revert() (gas: 21454) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidEVMAddressDestToken_Revert() (gas: 44795) +FeeQuoter_processMessageArgs:test_processMessageArgs_InvalidExtraArgs_Revert() (gas: 19992) +FeeQuoter_processMessageArgs:test_processMessageArgs_MalformedEVMExtraArgs_Revert() (gas: 20383) +FeeQuoter_processMessageArgs:test_processMessageArgs_MessageFeeTooHigh_Revert() (gas: 17954) +FeeQuoter_processMessageArgs:test_processMessageArgs_SourceTokenDataTooLarge_Revert() (gas: 123115) +FeeQuoter_processMessageArgs:test_processMessageArgs_TokenAmountArraysMismatching_Revert() (gas: 42124) +FeeQuoter_processMessageArgs:test_processMessageArgs_WitEVMExtraArgsV2_Success() (gas: 28658) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithConvertedTokenAmount_Success() (gas: 29999) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithCorrectPoolReturnData_Success() (gas: 76173) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEVMExtraArgsV1_Success() (gas: 28256) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithEmptyEVMExtraArgs_Success() (gas: 26115) +FeeQuoter_processMessageArgs:test_processMessageArgs_WithLinkTokenAmount_Success() (gas: 19573) +FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 12176) +FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 23917) +FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 28604) +FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 74711) +FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 145804) +FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 52421) +FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 66335) +FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 20214) +FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 93475) +FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 53098) +FeeQuoter_updateTokenPriceFeeds:test_ZeroFeeds_Success() (gas: 12431) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressEncodePacked_Revert() (gas: 10688) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddressPrecompiles_Revert() (gas: 4035395) +FeeQuoter_validateDestFamilyAddress:test_InvalidEVMAddress_Revert() (gas: 10884) +FeeQuoter_validateDestFamilyAddress:test_ValidEVMAddress_Success() (gas: 6819) +FeeQuoter_validateDestFamilyAddress:test_ValidNonEVMAddress_Success() (gas: 6545) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209719) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 136083) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 109924) +HybridUSDCTokenPoolMigrationTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 147189) +HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 217255) +HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 426523) +HybridUSDCTokenPoolMigrationTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 269168) +HybridUSDCTokenPoolMigrationTests:test_ProposeMigration_ChainNotUsingLockRelease_Revert() (gas: 15876) +HybridUSDCTokenPoolMigrationTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 113657) +HybridUSDCTokenPoolMigrationTests:test_burnLockedUSDC_invalidPermissions_Revert() (gas: 39333) +HybridUSDCTokenPoolMigrationTests:test_cancelExistingCCTPMigrationProposal() (gas: 56302) HybridUSDCTokenPoolMigrationTests:test_cannotCancelANonExistentMigrationProposal() (gas: 12758) -HybridUSDCTokenPoolMigrationTests:test_cannotModifyLiquidityWithoutPermissions_Revert() (gas: 13395) -HybridUSDCTokenPoolMigrationTests:test_cannotProvideLiquidityWhenMigrationProposalPending_Revert() (gas: 67370) -HybridUSDCTokenPoolMigrationTests:test_cannotRevertChainMechanism_afterMigration_Revert() (gas: 313252) -HybridUSDCTokenPoolMigrationTests:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 177053) -HybridUSDCTokenPoolMigrationTests:test_cnanotProvideLiquidity_AfterMigration_Revert() (gas: 313637) -HybridUSDCTokenPoolMigrationTests:test_excludeTokensWhenNoMigrationProposalPending_Revert() (gas: 13657) -HybridUSDCTokenPoolMigrationTests:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 309797) -HybridUSDCTokenPoolMigrationTests:test_transferLiquidity_Success() (gas: 167051) -HybridUSDCTokenPoolMigrationTests:test_unstickManualTxAfterMigration_destChain_Success() (gas: 156096) -HybridUSDCTokenPoolMigrationTests:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 516027) -HybridUSDCTokenPoolTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209283) -HybridUSDCTokenPoolTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 135915) -HybridUSDCTokenPoolTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 109794) -HybridUSDCTokenPoolTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 147080) -HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 217002) -HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 425918) -HybridUSDCTokenPoolTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 268967) -HybridUSDCTokenPoolTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 113547) -HybridUSDCTokenPoolTests:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 177009) -HybridUSDCTokenPoolTests:test_transferLiquidity_Success() (gas: 167033) -LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 2836138) -LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30062) -LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 79965) -LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59620) -LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 2832621) +HybridUSDCTokenPoolMigrationTests:test_cannotModifyLiquidityWithoutPermissions_Revert() (gas: 13423) +HybridUSDCTokenPoolMigrationTests:test_cannotProvideLiquidityWhenMigrationProposalPending_Revert() (gas: 67449) +HybridUSDCTokenPoolMigrationTests:test_cannotRevertChainMechanism_afterMigration_Revert() (gas: 313663) +HybridUSDCTokenPoolMigrationTests:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 177187) +HybridUSDCTokenPoolMigrationTests:test_cnanotProvideLiquidity_AfterMigration_Revert() (gas: 314046) +HybridUSDCTokenPoolMigrationTests:test_excludeTokensWhenNoMigrationProposalPending_Revert() (gas: 13712) +HybridUSDCTokenPoolMigrationTests:test_lockOrBurn_then_BurnInCCTPMigration_Success() (gas: 310162) +HybridUSDCTokenPoolMigrationTests:test_transferLiquidity_Success() (gas: 167156) +HybridUSDCTokenPoolMigrationTests:test_unstickManualTxAfterMigration_destChain_Success() (gas: 156334) +HybridUSDCTokenPoolMigrationTests:test_unstickManualTxAfterMigration_homeChain_Success() (gas: 516342) +HybridUSDCTokenPoolTests:test_LockOrBurn_LockReleaseMechanism_then_switchToPrimary_Success() (gas: 209569) +HybridUSDCTokenPoolTests:test_LockOrBurn_PrimaryMechanism_Success() (gas: 136048) +HybridUSDCTokenPoolTests:test_LockOrBurn_WhileMigrationPause_Revert() (gas: 109914) +HybridUSDCTokenPoolTests:test_LockOrBurn_onLockReleaseMechanism_Success() (gas: 147177) +HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_Success() (gas: 217112) +HybridUSDCTokenPoolTests:test_MintOrRelease_OnLockReleaseMechanism_then_switchToPrimary_Success() (gas: 426248) +HybridUSDCTokenPoolTests:test_MintOrRelease_incomingMessageWithPrimaryMechanism() (gas: 269124) +HybridUSDCTokenPoolTests:test_ReleaseOrMint_WhileMigrationPause_Revert() (gas: 113635) +HybridUSDCTokenPoolTests:test_cannotTransferLiquidityDuringPendingMigration_Revert() (gas: 177099) +HybridUSDCTokenPoolTests:test_transferLiquidity_Success() (gas: 167068) +LockReleaseTokenPool_canAcceptLiquidity:test_CanAcceptLiquidity_Success() (gas: 2806933) +LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30110) +LockReleaseTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Success() (gas: 80282) +LockReleaseTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 59690) +LockReleaseTokenPool_provideLiquidity:test_LiquidityNotAccepted_Revert() (gas: 2803350) LockReleaseTokenPool_provideLiquidity:test_Unauthorized_Revert() (gas: 11489) -LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 72743) -LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 56358) -LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 225587) -LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 11011) -LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 18094) -LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10184) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 83234) -LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 55947) +LockReleaseTokenPool_releaseOrMint:test_ChainNotAllowed_Revert() (gas: 72956) +LockReleaseTokenPool_releaseOrMint:test_PoolMintNotHealthy_Revert() (gas: 56476) +LockReleaseTokenPool_releaseOrMint:test_ReleaseOrMint_Success() (gas: 225734) +LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Revert() (gas: 11077) +LockReleaseTokenPool_setRebalancer:test_SetRebalancer_Success() (gas: 18160) +LockReleaseTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10250) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_Success() (gas: 83267) +LockReleaseTokenPool_transferLiquidity:test_transferLiquidity_transferTooMuch_Revert() (gas: 56013) LockReleaseTokenPool_withdrawalLiquidity:test_InsufficientLiquidity_Revert() (gas: 60164) LockReleaseTokenPool_withdrawalLiquidity:test_Unauthorized_Revert() (gas: 11464) -LockRelease_setRateLimitAdmin:test_SetRateLimitAdmin_Revert() (gas: 11054) -LockRelease_setRateLimitAdmin:test_SetRateLimitAdmin_Success() (gas: 35060) -MerkleMultiProofTest:test_CVE_2023_34459() (gas: 5478) -MerkleMultiProofTest:test_EmptyLeaf_Revert() (gas: 3585) +LockRelease_setRateLimitAdmin:test_SetRateLimitAdmin_Revert() (gas: 11120) +LockRelease_setRateLimitAdmin:test_SetRateLimitAdmin_Success() (gas: 35126) +MerkleMultiProofTest:test_CVE_2023_34459() (gas: 5500) +MerkleMultiProofTest:test_EmptyLeaf_Revert() (gas: 3607) MerkleMultiProofTest:test_MerkleRoot256() (gas: 394891) MerkleMultiProofTest:test_MerkleRootSingleLeaf_Success() (gas: 3661) MerkleMultiProofTest:test_SpecSync_gas() (gas: 34107) -MockRouterTest:test_ccipSendWithInsufficientNativeTokens_Revert() (gas: 34059) -MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 60842) -MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 126576) -MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 63455) -MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 44034) +MockRouterTest:test_ccipSendWithInsufficientNativeTokens_Revert() (gas: 34081) +MockRouterTest:test_ccipSendWithInvalidMsgValue_Revert() (gas: 60886) +MockRouterTest:test_ccipSendWithLinkFeeTokenAndValidMsgValue_Success() (gas: 126575) +MockRouterTest:test_ccipSendWithLinkFeeTokenbutInsufficientAllowance_Revert() (gas: 63499) +MockRouterTest:test_ccipSendWithSufficientNativeFeeTokens_Success() (gas: 44056) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateMoreThanCapacity_Revert() (gas: 16554) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ConfigRateZero_Revert() (gas: 16634) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_DiableConfigCapacityNonZero_Revert() (gas: 16585) @@ -296,451 +296,450 @@ MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_MultipleConfigs_Suc MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_OnlyCallableByOwner_Revert() (gas: 17886) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfigOutbound_Success() (gas: 76620) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_SingleConfig_Success() (gas: 76603) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference_Success() (gas: 38736) -MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 53934) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfigWithNoDifference_Success() (gas: 38739) +MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_UpdateExistingConfig_Success() (gas: 53937) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroChainSelector_Revert() (gas: 17154) MultiAggregateRateLimiter_applyRateLimiterConfigUpdates:test_ZeroConfigs_Success() (gas: 12481) -MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 1999640) -MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 2115969) +MultiAggregateRateLimiter_constructor:test_ConstructorNoAuthorizedCallers_Success() (gas: 1995557) +MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 2111854) MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 30794) -MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 48166) +MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 48169) MultiAggregateRateLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 15907) -MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17569) -MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21531) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 14617) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210239) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 58438) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 17721) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 45162) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 46458) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 76781) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308409) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 50624) -MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 51269) -MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 19345) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 15913) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210017) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60226) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 46980) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 48267) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 77882) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308391) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 52412) -MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 11315) -MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 19157) -MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 10609) -MultiAggregateRateLimiter_updateRateLimitTokens:test_NonOwner_Revert() (gas: 18901) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensMultipleChains_Success() (gas: 280234) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensSingleChain_Success() (gas: 254707) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsAndRemoves_Success() (gas: 204577) -MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken_Success() (gas: 28849) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 18324) -MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 18231) -MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 59442) -MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 44190) -MultiOCR3Base_setOCR3Configs:test_MoreTransmittersThanSigners_Revert() (gas: 104822) -MultiOCR3Base_setOCR3Configs:test_NoTransmitters_Revert() (gas: 18886) -MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 283736) -MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 422361) -MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners_Success() (gas: 511918) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters_Success() (gas: 680345) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 828900) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 457314) -MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 12437) -MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2141722) -MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 141835) -MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 807557) -MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 158889) -MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 112335) -MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 254201) -MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 861206) -MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners_Success() (gas: 475852) -MultiOCR3Base_transmit:test_ConfigDigestMismatch_Revert() (gas: 42934) -MultiOCR3Base_transmit:test_ForkedChain_Revert() (gas: 48617) -MultiOCR3Base_transmit:test_InsufficientSignatures_Revert() (gas: 77138) -MultiOCR3Base_transmit:test_NonUniqueSignature_Revert() (gas: 65890) -MultiOCR3Base_transmit:test_SignatureOutOfRegistration_Revert() (gas: 33495) -MultiOCR3Base_transmit:test_TooManySignatures_Revert() (gas: 79773) -MultiOCR3Base_transmit:test_TransmitSigners_gas_Success() (gas: 33664) -MultiOCR3Base_transmit:test_TransmitWithExtraCalldataArgs_Revert() (gas: 47200) -MultiOCR3Base_transmit:test_TransmitWithLessCalldataArgs_Revert() (gas: 25768) -MultiOCR3Base_transmit:test_TransmitWithoutSignatureVerification_gas_Success() (gas: 18745) -MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 24300) -MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61275) -MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39998) -MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 33027) -NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37934) +MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17602) +MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21630) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 14647) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210393) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 58469) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 17809) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 45220) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 46488) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 76929) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308577) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 50654) +MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 51305) +MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 19393) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 15925) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 210113) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60262) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 47043) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 48279) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 77936) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 308523) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 52424) +MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 11381) +MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 19190) +MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 10642) +MultiAggregateRateLimiter_updateRateLimitTokens:test_NonOwner_Revert() (gas: 18926) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensMultipleChains_Success() (gas: 280586) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokensSingleChain_Success() (gas: 254999) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_AddsAndRemoves_Success() (gas: 204837) +MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_RemoveNonExistentToken_Success() (gas: 29012) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 18358) +MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 18277) +MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 59441) +MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 44212) +MultiOCR3Base_setOCR3Configs:test_MoreTransmittersThanSigners_Revert() (gas: 104844) +MultiOCR3Base_setOCR3Configs:test_NoTransmitters_Revert() (gas: 18908) +MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 283842) +MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 422489) +MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners_Success() (gas: 512288) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSignersMismatchingTransmitters_Success() (gas: 680609) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 829200) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 457530) +MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 12436) +MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2142528) +MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 141905) +MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 807791) +MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 158911) +MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 112357) +MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 254293) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 861787) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners_Success() (gas: 476204) +MultiOCR3Base_transmit:test_ConfigDigestMismatch_Revert() (gas: 42957) +MultiOCR3Base_transmit:test_ForkedChain_Revert() (gas: 48640) +MultiOCR3Base_transmit:test_InsufficientSignatures_Revert() (gas: 77185) +MultiOCR3Base_transmit:test_NonUniqueSignature_Revert() (gas: 65925) +MultiOCR3Base_transmit:test_SignatureOutOfRegistration_Revert() (gas: 33494) +MultiOCR3Base_transmit:test_TooManySignatures_Revert() (gas: 79844) +MultiOCR3Base_transmit:test_TransmitSigners_gas_Success() (gas: 33686) +MultiOCR3Base_transmit:test_TransmitWithExtraCalldataArgs_Revert() (gas: 47199) +MultiOCR3Base_transmit:test_TransmitWithLessCalldataArgs_Revert() (gas: 25722) +MultiOCR3Base_transmit:test_TransmitWithoutSignatureVerification_gas_Success() (gas: 18722) +MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 24299) +MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61298) +MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39952) +MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 33026) +NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37956) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23706) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38778) NonceManager_NonceIncrementation:test_incrementNoncesInboundAndOutbound_Success() (gas: 71901) -NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 185977) -NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 189332) -NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 252568) -NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 220866) -NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 60382) -NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 152988) -NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 166004) -NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195563) -NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139073) -NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 105143) -NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates_success() (gas: 123118) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43282) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64610) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRamp_Revert() (gas: 43102) -NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed_success() (gas: 45875) -NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66658) -NonceManager_applyPreviousRampsUpdates:test_ZeroInput_success() (gas: 12114) +NonceManager_OffRampUpgrade:test_NoPrevOffRampForChain_Success() (gas: 186219) +NonceManager_OffRampUpgrade:test_UpgradedNonceNewSenderStartsAtZero_Success() (gas: 189666) +NonceManager_OffRampUpgrade:test_UpgradedNonceStartsAtV1Nonce_Success() (gas: 253079) +NonceManager_OffRampUpgrade:test_UpgradedOffRampNonceSkipsIfMsgInFlight_Success() (gas: 221316) +NonceManager_OffRampUpgrade:test_UpgradedSenderNoncesReadsPreviousRamp_Success() (gas: 60591) +NonceManager_OffRampUpgrade:test_Upgraded_Success() (gas: 153253) +NonceManager_OnRampUpgrade:test_UpgradeNonceNewSenderStartsAtZero_Success() (gas: 166101) +NonceManager_OnRampUpgrade:test_UpgradeNonceStartsAtV1Nonce_Success() (gas: 195806) +NonceManager_OnRampUpgrade:test_UpgradeSenderNoncesReadsPreviousRamp_Success() (gas: 139098) +NonceManager_OnRampUpgrade:test_Upgrade_Success() (gas: 105257) +NonceManager_applyPreviousRampsUpdates:test_MultipleRampsUpdates_success() (gas: 123604) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOffRamp_Revert() (gas: 43403) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRampAndOffRamp_Revert() (gas: 64775) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySetOnRamp_Revert() (gas: 43201) +NonceManager_applyPreviousRampsUpdates:test_PreviousRampAlreadySet_overrideAllowed_success() (gas: 45941) +NonceManager_applyPreviousRampsUpdates:test_SingleRampUpdate_success() (gas: 66889) +NonceManager_applyPreviousRampsUpdates:test_ZeroInput_success() (gas: 12213) NonceManager_typeAndVersion:test_typeAndVersion() (gas: 9705) -OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5919025) -OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626106) -OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166490) +OffRamp_afterOC3ConfigSet:test_afterOCR3ConfigSet_SignatureVerificationDisabled_Revert() (gas: 5926987) +OffRamp_applySourceChainConfigUpdates:test_AddMultipleChains_Success() (gas: 626115) +OffRamp_applySourceChainConfigUpdates:test_AddNewChain_Success() (gas: 166515) OffRamp_applySourceChainConfigUpdates:test_ApplyZeroUpdates_Success() (gas: 16741) -OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 272213) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168572) -OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181027) +OffRamp_applySourceChainConfigUpdates:test_InvalidOnRampUpdate_Revert() (gas: 274304) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChainOnRamp_Success() (gas: 168534) +OffRamp_applySourceChainConfigUpdates:test_ReplaceExistingChain_Success() (gas: 181033) OffRamp_applySourceChainConfigUpdates:test_RouterAddress_Revert() (gas: 13463) OffRamp_applySourceChainConfigUpdates:test_ZeroOnRampAddress_Revert() (gas: 72746) -OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15519) -OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177433) -OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 333964) -OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277208) -OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 168807) -OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 187917) -OffRamp_batchExecute:test_SingleReport_Success() (gas: 156564) -OffRamp_batchExecute:test_Unhealthy_Success() (gas: 553110) +OffRamp_applySourceChainConfigUpdates:test_ZeroSourceChainSelector_Revert() (gas: 15541) +OffRamp_batchExecute:test_MultipleReportsDifferentChainsSkipCursedChain_Success() (gas: 177807) +OffRamp_batchExecute:test_MultipleReportsDifferentChains_Success() (gas: 334644) +OffRamp_batchExecute:test_MultipleReportsSameChain_Success() (gas: 277910) +OffRamp_batchExecute:test_MultipleReportsSkipDuplicate_Success() (gas: 168974) +OffRamp_batchExecute:test_OutOfBoundsGasLimitsAccess_Revert() (gas: 188444) +OffRamp_batchExecute:test_SingleReport_Success() (gas: 156798) +OffRamp_batchExecute:test_Unhealthy_Success() (gas: 554586) OffRamp_batchExecute:test_ZeroReports_Revert() (gas: 10600) OffRamp_ccipReceive:test_Reverts() (gas: 15407) -OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 92905) -OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 61590) -OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 68151) -OffRamp_commit:test_InvalidInterval_Revert() (gas: 64291) -OffRamp_commit:test_InvalidRootRevert() (gas: 63356) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6680047) -OffRamp_commit:test_NoConfig_Revert() (gas: 6263399) -OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113033) -OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121381) -OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113032) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355457) -OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164378) -OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139413) -OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 146578) -OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59858) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232130) -OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125387) -OffRamp_commit:test_Unhealthy_Revert() (gas: 58656) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206735) -OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51722) -OffRamp_constructor:test_Constructor_Success() (gas: 6225030) -OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 135943) -OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103375) -OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101251) -OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 161468) -OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101189) -OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101204) +OffRamp_commit:test_CommitOnRampMismatch_Revert() (gas: 93097) +OffRamp_commit:test_FailedRMNVerification_Reverts() (gas: 63763) +OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 70395) +OffRamp_commit:test_InvalidInterval_Revert() (gas: 66458) +OffRamp_commit:test_InvalidRootRevert() (gas: 65545) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6688360) +OffRamp_commit:test_NoConfig_Revert() (gas: 6271690) +OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 113187) +OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 121714) +OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 113186) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 355766) +OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164660) +OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 141660) +OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 148891) +OffRamp_commit:test_RootWithRMNDisabled_success() (gas: 154318) +OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 62025) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 233095) +OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 125579) +OffRamp_commit:test_Unhealthy_Revert() (gas: 60822) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 207441) +OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 53889) +OffRamp_constructor:test_Constructor_Success() (gas: 6233679) +OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136597) +OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103678) +OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101505) +OffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 162100) +OffRamp_constructor:test_ZeroRMNRemote_Revert() (gas: 101422) +OffRamp_constructor:test_ZeroTokenAdminRegistry_Revert() (gas: 101471) OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17639) -OffRamp_execute:test_LargeBatch_Success() (gas: 3409595) -OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 371194) -OffRamp_execute:test_MultipleReports_Success() (gas: 299305) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7088069) -OffRamp_execute:test_NoConfig_Revert() (gas: 6312539) -OffRamp_execute:test_NonArray_Revert() (gas: 27562) -OffRamp_execute:test_SingleReport_Success() (gas: 175796) -OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147814) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6979739) -OffRamp_execute:test_ZeroReports_Revert() (gas: 17361) -OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18515) -OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 243683) +OffRamp_execute:test_LargeBatch_Success() (gas: 3416637) +OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 372340) +OffRamp_execute:test_MultipleReports_Success() (gas: 300029) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 7096447) +OffRamp_execute:test_NoConfig_Revert() (gas: 6320895) +OffRamp_execute:test_NonArray_Revert() (gas: 27643) +OffRamp_execute:test_SingleReport_Success() (gas: 176052) +OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 148048) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6987861) +OffRamp_execute:test_ZeroReports_Revert() (gas: 17317) +OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18537) +OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 244193) OffRamp_executeSingleMessage:test_NonContract_Success() (gas: 20389) -OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205120) -OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48752) -OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 55912) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 217464) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 84754) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 273642) -OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91024) -OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28282) -OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22637) -OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 481232) -OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48394) -OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 33981) -OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28458) -OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187541) -OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 197997) -OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40763) -OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 412699) -OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 248684) -OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 192498) -OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 212532) -OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 249156) -OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141605) -OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 408751) -OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58315) -OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 73890) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 582303) -OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 531017) -OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 33739) -OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 548662) -OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 548676) -OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 459397) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135386) -OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165091) -OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3885554) -OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 120629) -OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89288) -OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81016) -OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74094) -OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 172611) -OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 212993) -OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27085) -OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 164696) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27622) -OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55171) -OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 497399) -OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 314469) -OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2244626) -OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 164967) -OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 226033) -OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 226595) -OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 775807) -OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 345094) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37656) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 104404) -OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 82842) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36752) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 94382) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 37241) -OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 86516) -OffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 162381) +OffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 205666) +OffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 48884) +OffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 56065) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidationNoRouterCall_Revert() (gas: 212828) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithFailingValidation_Revert() (gas: 85455) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 274305) +OffRamp_executeSingleMessage:test_executeSingleMessage_WithVInterception_Success() (gas: 91944) +OffRamp_executeSingleReport:test_DisabledSourceChain_Revert() (gas: 28407) +OffRamp_executeSingleReport:test_EmptyReport_Revert() (gas: 22659) +OffRamp_executeSingleReport:test_InvalidSourcePoolAddress_Success() (gas: 482389) +OffRamp_executeSingleReport:test_ManualExecutionNotYetEnabled_Revert() (gas: 48508) +OffRamp_executeSingleReport:test_MismatchingDestChainSelector_Revert() (gas: 33996) +OffRamp_executeSingleReport:test_NonExistingSourceChain_Revert() (gas: 28572) +OffRamp_executeSingleReport:test_ReceiverError_Success() (gas: 187941) +OffRamp_executeSingleReport:test_RetryFailedMessageWithoutManualExecution_Revert() (gas: 198309) +OffRamp_executeSingleReport:test_RootNotCommitted_Revert() (gas: 40921) +OffRamp_executeSingleReport:test_RouterYULCall_Revert() (gas: 405240) +OffRamp_executeSingleReport:test_SingleMessageNoTokensOtherChain_Success() (gas: 249184) +OffRamp_executeSingleReport:test_SingleMessageNoTokensUnordered_Success() (gas: 193050) +OffRamp_executeSingleReport:test_SingleMessageNoTokens_Success() (gas: 213073) +OffRamp_executeSingleReport:test_SingleMessageToNonCCIPReceiver_Success() (gas: 243948) +OffRamp_executeSingleReport:test_SingleMessagesNoTokensSuccess_gas() (gas: 141790) +OffRamp_executeSingleReport:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 409554) +OffRamp_executeSingleReport:test_SkippedIncorrectNonce_Success() (gas: 58484) +OffRamp_executeSingleReport:test_TokenDataMismatch_Revert() (gas: 74048) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensAndGE_Success() (gas: 583802) +OffRamp_executeSingleReport:test_TwoMessagesWithTokensSuccess_gas() (gas: 532387) +OffRamp_executeSingleReport:test_UnexpectedTokenData_Revert() (gas: 33853) +OffRamp_executeSingleReport:test_UnhealthySingleChainCurse_Revert() (gas: 550226) +OffRamp_executeSingleReport:test_Unhealthy_Success() (gas: 550173) +OffRamp_executeSingleReport:test_WithCurseOnAnotherSourceChain_Success() (gas: 460842) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 135741) +OffRamp_executeSingleReport:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 165390) +OffRamp_getExecutionState:test_FillExecutionState_Success() (gas: 3911118) +OffRamp_getExecutionState:test_GetDifferentChainExecutionState_Success() (gas: 121222) +OffRamp_getExecutionState:test_GetExecutionState_Success() (gas: 89706) +OffRamp_manuallyExecute:test_ManualExecGasLimitMismatchSingleReport_Revert() (gas: 81178) +OffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 74108) +OffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 172877) +OffRamp_manuallyExecute:test_manuallyExecute_FailedTx_Revert() (gas: 213413) +OffRamp_manuallyExecute:test_manuallyExecute_ForkedChain_Revert() (gas: 27166) +OffRamp_manuallyExecute:test_manuallyExecute_GasLimitMismatchMultipleReports_Revert() (gas: 164939) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidReceiverExecutionGasLimit_Revert() (gas: 27703) +OffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 55274) +OffRamp_manuallyExecute:test_manuallyExecute_LowGasLimit_Success() (gas: 490056) +OffRamp_manuallyExecute:test_manuallyExecute_MultipleReportsWithSingleCursedLane_Revert() (gas: 315336) +OffRamp_manuallyExecute:test_manuallyExecute_ReentrancyFails_Success() (gas: 2228409) +OffRamp_manuallyExecute:test_manuallyExecute_SourceChainSelectorMismatch_Revert() (gas: 165282) +OffRamp_manuallyExecute:test_manuallyExecute_Success() (gas: 226452) +OffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 227014) +OffRamp_manuallyExecute:test_manuallyExecute_WithMultiReportGasOverride_Success() (gas: 777756) +OffRamp_manuallyExecute:test_manuallyExecute_WithPartialMessages_Success() (gas: 346008) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_NotACompatiblePool_Revert() (gas: 37632) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_Success() (gas: 104648) +OffRamp_releaseOrMintSingleToken:test__releaseOrMintSingleToken_TokenHandlingError_transfer_Revert() (gas: 83092) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_InvalidDataLength_Revert() (gas: 36812) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 94648) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 37301) +OffRamp_releaseOrMintSingleToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 86760) +OffRamp_releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 162911) OffRamp_releaseOrMintTokens:test__releaseOrMintTokens_PoolIsNotAPool_Reverts() (gas: 23881) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 62729) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 79768) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 174513) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride_Success() (gas: 176380) -OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 187657) -OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11314) -OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 13884) -OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 46378) -OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 24398) -OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219355) -OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 227977) -OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 294834) -OffRamp_trialExecute:test_trialExecute_Success() (gas: 277312) -OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 250848) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17209) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67048) -OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 325706) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 64956) -OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 12823) -OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 2682420) -OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 95269) -OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 93211) -OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98232) -OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93245) -OnRamp_constructor:test_Constructor_Success() (gas: 2762169) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115307) -OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146130) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145705) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 143932) -OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 145902) -OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145300) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 62844) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_PoolDoesNotSupportDest_Reverts() (gas: 80014) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 175034) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_WithGasOverride_Success() (gas: 176901) +OffRamp_releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 188145) +OffRamp_setDynamicConfig:test_FeeQuoterZeroAddress_Revert() (gas: 11509) +OffRamp_setDynamicConfig:test_NonOwner_Revert() (gas: 14109) +OffRamp_setDynamicConfig:test_SetDynamicConfigWithInterceptor_Success() (gas: 47591) +OffRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 25564) +OffRamp_trialExecute:test_RateLimitError_Success() (gas: 219989) +OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 228644) +OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 295794) +OffRamp_trialExecute:test_trialExecute_Success() (gas: 278096) +OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 251617) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17265) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Revert() (gas: 67177) +OnRamp_applyAllowlistUpdates:test_applyAllowlistUpdates_Success() (gas: 326074) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_Success() (gas: 65220) +OnRamp_applyDestChainConfigUpdates:test_ApplyDestChainConfigUpdates_WithInvalidChainSelector_Revert() (gas: 12902) +OnRamp_constructor:test_Constructor_EnableAllowList_ForwardFromRouter_Reverts() (gas: 2654417) +OnRamp_constructor:test_Constructor_InvalidConfigChainSelectorEqZero_Revert() (gas: 95283) +OnRamp_constructor:test_Constructor_InvalidConfigNonceManagerEqAddressZero_Revert() (gas: 93225) +OnRamp_constructor:test_Constructor_InvalidConfigRMNProxyEqAddressZero_Revert() (gas: 98201) +OnRamp_constructor:test_Constructor_InvalidConfigTokenAdminRegistryEqAddressZero_Revert() (gas: 93259) +OnRamp_constructor:test_Constructor_Success() (gas: 2734279) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2AllowOutOfOrderTrue_Success() (gas: 115376) +OnRamp_forwardFromRouter:test_ForwardFromRouterExtraArgsV2_Success() (gas: 146244) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessCustomExtraArgs() (gas: 145819) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessEmptyExtraArgs() (gas: 144046) +OnRamp_forwardFromRouter:test_ForwardFromRouterSuccessLegacyExtraArgs() (gas: 146016) +OnRamp_forwardFromRouter:test_ForwardFromRouter_Success() (gas: 145414) OnRamp_forwardFromRouter:test_ForwardFromRouter_Success_ConfigurableSourceRouter() (gas: 140697) -OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38538) -OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143078) -OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36603) -OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36511) -OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 18269) -OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38460) -OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23669) -OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186264) -OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 212648) -OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 146934) -OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161127) -OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3615067) -OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24016) -OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75850) -OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38583) -OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280047) -OnRamp_getFee:test_EmptyMessage_Success() (gas: 98689) -OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 65468) -OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 87080) -OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35115) -OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113862) -OnRamp_getFee:test_Unhealthy_Revert() (gas: 17039) -OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10474) -OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35282) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 11581) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero_Revert() (gas: 13195) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert() (gas: 11522) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 16850) -OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 13243) -OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56390) -OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97303) -PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172601) -PingPong_plumbing:test_OutOfOrderExecution_Success() (gas: 20240) -PingPong_plumbing:test_Pausing_Success() (gas: 17718) -PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 153737) -PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 179374) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 18822) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18660) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20371) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_MinObserversTooHigh_reverts() (gas: 20810) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 137268) -RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 20472) -RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1077745) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23857) +OnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 38504) +OnRamp_forwardFromRouter:test_MessageInterceptionError_Revert() (gas: 143100) +OnRamp_forwardFromRouter:test_MesssageFeeTooHigh_Revert() (gas: 36611) +OnRamp_forwardFromRouter:test_MultiCannotSendZeroTokens_Revert() (gas: 36471) +OnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 18268) +OnRamp_forwardFromRouter:test_Paused_Revert() (gas: 38412) +OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 23629) +OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 186649) +OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 213078) +OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 147003) +OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 161214) +OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3594624) +OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 24015) +OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 75832) +OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 38588) +OnRamp_forwardFromRouter:test_forwardFromRouter_WithInterception_Success() (gas: 280344) +OnRamp_getFee:test_EmptyMessage_Success() (gas: 98782) +OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 65498) +OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 87208) +OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 35167) +OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113990) +OnRamp_getFee:test_Unhealthy_Revert() (gas: 17108) +OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10565) +OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35471) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeAggregatorEqAddressZero_Revert() (gas: 11558) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigFeeQuoterEqAddressZero_Revert() (gas: 13194) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigInvalidConfig_Revert() (gas: 11499) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigOnlyOwner_Revert() (gas: 16828) +OnRamp_setDynamicConfig:test_setDynamicConfig_InvalidConfigReentrancyGuardEnteredEqTrue_Revert() (gas: 13220) +OnRamp_setDynamicConfig:test_setDynamicConfig_Success() (gas: 56440) +OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97346) +PingPong_ccipReceive:test_CcipReceive_Success() (gas: 172841) +PingPong_plumbing:test_OutOfOrderExecution_Success() (gas: 20328) +PingPong_plumbing:test_Pausing_Success() (gas: 17760) +PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 153954) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 179569) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateOffchainPublicKey_reverts() (gas: 18850) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicatePeerId_reverts() (gas: 18710) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_DuplicateSourceChain_reverts() (gas: 20387) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() (gas: 21405) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsNodesLength_reverts() (gas: 137318) +RMNHome__validateStaticAndDynamicConfig:test_validateStaticAndDynamicConfig_OutOfBoundsObserverNodeIndex_reverts() (gas: 20522) +RMNHome_getConfigDigests:test_getConfigDigests_success() (gas: 1079685) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_ConfigDigestMismatch_reverts() (gas: 23879) RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_NoOpStateTransitionNotAllowed_reverts() (gas: 10597) RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_OnlyOwner_reverts() (gas: 10936) -RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1083116) +RMNHome_promoteCandidateAndRevokeActive:test_promoteCandidateAndRevokeActive_success() (gas: 1085033) RMNHome_revokeCandidate:test_revokeCandidate_ConfigDigestMismatch_reverts() (gas: 19041) -RMNHome_revokeCandidate:test_revokeCandidate_OnlyOwner_reverts() (gas: 10963) -RMNHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 10606) -RMNHome_revokeCandidate:test_revokeCandidate_success() (gas: 28125) -RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 594657) -RMNHome_setCandidate:test_setCandidate_OnlyOwner_reverts() (gas: 15155) -RMNHome_setCandidate:test_setCandidate_success() (gas: 588357) -RMNHome_setDynamicConfig:test_setDynamicConfig_DigestNotFound_reverts() (gas: 30137) -RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (gas: 18871) -RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 14093) -RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 103889) +RMNHome_revokeCandidate:test_revokeCandidate_OnlyOwner_reverts() (gas: 10985) +RMNHome_revokeCandidate:test_revokeCandidate_RevokingZeroDigestNotAllowed_reverts() (gas: 10628) +RMNHome_revokeCandidate:test_revokeCandidate_success() (gas: 28147) +RMNHome_setCandidate:test_setCandidate_ConfigDigestMismatch_reverts() (gas: 597564) +RMNHome_setCandidate:test_setCandidate_OnlyOwner_reverts() (gas: 15161) +RMNHome_setCandidate:test_setCandidate_success() (gas: 589330) +RMNHome_setDynamicConfig:test_setDynamicConfig_DigestNotFound_reverts() (gas: 30186) +RMNHome_setDynamicConfig:test_setDynamicConfig_MinObserversTooHigh_reverts() (gas: 18854) +RMNHome_setDynamicConfig:test_setDynamicConfig_OnlyOwner_reverts() (gas: 14099) +RMNHome_setDynamicConfig:test_setDynamicConfig_success() (gas: 104862) RMNRemote_constructor:test_constructor_success() (gas: 8334) -RMNRemote_constructor:test_constructor_zeroChainSelector_reverts() (gas: 59209) -RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 154457) -RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 18780) -RMNRemote_curse:test_curse_success() (gas: 149409) -RMNRemote_global_and_legacy_curses:test_global_and_legacy_curses_success() (gas: 133482) -RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 976479) -RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 323317) -RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 80181) -RMNRemote_setConfig:test_setConfig_minSignersIs0_success() (gas: 700584) -RMNRemote_setConfig:test_setConfig_minSignersTooHigh_reverts() (gas: 54024) -RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 51947) -RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 18726) -RMNRemote_uncurse:test_uncurse_success() (gas: 40151) -RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 13673) -RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 78519) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 76314) -RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 83377) -RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 153002) -RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 387649) -RMNRemote_verify_withConfigSet:test_verify_minSignersIsZero_success() (gas: 184568) -RMNRemote_verify_withConfigSet:test_verify_success() (gas: 68207) -RateLimiter_constructor:test_Constructor_Success() (gas: 19734) +RMNRemote_constructor:test_constructor_zeroChainSelector_reverts() (gas: 59245) +RMNRemote_curse:test_curse_AlreadyCursed_duplicateSubject_reverts() (gas: 154479) +RMNRemote_curse:test_curse_calledByNonOwner_reverts() (gas: 18802) +RMNRemote_curse:test_curse_success() (gas: 149431) +RMNRemote_global_and_legacy_curses:test_global_and_legacy_curses_success() (gas: 133512) +RMNRemote_setConfig:test_setConfig_addSigner_removeSigner_success() (gas: 993400) +RMNRemote_setConfig:test_setConfig_duplicateOnChainPublicKey_reverts() (gas: 323497) +RMNRemote_setConfig:test_setConfig_invalidSignerOrder_reverts() (gas: 80115) +RMNRemote_setConfig:test_setConfig_notEnoughSigners_reverts() (gas: 54212) +RMNRemote_uncurse:test_uncurse_NotCursed_duplicatedUncurseSubject_reverts() (gas: 51993) +RMNRemote_uncurse:test_uncurse_calledByNonOwner_reverts() (gas: 18772) +RMNRemote_uncurse:test_uncurse_success() (gas: 40171) +RMNRemote_verify_withConfigNotSet:test_verify_reverts() (gas: 13650) +RMNRemote_verify_withConfigSet:test_verify_InvalidSignature_reverts() (gas: 78585) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_duplicateSignature_reverts() (gas: 76403) +RMNRemote_verify_withConfigSet:test_verify_OutOfOrderSignatures_not_sorted_reverts() (gas: 83466) +RMNRemote_verify_withConfigSet:test_verify_ThresholdNotMet_reverts() (gas: 321808) +RMNRemote_verify_withConfigSet:test_verify_UnexpectedSigner_reverts() (gas: 387816) +RMNRemote_verify_withConfigSet:test_verify_success() (gas: 68296) +RateLimiter_constructor:test_Constructor_Success() (gas: 19806) RateLimiter_consume:test_AggregateValueMaxCapacityExceeded_Revert() (gas: 16042) RateLimiter_consume:test_AggregateValueRateLimitReached_Revert() (gas: 22435) -RateLimiter_consume:test_ConsumeAggregateValue_Success() (gas: 31518) -RateLimiter_consume:test_ConsumeTokens_Success() (gas: 20381) -RateLimiter_consume:test_ConsumeUnlimited_Success() (gas: 40687) +RateLimiter_consume:test_ConsumeAggregateValue_Success() (gas: 31495) +RateLimiter_consume:test_ConsumeTokens_Success() (gas: 20403) +RateLimiter_consume:test_ConsumeUnlimited_Success() (gas: 40693) RateLimiter_consume:test_ConsumingMoreThanUint128_Revert() (gas: 15800) -RateLimiter_consume:test_RateLimitReachedOverConsecutiveBlocks_Revert() (gas: 25798) -RateLimiter_consume:test_Refill_Success() (gas: 37444) +RateLimiter_consume:test_RateLimitReachedOverConsecutiveBlocks_Revert() (gas: 25781) +RateLimiter_consume:test_Refill_Success() (gas: 37447) RateLimiter_consume:test_TokenMaxCapacityExceeded_Revert() (gas: 18388) RateLimiter_consume:test_TokenRateLimitReached_Revert() (gas: 24930) -RateLimiter_currentTokenBucketState:test_CurrentTokenBucketState_Success() (gas: 38944) -RateLimiter_currentTokenBucketState:test_Refill_Success() (gas: 46849) -RateLimiter_setTokenBucketConfig:test_SetRateLimiterConfig_Success() (gas: 38506) +RateLimiter_currentTokenBucketState:test_CurrentTokenBucketState_Success() (gas: 38947) +RateLimiter_currentTokenBucketState:test_Refill_Success() (gas: 46852) +RateLimiter_setTokenBucketConfig:test_SetRateLimiterConfig_Success() (gas: 38509) RegistryModuleOwnerCustom_constructor:test_constructor_Revert() (gas: 36033) -RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Revert() (gas: 19733) -RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Success() (gas: 130089) -RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Revert() (gas: 19553) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Revert() (gas: 19763) +RegistryModuleOwnerCustom_registerAdminViaGetCCIPAdmin:test_registerAdminViaGetCCIPAdmin_Success() (gas: 130104) +RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Revert() (gas: 19568) RegistryModuleOwnerCustom_registerAdminViaOwner:test_registerAdminViaOwner_Success() (gas: 129908) -Router_applyRampUpdates:test_OffRampMismatch_Revert() (gas: 89366) -Router_applyRampUpdates:test_OffRampUpdatesWithRouting() (gas: 10663332) -Router_applyRampUpdates:test_OnRampDisable() (gas: 56007) -Router_applyRampUpdates:test_OnlyOwner_Revert() (gas: 12334) -Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131252) -Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 220974) -Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 71675) -Router_ccipSend:test_InvalidMsgValue() (gas: 32267) -Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 69363) -Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 192974) -Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 61411) -Router_ccipSend:test_NativeFeeToken_Success() (gas: 191600) -Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226349) -Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 24900) -Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 44902) -Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 193844) -Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140513) -Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230148) -Router_constructor:test_Constructor_Success() (gas: 13076) +Router_applyRampUpdates:test_OffRampMismatch_Revert() (gas: 89591) +Router_applyRampUpdates:test_OffRampUpdatesWithRouting() (gas: 10749462) +Router_applyRampUpdates:test_OnRampDisable() (gas: 56428) +Router_applyRampUpdates:test_OnlyOwner_Revert() (gas: 12414) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 131413) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 221329) +Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 71841) +Router_ccipSend:test_InvalidMsgValue() (gas: 32411) +Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 69502) +Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 193274) +Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 61550) +Router_ccipSend:test_NativeFeeToken_Success() (gas: 191900) +Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 226510) +Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 25056) +Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 45034) +Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 194209) +Router_ccipSend:test_ccipSend_nativeFeeNoTokenSuccess_gas() (gas: 140674) +Router_ccipSend:test_ccipSend_nativeFeeOneTokenSuccess_gas() (gas: 230503) +Router_constructor:test_Constructor_Success() (gas: 13155) Router_getArmProxy:test_getArmProxy() (gas: 10573) -Router_getFee:test_GetFeeSupportedChain_Success() (gas: 51716) -Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 17150) -Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10474) -Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 11334) -Router_recoverTokens:test_RecoverTokensNoFunds_Revert() (gas: 20245) -Router_recoverTokens:test_RecoverTokensNonOwner_Revert() (gas: 11171) -Router_recoverTokens:test_RecoverTokensValueReceiver_Revert() (gas: 358049) -Router_recoverTokens:test_RecoverTokens_Success() (gas: 52452) -Router_routeMessage:test_routeMessage_AutoExec_Success() (gas: 43092) -Router_routeMessage:test_routeMessage_ExecutionEvent_Success() (gas: 159148) -Router_routeMessage:test_routeMessage_ManualExec_Success() (gas: 35685) -Router_routeMessage:test_routeMessage_OnlyOffRamp_Revert() (gas: 25404) -Router_routeMessage:test_routeMessage_WhenNotHealthy_Revert() (gas: 44903) -Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 10976) -TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 51163) -TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 44004) -TokenAdminRegistry_addRegistryModule:test_addRegistryModule_OnlyOwner_Revert() (gas: 12653) -TokenAdminRegistry_addRegistryModule:test_addRegistryModule_Success() (gas: 67056) -TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds_Success() (gas: 11362) -TokenAdminRegistry_getPool:test_getPool_Success() (gas: 17668) -TokenAdminRegistry_getPools:test_getPools_Success() (gas: 40028) -TokenAdminRegistry_isAdministrator:test_isAdministrator_Success() (gas: 106006) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_AlreadyRegistered_Revert() (gas: 104369) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_OnlyRegistryModule_Revert() (gas: 15588) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_ZeroAddress_Revert() (gas: 15133) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module_Success() (gas: 113006) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner_Success() (gas: 107943) -TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed_Success() (gas: 116067) -TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_OnlyOwner_Revert() (gas: 12609) -TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_Success() (gas: 54524) +Router_getFee:test_GetFeeSupportedChain_Success() (gas: 51979) +Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 17430) +Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10565) +Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 11344) +Router_recoverTokens:test_RecoverTokensNoFunds_Revert() (gas: 20199) +Router_recoverTokens:test_RecoverTokensNonOwner_Revert() (gas: 11214) +Router_recoverTokens:test_RecoverTokensValueReceiver_Revert() (gas: 349502) +Router_recoverTokens:test_RecoverTokens_Success() (gas: 52622) +Router_routeMessage:test_routeMessage_AutoExec_Success() (gas: 43367) +Router_routeMessage:test_routeMessage_ExecutionEvent_Success() (gas: 159649) +Router_routeMessage:test_routeMessage_ManualExec_Success() (gas: 35845) +Router_routeMessage:test_routeMessage_OnlyOffRamp_Revert() (gas: 25431) +Router_routeMessage:test_routeMessage_WhenNotHealthy_Revert() (gas: 44889) +Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 10986) +TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 51433) +TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 44189) +TokenAdminRegistry_addRegistryModule:test_addRegistryModule_OnlyOwner_Revert() (gas: 12752) +TokenAdminRegistry_addRegistryModule:test_addRegistryModule_Success() (gas: 67155) +TokenAdminRegistry_getAllConfiguredTokens:test_getAllConfiguredTokens_outOfBounds_Success() (gas: 11395) +TokenAdminRegistry_getPool:test_getPool_Success() (gas: 17701) +TokenAdminRegistry_getPools:test_getPools_Success() (gas: 40331) +TokenAdminRegistry_isAdministrator:test_isAdministrator_Success() (gas: 106315) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_AlreadyRegistered_Revert() (gas: 104412) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_OnlyRegistryModule_Revert() (gas: 15643) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_ZeroAddress_Revert() (gas: 15155) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_module_Success() (gas: 113094) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_owner_Success() (gas: 108031) +TokenAdminRegistry_proposeAdministrator:test_proposeAdministrator_reRegisterWhileUnclaimed_Success() (gas: 116194) +TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_OnlyOwner_Revert() (gas: 12741) +TokenAdminRegistry_removeRegistryModule:test_removeRegistryModule_Success() (gas: 54735) TokenAdminRegistry_setPool:test_setPool_InvalidTokenPoolToken_Revert() (gas: 19316) -TokenAdminRegistry_setPool:test_setPool_OnlyAdministrator_Revert() (gas: 18137) -TokenAdminRegistry_setPool:test_setPool_Success() (gas: 36135) -TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 30842) -TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 18103) -TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 49460) -TokenPoolFactoryTests:test_TokenPoolFactory_Constructor_Revert() (gas: 1048490) -TokenPoolFactoryTests:test_createTokenPoolLockRelease_ExistingToken_predict_Success() (gas: 11789992) -TokenPoolFactoryTests:test_createTokenPool_BurnFromMintTokenPool_Success() (gas: 5990027) -TokenPoolFactoryTests:test_createTokenPool_ExistingRemoteToken_AndPredictPool_Success() (gas: 12432090) -TokenPoolFactoryTests:test_createTokenPool_WithNoExistingRemoteContracts_predict_Success() (gas: 12773572) -TokenPoolFactoryTests:test_createTokenPool_WithNoExistingTokenOnRemoteChain_Success() (gas: 5846507) -TokenPoolFactoryTests:test_createTokenPool_WithRemoteTokenAndRemotePool_Success() (gas: 5986543) -TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 1979946) -TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12107) -TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23476) -TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 177881) -TokenPoolWithAllowList_getAllowList:test_GetAllowList_Success() (gas: 23830) -TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled_Success() (gas: 8375) -TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 24867) -TokenPool_applyChainUpdates:test_applyChainUpdates_DisabledNonZeroRateLimit_Revert() (gas: 271592) -TokenPool_applyChainUpdates:test_applyChainUpdates_InvalidRateLimitRate_Revert() (gas: 542403) -TokenPool_applyChainUpdates:test_applyChainUpdates_NonExistentChain_Revert() (gas: 18492) -TokenPool_applyChainUpdates:test_applyChainUpdates_OnlyCallableByOwner_Revert() (gas: 11469) -TokenPool_applyChainUpdates:test_applyChainUpdates_Success() (gas: 479143) -TokenPool_applyChainUpdates:test_applyChainUpdates_ZeroAddressNotAllowed_Revert() (gas: 157400) -TokenPool_constructor:test_ZeroAddressNotAllowed_Revert() (gas: 70484) -TokenPool_constructor:test_immutableFields_Success() (gas: 20586) -TokenPool_getRemotePool:test_getRemotePool_Success() (gas: 274175) -TokenPool_onlyOffRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 277296) -TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 290010) -TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 350050) -TokenPool_onlyOnRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 277036) -TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 254048) -TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 305084) -TokenPool_setChainRateLimiterConfig:test_NonExistentChain_Revert() (gas: 17165) -TokenPool_setChainRateLimiterConfig:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 15294) -TokenPool_setRemotePool:test_setRemotePool_NonExistentChain_Reverts() (gas: 15649) -TokenPool_setRemotePool:test_setRemotePool_OnlyOwner_Reverts() (gas: 13219) -TokenPool_setRemotePool:test_setRemotePool_Success() (gas: 282125) -USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 25704) -USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35481) -USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30213) -USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 133508) -USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 478231) -USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 268712) -USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 50952) -USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 98987) -USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 66371) -USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11341) -USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10041) \ No newline at end of file +TokenAdminRegistry_setPool:test_setPool_OnlyAdministrator_Revert() (gas: 18170) +TokenAdminRegistry_setPool:test_setPool_Success() (gas: 36267) +TokenAdminRegistry_setPool:test_setPool_ZeroAddressRemovesPool_Success() (gas: 30875) +TokenAdminRegistry_transferAdminRole:test_transferAdminRole_OnlyAdministrator_Revert() (gas: 18202) +TokenAdminRegistry_transferAdminRole:test_transferAdminRole_Success() (gas: 49592) +TokenPoolFactoryTests:test_TokenPoolFactory_Constructor_Revert() (gas: 1039441) +TokenPoolFactoryTests:test_createTokenPoolLockRelease_ExistingToken_predict_Success() (gas: 11661455) +TokenPoolFactoryTests:test_createTokenPool_BurnFromMintTokenPool_Success() (gas: 5928482) +TokenPoolFactoryTests:test_createTokenPool_ExistingRemoteToken_AndPredictPool_Success() (gas: 12313277) +TokenPoolFactoryTests:test_createTokenPool_WithNoExistingRemoteContracts_predict_Success() (gas: 12653300) +TokenPoolFactoryTests:test_createTokenPool_WithNoExistingTokenOnRemoteChain_Success() (gas: 5783897) +TokenPoolFactoryTests:test_createTokenPool_WithRemoteTokenAndRemotePool_Success() (gas: 5925085) +TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 1962378) +TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12209) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23567) +TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowList_Success() (gas: 178398) +TokenPoolWithAllowList_getAllowList:test_GetAllowList_Success() (gas: 23929) +TokenPoolWithAllowList_getAllowListEnabled:test_GetAllowListEnabled_Success() (gas: 8408) +TokenPoolWithAllowList_setRouter:test_SetRouter_Success() (gas: 25005) +TokenPool_applyChainUpdates:test_applyChainUpdates_DisabledNonZeroRateLimit_Revert() (gas: 271914) +TokenPool_applyChainUpdates:test_applyChainUpdates_InvalidRateLimitRate_Revert() (gas: 543487) +TokenPool_applyChainUpdates:test_applyChainUpdates_NonExistentChain_Revert() (gas: 18706) +TokenPool_applyChainUpdates:test_applyChainUpdates_OnlyCallableByOwner_Revert() (gas: 11515) +TokenPool_applyChainUpdates:test_applyChainUpdates_Success() (gas: 480305) +TokenPool_applyChainUpdates:test_applyChainUpdates_ZeroAddressNotAllowed_Revert() (gas: 157716) +TokenPool_constructor:test_ZeroAddressNotAllowed_Revert() (gas: 70494) +TokenPool_constructor:test_immutableFields_Success() (gas: 20718) +TokenPool_getRemotePool:test_getRemotePool_Success() (gas: 274610) +TokenPool_onlyOffRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 277555) +TokenPool_onlyOffRamp:test_ChainNotAllowed_Revert() (gas: 290432) +TokenPool_onlyOffRamp:test_onlyOffRamp_Success() (gas: 350358) +TokenPool_onlyOnRamp:test_CallerIsNotARampOnRouter_Revert() (gas: 277250) +TokenPool_onlyOnRamp:test_ChainNotAllowed_Revert() (gas: 254443) +TokenPool_onlyOnRamp:test_onlyOnRamp_Success() (gas: 305359) +TokenPool_setChainRateLimiterConfig:test_NonExistentChain_Revert() (gas: 17225) +TokenPool_setChainRateLimiterConfig:test_OnlyOwnerOrRateLimitAdmin_Revert() (gas: 15330) +TokenPool_setRemotePool:test_setRemotePool_NonExistentChain_Reverts() (gas: 15796) +TokenPool_setRemotePool:test_setRemotePool_OnlyOwner_Reverts() (gas: 13375) +TokenPool_setRemotePool:test_setRemotePool_Success() (gas: 282581) +USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 25854) +USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35504) +USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30235) +USDCTokenPool_lockOrBurn:test_LockOrBurn_Success() (gas: 133470) +USDCTokenPool_lockOrBurn:test_UnknownDomain_Revert() (gas: 478302) +USDCTokenPool_releaseOrMint:test_ReleaseOrMintRealTx_Success() (gas: 268748) +USDCTokenPool_releaseOrMint:test_TokenMaxCapacityExceeded_Revert() (gas: 51004) +USDCTokenPool_releaseOrMint:test_UnlockingUSDCFailed_Revert() (gas: 99033) +USDCTokenPool_setDomains:test_InvalidDomain_Revert() (gas: 66437) +USDCTokenPool_setDomains:test_OnlyOwner_Revert() (gas: 11407) +USDCTokenPool_supportsInterface:test_SupportsInterface_Success() (gas: 10107) \ No newline at end of file diff --git a/contracts/scripts/native_solc_compile_all_ccip b/contracts/scripts/native_solc_compile_all_ccip index 0f8fae61f76..5d5b8f73115 100755 --- a/contracts/scripts/native_solc_compile_all_ccip +++ b/contracts/scripts/native_solc_compile_all_ccip @@ -8,7 +8,7 @@ echo " └─────────────────────── SOLC_VERSION="0.8.24" OPTIMIZE_RUNS=26000 -OPTIMIZE_RUNS_OFFRAMP=800 +OPTIMIZE_RUNS_OFFRAMP=500 SCRIPTPATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" diff --git a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol index 5e499a79407..c34e4995cad 100644 --- a/contracts/src/v0.8/ccip/offRamp/OffRamp.sol +++ b/contracts/src/v0.8/ccip/offRamp/OffRamp.sol @@ -123,7 +123,8 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { /// @dev Since DynamicConfig is part of DynamicConfigSet event, if changing it, we should update the ABI on Atlas struct DynamicConfig { address feeQuoter; // ──────────────────────────────╮ FeeQuoter address on the local chain - uint32 permissionLessExecutionThresholdSeconds; // ─╯ Waiting time before manual execution is enabled + uint32 permissionLessExecutionThresholdSeconds; // | Waiting time before manual execution is enabled + bool isRMNVerificationDisabled; // ─────────────────╯ Flag whether the RMN verification is disabled or not address messageInterceptor; // Optional message interceptor to validate incoming messages (zero address = no interceptor) } @@ -787,10 +788,13 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { bytes32 rawVs ) external { CommitReport memory commitReport = abi.decode(report, (CommitReport)); + DynamicConfig storage dynamicConfig = s_dynamicConfig; // Verify RMN signatures - if (commitReport.merkleRoots.length > 0) { - i_rmnRemote.verify(address(this), commitReport.merkleRoots, commitReport.rmnSignatures, commitReport.rmnRawVs); + if (!dynamicConfig.isRMNVerificationDisabled) { + if (commitReport.merkleRoots.length > 0) { + i_rmnRemote.verify(address(this), commitReport.merkleRoots, commitReport.rmnSignatures, commitReport.rmnRawVs); + } } // Check if the report contains price updates @@ -803,7 +807,7 @@ contract OffRamp is ITypeAndVersion, MultiOCR3Base { // If prices are not stale, update the latest epoch and round s_latestPriceSequenceNumber = ocrSequenceNumber; // And update the prices in the fee quoter - IFeeQuoter(s_dynamicConfig.feeQuoter).updatePrices(commitReport.priceUpdates); + IFeeQuoter(dynamicConfig.feeQuoter).updatePrices(commitReport.priceUpdates); } else { // If prices are stale and the report doesn't contain a root, this report // does not have any valid information and we revert. diff --git a/contracts/src/v0.8/ccip/rmn/RMNHome.sol b/contracts/src/v0.8/ccip/rmn/RMNHome.sol index 978b200213d..61dc6119f28 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNHome.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNHome.sol @@ -68,7 +68,7 @@ contract RMNHome is OwnerIsCreator, ITypeAndVersion { error DuplicateOffchainPublicKey(); error DuplicateSourceChain(); error OutOfBoundsObserverNodeIndex(); - error MinObserversTooHigh(); + error NotEnoughObservers(); error ConfigDigestMismatch(bytes32 expectedConfigDigest, bytes32 gotConfigDigest); error DigestNotFound(bytes32 configDigest); error RevokingZeroDigestNotAllowed(); @@ -81,7 +81,7 @@ contract RMNHome is OwnerIsCreator, ITypeAndVersion { struct SourceChain { uint64 chainSelector; // ─────╮ The Source chain selector. - uint64 minObservers; // ──────╯ Required number of observers to agree on an observation for this source chain. + uint64 f; // ─────────────────╯ Maximum number of faulty observers; f+1 observers required to agree on an observation for this source chain. // ObserverNodesBitmap & (1< observersCount) { - revert MinObserversTooHigh(); + // min observers are tenable + if (observersCount < 2 * currentSourceChain.f + 1) { + revert NotEnoughObservers(); } } } diff --git a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol index 6a4366e29fe..60e9bd12f3e 100644 --- a/contracts/src/v0.8/ccip/rmn/RMNRemote.sol +++ b/contracts/src/v0.8/ccip/rmn/RMNRemote.sol @@ -27,7 +27,7 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { error DuplicateOnchainPublicKey(); error InvalidSignature(); error InvalidSignerOrder(); - error MinSignersTooHigh(); + error NotEnoughSigners(); error NotCursed(bytes16 subject); error OutOfOrderSignatures(); error ThresholdNotMet(); @@ -45,11 +45,10 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { } /// @dev the contract config - /// @dev note: minSigners can be set to 0 to disable verification for chains without RMN support struct Config { bytes32 rmnHomeContractConfigDigest; // Digest of the RMNHome contract config - Signer[] signers; // List of signers - uint64 minSigners; // Threshold for the number of signers required to verify a report + Signer[] signers; // List of signers + uint64 f; // Max number of faulty RMN nodes; f+1 signers are required to verify a report, must configure 2f+1 signers in total } /// @dev part of the payload that RMN nodes sign: keccak256(abi.encode(RMN_V1_6_ANY2EVM_REPORT, report)) @@ -60,7 +59,7 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { address rmnRemoteContractAddress; // ─────╯ The address of this contract address offrampAddress; // The address of the offramp on the same chain as this contract bytes32 rmnHomeContractConfigDigest; // The digest of the RMNHome contract config - Internal.MerkleRoot[] merkleRoots; // The dest lane updates + Internal.MerkleRoot[] merkleRoots; // The dest lane updates } /// @dev this is included in the preimage of the digest that RMN nodes sign @@ -97,7 +96,7 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { if (s_configCount == 0) { revert ConfigNotSet(); } - if (signatures.length < s_config.minSigners) revert ThresholdNotMet(); + if (signatures.length < s_config.f + 1) revert ThresholdNotMet(); bytes32 digest = keccak256( abi.encode( @@ -142,9 +141,9 @@ contract RMNRemote is OwnerIsCreator, ITypeAndVersion, IRMNRemote { } } - // minSigners is tenable - if (!(newConfig.minSigners <= newConfig.signers.length)) { - revert MinSignersTooHigh(); + // min signers requirement is tenable + if (newConfig.signers.length < 2 * newConfig.f + 1) { + revert NotEnoughSigners(); } // clear the old signers diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol index e04ef748b35..3337fe37b34 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRamp.t.sol @@ -3336,6 +3336,47 @@ contract OffRamp_commit is OffRampSetup { assertEq(block.timestamp, s_offRamp.getMerkleRoot(SOURCE_CHAIN_SELECTOR_1, root)); } + function test_RootWithRMNDisabled_success() public { + // force RMN verification to fail + vm.mockCallRevert(address(s_mockRMNRemote), abi.encodeWithSelector(IRMNRemote.verify.selector), bytes("")); + + // but ☝️ doesn't matter because RMN verification is disabled + OffRamp.DynamicConfig memory dynamicConfig = _generateDynamicOffRampConfig(address(s_feeQuoter)); + dynamicConfig.isRMNVerificationDisabled = true; + s_offRamp.setDynamicConfig(dynamicConfig); + + uint64 max1 = 931; + bytes32 root = "Only a single root"; + + Internal.MerkleRoot[] memory roots = new Internal.MerkleRoot[](1); + roots[0] = Internal.MerkleRoot({ + sourceChainSelector: SOURCE_CHAIN_SELECTOR_1, + onRampAddress: ON_RAMP_ADDRESS_1, + minSeqNr: 1, + maxSeqNr: max1, + merkleRoot: root + }); + + OffRamp.CommitReport memory commitReport = OffRamp.CommitReport({ + priceUpdates: _getEmptyPriceUpdates(), + merkleRoots: roots, + rmnSignatures: s_rmnSignatures, + rmnRawVs: 0 + }); + + vm.expectEmit(); + emit OffRamp.CommitReportAccepted(commitReport.merkleRoots, commitReport.priceUpdates); + + vm.expectEmit(); + emit MultiOCR3Base.Transmitted(uint8(Internal.OCRPluginType.Commit), s_configDigestCommit, s_latestSequenceNumber); + + _commit(commitReport, s_latestSequenceNumber); + + assertEq(max1 + 1, s_offRamp.getSourceChainConfig(SOURCE_CHAIN_SELECTOR).minSeqNr); + assertEq(0, s_offRamp.getLatestPriceSequenceNumber()); + assertEq(block.timestamp, s_offRamp.getMerkleRoot(SOURCE_CHAIN_SELECTOR_1, root)); + } + function test_StaleReportWithRoot_Success() public { uint64 maxSeq = 12; uint224 tokenStartPrice = IFeeQuoter(s_offRamp.getDynamicConfig().feeQuoter).getTokenPrice(s_sourceFeeToken).value; diff --git a/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol b/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol index a789bc23605..535782ad8b5 100644 --- a/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol +++ b/contracts/src/v0.8/ccip/test/offRamp/OffRampSetup.t.sol @@ -173,8 +173,9 @@ contract OffRampSetup is FeeQuoterSetup, MultiOCR3BaseSetup { address feeQuoter ) internal pure returns (OffRamp.DynamicConfig memory) { return OffRamp.DynamicConfig({ - permissionLessExecutionThresholdSeconds: PERMISSION_LESS_EXECUTION_THRESHOLD_SECONDS, feeQuoter: feeQuoter, + permissionLessExecutionThresholdSeconds: PERMISSION_LESS_EXECUTION_THRESHOLD_SECONDS, + isRMNVerificationDisabled: false, messageInterceptor: address(0) }); } diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol index c5226d32067..358e4128f40 100644 --- a/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol +++ b/contracts/src/v0.8/ccip/test/rmn/RMNHome.t.sol @@ -23,9 +23,9 @@ contract RMNHomeTest is Test { RMNHome.SourceChain[] memory sourceChains = new RMNHome.SourceChain[](2); // Observer 0 for source chain 9000 - sourceChains[0] = RMNHome.SourceChain({chainSelector: 9000, minObservers: 1, observerNodesBitmap: 1 << 0}); - // Observers 1 and 2 for source chain 9001 - sourceChains[1] = RMNHome.SourceChain({chainSelector: 9001, minObservers: 2, observerNodesBitmap: 1 << 1 | 1 << 2}); + sourceChains[0] = RMNHome.SourceChain({chainSelector: 9000, f: 1, observerNodesBitmap: 1 << 0 | 1 << 1 | 1 << 2}); + // Observers 0, 1 and 2 for source chain 9001 + sourceChains[1] = RMNHome.SourceChain({chainSelector: 9001, f: 1, observerNodesBitmap: 1 << 0 | 1 << 1 | 1 << 2}); return Config({ staticConfig: RMNHome.StaticConfig({nodes: nodes, offchainConfig: abi.encode("static_config")}), @@ -114,7 +114,7 @@ contract RMNHome_setCandidate is RMNHomeTest { for (uint256 i = 0; i < storedDynamicConfig.sourceChains.length; i++) { RMNHome.SourceChain memory storedSourceChain = storedDynamicConfig.sourceChains[i]; assertEq(storedSourceChain.chainSelector, versionedConfig.dynamicConfig.sourceChains[i].chainSelector); - assertEq(storedSourceChain.minObservers, versionedConfig.dynamicConfig.sourceChains[i].minObservers); + assertEq(storedSourceChain.f, versionedConfig.dynamicConfig.sourceChains[i].f); assertEq(storedSourceChain.observerNodesBitmap, versionedConfig.dynamicConfig.sourceChains[i].observerNodesBitmap); } assertEq(storedDynamicConfig.offchainConfig, versionedConfig.dynamicConfig.offchainConfig); @@ -152,7 +152,7 @@ contract RMNHome_revokeCandidate is RMNHomeTest { bytes32 digest = s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); s_rmnHome.promoteCandidateAndRevokeActive(digest, ZERO_DIGEST); - config.dynamicConfig.sourceChains[0].minObservers--; + config.dynamicConfig.sourceChains[1].f--; s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); } @@ -305,11 +305,11 @@ contract RMNHome__validateStaticAndDynamicConfig is RMNHomeTest { s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); } - function test_validateStaticAndDynamicConfig_MinObserversTooHigh_reverts() public { + function test_validateStaticAndDynamicConfig_NotEnoughObservers_reverts() public { Config memory config = _getBaseConfig(); - config.dynamicConfig.sourceChains[0].minObservers++; + config.dynamicConfig.sourceChains[0].f++; - vm.expectRevert(RMNHome.MinObserversTooHigh.selector); + vm.expectRevert(RMNHome.NotEnoughObservers.selector); s_rmnHome.setCandidate(config.staticConfig, config.dynamicConfig, ZERO_DIGEST); } } @@ -324,7 +324,7 @@ contract RMNHome_setDynamicConfig is RMNHomeTest { (bytes32 priorActiveDigest,) = s_rmnHome.getConfigDigests(); Config memory config = _getBaseConfig(); - config.dynamicConfig.sourceChains[0].minObservers--; + config.dynamicConfig.sourceChains[1].f--; (, bytes32 candidateConfigDigest) = s_rmnHome.getConfigDigests(); @@ -335,10 +335,7 @@ contract RMNHome_setDynamicConfig is RMNHomeTest { (RMNHome.VersionedConfig memory storedVersionedConfig, bool ok) = s_rmnHome.getConfig(candidateConfigDigest); assertTrue(ok); - assertEq( - storedVersionedConfig.dynamicConfig.sourceChains[0].minObservers, - config.dynamicConfig.sourceChains[0].minObservers - ); + assertEq(storedVersionedConfig.dynamicConfig.sourceChains[0].f, config.dynamicConfig.sourceChains[0].f); // Asser the digests don't change when updating the dynamic config (bytes32 activeDigest, bytes32 candidateDigest) = s_rmnHome.getConfigDigests(); @@ -349,7 +346,7 @@ contract RMNHome_setDynamicConfig is RMNHomeTest { // Asserts the validation function is being called function test_setDynamicConfig_MinObserversTooHigh_reverts() public { Config memory config = _getBaseConfig(); - config.dynamicConfig.sourceChains[0].minObservers++; + config.dynamicConfig.sourceChains[0].f++; vm.expectRevert(abi.encodeWithSelector(RMNHome.DigestNotFound.selector, ZERO_DIGEST)); s_rmnHome.setDynamicConfig(config.dynamicConfig, ZERO_DIGEST); diff --git a/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol index 5f46f856691..0a54fa259de 100644 --- a/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol +++ b/contracts/src/v0.8/ccip/test/rmn/RMNRemote.t.sol @@ -18,33 +18,11 @@ contract RMNRemote_constructor is RMNRemoteSetup { } contract RMNRemote_setConfig is RMNRemoteSetup { - function test_setConfig_minSignersIs0_success() public { - // Initially there is no config, the version is 0 - uint32 currentConfigVersion = 0; - RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); - - vm.expectEmit(); - emit RMNRemote.ConfigSet(++currentConfigVersion, config); - - s_rmnRemote.setConfig(config); - - (uint32 version, RMNRemote.Config memory gotConfig) = s_rmnRemote.getVersionedConfig(); - assertEq(gotConfig.minSigners, 0); - assertEq(version, currentConfigVersion); - - // A new config should increment the version - vm.expectEmit(); - emit RMNRemote.ConfigSet(++currentConfigVersion, config); - - s_rmnRemote.setConfig(config); - } - function test_setConfig_addSigner_removeSigner_success() public { uint32 currentConfigVersion = 0; uint256 numSigners = s_signers.length; RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 1}); vm.expectEmit(); emit RMNRemote.ConfigSet(++currentConfigVersion, config); @@ -54,7 +32,7 @@ contract RMNRemote_setConfig is RMNRemoteSetup { // add a signer address newSigner = makeAddr("new signer"); s_signers.push(RMNRemote.Signer({onchainPublicKey: newSigner, nodeIndex: uint64(numSigners)})); - config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 1}); vm.expectEmit(); emit RMNRemote.ConfigSet(++currentConfigVersion, config); @@ -70,7 +48,7 @@ contract RMNRemote_setConfig is RMNRemoteSetup { // remove two signers s_signers.pop(); s_signers.pop(); - config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + config = RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 1}); vm.expectEmit(); emit RMNRemote.ConfigSet(++currentConfigVersion, config); @@ -85,27 +63,27 @@ contract RMNRemote_setConfig is RMNRemoteSetup { function test_setConfig_invalidSignerOrder_reverts() public { s_signers.push(RMNRemote.Signer({onchainPublicKey: address(4), nodeIndex: 0})); RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 1}); vm.expectRevert(RMNRemote.InvalidSignerOrder.selector); s_rmnRemote.setConfig(config); } - function test_setConfig_minSignersTooHigh_reverts() public { + function test_setConfig_notEnoughSigners_reverts() public { RMNRemote.Config memory config = RMNRemote.Config({ rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, - minSigners: uint64(s_signers.length + 1) + f: uint64(s_signers.length / 2) // at least 2f+1 is required }); - vm.expectRevert(RMNRemote.MinSignersTooHigh.selector); + vm.expectRevert(RMNRemote.NotEnoughSigners.selector); s_rmnRemote.setConfig(config); } function test_setConfig_duplicateOnChainPublicKey_reverts() public { s_signers.push(RMNRemote.Signer({onchainPublicKey: s_signerWallets[0].addr, nodeIndex: uint64(s_signers.length)})); RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 1}); vm.expectRevert(RMNRemote.DuplicateOnchainPublicKey.selector); s_rmnRemote.setConfig(config); @@ -126,7 +104,7 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { function setUp() public override { super.setUp(); RMNRemote.Config memory config = - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 2}); + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 1}); s_rmnRemote.setConfig(config); _generatePayloadAndSigs(2, 2); } @@ -135,18 +113,6 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); } - function test_verify_minSignersIsZero_success() public { - vm.stopPrank(); - vm.prank(OWNER); - s_rmnRemote.setConfig( - RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, minSigners: 0}) - ); - - vm.stopPrank(); - vm.prank(OFF_RAMP_ADDRESS); - s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, new IRMNRemote.Signature[](0), s_v); - } - function test_verify_InvalidSignature_reverts() public { IRMNRemote.Signature memory sig = s_signatures[s_signatures.length - 1]; sig.r = _randomBytes32(); @@ -187,7 +153,11 @@ contract RMNRemote_verify_withConfigSet is RMNRemoteSetup { } function test_verify_ThresholdNotMet_reverts() public { - _generatePayloadAndSigs(2, 1); // 1 sig requested, but 2 required + RMNRemote.Config memory config = + RMNRemote.Config({rmnHomeContractConfigDigest: _randomBytes32(), signers: s_signers, f: 2}); // 3 = f+1 sigs required + s_rmnRemote.setConfig(config); + + _generatePayloadAndSigs(2, 2); // 2 sigs generated, but 3 required vm.expectRevert(RMNRemote.ThresholdNotMet.selector); s_rmnRemote.verify(OFF_RAMP_ADDRESS, s_merkleRoots, s_signatures, s_v); 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 fc31471c149..a867d4c76aa 100644 --- a/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go +++ b/core/capabilities/ccip/ccip_integration_tests/integrationhelpers/integration_helpers.go @@ -379,7 +379,7 @@ func GenerateRMNHomeConfigs( offchainPK string, offchainCfg string, chainSelector uint64, - minObservers uint64, + f uint64, observerBitmap *big.Int) (rmn_home.RMNHomeStaticConfig, rmn_home.RMNHomeDynamicConfig, error) { peerIDByte, _ := hex.DecodeString(peerID) var peerIDBytes [32]byte @@ -408,7 +408,7 @@ func GenerateRMNHomeConfigs( SourceChains: []rmn_home.RMNHomeSourceChain{ { ChainSelector: chainSelector, - MinObservers: minObservers, + F: f, ObserverNodesBitmap: observerBitmap, }, }, diff --git a/core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go b/core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go index 12a207ea5b9..bb12f3f5dc9 100644 --- a/core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go +++ b/core/capabilities/ccip/ccip_integration_tests/rmn/rmn_home_test.go @@ -31,11 +31,11 @@ func TestRMNHomeReader_GetRMNNodesInfo(t *testing.T) { const ( chainID1 = 1 - minObservers1 = 1 + f1 = 0 observerBitmap1 = 1 chainID2 = 2 - minObservers2 = 0 + f2 = 0 observerBitmap2 = 1 ) @@ -49,7 +49,7 @@ func TestRMNHomeReader_GetRMNNodesInfo(t *testing.T) { "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "This is a sample offchain configuration in the static config", chainID1, - minObservers1, + f1, big.NewInt(observerBitmap1), ) require.NoError(t, err) @@ -99,7 +99,7 @@ func TestRMNHomeReader_GetRMNNodesInfo(t *testing.T) { "1123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef", "This is a sample offchain configuration in the static config 2", chainID2, - minObservers2, + f2, big.NewInt(observerBitmap2), ) require.NoError(t, err) diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index fa9874bae27..3b20c718fa6 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -124,6 +124,7 @@ type MultiOCR3BaseOCRConfigArgs struct { type OffRampDynamicConfig struct { FeeQuoter common.Address PermissionLessExecutionThresholdSeconds uint32 + IsRMNVerificationDisabled bool MessageInterceptor common.Address } @@ -154,8 +155,8 @@ type OffRampStaticConfig struct { } var OffRampMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"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\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101206040523480156200001257600080fd5b5060405162006c5f38038062006c5f833981016040819052620000359162000885565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f1816200036d565b50505062000c0c565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586166001600160c01b03199094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b60005b8151811015620005d0576000828281518110620003915762000391620009c2565b60200260200101519050600081602001519050806001600160401b0316600003620003cf5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316620003f8576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200042690620009d8565b905060000362000489578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004c8565b8154600160a81b90046001600160401b0316600114620004c857604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620004fe5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b156200051d576040516342bcdf7f60e11b815260040160405180910390fd5b600182016200052d828262000a69565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b0319909116171782556200057c60066001600160401b038516620005d4565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005b8919062000b35565b60405180910390a25050505080600101905062000370565b5050565b6000620005e28383620005eb565b90505b92915050565b60008181526001830160205260408120546200063457508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155620005e5565b506000620005e5565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200067857620006786200063d565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006a957620006a96200063d565b604052919050565b80516001600160401b0381168114620006c957600080fd5b919050565b6001600160a01b0381168114620006e457600080fd5b50565b6000601f83601f840112620006fb57600080fd5b825160206001600160401b03808311156200071a576200071a6200063d565b8260051b6200072b8382016200067e565b93845286810183019383810190898611156200074657600080fd5b84890192505b858310156200087857825184811115620007665760008081fd5b89016080601f19828d038101821315620007805760008081fd5b6200078a62000653565b888401516200079981620006ce565b81526040620007aa858201620006b1565b8a8301526060808601518015158114620007c45760008081fd5b83830152938501519389851115620007dc5760008081fd5b84860195508f603f870112620007f457600094508485fd5b8a8601519450898511156200080d576200080d6200063d565b6200081e8b858f880116016200067e565b93508484528f82868801011115620008365760008081fd5b60005b8581101562000856578681018301518582018d01528b0162000839565b5060009484018b0194909452509182015283525091840191908401906200074c565b9998505050505050505050565b60008060008385036101008112156200089d57600080fd5b6080811215620008ac57600080fd5b620008b662000653565b620008c186620006b1565b81526020860151620008d381620006ce565b60208201526040860151620008e881620006ce565b60408201526060860151620008fd81620006ce565b606082810191909152909450607f19820112156200091a57600080fd5b50604051606081016001600160401b0380821183831017156200094157620009416200063d565b81604052608087015191506200095782620006ce565b90825260a08601519063ffffffff821682146200097357600080fd5b81602084015260c087015191506200098b82620006ce565b6040830182905260e087015192945080831115620009a857600080fd5b5050620009b886828701620006e7565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c90821680620009ed57607f821691505b60208210810362000a0e57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a64576000816000526020600020601f850160051c8101602086101562000a3f5750805b601f850160051c820191505b8181101562000a605782815560010162000a4b565b5050505b505050565b81516001600160401b0381111562000a855762000a856200063d565b62000a9d8162000a968454620009d8565b8462000a14565b602080601f83116001811462000ad5576000841562000abc5750858301515b600019600386901b1c1916600185901b17855562000a60565b600085815260208120601f198616915b8281101562000b065788860151825594840194600190910190840162000ae5565b508582101562000b255787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000b8a81620009d8565b8060a089015260c0600183166000811462000bae576001811462000bcb5762000bfd565b60ff19841660c08b015260c083151560051b8b0101945062000bfd565b85600052602060002060005b8481101562000bf45781548c820185015290880190890162000bd7565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fdd62000c82600039600081816102470152612c840152600081816102180152612f730152600081816101e9015281816105890152818161073b01526126360152600081816101ba0152612884015260008181611d5b0152611d8e0152615fdd6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636f9e320f116100cd578063c673e58411610081578063e9d68a8e11610066578063e9d68a8e146104ed578063f2fde38b1461050d578063f716f99f1461052057600080fd5b8063c673e58414610489578063ccd37ba3146104a957600080fd5b806379ba5097116100b257806379ba50971461045857806385572ffb146104605780638da5cb5b1461046e57600080fd5b80636f9e320f146103b35780637437ff9f146103c657600080fd5b80633f4b04aa116101245780635e36480c116101095780635e36480c1461036d5780635e7bb0081461038d57806360987c20146103a057600080fd5b80633f4b04aa1461033c5780635215505b1461035757600080fd5b8063181f5a7711610155578063181f5a77146102cd5780632d04ab7614610316578063311cd5131461032957600080fd5b806304666f9c1461017157806306285c6914610186575b600080fd5b61018461017f366004613ef4565b610533565b005b61027760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102c4919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103096040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102c49190614062565b610184610324366004614112565b610547565b6101846103373660046141c4565b610a4e565b600b546040516001600160401b0390911681526020016102c4565b61035f610ab7565b6040516102c492919061425e565b61038061037b3660046142ff565b610d12565b6040516102c4919061435c565b61018461039b3660046148c5565b610d67565b6101846103ae366004614b09565b610ff6565b6101846103c1366004614b9d565b6112b3565b610422604080516060810182526000808252602082018190529181019190915250604080516060810182526004546001600160a01b038082168352600160a01b90910463ffffffff166020830152600554169181019190915290565b6040805182516001600160a01b03908116825260208085015163ffffffff169083015292820151909216908201526060016102c4565b6101846112c4565b61018461016c366004614c0c565b6000546040516001600160a01b0390911681526020016102c4565b61049c610497366004614c57565b611375565b6040516102c49190614cb7565b6104df6104b7366004614d2c565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b6040519081526020016102c4565b6105006104fb366004614d56565b6114d3565b6040516102c49190614d71565b61018461051b366004614d84565b6115df565b61018461052e366004614e09565b6115f0565b61053b611632565b6105448161168e565b50565b60006105558789018961515e565b602081015151909150156105f257602081015160408083015160608401519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105c1933093909190600401615393565b60006040518083038186803b1580156105d957600080fd5b505afa1580156105ed573d6000803e3d6000fd5b505050505b8051515115158061060857508051602001515115155b156106d457600b5460208a0135906001600160401b03808316911610156106ac57600b805467ffffffffffffffff19166001600160401b038316179055600480548351604051633937306f60e01b81526001600160a01b0390921692633937306f926106759291016154e0565b600060405180830381600087803b15801561068f57600080fd5b505af11580156106a3573d6000803e3d6000fd5b505050506106d2565b8160200151516000036106d257604051632261116760e01b815260040160405180910390fd5b505b60005b81602001515181101561098f576000826020015182815181106106fc576106fc61540e565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa158015610782573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a691906154f3565b156107d457604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107df826118f5565b9050806001016040516107f2919061554a565b60405180910390208360200151805190602001201461082f5782602001518160010160405163b80d8fa960e01b81526004016107cb92919061563d565b60408301518154600160a81b90046001600160401b039081169116141580610870575082606001516001600160401b031683604001516001600160401b0316115b156108b557825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107cb565b6080830151806108d85760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a60209081526040808320848452909152902054156109305783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107cb565b6060840151610940906001615678565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d7565b50602081015181516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c792909161569f565b60405180910390a1610a4360008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611941915050565b505050505050505050565b610a8e610a5d828401846156c4565b6040805160008082526020820190925290610a88565b6060815260200190600190039081610a735790505b50611c3a565b604080516000808252602082019092529050610ab1600185858585866000611941565b50505050565b6060806000610ac66006611cfd565b6001600160401b03811115610add57610add613d36565b604051908082528060200260200182016040528015610b2e57816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610afb5790505b5090506000610b3d6006611cfd565b6001600160401b03811115610b5457610b54613d36565b604051908082528060200260200182016040528015610b7d578160200160208202803683370190505b50905060005b610b8d6006611cfd565b811015610d0957610b9f600682611d07565b828281518110610bb157610bb161540e565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610be757610be761540e565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c6290615510565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8e90615510565b8015610cdb5780601f10610cb057610100808354040283529160200191610cdb565b820191906000526020600020905b815481529060010190602001808311610cbe57829003601f168201915b505050505081525050838281518110610cf657610cf661540e565b6020908102919091010152600101610b83565b50939092509050565b6000610d20600160046156f8565b6002610d2d608085615721565b6001600160401b0316610d409190615747565b610d4a8585611d13565b901c166003811115610d5e57610d5e614332565b90505b92915050565b610d6f611d58565b815181518114610d92576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fe6576000848281518110610db157610db161540e565b60200260200101519050600081602001515190506000858481518110610dd957610dd961540e565b6020026020010151905080518214610e04576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fd7576000828281518110610e2357610e2361540e565b6020026020010151600001519050600085602001518381518110610e4957610e4961540e565b6020026020010151905081600014610e9d578060800151821015610e9d578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107cb565b838381518110610eaf57610eaf61540e565b602002602001015160200151518160a001515114610efc57805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107cb565b60005b8160a0015151811015610fc9576000858581518110610f2057610f2061540e565b6020026020010151602001518281518110610f3d57610f3d61540e565b602002602001015163ffffffff16905080600014610fc05760008360a001518381518110610f6d57610f6d61540e565b60200260200101516040015163ffffffff16905080821015610fbe578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107cb565b505b50600101610eff565b505050806001019050610e07565b50505050806001019050610d95565b50610ff18383611c3a565b505050565b333014611016576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281611053565b604080518082019091526000808252602082015281526020019060019003908161102c5790505b5060a08701515190915015611089576110868660a001518760200151886060015189600001516020015189898989611dc0565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b0316801561117c576040516308d450a160e01b81526001600160a01b038216906308d450a1906111029085906004016157ff565b600060405180830381600087803b15801561111c57600080fd5b505af192505050801561112d575060015b61117c573d80801561115b576040519150601f19603f3d011682016040523d82523d6000602084013e611160565b606091505b50806040516309c2532560e01b81526004016107cb9190614062565b60408801515115801561119157506080880151155b806111a8575060608801516001600160a01b03163b155b806111cf575060608801516111cd906001600160a01b03166385572ffb60e01b611f71565b155b156111dc575050506112ac565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261123a9289926113889291600401615812565b6000604051808303816000875af1158015611259573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611281919081019061584e565b5091509150816112a657806040516302a35ba360e21b81526004016107cb9190614062565b50505050505b5050505050565b6112bb611632565b61054481611f8d565b6001546001600160a01b0316331461131e5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107cb565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6113b86040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561146157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611443575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114c357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114a5575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b90920490921694830194909452600184018054939492939184019161155f90615510565b80601f016020809104026020016040519081016040528092919081815260200182805461158b90615510565b80156114c35780601f106115ad576101008083540402835291602001916114c3565b820191906000526020600020905b8154815290600101906020018083116115bb57505050919092525091949350505050565b6115e7611632565b6105448161206c565b6115f8611632565b60005b815181101561162e576116268282815181106116195761161961540e565b6020026020010151612115565b6001016115fb565b5050565b6000546001600160a01b0316331461168c5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107cb565b565b60005b815181101561162e5760008282815181106116ae576116ae61540e565b60200260200101519050600081602001519050806001600160401b03166000036116eb5760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b0316611713576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600860205260409020606083015160018201805461173f90615510565b90506000036117a157815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117de565b8154600160a81b90046001600160401b03166001146117de57604051632105803760e11b81526001600160401b03841660048201526024016107cb565b805115806118135750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611831576040516342bcdf7f60e11b815260040160405180910390fd5b6001820161183f8282615933565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171782556118a460066001600160401b03851661243f565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118de91906159f2565b60405180910390a250505050806001019050611691565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d615760405163ed053c5960e01b81526001600160401b03841660048201526024016107cb565b60ff878116600090815260026020908152604080832081516080810183528154815260019091015480861693820193909352610100830485169181019190915262010000909104909216151560608301528735906119a08760a4615a40565b90508260600151156119e85784516119b9906020615747565b86516119c6906020615747565b6119d19060a0615a40565b6119db9190615a40565b6119e59082615a40565b90505b368114611a1157604051638e1192e160e01b8152600481018290523660248201526044016107cb565b5081518114611a405781516040516324f7d61360e21b81526004810191909152602481018290526044016107cb565b611a48611d58565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611a9657611a96614332565b6002811115611aa757611aa7614332565b9052509050600281602001516002811115611ac457611ac4614332565b148015611b185750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611b0057611b0061540e565b6000918252602090912001546001600160a01b031633145b611b3557604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611be5576020820151611b50906001615a53565b60ff16855114611b73576040516371253a2560e01b815260040160405180910390fd5b8351855114611b955760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611ba7929190615a6c565b604051908190038120611bbe918b90602001615a7c565b604051602081830303815290604052805190602001209050611be38a8288888861244b565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c5c5760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611c9f565b604080518082019091526000815260606020820152815260200190600190039081611c775790505b50905060005b84518110156112ac57611cf5858281518110611cc357611cc361540e565b602002602001015184611cef57858381518110611ce257611ce261540e565b6020026020010151612608565b83612608565b600101611ca5565b6000610d61825490565b6000610d5e8383612f0e565b6001600160401b038216600090815260096020526040812081611d37608085615a90565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461168c57604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107cb565b606088516001600160401b03811115611ddb57611ddb613d36565b604051908082528060200260200182016040528015611e2057816020015b6040805180820190915260008082526020820152815260200190600190039081611df95790505b509050811560005b8a51811015611f635781611ec057848482818110611e4857611e4861540e565b9050602002016020810190611e5d9190615ab6565b63ffffffff1615611ec057848482818110611e7a57611e7a61540e565b9050602002016020810190611e8f9190615ab6565b8b8281518110611ea157611ea161540e565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f3e8b8281518110611ed557611ed561540e565b60200260200101518b8b8b8b8b87818110611ef257611ef261540e565b9050602002810190611f049190615ad1565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f3892505050565b838281518110611f5057611f5061540e565b6020908102919091010152600101611e28565b505098975050505050505050565b6000611f7c83613218565b8015610d5e5750610d5e8383613263565b80516001600160a01b0316611fb5576040516342bcdf7f60e11b815260040160405180910390fd5b805160048054602080850180516001600160a01b039586167fffffffffffffffff0000000000000000000000000000000000000000000000009094168417600160a01b63ffffffff928316021790945560408087018051600580546001600160a01b031916918916919091179055815194855291519094169183019190915251909216908201527fa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d9060600160405180910390a150565b336001600160a01b038216036120c45760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107cb565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612140576000604051631b3fab5160e11b81526004016107cb9190615b17565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003612191576060840151600182018054911515620100000262ff0000199092169190911790556121cd565b6060840151600182015460ff62010000909104161515901515146121cd576040516321fd80df60e21b815260ff841660048201526024016107cb565b60a0840151805161010010156121f9576001604051631b3fab5160e11b81526004016107cb9190615b17565b805160000361221e576005604051631b3fab5160e11b81526004016107cb9190615b17565b612284848460030180548060200260200160405190810160405280929190818152602001828054801561227a57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161225c575b5050505050613305565b8460600151156123b4576122f2848460020180548060200260200160405190810160405280929190818152602001828054801561227a576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831161225c575050505050613305565b60808501518051610100101561231e576002604051631b3fab5160e11b81526004016107cb9190615b17565b604086015161232e906003615b31565b60ff16815111612354576003604051631b3fab5160e11b81526004016107cb9190615b17565b81518151101561237a576001604051631b3fab5160e11b81526004016107cb9190615b17565b805160018401805461ff00191661010060ff8416021790556123a59060028601906020840190613cbc565b506123b28582600161336e565b505b6123c08482600261336e565b80516123d59060038501906020840190613cbc565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f5479361242e9389939260028a01929190615b4d565b60405180910390a16112ac846134c9565b6000610d5e838361354c565b8251600090815b818110156125fe5760006001888684602081106124715761247161540e565b61247e91901a601b615a53565b8985815181106124905761249061540e565b60200260200101518986815181106124aa576124aa61540e565b6020026020010151604051600081526020016040526040516124e8949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561250a573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561256b5761256b614332565b600281111561257c5761257c614332565b905250905060018160200151600281111561259957612599614332565b146125b757604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b8516156125e157604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612452565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015612685573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a991906154f3565b1561271a5780156126d857604051637edeb53960e11b81526001600160401b03831660048201526024016107cb565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b6000612725836118f5565b600101805461273390615510565b80601f016020809104026020016040519081016040528092919081815260200182805461275f90615510565b80156127ac5780601f10612781576101008083540402835291602001916127ac565b820191906000526020600020905b81548152906001019060200180831161278f57829003601f168201915b505050602088015151929350505060008190036127ea57855160405163676cf24b60e11b81526001600160401b0390911660048201526024016107cb565b856040015151811461280f576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561282957612829613d36565b604051908082528060200260200182016040528015612852578160200160208202803683370190505b50905060005b828110156129f6576000886020015182815181106128785761287861540e565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146128ef5780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107cb565b866001600160401b03168160000151602001516001600160401b03161461294357805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107cb565b6129d0817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129b594939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6040516020818303038152906040528051906020012061359b565b8383815181106129e2576129e261540e565b602090810291909101015250600101612858565b506000612a0d86838a606001518b608001516136a3565b905080600003612a3b57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107cb565b60005b83811015610a435760005a905060008a602001518381518110612a6357612a6361540e565b602002602001015190506000612a818a836000015160600151610d12565b90506000816003811115612a9757612a97614332565b1480612ab457506003816003811115612ab257612ab2614332565b145b612b0a57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f06565b60608915612be9578b8581518110612b2457612b2461540e565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b5288426156f8565b1190508080612b7257506003836003811115612b7057612b70614332565b145b612b9a576040516354e7e43160e11b81526001600160401b038d1660048201526024016107cb565b8c8681518110612bac57612bac61540e565b602002602001015160000151600014612be3578c8681518110612bd157612bd161540e565b60209081029190910101515160808501525b50612c55565b6000826003811115612bfd57612bfd614332565b14612c5557825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f06565b8251608001516001600160401b031615612d2e576000826003811115612c7d57612c7d614332565b03612d2e577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cde93929190615bff565b6020604051808303816000875af1158015612cfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d2191906154f3565b612d2e5750505050612f06565b60008d604001518681518110612d4657612d4661540e565b6020026020010151905080518460a001515114612d9057835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107cb565b612da48c85600001516060015160016136e0565b600080612db2868486613785565b91509150612dc98e876000015160600151846136e0565b8c15612e20576003826003811115612de357612de3614332565b03612e20576000856003811115612dfc57612dfc614332565b14612e2057855151604051632b11b8d960e01b81526107cb91908390600401615c2b565b6002826003811115612e3457612e34614332565b14612e79576003826003811115612e4d57612e4d614332565b14612e79578d866000015160600151836040516349362d1f60e11b81526004016107cb93929190615c44565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ed157612ed161540e565b602002602001015186865a612ee6908f6156f8565b604051612ef69493929190615c69565b60405180910390a4505050505050505b600101612a3e565b6000826000018281548110612f2557612f2561540e565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fbc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fe09190615ca0565b90506001600160a01b038116158061300f575061300d6001600160a01b03821663aff2afbf60e01b611f71565b155b156130385760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107cb565b60008061305088858c6040015163ffffffff16613839565b9150915060008060006131036040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130cd9190615cbd565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b1790528786611388608461391c565b92509250925082613129578160405163e1cd550960e01b81526004016107cb9190614062565b8151602014613158578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b60008280602001905181019061316e9190615d89565b9050866001600160a01b03168c6001600160a01b0316146131ea57600061319f8d8a61319a868a6156f8565b613839565b509050868110806131b95750816131b688836156f8565b14155b156131e85760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107cb565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061322b826301ffc9a760e01b613263565b8015610d61575061325c827fffffffff00000000000000000000000000000000000000000000000000000000613263565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132ee575060208210155b80156132fa5750600081115b979650505050505050565b60005b8151811015610ff15760ff83166000908152600360205260408120835190919084908490811061333a5761333a61540e565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613308565b60005b8251811015610ab157600083828151811061338e5761338e61540e565b60200260200101519050600060028111156133ab576133ab614332565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133ea576133ea614332565b1461340b576004604051631b3fab5160e11b81526004016107cb9190615b17565b6001600160a01b0381166134325760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561345857613458614332565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134b5576134b5614332565b021790555090505050806001019050613371565b60ff81811660008181526002602052604090206001015462010000900490911690613521578061350c576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff83160161162e57801561162e576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461359357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d61565b506000610d61565b8151805160608085015190830151608080870151940151604051600095869588956135ff95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136429190615e43565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136b18585856139f6565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136ef608085615721565b6001600160401b03166137029190615747565b905060006137108585611d13565b90508161371f600160046156f8565b901b19168183600381111561373657613736614332565b6001600160401b03871660009081526009602052604081209190921b92909217918291613764608088615a90565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906137b290889088908890600401615eda565b600060405180830381600087803b1580156137cc57600080fd5b505af19250505080156137dd575060015b61381c573d80801561380b576040519150601f19603f3d011682016040523d82523d6000602084013e613810565b606091505b50600392509050613831565b50506040805160208101909152600081526002905b935093915050565b600080600080600061389a8860405160240161386491906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790528888611388608461391c565b925092509250826138c0578160405163e1cd550960e01b81526004016107cb9190614062565b60208251146138ef578151604051631e3be00960e21b81526020600482015260248101919091526044016107cb565b818060200190518101906139039190615d89565b61390d82886156f8565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561393e5761393e613d36565b6040519080825280601f01601f191660200182016040528015613968576020820181803683370190505b509150863b6139825763030ed58f60e21b60005260046000fd5b5a8581101561399c57632be8ca8b60e21b60005260046000fd5b85900360408104810387106139bc576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139df5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a1e57604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a3257506101018111155b613a4f576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a79576040516309bde33960e01b815260040160405180910390fd5b80600003613aa65786600081518110613a9457613a9461540e565b60200260200101519350505050613c74565b6000816001600160401b03811115613ac057613ac0613d36565b604051908082528060200260200182016040528015613ae9578160200160208202803683370190505b50905060008080805b85811015613c135760006001821b8b811603613b4d5788851015613b36578c5160018601958e918110613b2757613b2761540e565b60200260200101519050613b6f565b8551600185019487918110613b2757613b2761540e565b8b5160018401938d918110613b6457613b6461540e565b602002602001015190505b600089861015613b9f578d5160018701968f918110613b9057613b9061540e565b60200260200101519050613bc1565b8651600186019588918110613bb657613bb661540e565b602002602001015190505b82851115613be2576040516309bde33960e01b815260040160405180910390fd5b613bec8282613c7b565b878481518110613bfe57613bfe61540e565b60209081029190910101525050600101613af2565b506001850382148015613c2557508683145b8015613c3057508581145b613c4d576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c6257613c6261540e565b60200260200101519750505050505050505b9392505050565b6000818310613c9357613c8e8284613c99565b610d5e565b610d5e83835b604080516001602082015290810183905260608101829052600090608001613685565b828054828255906000526020600020908101928215613d11579160200282015b82811115613d1157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613cdc565b50613d1d929150613d21565b5090565b5b80821115613d1d5760008155600101613d22565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d6e57613d6e613d36565b60405290565b60405160a081016001600160401b0381118282101715613d6e57613d6e613d36565b60405160c081016001600160401b0381118282101715613d6e57613d6e613d36565b604080519081016001600160401b0381118282101715613d6e57613d6e613d36565b604051601f8201601f191681016001600160401b0381118282101715613e0257613e02613d36565b604052919050565b60006001600160401b03821115613e2357613e23613d36565b5060051b60200190565b6001600160a01b038116811461054457600080fd5b80356001600160401b0381168114613e5957600080fd5b919050565b801515811461054457600080fd5b8035613e5981613e5e565b60006001600160401b03821115613e9057613e90613d36565b50601f01601f191660200190565b600082601f830112613eaf57600080fd5b8135613ec2613ebd82613e77565b613dda565b818152846020838601011115613ed757600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613f0757600080fd5b82356001600160401b0380821115613f1e57600080fd5b818501915085601f830112613f3257600080fd5b8135613f40613ebd82613e0a565b81815260059190911b83018401908481019088831115613f5f57600080fd5b8585015b8381101561400557803585811115613f7b5760008081fd5b86016080818c03601f1901811315613f935760008081fd5b613f9b613d4c565b89830135613fa881613e2d565b81526040613fb7848201613e42565b8b830152606080850135613fca81613e5e565b83830152928401359289841115613fe357600091508182fd5b613ff18f8d86880101613e9e565b908301525085525050918601918601613f63565b5098975050505050505050565b60005b8381101561402d578181015183820152602001614015565b50506000910152565b6000815180845261404e816020860160208601614012565b601f01601f19169290920160200192915050565b602081526000610d5e6020830184614036565b8060608101831015610d6157600080fd5b60008083601f84011261409857600080fd5b5081356001600160401b038111156140af57600080fd5b6020830191508360208285010111156140c757600080fd5b9250929050565b60008083601f8401126140e057600080fd5b5081356001600160401b038111156140f757600080fd5b6020830191508360208260051b85010111156140c757600080fd5b60008060008060008060008060e0898b03121561412e57600080fd5b6141388a8a614075565b975060608901356001600160401b038082111561415457600080fd5b6141608c838d01614086565b909950975060808b013591508082111561417957600080fd5b6141858c838d016140ce565b909750955060a08b013591508082111561419e57600080fd5b506141ab8b828c016140ce565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141d957600080fd5b6141e38585614075565b925060608401356001600160401b038111156141fe57600080fd5b61420a86828701614086565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136d86080850182614036565b604080825283519082018190526000906020906060840190828701845b828110156142a05781516001600160401b03168452928401929084019060010161427b565b50505083810382850152845180825282820190600581901b8301840187850160005b838110156142f057601f198684030185526142de838351614217565b948701949250908601906001016142c2565b50909998505050505050505050565b6000806040838503121561431257600080fd5b61431b83613e42565b915061432960208401613e42565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061435857614358614332565b9052565b60208101610d618284614348565b600060a0828403121561437c57600080fd5b614384613d74565b90508135815261439660208301613e42565b60208201526143a760408301613e42565b60408201526143b860608301613e42565b60608201526143c960808301613e42565b608082015292915050565b8035613e5981613e2d565b803563ffffffff81168114613e5957600080fd5b600082601f83011261440457600080fd5b81356020614414613ebd83613e0a565b82815260059290921b8401810191818101908684111561443357600080fd5b8286015b848110156145035780356001600160401b03808211156144575760008081fd5b9088019060a0828b03601f19018113156144715760008081fd5b614479613d74565b878401358381111561448b5760008081fd5b6144998d8a83880101613e9e565b8252506040808501356144ab81613e2d565b828a015260606144bc8682016143df565b828401526080915081860135858111156144d65760008081fd5b6144e48f8c838a0101613e9e565b9184019190915250919093013590830152508352918301918301614437565b509695505050505050565b6000610140828403121561452157600080fd5b614529613d96565b9050614535838361436a565b815260a08201356001600160401b038082111561455157600080fd5b61455d85838601613e9e565b602084015260c084013591508082111561457657600080fd5b61458285838601613e9e565b604084015261459360e085016143d4565b606084015261010084013560808401526101208401359150808211156145b857600080fd5b506145c5848285016143f3565b60a08301525092915050565b600082601f8301126145e257600080fd5b813560206145f2613ebd83613e0a565b82815260059290921b8401810191818101908684111561461157600080fd5b8286015b848110156145035780356001600160401b038111156146345760008081fd5b6146428986838b010161450e565b845250918301918301614615565b600082601f83011261466157600080fd5b81356020614671613ebd83613e0a565b82815260059290921b8401810191818101908684111561469057600080fd5b8286015b848110156145035780356001600160401b03808211156146b357600080fd5b818901915089603f8301126146c757600080fd5b858201356146d7613ebd82613e0a565b81815260059190911b830160400190878101908c8311156146f757600080fd5b604085015b838110156147305780358581111561471357600080fd5b6147228f6040838a0101613e9e565b8452509189019189016146fc565b50875250505092840192508301614694565b600082601f83011261475357600080fd5b81356020614763613ebd83613e0a565b8083825260208201915060208460051b87010193508684111561478557600080fd5b602086015b84811015614503578035835291830191830161478a565b600082601f8301126147b257600080fd5b813560206147c2613ebd83613e0a565b82815260059290921b840181019181810190868411156147e157600080fd5b8286015b848110156145035780356001600160401b03808211156148055760008081fd5b9088019060a0828b03601f190181131561481f5760008081fd5b614827613d74565b614832888501613e42565b8152604080850135848111156148485760008081fd5b6148568e8b838901016145d1565b8a840152506060808601358581111561486f5760008081fd5b61487d8f8c838a0101614650565b83850152506080915081860135858111156148985760008081fd5b6148a68f8c838a0101614742565b91840191909152509190930135908301525083529183019183016147e5565b600080604083850312156148d857600080fd5b6001600160401b03833511156148ed57600080fd5b6148fa84843585016147a1565b91506001600160401b036020840135111561491457600080fd5b6020830135830184601f82011261492a57600080fd5b614937613ebd8235613e0a565b81358082526020808301929160051b84010187101561495557600080fd5b602083015b6020843560051b850101811015614afb576001600160401b038135111561498057600080fd5b87603f82358601011261499257600080fd5b6149a5613ebd6020833587010135613e0a565b81358501602081810135808452908301929160059190911b016040018a10156149cd57600080fd5b604083358701015b83358701602081013560051b01604001811015614aeb576001600160401b0381351115614a0157600080fd5b833587018135016040818d03603f19011215614a1c57600080fd5b614a24613db8565b604082013581526001600160401b0360608301351115614a4357600080fd5b8c605f606084013584010112614a5857600080fd5b6040606083013583010135614a6f613ebd82613e0a565b808282526020820191508f60608460051b6060880135880101011115614a9457600080fd5b6060808601358601015b60608460051b606088013588010101811015614acb57614abd816143df565b835260209283019201614a9e565b5080602085015250505080855250506020830192506020810190506149d5565b508452506020928301920161495a565b508093505050509250929050565b600080600080600060608688031215614b2157600080fd5b85356001600160401b0380821115614b3857600080fd5b614b4489838a0161450e565b96506020880135915080821115614b5a57600080fd5b614b6689838a016140ce565b90965094506040880135915080821115614b7f57600080fd5b50614b8c888289016140ce565b969995985093965092949392505050565b600060608284031215614baf57600080fd5b604051606081018181106001600160401b0382111715614bd157614bd1613d36565b6040528235614bdf81613e2d565b8152614bed602084016143df565b60208201526040830135614c0081613e2d565b60408201529392505050565b600060208284031215614c1e57600080fd5b81356001600160401b03811115614c3457600080fd5b820160a08185031215613c7457600080fd5b803560ff81168114613e5957600080fd5b600060208284031215614c6957600080fd5b610d5e82614c46565b60008151808452602080850194506020840160005b83811015614cac5781516001600160a01b031687529582019590820190600101614c87565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614d0660e0840182614c72565b90506040840151601f198483030160c0850152614d238282614c72565b95945050505050565b60008060408385031215614d3f57600080fd5b614d4883613e42565b946020939093013593505050565b600060208284031215614d6857600080fd5b610d5e82613e42565b602081526000610d5e6020830184614217565b600060208284031215614d9657600080fd5b8135613c7481613e2d565b600082601f830112614db257600080fd5b81356020614dc2613ebd83613e0a565b8083825260208201915060208460051b870101935086841115614de457600080fd5b602086015b84811015614503578035614dfc81613e2d565b8352918301918301614de9565b60006020808385031215614e1c57600080fd5b82356001600160401b0380821115614e3357600080fd5b818501915085601f830112614e4757600080fd5b8135614e55613ebd82613e0a565b81815260059190911b83018401908481019088831115614e7457600080fd5b8585015b8381101561400557803585811115614e8f57600080fd5b860160c0818c03601f19011215614ea65760008081fd5b614eae613d96565b8882013581526040614ec1818401614c46565b8a8301526060614ed2818501614c46565b8284015260809150614ee5828501613e6c565b9083015260a08381013589811115614efd5760008081fd5b614f0b8f8d83880101614da1565b838501525060c0840135915088821115614f255760008081fd5b614f338e8c84870101614da1565b9083015250845250918601918601614e78565b80356001600160e01b0381168114613e5957600080fd5b600082601f830112614f6e57600080fd5b81356020614f7e613ebd83613e0a565b82815260069290921b84018101918181019086841115614f9d57600080fd5b8286015b848110156145035760408189031215614fba5760008081fd5b614fc2613db8565b614fcb82613e42565b8152614fd8858301614f46565b81860152835291830191604001614fa1565b600082601f830112614ffb57600080fd5b8135602061500b613ebd83613e0a565b82815260059290921b8401810191818101908684111561502a57600080fd5b8286015b848110156145035780356001600160401b038082111561504e5760008081fd5b9088019060a0828b03601f19018113156150685760008081fd5b615070613d74565b61507b888501613e42565b8152604080850135848111156150915760008081fd5b61509f8e8b83890101613e9e565b8a84015250606093506150b3848601613e42565b9082015260806150c4858201613e42565b9382019390935292013590820152835291830191830161502e565b600082601f8301126150f057600080fd5b81356020615100613ebd83613e0a565b82815260069290921b8401810191818101908684111561511f57600080fd5b8286015b84811015614503576040818903121561513c5760008081fd5b615144613db8565b813581528482013585820152835291830191604001615123565b6000602080838503121561517157600080fd5b82356001600160401b038082111561518857600080fd5b908401906080828703121561519c57600080fd5b6151a4613d4c565b8235828111156151b357600080fd5b830160408189038113156151c657600080fd5b6151ce613db8565b8235858111156151dd57600080fd5b8301601f81018b136151ee57600080fd5b80356151fc613ebd82613e0a565b81815260069190911b8201890190898101908d83111561521b57600080fd5b928a01925b8284101561526b5785848f0312156152385760008081fd5b615240613db8565b843561524b81613e2d565b8152615258858d01614f46565b818d0152825292850192908a0190615220565b84525050508287013591508482111561528357600080fd5b61528f8a838501614f5d565b818801528352505082840135828111156152a857600080fd5b6152b488828601614fea565b858301525060408301359350818411156152cd57600080fd5b6152d9878585016150df565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561538657601f19868403018952815160a06001600160401b0380835116865286830151828888015261534a83880182614036565b60408581015184169089015260608086015190931692880192909252506080928301519290950191909152509783019790830190600101615312565b5090979650505050505050565b6001600160a01b0385168152600060206080818401526153b660808401876152f5565b83810360408581019190915286518083528388019284019060005b818110156153f6578451805184528601518684015293850193918301916001016153d1565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561547b57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615444565b50508583015187820388850152805180835290840192506000918401905b808310156154d457835180516001600160401b031683528501516001600160e01b031685830152928401926001929092019190850190615499565b50979650505050505050565b602081526000610d5e6020830184615424565b60006020828403121561550557600080fd5b8151613c7481613e5e565b600181811c9082168061552457607f821691505b60208210810361554457634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461555881615510565b600182811680156155705760018114615585576155b4565b60ff19841687528215158302870194506155b4565b8760005260208060002060005b858110156155ab5781548a820152908401908201615592565b50505082870194505b50929695505050505050565b600081546155cd81615510565b8085526020600183811680156155ea576001811461560457615632565b60ff1985168884015283151560051b880183019550615632565b866000528260002060005b8581101561562a5781548a820186015290830190840161560f565b890184019650505b505050505092915050565b6040815260006156506040830185614036565b8281036020840152614d2381856155c0565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561569857615698615662565b5092915050565b6040815260006156b260408301856152f5565b8281036020840152614d238185615424565b6000602082840312156156d657600080fd5b81356001600160401b038111156156ec57600080fd5b6136d8848285016147a1565b81810381811115610d6157610d61615662565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b038084168061573b5761573b61570b565b92169190910692915050565b8082028115828204841417610d6157610d61615662565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261579160a0870182614036565b9050606085015186820360608801526157aa8282614036565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154d457835180516001600160a01b03168352860151868301529285019260019290920191908401906157cd565b602081526000610d5e602083018461575e565b608081526000615825608083018761575e565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561586357600080fd5b835161586e81613e5e565b60208501519093506001600160401b0381111561588a57600080fd5b8401601f8101861361589b57600080fd5b80516158a9613ebd82613e77565b8181528760208385010111156158be57600080fd5b6158cf826020830160208601614012565b809450505050604084015190509250925092565b601f821115610ff1576000816000526020600020601f850160051c8101602086101561590c5750805b601f850160051c820191505b8181101561592b57828155600101615918565b505050505050565b81516001600160401b0381111561594c5761594c613d36565b6159608161595a8454615510565b846158e3565b602080601f831160018114615995576000841561597d5750858301515b600019600386901b1c1916600185901b17855561592b565b600085815260208120601f198616915b828110156159c4578886015182559484019460019091019084016159a5565b50858210156159e25787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5e60a08301600185016155c0565b80820180821115610d6157610d61615662565b60ff8181168382160190811115610d6157610d61615662565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615aaa57615aaa61570b565b92169190910492915050565b600060208284031215615ac857600080fd5b610d5e826143df565b6000808335601e19843603018112615ae857600080fd5b8301803591506001600160401b03821115615b0257600080fd5b6020019150368190038213156140c757600080fd5b6020810160068310615b2b57615b2b614332565b91905290565b60ff818116838216029081169081811461569857615698615662565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615ba55784546001600160a01b031683526001948501949284019201615b80565b50508481036060860152865180825290820192508187019060005b81811015615be55782516001600160a01b031685529383019391830191600101615bc0565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d236060830184614036565b8281526040602082015260006136d86040830184614036565b6001600160401b03848116825283166020820152606081016136d86040830184614348565b848152615c796020820185614348565b608060408201526000615c8f6080830185614036565b905082606083015295945050505050565b600060208284031215615cb257600080fd5b8151613c7481613e2d565b6020815260008251610100806020850152615cdc610120850183614036565b91506020850151615cf860408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d3260a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d4f8483614036565b935060c08701519150808685030160e0870152615d6c8483614036565b935060e0870151915080868503018387015250615bf58382614036565b600060208284031215615d9b57600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561538657601f19868403018952815160a08151818652615de582870182614036565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e218382614036565b6080948501519790940196909652505098840198925090830190600101615dbf565b602081526000610d5e6020830184615da2565b60008282518085526020808601955060208260051b8401016020860160005b8481101561538657601f19868403018952615e91838351614036565b98840198925090830190600101615e75565b60008151808452602080850194506020840160005b83811015614cac57815163ffffffff1687529582019590820190600101615eb8565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f426101a0850183614036565b91506040870151605f198086850301610120870152615f618483614036565b935060608901519150615f7e838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615fa78282615da2565b9150508281036020840152615fbc8186615e56565b90508281036040840152615bf58185615ea356fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CanOnlySelfCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reportOnRamp\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"configOnRamp\",\"type\":\"bytes\"}],\"name\":\"CommitOnRampMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"CursedByRMN\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptyBatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"EmptyReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ExecutionError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"ForkedChain\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumMultiOCR3Base.InvalidConfigErrorType\",\"name\":\"errorType\",\"type\":\"uint8\"}],\"name\":\"InvalidConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"}],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"tokenIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"oldLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"tokenGasOverride\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionTokenGasOverride\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"messageDestChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidMessageDestChainSelector\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"newState\",\"type\":\"uint8\"}],\"name\":\"InvalidNewState\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidOnRampUpdate\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionGasAmountCountMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ManualExecutionGasLimitMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"ManualExecutionNotYetEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"errorReason\",\"type\":\"bytes\"}],\"name\":\"MessageValidationError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"notPool\",\"type\":\"address\"}],\"name\":\"NotACompatiblePool\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"ReceiverError\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amountReleased\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePre\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"balancePost\",\"type\":\"uint256\"}],\"name\":\"ReleaseOrMintBalanceMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"name\":\"RootAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"RootNotCommitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationNotAllowedInExecutionPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignatureVerificationRequiredInCommitPlugin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"reportSourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"messageSourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StaleCommitReport\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"TokenDataMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"err\",\"type\":\"bytes\"}],\"name\":\"TokenHandlingError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedTokenData\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroChainSelectorNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"AlreadyAttempted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"indexed\":false,\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"internalType\":\"uint224\",\"name\":\"usdPerToken\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.TokenPriceUpdate[]\",\"name\":\"tokenPriceUpdates\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint224\",\"name\":\"usdPerUnitGas\",\"type\":\"uint224\"}],\"internalType\":\"structInternal.GasPriceUpdate[]\",\"name\":\"gasPriceUpdates\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"}],\"name\":\"CommitReportAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"state\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"returnData\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"name\":\"ExecutionStateChanged\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"RootRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"SkippedAlreadyExecutedMessage\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SkippedReportExecution\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"sourceConfig\",\"type\":\"tuple\"}],\"name\":\"SourceChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainSelectorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"indexed\":false,\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"}],\"name\":\"StaticConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfigArgs[]\",\"name\":\"sourceChainConfigUpdates\",\"type\":\"tuple[]\"}],\"name\":\"applySourceChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"destTokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structClient.Any2EVMMessage\",\"name\":\"\",\"type\":\"tuple\"}],\"name\":\"ccipReceive\",\"outputs\":[],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"commit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllSourceChainConfigs\",\"outputs\":[{\"internalType\":\"uint64[]\",\"name\":\"\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"}],\"name\":\"getExecutionState\",\"outputs\":[{\"internalType\":\"enumInternal.MessageExecutionState\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLatestPriceSequenceNumber\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"getMerkleRoot\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"getSourceChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"contractIRouter\",\"name\":\"router\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRamp\",\"type\":\"bytes\"}],\"internalType\":\"structOffRamp.SourceChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"contractIRMNRemote\",\"name\":\"rmnRemote\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"tokenAdminRegistry\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"nonceManager\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"latestConfigDetails\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"}],\"internalType\":\"structMultiOCR3Base.ConfigInfo\",\"name\":\"configInfo\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfig\",\"name\":\"ocrConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"sequenceNumber\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"}],\"internalType\":\"structInternal.RampMessageHeader\",\"name\":\"header\",\"type\":\"tuple\"},{\"internalType\":\"bytes\",\"name\":\"sender\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"gasLimit\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"sourcePoolAddress\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"destTokenAddress\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destGasAmount\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.Any2EVMTokenTransfer[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage[]\",\"name\":\"messages\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes[][]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[][]\"},{\"internalType\":\"bytes32[]\",\"name\":\"proofs\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint256\",\"name\":\"proofFlagBits\",\"type\":\"uint256\"}],\"internalType\":\"structInternal.ExecutionReport[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"receiverExecutionGasLimit\",\"type\":\"uint256\"},{\"internalType\":\"uint32[]\",\"name\":\"tokenGasOverrides\",\"type\":\"uint32[]\"}],\"internalType\":\"structOffRamp.GasLimitOverride[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"tuple[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isRMNVerificationDisabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"messageInterceptor\",\"type\":\"address\"}],\"internalType\":\"structOffRamp.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"setDynamicConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"bool\",\"name\":\"isSignatureVerificationEnabled\",\"type\":\"bool\"},{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"}],\"internalType\":\"structMultiOCR3Base.OCRConfigArgs[]\",\"name\":\"ocrConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"setOCR3Configs\",\"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\":\"view\",\"type\":\"function\"}]", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006c6138038062006c618339810160408190526200003591620008b5565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f18162000393565b50505062000c29565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889166001600160c01b03199097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b60005b8151811015620005f6576000828281518110620003b757620003b7620009df565b60200260200101519050600081602001519050806001600160401b0316600003620003f55760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200041e576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b038116600090815260086020526040902060608301516001820180546200044c90620009f5565b9050600003620004af578154600160a81b600160e81b031916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620004ee565b8154600160a81b90046001600160401b0316600114620004ee57604051632105803760e11b81526001600160401b038416600482015260240162000083565b80511580620005245750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b1562000543576040516342bcdf7f60e11b815260040160405180910390fd5b6001820162000553828262000a86565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178255620005a260066001600160401b038516620005fa565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b83604051620005de919062000b52565b60405180910390a25050505080600101905062000396565b5050565b600062000608838362000611565b90505b92915050565b60008181526001830160205260408120546200065a575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556200060b565b5060006200060b565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b03811182821017156200069e576200069e62000663565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006cf57620006cf62000663565b604052919050565b80516001600160401b0381168114620006ef57600080fd5b919050565b6001600160a01b03811681146200070a57600080fd5b50565b80518015158114620006ef57600080fd5b6000601f83601f8401126200073257600080fd5b825160206001600160401b038083111562000751576200075162000663565b8260051b62000762838201620006a4565b93845286810183019383810190898611156200077d57600080fd5b84890192505b85831015620008a8578251848111156200079d5760008081fd5b89016080601f19828d038101821315620007b75760008081fd5b620007c162000679565b88840151620007d081620006f4565b81526040620007e1858201620006d7565b8a8301526060620007f48187016200070d565b838301529385015193898511156200080c5760008081fd5b84860195508f603f8701126200082457600094508485fd5b8a8601519450898511156200083d576200083d62000663565b6200084e8b858f88011601620006a4565b93508484528f82868801011115620008665760008081fd5b60005b8581101562000886578681018301518582018d01528b0162000869565b5060009484018b01949094525091820152835250918401919084019062000783565b9998505050505050505050565b6000806000838503610120811215620008cd57600080fd5b6080811215620008dc57600080fd5b620008e662000679565b620008f186620006d7565b815260208601516200090381620006f4565b602082015260408601516200091881620006f4565b604082015260608601516200092d81620006f4565b606082015293506080607f19820112156200094757600080fd5b506200095262000679565b60808501516200096281620006f4565b815260a085015163ffffffff811681146200097c57600080fd5b60208201526200098f60c086016200070d565b604082015260e0850151620009a481620006f4565b60608201526101008501519092506001600160401b03811115620009c757600080fd5b620009d5868287016200071e565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a0a57607f821691505b60208210810362000a2b57634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000a81576000816000526020600020601f850160051c8101602086101562000a5c5750805b601f850160051c820191505b8181101562000a7d5782815560010162000a68565b5050505b505050565b81516001600160401b0381111562000aa25762000aa262000663565b62000aba8162000ab38454620009f5565b8462000a31565b602080601f83116001811462000af2576000841562000ad95750858301515b600019600386901b1c1916600185901b17855562000a7d565b600085815260208120601f198616915b8281101562000b235788860151825594840194600190910190840162000b02565b508582101562000b425787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000ba781620009f5565b8060a089015260c0600183166000811462000bcb576001811462000be85762000c1a565b60ff19841660c08b015260c083151560051b8b0101945062000c1a565b85600052602060002060005b8481101562000c115781548c820185015290880190890162000bf4565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615fc262000c9f600039600081816102070152612c980152600081816101d80152612f920152600081816101a90152818161058701528181610738015261264a01526000818161017a0152612898015260008181611d490152611d7c0152615fc26000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c80637437ff9f116100ad578063c673e58411610071578063c673e58414610474578063ccd37ba314610494578063e9d68a8e146104d8578063f2fde38b146104f8578063f716f99f1461050b57600080fd5b80637437ff9f1461037357806379ba5097146104305780637edf52f41461043857806385572ffb1461044b5780638da5cb5b1461045957600080fd5b80633f4b04aa116100f45780633f4b04aa146102fc5780635215505b146103175780635e36480c1461032d5780635e7bb0081461034d57806360987c201461036057600080fd5b806304666f9c1461013157806306285c6914610146578063181f5a771461028d5780632d04ab76146102d6578063311cd513146102e9575b600080fd5b61014461013f366004613ee3565b61051e565b005b61023760408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f00000000000000000000000000000000000000000000000000000000000000006001600160401b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b604051610284919081516001600160401b031681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6102c96040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102849190614051565b6101446102e4366004614101565b610532565b6101446102f73660046141b3565b610a4c565b600b546040516001600160401b039091168152602001610284565b61031f610ab5565b60405161028492919061424d565b61034061033b3660046142ee565b610d10565b604051610284919061434b565b61014461035b3660046148b4565b610d65565b61014461036e366004614af8565b610ff4565b6103e960408051608081018252600080825260208201819052918101829052606081019190915250604080516080810182526004546001600160a01b038082168352600160a01b820463ffffffff166020840152600160c01b90910460ff16151592820192909252600554909116606082015290565b604051610284919081516001600160a01b03908116825260208084015163ffffffff1690830152604080840151151590830152606092830151169181019190915260800190565b6101446112ab565b610144610446366004614b8c565b61135c565b61014461012c366004614bf1565b6000546040516001600160a01b039091168152602001610284565b610487610482366004614c3c565b61136d565b6040516102849190614c9c565b6104ca6104a2366004614d11565b6001600160401b03919091166000908152600a60209081526040808320938352929052205490565b604051908152602001610284565b6104eb6104e6366004614d3b565b6114cb565b6040516102849190614d56565b610144610506366004614d69565b6115d7565b610144610519366004614dee565b6115e8565b61052661162a565b61052f81611686565b50565b600061054087890189615143565b6004805491925090600160c01b900460ff166105f057602082015151156105f057602082015160408084015160608501519151638d8741cb60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001693638d8741cb936105bf933093909190600401615378565b60006040518083038186803b1580156105d757600080fd5b505afa1580156105eb573d6000803e3d6000fd5b505050505b8151515115158061060657508151602001515115155b156106d157600b5460208b0135906001600160401b03808316911610156106a957600b805467ffffffffffffffff19166001600160401b03831617905581548351604051633937306f60e01b81526001600160a01b0390921691633937306f91610672916004016154c5565b600060405180830381600087803b15801561068c57600080fd5b505af11580156106a0573d6000803e3d6000fd5b505050506106cf565b8260200151516000036106cf57604051632261116760e01b815260040160405180910390fd5b505b60005b82602001515181101561098c576000836020015182815181106106f9576106f96153f3565b60209081029190910101518051604051632cbc26bb60e01b815267ffffffffffffffff60801b608083901b166004820152919250906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690632cbc26bb90602401602060405180830381865afa15801561077f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107a391906154d8565b156107d157604051637edeb53960e11b81526001600160401b03821660048201526024015b60405180910390fd5b60006107dc826118e3565b9050806001016040516107ef919061552f565b60405180910390208360200151805190602001201461082c5782602001518160010160405163b80d8fa960e01b81526004016107c8929190615622565b60408301518154600160a81b90046001600160401b03908116911614158061086d575082606001516001600160401b031683604001516001600160401b0316115b156108b257825160408085015160608601519151636af0786b60e11b81526001600160401b0393841660048201529083166024820152911660448201526064016107c8565b6080830151806108d55760405163504570e360e01b815260040160405180910390fd5b83516001600160401b03166000908152600a602090815260408083208484529091529020541561092d5783516040516332cf0cbf60e01b81526001600160401b039091166004820152602481018290526044016107c8565b606084015161093d90600161565d565b825467ffffffffffffffff60a81b1916600160a81b6001600160401b0392831602179092559251166000908152600a6020908152604080832094835293905291909120429055506001016106d4565b50602082015182516040517f35c02761bcd3ef995c6a601a1981f4ed3934dcbe5041e24e286c89f5531d17e4926109c4929091615684565b60405180910390a1610a4060008b8b8b8b8b8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808f0282810182019093528e82529093508e92508d9182918501908490808284376000920191909152508c925061192f915050565b50505050505050505050565b610a8c610a5b828401846156a9565b6040805160008082526020820190925290610a86565b6060815260200190600190039081610a715790505b50611c28565b604080516000808252602082019092529050610aaf60018585858586600061192f565b50505050565b6060806000610ac46006611ceb565b6001600160401b03811115610adb57610adb613d25565b604051908082528060200260200182016040528015610b2c57816020015b6040805160808101825260008082526020808301829052928201526060808201528252600019909201910181610af95790505b5090506000610b3b6006611ceb565b6001600160401b03811115610b5257610b52613d25565b604051908082528060200260200182016040528015610b7b578160200160208202803683370190505b50905060005b610b8b6006611ceb565b811015610d0757610b9d600682611cf5565b828281518110610baf57610baf6153f3565b60200260200101906001600160401b031690816001600160401b03168152505060086000838381518110610be557610be56153f3565b6020908102919091018101516001600160401b039081168352828201939093526040918201600020825160808101845281546001600160a01b038116825260ff600160a01b820416151593820193909352600160a81b90920490931691810191909152600182018054919291606084019190610c60906154f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8c906154f5565b8015610cd95780601f10610cae57610100808354040283529160200191610cd9565b820191906000526020600020905b815481529060010190602001808311610cbc57829003601f168201915b505050505081525050838281518110610cf457610cf46153f3565b6020908102919091010152600101610b81565b50939092509050565b6000610d1e600160046156dd565b6002610d2b608085615706565b6001600160401b0316610d3e919061572c565b610d488585611d01565b901c166003811115610d5c57610d5c614321565b90505b92915050565b610d6d611d46565b815181518114610d90576040516320f8fd5960e21b815260040160405180910390fd5b60005b81811015610fe4576000848281518110610daf57610daf6153f3565b60200260200101519050600081602001515190506000858481518110610dd757610dd76153f3565b6020026020010151905080518214610e02576040516320f8fd5960e21b815260040160405180910390fd5b60005b82811015610fd5576000828281518110610e2157610e216153f3565b6020026020010151600001519050600085602001518381518110610e4757610e476153f3565b6020026020010151905081600014610e9b578060800151821015610e9b578551815151604051633a98d46360e11b81526001600160401b0390921660048301526024820152604481018390526064016107c8565b838381518110610ead57610ead6153f3565b602002602001015160200151518160a001515114610efa57805180516060909101516040516370a193fd60e01b815260048101929092526001600160401b031660248201526044016107c8565b60005b8160a0015151811015610fc7576000858581518110610f1e57610f1e6153f3565b6020026020010151602001518281518110610f3b57610f3b6153f3565b602002602001015163ffffffff16905080600014610fbe5760008360a001518381518110610f6b57610f6b6153f3565b60200260200101516040015163ffffffff16905080821015610fbc578351516040516348e617b360e01b815260048101919091526024810184905260448101829052606481018390526084016107c8565b505b50600101610efd565b505050806001019050610e05565b50505050806001019050610d93565b50610fef8383611c28565b505050565b333014611014576040516306e34e6560e31b815260040160405180910390fd5b6040805160008082526020820190925281611051565b604080518082019091526000808252602082015281526020019060019003908161102a5790505b5060a08701515190915015611087576110848660a001518760200151886060015189600001516020015189898989611dae565b90505b6040805160a081018252875151815287516020908101516001600160401b03168183015288015181830152908701516060820152608081018290526005546001600160a01b0316801561117a576040516308d450a160e01b81526001600160a01b038216906308d450a1906111009085906004016157e4565b600060405180830381600087803b15801561111a57600080fd5b505af192505050801561112b575060015b61117a573d808015611159576040519150601f19603f3d011682016040523d82523d6000602084013e61115e565b606091505b50806040516309c2532560e01b81526004016107c89190614051565b60408801515115801561118f57506080880151155b806111a6575060608801516001600160a01b03163b155b806111cd575060608801516111cb906001600160a01b03166385572ffb60e01b611f5f565b155b156111da575050506112a4565b87516020908101516001600160401b03166000908152600890915260408082205460808b015160608c01519251633cf9798360e01b815284936001600160a01b0390931692633cf979839261123892899261138892916004016157f7565b6000604051808303816000875af1158015611257573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261127f9190810190615833565b509150915081610a4057806040516302a35ba360e21b81526004016107c89190614051565b5050505050565b6001546001600160a01b031633146113055760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016107c8565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61136461162a565b61052f81611f7b565b6113b06040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561145957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161143b575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156114bb57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161149d575b5050505050815250509050919050565b60408051608080820183526000808352602080840182905283850182905260608085018190526001600160401b03878116845260088352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611557906154f5565b80601f0160208091040260200160405190810160405280929190818152602001828054611583906154f5565b80156114bb5780601f106115a5576101008083540402835291602001916114bb565b820191906000526020600020905b8154815290600101906020018083116115b357505050919092525091949350505050565b6115df61162a565b61052f81612080565b6115f061162a565b60005b81518110156116265761161e828281518110611611576116116153f3565b6020026020010151612129565b6001016115f3565b5050565b6000546001600160a01b031633146116845760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016107c8565b565b60005b81518110156116265760008282815181106116a6576116a66153f3565b60200260200101519050600081602001519050806001600160401b03166000036116e35760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b031661170b576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b03811660009081526008602052604090206060830151600182018054611737906154f5565b905060000361179957815467ffffffffffffffff60a81b1916600160a81b1782556040516001600160401b03841681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a16117d6565b8154600160a81b90046001600160401b03166001146117d657604051632105803760e11b81526001600160401b03841660048201526024016107c8565b8051158061180b5750604080516000602082015201604051602081830303815290604052805190602001208180519060200120145b15611829576040516342bcdf7f60e11b815260040160405180910390fd5b600182016118378282615918565b506040840151825485516001600160a01b03166001600160a01b0319921515600160a01b029290921674ffffffffffffffffffffffffffffffffffffffffff199091161717825561189260066001600160401b038516612453565b50826001600160401b03167f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b836040516118cc91906159d7565b60405180910390a250505050806001019050611689565b6001600160401b03811660009081526008602052604081208054600160a01b900460ff16610d5f5760405163ed053c5960e01b81526001600160401b03841660048201526024016107c8565b60ff8781166000908152600260209081526040808320815160808101835281548152600190910154808616938201939093526101008304851691810191909152620100009091049092161515606083015287359061198e8760a4615a25565b90508260600151156119d65784516119a790602061572c565b86516119b490602061572c565b6119bf9060a0615a25565b6119c99190615a25565b6119d39082615a25565b90505b3681146119ff57604051638e1192e160e01b8152600481018290523660248201526044016107c8565b5081518114611a2e5781516040516324f7d61360e21b81526004810191909152602481018290526044016107c8565b611a36611d46565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611a8457611a84614321565b6002811115611a9557611a95614321565b9052509050600281602001516002811115611ab257611ab2614321565b148015611b065750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611aee57611aee6153f3565b6000918252602090912001546001600160a01b031633145b611b2357604051631b41e11d60e31b815260040160405180910390fd5b50816060015115611bd3576020820151611b3e906001615a38565b60ff16855114611b61576040516371253a2560e01b815260040160405180910390fd5b8351855114611b835760405163a75d88af60e01b815260040160405180910390fd5b60008787604051611b95929190615a51565b604051908190038120611bac918b90602001615a61565b604051602081830303815290604052805190602001209050611bd18a8288888861245f565b505b6040805182815260208a8101356001600160401b03169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b8151600003611c4a5760405163c2e5347d60e01b815260040160405180910390fd5b80516040805160008082526020820190925291159181611c8d565b604080518082019091526000815260606020820152815260200190600190039081611c655790505b50905060005b84518110156112a457611ce3858281518110611cb157611cb16153f3565b602002602001015184611cdd57858381518110611cd057611cd06153f3565b602002602001015161261c565b8361261c565b600101611c93565b6000610d5f825490565b6000610d5c8383612f2d565b6001600160401b038216600090815260096020526040812081611d25608085615a75565b6001600160401b031681526020810191909152604001600020549392505050565b467f00000000000000000000000000000000000000000000000000000000000000001461168457604051630f01ce8560e01b81527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016107c8565b606088516001600160401b03811115611dc957611dc9613d25565b604051908082528060200260200182016040528015611e0e57816020015b6040805180820190915260008082526020820152815260200190600190039081611de75790505b509050811560005b8a51811015611f515781611eae57848482818110611e3657611e366153f3565b9050602002016020810190611e4b9190615a9b565b63ffffffff1615611eae57848482818110611e6857611e686153f3565b9050602002016020810190611e7d9190615a9b565b8b8281518110611e8f57611e8f6153f3565b60200260200101516040019063ffffffff16908163ffffffff16815250505b611f2c8b8281518110611ec357611ec36153f3565b60200260200101518b8b8b8b8b87818110611ee057611ee06153f3565b9050602002810190611ef29190615ab6565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612f5792505050565b838281518110611f3e57611f3e6153f3565b6020908102919091010152600101611e16565b505098975050505050505050565b6000611f6a83613237565b8015610d5c5750610d5c838361326a565b80516001600160a01b0316611fa3576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516001600160a01b039889167fffffffffffffffff0000000000000000000000000000000000000000000000009097168717600160a01b63ffffffff958616021760ff60c01b1916600160c01b911515919091021790965560608089018051600580546001600160a01b031916918b169190911790558251968752935190921693850193909352935115159183019190915251909216908201527fcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee9060800160405180910390a150565b336001600160a01b038216036120d85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016107c8565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003612154576000604051631b3fab5160e11b81526004016107c89190615afc565b60208082015160ff808216600090815260029093526040832060018101549293909283921690036121a5576060840151600182018054911515620100000262ff0000199092169190911790556121e1565b6060840151600182015460ff62010000909104161515901515146121e1576040516321fd80df60e21b815260ff841660048201526024016107c8565b60a08401518051610100101561220d576001604051631b3fab5160e11b81526004016107c89190615afc565b8051600003612232576005604051631b3fab5160e11b81526004016107c89190615afc565b612298848460030180548060200260200160405190810160405280929190818152602001828054801561228e57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612270575b50505050506132f4565b8460600151156123c857612306848460020180548060200260200160405190810160405280929190818152602001828054801561228e576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122705750505050506132f4565b608085015180516101001015612332576002604051631b3fab5160e11b81526004016107c89190615afc565b6040860151612342906003615b16565b60ff16815111612368576003604051631b3fab5160e11b81526004016107c89190615afc565b81518151101561238e576001604051631b3fab5160e11b81526004016107c89190615afc565b805160018401805461ff00191661010060ff8416021790556123b99060028601906020840190613cab565b506123c68582600161335d565b505b6123d48482600261335d565b80516123e99060038501906020840190613cab565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124429389939260028a01929190615b32565b60405180910390a16112a4846134b8565b6000610d5c838361353b565b8251600090815b81811015612612576000600188868460208110612485576124856153f3565b61249291901a601b615a38565b8985815181106124a4576124a46153f3565b60200260200101518986815181106124be576124be6153f3565b6020026020010151604051600081526020016040526040516124fc949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561251e573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b0385168352815285822085870190965285548084168652939750909550929392840191610100900416600281111561257f5761257f614321565b600281111561259057612590614321565b90525090506001816020015160028111156125ad576125ad614321565b146125cb57604051636518c33d60e11b815260040160405180910390fd5b8051600160ff9091161b8516156125f557604051633d9ef1f160e21b815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612466565b5050505050505050565b81518151604051632cbc26bb60e01b8152608083901b67ffffffffffffffff60801b166004820152901515907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa158015612699573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126bd91906154d8565b1561272e5780156126ec57604051637edeb53960e11b81526001600160401b03831660048201526024016107c8565b6040516001600160401b03831681527faab522ed53d887e56ed53dd37398a01aeef6a58e0fa77c2173beb9512d8949339060200160405180910390a150505050565b6000612739836118e3565b6001018054612747906154f5565b80601f0160208091040260200160405190810160405280929190818152602001828054612773906154f5565b80156127c05780601f10612795576101008083540402835291602001916127c0565b820191906000526020600020905b8154815290600101906020018083116127a357829003601f168201915b505050602088015151929350505060008190036127fe57855160405163676cf24b60e11b81526001600160401b0390911660048201526024016107c8565b8560400151518114612823576040516357e0e08360e01b815260040160405180910390fd5b6000816001600160401b0381111561283d5761283d613d25565b604051908082528060200260200182016040528015612866578160200160208202803683370190505b50905060005b82811015612a0a5760008860200151828151811061288c5761288c6153f3565b602002602001015190507f00000000000000000000000000000000000000000000000000000000000000006001600160401b03168160000151604001516001600160401b0316146129035780516040908101519051631c21951160e11b81526001600160401b0390911660048201526024016107c8565b866001600160401b03168160000151602001516001600160401b03161461295757805160200151604051636c95f1eb60e01b81526001600160401b03808a16600483015290911660248201526044016107c8565b6129e4817f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f83600001516020015184600001516040015189805190602001206040516020016129c994939291909384526001600160401b03928316602085015291166040830152606082015260800190565b6040516020818303038152906040528051906020012061358a565b8383815181106129f6576129f66153f3565b60209081029190910101525060010161286c565b506000612a2186838a606001518b60800151613692565b905080600003612a4f57604051633ee8bd3f60e11b81526001600160401b03871660048201526024016107c8565b60005b83811015612f225760005a905060008a602001518381518110612a7757612a776153f3565b602002602001015190506000612a958a836000015160600151610d10565b90506000816003811115612aab57612aab614321565b1480612ac857506003816003811115612ac657612ac6614321565b145b612b1e57815160600151604080516001600160401b03808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c910160405180910390a1505050612f1a565b60608915612bfd578b8581518110612b3857612b386153f3565b6020908102919091018101510151600454909150600090600160a01b900463ffffffff16612b6688426156dd565b1190508080612b8657506003836003811115612b8457612b84614321565b145b612bae576040516354e7e43160e11b81526001600160401b038d1660048201526024016107c8565b8c8681518110612bc057612bc06153f3565b602002602001015160000151600014612bf7578c8681518110612be557612be56153f3565b60209081029190910101515160808501525b50612c69565b6000826003811115612c1157612c11614321565b14612c6957825160600151604080516001600160401b03808f16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910160405180910390a150505050612f1a565b8251608001516001600160401b031615612d42576000826003811115612c9157612c91614321565b03612d42577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e0e03cae8c85600001516080015186602001516040518463ffffffff1660e01b8152600401612cf293929190615be4565b6020604051808303816000875af1158015612d11573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d3591906154d8565b612d425750505050612f1a565b60008d604001518681518110612d5a57612d5a6153f3565b6020026020010151905080518460a001515114612da457835160600151604051631cfe6d8b60e01b81526001600160401b03808f16600483015290911660248201526044016107c8565b612db88c85600001516060015160016136cf565b600080612dc6868486613774565b91509150612ddd8e876000015160600151846136cf565b8c15612e34576003826003811115612df757612df7614321565b03612e34576000856003811115612e1057612e10614321565b14612e3457855151604051632b11b8d960e01b81526107c891908390600401615c10565b6002826003811115612e4857612e48614321565b14612e8d576003826003811115612e6157612e61614321565b14612e8d578d866000015160600151836040516349362d1f60e11b81526004016107c893929190615c29565b8560000151600001518660000151606001516001600160401b03168f6001600160401b03167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8c81518110612ee557612ee56153f3565b602002602001015186865a612efa908f6156dd565b604051612f0a9493929190615c4e565b60405180910390a4505050505050505b600101612a52565b505050505050505050565b6000826000018281548110612f4457612f446153f3565b9060005260206000200154905092915050565b6040805180820190915260008082526020820152602086015160405163bbe4f6db60e01b81526001600160a01b0380831660048301526000917f00000000000000000000000000000000000000000000000000000000000000009091169063bbe4f6db90602401602060405180830381865afa158015612fdb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fff9190615c85565b90506001600160a01b038116158061302e575061302c6001600160a01b03821663aff2afbf60e01b611f5f565b155b156130575760405163ae9b4ce960e01b81526001600160a01b03821660048201526024016107c8565b60008061306f88858c6040015163ffffffff16613828565b9150915060008060006131226040518061010001604052808e81526020018c6001600160401b031681526020018d6001600160a01b031681526020018f608001518152602001896001600160a01b031681526020018f6000015181526020018f6060015181526020018b8152506040516024016130ec9190615ca2565b60408051601f198184030181529190526020810180516001600160e01b0316633907753760e01b1790528786611388608461390b565b92509250925082613148578160405163e1cd550960e01b81526004016107c89190614051565b8151602014613177578151604051631e3be00960e21b81526020600482015260248101919091526044016107c8565b60008280602001905181019061318d9190615d6e565b9050866001600160a01b03168c6001600160a01b0316146132095760006131be8d8a6131b9868a6156dd565b613828565b509050868110806131d85750816131d588836156dd565b14155b156132075760405163a966e21f60e01b81526004810183905260248101889052604481018290526064016107c8565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b600061324a826301ffc9a760e01b61326a565b8015610d5f5750613263826001600160e01b031961326a565b1592915050565b6040516001600160e01b031982166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03166301ffc9a760e01b178152825192935060009283928392909183918a617530fa92503d915060005190508280156132dd575060208210155b80156132e95750600081115b979650505050505050565b60005b8151811015610fef5760ff831660009081526003602052604081208351909190849084908110613329576133296153f3565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff191690556001016132f7565b60005b8251811015610aaf57600083828151811061337d5761337d6153f3565b602002602001015190506000600281111561339a5761339a614321565b60ff80871660009081526003602090815260408083206001600160a01b038716845290915290205461010090041660028111156133d9576133d9614321565b146133fa576004604051631b3fab5160e11b81526004016107c89190615afc565b6001600160a01b0381166134215760405163d6c62c9b60e01b815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561344757613447614321565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff1916176101008360028111156134a4576134a4614321565b021790555090505050806001019050613360565b60ff8181166000818152600260205260409020600101546201000090049091169061351057806134fb576040516317bd8dd160e11b815260040160405180910390fd5b600b805467ffffffffffffffff191690555050565b60001960ff831601611626578015611626576040516307b8c74d60e51b815260040160405180910390fd5b600081815260018301602052604081205461358257508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d5f565b506000610d5f565b8151805160608085015190830151608080870151940151604051600095869588956135ee95919490939192916020019485526001600160a01b039390931660208501526001600160401b039182166040850152606084015216608082015260a00190565b604051602081830303815290604052805190602001208560200151805190602001208660400151805190602001208760a001516040516020016136319190615e28565b60408051601f198184030181528282528051602091820120908301979097528101949094526060840192909252608083015260a082015260c081019190915260e0015b60405160208183030381529060405280519060200120905092915050565b6000806136a08585856139e5565b6001600160401b0387166000908152600a6020908152604080832093835292905220549150505b949350505050565b600060026136de608085615706565b6001600160401b03166136f1919061572c565b905060006136ff8585611d01565b90508161370e600160046156dd565b901b19168183600381111561372557613725614321565b6001600160401b03871660009081526009602052604081209190921b92909217918291613753608088615a75565b6001600160401b031681526020810191909152604001600020555050505050565b604051630304c3e160e51b815260009060609030906360987c20906137a190889088908890600401615ebf565b600060405180830381600087803b1580156137bb57600080fd5b505af19250505080156137cc575060015b61380b573d8080156137fa576040519150601f19603f3d011682016040523d82523d6000602084013e6137ff565b606091505b50600392509050613820565b50506040805160208101909152600081526002905b935093915050565b60008060008060006138898860405160240161385391906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166370a0823160e01b1790528888611388608461390b565b925092509250826138af578160405163e1cd550960e01b81526004016107c89190614051565b60208251146138de578151604051631e3be00960e21b81526020600482015260248101919091526044016107c8565b818060200190518101906138f29190615d6e565b6138fc82886156dd565b94509450505050935093915050565b6000606060008361ffff166001600160401b0381111561392d5761392d613d25565b6040519080825280601f01601f191660200182016040528015613957576020820181803683370190505b509150863b6139715763030ed58f60e21b60005260046000fd5b5a8581101561398b57632be8ca8b60e21b60005260046000fd5b85900360408104810387106139ab576337c3be2960e01b60005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d848111156139ce5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613a0d57604051630469ac9960e21b815260040160405180910390fd5b6101018211801590613a2157506101018111155b613a3e576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613a68576040516309bde33960e01b815260040160405180910390fd5b80600003613a955786600081518110613a8357613a836153f3565b60200260200101519350505050613c63565b6000816001600160401b03811115613aaf57613aaf613d25565b604051908082528060200260200182016040528015613ad8578160200160208202803683370190505b50905060008080805b85811015613c025760006001821b8b811603613b3c5788851015613b25578c5160018601958e918110613b1657613b166153f3565b60200260200101519050613b5e565b8551600185019487918110613b1657613b166153f3565b8b5160018401938d918110613b5357613b536153f3565b602002602001015190505b600089861015613b8e578d5160018701968f918110613b7f57613b7f6153f3565b60200260200101519050613bb0565b8651600186019588918110613ba557613ba56153f3565b602002602001015190505b82851115613bd1576040516309bde33960e01b815260040160405180910390fd5b613bdb8282613c6a565b878481518110613bed57613bed6153f3565b60209081029190910101525050600101613ae1565b506001850382148015613c1457508683145b8015613c1f57508581145b613c3c576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613c5157613c516153f3565b60200260200101519750505050505050505b9392505050565b6000818310613c8257613c7d8284613c88565b610d5c565b610d5c83835b604080516001602082015290810183905260608101829052600090608001613674565b828054828255906000526020600020908101928215613d00579160200282015b82811115613d0057825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613ccb565b50613d0c929150613d10565b5090565b5b80821115613d0c5760008155600101613d11565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715613d5d57613d5d613d25565b60405290565b60405160a081016001600160401b0381118282101715613d5d57613d5d613d25565b60405160c081016001600160401b0381118282101715613d5d57613d5d613d25565b604080519081016001600160401b0381118282101715613d5d57613d5d613d25565b604051601f8201601f191681016001600160401b0381118282101715613df157613df1613d25565b604052919050565b60006001600160401b03821115613e1257613e12613d25565b5060051b60200190565b6001600160a01b038116811461052f57600080fd5b80356001600160401b0381168114613e4857600080fd5b919050565b801515811461052f57600080fd5b8035613e4881613e4d565b60006001600160401b03821115613e7f57613e7f613d25565b50601f01601f191660200190565b600082601f830112613e9e57600080fd5b8135613eb1613eac82613e66565b613dc9565b818152846020838601011115613ec657600080fd5b816020850160208301376000918101602001919091529392505050565b60006020808385031215613ef657600080fd5b82356001600160401b0380821115613f0d57600080fd5b818501915085601f830112613f2157600080fd5b8135613f2f613eac82613df9565b81815260059190911b83018401908481019088831115613f4e57600080fd5b8585015b83811015613ff457803585811115613f6a5760008081fd5b86016080818c03601f1901811315613f825760008081fd5b613f8a613d3b565b89830135613f9781613e1c565b81526040613fa6848201613e31565b8b830152606080850135613fb981613e4d565b83830152928401359289841115613fd257600091508182fd5b613fe08f8d86880101613e8d565b908301525085525050918601918601613f52565b5098975050505050505050565b60005b8381101561401c578181015183820152602001614004565b50506000910152565b6000815180845261403d816020860160208601614001565b601f01601f19169290920160200192915050565b602081526000610d5c6020830184614025565b8060608101831015610d5f57600080fd5b60008083601f84011261408757600080fd5b5081356001600160401b0381111561409e57600080fd5b6020830191508360208285010111156140b657600080fd5b9250929050565b60008083601f8401126140cf57600080fd5b5081356001600160401b038111156140e657600080fd5b6020830191508360208260051b85010111156140b657600080fd5b60008060008060008060008060e0898b03121561411d57600080fd5b6141278a8a614064565b975060608901356001600160401b038082111561414357600080fd5b61414f8c838d01614075565b909950975060808b013591508082111561416857600080fd5b6141748c838d016140bd565b909750955060a08b013591508082111561418d57600080fd5b5061419a8b828c016140bd565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156141c857600080fd5b6141d28585614064565b925060608401356001600160401b038111156141ed57600080fd5b6141f986828701614075565b9497909650939450505050565b6001600160a01b0381511682526020810151151560208301526001600160401b03604082015116604083015260006060820151608060608501526136c76080850182614025565b604080825283519082018190526000906020906060840190828701845b8281101561428f5781516001600160401b03168452928401929084019060010161426a565b50505083810382850152845180825282820190600581901b8301840187850160005b838110156142df57601f198684030185526142cd838351614206565b948701949250908601906001016142b1565b50909998505050505050505050565b6000806040838503121561430157600080fd5b61430a83613e31565b915061431860208401613e31565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b6004811061434757614347614321565b9052565b60208101610d5f8284614337565b600060a0828403121561436b57600080fd5b614373613d63565b90508135815261438560208301613e31565b602082015261439660408301613e31565b60408201526143a760608301613e31565b60608201526143b860808301613e31565b608082015292915050565b8035613e4881613e1c565b803563ffffffff81168114613e4857600080fd5b600082601f8301126143f357600080fd5b81356020614403613eac83613df9565b82815260059290921b8401810191818101908684111561442257600080fd5b8286015b848110156144f25780356001600160401b03808211156144465760008081fd5b9088019060a0828b03601f19018113156144605760008081fd5b614468613d63565b878401358381111561447a5760008081fd5b6144888d8a83880101613e8d565b82525060408085013561449a81613e1c565b828a015260606144ab8682016143ce565b828401526080915081860135858111156144c55760008081fd5b6144d38f8c838a0101613e8d565b9184019190915250919093013590830152508352918301918301614426565b509695505050505050565b6000610140828403121561451057600080fd5b614518613d85565b90506145248383614359565b815260a08201356001600160401b038082111561454057600080fd5b61454c85838601613e8d565b602084015260c084013591508082111561456557600080fd5b61457185838601613e8d565b604084015261458260e085016143c3565b606084015261010084013560808401526101208401359150808211156145a757600080fd5b506145b4848285016143e2565b60a08301525092915050565b600082601f8301126145d157600080fd5b813560206145e1613eac83613df9565b82815260059290921b8401810191818101908684111561460057600080fd5b8286015b848110156144f25780356001600160401b038111156146235760008081fd5b6146318986838b01016144fd565b845250918301918301614604565b600082601f83011261465057600080fd5b81356020614660613eac83613df9565b82815260059290921b8401810191818101908684111561467f57600080fd5b8286015b848110156144f25780356001600160401b03808211156146a257600080fd5b818901915089603f8301126146b657600080fd5b858201356146c6613eac82613df9565b81815260059190911b830160400190878101908c8311156146e657600080fd5b604085015b8381101561471f5780358581111561470257600080fd5b6147118f6040838a0101613e8d565b8452509189019189016146eb565b50875250505092840192508301614683565b600082601f83011261474257600080fd5b81356020614752613eac83613df9565b8083825260208201915060208460051b87010193508684111561477457600080fd5b602086015b848110156144f25780358352918301918301614779565b600082601f8301126147a157600080fd5b813560206147b1613eac83613df9565b82815260059290921b840181019181810190868411156147d057600080fd5b8286015b848110156144f25780356001600160401b03808211156147f45760008081fd5b9088019060a0828b03601f190181131561480e5760008081fd5b614816613d63565b614821888501613e31565b8152604080850135848111156148375760008081fd5b6148458e8b838901016145c0565b8a840152506060808601358581111561485e5760008081fd5b61486c8f8c838a010161463f565b83850152506080915081860135858111156148875760008081fd5b6148958f8c838a0101614731565b91840191909152509190930135908301525083529183019183016147d4565b600080604083850312156148c757600080fd5b6001600160401b03833511156148dc57600080fd5b6148e98484358501614790565b91506001600160401b036020840135111561490357600080fd5b6020830135830184601f82011261491957600080fd5b614926613eac8235613df9565b81358082526020808301929160051b84010187101561494457600080fd5b602083015b6020843560051b850101811015614aea576001600160401b038135111561496f57600080fd5b87603f82358601011261498157600080fd5b614994613eac6020833587010135613df9565b81358501602081810135808452908301929160059190911b016040018a10156149bc57600080fd5b604083358701015b83358701602081013560051b01604001811015614ada576001600160401b03813511156149f057600080fd5b833587018135016040818d03603f19011215614a0b57600080fd5b614a13613da7565b604082013581526001600160401b0360608301351115614a3257600080fd5b8c605f606084013584010112614a4757600080fd5b6040606083013583010135614a5e613eac82613df9565b808282526020820191508f60608460051b6060880135880101011115614a8357600080fd5b6060808601358601015b60608460051b606088013588010101811015614aba57614aac816143ce565b835260209283019201614a8d565b5080602085015250505080855250506020830192506020810190506149c4565b5084525060209283019201614949565b508093505050509250929050565b600080600080600060608688031215614b1057600080fd5b85356001600160401b0380821115614b2757600080fd5b614b3389838a016144fd565b96506020880135915080821115614b4957600080fd5b614b5589838a016140bd565b90965094506040880135915080821115614b6e57600080fd5b50614b7b888289016140bd565b969995985093965092949392505050565b600060808284031215614b9e57600080fd5b614ba6613d3b565b8235614bb181613e1c565b8152614bbf602084016143ce565b60208201526040830135614bd281613e4d565b60408201526060830135614be581613e1c565b60608201529392505050565b600060208284031215614c0357600080fd5b81356001600160401b03811115614c1957600080fd5b820160a08185031215613c6357600080fd5b803560ff81168114613e4857600080fd5b600060208284031215614c4e57600080fd5b610d5c82614c2b565b60008151808452602080850194506020840160005b83811015614c915781516001600160a01b031687529582019590820190600101614c6c565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614ceb60e0840182614c57565b90506040840151601f198483030160c0850152614d088282614c57565b95945050505050565b60008060408385031215614d2457600080fd5b614d2d83613e31565b946020939093013593505050565b600060208284031215614d4d57600080fd5b610d5c82613e31565b602081526000610d5c6020830184614206565b600060208284031215614d7b57600080fd5b8135613c6381613e1c565b600082601f830112614d9757600080fd5b81356020614da7613eac83613df9565b8083825260208201915060208460051b870101935086841115614dc957600080fd5b602086015b848110156144f2578035614de181613e1c565b8352918301918301614dce565b60006020808385031215614e0157600080fd5b82356001600160401b0380821115614e1857600080fd5b818501915085601f830112614e2c57600080fd5b8135614e3a613eac82613df9565b81815260059190911b83018401908481019088831115614e5957600080fd5b8585015b83811015613ff457803585811115614e7457600080fd5b860160c0818c03601f19011215614e8b5760008081fd5b614e93613d85565b8882013581526040614ea6818401614c2b565b8a8301526060614eb7818501614c2b565b8284015260809150614eca828501613e5b565b9083015260a08381013589811115614ee25760008081fd5b614ef08f8d83880101614d86565b838501525060c0840135915088821115614f0a5760008081fd5b614f188e8c84870101614d86565b9083015250845250918601918601614e5d565b80356001600160e01b0381168114613e4857600080fd5b600082601f830112614f5357600080fd5b81356020614f63613eac83613df9565b82815260069290921b84018101918181019086841115614f8257600080fd5b8286015b848110156144f25760408189031215614f9f5760008081fd5b614fa7613da7565b614fb082613e31565b8152614fbd858301614f2b565b81860152835291830191604001614f86565b600082601f830112614fe057600080fd5b81356020614ff0613eac83613df9565b82815260059290921b8401810191818101908684111561500f57600080fd5b8286015b848110156144f25780356001600160401b03808211156150335760008081fd5b9088019060a0828b03601f190181131561504d5760008081fd5b615055613d63565b615060888501613e31565b8152604080850135848111156150765760008081fd5b6150848e8b83890101613e8d565b8a8401525060609350615098848601613e31565b9082015260806150a9858201613e31565b93820193909352920135908201528352918301918301615013565b600082601f8301126150d557600080fd5b813560206150e5613eac83613df9565b82815260069290921b8401810191818101908684111561510457600080fd5b8286015b848110156144f257604081890312156151215760008081fd5b615129613da7565b813581528482013585820152835291830191604001615108565b6000602080838503121561515657600080fd5b82356001600160401b038082111561516d57600080fd5b908401906080828703121561518157600080fd5b615189613d3b565b82358281111561519857600080fd5b830160408189038113156151ab57600080fd5b6151b3613da7565b8235858111156151c257600080fd5b8301601f81018b136151d357600080fd5b80356151e1613eac82613df9565b81815260069190911b8201890190898101908d83111561520057600080fd5b928a01925b828410156152505785848f03121561521d5760008081fd5b615225613da7565b843561523081613e1c565b815261523d858d01614f2b565b818d0152825292850192908a0190615205565b84525050508287013591508482111561526857600080fd5b6152748a838501614f42565b8188015283525050828401358281111561528d57600080fd5b61529988828601614fcf565b858301525060408301359350818411156152b257600080fd5b6152be878585016150c4565b6040820152606083013560608201528094505050505092915050565b600082825180855260208086019550808260051b84010181860160005b8481101561536b57601f19868403018952815160a06001600160401b0380835116865286830151828888015261532f83880182614025565b604085810151841690890152606080860151909316928801929092525060809283015192909501919091525097830197908301906001016152f7565b5090979650505050505050565b6001600160a01b03851681526000602060808184015261539b60808401876152da565b83810360408581019190915286518083528388019284019060005b818110156153db578451805184528601518684015293850193918301916001016153b6565b50508094505050505082606083015295945050505050565b634e487b7160e01b600052603260045260246000fd5b805160408084528151848201819052600092602091908201906060870190855b8181101561546057835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615429565b50508583015187820388850152805180835290840192506000918401905b808310156154b957835180516001600160401b031683528501516001600160e01b03168583015292840192600192909201919085019061547e565b50979650505050505050565b602081526000610d5c6020830184615409565b6000602082840312156154ea57600080fd5b8151613c6381613e4d565b600181811c9082168061550957607f821691505b60208210810361552957634e487b7160e01b600052602260045260246000fd5b50919050565b600080835461553d816154f5565b60018281168015615555576001811461556a57615599565b60ff1984168752821515830287019450615599565b8760005260208060002060005b858110156155905781548a820152908401908201615577565b50505082870194505b50929695505050505050565b600081546155b2816154f5565b8085526020600183811680156155cf57600181146155e957615617565b60ff1985168884015283151560051b880183019550615617565b866000528260002060005b8581101561560f5781548a82018601529083019084016155f4565b890184019650505b505050505092915050565b6040815260006156356040830185614025565b8281036020840152614d0881856155a5565b634e487b7160e01b600052601160045260246000fd5b6001600160401b0381811683821601908082111561567d5761567d615647565b5092915050565b60408152600061569760408301856152da565b8281036020840152614d088185615409565b6000602082840312156156bb57600080fd5b81356001600160401b038111156156d157600080fd5b6136c784828501614790565b81810381811115610d5f57610d5f615647565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680615720576157206156f0565b92169190910692915050565b8082028115828204841417610d5f57610d5f615647565b80518252600060206001600160401b0381840151168185015260408084015160a0604087015261577660a0870182614025565b90506060850151868203606088015261578f8282614025565b608087810151898303918a01919091528051808352908601935060009250908501905b808310156154b957835180516001600160a01b03168352860151868301529285019260019290920191908401906157b2565b602081526000610d5c6020830184615743565b60808152600061580a6080830187615743565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b60008060006060848603121561584857600080fd5b835161585381613e4d565b60208501519093506001600160401b0381111561586f57600080fd5b8401601f8101861361588057600080fd5b805161588e613eac82613e66565b8181528760208385010111156158a357600080fd5b6158b4826020830160208601614001565b809450505050604084015190509250925092565b601f821115610fef576000816000526020600020601f850160051c810160208610156158f15750805b601f850160051c820191505b81811015615910578281556001016158fd565b505050505050565b81516001600160401b0381111561593157615931613d25565b6159458161593f84546154f5565b846158c8565b602080601f83116001811461597a57600084156159625750858301515b600019600386901b1c1916600185901b178555615910565b600085815260208120601f198616915b828110156159a95788860151825594840194600190910190840161598a565b50858210156159c75787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082546001600160a01b038116602084015260ff8160a01c16151560408401526001600160401b038160a81c16606084015250608080830152610d5c60a08301600185016155a5565b80820180821115610d5f57610d5f615647565b60ff8181168382160190811115610d5f57610d5f615647565b8183823760009101908152919050565b828152606082602083013760800192915050565b60006001600160401b0380841680615a8f57615a8f6156f0565b92169190910492915050565b600060208284031215615aad57600080fd5b610d5c826143ce565b6000808335601e19843603018112615acd57600080fd5b8301803591506001600160401b03821115615ae757600080fd5b6020019150368190038213156140b657600080fd5b6020810160068310615b1057615b10614321565b91905290565b60ff818116838216029081169081811461567d5761567d615647565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615b8a5784546001600160a01b031683526001948501949284019201615b65565b50508481036060860152865180825290820192508187019060005b81811015615bca5782516001600160a01b031685529383019391830191600101615ba5565b50505060ff851660808501525090505b9695505050505050565b60006001600160401b03808616835280851660208401525060606040830152614d086060830184614025565b8281526040602082015260006136c76040830184614025565b6001600160401b03848116825283166020820152606081016136c76040830184614337565b848152615c5e6020820185614337565b608060408201526000615c746080830185614025565b905082606083015295945050505050565b600060208284031215615c9757600080fd5b8151613c6381613e1c565b6020815260008251610100806020850152615cc1610120850183614025565b91506020850151615cdd60408601826001600160401b03169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615d1760a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615d348483614025565b935060c08701519150808685030160e0870152615d518483614025565b935060e0870151915080868503018387015250615bda8382614025565b600060208284031215615d8057600080fd5b5051919050565b600082825180855260208086019550808260051b84010181860160005b8481101561536b57601f19868403018952815160a08151818652615dca82870182614025565b9150506001600160a01b03868301511686860152604063ffffffff8184015116818701525060608083015186830382880152615e068382614025565b6080948501519790940196909652505098840198925090830190600101615da4565b602081526000610d5c6020830184615d87565b60008282518085526020808601955060208260051b8401016020860160005b8481101561536b57601f19868403018952615e76838351614025565b98840198925090830190600101615e5a565b60008151808452602080850194506020840160005b83811015614c9157815163ffffffff1687529582019590820190600101615e9d565b60608152600084518051606084015260208101516001600160401b0380821660808601528060408401511660a08601528060608401511660c08601528060808401511660e0860152505050602085015161014080610100850152615f276101a0850183614025565b91506040870151605f198086850301610120870152615f468483614025565b935060608901519150615f63838701836001600160a01b03169052565b608089015161016087015260a0890151925080868503016101808701525050615f8c8282615d87565b9150508281036020840152615fa18186615e3b565b90508281036040840152615bda8185615e8856fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.ABI @@ -2430,7 +2431,7 @@ func (OffRampConfigSet) Topic() common.Hash { } func (OffRampDynamicConfigSet) Topic() common.Hash { - return common.HexToHash("0xa1c15688cb2c24508e158f6942b9276c6f3028a85e1af8cf3fff0c3ff3d5fc8d") + return common.HexToHash("0xcbb53bda7106a610de67df506ac86b65c44d5afac0fd2b11070dc2d61a6f2dee") } func (OffRampExecutionStateChanged) Topic() common.Hash { diff --git a/core/gethwrappers/ccip/generated/rmn_home/rmn_home.go b/core/gethwrappers/ccip/generated/rmn_home/rmn_home.go index 18f1ca488b3..5b297623ae7 100644 --- a/core/gethwrappers/ccip/generated/rmn_home/rmn_home.go +++ b/core/gethwrappers/ccip/generated/rmn_home/rmn_home.go @@ -42,7 +42,7 @@ type RMNHomeNode struct { type RMNHomeSourceChain struct { ChainSelector uint64 - MinObservers uint64 + F uint64 ObserverNodesBitmap *big.Int } @@ -59,8 +59,8 @@ type RMNHomeVersionedConfig struct { } var RMNHomeMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expectedConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"gotConfigDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"DigestNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOffchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePeerId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSourceChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinObserversTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOpStateTransitionNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsNodesLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsObserverNodeIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RevokingZeroDigestNotAllowed\",\"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\":[{\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minObservers\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minObservers\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"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\":[],\"name\":\"getActiveDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minObservers\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"activeConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minObservers\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"candidateConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCandidateDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minObservers\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"ok\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfigDigests\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"activeConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"candidateConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestToPromote\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digestToRevoke\",\"type\":\"bytes32\"}],\"name\":\"promoteCandidateAndRevokeActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"revokeCandidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minObservers\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digestToOverwrite\",\"type\":\"bytes32\"}],\"name\":\"setCandidate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"newConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"minObservers\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"newDynamicConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"currentDigest\",\"type\":\"bytes32\"}],\"name\":\"setDynamicConfig\",\"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\":\"view\",\"type\":\"function\"}]", - Bin: "0x6080604052600e80546001600160401b03191690553480156200002157600080fd5b503380600081620000795760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000ac57620000ac81620000b5565b50505062000160565b336001600160a01b038216036200010f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000070565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6128f180620001706000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636dd5b69d1161008c5780638c76967f116100665780638c76967f146101d45780638da5cb5b146101e7578063f2fde38b1461020f578063fb4022d41461022257600080fd5b80636dd5b69d14610196578063736be802146101b757806379ba5097146101cc57600080fd5b80633567e6b4116100bd5780633567e6b41461015b57806338354c5c14610178578063635079561461018057600080fd5b8063118dbac5146100e4578063123e65db1461010a578063181f5a7714610112575b600080fd5b6100f76100f23660046118e4565b610235565b6040519081526020015b60405180910390f35b6100f7610418565b61014e6040518060400160405280601181526020017f524d4e486f6d6520312e362e302d64657600000000000000000000000000000081525081565b60405161010191906119bf565b610163610457565b60408051928352602083019190915201610101565b6100f76104d8565b6101886104f7565b604051610101929190611b2a565b6101a96101a4366004611b4f565b610a79565b604051610101929190611b68565b6101ca6101c5366004611b8c565b610d5d565b005b6101ca610e79565b6101ca6101e2366004611bd1565b610f76565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b6101ca61021d366004611bf3565b611189565b6101ca610230366004611b4f565b61119d565b600061023f6112b9565b61025961024b85611da5565b61025485611ea6565b61133c565b60006102636104d8565b90508281146102ad576040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044015b60405180910390fd5b80156102df5760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b600e80546000919082906102f89063ffffffff16611fbb565b91906101000a81548163ffffffff021916908363ffffffff160217905590506103408660405160200161032b9190612166565b604051602081830303815290604052826114b4565b600e54909350600090600290640100000000900463ffffffff1660011863ffffffff166002811061037357610373612179565b600602016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8416178155905086600282016103bd82826123c6565b50869050600482016103cf82826125c5565b905050837ff6c6d1be15ba0acc8ee645c1ec613c360ef786d2d3200eb8e695b6dec757dbf083898960405161040693929190612809565b60405180910390a25050509392505050565b60006002610434600e5463ffffffff6401000000009091041690565b63ffffffff166002811061044a5761044a612179565b6006020160010154905090565b6000806002610474600e5463ffffffff6401000000009091041690565b63ffffffff166002811061048a5761048a612179565b600602016001015460026104b2600e54600163ffffffff640100000000909204919091161890565b63ffffffff16600281106104c8576104c8612179565b6006020160010154915091509091565b600e54600090600290640100000000900463ffffffff16600118610434565b6104ff611866565b610507611866565b60006002610523600e5463ffffffff6401000000009091041690565b63ffffffff166002811061053957610539612179565b6040805160808101825260069290920292909201805463ffffffff16825260018101546020808401919091528351600283018054606093810283018401875282870181815295969495948701949293919284929091849160009085015b828210156105dc57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610596565b5050505081526020016001820180546105f49061220d565b80601f01602080910402602001604051908101604052809291908181526020018280546106209061220d565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b8282101561070f5760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff80821685526801000000000000000090910416838501526001908101549183019190915290835290920191016106af565b5050505081526020016001820180546107279061220d565b80601f01602080910402602001604051908101604052809291908181526020018280546107539061220d565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b505050919092525050509052506020810151909150156107be578092505b600e54600090600290640100000000900463ffffffff1660011863ffffffff16600281106107ee576107ee612179565b6040805160808101825260069290920292909201805463ffffffff16825260018101546020808401919091528351600283018054606093810283018401875282870181815295969495948701949293919284929091849160009085015b828210156108915783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061084b565b5050505081526020016001820180546108a99061220d565b80601f01602080910402602001604051908101604052809291908181526020018280546108d59061220d565b80156109225780601f106108f757610100808354040283529160200191610922565b820191906000526020600020905b81548152906001019060200180831161090557829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156109c45760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff8082168552680100000000000000009091041683850152600190810154918301919091529083529092019101610964565b5050505081526020016001820180546109dc9061220d565b80601f0160208091040260200160405190810160405280929190818152602001828054610a089061220d565b8015610a555780601f10610a2a57610100808354040283529160200191610a55565b820191906000526020600020905b815481529060010190602001808311610a3857829003601f168201915b50505091909252505050905250602081015190915015610a73578092505b50509091565b610a81611866565b6000805b6002811015610d52578360028260028110610aa257610aa2612179565b6006020160010154148015610ab657508315155b15610d4a5760028160028110610ace57610ace612179565b6040805160808101825260069290920292909201805463ffffffff16825260018082015460208085019190915284516002840180546060938102830184018852828801818152959794969588958701948492849160009085015b82821015610b6e57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610b28565b505050508152602001600182018054610b869061220d565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb29061220d565b8015610bff5780601f10610bd457610100808354040283529160200191610bff565b820191906000526020600020905b815481529060010190602001808311610be257829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b82821015610ca15760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff8082168552680100000000000000009091041683850152600190810154918301919091529083529092019101610c41565b505050508152602001600182018054610cb99061220d565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce59061220d565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b50505091909252505050905250969095509350505050565b600101610a85565b509092600092509050565b610d656112b9565b60005b6002811015610e3f578160028260028110610d8557610d85612179565b6006020160010154148015610d9957508115155b15610e3757610dd0610daa84611ea6565b60028360028110610dbd57610dbd612179565b60060201600201600001805490506115bc565b8260028260028110610de457610de4612179565b600602016004018181610df791906125c5565b905050817f1f69d1a2edb327babc986b3deb80091f101b9105d42a6c30db4d99c31d7e629484604051610e2a9190612844565b60405180910390a2505050565b600101610d68565b506040517fd0b2c031000000000000000000000000000000000000000000000000000000008152600481018290526024016102a4565b5050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016102a4565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610f7e6112b9565b81158015610f8a575080155b15610fc1576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600163ffffffff6401000000009092048216181682600282818110610feb57610feb612179565b600602016001015414611051576002816002811061100b5761100b612179565b6006020160010154836040517f93df584c0000000000000000000000000000000000000000000000000000000081526004016102a4929190918252602082015260400190565b6000600261106d600e5463ffffffff6401000000009091041690565b63ffffffff166002811061108357611083612179565b600602019050828160010154146110d65760018101546040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016102a4565b6000600180830191909155600e805463ffffffff6401000000008083048216909418169092027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff90921691909117905582156111585760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a250505050565b6111916112b9565b61119a81611771565b50565b6111a56112b9565b806111dc576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600163ffffffff640100000000909204821618168160028281811061120657611206612179565b60060201600101541461126c576002816002811061122657611226612179565b6006020160010154826040517f93df584c0000000000000000000000000000000000000000000000000000000081526004016102a4929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a2600281600281106112aa576112aa612179565b60060201600101600090555050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102a4565b565b815151610100101561137a576040517faf26d5e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251518110156114a4576000611394826001612857565b90505b83515181101561149b5783518051829081106113b5576113b5612179565b602002602001015160000151846000015183815181106113d7576113d7612179565b6020026020010151600001510361141a576040517f221a8ae800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835180518290811061142e5761142e612179565b6020026020010151602001518460000151838151811061145057611450612179565b60200260200101516020015103611493576040517fae00651d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611397565b5060010161137d565b50610e75818360000151516115bc565b604080517f45564d00000000000000000000000000000000000000000000000000000000006020820152469181019190915230606082015263ffffffff821660808201526000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060a001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261155b91869060200161286a565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120167e0b0000000000000000000000000000000000000000000000000000000000001790505b92915050565b81515160005b8181101561176b576000846000015182815181106115e2576115e2612179565b6020026020010151905060008260016115fb9190612857565b90505b8381101561167e57855180518290811061161a5761161a612179565b60200260200101516000015167ffffffffffffffff16826000015167ffffffffffffffff1603611676576040517f3857f84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016115fe565b5060408101518061169186610100612899565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c8216146116ed576040517f2847b60600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b811561171557611701600183612899565b9091169061170e816128ac565b90506116f0565b80836020015167ffffffffffffffff16111561175d576040517f4ff924ea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050508060010190506115c2565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036117f0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6040518060800160405280600063ffffffff168152602001600080191681526020016118a5604051806040016040528060608152602001606081525090565b81526020016118c7604051806040016040528060608152602001606081525090565b905290565b6000604082840312156118de57600080fd5b50919050565b6000806000606084860312156118f957600080fd5b833567ffffffffffffffff8082111561191157600080fd5b61191d878388016118cc565b9450602086013591508082111561193357600080fd5b50611940868287016118cc565b925050604084013590509250925092565b60005b8381101561196c578181015183820152602001611954565b50506000910152565b6000815180845261198d816020860160208601611951565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119d26020830184611975565b9392505050565b8051604080845281518482018190526000926060916020918201918388019190865b82811015611a35578451805167ffffffffffffffff90811686528382015116838601528701518785015293810193928501926001016119fb565b50808801519550888303818a01525050611a4f8185611975565b979650505050505050565b63ffffffff81511682526000602080830151818501526040808401516080604087015260c0860181516040608089015281815180845260e08a0191508683019350600092505b80831015611ac95783518051835287015187830152928601926001929092019190850190611aa0565b50948301518886037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160a08a015294611b038187611975565b9550505050505060608301518482036060860152611b2182826119d9565b95945050505050565b604081526000611b3d6040830185611a5a565b8281036020840152611b218185611a5a565b600060208284031215611b6157600080fd5b5035919050565b604081526000611b7b6040830185611a5a565b905082151560208301529392505050565b60008060408385031215611b9f57600080fd5b823567ffffffffffffffff811115611bb657600080fd5b611bc2858286016118cc565b95602094909401359450505050565b60008060408385031215611be457600080fd5b50508035926020909101359150565b600060208284031215611c0557600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146119d257600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611c7b57611c7b611c29565b60405290565b6040516060810167ffffffffffffffff81118282101715611c7b57611c7b611c29565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611ceb57611ceb611c29565b604052919050565b600067ffffffffffffffff821115611d0d57611d0d611c29565b5060051b60200190565b600082601f830112611d2857600080fd5b813567ffffffffffffffff811115611d4257611d42611c29565b611d7360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611ca4565b818152846020838601011115611d8857600080fd5b816020850160208301376000918101602001919091529392505050565b60006040808336031215611db857600080fd5b611dc0611c58565b833567ffffffffffffffff80821115611dd857600080fd5b9085019036601f830112611deb57600080fd5b81356020611e00611dfb83611cf3565b611ca4565b82815260069290921b84018101918181019036841115611e1f57600080fd5b948201945b83861015611e5f57878636031215611e3c5760008081fd5b611e44611c58565b86358152838701358482015282529487019490820190611e24565b86525087810135955082861115611e7557600080fd5b611e8136878a01611d17565b90850152509195945050505050565b67ffffffffffffffff8116811461119a57600080fd5b60006040808336031215611eb957600080fd5b611ec1611c58565b833567ffffffffffffffff80821115611ed957600080fd5b9085019036601f830112611eec57600080fd5b81356020611efc611dfb83611cf3565b82815260609283028501820192828201919036851115611f1b57600080fd5b958301955b84871015611f7557808736031215611f385760008081fd5b611f40611c81565b8735611f4b81611e90565b815287850135611f5a81611e90565b81860152878a01358a82015283529586019591830191611f20565b5086525087810135955082861115611e7557600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103611fd457611fd4611f8c565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261201357600080fd5b830160208101925035905067ffffffffffffffff81111561203357600080fd5b80360382131561204257600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000604080840183357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030181126120cb57600080fd5b8401602081810191359067ffffffffffffffff8211156120ea57600080fd5b8160061b36038313156120fc57600080fd5b6040885292819052909160009190606088015b82841015612135578435815281850135828201529385019360019390930192850161210f565b6121426020890189611fde565b9650945088810360208a0152612159818787612049565b9998505050505050505050565b6020815260006119d26020830184612092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126121dd57600080fd5b83018035915067ffffffffffffffff8211156121f857600080fd5b60200191503681900382131561204257600080fd5b600181811c9082168061222157607f821691505b6020821081036118de577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156122a6576000816000526020600020601f850160051c810160208610156122835750805b601f850160051c820191505b818110156122a25782815560010161228f565b5050505b505050565b67ffffffffffffffff8311156122c3576122c3611c29565b6122d7836122d1835461220d565b8361225a565b6000601f84116001811461232957600085156122f35750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556123bf565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b828110156123785786850135825560209485019460019092019101612358565b50868210156123b3577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181126123f857600080fd5b8201803567ffffffffffffffff81111561241157600080fd5b6020820191508060061b360382131561242957600080fd5b6801000000000000000081111561244257612442611c29565b8254818455808210156124cf5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461248357612483611f8c565b808416841461249457612494611f8c565b5060008560005260206000208360011b81018560011b820191505b808210156124ca5782825582848301556002820191506124af565b505050505b5060008381526020902060005b8281101561250857833582556020840135600183015560409390930192600291909101906001016124dc565b5050505061251960208301836121a8565b61176b8183600186016122ab565b813561253281611e90565b67ffffffffffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008216178355602084013561257681611e90565b6fffffffffffffffff00000000000000008160401b16837fffffffffffffffffffffffffffffffff00000000000000000000000000000000841617178455505050604082013560018201555050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18336030181126125f757600080fd5b8201803567ffffffffffffffff81111561261057600080fd5b6020820191506060808202360383131561262957600080fd5b6801000000000000000082111561264257612642611c29565b8354828555808310156126cf5760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461268357612683611f8c565b808516851461269457612694611f8c565b5060008660005260206000208360011b81018660011b820191505b808210156126ca5782825582848301556002820191506126af565b505050505b5060008481526020902060005b83811015612701576126ee8583612527565b93820193600291909101906001016126dc565b505050505061251960208301836121a8565b6000604080840183357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261274c57600080fd5b8401602081810191359067ffffffffffffffff8083111561276c57600080fd5b6060808402360385131561277f57600080fd5b60408a529483905292936000939060608a015b848610156127d65786356127a581611e90565b83168152868401356127b681611e90565b831681850152868801358882015295810195600195909501948101612792565b6127e360208b018b611fde565b985096508a810360208c01526127fa818989612049565b9b9a5050505050505050505050565b63ffffffff841681526060602082015260006128286060830185612092565b828103604084015261283a8185612713565b9695505050505050565b6020815260006119d26020830184612713565b808201808211156115b6576115b6611f8c565b6000835161287c818460208801611951565b835190830190612890818360208801611951565b01949350505050565b818103818111156115b6576115b6611f8c565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128dd576128dd611f8c565b506001019056fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expectedConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"gotConfigDigest\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"DigestNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOffchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicatePeerId\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSourceChain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoOpStateTransitionNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughObservers\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsNodesLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfBoundsObserverNodeIndex\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RevokingZeroDigestNotAllowed\",\"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\":[{\"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\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"name\":\"DynamicConfigSet\",\"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\":[],\"name\":\"getActiveDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"activeConfig\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"candidateConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCandidateDigest\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"getConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"}],\"internalType\":\"structRMNHome.VersionedConfig\",\"name\":\"versionedConfig\",\"type\":\"tuple\"},{\"internalType\":\"bool\",\"name\":\"ok\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getConfigDigests\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"activeConfigDigest\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"candidateConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestToPromote\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"digestToRevoke\",\"type\":\"bytes32\"}],\"name\":\"promoteCandidateAndRevokeActive\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"name\":\"revokeCandidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"peerId\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"offchainPublicKey\",\"type\":\"bytes32\"}],\"internalType\":\"structRMNHome.Node[]\",\"name\":\"nodes\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"dynamicConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"digestToOverwrite\",\"type\":\"bytes32\"}],\"name\":\"setCandidate\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"newConfigDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"observerNodesBitmap\",\"type\":\"uint256\"}],\"internalType\":\"structRMNHome.SourceChain[]\",\"name\":\"sourceChains\",\"type\":\"tuple[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structRMNHome.DynamicConfig\",\"name\":\"newDynamicConfig\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"currentDigest\",\"type\":\"bytes32\"}],\"name\":\"setDynamicConfig\",\"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\":\"view\",\"type\":\"function\"}]", + Bin: "0x6080604052600e80546001600160401b03191690553480156200002157600080fd5b503380600081620000795760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000ac57620000ac81620000b5565b50505062000160565b336001600160a01b038216036200010f5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000070565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b61295b80620001706000396000f3fe608060405234801561001057600080fd5b50600436106100df5760003560e01c80636dd5b69d1161008c5780638c76967f116100665780638c76967f146101d45780638da5cb5b146101e7578063f2fde38b1461020f578063fb4022d41461022257600080fd5b80636dd5b69d14610196578063736be802146101b757806379ba5097146101cc57600080fd5b80633567e6b4116100bd5780633567e6b41461015b57806338354c5c14610178578063635079561461018057600080fd5b8063118dbac5146100e4578063123e65db1461010a578063181f5a7714610112575b600080fd5b6100f76100f23660046118fa565b610235565b6040519081526020015b60405180910390f35b6100f7610418565b61014e6040518060400160405280601181526020017f524d4e486f6d6520312e362e302d64657600000000000000000000000000000081525081565b60405161010191906119d5565b610163610457565b60408051928352602083019190915201610101565b6100f76104d8565b6101886104f7565b604051610101929190611b40565b6101a96101a4366004611b65565b610a79565b604051610101929190611b7e565b6101ca6101c5366004611ba2565b610d5d565b005b6101ca610e79565b6101ca6101e2366004611be7565b610f76565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610101565b6101ca61021d366004611c09565b611189565b6101ca610230366004611b65565b61119d565b600061023f6112b9565b61025961024b85611dbb565b61025485611ebc565b61133c565b60006102636104d8565b90508281146102ad576040517f93df584c00000000000000000000000000000000000000000000000000000000815260048101829052602481018490526044015b60405180910390fd5b80156102df5760405183907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a25b600e80546000919082906102f89063ffffffff16611fd1565b91906101000a81548163ffffffff021916908363ffffffff160217905590506103408660405160200161032b919061217c565b604051602081830303815290604052826114b4565b600e54909350600090600290640100000000900463ffffffff1660011863ffffffff16600281106103735761037361218f565b600602016001810185905580547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff8416178155905086600282016103bd82826123dc565b50869050600482016103cf82826125db565b905050837ff6c6d1be15ba0acc8ee645c1ec613c360ef786d2d3200eb8e695b6dec757dbf08389896040516104069392919061281f565b60405180910390a25050509392505050565b60006002610434600e5463ffffffff6401000000009091041690565b63ffffffff166002811061044a5761044a61218f565b6006020160010154905090565b6000806002610474600e5463ffffffff6401000000009091041690565b63ffffffff166002811061048a5761048a61218f565b600602016001015460026104b2600e54600163ffffffff640100000000909204919091161890565b63ffffffff16600281106104c8576104c861218f565b6006020160010154915091509091565b600e54600090600290640100000000900463ffffffff16600118610434565b6104ff61187c565b61050761187c565b60006002610523600e5463ffffffff6401000000009091041690565b63ffffffff16600281106105395761053961218f565b6040805160808101825260069290920292909201805463ffffffff16825260018101546020808401919091528351600283018054606093810283018401875282870181815295969495948701949293919284929091849160009085015b828210156105dc57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610596565b5050505081526020016001820180546105f490612223565b80601f016020809104026020016040519081016040528092919081815260200182805461062090612223565b801561066d5780601f106106425761010080835404028352916020019161066d565b820191906000526020600020905b81548152906001019060200180831161065057829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b8282101561070f5760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff80821685526801000000000000000090910416838501526001908101549183019190915290835290920191016106af565b50505050815260200160018201805461072790612223565b80601f016020809104026020016040519081016040528092919081815260200182805461075390612223565b80156107a05780601f10610775576101008083540402835291602001916107a0565b820191906000526020600020905b81548152906001019060200180831161078357829003601f168201915b505050919092525050509052506020810151909150156107be578092505b600e54600090600290640100000000900463ffffffff1660011863ffffffff16600281106107ee576107ee61218f565b6040805160808101825260069290920292909201805463ffffffff16825260018101546020808401919091528351600283018054606093810283018401875282870181815295969495948701949293919284929091849160009085015b828210156108915783829060005260206000209060020201604051806040016040529081600082015481526020016001820154815250508152602001906001019061084b565b5050505081526020016001820180546108a990612223565b80601f01602080910402602001604051908101604052809291908181526020018280546108d590612223565b80156109225780601f106108f757610100808354040283529160200191610922565b820191906000526020600020905b81548152906001019060200180831161090557829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b828210156109c45760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff8082168552680100000000000000009091041683850152600190810154918301919091529083529092019101610964565b5050505081526020016001820180546109dc90612223565b80601f0160208091040260200160405190810160405280929190818152602001828054610a0890612223565b8015610a555780601f10610a2a57610100808354040283529160200191610a55565b820191906000526020600020905b815481529060010190602001808311610a3857829003601f168201915b50505091909252505050905250602081015190915015610a73578092505b50509091565b610a8161187c565b6000805b6002811015610d52578360028260028110610aa257610aa261218f565b6006020160010154148015610ab657508315155b15610d4a5760028160028110610ace57610ace61218f565b6040805160808101825260069290920292909201805463ffffffff16825260018082015460208085019190915284516002840180546060938102830184018852828801818152959794969588958701948492849160009085015b82821015610b6e57838290600052602060002090600202016040518060400160405290816000820154815260200160018201548152505081526020019060010190610b28565b505050508152602001600182018054610b8690612223565b80601f0160208091040260200160405190810160405280929190818152602001828054610bb290612223565b8015610bff5780601f10610bd457610100808354040283529160200191610bff565b820191906000526020600020905b815481529060010190602001808311610be257829003601f168201915b50505050508152505081526020016004820160405180604001604052908160008201805480602002602001604051908101604052809291908181526020016000905b82821015610ca15760008481526020908190206040805160608101825260028602909201805467ffffffffffffffff8082168552680100000000000000009091041683850152600190810154918301919091529083529092019101610c41565b505050508152602001600182018054610cb990612223565b80601f0160208091040260200160405190810160405280929190818152602001828054610ce590612223565b8015610d325780601f10610d0757610100808354040283529160200191610d32565b820191906000526020600020905b815481529060010190602001808311610d1557829003601f168201915b50505091909252505050905250969095509350505050565b600101610a85565b509092600092509050565b610d656112b9565b60005b6002811015610e3f578160028260028110610d8557610d8561218f565b6006020160010154148015610d9957508115155b15610e3757610dd0610daa84611ebc565b60028360028110610dbd57610dbd61218f565b60060201600201600001805490506115bc565b8260028260028110610de457610de461218f565b600602016004018181610df791906125db565b905050817f1f69d1a2edb327babc986b3deb80091f101b9105d42a6c30db4d99c31d7e629484604051610e2a919061285a565b60405180910390a2505050565b600101610d68565b506040517fd0b2c031000000000000000000000000000000000000000000000000000000008152600481018290526024016102a4565b5050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610efa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064016102a4565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610f7e6112b9565b81158015610f8a575080155b15610fc1576040517f7b4d1e4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600163ffffffff6401000000009092048216181682600282818110610feb57610feb61218f565b600602016001015414611051576002816002811061100b5761100b61218f565b6006020160010154836040517f93df584c0000000000000000000000000000000000000000000000000000000081526004016102a4929190918252602082015260400190565b6000600261106d600e5463ffffffff6401000000009091041690565b63ffffffff16600281106110835761108361218f565b600602019050828160010154146110d65760018101546040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018490526044016102a4565b6000600180830191909155600e805463ffffffff6401000000008083048216909418169092027fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff90921691909117905582156111585760405183907f0b31c0055e2d464bef7781994b98c4ff9ef4ae0d05f59feb6a68c42de5e201b890600090a25b60405184907ffc3e98dbbd47c3fa7c1c05b6ec711caeaf70eca4554192b9ada8fc11a37f298e90600090a250505050565b6111916112b9565b61119a81611787565b50565b6111a56112b9565b806111dc576040517f0849d8cc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600e54600163ffffffff64010000000090920482161816816002828181106112065761120661218f565b60060201600101541461126c57600281600281106112265761122661218f565b6006020160010154826040517f93df584c0000000000000000000000000000000000000000000000000000000081526004016102a4929190918252602082015260400190565b60405182907f53f5d9228f0a4173bea6e5931c9b3afe6eeb6692ede1d182952970f152534e3b90600090a2600281600281106112aa576112aa61218f565b60060201600101600090555050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461133a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016102a4565b565b815151610100101561137a576040517faf26d5e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8251518110156114a457600061139482600161286d565b90505b83515181101561149b5783518051829081106113b5576113b561218f565b602002602001015160000151846000015183815181106113d7576113d761218f565b6020026020010151600001510361141a576040517f221a8ae800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835180518290811061142e5761142e61218f565b602002602001015160200151846000015183815181106114505761145061218f565b60200260200101516020015103611493576040517fae00651d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600101611397565b5060010161137d565b50610e75818360000151516115bc565b604080517f45564d00000000000000000000000000000000000000000000000000000000006020820152469181019190915230606082015263ffffffff821660808201526000907dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9060a001604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529082905261155b918690602001612880565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe00181529190528051602090910120167e0b0000000000000000000000000000000000000000000000000000000000001790505b92915050565b81515160005b81811015611781576000846000015182815181106115e2576115e261218f565b6020026020010151905060008260016115fb919061286d565b90505b8381101561167e57855180518290811061161a5761161a61218f565b60200260200101516000015167ffffffffffffffff16826000015167ffffffffffffffff1603611676576040517f3857f84d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016115fe565b50604081015180611691866101006128af565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff901c8216146116ed576040517f2847b60600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8115611715576117016001836128af565b9091169061170e816128c2565b90506116f0565b60208301516117259060026128fa565b611730906001612926565b67ffffffffffffffff16811015611773576040517fa804bcb300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050508060010190506115c2565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff821603611806576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016102a4565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6040518060800160405280600063ffffffff168152602001600080191681526020016118bb604051806040016040528060608152602001606081525090565b81526020016118dd604051806040016040528060608152602001606081525090565b905290565b6000604082840312156118f457600080fd5b50919050565b60008060006060848603121561190f57600080fd5b833567ffffffffffffffff8082111561192757600080fd5b611933878388016118e2565b9450602086013591508082111561194957600080fd5b50611956868287016118e2565b925050604084013590509250925092565b60005b8381101561198257818101518382015260200161196a565b50506000910152565b600081518084526119a3816020860160208601611967565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006119e8602083018461198b565b9392505050565b8051604080845281518482018190526000926060916020918201918388019190865b82811015611a4b578451805167ffffffffffffffff9081168652838201511683860152870151878501529381019392850192600101611a11565b50808801519550888303818a01525050611a65818561198b565b979650505050505050565b63ffffffff81511682526000602080830151818501526040808401516080604087015260c0860181516040608089015281815180845260e08a0191508683019350600092505b80831015611adf5783518051835287015187830152928601926001929092019190850190611ab6565b50948301518886037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff800160a08a015294611b19818761198b565b9550505050505060608301518482036060860152611b3782826119ef565b95945050505050565b604081526000611b536040830185611a70565b8281036020840152611b378185611a70565b600060208284031215611b7757600080fd5b5035919050565b604081526000611b916040830185611a70565b905082151560208301529392505050565b60008060408385031215611bb557600080fd5b823567ffffffffffffffff811115611bcc57600080fd5b611bd8858286016118e2565b95602094909401359450505050565b60008060408385031215611bfa57600080fd5b50508035926020909101359150565b600060208284031215611c1b57600080fd5b813573ffffffffffffffffffffffffffffffffffffffff811681146119e857600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff81118282101715611c9157611c91611c3f565b60405290565b6040516060810167ffffffffffffffff81118282101715611c9157611c91611c3f565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611d0157611d01611c3f565b604052919050565b600067ffffffffffffffff821115611d2357611d23611c3f565b5060051b60200190565b600082601f830112611d3e57600080fd5b813567ffffffffffffffff811115611d5857611d58611c3f565b611d8960207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f84011601611cba565b818152846020838601011115611d9e57600080fd5b816020850160208301376000918101602001919091529392505050565b60006040808336031215611dce57600080fd5b611dd6611c6e565b833567ffffffffffffffff80821115611dee57600080fd5b9085019036601f830112611e0157600080fd5b81356020611e16611e1183611d09565b611cba565b82815260069290921b84018101918181019036841115611e3557600080fd5b948201945b83861015611e7557878636031215611e525760008081fd5b611e5a611c6e565b86358152838701358482015282529487019490820190611e3a565b86525087810135955082861115611e8b57600080fd5b611e9736878a01611d2d565b90850152509195945050505050565b67ffffffffffffffff8116811461119a57600080fd5b60006040808336031215611ecf57600080fd5b611ed7611c6e565b833567ffffffffffffffff80821115611eef57600080fd5b9085019036601f830112611f0257600080fd5b81356020611f12611e1183611d09565b82815260609283028501820192828201919036851115611f3157600080fd5b958301955b84871015611f8b57808736031215611f4e5760008081fd5b611f56611c97565b8735611f6181611ea6565b815287850135611f7081611ea6565b81860152878a01358a82015283529586019591830191611f36565b5086525087810135955082861115611e8b57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600063ffffffff808316818103611fea57611fea611fa2565b6001019392505050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261202957600080fd5b830160208101925035905067ffffffffffffffff81111561204957600080fd5b80360382131561205857600080fd5b9250929050565b8183528181602085013750600060208284010152600060207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116840101905092915050565b6000604080840183357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18536030181126120e157600080fd5b8401602081810191359067ffffffffffffffff82111561210057600080fd5b8160061b360383131561211257600080fd5b6040885292819052909160009190606088015b8284101561214b5784358152818501358282015293850193600193909301928501612125565b6121586020890189611ff4565b9650945088810360208a015261216f81878761205f565b9998505050505050505050565b6020815260006119e860208301846120a8565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126121f357600080fd5b83018035915067ffffffffffffffff82111561220e57600080fd5b60200191503681900382131561205857600080fd5b600181811c9082168061223757607f821691505b6020821081036118f4577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b601f8211156122bc576000816000526020600020601f850160051c810160208610156122995750805b601f850160051c820191505b818110156122b8578281556001016122a5565b5050505b505050565b67ffffffffffffffff8311156122d9576122d9611c3f565b6122ed836122e78354612223565b83612270565b6000601f84116001811461233f57600085156123095750838201355b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600387901b1c1916600186901b1783556123d5565b6000838152602090207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0861690835b8281101561238e578685013582556020948501946001909201910161236e565b50868210156123c9577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88860031b161c19848701351681555b505060018560011b0183555b5050505050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261240e57600080fd5b8201803567ffffffffffffffff81111561242757600080fd5b6020820191508060061b360382131561243f57600080fd5b6801000000000000000081111561245857612458611c3f565b8254818455808210156124e55760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461249957612499611fa2565b80841684146124aa576124aa611fa2565b5060008560005260206000208360011b81018560011b820191505b808210156124e05782825582848301556002820191506124c5565b505050505b5060008381526020902060005b8281101561251e57833582556020840135600183015560409390930192600291909101906001016124f2565b5050505061252f60208301836121be565b6117818183600186016122c1565b813561254881611ea6565b67ffffffffffffffff811690508154817fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008216178355602084013561258c81611ea6565b6fffffffffffffffff00000000000000008160401b16837fffffffffffffffffffffffffffffffff00000000000000000000000000000000841617178455505050604082013560018201555050565b81357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe183360301811261260d57600080fd5b8201803567ffffffffffffffff81111561262657600080fd5b6020820191506060808202360383131561263f57600080fd5b6801000000000000000082111561265857612658611c3f565b8354828555808310156126e55760017f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff808316831461269957612699611fa2565b80851685146126aa576126aa611fa2565b5060008660005260206000208360011b81018660011b820191505b808210156126e05782825582848301556002820191506126c5565b505050505b5060008481526020902060005b8381101561271757612704858361253d565b93820193600291909101906001016126f2565b505050505061252f60208301836121be565b6000604080840183357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe185360301811261276257600080fd5b8401602081810191359067ffffffffffffffff8083111561278257600080fd5b6060808402360385131561279557600080fd5b60408a529483905292936000939060608a015b848610156127ec5786356127bb81611ea6565b83168152868401356127cc81611ea6565b8316818501528688013588820152958101956001959095019481016127a8565b6127f960208b018b611ff4565b985096508a810360208c015261281081898961205f565b9b9a5050505050505050505050565b63ffffffff8416815260606020820152600061283e60608301856120a8565b82810360408401526128508185612729565b9695505050505050565b6020815260006119e86020830184612729565b808201808211156115b6576115b6611fa2565b60008351612892818460208801611967565b8351908301906128a6818360208801611967565b01949350505050565b818103818111156115b6576115b6611fa2565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036128f3576128f3611fa2565b5060010190565b67ffffffffffffffff81811683821602808216919082811461291e5761291e611fa2565b505092915050565b67ffffffffffffffff81811683821601908082111561294757612947611fa2565b509291505056fea164736f6c6343000818000a", } var RMNHomeABI = RMNHomeMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go index da84ba9c8cf..d75c7aea88d 100644 --- a/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go +++ b/core/gethwrappers/ccip/generated/rmn_remote/rmn_remote.go @@ -46,7 +46,7 @@ type InternalMerkleRoot struct { type RMNRemoteConfig struct { RmnHomeContractConfigDigest [32]byte Signers []RMNRemoteSigner - MinSigners uint64 + F uint64 } type RMNRemoteSigner struct { @@ -55,8 +55,8 @@ type RMNRemoteSigner struct { } var RMNRemoteMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MinSignersTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"minSigners\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"minSigners\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"minSigners\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rawVs\",\"type\":\"uint256\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b506040516200216a3803806200216a8339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051611f6c620001fe6000396000818161027a0152610acb0152611f6c6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806379ba509711610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b806379ba5097146102015780638d8741cb146102095780638da5cb5b1461021c5780639a19b3291461024457600080fd5b8063397796f7116100d3578063397796f7146101a557806362eed415146101ad5780636509a954146101c05780636d2d3993146101ee57600080fd5b8063181f5a7714610105578063198f0f77146101575780631add205f1461016c5780632cbc26bb14610182575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e91906113b9565b60405180910390f35b61016a6101653660046113cc565b6102ca565b005b610174610676565b60405161014e929190611407565b6101956101903660046114e5565b61076e565b604051901515815260200161014e565b6101956107cb565b61016a6101bb3660046114e5565b610845565b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b61016a6101fc3660046114e5565b6108b9565b61016a610929565b61016a61021736600461156e565b610a2b565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b61016a6102523660046116f5565b610d7f565b61025f610e7c565b60405161014e9190611792565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b61016a6102b23660046117f8565b610e88565b61016a6102c53660046116f5565b610e9c565b6102d2610f8e565b60015b6102e26020830183611815565b90508110156103b2576102f86020830183611815565b828181106103085761030861187d565b905060400201602001602081019061032091906118cd565b67ffffffffffffffff166103376020840184611815565b610342600185611919565b8181106103515761035161187d565b905060400201602001602081019061036991906118cd565b67ffffffffffffffff16106103aa576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016102d5565b506103c06020820182611815565b90506103d260608301604084016118cd565b67ffffffffffffffff161115610414576040517ffba0d9e600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b80156104a65760086000600361042f600185611919565b8154811061043f5761043f61187d565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905561049f8161192c565b9050610418565b5060005b6104b76020830183611815565b90508110156105ec57600860006104d16020850185611815565b848181106104e1576104e161187d565b6104f792602060409092020190810191506117f8565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff1615610558576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016008600061056b6020860186611815565b8581811061057b5761057b61187d565b61059192602060409092020190810191506117f8565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016104aa565b508060026105fa8282611a1a565b5050600580546000919082906106159063ffffffff16611b55565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c8360405161066a9190611b78565b60405180910390a25050565b6040805160608082018352600080835260208301919091529181018290526005546040805160608101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b82821015610745576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16818301528252600190920191016106d7565b505050908252506002919091015467ffffffffffffffff16602090910152919491935090915050565b600061077a6006611011565b60000361078957506000919050565b61079460068361101b565b806107c557506107c560067f010000000000000000000000000000010000000000000000000000000000000061101b565b92915050565b60006107d76006611011565b6000036107e45750600090565b61080f60067f010000000000000000000000000000000000000000000000000000000000000061101b565b80610840575061084060067f010000000000000000000000000000010000000000000000000000000000000061101b565b905090565b60408051600180825281830190925260009160208083019080368337019050509050818160008151811061087b5761087b61187d565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108b581610e9c565b5050565b6040805160018082528183019092526000916020808301908036833701905050905081816000815181106108ef576108ef61187d565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108b581610d7f565b60015473ffffffffffffffffffffffffffffffffffffffff1633146109af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60055463ffffffff16600003610a6d576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60045467ffffffffffffffff16821015610ab3576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8716606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a08101610b4f888a611c82565b9052604051610b62929190602001611de2565b60405160208183030381529060405280519060200120905060008060005b85811015610d7357600184610b9a82841b8816601b611f17565b898985818110610bac57610bac61187d565b905060400201600001358a8a86818110610bc857610bc861187d565b9050604002016020013560405160008152602001604052604051610c08949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610c2a573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610ca2576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610610d07576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610d66576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610b80565b50505050505050505050565b610d87610f8e565b60005b8151811015610e4157610dc0828281518110610da857610da861187d565b6020026020010151600661105990919063ffffffff16565b610e3957818181518110610dd657610dd661187d565b60200260200101516040517f73281fa10000000000000000000000000000000000000000000000000000000081526004016109a691907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610d8a565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610e719190611792565b60405180910390a150565b60606108406006611087565b610e90610f8e565b610e9981611094565b50565b610ea4610f8e565b60005b8151811015610f5e57610edd828281518110610ec557610ec561187d565b6020026020010151600661118990919063ffffffff16565b610f5657818181518110610ef357610ef361187d565b60200260200101516040517f19d5c79b0000000000000000000000000000000000000000000000000000000081526004016109a691907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610ea7565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610e719190611792565b60005473ffffffffffffffffffffffffffffffffffffffff16331461100f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016109a6565b565b60006107c5825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b6000611052837fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166111b7565b60606000611052836112aa565b3373ffffffffffffffffffffffffffffffffffffffff821603611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016109a6565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000611052837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611306565b600081815260018301602052604081205480156112a05760006111db600183611919565b85549091506000906111ef90600190611919565b905080821461125457600086600001828154811061120f5761120f61187d565b90600052602060002001549050808760000184815481106112325761123261187d565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061126557611265611f30565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107c5565b60009150506107c5565b6060816000018054806020026020016040519081016040528092919081815260200182805480156112fa57602002820191906000526020600020905b8154815260200190600101908083116112e6575b50505050509050919050565b600081815260018301602052604081205461134d575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107c5565b5060006107c5565b6000815180845260005b8181101561137b5760208185018101518683018201520161135f565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006110526020830184611355565b6000602082840312156113de57600080fd5b813567ffffffffffffffff8111156113f557600080fd5b82016060818503121561105257600080fd5b63ffffffff831681526040602080830182905283518383015283810151606080850152805160a085018190526000939291820190849060c08701905b8083101561148c578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff1685830152928401926001929092019190850190611443565b50604088015167ffffffffffffffff81166080890152945098975050505050505050565b80357fffffffffffffffffffffffffffffffff00000000000000000000000000000000811681146114e057600080fd5b919050565b6000602082840312156114f757600080fd5b611052826114b0565b73ffffffffffffffffffffffffffffffffffffffff81168114610e9957600080fd5b60008083601f84011261153457600080fd5b50813567ffffffffffffffff81111561154c57600080fd5b6020830191508360208260061b850101111561156757600080fd5b9250929050565b6000806000806000806080878903121561158757600080fd5b863561159281611500565b9550602087013567ffffffffffffffff808211156115af57600080fd5b818901915089601f8301126115c357600080fd5b8135818111156115d257600080fd5b8a60208260051b85010111156115e757600080fd5b60208301975080965050604089013591508082111561160557600080fd5b5061161289828a01611522565b979a9699509497949695606090950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff8111828210171561167c5761167c61162a565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156116c9576116c961162a565b604052919050565b600067ffffffffffffffff8211156116eb576116eb61162a565b5060051b60200190565b6000602080838503121561170857600080fd5b823567ffffffffffffffff81111561171f57600080fd5b8301601f8101851361173057600080fd5b803561174361173e826116d1565b611682565b81815260059190911b8201830190838101908783111561176257600080fd5b928401925b8284101561178757611778846114b0565b82529284019290840190611767565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b818110156117ec5783517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016835292840192918401916001016117ae565b50909695505050505050565b60006020828403121561180a57600080fd5b813561105281611500565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261184a57600080fd5b83018035915067ffffffffffffffff82111561186557600080fd5b6020019150600681901b360382131561156757600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff81168114610e9957600080fd5b80356114e0816118ac565b6000602082840312156118df57600080fd5b8135611052816118ac565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156107c5576107c56118ea565b60008161193b5761193b6118ea565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600081356107c5816118ac565b813561197981611500565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff0000000000000000000000000000000000000000821617835560208401356119c9816118ac565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611a5857600080fd5b8401803567ffffffffffffffff811115611a7157600080fd5b6020820191508060061b3603821315611a8957600080fd5b68010000000000000000811115611aa257611aa261162a565b825481845580821015611ad7576000848152602081208381019083015b80821015611ad35782825590870190611abf565b5050505b50600092835260208320925b81811015611b0757611af5838561196e565b92840192604092909201918401611ae3565b50505050506108b5611b1b60408401611961565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff808316818103611b6e57611b6e6118ea565b6001019392505050565b6000602080835260808301843582850152818501357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112611bbd57600080fd5b8501828101903567ffffffffffffffff80821115611bda57600080fd5b8160061b3603831315611bec57600080fd5b6040606060408901528483865260a089019050849550600094505b83851015611c57578535611c1a81611500565b73ffffffffffffffffffffffffffffffffffffffff16815285870135611c3f816118ac565b83168188015294810194600194909401938101611c07565b611c6360408b016118c2565b67ffffffffffffffff811660608b015296509998505050505050505050565b6000611c9061173e846116d1565b80848252602080830192508560051b850136811115611cae57600080fd5b855b81811015611dd657803567ffffffffffffffff80821115611cd15760008081fd5b818901915060a08236031215611ce75760008081fd5b611cef611659565b8235611cfa816118ac565b81528286013582811115611d0e5760008081fd5b8301601f3681830112611d215760008081fd5b813584811115611d3357611d3361162a565b611d62897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08484011601611682565b94508085523689828501011115611d7b57600091508182fd5b808984018a8701376000898287010152505050818682015260409150611da28284016118c2565b8282015260609150611db58284016118c2565b91810191909152608091820135918101919091528552938201938201611cb0565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611f04577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611ed3858c0182611355565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611e87565b50969d9c50505050505050505050505050565b60ff81811683821601908111156107c5576107c56118ea565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"AlreadyCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateOnchainPublicKey\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignature\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSignerOrder\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"NotCursed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotEnoughSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OutOfOrderSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ThresholdNotMet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnexpectedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroValueNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"indexed\":false,\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Cursed\",\"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\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"Uncursed\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"curse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCursedSubjects\",\"outputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalChainSelector\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"localChainSelector\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getReportDigestHeader\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"digestHeader\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersionedConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"version\",\"type\":\"uint32\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"config\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isCursed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"rmnHomeContractConfigDigest\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"onchainPublicKey\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"nodeIndex\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Signer[]\",\"name\":\"signers\",\"type\":\"tuple[]\"},{\"internalType\":\"uint64\",\"name\":\"f\",\"type\":\"uint64\"}],\"internalType\":\"structRMNRemote.Config\",\"name\":\"newConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"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\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16\",\"name\":\"subject\",\"type\":\"bytes16\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes16[]\",\"name\":\"subjects\",\"type\":\"bytes16[]\"}],\"name\":\"uncurse\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"offrampAddress\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"onRampAddress\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"minSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"maxSeqNr\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structInternal.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"r\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"internalType\":\"structIRMNRemote.Signature[]\",\"name\":\"signatures\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256\",\"name\":\"rawVs\",\"type\":\"uint256\"}],\"name\":\"verify\",\"outputs\":[],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b50604051620021e9380380620021e98339810160408190526200003491620001a9565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fe565b505050806001600160401b0316600003620000ec5760405163273e150360e21b815260040160405180910390fd5b6001600160401b0316608052620001db565b336001600160a01b03821603620001585760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001bc57600080fd5b81516001600160401b0381168114620001d457600080fd5b9392505050565b608051611feb620001fe6000396000818161027a0152610af60152611feb6000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c806379ba509711610097578063d881e09211610066578063d881e09214610257578063eaa83ddd1461026c578063f2fde38b146102a4578063f8bb876e146102b757600080fd5b806379ba5097146102015780638d8741cb146102095780638da5cb5b1461021c5780639a19b3291461024457600080fd5b8063397796f7116100d3578063397796f7146101a557806362eed415146101ad5780636509a954146101c05780636d2d3993146101ee57600080fd5b8063181f5a7714610105578063198f0f77146101575780631add205f1461016c5780632cbc26bb14610182575b600080fd5b6101416040518060400160405280601381526020017f524d4e52656d6f746520312e362e302d6465760000000000000000000000000081525081565b60405161014e91906113eb565b60405180910390f35b61016a6101653660046113fe565b6102ca565b005b61017461068c565b60405161014e929190611439565b610195610190366004611517565b610784565b604051901515815260200161014e565b6101956107e1565b61016a6101bb366004611517565b61085b565b6040517f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf53815260200161014e565b61016a6101fc366004611517565b6108cf565b61016a61093f565b61016a6102173660046115a0565b610a41565b60005460405173ffffffffffffffffffffffffffffffffffffffff909116815260200161014e565b61016a610252366004611727565b610daa565b61025f610ea7565b60405161014e91906117c4565b60405167ffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016815260200161014e565b61016a6102b236600461182a565b610eb3565b61016a6102c5366004611727565b610ec7565b6102d2610fb9565b60015b6102e26020830183611847565b90508110156103b2576102f86020830183611847565b82818110610308576103086118af565b905060400201602001602081019061032091906118ff565b67ffffffffffffffff166103376020840184611847565b61034260018561194b565b818110610351576103516118af565b905060400201602001602081019061036991906118ff565b67ffffffffffffffff16106103aa576040517f4485151700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001016102d5565b506103c360608201604083016118ff565b6103ce90600261195e565b6103d990600161198a565b67ffffffffffffffff166103f06020830183611847565b9050101561042a576040517f014c502000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6003545b80156104bc5760086000600361044560018561194b565b81548110610455576104556118af565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690556104b5816119ab565b905061042e565b5060005b6104cd6020830183611847565b905081101561060257600860006104e76020850185611847565b848181106104f7576104f76118af565b61050d926020604090920201908101915061182a565b73ffffffffffffffffffffffffffffffffffffffff16815260208101919091526040016000205460ff161561056e576040517f28cae27d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600860006105816020860186611847565b85818110610591576105916118af565b6105a7926020604090920201908101915061182a565b73ffffffffffffffffffffffffffffffffffffffff168152602081019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169115159190911790556001016104c0565b508060026106108282611a99565b50506005805460009190829061062b9063ffffffff16611bd4565b91906101000a81548163ffffffff021916908363ffffffff160217905590508063ffffffff167f7f22bf988149dbe8de8fb879c6b97a4e56e68b2bd57421ce1a4e79d4ef6b496c836040516106809190611bf7565b60405180910390a25050565b6040805160608082018352600080835260208301919091529181018290526005546040805160608101825260028054825260038054845160208281028201810190965281815263ffffffff9096169592948593818601939092909160009084015b8282101561075b576000848152602090819020604080518082019091529084015473ffffffffffffffffffffffffffffffffffffffff8116825274010000000000000000000000000000000000000000900467ffffffffffffffff16818301528252600190920191016106ed565b505050908252506002919091015467ffffffffffffffff16602090910152919491935090915050565b6000610790600661103c565b60000361079f57506000919050565b6107aa600683611046565b806107db57506107db60067f0100000000000000000000000000000100000000000000000000000000000000611046565b92915050565b60006107ed600661103c565b6000036107fa5750600090565b61082560067f0100000000000000000000000000000000000000000000000000000000000000611046565b80610856575061085660067f0100000000000000000000000000000100000000000000000000000000000000611046565b905090565b604080516001808252818301909252600091602080830190803683370190505090508181600081518110610891576108916118af565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108cb81610ec7565b5050565b604080516001808252818301909252600091602080830190803683370190505090508181600081518110610905576109056118af565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000909216602092830291909101909101526108cb81610daa565b60015473ffffffffffffffffffffffffffffffffffffffff1633146109c5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b60055463ffffffff16600003610a83576040517face124bc00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600454610a9b9067ffffffffffffffff16600161198a565b67ffffffffffffffff16821015610ade576040517f59fa4a9300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160c08101825246815267ffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020820152309181019190915273ffffffffffffffffffffffffffffffffffffffff8716606082015260025460808201526000907f9651943783dbf81935a60e98f218a9d9b5b28823fb2228bbd91320d632facf539060a08101610b7a888a611d01565b9052604051610b8d929190602001611e61565b60405160208183030381529060405280519060200120905060008060005b85811015610d9e57600184610bc582841b8816601b611f96565b898985818110610bd757610bd76118af565b905060400201600001358a8a86818110610bf357610bf36118af565b9050604002016020013560405160008152602001604052604051610c33949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015610c55573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015192505073ffffffffffffffffffffffffffffffffffffffff8216610ccd576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1610610d32576040517fbbe15e7f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821660009081526008602052604090205460ff16610d91576040517faaaa914100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9091508190600101610bab565b50505050505050505050565b610db2610fb9565b60005b8151811015610e6c57610deb828281518110610dd357610dd36118af565b6020026020010151600661108490919063ffffffff16565b610e6457818181518110610e0157610e016118af565b60200260200101516040517f73281fa10000000000000000000000000000000000000000000000000000000081526004016109bc91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610db5565b507f0676e709c9cc74fa0519fd78f7c33be0f1b2b0bae0507c724aef7229379c6ba181604051610e9c91906117c4565b60405180910390a150565b606061085660066110b2565b610ebb610fb9565b610ec4816110bf565b50565b610ecf610fb9565b60005b8151811015610f8957610f08828281518110610ef057610ef06118af565b602002602001015160066111b490919063ffffffff16565b610f8157818181518110610f1e57610f1e6118af565b60200260200101516040517f19d5c79b0000000000000000000000000000000000000000000000000000000081526004016109bc91907fffffffffffffffffffffffffffffffff0000000000000000000000000000000091909116815260200190565b600101610ed2565b507f1716e663a90a76d3b6c7e5f680673d1b051454c19c627e184c8daf28f3104f7481604051610e9c91906117c4565b60005473ffffffffffffffffffffffffffffffffffffffff16331461103a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016109bc565b565b60006107db825490565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008116600090815260018301602052604081205415155b9392505050565b600061107d837fffffffffffffffffffffffffffffffff0000000000000000000000000000000084166111e2565b6060600061107d836112dc565b3373ffffffffffffffffffffffffffffffffffffffff82160361113e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016109bc565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600061107d837fffffffffffffffffffffffffffffffff000000000000000000000000000000008416611338565b600081815260018301602052604081205480156112cb57600061120660018361194b565b855490915060009061121a9060019061194b565b905080821461127f57600086600001828154811061123a5761123a6118af565b906000526020600020015490508087600001848154811061125d5761125d6118af565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061129057611290611faf565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107db565b60009150506107db565b5092915050565b60608160000180548060200260200160405190810160405280929190818152602001828054801561132c57602002820191906000526020600020905b815481526020019060010190808311611318575b50505050509050919050565b600081815260018301602052604081205461137f575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556107db565b5060006107db565b6000815180845260005b818110156113ad57602081850181015186830182015201611391565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061107d6020830184611387565b60006020828403121561141057600080fd5b813567ffffffffffffffff81111561142757600080fd5b82016060818503121561107d57600080fd5b63ffffffff831681526040602080830182905283518383015283810151606080850152805160a085018190526000939291820190849060c08701905b808310156114be578351805173ffffffffffffffffffffffffffffffffffffffff16835285015167ffffffffffffffff1685830152928401926001929092019190850190611475565b50604088015167ffffffffffffffff81166080890152945098975050505050505050565b80357fffffffffffffffffffffffffffffffff000000000000000000000000000000008116811461151257600080fd5b919050565b60006020828403121561152957600080fd5b61107d826114e2565b73ffffffffffffffffffffffffffffffffffffffff81168114610ec457600080fd5b60008083601f84011261156657600080fd5b50813567ffffffffffffffff81111561157e57600080fd5b6020830191508360208260061b850101111561159957600080fd5b9250929050565b600080600080600080608087890312156115b957600080fd5b86356115c481611532565b9550602087013567ffffffffffffffff808211156115e157600080fd5b818901915089601f8301126115f557600080fd5b81358181111561160457600080fd5b8a60208260051b850101111561161957600080fd5b60208301975080965050604089013591508082111561163757600080fd5b5061164489828a01611554565b979a9699509497949695606090950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156116ae576116ae61165c565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156116fb576116fb61165c565b604052919050565b600067ffffffffffffffff82111561171d5761171d61165c565b5060051b60200190565b6000602080838503121561173a57600080fd5b823567ffffffffffffffff81111561175157600080fd5b8301601f8101851361176257600080fd5b803561177561177082611703565b6116b4565b81815260059190911b8201830190838101908783111561179457600080fd5b928401925b828410156117b9576117aa846114e2565b82529284019290840190611799565b979650505050505050565b6020808252825182820181905260009190848201906040850190845b8181101561181e5783517fffffffffffffffffffffffffffffffff0000000000000000000000000000000016835292840192918401916001016117e0565b50909695505050505050565b60006020828403121561183c57600080fd5b813561107d81611532565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261187c57600080fd5b83018035915067ffffffffffffffff82111561189757600080fd5b6020019150600681901b360382131561159957600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b67ffffffffffffffff81168114610ec457600080fd5b8035611512816118de565b60006020828403121561191157600080fd5b813561107d816118de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b818103818111156107db576107db61191c565b67ffffffffffffffff8181168382160280821691908281146119825761198261191c565b505092915050565b67ffffffffffffffff8181168382160190808211156112d5576112d561191c565b6000816119ba576119ba61191c565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b600081356107db816118de565b81356119f881611532565b73ffffffffffffffffffffffffffffffffffffffff811690508154817fffffffffffffffffffffffff000000000000000000000000000000000000000082161783556020840135611a48816118de565b7bffffffffffffffff00000000000000000000000000000000000000008160a01b16837fffffffff000000000000000000000000000000000000000000000000000000008416171784555050505050565b81358155600180820160208401357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1853603018112611ad757600080fd5b8401803567ffffffffffffffff811115611af057600080fd5b6020820191508060061b3603821315611b0857600080fd5b68010000000000000000811115611b2157611b2161165c565b825481845580821015611b56576000848152602081208381019083015b80821015611b525782825590870190611b3e565b5050505b50600092835260208320925b81811015611b8657611b7483856119ed565b92840192604092909201918401611b62565b50505050506108cb611b9a604084016119e0565b6002830167ffffffffffffffff82167fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000008254161781555050565b600063ffffffff808316818103611bed57611bed61191c565b6001019392505050565b6000602080835260808301843582850152818501357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1863603018112611c3c57600080fd5b8501828101903567ffffffffffffffff80821115611c5957600080fd5b8160061b3603831315611c6b57600080fd5b6040606060408901528483865260a089019050849550600094505b83851015611cd6578535611c9981611532565b73ffffffffffffffffffffffffffffffffffffffff16815285870135611cbe816118de565b83168188015294810194600194909401938101611c86565b611ce260408b016118f4565b67ffffffffffffffff811660608b015296509998505050505050505050565b6000611d0f61177084611703565b80848252602080830192508560051b850136811115611d2d57600080fd5b855b81811015611e5557803567ffffffffffffffff80821115611d505760008081fd5b818901915060a08236031215611d665760008081fd5b611d6e61168b565b8235611d79816118de565b81528286013582811115611d8d5760008081fd5b8301601f3681830112611da05760008081fd5b813584811115611db257611db261165c565b611de1897fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe084840116016116b4565b94508085523689828501011115611dfa57600091508182fd5b808984018a8701376000898287010152505050818682015260409150611e218284016118f4565b8282015260609150611e348284016118f4565b91810191909152608091820135918101919091528552938201938201611d2f565b50919695505050505050565b60006040848352602060408185015261010084018551604086015281860151606067ffffffffffffffff808316606089015260408901519250608073ffffffffffffffffffffffffffffffffffffffff80851660808b015260608b0151945060a081861660a08c015260808c015160c08c015260a08c0151955060c060e08c015286915085518088526101209750878c019250878160051b8d01019750888701965060005b81811015611f83577ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffee08d8a030184528751868151168a528a810151848c8c0152611f52858c0182611387565b828e015189168c8f01528983015189168a8d0152918701519a87019a909a5298509689019692890192600101611f06565b50969d9c50505050505050505050505050565b60ff81811683821601908111156107db576107db61191c565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var RMNRemoteABI = RMNRemoteMetaData.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 2a25ac7c554..6bbf27c5a67 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 @@ -16,14 +16,14 @@ mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/Mo multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin cc63ca92012b7473f77a1c49f77ee20f9242bbecaad2c73c1dc581b447a77e91 multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin 04b6b261dd71925670bf4d904aaf7bf08543452009feefb88e07d4c49d12e969 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin eb234dfb57c6dc64f83cfbf9d78a27939a7241fd0de41342d41c919c156a3633 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 0179626a57d37bd1d6326df7ac9295db2ce80113c8f3d180fd48d776144d27bf +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 4d0597cc9d04a7901911b2bf7891792bbc600efc0620375a4b5bf033926c9186 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin b241bea65902828c3614a9ec85e0320a65d986e22ef942ddcb41fe67bd47e888 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b registry_module_owner_custom: ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.abi ../../../contracts/solc/v0.8.24/RegistryModuleOwnerCustom/RegistryModuleOwnerCustom.bin 75be86323c227917a9bbc3f799d7ed02f92db546653a36db30ed0ebe64461353 report_codec: ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.abi ../../../contracts/solc/v0.8.24/ReportCodec/ReportCodec.bin 695b4798f1e9d6f1442f7e6d7c499d23464d9237f325effde132913c404607f7 -rmn_home: ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.abi ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.bin fc2ba87d987b4e4d6e0c63b3ffb6d515fae1ab27778f6a0a6ed927d8d6aeaf8f +rmn_home: ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.abi ../../../contracts/solc/v0.8.24/RMNHome/RMNHome.bin fa6f66001bb8de061f9c4672e83fdf3f57ab751a7de519a459908c96b077ce74 rmn_proxy_contract: ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.abi ../../../contracts/solc/v0.8.24/ARMProxy/ARMProxy.bin b048d8e752e3c41113ebb305c1efa06737ad36b4907b93e627fb0a3113023454 -rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin 8d7f0e4581acac5c6b42c7cca1c06e699fdcf9dbca782dde153b7d190cdbe9bc +rmn_remote: ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.abi ../../../contracts/solc/v0.8.24/RMNRemote/RMNRemote.bin 4979c4de584a0a6be8755f7d563839900be5adbcd70fd97443176f9d941f3570 router: ../../../contracts/solc/v0.8.24/Router/Router.abi ../../../contracts/solc/v0.8.24/Router/Router.bin 2e4f0a7826c8abb49d882bb49fc5ff20a186dbd3137624b9097ffed903ae4888 token_admin_registry: ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.abi ../../../contracts/solc/v0.8.24/TokenAdminRegistry/TokenAdminRegistry.bin 942be7d1681ac102e0615bee13f76838ebb0b261697cf1270d2bf82c12e57aeb token_pool: ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.abi ../../../contracts/solc/v0.8.24/TokenPool/TokenPool.bin 7c01fd89f5153baa4d7409d14beabb3f861abfbf8880d3c6d06802cc398570f9 diff --git a/integration-tests/deployment/ccip/deploy.go b/integration-tests/deployment/ccip/deploy.go index 6079b60b33d..d924174e9e1 100644 --- a/integration-tests/deployment/ccip/deploy.go +++ b/integration-tests/deployment/ccip/deploy.go @@ -475,8 +475,10 @@ func DeployChainContracts( tx, err := rmnRemote.Contract.SetConfig(chain.DeployerKey, rmn_remote.RMNRemoteConfig{ RmnHomeContractConfigDigest: activeDigest, - Signers: []rmn_remote.RMNRemoteSigner{}, - MinSigners: 0, // TODO: update when we have signers + Signers: []rmn_remote.RMNRemoteSigner{ + {NodeIndex: 0, OnchainPublicKey: common.Address{1}}, + }, + F: 0, // TODO: update when we have signers }) if _, err := deployment.ConfirmIfNoError(chain, tx, err); err != nil { e.Logger.Errorw("Failed to confirm RMNRemote config", "err", err) @@ -645,6 +647,7 @@ func DeployChainContracts( offramp.OffRampDynamicConfig{ FeeQuoter: feeQuoter.Address, PermissionLessExecutionThresholdSeconds: uint32(86400), + IsRMNVerificationDisabled: true, }, []offramp.OffRampSourceChainConfigArgs{}, ) diff --git a/integration-tests/deployment/ccip/rmn_test.go b/integration-tests/deployment/ccip/rmn_test.go index d7867929378..b1e2e39e2fa 100644 --- a/integration-tests/deployment/ccip/rmn_test.go +++ b/integration-tests/deployment/ccip/rmn_test.go @@ -52,7 +52,7 @@ func TestRMN(t *testing.T) { for _, chain := range envWithRMN.Env.Chains { rmnHomeSourceChains = append(rmnHomeSourceChains, rmn_home.RMNHomeSourceChain{ ChainSelector: chain.Selector, - MinObservers: 1, + F: 0, ObserverNodesBitmap: createObserverNodesBitmap(len(rmnHomeNodes)), }) } @@ -122,7 +122,7 @@ func TestRMN(t *testing.T) { rmnRemoteConfig := rmn_remote.RMNRemoteConfig{ RmnHomeContractConfigDigest: activeDigest, Signers: rmnRemoteSigners, - MinSigners: 1, + F: 0, } t.Logf("Setting RMNRemote config with RMNHome active digest: %x, cfg: %+v", activeDigest[:], rmnRemoteConfig) tx2, err2 := chState.RMNRemote.SetConfig(chain.DeployerKey, rmnRemoteConfig) diff --git a/integration-tests/deployment/ccip/test_assertions.go b/integration-tests/deployment/ccip/test_assertions.go index 7b7f8c9e5ad..b7a8b094156 100644 --- a/integration-tests/deployment/ccip/test_assertions.go +++ b/integration-tests/deployment/ccip/test_assertions.go @@ -180,7 +180,25 @@ func ConfirmCommitForAllWithExpectedSeqNums( }) } } - require.NoError(t, wg.Wait()) + + done := make(chan struct{}) + go func() { + require.NoError(t, wg.Wait()) + close(done) + }() + + require.Eventually(t, func() bool { + select { + case <-done: + return true + default: + return false + } + }, + 3*time.Minute, + 1*time.Second, + "all commitments did not confirm", + ) } // ConfirmCommitWithExpectedSeqNumRange waits for a commit report on the destination chain with the expected sequence number range. diff --git a/integration-tests/deployment/ccip/view/v1_6/rmnremote.go b/integration-tests/deployment/ccip/view/v1_6/rmnremote.go index bf0fefaa2eb..31b6f94ec59 100644 --- a/integration-tests/deployment/ccip/view/v1_6/rmnremote.go +++ b/integration-tests/deployment/ccip/view/v1_6/rmnremote.go @@ -12,9 +12,9 @@ type RMNRemoteView struct { } type RMNRemoteVersionedConfig struct { - Version uint32 `json:"version"` - Signers []RMNRemoteSigner `json:"signers"` - MinSigners uint64 `json:"minSigners"` + Version uint32 `json:"version"` + Signers []RMNRemoteSigner `json:"signers"` + F uint64 `json:"f"` } type RMNRemoteSigner struct { @@ -32,9 +32,9 @@ func GenerateRMNRemoteView(rmnReader *rmn_remote.RMNRemote) (RMNRemoteView, erro return RMNRemoteView{}, err } rmnConfig := RMNRemoteVersionedConfig{ - Version: config.Version, - Signers: make([]RMNRemoteSigner, 0, len(config.Config.Signers)), - MinSigners: config.Config.MinSigners, + Version: config.Version, + Signers: make([]RMNRemoteSigner, 0, len(config.Config.Signers)), + F: config.Config.F, } for _, signer := range config.Config.Signers { rmnConfig.Signers = append(rmnConfig.Signers, RMNRemoteSigner{