From 62ba1f047c80cab5725df25fcb48089407a6f495 Mon Sep 17 00:00:00 2001 From: Rens Rooimans Date: Tue, 3 Sep 2024 17:43:31 +0200 Subject: [PATCH] Increase max signers (#1405) Improve tests and error checks --------- Co-authored-by: app-token-issuer-infra-releng[bot] <120227048+app-token-issuer-infra-releng[bot]@users.noreply.github.com> --- contracts/gas-snapshots/ccip.gas-snapshot | 94 ++--- .../src/v0.8/ccip/capability/CCIPConfig.sol | 37 +- contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol | 18 +- .../ccip/test/capability/CCIPConfig.t.sol | 349 ++++-------------- .../v0.8/ccip/test/ocr/MultiOCR3Base.t.sol | 4 +- .../ccip/generated/ccip_config/ccip_config.go | 4 +- .../multi_ocr3_helper/multi_ocr3_helper.go | 2 +- .../ccip/generated/offramp/offramp.go | 2 +- ...rapper-dependency-versions-do-not-edit.txt | 6 +- 9 files changed, 154 insertions(+), 362 deletions(-) diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index 60e1c8bf98..6153b0a079 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -37,9 +37,9 @@ BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 23951) CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2132684) CCIPConfigSetup:test_getCapabilityConfiguration_Success() (gas: 9517) CCIPConfig_ConfigStateMachine:test__computeConfigDigest_Success() (gas: 70831) -CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_InitToRunning_Success() (gas: 363544) -CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_RunningToStaging_Success() (gas: 488615) -CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_StagingToRunning_Success() (gas: 453319) +CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_InitToRunning_Success() (gas: 363682) +CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_RunningToStaging_Success() (gas: 488896) +CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_StagingToRunning_Success() (gas: 453458) CCIPConfig_ConfigStateMachine:test__groupByPluginType_TooManyOCR3Configs_Reverts() (gas: 37049) CCIPConfig_ConfigStateMachine:test__groupByPluginType_threeCommitConfigs_Reverts() (gas: 61065) CCIPConfig_ConfigStateMachine:test__groupByPluginType_threeExecutionConfigs_Reverts() (gas: 60985) @@ -54,9 +54,9 @@ CCIPConfig_ConfigStateMachine:test__validateConfigTransition_RunningToStaging_Wr CCIPConfig_ConfigStateMachine:test__validateConfigTransition_StagingToRunning_Success() (gas: 376425) CCIPConfig_ConfigStateMachine:test__validateConfigTransition_StagingToRunning_WrongConfigDigest_Reverts() (gas: 157312) CCIPConfig_ConfigStateMachine:test_getCapabilityConfiguration_Success() (gas: 9605) -CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_CommitAndExecConfig_Success() (gas: 1850870) -CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_CommitConfigOnly_Success() (gas: 1068182) -CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_ExecConfigOnly_Success() (gas: 1068213) +CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_CommitAndExecConfig_Success() (gas: 1851149) +CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_CommitConfigOnly_Success() (gas: 1068320) +CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_ExecConfigOnly_Success() (gas: 1068351) CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_OnlyCapabilitiesRegistryCanCall_Reverts() (gas: 9599) CCIPConfig_beforeCapabilityConfigSet:test_beforeCapabilityConfigSet_ZeroLengthConfig_Success() (gas: 16057) CCIPConfig_beforeCapabilityConfigSet:test_getCapabilityConfiguration_Success() (gas: 9605) @@ -67,31 +67,31 @@ CCIPConfig_chainConfig:test_applyChainConfigUpdates_removeChainConfigs_Success() CCIPConfig_chainConfig:test_applyChainConfigUpdates_selectorNotFound_Reverts() (gas: 14829) CCIPConfig_chainConfig:test_getCapabilityConfiguration_Success() (gas: 9626) CCIPConfig_chainConfig:test_getPaginatedCCIPConfigs_Success() (gas: 370249) -CCIPConfig_constructor:test_constructor_Success() (gas: 3602871) -CCIPConfig_constructor:test_constructor_ZeroAddressNotAllowed_Revert() (gas: 61769) -CCIPConfig_updatePluginConfig:test__updatePluginConfig_InitToRunning_Success() (gas: 1057248) +CCIPConfig_constructor:test_constructor_Success() (gas: 3597863) +CCIPConfig_constructor:test_constructor_ZeroAddressNotAllowed_Revert() (gas: 61761) +CCIPConfig_updatePluginConfig:test__updatePluginConfig_InitToRunning_Success() (gas: 1057386) CCIPConfig_updatePluginConfig:test__updatePluginConfig_InvalidConfigLength_Reverts() (gas: 27561) CCIPConfig_updatePluginConfig:test__updatePluginConfig_InvalidConfigStateTransition_Reverts() (gas: 23127) -CCIPConfig_updatePluginConfig:test__updatePluginConfig_RunningToStaging_Success() (gas: 2009044) -CCIPConfig_updatePluginConfig:test__updatePluginConfig_StagingToRunning_Success() (gas: 2615819) +CCIPConfig_updatePluginConfig:test__updatePluginConfig_RunningToStaging_Success() (gas: 2009377) +CCIPConfig_updatePluginConfig:test__updatePluginConfig_StagingToRunning_Success() (gas: 2616263) CCIPConfig_updatePluginConfig:test_getCapabilityConfiguration_Success() (gas: 9605) -CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsHasDuplicates_Reverts() (gas: 294864) -CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsNotASubsetOfP2PIds_Reverts() (gas: 298296) -CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsNotSorted_Reverts() (gas: 295009) -CCIPConfig_validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 294328) -CCIPConfig_validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 291402) -CCIPConfig_validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 292367) -CCIPConfig_validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 292511) -CCIPConfig_validateConfig:test__validateConfig_NodeNotInRegistry_Reverts() (gas: 299453) -CCIPConfig_validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1159741) -CCIPConfig_validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 291231) -CCIPConfig_validateConfig:test__validateConfig_P2PIdsHasDuplicates_Reverts() (gas: 295878) -CCIPConfig_validateConfig:test__validateConfig_P2PIdsLengthNotMatching_Reverts() (gas: 293200) -CCIPConfig_validateConfig:test__validateConfig_P2PIdsNotSorted_Reverts() (gas: 295594) -CCIPConfig_validateConfig:test__validateConfig_Success() (gas: 302066) -CCIPConfig_validateConfig:test__validateConfig_TooManyBootstrapP2PIds_Reverts() (gas: 294510) -CCIPConfig_validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 1215496) -CCIPConfig_validateConfig:test__validateConfig_TooManyTransmitters_Reverts() (gas: 1213899) +CCIPConfig_validateConfig:test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() (gas: 292159) +CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsHasDuplicates_Reverts() (gas: 295946) +CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsNotASubsetOfP2PIds_Reverts() (gas: 299396) +CCIPConfig_validateConfig:test__validateConfig_BootstrapP2PIdsNotSorted_Reverts() (gas: 296081) +CCIPConfig_validateConfig:test__validateConfig_ChainSelectorNotFound_Reverts() (gas: 294926) +CCIPConfig_validateConfig:test__validateConfig_ChainSelectorNotSet_Reverts() (gas: 291771) +CCIPConfig_validateConfig:test__validateConfig_FMustBePositive_Reverts() (gas: 292999) +CCIPConfig_validateConfig:test__validateConfig_FTooHigh_Reverts() (gas: 293164) +CCIPConfig_validateConfig:test__validateConfig_NodeNotInRegistry_Reverts() (gas: 348310) +CCIPConfig_validateConfig:test__validateConfig_NotEnoughTransmitters_Reverts() (gas: 1209654) +CCIPConfig_validateConfig:test__validateConfig_OfframpAddressCannotBeZero_Reverts() (gas: 291876) +CCIPConfig_validateConfig:test__validateConfig_P2PIdsHasDuplicates_Reverts() (gas: 295780) +CCIPConfig_validateConfig:test__validateConfig_P2PIdsLengthNotMatching_Reverts() (gas: 293785) +CCIPConfig_validateConfig:test__validateConfig_P2PIdsNotSorted_Reverts() (gas: 296150) +CCIPConfig_validateConfig:test__validateConfig_Success() (gas: 302468) +CCIPConfig_validateConfig:test__validateConfig_TooManyBootstrapP2PIds_Reverts() (gas: 295556) +CCIPConfig_validateConfig:test__validateConfig_TooManySigners_Reverts() (gas: 494442) CCIPConfig_validateConfig:test_getCapabilityConfiguration_Success() (gas: 9584) CommitStore_constructor:test_Constructor_Success() (gas: 3091326) CommitStore_isUnpausedAndRMNHealthy:test_RMN_Success() (gas: 73420) @@ -536,20 +536,20 @@ MultiAggregateRateLimiter_updateRateLimitTokens:test_UpdateRateLimitTokens_Remov MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroDestToken_Revert() (gas: 18287) MultiAggregateRateLimiter_updateRateLimitTokens:test_ZeroSourceToken_Revert() (gas: 18216) MultiOCR3Base_setOCR3Configs:test_FMustBePositive_Revert() (gas: 59331) -MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 44289) -MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 283606) -MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 422233) +MultiOCR3Base_setOCR3Configs:test_FTooHigh_Revert() (gas: 43602) +MultiOCR3Base_setOCR3Configs:test_RepeatSignerAddress_Revert() (gas: 283585) +MultiOCR3Base_setOCR3Configs:test_RepeatTransmitterAddress_Revert() (gas: 422210) MultiOCR3Base_setOCR3Configs:test_SetConfigIgnoreSigners_Success() (gas: 511089) -MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 828394) +MultiOCR3Base_setOCR3Configs:test_SetConfigWithSigners_Success() (gas: 828371) MultiOCR3Base_setOCR3Configs:test_SetConfigWithoutSigners_Success() (gas: 456841) MultiOCR3Base_setOCR3Configs:test_SetConfigsZeroInput_Success() (gas: 12376) -MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2140127) -MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 141723) -MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 807279) -MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 171322) -MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 30289) -MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 254091) -MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 860006) +MultiOCR3Base_setOCR3Configs:test_SetMultipleConfigs_Success() (gas: 2140058) +MultiOCR3Base_setOCR3Configs:test_SignerCannotBeZeroAddress_Revert() (gas: 141702) +MultiOCR3Base_setOCR3Configs:test_StaticConfigChange_Revert() (gas: 807256) +MultiOCR3Base_setOCR3Configs:test_TooManySigners_Revert() (gas: 158772) +MultiOCR3Base_setOCR3Configs:test_TooManyTransmitters_Revert() (gas: 112266) +MultiOCR3Base_setOCR3Configs:test_TransmitterCannotBeZeroAddress_Revert() (gas: 254068) +MultiOCR3Base_setOCR3Configs:test_UpdateConfigSigners_Success() (gas: 859969) MultiOCR3Base_setOCR3Configs:test_UpdateConfigTransmittersWithoutSigners_Success() (gas: 475059) MultiOCR3Base_transmit:test_ConfigDigestMismatch_Revert() (gas: 42837) MultiOCR3Base_transmit:test_ForkedChain_Revert() (gas: 48442) @@ -640,12 +640,12 @@ OffRamp_ccipReceive:test_Reverts() (gas: 15773) OffRamp_commit:test_InvalidIntervalMinLargerThanMax_Revert() (gas: 67458) OffRamp_commit:test_InvalidInterval_Revert() (gas: 59778) OffRamp_commit:test_InvalidRootRevert() (gas: 58858) -OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6536301) -OffRamp_commit:test_NoConfig_Revert() (gas: 6120044) +OffRamp_commit:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6534892) +OffRamp_commit:test_NoConfig_Revert() (gas: 6118635) OffRamp_commit:test_OnlyGasPriceUpdates_Success() (gas: 105929) OffRamp_commit:test_OnlyPriceUpdateStaleReport_Revert() (gas: 115981) OffRamp_commit:test_OnlyTokenPriceUpdates_Success() (gas: 105950) -OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 349072) +OffRamp_commit:test_PriceSequenceNumberCleared_Success() (gas: 349049) OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 158960) OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 136092) OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 136492) @@ -654,9 +654,9 @@ OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 224806) OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 117632) OffRamp_commit:test_Unhealthy_Revert() (gas: 77674) OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 204296) -OffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6530690) +OffRamp_commit:test_WrongConfigWithoutSigners_Revert() (gas: 6529281) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 47832) -OffRamp_constructor:test_Constructor_Success() (gas: 6123343) +OffRamp_constructor:test_Constructor_Success() (gas: 6121934) OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 137089) OffRamp_constructor:test_ZeroChainSelector_Revert() (gas: 103806) OffRamp_constructor:test_ZeroNonceManager_Revert() (gas: 101677) @@ -667,12 +667,12 @@ OffRamp_execute:test_IncorrectArrayType_Revert() (gas: 17305) OffRamp_execute:test_LargeBatch_Success() (gas: 1812704) OffRamp_execute:test_MultipleReportsWithPartialValidationFailures_Success() (gas: 357260) OffRamp_execute:test_MultipleReports_Success() (gas: 284815) -OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6587413) -OffRamp_execute:test_NoConfig_Revert() (gas: 6170896) +OffRamp_execute:test_NoConfigWithOtherConfigPresent_Revert() (gas: 6586004) +OffRamp_execute:test_NoConfig_Revert() (gas: 6169487) OffRamp_execute:test_NonArray_Revert() (gas: 27809) OffRamp_execute:test_SingleReport_Success() (gas: 175620) OffRamp_execute:test_UnauthorizedTransmitter_Revert() (gas: 147848) -OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6948937) +OffRamp_execute:test_WrongConfigWithSigners_Revert() (gas: 6947505) OffRamp_execute:test_ZeroReports_Revert() (gas: 17225) OffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18257) OffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 249037) diff --git a/contracts/src/v0.8/ccip/capability/CCIPConfig.sol b/contracts/src/v0.8/ccip/capability/CCIPConfig.sol index 822b36fe8b..5f863ed7ae 100644 --- a/contracts/src/v0.8/ccip/capability/CCIPConfig.sol +++ b/contracts/src/v0.8/ccip/capability/CCIPConfig.sol @@ -35,7 +35,6 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator error ChainSelectorNotSet(); error TooManyOCR3Configs(); error TooManySigners(); - error TooManyTransmitters(); error TooManyBootstrapP2PIds(); error P2PIdsLengthNotMatching(uint256 p2pIdsLength, uint256 signersLength, uint256 transmittersLength); error NotEnoughTransmitters(uint256 got, uint256 minimum); @@ -60,6 +59,15 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator /// @notice The canonical capabilities registry address. address internal immutable i_capabilitiesRegistry; + uint8 internal constant MAX_OCR3_CONFIGS_PER_PLUGIN = 2; + uint8 internal constant MAX_OCR3_CONFIGS_PER_DON = 4; + uint256 internal constant CONFIG_DIGEST_PREFIX_MASK = type(uint256).max << (256 - 16); // 0xFFFF00..0 + /// @dev must be equal to libocr multi role: https://github.com/smartcontractkit/libocr/blob/ae747ca5b81236ffdbf1714318c652e923a5ff4d/offchainreporting2plus/types/config_digest.go#L28 + uint256 internal constant CONFIG_DIGEST_PREFIX = 0x000a << (256 - 16); // 0x000a00..00 + bytes32 internal constant EMPTY_ENCODED_ADDRESS_HASH = keccak256(abi.encode(address(0))); + /// @dev 256 is the hard limit due to the bit encoding of their indexes into a uint256. + uint256 internal constant MAX_NUM_ORACLES = 256; + /// @notice chain configuration for each chain that CCIP is deployed on. mapping(uint64 chainSelector => CCIPConfigTypes.ChainConfig chainConfig) internal s_chainConfigurations; @@ -73,13 +81,6 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator uint32 donId => mapping(Internal.OCRPluginType pluginType => CCIPConfigTypes.OCR3ConfigWithMeta[] ocr3Configs) ) internal s_ocr3Configs; - uint8 internal constant MAX_OCR3_CONFIGS_PER_PLUGIN = 2; - uint8 internal constant MAX_OCR3_CONFIGS_PER_DON = 4; - uint8 internal constant MAX_NUM_ORACLES = 31; - uint256 internal constant CONFIG_DIGEST_PREFIX_MASK = type(uint256).max << (256 - 16); // 0xFFFF00..0 - /// @dev must be equal to libocr multi role: https://github.com/smartcontractkit/libocr/blob/ae747ca5b81236ffdbf1714318c652e923a5ff4d/offchainreporting2plus/types/config_digest.go#L28 - uint256 internal constant CONFIG_DIGEST_PREFIX = 0x000a << (256 - 16); // 0x000a00..00 - /// @param capabilitiesRegistry the canonical capabilities registry address. constructor(address capabilitiesRegistry) { if (capabilitiesRegistry == address(0)) { @@ -388,26 +389,24 @@ contract CCIPConfig is ITypeAndVersion, ICapabilityConfiguration, OwnerIsCreator if (cfg.pluginType != Internal.OCRPluginType.Commit && cfg.pluginType != Internal.OCRPluginType.Execution) { revert InvalidPluginType(); } - // TODO: can we do more sophisticated validation than this? - if (cfg.offrampAddress.length == 0) revert OfframpAddressCannotBeZero(); + if (cfg.offrampAddress.length == 0 || keccak256(cfg.offrampAddress) == EMPTY_ENCODED_ADDRESS_HASH) { + revert OfframpAddressCannotBeZero(); + } if (!s_remoteChainSelectors.contains(cfg.chainSelector)) revert ChainSelectorNotFound(cfg.chainSelector); - // Some of these checks below are done in OCR2/3Base config validation, so we do them again here. - // Role DON OCR configs will have all the Role DON signers but only a subset of transmitters. - if (cfg.signers.length > MAX_NUM_ORACLES) revert TooManySigners(); - if (cfg.transmitters.length > MAX_NUM_ORACLES) revert TooManyTransmitters(); - // We check for chain config presence above, so fChain here must be non-zero. uint256 minTransmittersLength = 3 * s_chainConfigurations[cfg.chainSelector].fChain + 1; if (cfg.transmitters.length < minTransmittersLength) { revert NotEnoughTransmitters(cfg.transmitters.length, minTransmittersLength); } - if (cfg.F == 0) revert FMustBePositive(); - if (cfg.signers.length <= 3 * cfg.F) revert FTooHigh(); - - if (cfg.p2pIds.length != cfg.signers.length || cfg.p2pIds.length != cfg.transmitters.length) { + uint256 numberOfSigners = cfg.signers.length; + if (numberOfSigners > MAX_NUM_ORACLES) revert TooManySigners(); + if (numberOfSigners != cfg.p2pIds.length || numberOfSigners != cfg.transmitters.length) { revert P2PIdsLengthNotMatching(cfg.p2pIds.length, cfg.signers.length, cfg.transmitters.length); } + if (cfg.F == 0) revert FMustBePositive(); + if (numberOfSigners <= 3 * cfg.F) revert FTooHigh(); + if (cfg.bootstrapP2PIds.length > cfg.p2pIds.length) revert TooManyBootstrapP2PIds(); // check for duplicate p2p ids and bootstrapP2PIds. diff --git a/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol b/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol index 0759127097..c9fff4d624 100644 --- a/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol +++ b/contracts/src/v0.8/ccip/ocr/MultiOCR3Base.sol @@ -8,7 +8,7 @@ import {ITypeAndVersion} from "../../shared/interfaces/ITypeAndVersion.sol"; /// with multiple OCR plugin support. abstract contract MultiOCR3Base is ITypeAndVersion, OwnerIsCreator { // Maximum number of oracles the offchain reporting protocol is designed for - uint256 internal constant MAX_NUM_ORACLES = 31; + uint256 internal constant MAX_NUM_ORACLES = 256; /// @notice Triggers a new run of the offchain reporting protocol /// @param ocrPluginType OCR plugin type for which the config was set @@ -154,13 +154,12 @@ abstract contract MultiOCR3Base is ITypeAndVersion, OwnerIsCreator { _clearOracleRoles(ocrPluginType, ocrConfig.signers); address[] memory signers = ocrConfigArgs.signers; - ocrConfig.signers = signers; - uint8 signersLength = uint8(signers.length); - configInfo.n = signersLength; + if (signers.length > MAX_NUM_ORACLES) revert InvalidConfig(InvalidConfigErrorType.TOO_MANY_SIGNERS); + if (signers.length <= 3 * ocrConfigArgs.F) revert InvalidConfig(InvalidConfigErrorType.F_TOO_HIGH); - if (signersLength > MAX_NUM_ORACLES) revert InvalidConfig(InvalidConfigErrorType.TOO_MANY_SIGNERS); - if (signersLength <= 3 * ocrConfigArgs.F) revert InvalidConfig(InvalidConfigErrorType.F_TOO_HIGH); + configInfo.n = uint8(signers.length); + ocrConfig.signers = signers; _assignOracleRoles(ocrPluginType, signers, Role.Signer); } @@ -288,17 +287,16 @@ abstract contract MultiOCR3Base is ITypeAndVersion, OwnerIsCreator { bytes32 hashedReport, bytes32[] memory rs, bytes32[] memory ss, - bytes32 rawVs // signatures + bytes32 rawVs ) internal view { - // Verify signatures attached to report + // Verify signatures attached to report. Using a uint256 means we can only verify up to 256 oracles. uint256 signed = 0; uint256 numberOfSignatures = rs.length; for (uint256 i; i < numberOfSignatures; ++i) { // Safe from ECDSA malleability here since we check for duplicate signers. address signer = ecrecover(hashedReport, uint8(rawVs[i]) + 27, rs[i], ss[i]); - // Since we disallow address(0) as a valid signer address, it can - // never have a signer role. + // Since we disallow address(0) as a valid signer address, it can never have a signer role. Oracle memory oracle = s_oracles[ocrPluginType][signer]; if (oracle.role != Role.Signer) revert UnauthorizedSigner(); if (signed & (0x1 << oracle.index) != 0) revert NonUniqueSignatures(); diff --git a/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol b/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol index ca7f2114a6..d252698e62 100644 --- a/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol +++ b/contracts/src/v0.8/ccip/test/capability/CCIPConfig.t.sol @@ -334,13 +334,10 @@ contract CCIPConfig_chainConfig is CCIPConfigSetup { } contract CCIPConfig_validateConfig is CCIPConfigSetup { - // Successes. - - function test__validateConfig_Success() public { + function _getCorrectOCR3Config() internal returns (CCIPConfigTypes.OCR3Config memory) { (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ + return CCIPConfigTypes.OCR3Config({ pluginType: Internal.OCRPluginType.Commit, offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), chainSelector: 1, @@ -352,239 +349,118 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { offchainConfigVersion: 30, offchainConfig: bytes("offchainConfig") }); - s_ccipCC.validateConfig(config); + } + + // Successes. + + function test__validateConfig_Success() public { + s_ccipCC.validateConfig(_getCorrectOCR3Config()); } // Reverts. function test__validateConfig_ChainSelectorNotSet_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 0, // invalid - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.chainSelector = 0; // invalid vm.expectRevert(CCIPConfig.ChainSelectorNotSet.selector); s_ccipCC.validateConfig(config); } function test__validateConfig_OfframpAddressCannotBeZero_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: bytes(""), // invalid - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.offrampAddress = ""; // invalid vm.expectRevert(CCIPConfig.OfframpAddressCannotBeZero.selector); s_ccipCC.validateConfig(config); } - function test__validateConfig_ChainSelectorNotFound_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 2, // not set - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); - - vm.expectRevert(abi.encodeWithSelector(CCIPConfig.ChainSelectorNotFound.selector, 2)); - s_ccipCC.validateConfig(config); - } - - function test__validateConfig_TooManySigners_Reverts() public { - // 32 > 31 (max num oracles) - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(32); - - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + function test__validateConfig_ABIEncodedAddress_OfframpAddressCannotBeZero_Reverts() public { + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.offrampAddress = abi.encode(address(0)); // invalid - vm.expectRevert(CCIPConfig.TooManySigners.selector); + vm.expectRevert(CCIPConfig.OfframpAddressCannotBeZero.selector); s_ccipCC.validateConfig(config); } - function test__validateConfig_TooManyTransmitters_Reverts() public { - // 32 > 31 (max num oracles) - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(32); - - // truncate signers but keep transmitters > 31 - assembly { - mstore(signers, 30) - } - - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + function test__validateConfig_ChainSelectorNotFound_Reverts() public { + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.chainSelector = 2; // not set - vm.expectRevert(CCIPConfig.TooManyTransmitters.selector); + vm.expectRevert(abi.encodeWithSelector(CCIPConfig.ChainSelectorNotFound.selector, 2)); s_ccipCC.validateConfig(config); } function test__validateConfig_NotEnoughTransmitters_Reverts() public { + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + uint256 numberOfTransmitters = 3; + // 32 > 31 (max num oracles) (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(31); // truncate transmitters to < 3 * fChain + 1 // since fChain is 1 in this case, we need to truncate to 3 transmitters. assembly { - mstore(transmitters, 3) + mstore(transmitters, numberOfTransmitters) } - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + config.transmitters = transmitters; + config.p2pIds = p2pIds; + config.signers = signers; - vm.expectRevert(abi.encodeWithSelector(CCIPConfig.NotEnoughTransmitters.selector, 3, 4)); + vm.expectRevert(abi.encodeWithSelector(CCIPConfig.NotEnoughTransmitters.selector, numberOfTransmitters, 4)); s_ccipCC.validateConfig(config); } - function test__validateConfig_FMustBePositive_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); + function test__validateConfig_TooManySigners_Reverts() public { + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.signers = new bytes[](257); - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 0, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + vm.expectRevert(CCIPConfig.TooManySigners.selector); + s_ccipCC.validateConfig(config); + } + + function test__validateConfig_FMustBePositive_Reverts() public { + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.F = 0; // not positive vm.expectRevert(CCIPConfig.FMustBePositive.selector); s_ccipCC.validateConfig(config); } function test__validateConfig_FTooHigh_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 2, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.F = 2; // too high vm.expectRevert(CCIPConfig.FTooHigh.selector); s_ccipCC.validateConfig(config); } function test__validateConfig_P2PIdsLengthNotMatching_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - // truncate the p2pIds length - assembly { - mstore(p2pIds, 3) - } + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + uint256 expectedNumberOfP2pIds = config.signers.length; + uint256 wrongNumberOfP2pIds = expectedNumberOfP2pIds - 1; + config.p2pIds = new bytes32[](wrongNumberOfP2pIds); // Not enough vm.expectRevert( - abi.encodeWithSelector(CCIPConfig.P2PIdsLengthNotMatching.selector, uint256(3), uint256(4), uint256(4)) + abi.encodeWithSelector( + CCIPConfig.P2PIdsLengthNotMatching.selector, wrongNumberOfP2pIds, expectedNumberOfP2pIds, expectedNumberOfP2pIds + ) ); s_ccipCC.validateConfig(config); } function test__validateConfig_TooManyBootstrapP2PIds_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _makeBytes32Array(5, 0), // too many bootstrap p2pIds, 5 > 4 - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.bootstrapP2PIds = _makeBytes32Array(5, 0); // too many bootstrap p2pIds, 5 > 4 vm.expectRevert(CCIPConfig.TooManyBootstrapP2PIds.selector); s_ccipCC.validateConfig(config); } function test__validateConfig_NodeNotInRegistry_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); + (bytes32[] memory p2pIds,,) = _addChainConfig(4); bytes32 nonExistentP2PId = keccak256("notInRegistry"); p2pIds[0] = nonExistentP2PId; @@ -603,146 +479,65 @@ contract CCIPConfig_validateConfig is CCIPConfigSetup { }) ) ); - - // Config is for 4 nodes, so f == 1. - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.p2pIds = p2pIds; + config.bootstrapP2PIds = _subset(p2pIds, 0, 1); vm.expectRevert(abi.encodeWithSelector(CCIPConfig.NodeNotInRegistry.selector, nonExistentP2PId)); s_ccipCC.validateConfig(config); } function test__validateConfig_P2PIdsNotSorted_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - // Config is for 4 nodes, so f == 1. + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); //swapping two adjacent p2pIds to make it unsorted - (p2pIds[2], p2pIds[3]) = (p2pIds[3], p2pIds[2]); + (config.p2pIds[2], config.p2pIds[3]) = (config.p2pIds[3], config.p2pIds[2]); - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 1), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); - - vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASortedSet.selector, p2pIds)); + vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASortedSet.selector, config.p2pIds)); s_ccipCC.validateConfig(config); } function test__validateConfig_BootstrapP2PIdsNotSorted_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - // Config is for 4 nodes, so f == 1. - - bytes32[] memory bootstrapP2PIds = _subset(p2pIds, 0, 2); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + bytes32[] memory bootstrapP2PIds = _subset(config.p2pIds, 0, 2); //swapping bootstrapP2PIds to make it unsorted (bootstrapP2PIds[0], bootstrapP2PIds[1]) = (bootstrapP2PIds[1], bootstrapP2PIds[0]); - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: bootstrapP2PIds, - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + config.bootstrapP2PIds = bootstrapP2PIds; vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASortedSet.selector, bootstrapP2PIds)); s_ccipCC.validateConfig(config); } function test__validateConfig_P2PIdsHasDuplicates_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - // Config is for 4 nodes, so f == 1. - + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); //forcing duplicate p2pIds - p2pIds[1] = p2pIds[2]; - - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: _subset(p2pIds, 0, 2), - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + config.p2pIds[1] = config.p2pIds[2]; - vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASortedSet.selector, p2pIds)); + vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASortedSet.selector, config.p2pIds)); s_ccipCC.validateConfig(config); } function test__validateConfig_BootstrapP2PIdsHasDuplicates_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - // Config is for 4 nodes, so f == 1. - - bytes32[] memory bootstrapP2PIds = _subset(p2pIds, 0, 2); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); //forcing duplicate bootstrapP2PIds - bootstrapP2PIds[1] = bootstrapP2PIds[0]; - - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: bootstrapP2PIds, - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + config.bootstrapP2PIds = _subset(config.p2pIds, 0, 2); + config.bootstrapP2PIds[1] = config.bootstrapP2PIds[0]; - vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASortedSet.selector, bootstrapP2PIds)); + vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASortedSet.selector, config.bootstrapP2PIds)); s_ccipCC.validateConfig(config); } function test__validateConfig_BootstrapP2PIdsNotASubsetOfP2PIds_Reverts() public { - (bytes32[] memory p2pIds, bytes[] memory signers, bytes[] memory transmitters) = _addChainConfig(4); - // Config is for 4 nodes, so f == 1. - - //forcing invalid bootstrapP2PIds where the bootstrapP2PIds is sorted, but one of the element is not in the p2pIdsSet - bytes32[] memory bootstrapP2PIds = _subset(p2pIds, 0, 2); - p2pIds[1] = bytes32(uint256(p2pIds[0]) + 100); + CCIPConfigTypes.OCR3Config memory config = _getCorrectOCR3Config(); + config.bootstrapP2PIds = _subset(config.p2pIds, 0, 2); + config.p2pIds[1] = bytes32(uint256(config.p2pIds[0]) + 100); - CCIPConfigTypes.OCR3Config memory config = CCIPConfigTypes.OCR3Config({ - pluginType: Internal.OCRPluginType.Commit, - offrampAddress: abi.encodePacked(keccak256(abi.encode("offramp"))), - chainSelector: 1, - bootstrapP2PIds: bootstrapP2PIds, - p2pIds: p2pIds, - signers: signers, - transmitters: transmitters, - F: 1, - offchainConfigVersion: 30, - offchainConfig: bytes("offchainConfig") - }); + vm.expectRevert( + abi.encodeWithSelector(SortedSetValidationUtil.NotASubset.selector, config.bootstrapP2PIds, config.p2pIds) + ); - vm.expectRevert(abi.encodeWithSelector(SortedSetValidationUtil.NotASubset.selector, bootstrapP2PIds, p2pIds)); s_ccipCC.validateConfig(config); } } diff --git a/contracts/src/v0.8/ccip/test/ocr/MultiOCR3Base.t.sol b/contracts/src/v0.8/ccip/test/ocr/MultiOCR3Base.t.sol index 5b784bf721..8867d1b127 100644 --- a/contracts/src/v0.8/ccip/test/ocr/MultiOCR3Base.t.sol +++ b/contracts/src/v0.8/ccip/test/ocr/MultiOCR3Base.t.sol @@ -878,7 +878,7 @@ contract MultiOCR3Base_setOCR3Configs is MultiOCR3BaseSetup { function test_TooManyTransmitters_Revert() public { address[] memory signers = new address[](0); - address[] memory transmitters = new address[](32); + address[] memory transmitters = new address[](257); MultiOCR3Base.OCRConfigArgs[] memory ocrConfigs = new MultiOCR3Base.OCRConfigArgs[](1); ocrConfigs[0] = MultiOCR3Base.OCRConfigArgs({ @@ -899,7 +899,7 @@ contract MultiOCR3Base_setOCR3Configs is MultiOCR3BaseSetup { } function test_TooManySigners_Revert() public { - address[] memory signers = new address[](32); + address[] memory signers = new address[](257); MultiOCR3Base.OCRConfigArgs[] memory ocrConfigs = new MultiOCR3Base.OCRConfigArgs[](1); ocrConfigs[0] = MultiOCR3Base.OCRConfigArgs({ diff --git a/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go b/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go index dbbd06ffb5..565e0bff3a 100644 --- a/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go +++ b/core/gethwrappers/ccip/generated/ccip_config/ccip_config.go @@ -61,8 +61,8 @@ type CCIPConfigTypesOCR3ConfigWithMeta struct { } var CCIPConfigMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidConfigLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"currentState\",\"type\":\"uint8\"},{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"proposedState\",\"type\":\"uint8\"}],\"name\":\"InvalidConfigStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentConfigTransition\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"set\",\"type\":\"bytes32[]\"}],\"name\":\"NotASortedSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"subset\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"superset\",\"type\":\"bytes32[]\"}],\"name\":\"NotASubset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"p2pIdsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signersLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transmittersLength\",\"type\":\"uint256\"}],\"name\":\"P2PIdsLengthNotMatching\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyBootstrapP2PIds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOCR3Configs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyTransmitters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"}],\"name\":\"WrongConfigCount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigestBlueGreen\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getOCRConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"internalType\":\"structCCIPConfigTypes.OCR3ConfigWithMeta[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b5060405162004481380380620044818339810160408190526200003491620001a6565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fb565b5050506001600160a01b038116620000e9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001d8565b336001600160a01b03821603620001555760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001b957600080fd5b81516001600160a01b0381168114620001d157600080fd5b9392505050565b608051614280620002016000396000818160f801528181610eff015261116f01526142806000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638318ed5d11610081578063f2fde38b1161005b578063f2fde38b1461020f578063f442c89a14610222578063fba64a7c1461023557600080fd5b80638318ed5d146101b05780638da5cb5b146101d1578063b74b2356146101ef57600080fd5b8063181f5a77116100b2578063181f5a771461013d5780634bd0473f1461018657806379ba5097146101a657600080fd5b806301ffc9a7146100ce578063020330e6146100f6575b600080fd5b6100e16100dc366004613029565b610248565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b6101796040518060400160405280601481526020017f43434950436f6e66696720312e362e302d64657600000000000000000000000081525081565b6040516100ed91906130cf565b610199610194366004613113565b6102e1565b6040516100ed9190613232565b6101ae6107b1565b005b6101796101be36600461340f565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff16610118565b6102026101fd36600461342c565b6108b3565b6040516100ed9190613492565b6101ae61021d366004613522565b610b34565b6101ae6102303660046135a4565b610b48565b6101ae610243366004613628565b610ee7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea7210000000000000000000000000000000000000000000000000000000014806102db57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b63ffffffff8216600090815260056020526040812060609183600181111561030b5761030b613148565b600181111561031c5761031c613148565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156107a557600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff16600181111561038f5761038f613148565b60018111156103a0576103a0613148565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916103f8906136e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610424906136e5565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156104c957602002820191906000526020600020905b8154815260200190600101908083116104b5575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561052157602002820191906000526020600020905b81548152602001906001019080831161050d575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156105fb57838290600052602060002001805461056e906136e5565b80601f016020809104026020016040519081016040528092919081815260200182805461059a906136e5565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b50505050508152602001906001019061054f565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156106d4578382906000526020600020018054610647906136e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610673906136e5565b80156106c05780601f10610695576101008083540402835291602001916106c0565b820191906000526020600020905b8154815290600101906020018083116106a357829003601f168201915b505050505081526020019060010190610628565b5050505081526020016006820180546106ec906136e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610718906136e5565b80156107655780601f1061073a57610100808354040283529160200191610765565b820191906000526020600020905b81548152906001019060200180831161074857829003601f168201915b505050919092525050508152600782015467ffffffffffffffff16602080830191909152600890920154604090910152908252600192909201910161034a565b50505050905092915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606060006108c16003610fa2565b905060006108cf8486613767565b90508315806108de5750818110155b1561091e576040805160008082526020820190925290610914565b610901612dba565b8152602001906001900390816108f95790505b50925050506102db565b600061092a85836137ad565b9050828111156109375750815b600061094383836137c0565b67ffffffffffffffff81111561095b5761095b61377e565b60405190808252806020026020018201604052801561099457816020015b610981612dba565b8152602001906001900390816109795790505b50905060006109a36003610fac565b9050835b83811015610b275760008282815181106109c3576109c36137d3565b60209081029190910181015160408051808201825267ffffffffffffffff831680825260009081526002855282902082518154608081880283018101909552606082018181529597509295860194909391928492849190840182828015610a4957602002820191906000526020600020905b815481526020019060010190808311610a35575b5050509183525050600182015460ff166020820152600282018054604090920191610a73906136e5565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f906136e5565b8015610aec5780601f10610ac157610100808354040283529160200191610aec565b820191906000526020600020905b815481529060010190602001808311610acf57829003601f168201915b50505091909252505050905284610b0388856137c0565b81518110610b1357610b136137d3565b6020908102919091010152506001016109a7565b5090979650505050505050565b610b3c610fc0565b610b4581611043565b50565b610b50610fc0565b60005b83811015610d3657610b97858583818110610b7057610b706137d3565b9050602002016020810190610b859190613802565b60039067ffffffffffffffff16611138565b610c0157848482818110610bad57610bad6137d3565b9050602002016020810190610bc29190613802565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161082e565b60026000868684818110610c1757610c176137d3565b9050602002016020810190610c2c9190613802565b67ffffffffffffffff1681526020810191909152604001600090812090610c538282612e02565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610c8b600283016000612e20565b5050610cc9858583818110610ca257610ca26137d3565b9050602002016020810190610cb79190613802565b60039067ffffffffffffffff16611150565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110610cfd57610cfd6137d3565b9050602002016020810190610d129190613802565b60405167ffffffffffffffff909116815260200160405180910390a1600101610b53565b5060005b81811015610ee0576000838383818110610d5657610d566137d3565b9050602002810190610d68919061381d565b610d7690602081019061385b565b610d7f90613a5d565b90506000848484818110610d9557610d956137d3565b9050602002810190610da7919061381d565b610db5906020810190613802565b9050610dc4826000015161115c565b816020015160ff16600003610e05576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600260209081526040909120835180518593610e35928492910190612e5a565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560408201516002820190610e829082613b45565b50610e9c91506003905067ffffffffffffffff83166112a8565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e08183604051610ece929190613c5f565b60405180910390a15050600101610d3a565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610f56576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610f6d610f6886880188613d0a565b6112b4565b8151919350915015610f8557610f858360008461150d565b805115610f9857610f988360018361150d565b5050505050505050565b60006102db825490565b60606000610fb983611ce4565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161082e565b565b3373ffffffffffffffffffffffffffffffffffffffff8216036110c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161082e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120541515610fb9565b6000610fb98383611d40565b60005b81518110156112a45760008019167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350c946fe8484815181106111bb576111bb6137d3565b60200260200101516040518263ffffffff1660e01b81526004016111e191815260200190565b600060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112449190810190613f7b565b608001510361129c5781818151811061125f5761125f6137d3565b60200260200101516040517f8907a4fa00000000000000000000000000000000000000000000000000000000815260040161082e91815260200190565b60010161115f565b5050565b6000610fb98383611e3a565b606080600460ff16835111156112f6576040517f8854586400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160028082526060820190925290816020015b61137a6040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b81526020019060019003908161130c57505060408051600280825260608201909252919350602082015b6114126040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816113a457905050905060008060005b855181101561150057600086828151811061144a5761144a6137d3565b602002602001015160000151600181111561146757611467613148565b036114b45785818151811061147e5761147e6137d3565b6020026020010151858481518110611498576114986137d3565b6020026020010181905250826114ad90614053565b92506114f8565b8581815181106114c6576114c66137d3565b60200260200101518483815181106114e0576114e06137d3565b6020026020010181905250816114f590614053565b91505b60010161142d565b5090835281529092909150565b63ffffffff831660009081526005602052604081208184600181111561153557611535613148565b600181111561154657611546613148565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156119cf57600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff1660018111156115b9576115b9613148565b60018111156115ca576115ca613148565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191611622906136e5565b80601f016020809104026020016040519081016040528092919081815260200182805461164e906136e5565b801561169b5780601f106116705761010080835404028352916020019161169b565b820191906000526020600020905b81548152906001019060200180831161167e57829003601f168201915b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156116f357602002820191906000526020600020905b8154815260200190600101908083116116df575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561174b57602002820191906000526020600020905b815481526020019060010190808311611737575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611825578382906000526020600020018054611798906136e5565b80601f01602080910402602001604051908101604052809291908181526020018280546117c4906136e5565b80156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b505050505081526020019060010190611779565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156118fe578382906000526020600020018054611871906136e5565b80601f016020809104026020016040519081016040528092919081815260200182805461189d906136e5565b80156118ea5780601f106118bf576101008083540402835291602001916118ea565b820191906000526020600020905b8154815290600101906020018083116118cd57829003601f168201915b505050505081526020019060010190611852565b505050508152602001600682018054611916906136e5565b80601f0160208091040260200160405190810160405280929190818152602001828054611942906136e5565b801561198f5780601f106119645761010080835404028352916020019161198f565b820191906000526020600020905b81548152906001019060200180831161197257829003601f168201915b505050919092525050508152600782015467ffffffffffffffff166020808301919091526008909201546040909101529082526001929092019101611574565b50505050905060006119e18251611e89565b905060006119ef8451611e89565b90506119fb8282611edb565b6000611a0a8785878686611f97565b9050611a168482612383565b63ffffffff8716600090815260056020526040812090876001811115611a3e57611a3e613148565b6001811115611a4f57611a4f613148565b81526020019081526020016000206000611a699190612ea5565b60005b8151811015610f985763ffffffff8816600090815260056020526040812090886001811115611a9d57611a9d613148565b6001811115611aae57611aae613148565b8152602001908152602001600020828281518110611ace57611ace6137d3565b6020908102919091018101518254600181810185556000948552929093208151805160099095029091018054929490939192849283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016908381811115611b3857611b38613148565b021790555060208201518154604084015160608501517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90921661010067ffffffffffffffff948516027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1617690100000000000000000060ff90921691909102177fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff166a0100000000000000000000929091169190910217815560808201516001820190611c079082613b45565b5060a08201518051611c23916002840191602090910190612e5a565b5060c08201518051611c3f916003840191602090910190612e5a565b5060e08201518051611c5b916004840191602090910190612ec6565b506101008201518051611c78916005840191602090910190612ec6565b506101208201516006820190611c8e9082613b45565b50505060208201516007820180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff909216919091179055604090910151600890910155600101611a6c565b606081600001805480602002602001604051908101604052809291908181526020018280548015611d3457602002820191906000526020600020905b815481526020019060010190808311611d20575b50505050509050919050565b60008181526001830160205260408120548015611e29576000611d646001836137c0565b8554909150600090611d78906001906137c0565b9050808214611ddd576000866000018281548110611d9857611d986137d3565b9060005260206000200154905080876000018481548110611dbb57611dbb6137d3565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611dee57611dee61408b565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102db565b60009150506102db565b5092915050565b6000818152600183016020526040812054611e81575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102db565b5060006102db565b60006002821115611ec9576040517f3e4785260000000000000000000000000000000000000000000000000000000081526004810183905260240161082e565b8160028111156102db576102db613148565b6000826002811115611eef57611eef613148565b826002811115611f0157611f01613148565b611f0b91906140ba565b90508060011480611f575750807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff148015611f5757506002836002811115611f5557611f55613148565b145b15611f6157505050565b82826040517f0a6b675b00000000000000000000000000000000000000000000000000000000815260040161082e9291906140ea565b60606000845167ffffffffffffffff811115611fb557611fb561377e565b604051908082528060200260200182016040528015611fde578160200160208202803683370190505b5090506000846002811115611ff557611ff5613148565b1480156120135750600183600281111561201157612011613148565b145b156120545760018160008151811061202d5761202d6137d3565b602002602001019067ffffffffffffffff16908167ffffffffffffffff16815250506121bc565b600184600281111561206857612068613148565b1480156120865750600283600281111561208457612084613148565b145b1561211d578560008151811061209e5761209e6137d3565b602002602001015160200151816000815181106120bd576120bd6137d3565b602002602001019067ffffffffffffffff16908167ffffffffffffffff1681525050856000815181106120f2576120f26137d3565b602002602001015160200151600161210a9190614105565b8160018151811061202d5761202d6137d3565b600284600281111561213157612131613148565b14801561214f5750600183600281111561214d5761214d613148565b145b156121865785600181518110612167576121676137d3565b6020026020010151602001518160008151811061202d5761202d6137d3565b83836040517f0a6b675b00000000000000000000000000000000000000000000000000000000815260040161082e9291906140ea565b6000855167ffffffffffffffff8111156121d8576121d861377e565b60405190808252806020026020018201604052801561228e57816020015b604080516101a081018252600060608083018281526080840183905260a0840183905260c0840183905260e084018290526101008401829052610120840182905261014084018290526101608401829052610180840191909152825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816121f65790505b50905060005b8251811015612377576122bf8782815181106122b2576122b26137d3565b6020026020010151612702565b60405180606001604052808883815181106122dc576122dc6137d3565b602002602001015181526020018483815181106122fb576122fb6137d3565b602002602001015167ffffffffffffffff16815260200161234f8b868581518110612328576123286137d3565b60200260200101518b8681518110612342576123426137d3565b6020026020010151612adf565b815250828281518110612364576123646137d3565b6020908102919091010152600101612294565b50979650505050505050565b81518151811580156123955750806001145b1561243757826000815181106123ad576123ad6137d3565b60200260200101516020015167ffffffffffffffff1660011461243157826000815181106123dd576123dd6137d3565b60209081029190910181015101516040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526001602482015260440161082e565b50505050565b8160011480156124475750806002145b156125fd578360008151811061245f5761245f6137d3565b6020026020010151604001518360008151811061247e5761247e6137d3565b6020026020010151604001511461250a57826000815181106124a2576124a26137d3565b602002602001015160400151846000815181106124c1576124c16137d3565b6020026020010151604001516040517fc7ccdd7f00000000000000000000000000000000000000000000000000000000815260040161082e929190918252602082015260400190565b8360008151811061251d5761251d6137d3565b60200260200101516020015160016125359190614105565b67ffffffffffffffff1683600181518110612552576125526137d3565b60200260200101516020015167ffffffffffffffff16146124315782600181518110612580576125806137d3565b6020026020010151602001518460008151811061259f5761259f6137d3565b60200260200101516020015160016125b79190614105565b6040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff92831660048201529116602482015260440161082e565b81600214801561260d5750806001145b156126d05783600181518110612625576126256137d3565b60200260200101516040015183600081518110612644576126446137d3565b602002602001015160400151146124315782600081518110612668576126686137d3565b60200260200101516040015184600181518110612687576126876137d3565b6020026020010151604001516040517f9e97567000000000000000000000000000000000000000000000000000000000815260040161082e929190918252602082015260400190565b6040517f1f1b2bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff1660000361274a576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151600181111561275f5761275f613148565b14158015612780575060018151600181111561277d5761277d613148565b14155b156127b7576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060800151516000036127f6576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516128119060039067ffffffffffffffff16611138565b6128595760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161082e565b60e081015151601f1015612899576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61010081015151601f10156128da576040517f645960ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208082015167ffffffffffffffff1660009081526002909152604081206001015461290a9060ff166003614126565b612915906001614142565b60ff1690508082610100015151101561296c57610100820151516040517f548dd21f00000000000000000000000000000000000000000000000000000000815260048101919091526024810182905260440161082e565b816040015160ff166000036129ad576040517f39d1a4d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60408201516129bd906003614126565b60ff168260e0015151116129fd576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160e00151518260c0015151141580612a215750816101000151518260c001515114155b15612a7c5760c08201515160e083015151610100840151516040517fba900f6d00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482015260640161082e565b8160c00151518260a00151511115612ac0576040517f8473d80700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ad28260a001518360c00151612bb4565b6112a48260c0015161115c565b60008082602001518584600001518560800151878760a001518860c001518960e001518a61010001518b604001518c606001518d6101200151604051602001612b339c9b9a9998979695949392919061415b565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e0a000000000000000000000000000000000000000000000000000000000000179150509392505050565b81511580612bc157508051155b15612bf8576040517fe249684100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c0182612d2f565b612c0a81612d2f565b6000805b835182108015612c1e5750825181105b15612cf057828181518110612c3557612c356137d3565b6020026020010151848381518110612c4f57612c4f6137d3565b60200260200101511115612c6d57612c6681614053565b9050612c0e565b828181518110612c7f57612c7f6137d3565b6020026020010151848381518110612c9957612c996137d3565b602002602001015103612cba57612caf82614053565b9150612c6681614053565b83836040517fd671700c00000000000000000000000000000000000000000000000000000000815260040161082e92919061423b565b83518210156124315783836040517fd671700c00000000000000000000000000000000000000000000000000000000815260040161082e92919061423b565b60015b81518110156112a45781612d476001836137c0565b81518110612d5757612d576137d3565b6020026020010151828281518110612d7157612d716137d3565b602002602001015111612db257816040517f1bc41b4200000000000000000000000000000000000000000000000000000000815260040161082e9190614260565b600101612d32565b6040518060400160405280600067ffffffffffffffff168152602001612dfd604051806060016040528060608152602001600060ff168152602001606081525090565b905290565b5080546000825590600052602060002090810190610b459190612f18565b508054612e2c906136e5565b6000825580601f10612e3c575050565b601f016020900490600052602060002090810190610b459190612f18565b828054828255906000526020600020908101928215612e95579160200282015b82811115612e95578251825591602001919060010190612e7a565b50612ea1929150612f18565b5090565b5080546000825560090290600052602060002090810190610b459190612f2d565b828054828255906000526020600020908101928215612f0c579160200282015b82811115612f0c5782518290612efc9082613b45565b5091602001919060010190612ee6565b50612ea1929150612fee565b5b80821115612ea15760008155600101612f19565b80821115612ea15780547fffffffffffffffffffffffffffff00000000000000000000000000000000000016815560008181612f6c6001830182612e20565b612f7a600283016000612e02565b612f88600383016000612e02565b612f9660048301600061300b565b612fa460058301600061300b565b612fb2600683016000612e20565b5050506007810180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016905560006008820155600901612f2d565b80821115612ea15760006130028282612e20565b50600101612fee565b5080546000825590600052602060002090810190610b459190612fee565b60006020828403121561303b57600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fb957600080fd5b6000815180845260005b8181101561309157602081850181015186830182015201613075565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610fb9602083018461306b565b63ffffffff81168114610b4557600080fd5b80356130ff816130e2565b919050565b8035600281106130ff57600080fd5b6000806040838503121561312657600080fd5b8235613131816130e2565b915061313f60208401613104565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061318757613187613148565b9052565b60008151808452602080850194506020840160005b838110156131bc578151875295820195908201906001016131a0565b509495945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015610b27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086840301895261322083835161306b565b988401989250908301906001016131e6565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015613401577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08984030185528151606081518186526132a08287018251613177565b8981015160806132bb8189018367ffffffffffffffff169052565b8a830151915060a06132d1818a018460ff169052565b938301519360c092506132ef8984018667ffffffffffffffff169052565b818401519450610140915060e082818b015261330f6101a08b018761306b565b95508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0610100818c890301818d015261334e888561318b565b97508587015195506101209350818c890301848d015261336e888761318b565b9750828701519550818c890301858d015261338988876131c7565b975080870151955050808b8803016101608c01526133a787866131c7565b9650828601519550808b8803016101808c015250505050506133c9828261306b565b915050888201516133e58a87018267ffffffffffffffff169052565b509087015193870193909352938601939086019060010161325b565b509098975050505050505050565b60006020828403121561342157600080fd5b8135610fb9816130e2565b6000806040838503121561343f57600080fd5b50508035926020909101359150565b6000815160608452613463606085018261318b565b905060ff602084015116602085015260408301518482036040860152613489828261306b565b95945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015613401578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff16845287015187840187905261350f8785018261344e565b95880195935050908601906001016134bb565b60006020828403121561353457600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610fb957600080fd5b60008083601f84011261356a57600080fd5b50813567ffffffffffffffff81111561358257600080fd5b6020830191508360208260051b850101111561359d57600080fd5b9250929050565b600080600080604085870312156135ba57600080fd5b843567ffffffffffffffff808211156135d257600080fd5b6135de88838901613558565b909650945060208701359150808211156135f757600080fd5b5061360487828801613558565b95989497509550505050565b803567ffffffffffffffff811681146130ff57600080fd5b6000806000806000806080878903121561364157600080fd5b863567ffffffffffffffff8082111561365957600080fd5b6136658a838b01613558565b9098509650602089013591508082111561367e57600080fd5b818901915089601f83011261369257600080fd5b8135818111156136a157600080fd5b8a60208285010111156136b357600080fd5b6020830196508095505050506136cb60408801613610565b91506136d9606088016130f4565b90509295509295509295565b600181811c908216806136f957607f821691505b602082108103613732577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176102db576102db613738565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b808201808211156102db576102db613738565b818103818111156102db576102db613738565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561381457600080fd5b610fb982613610565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261385157600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261385157600080fd5b604051610140810167ffffffffffffffff811182821017156138b3576138b361377e565b60405290565b60405160e0810167ffffffffffffffff811182821017156138b3576138b361377e565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156139235761392361377e565b604052919050565b600067ffffffffffffffff8211156139455761394561377e565b5060051b60200190565b600082601f83011261396057600080fd5b813560206139756139708361392b565b6138dc565b8083825260208201915060208460051b87010193508684111561399757600080fd5b602086015b848110156139b3578035835291830191830161399c565b509695505050505050565b803560ff811681146130ff57600080fd5b600082601f8301126139e057600080fd5b813567ffffffffffffffff8111156139fa576139fa61377e565b613a2b60207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016138dc565b818152846020838601011115613a4057600080fd5b816020850160208301376000918101602001919091529392505050565b600060608236031215613a6f57600080fd5b6040516060810167ffffffffffffffff8282108183111715613a9357613a9361377e565b816040528435915080821115613aa857600080fd5b613ab43683870161394f565b8352613ac2602086016139be565b60208401526040850135915080821115613adb57600080fd5b50613ae8368286016139cf565b60408301525092915050565b601f821115613b40576000816000526020600020601f850160051c81016020861015613b1d5750805b601f850160051c820191505b81811015613b3c57828155600101613b29565b5050505b505050565b815167ffffffffffffffff811115613b5f57613b5f61377e565b613b7381613b6d84546136e5565b84613af4565b602080601f831160018114613bc65760008415613b905750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b3c565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613c1357888601518255948401946001909101908401613bf4565b5085821015613c4f57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83168152604060208201526000613c82604083018461344e565b949350505050565b600082601f830112613c9b57600080fd5b81356020613cab6139708361392b565b82815260059290921b84018101918181019086841115613cca57600080fd5b8286015b848110156139b357803567ffffffffffffffff811115613cee5760008081fd5b613cfc8986838b01016139cf565b845250918301918301613cce565b60006020808385031215613d1d57600080fd5b823567ffffffffffffffff80821115613d3557600080fd5b818501915085601f830112613d4957600080fd5b8135613d576139708261392b565b81815260059190911b83018401908481019088831115613d7657600080fd5b8585015b83811015613f0457803585811115613d9157600080fd5b8601610140818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215613dc657600080fd5b613dce61388f565b613dd9898301613104565b8152613de760408301613610565b89820152613df7606083016139be565b6040820152613e0860808301613610565b606082015260a082013587811115613e1f57600080fd5b613e2d8d8b838601016139cf565b60808301525060c082013587811115613e4557600080fd5b613e538d8b8386010161394f565b60a08301525060e082013587811115613e6b57600080fd5b613e798d8b8386010161394f565b60c0830152506101008083013588811115613e9357600080fd5b613ea18e8c83870101613c8a565b60e0840152506101208084013589811115613ebb57600080fd5b613ec98f8d83880101613c8a565b8385015250610140840135915088821115613ee357600080fd5b613ef18e8c848701016139cf565b9083015250845250918601918601613d7a565b5098975050505050505050565b80516130ff816130e2565b600082601f830112613f2d57600080fd5b81516020613f3d6139708361392b565b8083825260208201915060208460051b870101935086841115613f5f57600080fd5b602086015b848110156139b35780518352918301918301613f64565b600060208284031215613f8d57600080fd5b815167ffffffffffffffff80821115613fa557600080fd5b9083019060e08286031215613fb957600080fd5b613fc16138b9565b613fca83613f11565b8152613fd860208401613f11565b6020820152613fe960408401613f11565b6040820152606083015160608201526080830151608082015260a08301518281111561401457600080fd5b61402087828601613f1c565b60a08301525060c08301518281111561403857600080fd5b61404487828601613f1c565b60c08301525095945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361408457614084613738565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8181036000831280158383131683831282161715611e3357611e33613738565b6003811061318757613187613148565b604081016140f882856140da565b610fb960208301846140da565b67ffffffffffffffff818116838216019080821115611e3357611e33613738565b60ff8181168382160290811690818114611e3357611e33613738565b60ff81811683821601908111156102db576102db613738565b67ffffffffffffffff8d16815263ffffffff8c166020820152614181604082018c613177565b6101806060820152600061419961018083018c61306b565b67ffffffffffffffff8b16608084015282810360a08401526141bb818b61318b565b905082810360c08401526141cf818a61318b565b905082810360e08401526141e381896131c7565b90508281036101008401526141f881886131c7565b60ff8716610120850152905067ffffffffffffffff8516610140840152828103610160840152614228818561306b565b9f9e505050505050505050505050505050565b60408152600061424e604083018561318b565b8281036020840152613489818561318b565b602081526000610fb9602083018461318b56fea164736f6c6343000818000a", + ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"capabilitiesRegistry\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainSelectorNotFound\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ChainSelectorNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EmptySet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FChainMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FMustBePositive\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"InvalidConfigLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"currentState\",\"type\":\"uint8\"},{\"internalType\":\"enumCCIPConfigTypes.ConfigState\",\"name\":\"proposedState\",\"type\":\"uint8\"}],\"name\":\"InvalidConfigStateTransition\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPluginType\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"p2pId\",\"type\":\"bytes32\"}],\"name\":\"NodeNotInRegistry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NonExistentConfigTransition\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"set\",\"type\":\"bytes32[]\"}],\"name\":\"NotASortedSet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"subset\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"superset\",\"type\":\"bytes32[]\"}],\"name\":\"NotASubset\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"got\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"minimum\",\"type\":\"uint256\"}],\"name\":\"NotEnoughTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OfframpAddressCannotBeZero\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCapabilitiesRegistryCanCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"p2pIdsLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"signersLength\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"transmittersLength\",\"type\":\"uint256\"}],\"name\":\"P2PIdsLengthNotMatching\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyBootstrapP2PIds\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOCR3Configs\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManySigners\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"got\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"expected\",\"type\":\"uint64\"}],\"name\":\"WrongConfigCount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"got\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"}],\"name\":\"WrongConfigDigestBlueGreen\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"CapabilityConfigurationSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"}],\"name\":\"ChainConfigRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"indexed\":false,\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"name\":\"ChainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"chainSelectorRemoves\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"chainConfigAdds\",\"type\":\"tuple[]\"}],\"name\":\"applyChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"}],\"name\":\"beforeCapabilityConfigSet\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"pageIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"pageSize\",\"type\":\"uint256\"}],\"name\":\"getAllChainConfigs\",\"outputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes32[]\",\"name\":\"readers\",\"type\":\"bytes32[]\"},{\"internalType\":\"uint8\",\"name\":\"fChain\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"config\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfig\",\"name\":\"chainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structCCIPConfigTypes.ChainConfigInfo[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"name\":\"getCapabilityConfiguration\",\"outputs\":[{\"internalType\":\"bytes\",\"name\":\"configuration\",\"type\":\"bytes\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCapabilityRegistry\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"donId\",\"type\":\"uint32\"},{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"}],\"name\":\"getOCRConfig\",\"outputs\":[{\"components\":[{\"components\":[{\"internalType\":\"enumInternal.OCRPluginType\",\"name\":\"pluginType\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint8\",\"name\":\"F\",\"type\":\"uint8\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offrampAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"bootstrapP2PIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"p2pIds\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes[]\",\"name\":\"signers\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes[]\",\"name\":\"transmitters\",\"type\":\"bytes[]\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"internalType\":\"structCCIPConfigTypes.OCR3Config\",\"name\":\"config\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"internalType\":\"structCCIPConfigTypes.OCR3ConfigWithMeta[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523480156200001157600080fd5b506040516200446c3803806200446c8339810160408190526200003491620001a6565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000fb565b5050506001600160a01b038116620000e9576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160a01b0316608052620001d8565b336001600160a01b03821603620001555760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600060208284031215620001b957600080fd5b81516001600160a01b0381168114620001d157600080fd5b9392505050565b60805161426b620002016000396000818160f801528181610eff015261116f015261426b6000f3fe608060405234801561001057600080fd5b50600436106100c95760003560e01c80638318ed5d11610081578063f2fde38b1161005b578063f2fde38b1461020f578063f442c89a14610222578063fba64a7c1461023557600080fd5b80638318ed5d146101b05780638da5cb5b146101d1578063b74b2356146101ef57600080fd5b8063181f5a77116100b2578063181f5a771461013d5780634bd0473f1461018657806379ba5097146101a657600080fd5b806301ffc9a7146100ce578063020330e6146100f6575b600080fd5b6100e16100dc366004613015565b610248565b60405190151581526020015b60405180910390f35b7f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016100ed565b6101796040518060400160405280601481526020017f43434950436f6e66696720312e362e302d64657600000000000000000000000081525081565b6040516100ed91906130bb565b6101996101943660046130ff565b6102e1565b6040516100ed919061321e565b6101ae6107b1565b005b6101796101be3660046133fb565b5060408051602081019091526000815290565b60005473ffffffffffffffffffffffffffffffffffffffff16610118565b6102026101fd366004613418565b6108b3565b6040516100ed919061347e565b6101ae61021d36600461350e565b610b34565b6101ae610230366004613590565b610b48565b6101ae610243366004613614565b610ee7565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f78bea7210000000000000000000000000000000000000000000000000000000014806102db57507fffffffff0000000000000000000000000000000000000000000000000000000082167f01ffc9a700000000000000000000000000000000000000000000000000000000145b92915050565b63ffffffff8216600090815260056020526040812060609183600181111561030b5761030b613134565b600181111561031c5761031c613134565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156107a557600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff16600181111561038f5761038f613134565b60018111156103a0576103a0613134565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a01000000000000000000009091041660608201526001820180546080909201916103f8906136d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610424906136d1565b80156104715780601f1061044657610100808354040283529160200191610471565b820191906000526020600020905b81548152906001019060200180831161045457829003601f168201915b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156104c957602002820191906000526020600020905b8154815260200190600101908083116104b5575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561052157602002820191906000526020600020905b81548152602001906001019080831161050d575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b828210156105fb57838290600052602060002001805461056e906136d1565b80601f016020809104026020016040519081016040528092919081815260200182805461059a906136d1565b80156105e75780601f106105bc576101008083540402835291602001916105e7565b820191906000526020600020905b8154815290600101906020018083116105ca57829003601f168201915b50505050508152602001906001019061054f565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156106d4578382906000526020600020018054610647906136d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610673906136d1565b80156106c05780601f10610695576101008083540402835291602001916106c0565b820191906000526020600020905b8154815290600101906020018083116106a357829003601f168201915b505050505081526020019060010190610628565b5050505081526020016006820180546106ec906136d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610718906136d1565b80156107655780601f1061073a57610100808354040283529160200191610765565b820191906000526020600020905b81548152906001019060200180831161074857829003601f168201915b505050919092525050508152600782015467ffffffffffffffff16602080830191909152600890920154604090910152908252600192909201910161034a565b50505050905092915050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b606060006108c16003610fa2565b905060006108cf8486613753565b90508315806108de5750818110155b1561091e576040805160008082526020820190925290610914565b610901612da6565b8152602001906001900390816108f95790505b50925050506102db565b600061092a8583613799565b9050828111156109375750815b600061094383836137ac565b67ffffffffffffffff81111561095b5761095b61376a565b60405190808252806020026020018201604052801561099457816020015b610981612da6565b8152602001906001900390816109795790505b50905060006109a36003610fac565b9050835b83811015610b275760008282815181106109c3576109c36137bf565b60209081029190910181015160408051808201825267ffffffffffffffff831680825260009081526002855282902082518154608081880283018101909552606082018181529597509295860194909391928492849190840182828015610a4957602002820191906000526020600020905b815481526020019060010190808311610a35575b5050509183525050600182015460ff166020820152600282018054604090920191610a73906136d1565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9f906136d1565b8015610aec5780601f10610ac157610100808354040283529160200191610aec565b820191906000526020600020905b815481529060010190602001808311610acf57829003601f168201915b50505091909252505050905284610b0388856137ac565b81518110610b1357610b136137bf565b6020908102919091010152506001016109a7565b5090979650505050505050565b610b3c610fc0565b610b4581611043565b50565b610b50610fc0565b60005b83811015610d3657610b97858583818110610b7057610b706137bf565b9050602002016020810190610b8591906137ee565b60039067ffffffffffffffff16611138565b610c0157848482818110610bad57610bad6137bf565b9050602002016020810190610bc291906137ee565b6040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161082e565b60026000868684818110610c1757610c176137bf565b9050602002016020810190610c2c91906137ee565b67ffffffffffffffff1681526020810191909152604001600090812090610c538282612dee565b6001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055610c8b600283016000612e0c565b5050610cc9858583818110610ca257610ca26137bf565b9050602002016020810190610cb791906137ee565b60039067ffffffffffffffff16611150565b507f2a680691fef3b2d105196805935232c661ce703e92d464ef0b94a7bc62d714f0858583818110610cfd57610cfd6137bf565b9050602002016020810190610d1291906137ee565b60405167ffffffffffffffff909116815260200160405180910390a1600101610b53565b5060005b81811015610ee0576000838383818110610d5657610d566137bf565b9050602002810190610d689190613809565b610d76906020810190613847565b610d7f90613a49565b90506000848484818110610d9557610d956137bf565b9050602002810190610da79190613809565b610db59060208101906137ee565b9050610dc4826000015161115c565b816020015160ff16600003610e05576040517fa9b3766e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff81166000908152600260209081526040909120835180518593610e35928492910190612e46565b5060208201516001820180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff90921691909117905560408201516002820190610e829082613b30565b50610e9c91506003905067ffffffffffffffff83166112a8565b507f05dd57854af2c291a94ea52e7c43d80bc3be7fa73022f98b735dea86642fa5e08183604051610ece929190613c4a565b60405180910390a15050600101610d3a565b5050505050565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610f56576040517fac7a7efd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600080610f6d610f6886880188613cf5565b6112b4565b8151919350915015610f8557610f858360008461150d565b805115610f9857610f988360018361150d565b5050505050505050565b60006102db825490565b60606000610fb983611ce4565b9392505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314611041576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640161082e565b565b3373ffffffffffffffffffffffffffffffffffffffff8216036110c2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640161082e565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008181526001830160205260408120541515610fb9565b6000610fb98383611d40565b60005b81518110156112a45760008019167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166350c946fe8484815181106111bb576111bb6137bf565b60200260200101516040518263ffffffff1660e01b81526004016111e191815260200190565b600060405180830381865afa1580156111fe573d6000803e3d6000fd5b505050506040513d6000823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682016040526112449190810190613f66565b608001510361129c5781818151811061125f5761125f6137bf565b60200260200101516040517f8907a4fa00000000000000000000000000000000000000000000000000000000815260040161082e91815260200190565b60010161115f565b5050565b6000610fb98383611e3a565b606080600460ff16835111156112f6576040517f8854586400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160028082526060820190925290816020015b61137a6040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b81526020019060019003908161130c57505060408051600280825260608201909252919350602082015b6114126040805161014081019091528060008152602001600067ffffffffffffffff168152602001600060ff168152602001600067ffffffffffffffff1681526020016060815260200160608152602001606081526020016060815260200160608152602001606081525090565b8152602001906001900390816113a457905050905060008060005b855181101561150057600086828151811061144a5761144a6137bf565b602002602001015160000151600181111561146757611467613134565b036114b45785818151811061147e5761147e6137bf565b6020026020010151858481518110611498576114986137bf565b6020026020010181905250826114ad9061403e565b92506114f8565b8581815181106114c6576114c66137bf565b60200260200101518483815181106114e0576114e06137bf565b6020026020010181905250816114f59061403e565b91505b60010161142d565b5090835281529092909150565b63ffffffff831660009081526005602052604081208184600181111561153557611535613134565b600181111561154657611546613134565b8152602001908152602001600020805480602002602001604051908101604052809291908181526020016000905b828210156119cf57600084815260209020604080516101a08101909152600984029091018054829060608201908390829060ff1660018111156115b9576115b9613134565b60018111156115ca576115ca613134565b8152815467ffffffffffffffff61010082048116602084015260ff690100000000000000000083041660408401526a0100000000000000000000909104166060820152600182018054608090920191611622906136d1565b80601f016020809104026020016040519081016040528092919081815260200182805461164e906136d1565b801561169b5780601f106116705761010080835404028352916020019161169b565b820191906000526020600020905b81548152906001019060200180831161167e57829003601f168201915b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156116f357602002820191906000526020600020905b8154815260200190600101908083116116df575b505050505081526020016003820180548060200260200160405190810160405280929190818152602001828054801561174b57602002820191906000526020600020905b815481526020019060010190808311611737575b5050505050815260200160048201805480602002602001604051908101604052809291908181526020016000905b82821015611825578382906000526020600020018054611798906136d1565b80601f01602080910402602001604051908101604052809291908181526020018280546117c4906136d1565b80156118115780601f106117e657610100808354040283529160200191611811565b820191906000526020600020905b8154815290600101906020018083116117f457829003601f168201915b505050505081526020019060010190611779565b50505050815260200160058201805480602002602001604051908101604052809291908181526020016000905b828210156118fe578382906000526020600020018054611871906136d1565b80601f016020809104026020016040519081016040528092919081815260200182805461189d906136d1565b80156118ea5780601f106118bf576101008083540402835291602001916118ea565b820191906000526020600020905b8154815290600101906020018083116118cd57829003601f168201915b505050505081526020019060010190611852565b505050508152602001600682018054611916906136d1565b80601f0160208091040260200160405190810160405280929190818152602001828054611942906136d1565b801561198f5780601f106119645761010080835404028352916020019161198f565b820191906000526020600020905b81548152906001019060200180831161197257829003601f168201915b505050919092525050508152600782015467ffffffffffffffff166020808301919091526008909201546040909101529082526001929092019101611574565b50505050905060006119e18251611e89565b905060006119ef8451611e89565b90506119fb8282611edb565b6000611a0a8785878686611f97565b9050611a168482612383565b63ffffffff8716600090815260056020526040812090876001811115611a3e57611a3e613134565b6001811115611a4f57611a4f613134565b81526020019081526020016000206000611a699190612e91565b60005b8151811015610f985763ffffffff8816600090815260056020526040812090886001811115611a9d57611a9d613134565b6001811115611aae57611aae613134565b8152602001908152602001600020828281518110611ace57611ace6137bf565b6020908102919091018101518254600181810185556000948552929093208151805160099095029091018054929490939192849283917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016908381811115611b3857611b38613134565b021790555060208201518154604084015160608501517fffffffffffffffffffffffffffffffffffffffffffff000000000000000000ff90921661010067ffffffffffffffff948516027fffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffff1617690100000000000000000060ff90921691909102177fffffffffffffffffffffffffffff0000000000000000ffffffffffffffffffff166a0100000000000000000000929091169190910217815560808201516001820190611c079082613b30565b5060a08201518051611c23916002840191602090910190612e46565b5060c08201518051611c3f916003840191602090910190612e46565b5060e08201518051611c5b916004840191602090910190612eb2565b506101008201518051611c78916005840191602090910190612eb2565b506101208201516006820190611c8e9082613b30565b50505060208201516007820180547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff909216919091179055604090910151600890910155600101611a6c565b606081600001805480602002602001604051908101604052809291908181526020018280548015611d3457602002820191906000526020600020905b815481526020019060010190808311611d20575b50505050509050919050565b60008181526001830160205260408120548015611e29576000611d646001836137ac565b8554909150600090611d78906001906137ac565b9050808214611ddd576000866000018281548110611d9857611d986137bf565b9060005260206000200154905080876000018481548110611dbb57611dbb6137bf565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611dee57611dee614076565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506102db565b60009150506102db565b5092915050565b6000818152600183016020526040812054611e81575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556102db565b5060006102db565b60006002821115611ec9576040517f3e4785260000000000000000000000000000000000000000000000000000000081526004810183905260240161082e565b8160028111156102db576102db613134565b6000826002811115611eef57611eef613134565b826002811115611f0157611f01613134565b611f0b91906140a5565b90508060011480611f575750807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff148015611f5757506002836002811115611f5557611f55613134565b145b15611f6157505050565b82826040517f0a6b675b00000000000000000000000000000000000000000000000000000000815260040161082e9291906140d5565b60606000845167ffffffffffffffff811115611fb557611fb561376a565b604051908082528060200260200182016040528015611fde578160200160208202803683370190505b5090506000846002811115611ff557611ff5613134565b1480156120135750600183600281111561201157612011613134565b145b156120545760018160008151811061202d5761202d6137bf565b602002602001019067ffffffffffffffff16908167ffffffffffffffff16815250506121bc565b600184600281111561206857612068613134565b1480156120865750600283600281111561208457612084613134565b145b1561211d578560008151811061209e5761209e6137bf565b602002602001015160200151816000815181106120bd576120bd6137bf565b602002602001019067ffffffffffffffff16908167ffffffffffffffff1681525050856000815181106120f2576120f26137bf565b602002602001015160200151600161210a91906140f0565b8160018151811061202d5761202d6137bf565b600284600281111561213157612131613134565b14801561214f5750600183600281111561214d5761214d613134565b145b156121865785600181518110612167576121676137bf565b6020026020010151602001518160008151811061202d5761202d6137bf565b83836040517f0a6b675b00000000000000000000000000000000000000000000000000000000815260040161082e9291906140d5565b6000855167ffffffffffffffff8111156121d8576121d861376a565b60405190808252806020026020018201604052801561228e57816020015b604080516101a081018252600060608083018281526080840183905260a0840183905260c0840183905260e084018290526101008401829052610120840182905261014084018290526101608401829052610180840191909152825260208083018290529282015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816121f65790505b50905060005b8251811015612377576122bf8782815181106122b2576122b26137bf565b6020026020010151612702565b60405180606001604052808883815181106122dc576122dc6137bf565b602002602001015181526020018483815181106122fb576122fb6137bf565b602002602001015167ffffffffffffffff16815260200161234f8b868581518110612328576123286137bf565b60200260200101518b8681518110612342576123426137bf565b6020026020010151612acb565b815250828281518110612364576123646137bf565b6020908102919091010152600101612294565b50979650505050505050565b81518151811580156123955750806001145b1561243757826000815181106123ad576123ad6137bf565b60200260200101516020015167ffffffffffffffff1660011461243157826000815181106123dd576123dd6137bf565b60209081029190910181015101516040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526001602482015260440161082e565b50505050565b8160011480156124475750806002145b156125fd578360008151811061245f5761245f6137bf565b6020026020010151604001518360008151811061247e5761247e6137bf565b6020026020010151604001511461250a57826000815181106124a2576124a26137bf565b602002602001015160400151846000815181106124c1576124c16137bf565b6020026020010151604001516040517fc7ccdd7f00000000000000000000000000000000000000000000000000000000815260040161082e929190918252602082015260400190565b8360008151811061251d5761251d6137bf565b602002602001015160200151600161253591906140f0565b67ffffffffffffffff1683600181518110612552576125526137bf565b60200260200101516020015167ffffffffffffffff16146124315782600181518110612580576125806137bf565b6020026020010151602001518460008151811061259f5761259f6137bf565b60200260200101516020015160016125b791906140f0565b6040517fc1658eb800000000000000000000000000000000000000000000000000000000815267ffffffffffffffff92831660048201529116602482015260440161082e565b81600214801561260d5750806001145b156126d05783600181518110612625576126256137bf565b60200260200101516040015183600081518110612644576126446137bf565b602002602001015160400151146124315782600081518110612668576126686137bf565b60200260200101516040015184600181518110612687576126876137bf565b6020026020010151604001516040517f9e97567000000000000000000000000000000000000000000000000000000000815260040161082e929190918252602082015260400190565b6040517f1f1b2bb600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806020015167ffffffffffffffff1660000361274a576040517f698cf8e000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008151600181111561275f5761275f613134565b14158015612780575060018151600181111561277d5761277d613134565b14155b156127b7576040517f3302dbd700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60808101515115806127f4575060408051600060208201520160405160208183030381529060405280519060200120816080015180519060200120145b1561282b576040517f358c192700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208101516128469060039067ffffffffffffffff16611138565b61288e5760208101516040517f1bd4d2d200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260240161082e565b60208082015167ffffffffffffffff166000908152600290915260408120600101546128be9060ff166003614111565b6128c990600161412d565b60ff1690508082610100015151101561292057610100820151516040517f548dd21f00000000000000000000000000000000000000000000000000000000815260048101919091526024810182905260440161082e565b60e082015151610100811115612962576040517f1b925da600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260c00151518114158061297c5750826101000151518114155b156129d75760c08301515160e084015151610100850151516040517fba900f6d00000000000000000000000000000000000000000000000000000000815260048101939093526024830191909152604482015260640161082e565b826040015160ff16600003612a18576040517f39d1a4d000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040830151612a28906003614111565b60ff168111612a63576040517f4856694e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260c00151518360a00151511115612aa7576040517f8473d80700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612ab98360a001518460c00151612ba0565b612ac68360c0015161115c565b505050565b60008082602001518584600001518560800151878760a001518860c001518960e001518a61010001518b604001518c606001518d6101200151604051602001612b1f9c9b9a99989796959493929190614146565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e0a000000000000000000000000000000000000000000000000000000000000179150509392505050565b81511580612bad57508051155b15612be4576040517fe249684100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612bed82612d1b565b612bf681612d1b565b6000805b835182108015612c0a5750825181105b15612cdc57828181518110612c2157612c216137bf565b6020026020010151848381518110612c3b57612c3b6137bf565b60200260200101511115612c5957612c528161403e565b9050612bfa565b828181518110612c6b57612c6b6137bf565b6020026020010151848381518110612c8557612c856137bf565b602002602001015103612ca657612c9b8261403e565b9150612c528161403e565b83836040517fd671700c00000000000000000000000000000000000000000000000000000000815260040161082e929190614226565b83518210156124315783836040517fd671700c00000000000000000000000000000000000000000000000000000000815260040161082e929190614226565b60015b81518110156112a45781612d336001836137ac565b81518110612d4357612d436137bf565b6020026020010151828281518110612d5d57612d5d6137bf565b602002602001015111612d9e57816040517f1bc41b4200000000000000000000000000000000000000000000000000000000815260040161082e919061424b565b600101612d1e565b6040518060400160405280600067ffffffffffffffff168152602001612de9604051806060016040528060608152602001600060ff168152602001606081525090565b905290565b5080546000825590600052602060002090810190610b459190612f04565b508054612e18906136d1565b6000825580601f10612e28575050565b601f016020900490600052602060002090810190610b459190612f04565b828054828255906000526020600020908101928215612e81579160200282015b82811115612e81578251825591602001919060010190612e66565b50612e8d929150612f04565b5090565b5080546000825560090290600052602060002090810190610b459190612f19565b828054828255906000526020600020908101928215612ef8579160200282015b82811115612ef85782518290612ee89082613b30565b5091602001919060010190612ed2565b50612e8d929150612fda565b5b80821115612e8d5760008155600101612f05565b80821115612e8d5780547fffffffffffffffffffffffffffff00000000000000000000000000000000000016815560008181612f586001830182612e0c565b612f66600283016000612dee565b612f74600383016000612dee565b612f82600483016000612ff7565b612f90600583016000612ff7565b612f9e600683016000612e0c565b5050506007810180547fffffffffffffffffffffffffffffffffffffffffffffffff000000000000000016905560006008820155600901612f19565b80821115612e8d576000612fee8282612e0c565b50600101612fda565b5080546000825590600052602060002090810190610b459190612fda565b60006020828403121561302757600080fd5b81357fffffffff0000000000000000000000000000000000000000000000000000000081168114610fb957600080fd5b6000815180845260005b8181101561307d57602081850181015186830182015201613061565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b602081526000610fb96020830184613057565b63ffffffff81168114610b4557600080fd5b80356130eb816130ce565b919050565b8035600281106130eb57600080fd5b6000806040838503121561311257600080fd5b823561311d816130ce565b915061312b602084016130f0565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b6002811061317357613173613134565b9052565b60008151808452602080850194506020840160005b838110156131a85781518752958201959082019060010161318c565b509495945050505050565b60008282518085526020808601955060208260051b8401016020860160005b84811015610b27577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe086840301895261320c838351613057565b988401989250908301906001016131d2565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156133ed577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc089840301855281516060815181865261328c8287018251613163565b8981015160806132a78189018367ffffffffffffffff169052565b8a830151915060a06132bd818a018460ff169052565b938301519360c092506132db8984018667ffffffffffffffff169052565b818401519450610140915060e082818b01526132fb6101a08b0187613057565b95508185015191507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa0610100818c890301818d015261333a8885613177565b97508587015195506101209350818c890301848d015261335a8887613177565b9750828701519550818c890301858d015261337588876131b3565b975080870151955050808b8803016101608c015261339387866131b3565b9650828601519550808b8803016101808c015250505050506133b58282613057565b915050888201516133d18a87018267ffffffffffffffff169052565b5090870151938701939093529386019390860190600101613247565b509098975050505050505050565b60006020828403121561340d57600080fd5b8135610fb9816130ce565b6000806040838503121561342b57600080fd5b50508035926020909101359150565b600081516060845261344f6060850182613177565b905060ff6020840151166020850152604083015184820360408601526134758282613057565b95945050505050565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b838110156133ed578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805167ffffffffffffffff1684528701518784018790526134fb8785018261343a565b95880195935050908601906001016134a7565b60006020828403121561352057600080fd5b813573ffffffffffffffffffffffffffffffffffffffff81168114610fb957600080fd5b60008083601f84011261355657600080fd5b50813567ffffffffffffffff81111561356e57600080fd5b6020830191508360208260051b850101111561358957600080fd5b9250929050565b600080600080604085870312156135a657600080fd5b843567ffffffffffffffff808211156135be57600080fd5b6135ca88838901613544565b909650945060208701359150808211156135e357600080fd5b506135f087828801613544565b95989497509550505050565b803567ffffffffffffffff811681146130eb57600080fd5b6000806000806000806080878903121561362d57600080fd5b863567ffffffffffffffff8082111561364557600080fd5b6136518a838b01613544565b9098509650602089013591508082111561366a57600080fd5b818901915089601f83011261367e57600080fd5b81358181111561368d57600080fd5b8a602082850101111561369f57600080fd5b6020830196508095505050506136b7604088016135fc565b91506136c5606088016130e0565b90509295509295509295565b600181811c908216806136e557607f821691505b60208210810361371e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176102db576102db613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b808201808211156102db576102db613724565b818103818111156102db576102db613724565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60006020828403121561380057600080fd5b610fb9826135fc565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc183360301811261383d57600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa183360301811261383d57600080fd5b604051610140810167ffffffffffffffff8111828210171561389f5761389f61376a565b60405290565b60405160e0810167ffffffffffffffff8111828210171561389f5761389f61376a565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561390f5761390f61376a565b604052919050565b600067ffffffffffffffff8211156139315761393161376a565b5060051b60200190565b600082601f83011261394c57600080fd5b8135602061396161395c83613917565b6138c8565b8083825260208201915060208460051b87010193508684111561398357600080fd5b602086015b8481101561399f5780358352918301918301613988565b509695505050505050565b803560ff811681146130eb57600080fd5b600082601f8301126139cc57600080fd5b813567ffffffffffffffff8111156139e6576139e661376a565b613a1760207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016138c8565b818152846020838601011115613a2c57600080fd5b816020850160208301376000918101602001919091529392505050565b600060608236031215613a5b57600080fd5b6040516060810167ffffffffffffffff8282108183111715613a7f57613a7f61376a565b816040528435915080821115613a9457600080fd5b613aa03683870161393b565b8352613aae602086016139aa565b60208401526040850135915080821115613ac757600080fd5b50613ad4368286016139bb565b60408301525092915050565b601f821115612ac6576000816000526020600020601f850160051c81016020861015613b095750805b601f850160051c820191505b81811015613b2857828155600101613b15565b505050505050565b815167ffffffffffffffff811115613b4a57613b4a61376a565b613b5e81613b5884546136d1565b84613ae0565b602080601f831160018114613bb15760008415613b7b5750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b178555613b28565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015613bfe57888601518255948401946001909101908401613bdf565b5085821015613c3a57878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b67ffffffffffffffff83168152604060208201526000613c6d604083018461343a565b949350505050565b600082601f830112613c8657600080fd5b81356020613c9661395c83613917565b82815260059290921b84018101918181019086841115613cb557600080fd5b8286015b8481101561399f57803567ffffffffffffffff811115613cd95760008081fd5b613ce78986838b01016139bb565b845250918301918301613cb9565b60006020808385031215613d0857600080fd5b823567ffffffffffffffff80821115613d2057600080fd5b818501915085601f830112613d3457600080fd5b8135613d4261395c82613917565b81815260059190911b83018401908481019088831115613d6157600080fd5b8585015b83811015613eef57803585811115613d7c57600080fd5b8601610140818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215613db157600080fd5b613db961387b565b613dc48983016130f0565b8152613dd2604083016135fc565b89820152613de2606083016139aa565b6040820152613df3608083016135fc565b606082015260a082013587811115613e0a57600080fd5b613e188d8b838601016139bb565b60808301525060c082013587811115613e3057600080fd5b613e3e8d8b8386010161393b565b60a08301525060e082013587811115613e5657600080fd5b613e648d8b8386010161393b565b60c0830152506101008083013588811115613e7e57600080fd5b613e8c8e8c83870101613c75565b60e0840152506101208084013589811115613ea657600080fd5b613eb48f8d83880101613c75565b8385015250610140840135915088821115613ece57600080fd5b613edc8e8c848701016139bb565b9083015250845250918601918601613d65565b5098975050505050505050565b80516130eb816130ce565b600082601f830112613f1857600080fd5b81516020613f2861395c83613917565b8083825260208201915060208460051b870101935086841115613f4a57600080fd5b602086015b8481101561399f5780518352918301918301613f4f565b600060208284031215613f7857600080fd5b815167ffffffffffffffff80821115613f9057600080fd5b9083019060e08286031215613fa457600080fd5b613fac6138a5565b613fb583613efc565b8152613fc360208401613efc565b6020820152613fd460408401613efc565b6040820152606083015160608201526080830151608082015260a083015182811115613fff57600080fd5b61400b87828601613f07565b60a08301525060c08301518281111561402357600080fd5b61402f87828601613f07565b60c08301525095945050505050565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361406f5761406f613724565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b8181036000831280158383131683831282161715611e3357611e33613724565b6003811061317357613173613134565b604081016140e382856140c5565b610fb960208301846140c5565b67ffffffffffffffff818116838216019080821115611e3357611e33613724565b60ff8181168382160290811690818114611e3357611e33613724565b60ff81811683821601908111156102db576102db613724565b67ffffffffffffffff8d16815263ffffffff8c16602082015261416c604082018c613163565b6101806060820152600061418461018083018c613057565b67ffffffffffffffff8b16608084015282810360a08401526141a6818b613177565b905082810360c08401526141ba818a613177565b905082810360e08401526141ce81896131b3565b90508281036101008401526141e381886131b3565b60ff8716610120850152905067ffffffffffffffff85166101408401528281036101608401526142138185613057565b9f9e505050505050505050505050505050565b6040815260006142396040830185613177565b82810360208401526134758185613177565b602081526000610fb9602083018461317756fea164736f6c6343000818000a", } var CCIPConfigABI = CCIPConfigMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/multi_ocr3_helper/multi_ocr3_helper.go b/core/gethwrappers/ccip/generated/multi_ocr3_helper/multi_ocr3_helper.go index 2f2dfbf821..285aaaa338 100644 --- a/core/gethwrappers/ccip/generated/multi_ocr3_helper/multi_ocr3_helper.go +++ b/core/gethwrappers/ccip/generated/multi_ocr3_helper/multi_ocr3_helper.go @@ -59,7 +59,7 @@ type MultiOCR3BaseOracle struct { var MultiOCR3HelperMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"expected\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"actual\",\"type\":\"bytes32\"}],\"name\":\"ConfigDigestMismatch\",\"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\":[],\"name\":\"NonUniqueSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OracleCannotBeZeroAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"StaticConfigCannotBeChanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnauthorizedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"expected\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actual\",\"type\":\"uint256\"}],\"name\":\"WrongMessageLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WrongNumberOfSignatures\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"AfterConfigSet\",\"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\":[{\"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\":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\":[{\"internalType\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"oracleAddress\",\"type\":\"address\"}],\"name\":\"getOracle\",\"outputs\":[{\"components\":[{\"internalType\":\"uint8\",\"name\":\"index\",\"type\":\"uint8\"},{\"internalType\":\"enumMultiOCR3Base.Role\",\"name\":\"role\",\"type\":\"uint8\"}],\"internalType\":\"structMultiOCR3Base.Oracle\",\"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\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"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\":\"uint8\",\"name\":\"ocrPluginType\",\"type\":\"uint8\"}],\"name\":\"setTransmitOcrPluginType\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"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\":\"transmitWithSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"transmitWithoutSignatures\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b503380600081620000695760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200009c576200009c81620000a9565b5050466080525062000154565b336001600160a01b03821603620001035760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b608051611d3f6200017760003960008181610ef70152610f430152611d3f6000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637ac0aa1a11610076578063c673e5841161005b578063c673e584146101c5578063f2fde38b146101e5578063f716f99f146101f857600080fd5b80637ac0aa1a1461015b5780638da5cb5b1461019d57600080fd5b806334a9c92e116100a757806334a9c92e1461012057806344e65e551461014057806379ba50971461015357600080fd5b8063181f5a77146100c357806326bf9d261461010b575b600080fd5b604080518082018252601981527f4d756c74694f4352334261736548656c70657220312e302e30000000000000006020820152905161010291906114e4565b60405180910390f35b61011e6101193660046115ab565b61020b565b005b61013361012e366004611639565b61023a565b604051610102919061169b565b61011e61014e36600461170e565b6102ca565b61011e61034d565b61011e6101693660046117c1565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610102565b6101d86101d33660046117c1565b61044f565b6040516101029190611835565b61011e6101f33660046118c8565b6105c7565b61011e610206366004611a34565b6105db565b604080516000808252602082019092526004549091506102349060ff168585858580600061061d565b50505050565b6040805180820182526000808252602080830182905260ff86811683526003825284832073ffffffffffffffffffffffffffffffffffffffff871684528252918490208451808601909552805480841686529394939092918401916101009091041660028111156102ad576102ad61166c565b60028111156102be576102be61166c565b90525090505b92915050565b60045460408051602080880282810182019093528782526103439360ff16928c928c928c928c918c91829185019084908082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b9182918501908490808284376000920191909152508a925061061d915050565b5050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146103d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6104926040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561054857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161051d575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156105b757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161058c575b5050505050815250509050919050565b6105cf6109a1565b6105d881610a24565b50565b6105e36109a1565b60005b81518110156106195761061182828151811061060457610604611b9d565b6020026020010151610b19565b6001016105e6565b5050565b60ff8781166000908152600260209081526040808320815160808101835281548152600190910154808616938201939093526101008304851691810191909152620100009091049092161515606083015287359061067c8760a4611bfb565b90508260600151156106c4578451610695906020611c0e565b86516106a2906020611c0e565b6106ad9060a0611bfb565b6106b79190611bfb565b6106c19082611bfb565b90505b368114610706576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016103ca565b508151811461074e5781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016103ca565b610756610ef4565b60ff808a16600090815260036020908152604080832033845282528083208151808301909252805480861683529394919390928401916101009091041660028111156107a4576107a461166c565b60028111156107b5576107b561166c565b90525090506002816020015160028111156107d2576107d261166c565b1480156108335750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff168154811061080e5761080e611b9d565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b610869576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5081606001511561094b576020820151610884906001611c25565b60ff168551146108c0576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83518551146108fb576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878760405161090d929190611c3e565b604051908190038120610924918b90602001611c4e565b6040516020818303038152906040528051906020012090506109498a82888888610f75565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016103ca565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610aa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103ca565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003610b5d5760006040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c62565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003610bca57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055610c1f565b6060840151600182015460ff6201000090910416151590151514610c1f576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016103ca565b60a08401518051601f1015610c635760016040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c62565b610cd68484600301805480602002602001604051908101604052809291908181526020018280548015610ccc57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ca1575b5050505050611185565b846060015115610e4457610d518484600201805480602002602001604051908101604052809291908181526020018280548015610ccc5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ca1575050505050611185565b60808501518051610d6b9060028601906020840190611445565b5080516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f1015610de45760026040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c62565b6040870151610df4906003611c7c565b60ff168160ff1611610e355760036040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c62565b610e418683600161121d565b50505b610e508482600261121d565b8051610e659060038501906020840190611445565b506040858101516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54793610edc9389939260028a01929190611c9f565b60405180910390a1610eed8461140c565b5050505050565b467f000000000000000000000000000000000000000000000000000000000000000014610a22576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016103ca565b8251600090815b81811015610343576000600188868460208110610f9b57610f9b611b9d565b610fa891901a601b611c25565b898581518110610fba57610fba611b9d565b6020026020010151898681518110610fd457610fd4611b9d565b602002602001015160405160008152602001604052604051611012949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015611034573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015160ff808e1660009081526003602090815285822073ffffffffffffffffffffffffffffffffffffffff8516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156110c0576110c061166c565b60028111156110d1576110d161166c565b90525090506001816020015160028111156110ee576110ee61166c565b14611125576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615611168576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050610f7c565b60005b81518110156112185760ff8316600090815260036020526040812083519091908490849081106111ba576111ba611b9d565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169055600101611188565b505050565b60005b825181101561023457600083828151811061123d5761123d611b9d565b602002602001015190506000600281111561125a5761125a61166c565b60ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845290915290205461010090041660028111156112a6576112a661166c565b146112e05760046040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c62565b73ffffffffffffffffffffffffffffffffffffffff811661132d576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156113535761135361166c565b905260ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845282529091208351815493167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841681178255918401519092909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016176101008360028111156113f8576113f861166c565b021790555090505050806001019050611220565b60405160ff821681527f897ac1b2c12867721b284f3eb147bd4ab046d4eef1cf31c1d8988bfcfb962b539060200160405180910390a150565b8280548282559060005260206000209081019282156114bf579160200282015b828111156114bf57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190611465565b506114cb9291506114cf565b5090565b5b808211156114cb57600081556001016114d0565b60006020808352835180602085015260005b81811015611512578581018301518582016040015282016114f6565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b80606081018310156102c457600080fd5b60008083601f84011261157457600080fd5b50813567ffffffffffffffff81111561158c57600080fd5b6020830191508360208285010111156115a457600080fd5b9250929050565b6000806000608084860312156115c057600080fd5b6115ca8585611551565b9250606084013567ffffffffffffffff8111156115e657600080fd5b6115f286828701611562565b9497909650939450505050565b803560ff8116811461161057600080fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461161057600080fd5b6000806040838503121561164c57600080fd5b611655836115ff565b915061166360208401611615565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815160ff16815260208201516040820190600381106116bc576116bc61166c565b8060208401525092915050565b60008083601f8401126116db57600080fd5b50813567ffffffffffffffff8111156116f357600080fd5b6020830191508360208260051b85010111156115a457600080fd5b60008060008060008060008060e0898b03121561172a57600080fd5b6117348a8a611551565b9750606089013567ffffffffffffffff8082111561175157600080fd5b61175d8c838d01611562565b909950975060808b013591508082111561177657600080fd5b6117828c838d016116c9565b909750955060a08b013591508082111561179b57600080fd5b506117a88b828c016116c9565b999c989b50969995989497949560c00135949350505050565b6000602082840312156117d357600080fd5b6117dc826115ff565b9392505050565b60008151808452602080850194506020840160005b8381101561182a57815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016117f8565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a084015261188460e08401826117e3565b905060408401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c08501526118bf82826117e3565b95945050505050565b6000602082840312156118da57600080fd5b6117dc82611615565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715611935576119356118e3565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715611982576119826118e3565b604052919050565b600067ffffffffffffffff8211156119a4576119a46118e3565b5060051b60200190565b8035801515811461161057600080fd5b600082601f8301126119cf57600080fd5b813560206119e46119df8361198a565b61193b565b8083825260208201915060208460051b870101935086841115611a0657600080fd5b602086015b84811015611a2957611a1c81611615565b8352918301918301611a0b565b509695505050505050565b60006020808385031215611a4757600080fd5b823567ffffffffffffffff80821115611a5f57600080fd5b818501915085601f830112611a7357600080fd5b8135611a816119df8261198a565b81815260059190911b83018401908481019088831115611aa057600080fd5b8585015b83811015611b9057803585811115611abb57600080fd5b860160c0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215611af05760008081fd5b611af8611912565b8882013581526040611b0b8184016115ff565b8a8301526060611b1c8185016115ff565b8284015260809150611b2f8285016119ae565b9083015260a08381013589811115611b475760008081fd5b611b558f8d838801016119be565b838501525060c0840135915088821115611b6f5760008081fd5b611b7d8e8c848701016119be565b9083015250845250918601918601611aa4565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156102c4576102c4611bcc565b80820281158282048414176102c4576102c4611bcc565b60ff81811683821601908111156102c4576102c4611bcc565b8183823760009101908152919050565b828152606082602083013760800192915050565b6020810160058310611c7657611c7661166c565b91905290565b60ff8181168382160290811690818114611c9857611c98611bcc565b5092915050565b600060a0820160ff88168352602087602085015260a0604085015281875480845260c086019150886000526020600020935060005b81811015611d0657845473ffffffffffffffffffffffffffffffffffffffff1683526001948501949284019201611cd4565b50508481036060860152611d1a81886117e3565b935050505060ff83166080830152969550505050505056fea164736f6c6343000818000a", + Bin: "0x60a06040523480156200001157600080fd5b503380600081620000695760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b03848116919091179091558116156200009c576200009c81620000a9565b5050466080525062000154565b336001600160a01b03821603620001035760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000060565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b608051611d386200017760003960008181610ef00152610f3c0152611d386000f3fe608060405234801561001057600080fd5b50600436106100be5760003560e01c80637ac0aa1a11610076578063c673e5841161005b578063c673e584146101c5578063f2fde38b146101e5578063f716f99f146101f857600080fd5b80637ac0aa1a1461015b5780638da5cb5b1461019d57600080fd5b806334a9c92e116100a757806334a9c92e1461012057806344e65e551461014057806379ba50971461015357600080fd5b8063181f5a77146100c357806326bf9d261461010b575b600080fd5b604080518082018252601981527f4d756c74694f4352334261736548656c70657220312e302e30000000000000006020820152905161010291906114dd565b60405180910390f35b61011e6101193660046115a4565b61020b565b005b61013361012e366004611632565b61023a565b6040516101029190611694565b61011e61014e366004611707565b6102ca565b61011e61034d565b61011e6101693660046117ba565b600480547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff92909216919091179055565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610102565b6101d86101d33660046117ba565b61044f565b604051610102919061182e565b61011e6101f33660046118c1565b6105c7565b61011e610206366004611a2d565b6105db565b604080516000808252602082019092526004549091506102349060ff168585858580600061061d565b50505050565b6040805180820182526000808252602080830182905260ff86811683526003825284832073ffffffffffffffffffffffffffffffffffffffff871684528252918490208451808601909552805480841686529394939092918401916101009091041660028111156102ad576102ad611665565b60028111156102be576102be611665565b90525090505b92915050565b60045460408051602080880282810182019093528782526103439360ff16928c928c928c928c918c91829185019084908082843760009201919091525050604080516020808d0282810182019093528c82529093508c92508b9182918501908490808284376000920191909152508a925061061d915050565b5050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146103d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b6104926040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561054857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161051d575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156105b757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161058c575b5050505050815250509050919050565b6105cf6109a1565b6105d881610a24565b50565b6105e36109a1565b60005b81518110156106195761061182828151811061060457610604611b96565b6020026020010151610b19565b6001016105e6565b5050565b60ff8781166000908152600260209081526040808320815160808101835281548152600190910154808616938201939093526101008304851691810191909152620100009091049092161515606083015287359061067c8760a4611bf4565b90508260600151156106c4578451610695906020611c07565b86516106a2906020611c07565b6106ad9060a0611bf4565b6106b79190611bf4565b6106c19082611bf4565b90505b368114610706576040517f8e1192e1000000000000000000000000000000000000000000000000000000008152600481018290523660248201526044016103ca565b508151811461074e5781516040517f93df584c0000000000000000000000000000000000000000000000000000000081526004810191909152602481018290526044016103ca565b610756610eed565b60ff808a16600090815260036020908152604080832033845282528083208151808301909252805480861683529394919390928401916101009091041660028111156107a4576107a4611665565b60028111156107b5576107b5611665565b90525090506002816020015160028111156107d2576107d2611665565b1480156108335750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff168154811061080e5761080e611b96565b60009182526020909120015473ffffffffffffffffffffffffffffffffffffffff1633145b610869576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5081606001511561094b576020820151610884906001611c1e565b60ff168551146108c0576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83518551146108fb576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000878760405161090d929190611c37565b604051908190038120610924918b90602001611c47565b6040516020818303038152906040528051906020012090506109498a82888888610f6e565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610a22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016103ca565b565b3373ffffffffffffffffffffffffffffffffffffffff821603610aa3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016103ca565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff16600003610b5d5760006040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c5b565b60208082015160ff80821660009081526002909352604083206001810154929390928392169003610bca57606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff909216919091179055610c1f565b6060840151600182015460ff6201000090910416151590151514610c1f576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff841660048201526024016103ca565b60a084015180516101001015610c645760016040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c5b565b610cd78484600301805480602002602001604051908101604052809291908181526020018280548015610ccd57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ca2575b505050505061117e565b846060015115610e3d57610d528484600201805480602002602001604051908101604052809291908181526020018280548015610ccd5760200282019190600052602060002090815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ca257505050505061117e565b608085015180516101001015610d975760026040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c5b565b6040860151610da7906003611c75565b60ff16815111610de65760036040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c5b565b80516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841602179055610e2e906002860190602084019061143e565b50610e3b85826001611216565b505b610e4984826002611216565b8051610e5e906003850190602084019061143e565b506040858101516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f54793610ed59389939260028a01929190611c98565b60405180910390a1610ee684611405565b5050505050565b467f000000000000000000000000000000000000000000000000000000000000000014610a22576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000060048201524660248201526044016103ca565b8251600090815b81811015610343576000600188868460208110610f9457610f94611b96565b610fa191901a601b611c1e565b898581518110610fb357610fb3611b96565b6020026020010151898681518110610fcd57610fcd611b96565b60200260200101516040516000815260200160405260405161100b949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa15801561102d573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015160ff808e1660009081526003602090815285822073ffffffffffffffffffffffffffffffffffffffff8516835281528582208587019096528554808416865293975090955092939284019161010090041660028111156110b9576110b9611665565b60028111156110ca576110ca611665565b90525090506001816020015160028111156110e7576110e7611665565b1461111e576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615611161576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050610f75565b60005b81518110156112115760ff8316600090815260036020526040812083519091908490849081106111b3576111b3611b96565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000169055600101611181565b505050565b60005b825181101561023457600083828151811061123657611236611b96565b602002602001015190506000600281111561125357611253611665565b60ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff87168452909152902054610100900416600281111561129f5761129f611665565b146112d95760046040517f367f56a20000000000000000000000000000000000000000000000000000000081526004016103ca9190611c5b565b73ffffffffffffffffffffffffffffffffffffffff8116611326576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff16815260200184600281111561134c5761134c611665565b905260ff808716600090815260036020908152604080832073ffffffffffffffffffffffffffffffffffffffff8716845282529091208351815493167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00841681178255918401519092909183917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000016176101008360028111156113f1576113f1611665565b021790555090505050806001019050611219565b60405160ff821681527f897ac1b2c12867721b284f3eb147bd4ab046d4eef1cf31c1d8988bfcfb962b539060200160405180910390a150565b8280548282559060005260206000209081019282156114b8579160200282015b828111156114b857825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061145e565b506114c49291506114c8565b5090565b5b808211156114c457600081556001016114c9565b60006020808352835180602085015260005b8181101561150b578581018301518582016040015282016114ef565b5060006040828601015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8301168501019250505092915050565b80606081018310156102c457600080fd5b60008083601f84011261156d57600080fd5b50813567ffffffffffffffff81111561158557600080fd5b60208301915083602082850101111561159d57600080fd5b9250929050565b6000806000608084860312156115b957600080fd5b6115c3858561154a565b9250606084013567ffffffffffffffff8111156115df57600080fd5b6115eb8682870161155b565b9497909650939450505050565b803560ff8116811461160957600080fd5b919050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461160957600080fd5b6000806040838503121561164557600080fd5b61164e836115f8565b915061165c6020840161160e565b90509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b815160ff16815260208201516040820190600381106116b5576116b5611665565b8060208401525092915050565b60008083601f8401126116d457600080fd5b50813567ffffffffffffffff8111156116ec57600080fd5b6020830191508360208260051b850101111561159d57600080fd5b60008060008060008060008060e0898b03121561172357600080fd5b61172d8a8a61154a565b9750606089013567ffffffffffffffff8082111561174a57600080fd5b6117568c838d0161155b565b909950975060808b013591508082111561176f57600080fd5b61177b8c838d016116c2565b909750955060a08b013591508082111561179457600080fd5b506117a18b828c016116c2565b999c989b50969995989497949560c00135949350505050565b6000602082840312156117cc57600080fd5b6117d5826115f8565b9392505050565b60008151808452602080850194506020840160005b8381101561182357815173ffffffffffffffffffffffffffffffffffffffff16875295820195908201906001016117f1565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a084015261187d60e08401826117dc565b905060408401517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08483030160c08501526118b882826117dc565b95945050505050565b6000602082840312156118d357600080fd5b6117d58261160e565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561192e5761192e6118dc565b60405290565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561197b5761197b6118dc565b604052919050565b600067ffffffffffffffff82111561199d5761199d6118dc565b5060051b60200190565b8035801515811461160957600080fd5b600082601f8301126119c857600080fd5b813560206119dd6119d883611983565b611934565b8083825260208201915060208460051b8701019350868411156119ff57600080fd5b602086015b84811015611a2257611a158161160e565b8352918301918301611a04565b509695505050505050565b60006020808385031215611a4057600080fd5b823567ffffffffffffffff80821115611a5857600080fd5b818501915085601f830112611a6c57600080fd5b8135611a7a6119d882611983565b81815260059190911b83018401908481019088831115611a9957600080fd5b8585015b83811015611b8957803585811115611ab457600080fd5b860160c0818c037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0011215611ae95760008081fd5b611af161190b565b8882013581526040611b048184016115f8565b8a8301526060611b158185016115f8565b8284015260809150611b288285016119a7565b9083015260a08381013589811115611b405760008081fd5b611b4e8f8d838801016119b7565b838501525060c0840135915088821115611b685760008081fd5b611b768e8c848701016119b7565b9083015250845250918601918601611a9d565b5098975050505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b808201808211156102c4576102c4611bc5565b80820281158282048414176102c4576102c4611bc5565b60ff81811683821601908111156102c4576102c4611bc5565b8183823760009101908152919050565b828152606082602083013760800192915050565b6020810160058310611c6f57611c6f611665565b91905290565b60ff8181168382160290811690818114611c9157611c91611bc5565b5092915050565b600060a0820160ff88168352602087602085015260a0604085015281875480845260c086019150886000526020600020935060005b81811015611cff57845473ffffffffffffffffffffffffffffffffffffffff1683526001948501949284019201611ccd565b50508481036060860152611d1381886117dc565b935050505060ff83166080830152969550505050505056fea164736f6c6343000818000a", } var MultiOCR3HelperABI = MultiOCR3HelperMetaData.ABI diff --git a/core/gethwrappers/ccip/generated/offramp/offramp.go b/core/gethwrappers/ccip/generated/offramp/offramp.go index 6f2ba32ec6..b491a4f39d 100644 --- a/core/gethwrappers/ccip/generated/offramp/offramp.go +++ b/core/gethwrappers/ccip/generated/offramp/offramp.go @@ -165,7 +165,7 @@ type OffRampUnblessedRoot struct { var OffRampMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"chainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"rmnProxy\",\"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\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"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\":\"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\":\"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\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"}],\"name\":\"InvalidInterval\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"index\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"newLimit\",\"type\":\"uint256\"}],\"name\":\"InvalidManualExecutionGasLimit\",\"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\":[],\"name\":\"InvalidProof\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRoot\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LeavesCannotBeEmpty\",\"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\":\"SignaturesOutOfRegistration\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"}],\"name\":\"SourceChainNotEnabled\",\"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\":[{\"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[]\"}],\"internalType\":\"structInternal.PriceUpdates\",\"name\":\"priceUpdates\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"min\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"max\",\"type\":\"uint64\"}],\"internalType\":\"structOffRamp.Interval\",\"name\":\"interval\",\"type\":\"tuple\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.MerkleRoot[]\",\"name\":\"merkleRoots\",\"type\":\"tuple[]\"}],\"indexed\":false,\"internalType\":\"structOffRamp.CommitReport\",\"name\":\"report\",\"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\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"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\":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\":\"address\",\"name\":\"rmnProxy\",\"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\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"name\":\"tokenAmounts\",\"type\":\"tuple[]\"}],\"internalType\":\"structInternal.Any2EVMRampMessage\",\"name\":\"message\",\"type\":\"tuple\"},{\"internalType\":\"bytes[]\",\"name\":\"offchainTokenData\",\"type\":\"bytes[]\"}],\"name\":\"executeSingleMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getDynamicConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"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\":\"address\",\"name\":\"rmnProxy\",\"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\":\"bytes32\",\"name\":\"root\",\"type\":\"bytes32\"}],\"name\":\"isBlessed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":\"bytes\",\"name\":\"destTokenAddress\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"extraData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"destExecData\",\"type\":\"bytes\"}],\"internalType\":\"structInternal.RampTokenAmount[]\",\"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.ExecutionReportSingleChain[]\",\"name\":\"reports\",\"type\":\"tuple[]\"},{\"internalType\":\"uint256[][]\",\"name\":\"gasLimitOverrides\",\"type\":\"uint256[][]\"}],\"name\":\"manuallyExecute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"sourceChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"bytes32\",\"name\":\"merkleRoot\",\"type\":\"bytes32\"}],\"internalType\":\"structOffRamp.UnblessedRoot[]\",\"name\":\"rootToReset\",\"type\":\"tuple[]\"}],\"name\":\"resetUnblessedRoots\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"feeQuoter\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"permissionLessExecutionThresholdSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxTokenTransferGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPoolReleaseOrMintGas\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"messageValidator\",\"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: "0x6101206040523480156200001257600080fd5b5060405162006bd438038062006bd48339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615efe62000cd66000396000818161026601526129f50152600081816102370152612ee90152600081816102080152818161142b015261196d0152600081816101d801526126700152600081816117f3015261183f0152615efe6000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063ccd37ba31161008c578063f2fde38b11610066578063f2fde38b14610583578063f716f99f14610596578063ff888fb1146105a957600080fd5b8063ccd37ba31461050b578063d2a15d3514610550578063e9d68a8e1461056357600080fd5b8063991a5018116100bd578063991a5018146104c5578063a80036b4146104d8578063c673e584146104eb57600080fd5b806385572ffb1461049c5780638da5cb5b146104aa57600080fd5b8063311cd5131161012f5780635e36480c116101145780635e36480c146103785780637437ff9f1461039857806379ba50971461049457600080fd5b8063311cd513146103495780633f4b04aa1461035c57600080fd5b806306285c691161016057806306285c69146101a4578063181f5a77146102ed5780632d04ab761461033657600080fd5b806304666f9c1461017c57806305d938b514610191575b600080fd5b61018f61018a366004614079565b6105cc565b005b61018f61019f366004614705565b6105e0565b61029660408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102e49190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103296040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102e49190614880565b61018f61034436600461492b565b610785565b61018f6103573660046149de565b610b5c565b60095460405167ffffffffffffffff90911681526020016102e4565b61038b610386366004614a32565b610bc5565b6040516102e49190614a8f565b6104376040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b83048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b9091049092166060820152600554909116608082015290565b6040516102e49190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610c1b565b61018f610177366004614a9d565b6000546040516001600160a01b0390911681526020016102e4565b61018f6104d3366004614aec565b610cd9565b61018f6104e6366004614b60565b610cea565b6104fe6104f9366004614bcd565b61105d565b6040516102e49190614c2d565b610542610519366004614ca2565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102e4565b61018f61055e366004614ccc565b6111bb565b610576610571366004614d41565b611275565b6040516102e49190614d5c565b61018f610591366004614daa565b611382565b61018f6105a4366004614e2f565b611393565b6105bc6105b7366004614f6d565b6113d5565b60405190151581526020016102e4565b6105d4611496565b6105dd816114f2565b50565b6105e86117f0565b815181518114610624576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561077557600084828151811061064357610643614f86565b6020026020010151905060008160200151519050600085848151811061066b5761066b614f86565b60200260200101519050805182146106af576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156107665760008282815181106106ce576106ce614f86565b602002602001015190508060001461075d57846020015182815181106106f6576106f6614f86565b60200260200101516080015181101561075d5784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064015b60405180910390fd5b506001016106b2565b50505050806001019050610627565b506107808383611871565b505050565b60006107938789018961510c565b805151519091501515806107ac57508051602001515115155b156108ac5760095460208a01359067ffffffffffffffff8083169116101561086b576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f92610834929101615334565b600060405180830381600087803b15801561084e57600080fd5b505af1158015610862573d6000803e3d6000fd5b505050506108aa565b8160200151516000036108aa576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b816020015151811015610aa5576000826020015182815181106108d4576108d4614f86565b602002602001015190506000816000015190506108f081611921565b60006108fb82611a23565b602084015151815491925067ffffffffffffffff908116600160a81b9092041614158061093f575060208084015190810151905167ffffffffffffffff9182169116115b1561097f57825160208401516040517feefb0cac000000000000000000000000000000000000000000000000000000008152610754929190600401615347565b6040830151806109bb576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff16600090815260086020908152604080832084845290915290205415610a2e5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101829052604401610754565b6020808501510151610a41906001615392565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b67ffffffffffffffff9283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016108af565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d81604051610ad591906153ba565b60405180910390a1610b5160008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611a8a915050565b505050505050505050565b610b9c610b6b82840184615457565b6040805160008082526020820190925290610b96565b6060815260200190600190039081610b815790505b50611871565b604080516000808252602082019092529050610bbf600185858585866000611a8a565b50505050565b6000610bd36001600461548c565b6002610be06080856154b5565b67ffffffffffffffff16610bf491906154dc565b610bfe8585611e01565b901c166003811115610c1257610c12614a65565b90505b92915050565b6001546001600160a01b03163314610c755760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610754565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ce1611496565b6105dd81611e48565b333014610d23576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281610d60565b6040805180820190915260008082526020820152815260200190600190039081610d395790505b5060a08501515190915015610d9457610d918460a00151856020015186606001518760000151602001518787611fae565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff1681830152808701518351600094840192610dd0929101614880565b60408051601f19818403018152918152908252878101516020830152018390526005549091506001600160a01b03168015610edd576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a190610e4a908590600401615595565b600060405180830381600087803b158015610e6457600080fd5b505af1925050508015610e75575060015b610edd573d808015610ea3576040519150601f19603f3d011682016040523d82523d6000602084013e610ea8565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016107549190614880565b604086015151158015610ef257506080860151155b80610f09575060608601516001600160a01b03163b155b80610f4957506060860151610f47906001600160a01b03167f85572ffb000000000000000000000000000000000000000000000000000000006120cd565b155b15610f5657505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf9798392610fce92899261138892916004016155a8565b6000604051808303816000875af1158015610fed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101591908101906155e4565b50915091508161105357806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107549190614880565b5050505050505050565b6110a06040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561114957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161112b575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156111ab57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118d575b5050505050815250509050919050565b6111c3611496565b60005b818110156107805760008383838181106111e2576111e2614f86565b9050604002018036038101906111f8919061567a565b905061120781602001516113d5565b61126c57805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b506001016111c6565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611302906156b3565b80601f016020809104026020016040519081016040528092919081815260200182805461132e906156b3565b80156111ab5780601f10611350576101008083540402835291602001916111ab565b820191906000526020600020905b81548152906001019060200180831161135e57505050919092525091949350505050565b61138a611496565b6105dd816120e9565b61139b611496565b60005b81518110156113d1576113c98282815181106113bc576113bc614f86565b602002602001015161219f565b60010161139e565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1591906156ed565b6000546001600160a01b031633146114f05760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610754565b565b60005b81518110156113d157600082828151811061151257611512614f86565b602002602001015190506000816020015190508067ffffffffffffffff16600003611569576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b0316611591576040516342bcdf7f60e11b815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916115bc906156b3565b80601f01602080910402602001604051908101604052809291908181526020018280546115e8906156b3565b80156116355780601f1061160a57610100808354040283529160200191611635565b820191906000526020600020905b81548152906001019060200180831161161857829003601f168201915b5050505050905060008460600151905081516000036116ed578051600003611670576040516342bcdf7f60e11b815260040160405180910390fd5b6001830161167e828261575a565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b17835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611740565b8080519060200120828051906020012014611740576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610754565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906117d890869061581a565b60405180910390a250505050508060010190506114f5565b467f0000000000000000000000000000000000000000000000000000000000000000146114f0576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604401610754565b81516000036118ab576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b845181101561191a576119128582815181106118e0576118e0614f86565b60200260200101518461190c578583815181106118ff576118ff614f86565b60200260200101516124d7565b836124d7565b6001016118c2565b5050505050565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e091906156ed565b156105dd576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610754565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610c15576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610754565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611ae98760a46158e8565b9050826060015115611b31578451611b029060206154dc565b8651611b0f9060206154dc565b611b1a9060a06158e8565b611b2491906158e8565b611b2e90826158e8565b90505b368114611b73576040517f8e1192e100000000000000000000000000000000000000000000000000000000815260048101829052366024820152604401610754565b5081518114611bbb5781516040517f93df584c000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610754565b611bc36117f0565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611c1157611c11614a65565b6002811115611c2257611c22614a65565b9052509050600281602001516002811115611c3f57611c3f614a65565b148015611c935750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611c7b57611c7b614f86565b6000918252602090912001546001600160a01b031633145b611cc9576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611dab576020820151611ce49060016158fb565b60ff16855114611d20576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611d5b576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611d6d929190615914565b604051908190038120611d84918b90602001615924565b604051602081830303815290604052805190602001209050611da98a82888888612ca3565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b67ffffffffffffffff8216600090815260076020526040812081611e26608085615938565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b80516001600160a01b0316611e70576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff811115611fca57611fca613e90565b60405190808252806020026020018201604052801561200f57816020015b6040805180820190915260008082526020820152815260200190600190039081611fe85790505b50905060005b87518110156120c15761209c88828151811061203357612033614f86565b602002602001015188888888888781811061205057612050614f86565b9050602002810190612062919061595f565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8892505050565b8282815181106120ae576120ae614f86565b6020908102919091010152600101612015565b505b9695505050505050565b60006120d88361322d565b8015610c125750610c128383613291565b336001600160a01b038216036121415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610754565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036121ca576000604051631b3fab5160e11b815260040161075491906159c4565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361223757606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff90921691909117905561228c565b6060840151600182015460ff620100009091041615159015151461228c576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610754565b60a08401518051601f10156122b7576001604051631b3fab5160e11b815260040161075491906159c4565b61231d848460030180548060200260200160405190810160405280929190818152602001828054801561231357602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122f5575b505050505061334c565b84606001511561244c5761238b8484600201805480602002602001604051908101604052809291908181526020018280548015612313576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122f557505050505061334c565b608085015180516123a59060028601906020840190613e09565b5080516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff841690810291909117909155601f1015612405576002604051631b3fab5160e11b815260040161075491906159c4565b60408701516124159060036159de565b60ff168160ff161161243d576003604051631b3fab5160e11b815260040161075491906159c4565b612449868360016133b5565b50505b612458848260026133b5565b805161246d9060038501906020840190613e09565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124c69389939260028a019291906159fa565b60405180910390a161191a84613529565b81516124e281611921565b60006124ed82611a23565b60010180546124fb906156b3565b80601f0160208091040260200160405190810160405280929190818152602001828054612527906156b3565b80156125745780601f1061254957610100808354040283529160200191612574565b820191906000526020600020905b81548152906001019060200180831161255757829003601f168201915b505050602087015151929350505060008190036125bc576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001515181146125fa576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561261557612615613e90565b60405190808252806020026020018201604052801561263e578160200160208202803683370190505b50905060005b828110156127275760008760200151828151811061266457612664614f86565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff16146126f757805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610754565b6127018186613545565b83838151811061271357612713614f86565b602090810291909101015250600101612644565b50600061273e858389606001518a60800151613667565b905080600003612786576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152602401610754565b8551151560005b84811015610b515760005a905060008a6020015183815181106127b2576127b2614f86565b6020026020010151905060006127d08a836000015160600151610bc5565b905060008160038111156127e6576127e6614a65565b14806128035750600381600381111561280157612801614a65565b145b61285b578151606001516040805167ffffffffffffffff808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a1505050612c9b565b841561292b57600454600090600160a01b900463ffffffff1661287e884261548c565b119050808061289e5750600382600381111561289c5761289c614a65565b145b6128e0576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c166004820152602401610754565b8b85815181106128f2576128f2614f86565b6020026020010151600014612925578b858151811061291357612913614f86565b60200260200101518360800181815250505b5061298c565b600081600381111561293f5761293f614a65565b1461298c578151606001516040805167ffffffffffffffff808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe65120910161284b565b81516080015167ffffffffffffffff1615612a7b5760008160038111156129b5576129b5614a65565b03612a7b5781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612a2c928f929190600401615aa6565b6020604051808303816000875af1158015612a4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6f91906156ed565b612a7b57505050612c9b565b60008c604001518581518110612a9357612a93614f86565b6020026020010151905080518360a001515114612af7578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808e1660048301529091166024820152604401610754565b612b0b8b84600001516060015160016136bd565b600080612b188584613765565b91509150612b2f8d866000015160600151846136bd565b8715612b9f576003826003811115612b4957612b49614a65565b03612b9f576000846003811115612b6257612b62614a65565b14612b9f578451516040517f2b11b8d900000000000000000000000000000000000000000000000000000000815261075491908390600401615ad3565b6002826003811115612bb357612bb3614a65565b14612c0d576003826003811115612bcc57612bcc614a65565b14612c0d578451606001516040517f926c5a3e000000000000000000000000000000000000000000000000000000008152610754918f918590600401615aec565b84600001516000015185600001516060015167ffffffffffffffff168e67ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8b81518110612c6757612c67614f86565b602002602001015186865a612c7c908e61548c565b604051612c8c9493929190615b12565b60405180910390a45050505050505b60010161278d565b8251600090815b81811015611053576000600188868460208110612cc957612cc9614f86565b612cd691901a601b6158fb565b898581518110612ce857612ce8614f86565b6020026020010151898681518110612d0257612d02614f86565b602002602001015160405160008152602001604052604051612d40949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612d62573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b03851683528152858220858701909652855480841686529397509095509293928401916101009004166002811115612dc357612dc3614a65565b6002811115612dd457612dd4614a65565b9052509050600181602001516002811115612df157612df1614a65565b14612e28576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615612e6b576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612caa565b60408051808201909152600080825260208201526000612eab876020015161382f565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f549190615b49565b90506001600160a01b0381161580612f9c5750612f9a6001600160a01b0382167faff2afbf000000000000000000000000000000000000000000000000000000006120cd565b155b15612fde576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610754565b60045460009081906130009089908690600160e01b900463ffffffff166138d5565b9150915060008060006130cd6040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d6001600160a01b031681526020018f606001518152602001896001600160a01b031681526020018f6000015181526020018f6040015181526020018b81525060405160240161307e9190615b66565b60408051601f198184030181529190526020810180516001600160e01b03167f390775370000000000000000000000000000000000000000000000000000000017905287866113886084613a03565b9250925092508261310c57816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107549190614880565b81516020146131545781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b60008280602001905181019061316a9190615c33565b9050866001600160a01b03168c6001600160a01b0316146131ff57600061319b8d8a613196868a61548c565b6138d5565b509050868110806131b55750816131b2888361548c565b14155b156131fd576040517fa966e21f000000000000000000000000000000000000000000000000000000008152600481018390526024810188905260448101829052606401610754565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613259827f01ffc9a700000000000000000000000000000000000000000000000000000000613291565b8015610c15575061328a827fffffffff00000000000000000000000000000000000000000000000000000000613291565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d91506000519050828015613335575060208210155b80156133415750600081115b979650505050505050565b60005b81518110156107805760ff83166000908152600360205260408120835190919084908490811061338157613381614f86565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff1916905560010161334f565b60005b8251811015610bbf5760008382815181106133d5576133d5614f86565b60200260200101519050600060028111156133f2576133f2614a65565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561343157613431614a65565b14613452576004604051631b3fab5160e11b815260040161075491906159c4565b6001600160a01b038116613492576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134b8576134b8614a65565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561351557613515614a65565b0217905550905050508060010190506133b8565b60ff81166105dd576009805467ffffffffffffffff1916905550565b81516020808201516040928301519251600093849361358b937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615c4c565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976135d49794969395929491939101615c7f565b604051602081830303815290604052805190602001208560400151805190602001208660a0015160405160200161360b9190615d91565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b600080613675858585613b29565b9050613680816113d5565b61368e5760009150506136b5565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026136cc6080856154b5565b67ffffffffffffffff166136e091906154dc565b905060006136ee8585611e01565b9050816136fd6001600461548c565b901b19168183600381111561371457613714614a65565b67ffffffffffffffff871660009081526007602052604081209190921b92909217918291613743608088615938565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fa80036b4000000000000000000000000000000000000000000000000000000008152600090606090309063a80036b4906137a99087908790600401615df1565b600060405180830381600087803b1580156137c357600080fd5b505af19250505080156137d4575060015b613813573d808015613802576040519150601f19603f3d011682016040523d82523d6000602084013e613807565b606091505b50600392509050613828565b50506040805160208101909152600081526002905b9250929050565b6000815160201461386e57816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107549190614880565b6000828060200190518101906138849190615c33565b90506001600160a01b0381118061389c575061040081105b15610c1557826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107549190614880565b600080600080600061394f8860405160240161390091906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03167f70a082310000000000000000000000000000000000000000000000000000000017905288886113886084613a03565b9250925092508261398e57816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107549190614880565b60208251146139d65781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b818060200190518101906139ea9190615c33565b6139f4828861548c565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff811115613a2657613a26613e90565b6040519080825280601f01601f191660200182016040528015613a50576020820181803683370190505b509150863b613a83577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613ab6577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613aef577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b125750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b6a576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b7e57506101018111155b613b9b576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613bc5576040516309bde33960e01b815260040160405180910390fd5b80600003613bf25786600081518110613be057613be0614f86565b60200260200101519350505050613dc1565b60008167ffffffffffffffff811115613c0d57613c0d613e90565b604051908082528060200260200182016040528015613c36578160200160208202803683370190505b50905060008080805b85811015613d605760006001821b8b811603613c9a5788851015613c83578c5160018601958e918110613c7457613c74614f86565b60200260200101519050613cbc565b8551600185019487918110613c7457613c74614f86565b8b5160018401938d918110613cb157613cb1614f86565b602002602001015190505b600089861015613cec578d5160018701968f918110613cdd57613cdd614f86565b60200260200101519050613d0e565b8651600186019588918110613d0357613d03614f86565b602002602001015190505b82851115613d2f576040516309bde33960e01b815260040160405180910390fd5b613d398282613dc8565b878481518110613d4b57613d4b614f86565b60209081029190910101525050600101613c3f565b506001850382148015613d7257508683145b8015613d7d57508581145b613d9a576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613daf57613daf614f86565b60200260200101519750505050505050505b9392505050565b6000818310613de057613ddb8284613de6565b610c12565b610c1283835b604080516001602082015290810183905260608101829052600090608001613649565b828054828255906000526020600020908101928215613e6b579160200282015b82811115613e6b578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e29565b50613e77929150613e7b565b5090565b5b80821115613e775760008155600101613e7c565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ec957613ec9613e90565b60405290565b60405160a0810167ffffffffffffffff81118282101715613ec957613ec9613e90565b60405160c0810167ffffffffffffffff81118282101715613ec957613ec9613e90565b6040805190810167ffffffffffffffff81118282101715613ec957613ec9613e90565b6040516060810167ffffffffffffffff81118282101715613ec957613ec9613e90565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f8457613f84613e90565b604052919050565b600067ffffffffffffffff821115613fa657613fa6613e90565b5060051b60200190565b6001600160a01b03811681146105dd57600080fd5b803567ffffffffffffffff81168114613fdd57600080fd5b919050565b80151581146105dd57600080fd5b8035613fdd81613fe2565b600067ffffffffffffffff82111561401557614015613e90565b50601f01601f191660200190565b600082601f83011261403457600080fd5b813561404761404282613ffb565b613f5b565b81815284602083860101111561405c57600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561408c57600080fd5b823567ffffffffffffffff808211156140a457600080fd5b818501915085601f8301126140b857600080fd5b81356140c661404282613f8c565b81815260059190911b830184019084810190888311156140e557600080fd5b8585015b8381101561418b578035858111156141015760008081fd5b86016080818c03601f19018113156141195760008081fd5b614121613ea6565b8983013561412e81613fb0565b8152604061413d848201613fc5565b8b83015260608085013561415081613fe2565b8383015292840135928984111561416957600091508182fd5b6141778f8d86880101614023565b9083015250855250509186019186016140e9565b5098975050505050505050565b600060a082840312156141aa57600080fd5b6141b2613ecf565b9050813581526141c460208301613fc5565b60208201526141d560408301613fc5565b60408201526141e660608301613fc5565b60608201526141f760808301613fc5565b608082015292915050565b8035613fdd81613fb0565b600082601f83011261421e57600080fd5b8135602061422e61404283613f8c565b82815260059290921b8401810191818101908684111561424d57600080fd5b8286015b848110156120c157803567ffffffffffffffff808211156142725760008081fd5b818901915060a080601f19848d0301121561428d5760008081fd5b614295613ecf565b87840135838111156142a75760008081fd5b6142b58d8a83880101614023565b825250604080850135848111156142cc5760008081fd5b6142da8e8b83890101614023565b8a84015250606080860135858111156142f35760008081fd5b6143018f8c838a0101614023565b838501525060809150818601358184015250828501359250838311156143275760008081fd5b6143358d8a85880101614023565b908201528652505050918301918301614251565b6000610140828403121561435c57600080fd5b614364613ef2565b90506143708383614198565b815260a082013567ffffffffffffffff8082111561438d57600080fd5b61439985838601614023565b602084015260c08401359150808211156143b257600080fd5b6143be85838601614023565b60408401526143cf60e08501614202565b606084015261010084013560808401526101208401359150808211156143f457600080fd5b506144018482850161420d565b60a08301525092915050565b600082601f83011261441e57600080fd5b8135602061442e61404283613f8c565b82815260059290921b8401810191818101908684111561444d57600080fd5b8286015b848110156120c157803567ffffffffffffffff8111156144715760008081fd5b61447f8986838b0101614349565b845250918301918301614451565b600082601f83011261449e57600080fd5b813560206144ae61404283613f8c565b82815260059290921b840181019181810190868411156144cd57600080fd5b8286015b848110156120c157803567ffffffffffffffff808211156144f157600080fd5b818901915089603f83011261450557600080fd5b8582013561451561404282613f8c565b81815260059190911b830160400190878101908c83111561453557600080fd5b604085015b8381101561456e5780358581111561455157600080fd5b6145608f6040838a0101614023565b84525091890191890161453a565b508752505050928401925083016144d1565b600082601f83011261459157600080fd5b813560206145a161404283613f8c565b8083825260208201915060208460051b8701019350868411156145c357600080fd5b602086015b848110156120c157803583529183019183016145c8565b600082601f8301126145f057600080fd5b8135602061460061404283613f8c565b82815260059290921b8401810191818101908684111561461f57600080fd5b8286015b848110156120c157803567ffffffffffffffff808211156146445760008081fd5b818901915060a080601f19848d0301121561465f5760008081fd5b614667613ecf565b614672888501613fc5565b8152604080850135848111156146885760008081fd5b6146968e8b8389010161440d565b8a84015250606080860135858111156146af5760008081fd5b6146bd8f8c838a010161448d565b83850152506080915081860135858111156146d85760008081fd5b6146e68f8c838a0101614580565b9184019190915250919093013590830152508352918301918301614623565b600080604080848603121561471957600080fd5b833567ffffffffffffffff8082111561473157600080fd5b61473d878388016145df565b945060209150818601358181111561475457600080fd5b8601601f8101881361476557600080fd5b803561477361404282613f8c565b81815260059190911b8201840190848101908a83111561479257600080fd5b8584015b8381101561481e578035868111156147ae5760008081fd5b8501603f81018d136147c05760008081fd5b878101356147d061404282613f8c565b81815260059190911b82018a0190898101908f8311156147f05760008081fd5b928b01925b8284101561480e5783358252928a0192908a01906147f5565b8652505050918601918601614796565b50809750505050505050509250929050565b60005b8381101561484b578181015183820152602001614833565b50506000910152565b6000815180845261486c816020860160208601614830565b601f01601f19169290920160200192915050565b602081526000610c126020830184614854565b8060608101831015610c1557600080fd5b60008083601f8401126148b657600080fd5b50813567ffffffffffffffff8111156148ce57600080fd5b60208301915083602082850101111561382857600080fd5b60008083601f8401126148f857600080fd5b50813567ffffffffffffffff81111561491057600080fd5b6020830191508360208260051b850101111561382857600080fd5b60008060008060008060008060e0898b03121561494757600080fd5b6149518a8a614893565b9750606089013567ffffffffffffffff8082111561496e57600080fd5b61497a8c838d016148a4565b909950975060808b013591508082111561499357600080fd5b61499f8c838d016148e6565b909750955060a08b01359150808211156149b857600080fd5b506149c58b828c016148e6565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156149f357600080fd5b6149fd8585614893565b9250606084013567ffffffffffffffff811115614a1957600080fd5b614a25868287016148a4565b9497909650939450505050565b60008060408385031215614a4557600080fd5b614a4e83613fc5565b9150614a5c60208401613fc5565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110614a8b57614a8b614a65565b9052565b60208101610c158284614a7b565b600060208284031215614aaf57600080fd5b813567ffffffffffffffff811115614ac657600080fd5b820160a08185031215613dc157600080fd5b803563ffffffff81168114613fdd57600080fd5b600060a08284031215614afe57600080fd5b614b06613ecf565b8235614b1181613fb0565b8152614b1f60208401614ad8565b6020820152614b3060408401614ad8565b6040820152614b4160608401614ad8565b60608201526080830135614b5481613fb0565b60808201529392505050565b600080600060408486031215614b7557600080fd5b833567ffffffffffffffff80821115614b8d57600080fd5b614b9987838801614349565b94506020860135915080821115614baf57600080fd5b50614a25868287016148e6565b803560ff81168114613fdd57600080fd5b600060208284031215614bdf57600080fd5b610c1282614bbc565b60008151808452602080850194506020840160005b83811015614c225781516001600160a01b031687529582019590820190600101614bfd565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c7c60e0840182614be8565b90506040840151601f198483030160c0850152614c998282614be8565b95945050505050565b60008060408385031215614cb557600080fd5b614cbe83613fc5565b946020939093013593505050565b60008060208385031215614cdf57600080fd5b823567ffffffffffffffff80821115614cf757600080fd5b818501915085601f830112614d0b57600080fd5b813581811115614d1a57600080fd5b8660208260061b8501011115614d2f57600080fd5b60209290920196919550909350505050565b600060208284031215614d5357600080fd5b610c1282613fc5565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526136b560a0840182614854565b600060208284031215614dbc57600080fd5b8135613dc181613fb0565b600082601f830112614dd857600080fd5b81356020614de861404283613f8c565b8083825260208201915060208460051b870101935086841115614e0a57600080fd5b602086015b848110156120c1578035614e2281613fb0565b8352918301918301614e0f565b60006020808385031215614e4257600080fd5b823567ffffffffffffffff80821115614e5a57600080fd5b818501915085601f830112614e6e57600080fd5b8135614e7c61404282613f8c565b81815260059190911b83018401908481019088831115614e9b57600080fd5b8585015b8381101561418b57803585811115614eb657600080fd5b860160c0818c03601f19011215614ecd5760008081fd5b614ed5613ef2565b8882013581526040614ee8818401614bbc565b8a8301526060614ef9818501614bbc565b8284015260809150614f0c828501613ff0565b9083015260a08381013589811115614f245760008081fd5b614f328f8d83880101614dc7565b838501525060c0840135915088821115614f4c5760008081fd5b614f5a8e8c84870101614dc7565b9083015250845250918601918601614e9f565b600060208284031215614f7f57600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160e01b0381168114613fdd57600080fd5b600082601f830112614fc457600080fd5b81356020614fd461404283613f8c565b82815260069290921b84018101918181019086841115614ff357600080fd5b8286015b848110156120c157604081890312156150105760008081fd5b615018613f15565b61502182613fc5565b815261502e858301614f9c565b81860152835291830191604001614ff7565b600082601f83011261505157600080fd5b8135602061506161404283613f8c565b82815260079290921b8401810191818101908684111561508057600080fd5b8286015b848110156120c157808803608081121561509e5760008081fd5b6150a6613f38565b6150af83613fc5565b8152604080601f19840112156150c55760008081fd5b6150cd613f15565b92506150da878501613fc5565b83526150e7818501613fc5565b8388015281870192909252606083013591810191909152835291830191608001615084565b6000602080838503121561511f57600080fd5b823567ffffffffffffffff8082111561513757600080fd5b8185019150604080838803121561514d57600080fd5b615155613f15565b83358381111561516457600080fd5b84016040818a03121561517657600080fd5b61517e613f15565b81358581111561518d57600080fd5b8201601f81018b1361519e57600080fd5b80356151ac61404282613f8c565b81815260069190911b8201890190898101908d8311156151cb57600080fd5b928a01925b8284101561521b5787848f0312156151e85760008081fd5b6151f0613f15565b84356151fb81613fb0565b8152615208858d01614f9c565b818d0152825292870192908a01906151d0565b84525050508187013593508484111561523357600080fd5b61523f8a858401614fb3565b818801528252508385013591508282111561525957600080fd5b61526588838601615040565b85820152809550505050505092915050565b805160408084528151848201819052600092602091908201906060870190855b818110156152ce57835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615297565b50508583015187820388850152805180835290840192506000918401905b80831015615328578351805167ffffffffffffffff1683528501516001600160e01b0316858301529284019260019290920191908501906152ec565b50979650505050505050565b602081526000610c126020830184615277565b67ffffffffffffffff8316815260608101613dc16020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156153b3576153b361537c565b5092915050565b6000602080835260608451604080848701526153d96060870183615277565b87850151878203601f19016040890152805180835290860193506000918601905b8083101561418b57845167ffffffffffffffff81511683528781015161543989850182805167ffffffffffffffff908116835260209182015116910152565b508401518287015293860193600192909201916080909101906153fa565b60006020828403121561546957600080fd5b813567ffffffffffffffff81111561548057600080fd5b6136b5848285016145df565b81810381811115610c1557610c1561537c565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806154d0576154d061549f565b92169190910692915050565b8082028115828204841417610c1557610c1561537c565b805182526000602067ffffffffffffffff81840151168185015260408084015160a0604087015261552760a0870182614854565b9050606085015186820360608801526155408282614854565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561532857835180516001600160a01b0316835286015186830152928501926001929092019190840190615563565b602081526000610c1260208301846154f3565b6080815260006155bb60808301876154f3565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156155f957600080fd5b835161560481613fe2565b602085015190935067ffffffffffffffff81111561562157600080fd5b8401601f8101861361563257600080fd5b805161564061404282613ffb565b81815287602083850101111561565557600080fd5b615666826020830160208601614830565b809450505050604084015190509250925092565b60006040828403121561568c57600080fd5b615694613f15565b61569d83613fc5565b8152602083013560208201528091505092915050565b600181811c908216806156c757607f821691505b6020821081036156e757634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156156ff57600080fd5b8151613dc181613fe2565b601f821115610780576000816000526020600020601f850160051c810160208610156157335750805b601f850160051c820191505b818110156157525782815560010161573f565b505050505050565b815167ffffffffffffffff81111561577457615774613e90565b6157888161578284546156b3565b8461570a565b602080601f8311600181146157bd57600084156157a55750858301515b600019600386901b1c1916600185901b178555615752565b600085815260208120601f198616915b828110156157ec578886015182559484019460019091019084016157cd565b508582101561580a5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c1660608501525060018085016080808601526000815461586c816156b3565b8060a089015260c0600183166000811461588d57600181146158a9576158d9565b60ff19841660c08b015260c083151560051b8b010194506158d9565b85600052602060002060005b848110156158d05781548c82018501529088019089016158b5565b8b0160c0019550505b50929998505050505050505050565b80820180821115610c1557610c1561537c565b60ff8181168382160190811115610c1557610c1561537c565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff808416806159535761595361549f565b92169190910492915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261599457600080fd5b83018035915067ffffffffffffffff8211156159af57600080fd5b60200191503681900382131561382857600080fd5b60208101600583106159d8576159d8614a65565b91905290565b60ff81811683821602908116908181146153b3576153b361537c565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615a525784546001600160a01b031683526001948501949284019201615a2d565b50508481036060860152865180825290820192508187019060005b81811015615a925782516001600160a01b031685529383019391830191600101615a6d565b50505060ff851660808501525090506120c3565b600067ffffffffffffffff808616835280851660208401525060606040830152614c996060830184614854565b8281526040602082015260006136b56040830184614854565b67ffffffffffffffff848116825283166020820152606081016136b56040830184614a7b565b848152615b226020820185614a7b565b608060408201526000615b386080830185614854565b905082606083015295945050505050565b600060208284031215615b5b57600080fd5b8151613dc181613fb0565b6020815260008251610100806020850152615b85610120850183614854565b91506020850151615ba2604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615bdc60a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615bf98483614854565b935060c08701519150808685030160e0870152615c168483614854565b935060e08701519150808685030183870152506120c38382614854565b600060208284031215615c4557600080fd5b5051919050565b848152600067ffffffffffffffff8086166020840152808516604084015250608060608301526120c36080830184614854565b86815260c060208201526000615c9860c0830188614854565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615d8457601f19868403018952815160a08151818652615d1582870182614854565b9150508582015185820387870152615d2d8282614854565b91505060408083015186830382880152615d478382614854565b92505050606080830151818701525060808083015192508582038187015250615d708183614854565b9a86019a9450505090830190600101615cef565b5090979650505050505050565b602081526000610c126020830184615cd2565b60008282518085526020808601955060208260051b8401016020860160005b84811015615d8457601f19868403018952615ddf838351614854565b98840198925090830190600101615dc3565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615e59610180850183614854565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e968483614854565b935060608801519150615eb56101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615edc8282615cd2565b9150508281036020840152614c998185615da456fea164736f6c6343000818000a", + Bin: "0x6101206040523480156200001257600080fd5b5060405162006bcd38038062006bcd8339810160408190526200003591620008c7565b33806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf81620001fa565b5050466080525060208301516001600160a01b03161580620000ec575060408301516001600160a01b0316155b8062000103575060608301516001600160a01b0316155b1562000122576040516342bcdf7f60e11b815260040160405180910390fd5b82516001600160401b03166000036200014e5760405163c656089560e01b815260040160405180910390fd5b82516001600160401b0390811660a052602080850180516001600160a01b0390811660c05260408088018051831660e0526060808a01805185166101005283518b519098168852945184169587019590955251821690850152905116908201527f683eb52ee924eb817377cfa8f41f238f4bb7a877da5267869dfffbad85f564d89060800160405180910390a1620001e682620002a5565b620001f181620003c1565b50505062000c67565b336001600160a01b03821603620002545760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b80516001600160a01b0316620002ce576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c166001600160c01b0319909a168a17600160a01b63ffffffff98891602176001600160c01b0316600160c01b948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b018051600580546001600160a01b031916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b60005b815181101562000666576000828281518110620003e557620003e562000a1d565b60200260200101519050600081602001519050806001600160401b0316600003620004235760405163c656089560e01b815260040160405180910390fd5b81516001600160a01b03166200044c576040516342bcdf7f60e11b815260040160405180910390fd5b6001600160401b0381166000908152600660205260408120600181018054919291620004789062000a33565b80601f0160208091040260200160405190810160405280929190818152602001828054620004a69062000a33565b8015620004f75780601f10620004cb57610100808354040283529160200191620004f7565b820191906000526020600020905b815481529060010190602001808311620004d957829003601f168201915b5050505050905060008460600151905081516000036200059e57805160000362000534576040516342bcdf7f60e11b815260040160405180910390fd5b6001830162000544828262000ac4565b508254600160a81b600160e81b031916600160a81b1783556040516001600160401b03851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1620005d9565b8080519060200120828051906020012014620005d95760405163c39a620560e01b81526001600160401b038516600482015260240162000083565b604080860151845487516001600160a01b03166001600160a01b0319921515600160a01b02929092166001600160a81b031990911617178455516001600160401b038516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906200064d90869062000b90565b60405180910390a25050505050806001019050620003c4565b5050565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715620006a557620006a56200066a565b60405290565b604051601f8201601f191681016001600160401b0381118282101715620006d657620006d66200066a565b604052919050565b80516001600160401b0381168114620006f657600080fd5b919050565b6001600160a01b03811681146200071157600080fd5b50565b805163ffffffff81168114620006f657600080fd5b6000601f83601f8401126200073d57600080fd5b825160206001600160401b03808311156200075c576200075c6200066a565b8260051b6200076d838201620006ab565b93845286810183019383810190898611156200078857600080fd5b84890192505b85831015620008ba57825184811115620007a85760008081fd5b89016080601f19828d038101821315620007c25760008081fd5b620007cc62000680565b88840151620007db81620006fb565b81526040620007ec858201620006de565b8a8301526060808601518015158114620008065760008081fd5b838301529385015193898511156200081e5760008081fd5b84860195508f603f8701126200083657600094508485fd5b8a8601519450898511156200084f576200084f6200066a565b620008608b858f88011601620006ab565b93508484528f82868801011115620008785760008081fd5b60005b8581101562000898578681018301518582018d01528b016200087b565b5060009484018b0194909452509182015283525091840191908401906200078e565b9998505050505050505050565b6000806000838503610140811215620008df57600080fd5b6080811215620008ee57600080fd5b620008f862000680565b6200090386620006de565b815260208601516200091581620006fb565b602082015260408601516200092a81620006fb565b604082015260608601516200093f81620006fb565b6060820152935060a0607f19820112156200095957600080fd5b5060405160a081016001600160401b0380821183831017156200098057620009806200066a565b81604052608087015191506200099682620006fb565b818352620009a760a0880162000714565b6020840152620009ba60c0880162000714565b6040840152620009cd60e0880162000714565b60608401526101008701519150620009e582620006fb565b608083018290526101208701519294508083111562000a0357600080fd5b505062000a138682870162000729565b9150509250925092565b634e487b7160e01b600052603260045260246000fd5b600181811c9082168062000a4857607f821691505b60208210810362000a6957634e487b7160e01b600052602260045260246000fd5b50919050565b601f82111562000abf576000816000526020600020601f850160051c8101602086101562000a9a5750805b601f850160051c820191505b8181101562000abb5782815560010162000aa6565b5050505b505050565b81516001600160401b0381111562000ae05762000ae06200066a565b62000af88162000af1845462000a33565b8462000a6f565b602080601f83116001811462000b30576000841562000b175750858301515b600019600386901b1c1916600185901b17855562000abb565b600085815260208120601f198616915b8281101562000b615788860151825594840194600190910190840162000b40565b508582101562000b805787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b602080825282546001600160a01b0381168383015260a081901c60ff161515604084015260a81c6001600160401b0316606083015260808083015260018084018054600093929190849062000be58162000a33565b8060a089015260c0600183166000811462000c09576001811462000c265762000c58565b60ff19841660c08b015260c083151560051b8b0101945062000c58565b85600052602060002060005b8481101562000c4f5781548c820185015290880190890162000c32565b8b0160c0019550505b50929998505050505050505050565b60805160a05160c05160e05161010051615ef762000cd66000396000818161026601526129ee0152600081816102370152612ee20152600081816102080152818161142b015261196d0152600081816101d801526126690152600081816117f3015261183f0152615ef76000f3fe608060405234801561001057600080fd5b50600436106101775760003560e01c806385572ffb116100d8578063ccd37ba31161008c578063f2fde38b11610066578063f2fde38b14610583578063f716f99f14610596578063ff888fb1146105a957600080fd5b8063ccd37ba31461050b578063d2a15d3514610550578063e9d68a8e1461056357600080fd5b8063991a5018116100bd578063991a5018146104c5578063a80036b4146104d8578063c673e584146104eb57600080fd5b806385572ffb1461049c5780638da5cb5b146104aa57600080fd5b8063311cd5131161012f5780635e36480c116101145780635e36480c146103785780637437ff9f1461039857806379ba50971461049457600080fd5b8063311cd513146103495780633f4b04aa1461035c57600080fd5b806306285c691161016057806306285c69146101a4578063181f5a77146102ed5780632d04ab761461033657600080fd5b806304666f9c1461017c57806305d938b514610191575b600080fd5b61018f61018a366004614072565b6105cc565b005b61018f61019f3660046146fe565b6105e0565b61029660408051608081018252600080825260208201819052918101829052606081019190915260405180608001604052807f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031681526020017f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316815250905090565b6040516102e49190815167ffffffffffffffff1681526020808301516001600160a01b0390811691830191909152604080840151821690830152606092830151169181019190915260800190565b60405180910390f35b6103296040518060400160405280601181526020017f4f666652616d7020312e362e302d64657600000000000000000000000000000081525081565b6040516102e49190614879565b61018f610344366004614924565b610785565b61018f6103573660046149d7565b610b5c565b60095460405167ffffffffffffffff90911681526020016102e4565b61038b610386366004614a2b565b610bc5565b6040516102e49190614a88565b6104376040805160a081018252600080825260208201819052918101829052606081018290526080810191909152506040805160a0810182526004546001600160a01b03808216835263ffffffff600160a01b83048116602085015278010000000000000000000000000000000000000000000000008304811694840194909452600160e01b9091049092166060820152600554909116608082015290565b6040516102e49190600060a0820190506001600160a01b03808451168352602084015163ffffffff808216602086015280604087015116604086015280606087015116606086015250508060808501511660808401525092915050565b61018f610c1b565b61018f610177366004614a96565b6000546040516001600160a01b0390911681526020016102e4565b61018f6104d3366004614ae5565b610cd9565b61018f6104e6366004614b59565b610cea565b6104fe6104f9366004614bc6565b61105d565b6040516102e49190614c26565b610542610519366004614c9b565b67ffffffffffffffff919091166000908152600860209081526040808320938352929052205490565b6040519081526020016102e4565b61018f61055e366004614cc5565b6111bb565b610576610571366004614d3a565b611275565b6040516102e49190614d55565b61018f610591366004614da3565b611382565b61018f6105a4366004614e28565b611393565b6105bc6105b7366004614f66565b6113d5565b60405190151581526020016102e4565b6105d4611496565b6105dd816114f2565b50565b6105e86117f0565b815181518114610624576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b8181101561077557600084828151811061064357610643614f7f565b6020026020010151905060008160200151519050600085848151811061066b5761066b614f7f565b60200260200101519050805182146106af576040517f83e3f56400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b828110156107665760008282815181106106ce576106ce614f7f565b602002602001015190508060001461075d57846020015182815181106106f6576106f6614f7f565b60200260200101516080015181101561075d5784516040517fc8e9605100000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101839052604481018290526064015b60405180910390fd5b506001016106b2565b50505050806001019050610627565b506107808383611871565b505050565b600061079387890189615105565b805151519091501515806107ac57508051602001515115155b156108ac5760095460208a01359067ffffffffffffffff8083169116101561086b576009805467ffffffffffffffff191667ffffffffffffffff83161790556004805483516040517f3937306f0000000000000000000000000000000000000000000000000000000081526001600160a01b0390921692633937306f9261083492910161532d565b600060405180830381600087803b15801561084e57600080fd5b505af1158015610862573d6000803e3d6000fd5b505050506108aa565b8160200151516000036108aa576040517f2261116700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505b60005b816020015151811015610aa5576000826020015182815181106108d4576108d4614f7f565b602002602001015190506000816000015190506108f081611921565b60006108fb82611a23565b602084015151815491925067ffffffffffffffff908116600160a81b9092041614158061093f575060208084015190810151905167ffffffffffffffff9182169116115b1561097f57825160208401516040517feefb0cac000000000000000000000000000000000000000000000000000000008152610754929190600401615340565b6040830151806109bb576040517f504570e300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835167ffffffffffffffff16600090815260086020908152604080832084845290915290205415610a2e5783516040517f32cf0cbf00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff909116600482015260248101829052604401610754565b6020808501510151610a4190600161538b565b82547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b67ffffffffffffffff9283160217909255925116600090815260086020908152604080832094835293905291909120429055506001016108af565b507f3a3950e13dd607cc37980db0ef14266c40d2bba9c01b2e44bfe549808883095d81604051610ad591906153b3565b60405180910390a1610b5160008a8a8a8a8a8080602002602001604051908101604052809392919081815260200183836020028082843760009201919091525050604080516020808e0282810182019093528d82529093508d92508c9182918501908490808284376000920191909152508b9250611a8a915050565b505050505050505050565b610b9c610b6b82840184615450565b6040805160008082526020820190925290610b96565b6060815260200190600190039081610b815790505b50611871565b604080516000808252602082019092529050610bbf600185858585866000611a8a565b50505050565b6000610bd360016004615485565b6002610be06080856154ae565b67ffffffffffffffff16610bf491906154d5565b610bfe8585611e01565b901c166003811115610c1257610c12614a5e565b90505b92915050565b6001546001600160a01b03163314610c755760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610754565b600080543373ffffffffffffffffffffffffffffffffffffffff19808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b610ce1611496565b6105dd81611e48565b333014610d23576040517f371a732800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160008082526020820190925281610d60565b6040805180820190915260008082526020820152815260200190600190039081610d395790505b5060a08501515190915015610d9457610d918460a00151856020015186606001518760000151602001518787611fae565b90505b6040805160a0810182528551518152855160209081015167ffffffffffffffff1681830152808701518351600094840192610dd0929101614879565b60408051601f19818403018152918152908252878101516020830152018390526005549091506001600160a01b03168015610edd576040517f08d450a10000000000000000000000000000000000000000000000000000000081526001600160a01b038216906308d450a190610e4a90859060040161558e565b600060405180830381600087803b158015610e6457600080fd5b505af1925050508015610e75575060015b610edd573d808015610ea3576040519150601f19603f3d011682016040523d82523d6000602084013e610ea8565b606091505b50806040517f09c253250000000000000000000000000000000000000000000000000000000081526004016107549190614879565b604086015151158015610ef257506080860151155b80610f09575060608601516001600160a01b03163b155b80610f4957506060860151610f47906001600160a01b03167f85572ffb000000000000000000000000000000000000000000000000000000006120cd565b155b15610f5657505050505050565b855160209081015167ffffffffffffffff1660009081526006909152604080822054608089015160608a015192517f3cf9798300000000000000000000000000000000000000000000000000000000815284936001600160a01b0390931692633cf9798392610fce92899261138892916004016155a1565b6000604051808303816000875af1158015610fed573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261101591908101906155dd565b50915091508161105357806040517f0a8d6e8c0000000000000000000000000000000000000000000000000000000081526004016107549190614879565b5050505050505050565b6110a06040805160e081019091526000606082018181526080830182905260a0830182905260c08301919091528190815260200160608152602001606081525090565b60ff808316600090815260026020818152604092839020835160e081018552815460608201908152600183015480881660808401526101008104881660a0840152620100009004909616151560c08201529485529182018054845181840281018401909552808552929385830193909283018282801561114957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161112b575b50505050508152602001600382018054806020026020016040519081016040528092919081815260200182805480156111ab57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161118d575b5050505050815250509050919050565b6111c3611496565b60005b818110156107805760008383838181106111e2576111e2614f7f565b9050604002018036038101906111f89190615673565b905061120781602001516113d5565b61126c57805167ffffffffffffffff1660009081526008602090815260408083208285018051855290835281842093909355915191519182527f202f1139a3e334b6056064c0e9b19fd07e44a88d8f6e5ded571b24cf8c371f12910160405180910390a15b506001016111c6565b604080516080808201835260008083526020808401829052838501829052606080850181905267ffffffffffffffff878116845260068352928690208651948501875280546001600160a01b0381168652600160a01b810460ff16151593860193909352600160a81b909204909216948301949094526001840180549394929391840191611302906156ac565b80601f016020809104026020016040519081016040528092919081815260200182805461132e906156ac565b80156111ab5780601f10611350576101008083540402835291602001916111ab565b820191906000526020600020905b81548152906001019060200180831161135e57505050919092525091949350505050565b61138a611496565b6105dd816120e9565b61139b611496565b60005b81518110156113d1576113c98282815181106113bc576113bc614f7f565b602002602001015161219f565b60010161139e565b5050565b6040805180820182523081526020810183815291517f4d61677100000000000000000000000000000000000000000000000000000000815290516001600160a01b039081166004830152915160248201526000917f00000000000000000000000000000000000000000000000000000000000000001690634d61677190604401602060405180830381865afa158015611472573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c1591906156e6565b6000546001600160a01b031633146114f05760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610754565b565b60005b81518110156113d157600082828151811061151257611512614f7f565b602002602001015190506000816020015190508067ffffffffffffffff16600003611569576040517fc656089500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81516001600160a01b0316611591576040516342bcdf7f60e11b815260040160405180910390fd5b67ffffffffffffffff811660009081526006602052604081206001810180549192916115bc906156ac565b80601f01602080910402602001604051908101604052809291908181526020018280546115e8906156ac565b80156116355780601f1061160a57610100808354040283529160200191611635565b820191906000526020600020905b81548152906001019060200180831161161857829003601f168201915b5050505050905060008460600151905081516000036116ed578051600003611670576040516342bcdf7f60e11b815260040160405180910390fd5b6001830161167e8282615753565b5082547fffffff0000000000000000ffffffffffffffffffffffffffffffffffffffffff16600160a81b17835560405167ffffffffffffffff851681527ff4c1390c70e5c0f491ae1ccbc06f9117cbbadf2767b247b3bc203280f24c0fb99060200160405180910390a1611740565b8080519060200120828051906020012014611740576040517fc39a620500000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610754565b604080860151845487516001600160a01b031673ffffffffffffffffffffffffffffffffffffffff19921515600160a01b02929092167fffffffffffffffffffffff000000000000000000000000000000000000000000909116171784555167ffffffffffffffff8516907f49f51971edd25182e97182d6ea372a0488ce2ab639f6a3a7ab4df0d2636fe56b906117d8908690615813565b60405180910390a250505050508060010190506114f5565b467f0000000000000000000000000000000000000000000000000000000000000000146114f0576040517f0f01ce850000000000000000000000000000000000000000000000000000000081527f00000000000000000000000000000000000000000000000000000000000000006004820152466024820152604401610754565b81516000036118ab576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805160408051600080825260208201909252911591905b845181101561191a576119128582815181106118e0576118e0614f7f565b60200260200101518461190c578583815181106118ff576118ff614f7f565b60200260200101516124d0565b836124d0565b6001016118c2565b5050505050565b6040517f2cbc26bb000000000000000000000000000000000000000000000000000000008152608082901b77ffffffffffffffff000000000000000000000000000000001660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632cbc26bb90602401602060405180830381865afa1580156119bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e091906156e6565b156105dd576040517ffdbd6a7200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff82166004820152602401610754565b67ffffffffffffffff811660009081526006602052604081208054600160a01b900460ff16610c15576040517fed053c5900000000000000000000000000000000000000000000000000000000815267ffffffffffffffff84166004820152602401610754565b60ff87811660009081526002602090815260408083208151608081018352815481526001909101548086169382019390935261010083048516918101919091526201000090910490921615156060830152873590611ae98760a46158e1565b9050826060015115611b31578451611b029060206154d5565b8651611b0f9060206154d5565b611b1a9060a06158e1565b611b2491906158e1565b611b2e90826158e1565b90505b368114611b73576040517f8e1192e100000000000000000000000000000000000000000000000000000000815260048101829052366024820152604401610754565b5081518114611bbb5781516040517f93df584c000000000000000000000000000000000000000000000000000000008152600481019190915260248101829052604401610754565b611bc36117f0565b60ff808a1660009081526003602090815260408083203384528252808320815180830190925280548086168352939491939092840191610100909104166002811115611c1157611c11614a5e565b6002811115611c2257611c22614a5e565b9052509050600281602001516002811115611c3f57611c3f614a5e565b148015611c935750600260008b60ff1660ff168152602001908152602001600020600301816000015160ff1681548110611c7b57611c7b614f7f565b6000918252602090912001546001600160a01b031633145b611cc9576040517fda0f08e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50816060015115611dab576020820151611ce49060016158f4565b60ff16855114611d20576040517f71253a2500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8351855114611d5b576040517fa75d88af00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008787604051611d6d92919061590d565b604051908190038120611d84918b9060200161591d565b604051602081830303815290604052805190602001209050611da98a82888888612c9c565b505b6040805182815260208a81013567ffffffffffffffff169082015260ff8b16917f198d6990ef96613a9026203077e422916918b03ff47f0be6bee7b02d8e139ef0910160405180910390a2505050505050505050565b67ffffffffffffffff8216600090815260076020526040812081611e26608085615931565b67ffffffffffffffff1681526020810191909152604001600020549392505050565b80516001600160a01b0316611e70576040516342bcdf7f60e11b815260040160405180910390fd5b80516004805460208085018051604080880180516060808b0180516001600160a01b039b8c167fffffffffffffffff000000000000000000000000000000000000000000000000909a168a17600160a01b63ffffffff988916021777ffffffffffffffffffffffffffffffffffffffffffffffff167801000000000000000000000000000000000000000000000000948816949094026001600160e01b031693909317600160e01b93871693909302929092179098556080808b0180516005805473ffffffffffffffffffffffffffffffffffffffff1916918d169190911790558451988952955185169688019690965290518316918601919091525116938301939093529151909216908201527fa55bd56595c45f517e5967a3067f3dca684445a3080e7c04a4e0d5a40cda627d9060a00160405180910390a150565b6060865167ffffffffffffffff811115611fca57611fca613e89565b60405190808252806020026020018201604052801561200f57816020015b6040805180820190915260008082526020820152815260200190600190039081611fe85790505b50905060005b87518110156120c15761209c88828151811061203357612033614f7f565b602002602001015188888888888781811061205057612050614f7f565b90506020028101906120629190615958565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612e8192505050565b8282815181106120ae576120ae614f7f565b6020908102919091010152600101612015565b505b9695505050505050565b60006120d883613226565b8015610c125750610c12838361328a565b336001600160a01b038216036121415760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610754565b6001805473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b806040015160ff166000036121ca576000604051631b3fab5160e11b815260040161075491906159bd565b60208082015160ff8082166000908152600290935260408320600181015492939092839216900361223757606084015160018201805491151562010000027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ffff90921691909117905561228c565b6060840151600182015460ff620100009091041615159015151461228c576040517f87f6037c00000000000000000000000000000000000000000000000000000000815260ff84166004820152602401610754565b60a0840151805161010010156122b8576001604051631b3fab5160e11b815260040161075491906159bd565b61231e848460030180548060200260200160405190810160405280929190818152602001828054801561231457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116122f6575b5050505050613345565b8460600151156124455761238c8484600201805480602002602001604051908101604052809291908181526020018280548015612314576020028201919060005260206000209081546001600160a01b031681526001909101906020018083116122f6575050505050613345565b6080850151805161010010156123b8576002604051631b3fab5160e11b815260040161075491906159bd565b60408601516123c89060036159d7565b60ff168151116123ee576003604051631b3fab5160e11b815260040161075491906159bd565b80516001840180547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff1661010060ff8416021790556124369060028601906020840190613e02565b50612443858260016133ae565b505b612451848260026133ae565b80516124669060038501906020840190613e02565b5060408581015160018401805460ff191660ff8316179055865180855560a088015192517fab8b1b57514019638d7b5ce9c638fe71366fe8e2be1c40a7a80f1733d0e9f547936124bf9389939260028a019291906159f3565b60405180910390a161191a84613522565b81516124db81611921565b60006124e682611a23565b60010180546124f4906156ac565b80601f0160208091040260200160405190810160405280929190818152602001828054612520906156ac565b801561256d5780601f106125425761010080835404028352916020019161256d565b820191906000526020600020905b81548152906001019060200180831161255057829003601f168201915b505050602087015151929350505060008190036125b5576040517ebf199700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84604001515181146125f3576040517f57e0e08300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008167ffffffffffffffff81111561260e5761260e613e89565b604051908082528060200260200182016040528015612637578160200160208202803683370190505b50905060005b828110156127205760008760200151828151811061265d5761265d614f7f565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff1681600001516040015167ffffffffffffffff16146126f057805160409081015190517f38432a2200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff9091166004820152602401610754565b6126fa818661353e565b83838151811061270c5761270c614f7f565b60209081029190910101525060010161263d565b506000612737858389606001518a60800151613660565b90508060000361277f576040517f7dd17a7e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff86166004820152602401610754565b8551151560005b84811015610b515760005a905060008a6020015183815181106127ab576127ab614f7f565b6020026020010151905060006127c98a836000015160600151610bc5565b905060008160038111156127df576127df614a5e565b14806127fc575060038160038111156127fa576127fa614a5e565b145b612854578151606001516040805167ffffffffffffffff808e16825290921660208301527f3b575419319662b2a6f5e2467d84521517a3382b908eb3d557bb3fdb0c50e23c91015b60405180910390a1505050612c94565b841561292457600454600090600160a01b900463ffffffff166128778842615485565b11905080806128975750600382600381111561289557612895614a5e565b145b6128d9576040517fa9cfc86200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8c166004820152602401610754565b8b85815181106128eb576128eb614f7f565b602002602001015160001461291e578b858151811061290c5761290c614f7f565b60200260200101518360800181815250505b50612985565b600081600381111561293857612938614a5e565b14612985578151606001516040805167ffffffffffffffff808e16825290921660208301527f3ef2a99c550a751d4b0b261268f05a803dfb049ab43616a1ffb388f61fe651209101612844565b81516080015167ffffffffffffffff1615612a745760008160038111156129ae576129ae614a5e565b03612a745781516080015160208301516040517fe0e03cae0000000000000000000000000000000000000000000000000000000081526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169263e0e03cae92612a25928f929190600401615a9f565b6020604051808303816000875af1158015612a44573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a6891906156e6565b612a7457505050612c94565b60008c604001518581518110612a8c57612a8c614f7f565b6020026020010151905080518360a001515114612af0578251606001516040517f1cfe6d8b00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff808e1660048301529091166024820152604401610754565b612b048b84600001516060015160016136b6565b600080612b11858461375e565b91509150612b288d866000015160600151846136b6565b8715612b98576003826003811115612b4257612b42614a5e565b03612b98576000846003811115612b5b57612b5b614a5e565b14612b98578451516040517f2b11b8d900000000000000000000000000000000000000000000000000000000815261075491908390600401615acc565b6002826003811115612bac57612bac614a5e565b14612c06576003826003811115612bc557612bc5614a5e565b14612c06578451606001516040517f926c5a3e000000000000000000000000000000000000000000000000000000008152610754918f918590600401615ae5565b84600001516000015185600001516060015167ffffffffffffffff168e67ffffffffffffffff167f05665fe9ad095383d018353f4cbcba77e84db27dd215081bbf7cdf9ae6fbe48b8d8b81518110612c6057612c60614f7f565b602002602001015186865a612c75908e615485565b604051612c859493929190615b0b565b60405180910390a45050505050505b600101612786565b8251600090815b81811015611053576000600188868460208110612cc257612cc2614f7f565b612ccf91901a601b6158f4565b898581518110612ce157612ce1614f7f565b6020026020010151898681518110612cfb57612cfb614f7f565b602002602001015160405160008152602001604052604051612d39949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa158015612d5b573d6000803e3d6000fd5b505060408051601f1981015160ff808e166000908152600360209081528582206001600160a01b03851683528152858220858701909652855480841686529397509095509293928401916101009004166002811115612dbc57612dbc614a5e565b6002811115612dcd57612dcd614a5e565b9052509050600181602001516002811115612dea57612dea614a5e565b14612e21576040517fca31867a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8051600160ff9091161b851615612e64576040517ff67bc7c400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000015160ff166001901b851794505050806001019050612ca3565b60408051808201909152600080825260208201526000612ea48760200151613828565b6040517fbbe4f6db0000000000000000000000000000000000000000000000000000000081526001600160a01b0380831660048301529192506000917f0000000000000000000000000000000000000000000000000000000000000000169063bbe4f6db90602401602060405180830381865afa158015612f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4d9190615b42565b90506001600160a01b0381161580612f955750612f936001600160a01b0382167faff2afbf000000000000000000000000000000000000000000000000000000006120cd565b155b15612fd7576040517fae9b4ce90000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401610754565b6004546000908190612ff99089908690600160e01b900463ffffffff166138ce565b9150915060008060006130c66040518061010001604052808e81526020018c67ffffffffffffffff1681526020018d6001600160a01b031681526020018f606001518152602001896001600160a01b031681526020018f6000015181526020018f6040015181526020018b8152506040516024016130779190615b5f565b60408051601f198184030181529190526020810180516001600160e01b03167f3907753700000000000000000000000000000000000000000000000000000000179052878661138860846139fc565b9250925092508261310557816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107549190614879565b815160201461314d5781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b6000828060200190518101906131639190615c2c565b9050866001600160a01b03168c6001600160a01b0316146131f85760006131948d8a61318f868a615485565b6138ce565b509050868110806131ae5750816131ab8883615485565b14155b156131f6576040517fa966e21f000000000000000000000000000000000000000000000000000000008152600481018390526024810188905260448101829052606401610754565b505b604080518082019091526001600160a01b039098168852602088015250949550505050505095945050505050565b6000613252827f01ffc9a70000000000000000000000000000000000000000000000000000000061328a565b8015610c155750613283827fffffffff0000000000000000000000000000000000000000000000000000000061328a565b1592915050565b6040517fffffffff0000000000000000000000000000000000000000000000000000000082166024820152600090819060440160408051601f19818403018152919052602080820180516001600160e01b03167f01ffc9a700000000000000000000000000000000000000000000000000000000178152825192935060009283928392909183918a617530fa92503d9150600051905082801561332e575060208210155b801561333a5750600081115b979650505050505050565b60005b81518110156107805760ff83166000908152600360205260408120835190919084908490811061337a5761337a614f7f565b6020908102919091018101516001600160a01b03168252810191909152604001600020805461ffff19169055600101613348565b60005b8251811015610bbf5760008382815181106133ce576133ce614f7f565b60200260200101519050600060028111156133eb576133eb614a5e565b60ff80871660009081526003602090815260408083206001600160a01b0387168452909152902054610100900416600281111561342a5761342a614a5e565b1461344b576004604051631b3fab5160e11b815260040161075491906159bd565b6001600160a01b03811661348b576040517fd6c62c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052808360ff1681526020018460028111156134b1576134b1614a5e565b905260ff80871660009081526003602090815260408083206001600160a01b0387168452825290912083518154931660ff198416811782559184015190929091839161ffff19161761010083600281111561350e5761350e614a5e565b0217905550905050508060010190506133b1565b60ff81166105dd576009805467ffffffffffffffff1916905550565b815160208082015160409283015192516000938493613584937f2425b0b9f9054c76ff151b0a175b18f37a4a4e82013a72e9f15c9caa095ed21f93909291889101615c45565b60408051601f1981840301815290829052805160209182012086518051888401516060808b0151908401516080808d015195015195976135cd9794969395929491939101615c78565b604051602081830303815290604052805190602001208560400151805190602001208660a001516040516020016136049190615d8a565b60408051601f198184030181528282528051602091820120908301969096528101939093526060830191909152608082015260a081019190915260c0015b60405160208183030381529060405280519060200120905092915050565b60008061366e858585613b22565b9050613679816113d5565b6136875760009150506136ae565b67ffffffffffffffff86166000908152600860209081526040808320938352929052205490505b949350505050565b600060026136c56080856154ae565b67ffffffffffffffff166136d991906154d5565b905060006136e78585611e01565b9050816136f660016004615485565b901b19168183600381111561370d5761370d614a5e565b67ffffffffffffffff871660009081526007602052604081209190921b9290921791829161373c608088615931565b67ffffffffffffffff1681526020810191909152604001600020555050505050565b6040517fa80036b4000000000000000000000000000000000000000000000000000000008152600090606090309063a80036b4906137a29087908790600401615dea565b600060405180830381600087803b1580156137bc57600080fd5b505af19250505080156137cd575060015b61380c573d8080156137fb576040519150601f19603f3d011682016040523d82523d6000602084013e613800565b606091505b50600392509050613821565b50506040805160208101909152600081526002905b9250929050565b6000815160201461386757816040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107549190614879565b60008280602001905181019061387d9190615c2c565b90506001600160a01b03811180613895575061040081105b15610c1557826040517f8d666f600000000000000000000000000000000000000000000000000000000081526004016107549190614879565b6000806000806000613948886040516024016138f991906001600160a01b0391909116815260200190565b60408051601f198184030181529190526020810180516001600160e01b03167f70a0823100000000000000000000000000000000000000000000000000000000179052888861138860846139fc565b9250925092508261398757816040517fe1cd55090000000000000000000000000000000000000000000000000000000081526004016107549190614879565b60208251146139cf5781516040517f78ef8024000000000000000000000000000000000000000000000000000000008152602060048201526024810191909152604401610754565b818060200190518101906139e39190615c2c565b6139ed8288615485565b94509450505050935093915050565b6000606060008361ffff1667ffffffffffffffff811115613a1f57613a1f613e89565b6040519080825280601f01601f191660200182016040528015613a49576020820181803683370190505b509150863b613a7c577f0c3b563c0000000000000000000000000000000000000000000000000000000060005260046000fd5b5a85811015613aaf577fafa32a2c0000000000000000000000000000000000000000000000000000000060005260046000fd5b8590036040810481038710613ae8577f37c3be290000000000000000000000000000000000000000000000000000000060005260046000fd5b505a6000808a5160208c0160008c8cf193505a900390503d84811115613b0b5750835b808352806000602085013e50955095509592505050565b8251825160009190818303613b63576040517f11a6b26400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101018211801590613b7757506101018111155b613b94576040516309bde33960e01b815260040160405180910390fd5b60001982820101610100811115613bbe576040516309bde33960e01b815260040160405180910390fd5b80600003613beb5786600081518110613bd957613bd9614f7f565b60200260200101519350505050613dba565b60008167ffffffffffffffff811115613c0657613c06613e89565b604051908082528060200260200182016040528015613c2f578160200160208202803683370190505b50905060008080805b85811015613d595760006001821b8b811603613c935788851015613c7c578c5160018601958e918110613c6d57613c6d614f7f565b60200260200101519050613cb5565b8551600185019487918110613c6d57613c6d614f7f565b8b5160018401938d918110613caa57613caa614f7f565b602002602001015190505b600089861015613ce5578d5160018701968f918110613cd657613cd6614f7f565b60200260200101519050613d07565b8651600186019588918110613cfc57613cfc614f7f565b602002602001015190505b82851115613d28576040516309bde33960e01b815260040160405180910390fd5b613d328282613dc1565b878481518110613d4457613d44614f7f565b60209081029190910101525050600101613c38565b506001850382148015613d6b57508683145b8015613d7657508581145b613d93576040516309bde33960e01b815260040160405180910390fd5b836001860381518110613da857613da8614f7f565b60200260200101519750505050505050505b9392505050565b6000818310613dd957613dd48284613ddf565b610c12565b610c1283835b604080516001602082015290810183905260608101829052600090608001613642565b828054828255906000526020600020908101928215613e64579160200282015b82811115613e64578251825473ffffffffffffffffffffffffffffffffffffffff19166001600160a01b03909116178255602090920191600190910190613e22565b50613e70929150613e74565b5090565b5b80821115613e705760008155600101613e75565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff81118282101715613ec257613ec2613e89565b60405290565b60405160a0810167ffffffffffffffff81118282101715613ec257613ec2613e89565b60405160c0810167ffffffffffffffff81118282101715613ec257613ec2613e89565b6040805190810167ffffffffffffffff81118282101715613ec257613ec2613e89565b6040516060810167ffffffffffffffff81118282101715613ec257613ec2613e89565b604051601f8201601f1916810167ffffffffffffffff81118282101715613f7d57613f7d613e89565b604052919050565b600067ffffffffffffffff821115613f9f57613f9f613e89565b5060051b60200190565b6001600160a01b03811681146105dd57600080fd5b803567ffffffffffffffff81168114613fd657600080fd5b919050565b80151581146105dd57600080fd5b8035613fd681613fdb565b600067ffffffffffffffff82111561400e5761400e613e89565b50601f01601f191660200190565b600082601f83011261402d57600080fd5b813561404061403b82613ff4565b613f54565b81815284602083860101111561405557600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561408557600080fd5b823567ffffffffffffffff8082111561409d57600080fd5b818501915085601f8301126140b157600080fd5b81356140bf61403b82613f85565b81815260059190911b830184019084810190888311156140de57600080fd5b8585015b83811015614184578035858111156140fa5760008081fd5b86016080818c03601f19018113156141125760008081fd5b61411a613e9f565b8983013561412781613fa9565b81526040614136848201613fbe565b8b83015260608085013561414981613fdb565b8383015292840135928984111561416257600091508182fd5b6141708f8d8688010161401c565b9083015250855250509186019186016140e2565b5098975050505050505050565b600060a082840312156141a357600080fd5b6141ab613ec8565b9050813581526141bd60208301613fbe565b60208201526141ce60408301613fbe565b60408201526141df60608301613fbe565b60608201526141f060808301613fbe565b608082015292915050565b8035613fd681613fa9565b600082601f83011261421757600080fd5b8135602061422761403b83613f85565b82815260059290921b8401810191818101908684111561424657600080fd5b8286015b848110156120c157803567ffffffffffffffff8082111561426b5760008081fd5b818901915060a080601f19848d030112156142865760008081fd5b61428e613ec8565b87840135838111156142a05760008081fd5b6142ae8d8a8388010161401c565b825250604080850135848111156142c55760008081fd5b6142d38e8b8389010161401c565b8a84015250606080860135858111156142ec5760008081fd5b6142fa8f8c838a010161401c565b838501525060809150818601358184015250828501359250838311156143205760008081fd5b61432e8d8a8588010161401c565b90820152865250505091830191830161424a565b6000610140828403121561435557600080fd5b61435d613eeb565b90506143698383614191565b815260a082013567ffffffffffffffff8082111561438657600080fd5b6143928583860161401c565b602084015260c08401359150808211156143ab57600080fd5b6143b78583860161401c565b60408401526143c860e085016141fb565b606084015261010084013560808401526101208401359150808211156143ed57600080fd5b506143fa84828501614206565b60a08301525092915050565b600082601f83011261441757600080fd5b8135602061442761403b83613f85565b82815260059290921b8401810191818101908684111561444657600080fd5b8286015b848110156120c157803567ffffffffffffffff81111561446a5760008081fd5b6144788986838b0101614342565b84525091830191830161444a565b600082601f83011261449757600080fd5b813560206144a761403b83613f85565b82815260059290921b840181019181810190868411156144c657600080fd5b8286015b848110156120c157803567ffffffffffffffff808211156144ea57600080fd5b818901915089603f8301126144fe57600080fd5b8582013561450e61403b82613f85565b81815260059190911b830160400190878101908c83111561452e57600080fd5b604085015b838110156145675780358581111561454a57600080fd5b6145598f6040838a010161401c565b845250918901918901614533565b508752505050928401925083016144ca565b600082601f83011261458a57600080fd5b8135602061459a61403b83613f85565b8083825260208201915060208460051b8701019350868411156145bc57600080fd5b602086015b848110156120c157803583529183019183016145c1565b600082601f8301126145e957600080fd5b813560206145f961403b83613f85565b82815260059290921b8401810191818101908684111561461857600080fd5b8286015b848110156120c157803567ffffffffffffffff8082111561463d5760008081fd5b818901915060a080601f19848d030112156146585760008081fd5b614660613ec8565b61466b888501613fbe565b8152604080850135848111156146815760008081fd5b61468f8e8b83890101614406565b8a84015250606080860135858111156146a85760008081fd5b6146b68f8c838a0101614486565b83850152506080915081860135858111156146d15760008081fd5b6146df8f8c838a0101614579565b918401919091525091909301359083015250835291830191830161461c565b600080604080848603121561471257600080fd5b833567ffffffffffffffff8082111561472a57600080fd5b614736878388016145d8565b945060209150818601358181111561474d57600080fd5b8601601f8101881361475e57600080fd5b803561476c61403b82613f85565b81815260059190911b8201840190848101908a83111561478b57600080fd5b8584015b83811015614817578035868111156147a75760008081fd5b8501603f81018d136147b95760008081fd5b878101356147c961403b82613f85565b81815260059190911b82018a0190898101908f8311156147e95760008081fd5b928b01925b828410156148075783358252928a0192908a01906147ee565b865250505091860191860161478f565b50809750505050505050509250929050565b60005b8381101561484457818101518382015260200161482c565b50506000910152565b60008151808452614865816020860160208601614829565b601f01601f19169290920160200192915050565b602081526000610c12602083018461484d565b8060608101831015610c1557600080fd5b60008083601f8401126148af57600080fd5b50813567ffffffffffffffff8111156148c757600080fd5b60208301915083602082850101111561382157600080fd5b60008083601f8401126148f157600080fd5b50813567ffffffffffffffff81111561490957600080fd5b6020830191508360208260051b850101111561382157600080fd5b60008060008060008060008060e0898b03121561494057600080fd5b61494a8a8a61488c565b9750606089013567ffffffffffffffff8082111561496757600080fd5b6149738c838d0161489d565b909950975060808b013591508082111561498c57600080fd5b6149988c838d016148df565b909750955060a08b01359150808211156149b157600080fd5b506149be8b828c016148df565b999c989b50969995989497949560c00135949350505050565b6000806000608084860312156149ec57600080fd5b6149f6858561488c565b9250606084013567ffffffffffffffff811115614a1257600080fd5b614a1e8682870161489d565b9497909650939450505050565b60008060408385031215614a3e57600080fd5b614a4783613fbe565b9150614a5560208401613fbe565b90509250929050565b634e487b7160e01b600052602160045260246000fd5b60048110614a8457614a84614a5e565b9052565b60208101610c158284614a74565b600060208284031215614aa857600080fd5b813567ffffffffffffffff811115614abf57600080fd5b820160a08185031215613dba57600080fd5b803563ffffffff81168114613fd657600080fd5b600060a08284031215614af757600080fd5b614aff613ec8565b8235614b0a81613fa9565b8152614b1860208401614ad1565b6020820152614b2960408401614ad1565b6040820152614b3a60608401614ad1565b60608201526080830135614b4d81613fa9565b60808201529392505050565b600080600060408486031215614b6e57600080fd5b833567ffffffffffffffff80821115614b8657600080fd5b614b9287838801614342565b94506020860135915080821115614ba857600080fd5b50614a1e868287016148df565b803560ff81168114613fd657600080fd5b600060208284031215614bd857600080fd5b610c1282614bb5565b60008151808452602080850194506020840160005b83811015614c1b5781516001600160a01b031687529582019590820190600101614bf6565b509495945050505050565b60208152600082518051602084015260ff602082015116604084015260ff604082015116606084015260608101511515608084015250602083015160c060a0840152614c7560e0840182614be1565b90506040840151601f198483030160c0850152614c928282614be1565b95945050505050565b60008060408385031215614cae57600080fd5b614cb783613fbe565b946020939093013593505050565b60008060208385031215614cd857600080fd5b823567ffffffffffffffff80821115614cf057600080fd5b818501915085601f830112614d0457600080fd5b813581811115614d1357600080fd5b8660208260061b8501011115614d2857600080fd5b60209290920196919550909350505050565b600060208284031215614d4c57600080fd5b610c1282613fbe565b602081526001600160a01b03825116602082015260208201511515604082015267ffffffffffffffff6040830151166060820152600060608301516080808401526136ae60a084018261484d565b600060208284031215614db557600080fd5b8135613dba81613fa9565b600082601f830112614dd157600080fd5b81356020614de161403b83613f85565b8083825260208201915060208460051b870101935086841115614e0357600080fd5b602086015b848110156120c1578035614e1b81613fa9565b8352918301918301614e08565b60006020808385031215614e3b57600080fd5b823567ffffffffffffffff80821115614e5357600080fd5b818501915085601f830112614e6757600080fd5b8135614e7561403b82613f85565b81815260059190911b83018401908481019088831115614e9457600080fd5b8585015b8381101561418457803585811115614eaf57600080fd5b860160c0818c03601f19011215614ec65760008081fd5b614ece613eeb565b8882013581526040614ee1818401614bb5565b8a8301526060614ef2818501614bb5565b8284015260809150614f05828501613fe9565b9083015260a08381013589811115614f1d5760008081fd5b614f2b8f8d83880101614dc0565b838501525060c0840135915088821115614f455760008081fd5b614f538e8c84870101614dc0565b9083015250845250918601918601614e98565b600060208284031215614f7857600080fd5b5035919050565b634e487b7160e01b600052603260045260246000fd5b80356001600160e01b0381168114613fd657600080fd5b600082601f830112614fbd57600080fd5b81356020614fcd61403b83613f85565b82815260069290921b84018101918181019086841115614fec57600080fd5b8286015b848110156120c157604081890312156150095760008081fd5b615011613f0e565b61501a82613fbe565b8152615027858301614f95565b81860152835291830191604001614ff0565b600082601f83011261504a57600080fd5b8135602061505a61403b83613f85565b82815260079290921b8401810191818101908684111561507957600080fd5b8286015b848110156120c15780880360808112156150975760008081fd5b61509f613f31565b6150a883613fbe565b8152604080601f19840112156150be5760008081fd5b6150c6613f0e565b92506150d3878501613fbe565b83526150e0818501613fbe565b838801528187019290925260608301359181019190915283529183019160800161507d565b6000602080838503121561511857600080fd5b823567ffffffffffffffff8082111561513057600080fd5b8185019150604080838803121561514657600080fd5b61514e613f0e565b83358381111561515d57600080fd5b84016040818a03121561516f57600080fd5b615177613f0e565b81358581111561518657600080fd5b8201601f81018b1361519757600080fd5b80356151a561403b82613f85565b81815260069190911b8201890190898101908d8311156151c457600080fd5b928a01925b828410156152145787848f0312156151e15760008081fd5b6151e9613f0e565b84356151f481613fa9565b8152615201858d01614f95565b818d0152825292870192908a01906151c9565b84525050508187013593508484111561522c57600080fd5b6152388a858401614fac565b818801528252508385013591508282111561525257600080fd5b61525e88838601615039565b85820152809550505050505092915050565b805160408084528151848201819052600092602091908201906060870190855b818110156152c757835180516001600160a01b031684528501516001600160e01b0316858401529284019291850191600101615290565b50508583015187820388850152805180835290840192506000918401905b80831015615321578351805167ffffffffffffffff1683528501516001600160e01b0316858301529284019260019290920191908501906152e5565b50979650505050505050565b602081526000610c126020830184615270565b67ffffffffffffffff8316815260608101613dba6020830184805167ffffffffffffffff908116835260209182015116910152565b634e487b7160e01b600052601160045260246000fd5b67ffffffffffffffff8181168382160190808211156153ac576153ac615375565b5092915050565b6000602080835260608451604080848701526153d26060870183615270565b87850151878203601f19016040890152805180835290860193506000918601905b8083101561418457845167ffffffffffffffff81511683528781015161543289850182805167ffffffffffffffff908116835260209182015116910152565b508401518287015293860193600192909201916080909101906153f3565b60006020828403121561546257600080fd5b813567ffffffffffffffff81111561547957600080fd5b6136ae848285016145d8565b81810381811115610c1557610c15615375565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806154c9576154c9615498565b92169190910692915050565b8082028115828204841417610c1557610c15615375565b805182526000602067ffffffffffffffff81840151168185015260408084015160a0604087015261552060a087018261484d565b905060608501518682036060880152615539828261484d565b608087810151898303918a01919091528051808352908601935060009250908501905b8083101561532157835180516001600160a01b031683528601518683015292850192600192909201919084019061555c565b602081526000610c1260208301846154ec565b6080815260006155b460808301876154ec565b61ffff9590951660208301525060408101929092526001600160a01b0316606090910152919050565b6000806000606084860312156155f257600080fd5b83516155fd81613fdb565b602085015190935067ffffffffffffffff81111561561a57600080fd5b8401601f8101861361562b57600080fd5b805161563961403b82613ff4565b81815287602083850101111561564e57600080fd5b61565f826020830160208601614829565b809450505050604084015190509250925092565b60006040828403121561568557600080fd5b61568d613f0e565b61569683613fbe565b8152602083013560208201528091505092915050565b600181811c908216806156c057607f821691505b6020821081036156e057634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156156f857600080fd5b8151613dba81613fdb565b601f821115610780576000816000526020600020601f850160051c8101602086101561572c5750805b601f850160051c820191505b8181101561574b57828155600101615738565b505050505050565b815167ffffffffffffffff81111561576d5761576d613e89565b6157818161577b84546156ac565b84615703565b602080601f8311600181146157b6576000841561579e5750858301515b600019600386901b1c1916600185901b17855561574b565b600085815260208120601f198616915b828110156157e5578886015182559484019460019091019084016157c6565b50858210156158035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602080835283546001600160a01b038116602085015260ff8160a01c161515604085015267ffffffffffffffff8160a81c16606085015250600180850160808086015260008154615865816156ac565b8060a089015260c0600183166000811461588657600181146158a2576158d2565b60ff19841660c08b015260c083151560051b8b010194506158d2565b85600052602060002060005b848110156158c95781548c82018501529088019089016158ae565b8b0160c0019550505b50929998505050505050505050565b80820180821115610c1557610c15615375565b60ff8181168382160190811115610c1557610c15615375565b8183823760009101908152919050565b828152606082602083013760800192915050565b600067ffffffffffffffff8084168061594c5761594c615498565b92169190910492915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261598d57600080fd5b83018035915067ffffffffffffffff8211156159a857600080fd5b60200191503681900382131561382157600080fd5b60208101600583106159d1576159d1614a5e565b91905290565b60ff81811683821602908116908181146153ac576153ac615375565b600060a0820160ff881683526020878185015260a0604085015281875480845260c0860191508860005282600020935060005b81811015615a4b5784546001600160a01b031683526001948501949284019201615a26565b50508481036060860152865180825290820192508187019060005b81811015615a8b5782516001600160a01b031685529383019391830191600101615a66565b50505060ff851660808501525090506120c3565b600067ffffffffffffffff808616835280851660208401525060606040830152614c92606083018461484d565b8281526040602082015260006136ae604083018461484d565b67ffffffffffffffff848116825283166020820152606081016136ae6040830184614a74565b848152615b1b6020820185614a74565b608060408201526000615b31608083018561484d565b905082606083015295945050505050565b600060208284031215615b5457600080fd5b8151613dba81613fa9565b6020815260008251610100806020850152615b7e61012085018361484d565b91506020850151615b9b604086018267ffffffffffffffff169052565b5060408501516001600160a01b038116606086015250606085015160808501526080850151615bd560a08601826001600160a01b03169052565b5060a0850151601f19808685030160c0870152615bf2848361484d565b935060c08701519150808685030160e0870152615c0f848361484d565b935060e08701519150808685030183870152506120c3838261484d565b600060208284031215615c3e57600080fd5b5051919050565b848152600067ffffffffffffffff8086166020840152808516604084015250608060608301526120c3608083018461484d565b86815260c060208201526000615c9160c083018861484d565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152608081019290925290911660a09091015292915050565b600082825180855260208086019550808260051b84010181860160005b84811015615d7d57601f19868403018952815160a08151818652615d0e8287018261484d565b9150508582015185820387870152615d26828261484d565b91505060408083015186830382880152615d40838261484d565b92505050606080830151818701525060808083015192508582038187015250615d69818361484d565b9a86019a9450505090830190600101615ce8565b5090979650505050505050565b602081526000610c126020830184615ccb565b60008282518085526020808601955060208260051b8401016020860160005b84811015615d7d57601f19868403018952615dd883835161484d565b98840198925090830190600101615dbc565b604081526000835180516040840152602081015167ffffffffffffffff80821660608601528060408401511660808601528060608401511660a08601528060808401511660c086015250505060208401516101408060e0850152615e5261018085018361484d565b915060408601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08086850301610100870152615e8f848361484d565b935060608801519150615eae6101208701836001600160a01b03169052565b60808801518387015260a0880151925080868503016101608701525050615ed58282615ccb565b9150508281036020840152614c928185615d9d56fea164736f6c6343000818000a", } var OffRampABI = OffRampMetaData.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 35daa791c3..fa4edfd3dd 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 @@ -4,7 +4,7 @@ burn_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnMintTokenPool/BurnMint burn_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnMintTokenPoolAndProxy/BurnMintTokenPoolAndProxy.bin 717c079d5d13300cf3c3ee871c6e5bf9af904411f204fb081a9f3b263cca1391 burn_with_from_mint_token_pool: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPool/BurnWithFromMintTokenPool.bin 6333d0314d0bd29e75ea5e05fe62a4516ade0c6db91c30b6f93645035db52ed8 burn_with_from_mint_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/BurnWithFromMintTokenPoolAndProxy/BurnWithFromMintTokenPoolAndProxy.bin 08ed1235dda921ce8841b26aa18d0c0f36db4884779dd7670857159801b6d597 -ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin 3b89dd119dc7a0719bf70339e80e820a8c0d615e7b257631ed12e2e6a95ea19c +ccip_config: ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.abi ../../../contracts/solc/v0.8.24/CCIPConfig/CCIPConfig.bin 02da0d657b0835cf89f39ba790a96cab4595d27e16ebb7242a40dcec67e9da56 ccip_reader_tester: ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.abi ../../../contracts/solc/v0.8.24/CCIPReaderTester/CCIPReaderTester.bin d8d70fe111bacc7702c7c263f8c4733dcb2fff77e52c9f60c30d303731bc97c1 commit_store: ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.abi ../../../contracts/solc/v0.8.24/CommitStore/CommitStore.bin 274d87db70b643e00ab0a7e7845bb4b791f3b613bfc87708d33fc5a8369e2a41 commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.abi ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitStoreHelper.bin f7128dcc2ee6dbcbc976288abcc16970ffb19b59412c5202ef6b259d2007f801 @@ -20,10 +20,10 @@ mock_usdc_token_messenger: ../../../contracts/solc/v0.8.24/MockE2EUSDCTokenMesse mock_usdc_token_transmitter: ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.abi ../../../contracts/solc/v0.8.24/MockE2EUSDCTransmitter/MockE2EUSDCTransmitter.bin be0dbc3e475741ea0b7a54ec2b935a321b428baa9f4ce18180a87fb38bb87de2 mock_v3_aggregator_contract: ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.abi ../../../contracts/solc/v0.8.24/MockV3Aggregator/MockV3Aggregator.bin 518e19efa2ff52b0fefd8e597b05765317ee7638189bfe34ca43de2f6599faf4 multi_aggregate_rate_limiter: ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.abi ../../../contracts/solc/v0.8.24/MultiAggregateRateLimiter/MultiAggregateRateLimiter.bin 0b541232e49727e947dc164eadf35963c66e67576f21baa0ecaa06a8833148ed -multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin a0b23ebb141fa05e59f84bb8a8abd5eb804b94ddad6dc9f4beda5cc6995cb0f5 +multi_ocr3_helper: ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.abi ../../../contracts/solc/v0.8.24/MultiOCR3Helper/MultiOCR3Helper.bin 6b56e0114a4d50797d30a34aecc2641ef340451d0c3fcb9d729bba4df2435122 nonce_manager: ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.abi ../../../contracts/solc/v0.8.24/NonceManager/NonceManager.bin 6f64e1083b356c06ee66b9138e398b9c97a4cd3e8c9ec38cf3010cebc79af536 ocr3_config_encoder: ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.abi ../../../contracts/solc/v0.8.24/IOCR3ConfigEncoder/IOCR3ConfigEncoder.bin e21180898e1ad54a045ee20add85a2793c681425ea06f66d1a9e5cab128b6487 -offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin e6344e0f3a65ff8122b41eb071cde5641a666c14ced5d72a04d65efb9ef538a5 +offramp: ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.abi ../../../contracts/solc/v0.8.24/OffRamp/OffRamp.bin 263df151d037af19cc412a051efb82993b0ccdde0184c598e3669f1326ab4ce9 onramp: ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.abi ../../../contracts/solc/v0.8.24/OnRamp/OnRamp.bin 93ad9efaf8789baf7133a5db803b20d05b4771bf25f57a438cb7e5a8111fb472 ping_pong_demo: ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.abi ../../../contracts/solc/v0.8.24/PingPongDemo/PingPongDemo.bin c1c2f8a65c7ffd971899cae7fe62f2da57d09e936151e2b92163c4bebe699d6b price_registry: ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.abi ../../../contracts/solc/v0.8.24/PriceRegistry/PriceRegistry.bin e7781d600c1bb7aa4620106af7f6e146a109b97f4cb6a7d06c9e15773340ecb2