diff --git a/contracts/gas-snapshots/ccip.gas-snapshot b/contracts/gas-snapshots/ccip.gas-snapshot index e6596d9f3c..2dbf1fe8c9 100644 --- a/contracts/gas-snapshots/ccip.gas-snapshot +++ b/contracts/gas-snapshots/ccip.gas-snapshot @@ -10,8 +10,8 @@ AggregateTokenLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 19835) AggregateTokenLimiter_getTokenBucket:test_Refill_Success() (gas: 41499) AggregateTokenLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 15446) AggregateTokenLimiter_getTokenLimitAdmin:test_GetTokenLimitAdmin_Success() (gas: 10531) -AggregateTokenLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 19652) -AggregateTokenLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21237) +AggregateTokenLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17465) +AggregateTokenLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21360) AggregateTokenLimiter_rateLimitValue:test_AggregateValueMaxCapacityExceeded_Revert() (gas: 16508) AggregateTokenLimiter_rateLimitValue:test_RateLimitValueSuccess_gas() (gas: 18348) AggregateTokenLimiter_setAdmin:test_OnlyOwnerOrAdmin_Revert() (gas: 13054) @@ -34,7 +34,7 @@ BurnWithFromMintTokenPool_lockOrBurn:test_ChainNotAllowed_Revert() (gas: 28779) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurnRevertNotHealthy_Revert() (gas: 55124) BurnWithFromMintTokenPool_lockOrBurn:test_PoolBurn_Success() (gas: 243707) BurnWithFromMintTokenPool_lockOrBurn:test_Setup_Success() (gas: 23951) -CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2096747) +CCIPClientExample_sanity:test_ImmutableExamples_Success() (gas: 2091438) CCIPConfigSetup:test_getCapabilityConfiguration_Success() (gas: 9539) CCIPConfig_ConfigStateMachine:test__computeConfigDigest_Success() (gas: 66000) CCIPConfig_ConfigStateMachine:test__computeNewConfigWithMeta_InitToRunning_Success() (gas: 358041) @@ -99,9 +99,9 @@ CommitStore_report:test_Paused_Revert() (gas: 21262) CommitStore_report:test_ReportAndPriceUpdate_Success() (gas: 84276) CommitStore_report:test_ReportOnlyRootSuccess_gas() (gas: 56258) CommitStore_report:test_RootAlreadyCommitted_Revert() (gas: 63984) -CommitStore_report:test_StaleReportWithRoot_Success() (gas: 119350) +CommitStore_report:test_StaleReportWithRoot_Success() (gas: 116976) CommitStore_report:test_Unhealthy_Revert() (gas: 44754) -CommitStore_report:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 100760) +CommitStore_report:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 98573) CommitStore_report:test_ZeroEpochAndRound_Revert() (gas: 27632) CommitStore_resetUnblessedRoots:test_OnlyOwner_Revert() (gas: 11331) CommitStore_resetUnblessedRoots:test_ResetUnblessedRoots_Success() (gas: 143814) @@ -117,7 +117,7 @@ CommitStore_verify:test_Paused_Revert() (gas: 18505) CommitStore_verify:test_TooManyLeaves_Revert() (gas: 36797) DefensiveExampleTest:test_HappyPath_Success() (gas: 200047) DefensiveExampleTest:test_Recovery() (gas: 424294) -E2E:test_E2E_3MessagesSuccess_gas() (gas: 1101745) +E2E:test_E2E_3MessagesSuccess_gas() (gas: 1095501) EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_NotACompatiblePool_Revert() (gas: 37818) EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_Success() (gas: 103820) EVM2EVMOffRamp__releaseOrMintToken:test__releaseOrMintToken_TokenHandlingError_transfer_Revert() (gas: 85333) @@ -125,20 +125,20 @@ EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_InvalidDataLength_Rev EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_ReleaseOrMintBalanceMismatch_Revert() (gas: 94389) EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_TokenHandlingError_BalanceOf_Revert() (gas: 39813) EVM2EVMOffRamp__releaseOrMintToken:test_releaseOrMintToken_skip_ReleaseOrMintBalanceMismatch_if_pool_Revert() (gas: 86631) -EVM2EVMOffRamp__releaseOrMintTokens:test_OverValueWithARLOff_Success() (gas: 385690) -EVM2EVMOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 141997) -EVM2EVMOffRamp__releaseOrMintTokens:test_RateLimitErrors_Reverts() (gas: 804041) -EVM2EVMOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 179438) +EVM2EVMOffRamp__releaseOrMintTokens:test_OverValueWithARLOff_Success() (gas: 379129) +EVM2EVMOffRamp__releaseOrMintTokens:test_PriceNotFoundForToken_Reverts() (gas: 139810) +EVM2EVMOffRamp__releaseOrMintTokens:test_RateLimitErrors_Reverts() (gas: 793106) +EVM2EVMOffRamp__releaseOrMintTokens:test_TokenHandlingError_Reverts() (gas: 177251) EVM2EVMOffRamp__releaseOrMintTokens:test__releaseOrMintTokens_NotACompatiblePool_Reverts() (gas: 29243) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_InvalidDataLengthReturnData_Revert() (gas: 66504) EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_InvalidEVMAddress_Revert() (gas: 43320) -EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 211236) -EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 222488) +EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_Success() (gas: 206862) +EVM2EVMOffRamp__releaseOrMintTokens:test_releaseOrMintTokens_destDenominatedDecimals_Success() (gas: 218114) EVM2EVMOffRamp__report:test_Report_Success() (gas: 126703) -EVM2EVMOffRamp__trialExecute:test_RateLimitError_Success() (gas: 237982) -EVM2EVMOffRamp__trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 246582) -EVM2EVMOffRamp__trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 330144) -EVM2EVMOffRamp__trialExecute:test_trialExecute_Success() (gas: 312575) +EVM2EVMOffRamp__trialExecute:test_RateLimitError_Success() (gas: 235795) +EVM2EVMOffRamp__trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 244395) +EVM2EVMOffRamp__trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 325770) +EVM2EVMOffRamp__trialExecute:test_trialExecute_Success() (gas: 308201) EVM2EVMOffRamp_ccipReceive:test_Reverts() (gas: 17033) EVM2EVMOffRamp_constructor:test_CommitStoreAlreadyInUse_Revert() (gas: 153548) EVM2EVMOffRamp_constructor:test_Constructor_Success() (gas: 5549627) @@ -146,7 +146,7 @@ EVM2EVMOffRamp_constructor:test_ZeroOnRampAddress_Revert() (gas: 144282) EVM2EVMOffRamp_execute:test_EmptyReport_Revert() (gas: 21321) EVM2EVMOffRamp_execute:test_InvalidMessageId_Revert() (gas: 36558) EVM2EVMOffRamp_execute:test_InvalidSourceChain_Revert() (gas: 51775) -EVM2EVMOffRamp_execute:test_InvalidSourcePoolAddress_Success() (gas: 473981) +EVM2EVMOffRamp_execute:test_InvalidSourcePoolAddress_Success() (gas: 469607) EVM2EVMOffRamp_execute:test_ManualExecutionNotYetEnabled_Revert() (gas: 47830) EVM2EVMOffRamp_execute:test_MessageTooLarge_Revert() (gas: 152518) EVM2EVMOffRamp_execute:test_Paused_Revert() (gas: 103046) @@ -157,25 +157,25 @@ EVM2EVMOffRamp_execute:test_SingleMessageNoTokensUnordered_Success() (gas: 15789 EVM2EVMOffRamp_execute:test_SingleMessageNoTokens_Success() (gas: 173184) EVM2EVMOffRamp_execute:test_SingleMessageToNonCCIPReceiver_Success() (gas: 247246) EVM2EVMOffRamp_execute:test_SingleMessagesNoTokensSuccess_gas() (gas: 113971) -EVM2EVMOffRamp_execute:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 408103) +EVM2EVMOffRamp_execute:test_SkippedIncorrectNonceStillExecutes_Success() (gas: 403729) EVM2EVMOffRamp_execute:test_SkippedIncorrectNonce_Success() (gas: 54294) EVM2EVMOffRamp_execute:test_StrictUntouchedToSuccess_Success() (gas: 131317) EVM2EVMOffRamp_execute:test_TokenDataMismatch_Revert() (gas: 52249) -EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensAndGE_Success() (gas: 564401) -EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensSuccess_gas() (gas: 494916) +EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensAndGE_Success() (gas: 559653) +EVM2EVMOffRamp_execute:test_TwoMessagesWithTokensSuccess_gas() (gas: 490168) EVM2EVMOffRamp_execute:test_UnexpectedTokenData_Revert() (gas: 35497) -EVM2EVMOffRamp_execute:test_Unhealthy_Revert() (gas: 545666) +EVM2EVMOffRamp_execute:test_Unhealthy_Revert() (gas: 540918) EVM2EVMOffRamp_execute:test_UnsupportedNumberOfTokens_Revert() (gas: 64497) EVM2EVMOffRamp_execute:test__execute_SkippedAlreadyExecutedMessageUnordered_Success() (gas: 122676) EVM2EVMOffRamp_execute:test__execute_SkippedAlreadyExecutedMessage_Success() (gas: 142850) EVM2EVMOffRamp_execute:test_execute_RouterYULCall_Success() (gas: 427538) EVM2EVMOffRamp_executeSingleMessage:test_MessageSender_Revert() (gas: 18502) -EVM2EVMOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 278362) +EVM2EVMOffRamp_executeSingleMessage:test_NonContractWithTokens_Success() (gas: 273988) EVM2EVMOffRamp_executeSingleMessage:test_NonContract_Success() (gas: 18668) -EVM2EVMOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 224109) +EVM2EVMOffRamp_executeSingleMessage:test_TokenHandlingError_Revert() (gas: 221922) EVM2EVMOffRamp_executeSingleMessage:test_ZeroGasDONExecution_Revert() (gas: 47926) EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_NoTokens_Success() (gas: 47403) -EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 314224) +EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_WithTokens_Success() (gas: 309850) EVM2EVMOffRamp_executeSingleMessage:test_executeSingleMessage_ZeroGasZeroData_Success() (gas: 70065) EVM2EVMOffRamp_execute_upgrade:test_V2NonceNewSenderStartsAtZero_Success() (gas: 229454) EVM2EVMOffRamp_execute_upgrade:test_V2NonceStartsAtV1Nonce_Success() (gas: 276982) @@ -189,13 +189,13 @@ EVM2EVMOffRamp_manuallyExecute:test_ManualExecFailedTx_Revert() (gas: 185967) EVM2EVMOffRamp_manuallyExecute:test_ManualExecForkedChain_Revert() (gas: 27052) EVM2EVMOffRamp_manuallyExecute:test_ManualExecGasLimitMismatch_Revert() (gas: 45200) EVM2EVMOffRamp_manuallyExecute:test_ManualExecInvalidGasLimit_Revert() (gas: 27471) -EVM2EVMOffRamp_manuallyExecute:test_ManualExecWithMultipleMessagesAndSourceTokens_Success() (gas: 530789) -EVM2EVMOffRamp_manuallyExecute:test_ManualExecWithSourceTokens_Success() (gas: 346083) +EVM2EVMOffRamp_manuallyExecute:test_ManualExecWithMultipleMessagesAndSourceTokens_Success() (gas: 526041) +EVM2EVMOffRamp_manuallyExecute:test_ManualExecWithSourceTokens_Success() (gas: 341709) EVM2EVMOffRamp_manuallyExecute:test_ManualExec_Success() (gas: 187459) -EVM2EVMOffRamp_manuallyExecute:test_ReentrancyManualExecuteFails_Success() (gas: 2258366) -EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 363296) +EVM2EVMOffRamp_manuallyExecute:test_ReentrancyManualExecuteFails_Success() (gas: 2256179) +EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_DestinationGasAmountCountMismatch_Revert() (gas: 358922) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_DoesNotRevertIfUntouched_Success() (gas: 143972) -EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 366435) +EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_InvalidTokenGasOverride_Revert() (gas: 362061) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_LowGasLimitManualExec_Success() (gas: 482796) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_WithGasOverride_Success() (gas: 189862) EVM2EVMOffRamp_manuallyExecute:test_manuallyExecute_WithInvalidReceiverExecutionGasOverride_Revert() (gas: 153716) @@ -219,18 +219,18 @@ EVM2EVMOnRamp_forwardFromRouter:test_InvalidAddressEncodePacked_Revert() (gas: 3 EVM2EVMOnRamp_forwardFromRouter:test_InvalidAddress_Revert() (gas: 38497) EVM2EVMOnRamp_forwardFromRouter:test_InvalidChainSelector_Revert() (gas: 25534) EVM2EVMOnRamp_forwardFromRouter:test_InvalidExtraArgsTag_Revert() (gas: 25320) -EVM2EVMOnRamp_forwardFromRouter:test_MaxCapacityExceeded_Revert() (gas: 86138) +EVM2EVMOnRamp_forwardFromRouter:test_MaxCapacityExceeded_Revert() (gas: 83951) EVM2EVMOnRamp_forwardFromRouter:test_MaxFeeBalanceReached_Revert() (gas: 36514) EVM2EVMOnRamp_forwardFromRouter:test_MessageGasLimitTooHigh_Revert() (gas: 29078) EVM2EVMOnRamp_forwardFromRouter:test_MessageTooLarge_Revert() (gas: 107622) EVM2EVMOnRamp_forwardFromRouter:test_OriginalSender_Revert() (gas: 22724) -EVM2EVMOnRamp_forwardFromRouter:test_OverValueWithARLOff_Success() (gas: 227439) +EVM2EVMOnRamp_forwardFromRouter:test_OverValueWithARLOff_Success() (gas: 225252) EVM2EVMOnRamp_forwardFromRouter:test_Paused_Revert() (gas: 53150) EVM2EVMOnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 25559) -EVM2EVMOnRamp_forwardFromRouter:test_PriceNotFoundForToken_Revert() (gas: 59478) +EVM2EVMOnRamp_forwardFromRouter:test_PriceNotFoundForToken_Revert() (gas: 57291) EVM2EVMOnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 179442) EVM2EVMOnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 177724) -EVM2EVMOnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 137333) +EVM2EVMOnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 132585) EVM2EVMOnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3772676) EVM2EVMOnRamp_forwardFromRouter:test_TooManyTokens_Revert() (gas: 30244) EVM2EVMOnRamp_forwardFromRouter:test_Unhealthy_Revert() (gas: 43342) @@ -238,29 +238,29 @@ EVM2EVMOnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 109440) EVM2EVMOnRamp_forwardFromRouter:test_ZeroAddressReceiver_Revert() (gas: 313095) EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_ShouldStoreLinkFees_Success() (gas: 112430) EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 72269) -EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_correctSourceTokenData_Success() (gas: 713846) +EVM2EVMOnRamp_forwardFromRouter:test_forwardFromRouter_correctSourceTokenData_Success() (gas: 711472) EVM2EVMOnRamp_forwardFromRouter_upgrade:test_V2NonceNewSenderStartsAtZero_Success() (gas: 147709) EVM2EVMOnRamp_forwardFromRouter_upgrade:test_V2NonceStartsAtV1Nonce_Success() (gas: 190616) EVM2EVMOnRamp_forwardFromRouter_upgrade:test_V2SenderNoncesReadsPreviousRamp_Success() (gas: 121404) EVM2EVMOnRamp_forwardFromRouter_upgrade:test_V2_Success() (gas: 95376) EVM2EVMOnRamp_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 20568) EVM2EVMOnRamp_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20936) -EVM2EVMOnRamp_getFee:test_EmptyMessage_Success() (gas: 78401) -EVM2EVMOnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 81897) -EVM2EVMOnRamp_getFee:test_HighGasMessage_Success() (gas: 234249) +EVM2EVMOnRamp_getFee:test_EmptyMessage_Success() (gas: 74027) +EVM2EVMOnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 79523) +EVM2EVMOnRamp_getFee:test_HighGasMessage_Success() (gas: 229875) EVM2EVMOnRamp_getFee:test_MessageGasLimitTooHigh_Revert() (gas: 16733) EVM2EVMOnRamp_getFee:test_MessageTooLarge_Revert() (gas: 95283) -EVM2EVMOnRamp_getFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 160123) +EVM2EVMOnRamp_getFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 152627) EVM2EVMOnRamp_getFee:test_NotAFeeToken_Revert() (gas: 24113) -EVM2EVMOnRamp_getFee:test_SingleTokenMessage_Success() (gas: 118345) +EVM2EVMOnRamp_getFee:test_SingleTokenMessage_Success() (gas: 113597) EVM2EVMOnRamp_getFee:test_TooManyTokens_Revert() (gas: 19914) -EVM2EVMOnRamp_getFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 64726) +EVM2EVMOnRamp_getFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 62539) EVM2EVMOnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10460) EVM2EVMOnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35195) -EVM2EVMOnRamp_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 45198) +EVM2EVMOnRamp_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 43011) EVM2EVMOnRamp_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 33079) EVM2EVMOnRamp_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 28356) -EVM2EVMOnRamp_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 126939) +EVM2EVMOnRamp_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 121817) EVM2EVMOnRamp_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 15250) EVM2EVMOnRamp_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 28164) EVM2EVMOnRamp_getTokenTransferCost:test_UnsupportedToken_Revert() (gas: 21260) @@ -338,59 +338,59 @@ FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeConfig_Su FeeQuoter_applyTokenTransferFeeConfigUpdates:test_ApplyTokenTransferFeeZeroInput() (gas: 13089) FeeQuoter_applyTokenTransferFeeConfigUpdates:test_InvalidDestBytesOverhead_Revert() (gas: 17071) FeeQuoter_applyTokenTransferFeeConfigUpdates:test_OnlyCallableByOwnerOrAdmin_Revert() (gas: 12246) -FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106820) -FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 111170) -FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 111223) -FeeQuoter_constructor:test_Setup_Success() (gas: 5205186) -FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 72751) -FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 30981) +FeeQuoter_constructor:test_InvalidLinkTokenEqZeroAddress_Revert() (gas: 106850) +FeeQuoter_constructor:test_InvalidMaxFeeJuelsPerMsg_Revert() (gas: 111200) +FeeQuoter_constructor:test_InvalidStalenessThreshold_Revert() (gas: 111253) +FeeQuoter_constructor:test_Setup_Success() (gas: 5219649) +FeeQuoter_convertTokenAmount:test_ConvertTokenAmount_Success() (gas: 68377) +FeeQuoter_convertTokenAmount:test_LinkTokenNotSupported_Revert() (gas: 29040) FeeQuoter_getDataAvailabilityCost:test_EmptyMessageCalculatesDataAvailabilityCost_Success() (gas: 94441) FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCostUnsupportedDestChainSelector_Success() (gas: 14650) FeeQuoter_getDataAvailabilityCost:test_SimpleMessageCalculatesDataAvailabilityCost_Success() (gas: 20482) -FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 70464) +FeeQuoter_getTokenAndGasPrices:test_GetFeeTokenAndGasPrices_Success() (gas: 68277) FeeQuoter_getTokenAndGasPrices:test_StaleGasPrice_Revert() (gas: 16838) FeeQuoter_getTokenAndGasPrices:test_UnsupportedChain_Revert() (gas: 16140) -FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 45771) -FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 62227) -FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 84818) -FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 41281) +FeeQuoter_getTokenAndGasPrices:test_ZeroGasPrice_Success() (gas: 43584) +FeeQuoter_getTokenPrice:test_GetTokenPriceFromFeed_Success() (gas: 66117) +FeeQuoter_getTokenPrices:test_GetTokenPrices_Success() (gas: 78256) +FeeQuoter_getTokenTransferCost:test_CustomTokenBpsFee_Success() (gas: 39094) FeeQuoter_getTokenTransferCost:test_FeeTokenBpsFee_Success() (gas: 34730) FeeQuoter_getTokenTransferCost:test_LargeTokenTransferChargesMaxFeeAndGas_Success() (gas: 27804) -FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 101864) +FeeQuoter_getTokenTransferCost:test_MixedTokenTransferFee_Success() (gas: 96739) FeeQuoter_getTokenTransferCost:test_NoTokenTransferChargesZeroFee_Success() (gas: 20390) FeeQuoter_getTokenTransferCost:test_SmallTokenTransferChargesMinFeeAndGas_Success() (gas: 27679) FeeQuoter_getTokenTransferCost:test_ZeroAmountTokenTransferChargesMinFeeAndGas_Success() (gas: 27635) FeeQuoter_getTokenTransferCost:test_ZeroFeeConfigChargesMinFee_Success() (gas: 40064) FeeQuoter_getTokenTransferCost:test_getTokenTransferCost_selfServeUsesDefaults_Success() (gas: 29347) FeeQuoter_getValidatedFee:test_DestinationChainNotEnabled_Revert() (gas: 18210) -FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 86123) -FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 54405) -FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 242541) +FeeQuoter_getValidatedFee:test_EmptyMessage_Success() (gas: 81749) +FeeQuoter_getValidatedFee:test_EnforceOutOfOrder_Revert() (gas: 52218) +FeeQuoter_getValidatedFee:test_HighGasMessage_Success() (gas: 238167) FeeQuoter_getValidatedFee:test_InvalidEVMAddress_Revert() (gas: 22420) -FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 31833) +FeeQuoter_getValidatedFee:test_MessageGasLimitTooHigh_Revert() (gas: 29646) FeeQuoter_getValidatedFee:test_MessageTooLarge_Revert() (gas: 100163) -FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 148076) +FeeQuoter_getValidatedFee:test_MessageWithDataAndTokenTransfer_Success() (gas: 140577) FeeQuoter_getValidatedFee:test_NotAFeeToken_Revert() (gas: 21073) -FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 117032) +FeeQuoter_getValidatedFee:test_SingleTokenMessage_Success() (gas: 112282) FeeQuoter_getValidatedFee:test_TooManyTokens_Revert() (gas: 22562) -FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 64442) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 2076322) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 2076280) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 2056399) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 2076054) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 2076258) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 2076070) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 62001) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 61881) -FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 61042) -FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 2075757) -FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 61569) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 109117) -FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 13863) -FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 2074434) +FeeQuoter_getValidatedFee:test_ZeroDataAvailabilityMultiplier_Success() (gas: 62255) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Above18Decimals_Success() (gas: 2078733) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedErc20Below18Decimals_Success() (gas: 2078691) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt0Decimals_Success() (gas: 2058810) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFeedAt18Decimals_Success() (gas: 2078465) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedFlippedDecimals_Success() (gas: 2078669) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedMaxInt224Value_Success() (gas: 2078481) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeedOverStalenessPeriod_Success() (gas: 64412) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPriceFromFeed_Success() (gas: 64292) +FeeQuoter_getValidatedTokenPrice:test_GetValidatedTokenPrice_Success() (gas: 58855) +FeeQuoter_getValidatedTokenPrice:test_OverflowFeedPrice_Revert() (gas: 2078166) +FeeQuoter_getValidatedTokenPrice:test_StaleFeeToken_Success() (gas: 61692) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupportedFeed_Revert() (gas: 116268) +FeeQuoter_getValidatedTokenPrice:test_TokenNotSupported_Revert() (gas: 13986) +FeeQuoter_getValidatedTokenPrice:test_UnderflowFeedPrice_Revert() (gas: 2076843) FeeQuoter_onReport:test_OnReport_StaleUpdate_Revert() (gas: 43336) FeeQuoter_onReport:test_onReport_InvalidForwarder_Reverts() (gas: 23306) -FeeQuoter_onReport:test_onReport_Success() (gas: 80582) +FeeQuoter_onReport:test_onReport_Success() (gas: 79834) FeeQuoter_onReport:test_onReport_UnsupportedToken_Reverts() (gas: 26692) FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsDefault_Success() (gas: 17191) FeeQuoter_parseEVMExtraArgsFromBytes:test_EVMExtraArgsEnforceOutOfOrder_Revert() (gas: 21302) @@ -402,17 +402,17 @@ FeeQuoter_processMessageArgs:test_InvalidExtraArgs_Revert() (gas: 18339) FeeQuoter_processMessageArgs:test_MalformedEVMExtraArgs_Revert() (gas: 18885) FeeQuoter_processMessageArgs:test_MessageFeeTooHigh_Revert() (gas: 16404) FeeQuoter_processMessageArgs:test_WitEVMExtraArgsV2_Success() (gas: 26277) -FeeQuoter_processMessageArgs:test_WithConvertedTokenAmount_Success() (gas: 32443) +FeeQuoter_processMessageArgs:test_WithConvertedTokenAmount_Success() (gas: 27695) FeeQuoter_processMessageArgs:test_WithEVMExtraArgsV1_Success() (gas: 25889) FeeQuoter_processMessageArgs:test_WithEmptyEVMExtraArgs_Success() (gas: 23704) FeeQuoter_processMessageArgs:test_WithLinkTokenAmount_Success() (gas: 17353) FeeQuoter_updatePrices:test_OnlyCallableByUpdater_Revert() (gas: 12114) FeeQuoter_updatePrices:test_OnlyGasPrice_Success() (gas: 23599) -FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 30615) -FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 76009) -FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 151345) +FeeQuoter_updatePrices:test_OnlyTokenPrice_Success() (gas: 28428) +FeeQuoter_updatePrices:test_UpdatableByAuthorizedCaller_Success() (gas: 74260) +FeeQuoter_updatePrices:test_UpdateMultiplePrices_Success() (gas: 144784) FeeQuoter_updateTokenPriceFeeds:test_FeedNotUpdated() (gas: 50523) -FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 63574) +FeeQuoter_updateTokenPriceFeeds:test_FeedUnset_Success() (gas: 63200) FeeQuoter_updateTokenPriceFeeds:test_FeedUpdatedByNonOwner_Revert() (gas: 19938) FeeQuoter_updateTokenPriceFeeds:test_MultipleFeedUpdate_Success() (gas: 88920) FeeQuoter_updateTokenPriceFeeds:test_SingleFeedUpdate_Success() (gas: 50795) @@ -498,27 +498,27 @@ MultiAggregateRateLimiter_constructor:test_Constructor_Success() (gas: 2166413) MultiAggregateRateLimiter_getTokenBucket:test_GetTokenBucket_Success() (gas: 30404) MultiAggregateRateLimiter_getTokenBucket:test_Refill_Success() (gas: 47673) MultiAggregateRateLimiter_getTokenBucket:test_TimeUnderflow_Revert() (gas: 15863) -MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 19646) -MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21231) +MultiAggregateRateLimiter_getTokenValue:test_GetTokenValue_Success() (gas: 17459) +MultiAggregateRateLimiter_getTokenValue:test_NoTokenPrice_Reverts() (gas: 21354) MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 14533) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 214200) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60457) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 209639) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 58270) MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 17599) MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitDisabled_Success() (gas: 45006) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 50540) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 78784) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 312459) -MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 54732) -MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 1073667462) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitExceeded_Revert() (gas: 46166) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithRateLimitReset_Success() (gas: 76036) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 307711) +MultiAggregateRateLimiter_onInboundMessage:test_ValidateMessageWithTokens_Success() (gas: 50358) +MultiAggregateRateLimiter_onOutboundMessage:test_RateLimitValueDifferentLanes_Success() (gas: 1073669836) MultiAggregateRateLimiter_onOutboundMessage:test_ValidateMessageWithNoTokens_Success() (gas: 19158) MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageFromUnauthorizedCaller_Revert() (gas: 15829) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 214044) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 62240) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDifferentTokensOnDifferentChains_Success() (gas: 209483) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithDisabledRateLimitToken_Success() (gas: 60053) MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitDisabled_Success() (gas: 46818) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 52361) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 80041) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 312529) -MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 56537) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitExceeded_Revert() (gas: 47987) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithRateLimitReset_Success() (gas: 77293) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokensOnDifferentChains_Success() (gas: 307781) +MultiAggregateRateLimiter_onOutboundMessage:test_onOutboundMessage_ValidateMessageWithTokens_Success() (gas: 52163) MultiAggregateRateLimiter_setFeeQuoter:test_OnlyOwner_Revert() (gas: 11325) MultiAggregateRateLimiter_setFeeQuoter:test_Owner_Success() (gas: 19072) MultiAggregateRateLimiter_setFeeQuoter:test_ZeroAddress_Revert() (gas: 10597) @@ -559,8 +559,8 @@ MultiOCR3Base_transmit:test_UnAuthorizedTransmitter_Revert() (gas: 24189) MultiOCR3Base_transmit:test_UnauthorizedSigner_Revert() (gas: 61131) MultiOCR3Base_transmit:test_UnconfiguredPlugin_Revert() (gas: 39888) MultiOCR3Base_transmit:test_ZeroSignatures_Revert() (gas: 32971) -MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 411709) -MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1526826) +MultiOnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 409147) +MultiRampsE2E:test_E2E_3MessagesMMultiOffRampSuccess_gas() (gas: 1526265) NonceManager_NonceIncrementation:test_getIncrementedOutboundNonce_Success() (gas: 37916) NonceManager_NonceIncrementation:test_incrementInboundNonce_Skip() (gas: 23709) NonceManager_NonceIncrementation:test_incrementInboundNonce_Success() (gas: 38799) @@ -640,10 +640,10 @@ OffRamp_commit:test_ReportAndPriceUpdate_Success() (gas: 164945) OffRamp_commit:test_ReportOnlyRootSuccess_gas() (gas: 139934) OffRamp_commit:test_RootAlreadyCommitted_Revert() (gas: 141925) OffRamp_commit:test_SourceChainNotEnabled_Revert() (gas: 59208) -OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 235331) +OffRamp_commit:test_StaleReportWithRoot_Success() (gas: 232957) OffRamp_commit:test_UnauthorizedTransmitter_Revert() (gas: 121451) OffRamp_commit:test_Unhealthy_Revert() (gas: 57938) -OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 208966) +OffRamp_commit:test_ValidPriceUpdateThenStaleReportWithRoot_Success() (gas: 206779) OffRamp_commit:test_ZeroEpochAndRound_Revert() (gas: 51273) OffRamp_constructor:test_Constructor_Success() (gas: 6244332) OffRamp_constructor:test_SourceChainSelector_Revert() (gas: 136075) @@ -742,7 +742,7 @@ OffRamp_trialExecute:test_RateLimitError_Success() (gas: 225140) OffRamp_trialExecute:test_TokenHandlingErrorIsCaught_Success() (gas: 233762) OffRamp_trialExecute:test_TokenPoolIsNotAContract_Success() (gas: 310735) OffRamp_trialExecute:test_trialExecute_Success() (gas: 283386) -OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 390910) +OnRampTokenPoolReentrancy:test_OnRampTokenPoolReentrancy_Success() (gas: 387975) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_InvalidAllowListRequestDisabledAllowListWithAdds() (gas: 17746) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Revert() (gas: 66535) OnRamp_applyAllowListUpdates:test_applyAllowListUpdates_Success() (gas: 323600) @@ -770,17 +770,17 @@ OnRamp_forwardFromRouter:test_Permissions_Revert() (gas: 18278) OnRamp_forwardFromRouter:test_ShouldIncrementNonceOnlyOnOrdered_Success() (gas: 184562) OnRamp_forwardFromRouter:test_ShouldIncrementSeqNumAndNonce_Success() (gas: 210880) OnRamp_forwardFromRouter:test_ShouldStoreLinkFees() (gas: 124838) -OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 146211) +OnRamp_forwardFromRouter:test_ShouldStoreNonLinkFees() (gas: 141462) OnRamp_forwardFromRouter:test_SourceTokenDataTooLarge_Revert() (gas: 3829289) OnRamp_forwardFromRouter:test_UnAllowedOriginalSender_Revert() (gas: 18714) OnRamp_forwardFromRouter:test_UnsupportedToken_Revert() (gas: 110907) OnRamp_forwardFromRouter:test_forwardFromRouter_UnsupportedToken_Revert() (gas: 76229) OnRamp_forwardFromRouter:test_forwardFromRouter_WithValidation_Success() (gas: 281171) -OnRamp_getFee:test_EmptyMessage_Success() (gas: 102470) -OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 66390) -OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 87796) +OnRamp_getFee:test_EmptyMessage_Success() (gas: 97722) +OnRamp_getFee:test_EnforceOutOfOrder_Revert() (gas: 64203) +OnRamp_getFee:test_GetFeeOfZeroForTokenMessage_Success() (gas: 85422) OnRamp_getFee:test_NotAFeeTokenButPricedToken_Revert() (gas: 34972) -OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 117839) +OnRamp_getFee:test_SingleTokenMessage_Success() (gas: 112713) OnRamp_getFee:test_Unhealthy_Revert() (gas: 17009) OnRamp_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10438) OnRamp_getTokenPool:test_GetTokenPool_Success() (gas: 35204) @@ -790,11 +790,11 @@ OnRamp_setDynamicConfig:test_SetConfigInvalidConfig_Revert() (gas: 11377) OnRamp_setDynamicConfig:test_SetConfigOnlyOwner_Revert() (gas: 16409) OnRamp_setDynamicConfig:test_SetDynamicConfig_Success() (gas: 55330) OnRamp_withdrawFeeTokens:test_WithdrawFeeTokens_Success() (gas: 97235) -PingPong_ccipReceive:test_CcipReceive_Success() (gas: 152765) +PingPong_ccipReceive:test_CcipReceive_Success() (gas: 150578) PingPong_plumbing:test_OutOfOrderExecution_Success() (gas: 20280) PingPong_plumbing:test_Pausing_Success() (gas: 17780) -PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 163361) -PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 182770) +PingPong_startPingPong:test_StartPingPong_With_OOO_Success() (gas: 160987) +PingPong_startPingPong:test_StartPingPong_With_Sequenced_Ordered_Success() (gas: 180396) RMNHome:test() (gas: 186) RMN_constructor:test_Constructor_Success() (gas: 48874) RMN_getRecordedCurseRelatedOps:test_OpsPostDeployment() (gas: 19690) @@ -875,24 +875,24 @@ Router_applyRampUpdates:test_OffRampMismatch_Revert() (gas: 89306) Router_applyRampUpdates:test_OffRampUpdatesWithRouting() (gas: 10648972) Router_applyRampUpdates:test_OnRampDisable() (gas: 55971) Router_applyRampUpdates:test_OnlyOwner_Revert() (gas: 12317) -Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 114039) -Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 201534) -Router_ccipSend:test_CCIPSendNativeFeeNoTokenSuccess_gas() (gas: 128767) -Router_ccipSend:test_CCIPSendNativeFeeOneTokenSuccess_gas() (gas: 216264) -Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 66368) +Router_ccipSend:test_CCIPSendLinkFeeNoTokenSuccess_gas() (gas: 113852) +Router_ccipSend:test_CCIPSendLinkFeeOneTokenSuccess_gas() (gas: 201347) +Router_ccipSend:test_CCIPSendNativeFeeNoTokenSuccess_gas() (gas: 126206) +Router_ccipSend:test_CCIPSendNativeFeeOneTokenSuccess_gas() (gas: 213703) +Router_ccipSend:test_FeeTokenAmountTooLow_Revert() (gas: 64181) Router_ccipSend:test_InvalidMsgValue() (gas: 32008) -Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 68827) -Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 173903) -Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 56109) -Router_ccipSend:test_NativeFeeToken_Success() (gas: 172497) -Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 242837) +Router_ccipSend:test_NativeFeeTokenInsufficientValue() (gas: 66640) +Router_ccipSend:test_NativeFeeTokenOverpay_Success() (gas: 169155) +Router_ccipSend:test_NativeFeeTokenZeroValue() (gas: 53922) +Router_ccipSend:test_NativeFeeToken_Success() (gas: 167749) +Router_ccipSend:test_NonLinkFeeToken_Success() (gas: 238276) Router_ccipSend:test_UnsupportedDestinationChain_Revert() (gas: 24761) Router_ccipSend:test_WhenNotHealthy_Revert() (gas: 44736) -Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 174755) -Router_ccipSend:test_ZeroFeeAndGasPrice_Success() (gas: 245046) +Router_ccipSend:test_WrappedNativeFeeToken_Success() (gas: 170007) +Router_ccipSend:test_ZeroFeeAndGasPrice_Success() (gas: 240298) Router_constructor:test_Constructor_Success() (gas: 13070) Router_getArmProxy:test_getArmProxy() (gas: 10561) -Router_getFee:test_GetFeeSupportedChain_Success() (gas: 46536) +Router_getFee:test_GetFeeSupportedChain_Success() (gas: 44349) Router_getFee:test_UnsupportedDestinationChain_Revert() (gas: 17144) Router_getSupportedTokens:test_GetSupportedTokens_Revert() (gas: 10460) Router_recoverTokens:test_RecoverTokensInvalidRecipient_Revert() (gas: 11316) @@ -907,7 +907,7 @@ Router_routeMessage:test_OnlyOffRamp_Revert() (gas: 25140) Router_routeMessage:test_WhenNotHealthy_Revert() (gas: 44742) Router_setWrappedNative:test_OnlyOwner_Revert() (gas: 10986) SelfFundedPingPong_ccipReceive:test_FundingIfNotANop_Revert() (gas: 55572) -SelfFundedPingPong_ccipReceive:test_Funding_Success() (gas: 420162) +SelfFundedPingPong_ccipReceive:test_Funding_Success() (gas: 417040) SelfFundedPingPong_setCountIncrBeforeFunding:test_setCountIncrBeforeFunding() (gas: 20169) TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_OnlyPendingAdministrator_Revert() (gas: 51109) TokenAdminRegistry_acceptAdminRole:test_acceptAdminRole_Success() (gas: 43956) @@ -935,8 +935,8 @@ TokenPoolAndProxy:test_lockOrBurn_burnMint_Success() (gas: 5945631) TokenPoolAndProxy:test_lockOrBurn_burnWithFromMint_Success() (gas: 5977107) TokenPoolAndProxy:test_lockOrBurn_lockRelease_Success() (gas: 6179838) TokenPoolAndProxy:test_setPreviousPool_Success() (gas: 3334200) -TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6792268) -TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 7024950) +TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_2() (gas: 6789707) +TokenPoolAndProxyMigration:test_tokenPoolMigration_Success_1_4() (gas: 7022389) TokenPoolWithAllowList_applyAllowListUpdates:test_AllowListNotEnabled_Revert() (gas: 2100002) TokenPoolWithAllowList_applyAllowListUpdates:test_OnlyOwner_Revert() (gas: 12101) TokenPoolWithAllowList_applyAllowListUpdates:test_SetAllowListSkipsZero_Success() (gas: 23464) @@ -965,16 +965,16 @@ TokenPool_setRemotePool:test_setRemotePool_NonExistentChain_Reverts() (gas: 1565 TokenPool_setRemotePool:test_setRemotePool_OnlyOwner_Reverts() (gas: 13201) TokenPool_setRemotePool:test_setRemotePool_Success() (gas: 282083) TokenProxy_ccipSend:test_CcipSendGasShouldBeZero_Revert() (gas: 17121) -TokenProxy_ccipSend:test_CcipSendInsufficientAllowance_Revert() (gas: 136330) +TokenProxy_ccipSend:test_CcipSendInsufficientAllowance_Revert() (gas: 134143) TokenProxy_ccipSend:test_CcipSendInvalidToken_Revert() (gas: 15931) -TokenProxy_ccipSend:test_CcipSendNative_Success() (gas: 245419) +TokenProxy_ccipSend:test_CcipSendNative_Success() (gas: 242858) TokenProxy_ccipSend:test_CcipSendNoDataAllowed_Revert() (gas: 16315) -TokenProxy_ccipSend:test_CcipSend_Success() (gas: 261760) +TokenProxy_ccipSend:test_CcipSend_Success() (gas: 261460) TokenProxy_constructor:test_Constructor() (gas: 13812) TokenProxy_getFee:test_GetFeeGasShouldBeZero_Revert() (gas: 16839) TokenProxy_getFee:test_GetFeeInvalidToken_Revert() (gas: 12670) TokenProxy_getFee:test_GetFeeNoDataAllowed_Revert() (gas: 15864) -TokenProxy_getFee:test_GetFee_Success() (gas: 86882) +TokenProxy_getFee:test_GetFee_Success() (gas: 84508) USDCTokenPool__validateMessage:test_ValidateInvalidMessage_Revert() (gas: 25407) USDCTokenPool_lockOrBurn:test_CallerIsNotARampOnRouter_Revert() (gas: 35364) USDCTokenPool_lockOrBurn:test_LockOrBurnWithAllowList_Revert() (gas: 30106) diff --git a/contracts/src/v0.8/ccip/FeeQuoter.sol b/contracts/src/v0.8/ccip/FeeQuoter.sol index aa6399d544..944498007f 100644 --- a/contracts/src/v0.8/ccip/FeeQuoter.sol +++ b/contracts/src/v0.8/ccip/FeeQuoter.sol @@ -232,11 +232,22 @@ contract FeeQuoter is AuthorizedCallers, IFeeQuoter, ITypeAndVersion, IReceiver, /// @inheritdoc IPriceRegistry function getTokenPrice(address token) public view override returns (Internal.TimestampedPackedUint224 memory) { + Internal.TimestampedPackedUint224 memory tokenPrice = s_usdPerToken[token]; + + // If the token price is not stale, return it + if (block.timestamp - tokenPrice.timestamp < i_stalenessThreshold) { + return tokenPrice; + } + IFeeQuoter.TokenPriceFeedConfig memory priceFeedConfig = s_usdPriceFeedsPerToken[token]; + + // If the token price feed is not set, return the stale price if (priceFeedConfig.dataFeedAddress == address(0)) { - return s_usdPerToken[token]; + return tokenPrice; } + // If the token price feed is set, return the price from the feed + // The price feed is the fallback because we do not expect it to be the default source due to the gas cost of reading from it return _getTokenPriceFromDataFeed(priceFeedConfig); } diff --git a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol index f6dc8c25bf..a9c7679ac2 100644 --- a/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol +++ b/contracts/src/v0.8/ccip/test/feeQuoter/FeeQuoter.t.sol @@ -172,8 +172,8 @@ contract FeeQuoter_getTokenPrice is FeeQuoterSetup { function test_GetTokenPriceFromFeed_Success() public { uint256 originalTimestampValue = block.timestamp; - // Below staleness threshold - vm.warp(originalTimestampValue + 1 hours); + // Above staleness threshold + vm.warp(originalTimestampValue + s_feeQuoter.getStaticConfig().stalenessThreshold + 1); address sourceToken = _initialiseSingleTokenPriceFeed(); Internal.TimestampedPackedUint224 memory tokenPriceAnswer = s_feeQuoter.getTokenPrice(sourceToken); @@ -349,6 +349,13 @@ contract FeeQuoter_getValidatedTokenPrice is FeeQuoterSetup { function test_TokenNotSupportedFeed_Revert() public { address sourceToken = _initialiseSingleTokenPriceFeed(); MockV3Aggregator(s_dataFeedByToken[sourceToken]).updateAnswer(0); + Internal.PriceUpdates memory priceUpdates = Internal.PriceUpdates({ + tokenPriceUpdates: new Internal.TokenPriceUpdate[](1), + gasPriceUpdates: new Internal.GasPriceUpdate[](0) + }); + priceUpdates.tokenPriceUpdates[0] = Internal.TokenPriceUpdate({sourceToken: sourceToken, usdPerToken: 0}); + + s_feeQuoter.updatePrices(priceUpdates); vm.expectRevert(abi.encodeWithSelector(FeeQuoter.TokenNotSupported.selector, sourceToken)); s_feeQuoter.getValidatedTokenPrice(sourceToken); diff --git a/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go b/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go index e4c17b1886..8c7822c6c7 100644 --- a/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go +++ b/core/gethwrappers/ccip/generated/fee_quoter/fee_quoter.go @@ -155,7 +155,7 @@ type KeystoneFeedsPermissionHandlerPermission struct { var FeeQuoterMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"staticConfig\",\"type\":\"tuple\"},{\"internalType\":\"address[]\",\"name\":\"priceUpdaters\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structIFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeeds\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"chain\",\"type\":\"uint64\"}],\"name\":\"ChainNotSupported\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DataFeedValueOutOfUint224Range\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"DestinationChainNotEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExtraArgOutOfOrderExecutionMustBeTrue\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"FeeTokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"}],\"name\":\"InvalidDestBytesOverhead\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"InvalidDestChainConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"encodedAddress\",\"type\":\"bytes\"}],\"name\":\"InvalidEVMAddress\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidStaticConfig\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint256\"}],\"name\":\"MessageFeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MessageGasLimitTooHigh\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"maxSize\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"actualSize\",\"type\":\"uint256\"}],\"name\":\"MessageTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"}],\"name\":\"ReportForwarderUnauthorized\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SourceTokenDataTooLarge\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"threshold\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"timePassed\",\"type\":\"uint256\"}],\"name\":\"StaleGasPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feedTimestamp\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"storedTimeStamp\",\"type\":\"uint256\"}],\"name\":\"StaleKeystoneUpdate\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenNotSupported\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"UnauthorizedCaller\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsupportedNumberOfTokens\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"caller\",\"type\":\"address\"}],\"name\":\"AuthorizedCallerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"name\":\"DestChainConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"}],\"name\":\"FeeTokenRemoved\",\"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\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"name\":\"PremiumMultiplierWeiPerEthUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"indexed\":false,\"internalType\":\"structIFeeQuoter.TokenPriceFeedConfig\",\"name\":\"priceFeedConfig\",\"type\":\"tuple\"}],\"name\":\"PriceFeedPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"reportId\",\"type\":\"bytes32\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission\",\"name\":\"permission\",\"type\":\"tuple\"}],\"name\":\"ReportPermissionSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"TokenTransferFeeConfigDeleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"indexed\":false,\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"name\":\"TokenTransferFeeConfigUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerTokenUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"destChain\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"name\":\"UsdPerUnitGasUpdated\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FEE_BASE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"KEYSTONE_PRICE_DECIMALS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address[]\",\"name\":\"addedCallers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"removedCallers\",\"type\":\"address[]\"}],\"internalType\":\"structAuthorizedCallers.AuthorizedCallerArgs\",\"name\":\"authorizedCallerArgs\",\"type\":\"tuple\"}],\"name\":\"applyAuthorizedCallerUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"destChainConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.DestChainConfigArgs[]\",\"name\":\"destChainConfigArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyDestChainConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"feeTokensToAdd\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"feeTokensToRemove\",\"type\":\"address[]\"}],\"name\":\"applyFeeTokensUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"internalType\":\"structFeeQuoter.PremiumMultiplierWeiPerEthArgs[]\",\"name\":\"premiumMultiplierWeiPerEthArgs\",\"type\":\"tuple[]\"}],\"name\":\"applyPremiumMultiplierWeiPerEthUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigSingleTokenArgs[]\",\"name\":\"tokenTransferFeeConfigs\",\"type\":\"tuple[]\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigArgs[]\",\"name\":\"tokenTransferFeeConfigArgs\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfigRemoveArgs[]\",\"name\":\"tokensToUseDefaultFeeConfigs\",\"type\":\"tuple[]\"}],\"name\":\"applyTokenTransferFeeConfigUpdates\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"fromToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fromTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"toToken\",\"type\":\"address\"}],\"name\":\"convertTokenAmount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllAuthorizedCallers\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestChainConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"},{\"internalType\":\"uint16\",\"name\":\"maxNumberOfTokensPerMsg\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxDataBytes\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerMsgGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerPayloadByte\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destDataAvailabilityOverheadGas\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"destGasPerDataAvailabilityByte\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"destDataAvailabilityMultiplierBps\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"defaultTokenFeeUSDCents\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"defaultTokenDestGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"defaultTxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"gasMultiplierWeiPerEth\",\"type\":\"uint64\"},{\"internalType\":\"uint32\",\"name\":\"networkFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"enforceOutOfOrder\",\"type\":\"bool\"},{\"internalType\":\"bytes4\",\"name\":\"chainFamilySelector\",\"type\":\"bytes4\"}],\"internalType\":\"structFeeQuoter.DestChainConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getDestinationChainGasPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getFeeTokens\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getPremiumMultiplierWeiPerEth\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"premiumMultiplierWeiPerEth\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStaticConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint96\",\"name\":\"maxFeeJuelsPerMsg\",\"type\":\"uint96\"},{\"internalType\":\"address\",\"name\":\"linkToken\",\"type\":\"address\"},{\"internalType\":\"uint32\",\"name\":\"stalenessThreshold\",\"type\":\"uint32\"}],\"internalType\":\"structFeeQuoter.StaticConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"}],\"name\":\"getTokenAndGasPrices\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"tokenPrice\",\"type\":\"uint224\"},{\"internalType\":\"uint224\",\"name\":\"gasPriceValue\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPrice\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenPriceFeedConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structIFeeQuoter.TokenPriceFeedConfig\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"getTokenPrices\",\"outputs\":[{\"components\":[{\"internalType\":\"uint224\",\"name\":\"value\",\"type\":\"uint224\"},{\"internalType\":\"uint32\",\"name\":\"timestamp\",\"type\":\"uint32\"}],\"internalType\":\"structInternal.TimestampedPackedUint224[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getTokenTransferFeeConfig\",\"outputs\":[{\"components\":[{\"internalType\":\"uint32\",\"name\":\"minFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxFeeUSDCents\",\"type\":\"uint32\"},{\"internalType\":\"uint16\",\"name\":\"deciBps\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"destGasOverhead\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"destBytesOverhead\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"isEnabled\",\"type\":\"bool\"}],\"internalType\":\"structFeeQuoter.TokenTransferFeeConfig\",\"name\":\"tokenTransferFeeConfig\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"components\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"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\":\"tokenAmounts\",\"type\":\"tuple[]\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structClient.EVM2AnyMessage\",\"name\":\"message\",\"type\":\"tuple\"}],\"name\":\"getValidatedFee\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getValidatedTokenPrice\",\"outputs\":[{\"internalType\":\"uint224\",\"name\":\"\",\"type\":\"uint224\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"metadata\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"report\",\"type\":\"bytes\"}],\"name\":\"onReport\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"feeToken\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"feeTokenAmount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"name\":\"processMessageArgs\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"msgFeeJuels\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isOutOfOrderExecution\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"convertedExtraArgs\",\"type\":\"bytes\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"destChainSelector\",\"type\":\"uint64\"},{\"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\":\"rampTokenAmounts\",\"type\":\"tuple[]\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"internalType\":\"structClient.EVMTokenAmount[]\",\"name\":\"sourceTokenAmounts\",\"type\":\"tuple[]\"}],\"name\":\"processPoolReturnData\",\"outputs\":[{\"internalType\":\"bytes[]\",\"name\":\"destExecDataPerToken\",\"type\":\"bytes[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"forwarder\",\"type\":\"address\"},{\"internalType\":\"bytes10\",\"name\":\"workflowName\",\"type\":\"bytes10\"},{\"internalType\":\"bytes2\",\"name\":\"reportName\",\"type\":\"bytes2\"},{\"internalType\":\"address\",\"name\":\"workflowOwner\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isAllowed\",\"type\":\"bool\"}],\"internalType\":\"structKeystoneFeedsPermissionHandler.Permission[]\",\"name\":\"permissions\",\"type\":\"tuple[]\"}],\"name\":\"setReportPermissions\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"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\"}],\"name\":\"updatePrices\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"sourceToken\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"dataFeedAddress\",\"type\":\"address\"},{\"internalType\":\"uint8\",\"name\":\"tokenDecimals\",\"type\":\"uint8\"}],\"internalType\":\"structIFeeQuoter.TokenPriceFeedConfig\",\"name\":\"feedConfig\",\"type\":\"tuple\"}],\"internalType\":\"structFeeQuoter.TokenPriceFeedUpdate[]\",\"name\":\"tokenPriceFeedUpdates\",\"type\":\"tuple[]\"}],\"name\":\"updateTokenPriceFeeds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60e06040523480156200001157600080fd5b506040516200775438038062007754833981016040819052620000349162001834565b8533806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000207565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620002b2565b5060208701516001600160a01b0316158062000112575086516001600160601b0316155b80620001265750604087015163ffffffff16155b15620001455760405163d794ef9560e01b815260040160405180910390fd5b6020878101516001600160a01b031660a05287516001600160601b031660805260408089015163ffffffff1660c05280516000815291820190526200018c90869062000401565b620001978462000549565b620001a2816200061a565b620001ad8262000a5a565b60408051600080825260208201909252620001fa91859190620001f3565b6040805180820190915260008082526020820152815260200190600190039081620001cb5790505b5062000b26565b5050505050505062001ae5565b336001600160a01b03821603620002615760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000342576000828281518110620002db57620002db62001953565b60209081029190910101519050620002f560028262000e5f565b1562000338576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620002ba565b50815160005b8151811015620003fb57600082828151811062000369576200036962001953565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003a7576040516342bcdf7f60e11b815260040160405180910390fd5b620003b460028262000e7f565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000348565b50505050565b60005b8251811015620004a2576200044083828151811062000427576200042762001953565b6020026020010151600b62000e7f60201b90919060201c565b1562000499578281815181106200045b576200045b62001953565b60200260200101516001600160a01b03167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b60010162000404565b5060005b81518110156200054457620004e2828281518110620004c957620004c962001953565b6020026020010151600b62000e9660201b90919060201c565b156200053b57818181518110620004fd57620004fd62001953565b60200260200101516001600160a01b03167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b600101620004a6565b505050565b60005b8151811015620006165760008282815181106200056d576200056d62001953565b6020908102919091018101518051818301516001600160a01b0380831660008181526007875260409081902084518154868a018051929096166001600160a81b03199091168117600160a01b60ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506200054c565b5050565b60005b8151811015620006165760008282815181106200063e576200063e62001953565b6020026020010151905060008383815181106200065f576200065f62001953565b6020026020010151600001519050600082602001519050816001600160401b03166000148062000698575061016081015163ffffffff16155b80620006ba57506101e08101516001600160e01b031916630a04b54b60e21b14155b80620006da5750806060015163ffffffff1681610160015163ffffffff16115b15620007055760405163c35aa79d60e01b81526001600160401b038316600482015260240162000083565b6001600160401b038216600090815260096020526040812060010154600160881b900460e01b6001600160e01b03191690036200078557816001600160401b03167fd31c671936387b2f84ed402b553bd50c0e9c20408ea4e91a836d77b8180fb7248260405162000777919062001969565b60405180910390a2620007c9565b816001600160401b03167f1edd6f3553cfa16f10b95b195abae3a1cfca4783de4843f95d674b1e1df5ab2082604051620007c0919062001969565b60405180910390a25b8060096000846001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a8154816001600160401b0302191690836001600160401b031602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548160ff0219169083151502179055506101e08201518160010160116101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506200061d565b60005b81518110156200061657600082828151811062000a7e5762000a7e62001953565b6020026020010151600001519050600083838151811062000aa35762000aa362001953565b6020908102919091018101518101516001600160a01b03841660008181526008845260409081902080546001600160401b0319166001600160401b0385169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010162000a5d565b60005b825181101562000d9957600083828151811062000b4a5762000b4a62001953565b6020026020010151905060008160000151905060005b82602001515181101562000d8a5760008360200151828151811062000b895762000b8962001953565b602002602001015160200151905060008460200151838151811062000bb25762000bb262001953565b6020026020010151600001519050602063ffffffff16826080015163ffffffff16101562000c115760808201516040516312766e0160e11b81526001600160a01b038316600482015263ffffffff909116602482015260440162000083565b6001600160401b0384166000818152600a602090815260408083206001600160a01b0386168085529083529281902086518154938801518389015160608a015160808b015160a08c01511515600160901b0260ff60901b1963ffffffff928316600160701b021664ffffffffff60701b199383166a01000000000000000000000263ffffffff60501b1961ffff90961668010000000000000000029590951665ffffffffffff60401b19968416640100000000026001600160401b0319909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59062000d77908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a3505060010162000b60565b50505080600101905062000b29565b5060005b81518110156200054457600082828151811062000dbe5762000dbe62001953565b6020026020010151600001519050600083838151811062000de35762000de362001953565b6020908102919091018101518101516001600160401b0384166000818152600a845260408082206001600160a01b038516808452955280822080546001600160981b03191690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a3505060010162000d9d565b600062000e76836001600160a01b03841662000ead565b90505b92915050565b600062000e76836001600160a01b03841662000fb1565b600062000e76836001600160a01b03841662001003565b6000818152600183016020526040812054801562000fa657600062000ed460018362001aad565b855490915060009062000eea9060019062001aad565b905081811462000f5657600086600001828154811062000f0e5762000f0e62001953565b906000526020600020015490508087600001848154811062000f345762000f3462001953565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000f6a5762000f6a62001acf565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000e79565b600091505062000e79565b600081815260018301602052604081205462000ffa5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000e79565b50600062000e79565b6000818152600183016020526040812054801562000fa65760006200102a60018362001aad565b8554909150600090620010409060019062001aad565b905080821462000f5657600086600001828154811062000f0e5762000f0e62001953565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200109f576200109f62001064565b60405290565b60405160c081016001600160401b03811182821017156200109f576200109f62001064565b60405161020081016001600160401b03811182821017156200109f576200109f62001064565b604051601f8201601f191681016001600160401b03811182821017156200111b576200111b62001064565b604052919050565b80516001600160a01b03811681146200113b57600080fd5b919050565b805163ffffffff811681146200113b57600080fd5b6000606082840312156200116857600080fd5b604051606081016001600160401b03811182821017156200118d576200118d62001064565b604052825190915081906001600160601b0381168114620011ad57600080fd5b8152620011bd6020840162001123565b6020820152620011d06040840162001140565b60408201525092915050565b60006001600160401b03821115620011f857620011f862001064565b5060051b60200190565b600082601f8301126200121457600080fd5b815160206200122d6200122783620011dc565b620010f0565b8083825260208201915060208460051b8701019350868411156200125057600080fd5b602086015b848110156200127757620012698162001123565b835291830191830162001255565b509695505050505050565b600082601f8301126200129457600080fd5b81516020620012a76200122783620011dc565b82815260609283028501820192828201919087851115620012c757600080fd5b8387015b858110156200135a5780890382811215620012e65760008081fd5b620012f06200107a565b620012fb8362001123565b8152604080601f1984011215620013125760008081fd5b6200131c6200107a565b92506200132b88850162001123565b835283015160ff81168114620013415760008081fd5b82880152808701919091528452928401928101620012cb565b5090979650505050505050565b80516001600160401b03811681146200113b57600080fd5b805161ffff811681146200113b57600080fd5b805180151581146200113b57600080fd5b600082601f830112620013b557600080fd5b81516020620013c86200122783620011dc565b82815260059290921b84018101918181019086841115620013e857600080fd5b8286015b84811015620012775780516001600160401b03808211156200140d57600080fd5b908801906040601f19838c0381018213156200142857600080fd5b620014326200107a565b6200143f89860162001367565b815282850151848111156200145357600080fd5b8086019550508c603f8601126200146957600080fd5b8885015193506200147e6200122785620011dc565b84815260e09094028501830193898101908e8611156200149d57600080fd5b958401955b858710156200157657868f0360e0811215620014bd57600080fd5b620014c76200107a565b620014d28962001123565b815260c08683011215620014e557600080fd5b620014ef620010a5565b9150620014fe8d8a0162001140565b82526200150d878a0162001140565b8d8301526200151f60608a016200137f565b878301526200153160808a0162001140565b60608301526200154460a08a0162001140565b60808301526200155760c08a0162001392565b60a0830152808d0191909152825260e09690960195908a0190620014a2565b828b015250875250505092840192508301620013ec565b600082601f8301126200159f57600080fd5b81516020620015b26200122783620011dc565b82815260069290921b84018101918181019086841115620015d257600080fd5b8286015b84811015620012775760408189031215620015f15760008081fd5b620015fb6200107a565b620016068262001123565b81526200161585830162001367565b81860152835291830191604001620015d6565b80516001600160e01b0319811681146200113b57600080fd5b600082601f8301126200165357600080fd5b81516020620016666200122783620011dc565b82815261022092830285018201928282019190878511156200168757600080fd5b8387015b858110156200135a5780890382811215620016a65760008081fd5b620016b06200107a565b620016bb8362001367565b815261020080601f1984011215620016d35760008081fd5b620016dd620010ca565b9250620016ec88850162001392565b83526040620016fd8186016200137f565b8985015260606200171081870162001140565b82860152608091506200172582870162001140565b9085015260a06200173886820162001140565b8286015260c091506200174d8287016200137f565b9085015260e06200176086820162001140565b828601526101009150620017768287016200137f565b908501526101206200178a8682016200137f565b828601526101409150620017a08287016200137f565b90850152610160620017b486820162001140565b828601526101809150620017ca82870162001140565b908501526101a0620017de86820162001367565b828601526101c09150620017f482870162001140565b908501526101e06200180886820162001392565b828601526200181983870162001628565b9085015250508087019190915284529284019281016200168b565b6000806000806000806000610120888a0312156200185157600080fd5b6200185d898962001155565b60608901519097506001600160401b03808211156200187b57600080fd5b620018898b838c0162001202565b975060808a0151915080821115620018a057600080fd5b620018ae8b838c0162001202565b965060a08a0151915080821115620018c557600080fd5b620018d38b838c0162001282565b955060c08a0151915080821115620018ea57600080fd5b620018f88b838c01620013a3565b945060e08a01519150808211156200190f57600080fd5b6200191d8b838c016200158d565b93506101008a01519150808211156200193557600080fd5b50620019448a828b0162001641565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b815115158152610200810160208301516200198a602084018261ffff169052565b506040830151620019a3604084018263ffffffff169052565b506060830151620019bc606084018263ffffffff169052565b506080830151620019d5608084018263ffffffff169052565b5060a0830151620019ec60a084018261ffff169052565b5060c083015162001a0560c084018263ffffffff169052565b5060e083015162001a1c60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff9081169184019190915261016080850151821690840152610180808501516001600160401b0316908401526101a080850151909116908301526101c0808401511515908301526101e0928301516001600160e01b031916929091019190915290565b8181038181111562000e7957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051615c1562001b3f6000396000818161030501528181612223015261228c0152600081816102c90152818161193d015261199d015260008181610295015281816119c60152611a360152615c156000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c806379ba50971161010f578063bf78e03f116100a2578063d63d3af211610071578063d63d3af214610ab2578063d8694ccd14610aba578063f2fde38b14610acd578063ffdb4b3714610ae057600080fd5b8063bf78e03f146109c8578063c4276bfc14610a75578063cdc73d5114610a97578063d02641a014610a9f57600080fd5b80638da5cb5b116100de5780638da5cb5b1461096757806391a2749a1461098f5780639ea60026146109a2578063a69c64c0146109b557600080fd5b806379ba5097146107c95780637afac322146107d1578063805f2132146107e457806382b49eb0146107f757600080fd5b80633937306f116101875780634ab35b0b116101565780634ab35b0b1461045f578063514e8cff1461049f5780636def4ce714610542578063770e2dc4146107b657600080fd5b80633937306f14610404578063407e10861461041957806341ed29e71461042c57806345ac924d1461043f57600080fd5b8063085318f8116101c3578063085318f81461037e578063181f5a771461039e5780632451a627146103e7578063325c868e146103fc57600080fd5b806241e5be146101e9578063061877e31461020f57806306285c6914610268575b600080fd5b6101fc6101f73660046142e8565b610b28565b6040519081526020015b60405180910390f35b61024f61021d366004614324565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff9091168152602001610206565b610332604080516060810182526000808252602082018190529181019190915260405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff16815250905090565b6040805182516bffffffffffffffffffffffff16815260208084015173ffffffffffffffffffffffffffffffffffffffff16908201529181015163ffffffff1690820152606001610206565b61039161038c36600461439c565b610b96565b60405161020691906144ae565b6103da6040518060400160405280601381526020017f46656551756f74657220312e362e302d6465760000000000000000000000000081525081565b6040516102069190614530565b6103ef610f08565b6040516102069190614543565b6101fc602481565b61041761041236600461459d565b610f19565b005b61041761042736600461473f565b6111ce565b61041761043a366004614871565b6111e2565b61045261044d3660046149ac565b611224565b60405161020691906149ee565b61047261046d366004614324565b6112ef565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b6105356104ad366004614a69565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600560209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b6040516102069190614a84565b6107a9610550366004614a69565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101919091525067ffffffffffffffff908116600090815260096020908152604091829020825161020081018452815460ff8082161515835261ffff61010080840482169685019690965263ffffffff630100000084048116978501979097526701000000000000008304871660608501526b0100000000000000000000008304871660808501526f010000000000000000000000000000008304811660a085015271010000000000000000000000000000000000808404881660c086015275010000000000000000000000000000000000000000008404821660e08087019190915277010000000000000000000000000000000000000000000000850483169786019790975279010000000000000000000000000000000000000000000000000084049091166101208501527b01000000000000000000000000000000000000000000000000000000909204861661014084015260019093015480861661016084015264010000000081049096166101808301526c0100000000000000000000000086049094166101a0820152700100000000000000000000000000000000850490911615156101c08201527fffffffff0000000000000000000000000000000000000000000000000000000092909304901b166101e082015290565b6040516102069190614abf565b6104176107c4366004614cd6565b6112fa565b61041761130c565b6104176107df366004614ff0565b611409565b6104176107f2366004615096565b61141b565b610907610805366004615102565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525067ffffffffffffffff919091166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff94909416835292815290829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a082015290565b6040516102069190600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b61041761099d36600461512c565b611903565b6104176109b03660046151ed565b611914565b6104176109c33660046153fa565b611925565b610a416109d6366004614324565b6040805180820182526000808252602091820181905273ffffffffffffffffffffffffffffffffffffffff93841681526007825282902082518084019093525492831682527401000000000000000000000000000000000000000090920460ff169181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260209283015160ff169281019290925201610206565b610a88610a833660046154bf565b611936565b6040516102069392919061552e565b6103ef611b2c565b610535610aad366004614324565b611b38565b6101fc601281565b6101fc610ac836600461554f565b611c34565b610417610adb366004614324565b61213e565b610af3610aee3660046155a4565b61214f565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff938416815292909116602083015201610206565b6000610b33826122da565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b5a856122da565b610b82907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16856155fd565b610b8c9190615614565b90505b9392505050565b67ffffffffffffffff8086166000908152600960205260409020600101546060917101000000000000000000000000000000000090910460e01b908590811115610be257610be26145d8565b604051908082528060200260200182016040528015610c1557816020015b6060815260200190600190039081610c005790505b50915060005b85811015610efd576000858583818110610c3757610c3761564f565b610c4d9260206040909202019081019150614324565b90506000888884818110610c6357610c6361564f565b9050602002810190610c75919061567e565b610c839060408101906156bc565b9150506020811115610d385767ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546e010000000000000000000000000000900463ffffffff16811115610d38576040517f36f536ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b610da8848a8a86818110610d4e57610d4e61564f565b9050602002810190610d60919061567e565b610d6e9060208101906156bc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061237492505050565b67ffffffffffffffff8a166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684528252808320815160c081018352905463ffffffff8082168352640100000000820481168386015268010000000000000000820461ffff16838501526a01000000000000000000008204811660608401526e010000000000000000000000000000820481166080840152720100000000000000000000000000000000000090910460ff16151560a08301908152958552600990935290832054935190937b0100000000000000000000000000000000000000000000000000000090049091169190610ea75781610ead565b82606001515b6040805163ffffffff8316602082015291925001604051602081830303815290604052888781518110610ee257610ee261564f565b60200260200101819052505050505050806001019050610c1b565b505095945050505050565b6060610f1460026123cb565b905090565b610f216123d8565b6000610f2d8280615721565b9050905060005b81811015611077576000610f488480615721565b83818110610f5857610f5861564f565b905060400201803603810190610f6e91906157b5565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885173ffffffffffffffffffffffffffffffffffffffff9081166000908152600690975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a926110669290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610f34565b5060006110876020840184615721565b9050905060005b818110156111c85760006110a56020860186615721565b838181106110b5576110b561564f565b9050604002018036038101906110cb91906157f2565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885167ffffffffffffffff9081166000908152600590975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e926111b79290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a25060010161108e565b50505050565b6111d661241d565b6111df8161249e565b50565b6111ea61241d565b60005b81518110156112205761121882828151811061120b5761120b61564f565b602002602001015161259c565b6001016111ed565b5050565b60608160008167ffffffffffffffff811115611242576112426145d8565b60405190808252806020026020018201604052801561128757816020015b60408051808201909152600080825260208201528152602001906001900390816112605790505b50905060005b828110156112e4576112bf8686838181106112aa576112aa61564f565b9050602002016020810190610aad9190614324565b8282815181106112d1576112d161564f565b602090810291909101015260010161128d565b509150505b92915050565b60006112e9826122da565b61130261241d565b611220828261276e565b60015473ffffffffffffffffffffffffffffffffffffffff16331461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610d2f565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b61141161241d565b6112208282612b7b565b600080600061145f87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612cc292505050565b92509250925061147133838584612cdd565b600061147f85870187615815565b905060005b81518110156118f8576000600760008484815181106114a5576114a561564f565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160009081205474010000000000000000000000000000000000000000900460ff1691508190036115665782828151811061150f5761150f61564f565b6020908102919091010151516040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d2f565b60006115af6012838686815181106115805761158061564f565b6020026020010151602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612e35565b9050600660008585815181106115c7576115c761564f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff168484815181106116395761163961564f565b60200260200101516040015163ffffffff161015611743578383815181106116635761166361564f565b6020026020010151600001518484815181106116815761168161564f565b602002602001015160400151600660008787815181106116a3576116a361564f565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000205490517f191ec70600000000000000000000000000000000000000000000000000000000815293909116600484015263ffffffff91821660248401527c01000000000000000000000000000000000000000000000000000000009004166044820152606401610d2f565b6040518060400160405280827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681526020018585815181106117845761178461564f565b60200260200101516040015163ffffffff16815250600660008686815181106117af576117af61564f565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040016000208251929091015163ffffffff167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff90921691909117905583518490849081106118475761184761564f565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff167f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a8286868151811061189d5761189d61564f565b6020026020010151604001516040516118e69291907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216825263ffffffff16602082015260400190565b60405180910390a25050600101611484565b505050505050505050565b61190b61241d565b6111df81612f01565b61191c61241d565b6111df8161308d565b61192d61241d565b6111df81613533565b60008060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611996578592506119c4565b6119c187877f0000000000000000000000000000000000000000000000000000000000000000610b28565b92505b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16831115611a63576040517f6a92a483000000000000000000000000000000000000000000000000000000008152600481018490526bffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610d2f565b67ffffffffffffffff881660009081526009602052604081206001015463ffffffff1690611a9287878461361d565b9050806020015193508484611b19836040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b9450945094505050955095509592505050565b6060610f14600b6123cb565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff8281166000908152600760209081526040918290208251808401909352549283168083527401000000000000000000000000000000000000000090930460ff169082015290611c2b57505073ffffffffffffffffffffffffffffffffffffffff166000908152600660209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b610b8f816137c6565b67ffffffffffffffff8083166000908152600960209081526040808320815161020081018352815460ff808216151580845261ffff61010080850482169886019890985263ffffffff630100000085048116978601979097526701000000000000008404871660608601526b0100000000000000000000008404871660808601526f010000000000000000000000000000008404811660a086015271010000000000000000000000000000000000808504881660c087015275010000000000000000000000000000000000000000008504821660e08088019190915277010000000000000000000000000000000000000000000000860483169987019990995279010000000000000000000000000000000000000000000000000085049091166101208601527b01000000000000000000000000000000000000000000000000000000909304861661014085015260019094015480861661016085015264010000000081049098166101808401526c0100000000000000000000000088049094166101a0830152700100000000000000000000000000000000870490931615156101c08201527fffffffff000000000000000000000000000000000000000000000000000000009290950490921b166101e0840152909190611e4e576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610d2f565b611e69611e616080850160608601614324565b600b90613955565b611ec857611e7d6080840160608501614324565b6040517f2502348c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d2f565b6000611ed76040850185615721565b9150611f33905082611eec60208701876156bc565b905083611ef988806156bc565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061398492505050565b600080611f4f611f496080880160608901614324565b8861214f565b9092509050600080808515611f9257611f86878b611f7360808d0160608e01614324565b88611f8160408f018f615721565b613a2e565b91945092509050611fb2565b6101a0870151611faf9063ffffffff16662386f26fc100006155fd565b92505b61010087015160009061ffff1615611ff657611ff3886dffffffffffffffffffffffffffff607088901c16611fea60208e018e6156bc565b90508a86613d06565b90505b61018088015160009067ffffffffffffffff1661201f61201960808e018e6156bc565b8c613db6565b600001518563ffffffff168b60a0015161ffff168e806020019061204391906156bc565b61204e9291506155fd565b8c6080015163ffffffff1661206391906158dc565b61206d91906158dc565b61207791906158dc565b612091906dffffffffffffffffffffffffffff89166155fd565b61209b91906155fd565b9050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168282600860008f60600160208101906120d59190614324565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020546121109067ffffffffffffffff16896155fd565b61211a91906158dc565b61212491906158dc565b61212e9190615614565b9c9b505050505050505050505050565b61214661241d565b6111df81613e77565b67ffffffffffffffff811660009081526005602090815260408083208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811682527c0100000000000000000000000000000000000000000000000000000000900463ffffffff1691810182905282918203612207576040517f2e59db3a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610d2f565b6000816020015163ffffffff164261221f91906158ef565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff168111156122c0576040517ff08bcb3e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8616600482015263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016602482015260448101829052606401610d2f565b6122c9866122da565b9151919350909150505b9250929050565b6000806122e683611b38565b9050806020015163ffffffff166000148061231e575080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16155b1561236d576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610d2f565b5192915050565b7fd7ed2ad4000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601611220576123c681613f6c565b505050565b60606000610b8f8361401f565b6123e3600233613955565b61241b576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610d2f565b565b60005473ffffffffffffffffffffffffffffffffffffffff16331461241b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610d2f565b60005b81518110156112205760008282815181106124be576124be61564f565b60209081029190910181015180518183015173ffffffffffffffffffffffffffffffffffffffff80831660008181526007875260409081902084518154868a018051929096167fffffffffffffffffffffff00000000000000000000000000000000000000000090911681177401000000000000000000000000000000000000000060ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506124a1565b600061265582600001518360600151846020015185604001516040805173ffffffffffffffffffffffffffffffffffffffff80871660208301528516918101919091527fffffffffffffffffffff00000000000000000000000000000000000000000000831660608201527fffff0000000000000000000000000000000000000000000000000000000000008216608082015260009060a001604051602081830303815290604052805190602001209050949350505050565b60808301516000828152600460205260409081902080549215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909316929092179091555190915081907f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a390612762908590600060a08201905073ffffffffffffffffffffffffffffffffffffffff8084511683527fffffffffffffffffffff0000000000000000000000000000000000000000000060208501511660208401527fffff00000000000000000000000000000000000000000000000000000000000060408501511660408401528060608501511660608401525060808301511515608083015292915050565b60405180910390a25050565b60005b8251811015612a9757600083828151811061278e5761278e61564f565b6020026020010151905060008160000151905060005b826020015151811015612a89576000836020015182815181106127c9576127c961564f565b60200260200101516020015190506000846020015183815181106127ef576127ef61564f565b6020026020010151600001519050602063ffffffff16826080015163ffffffff1610156128725760808201516040517f24ecdc0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015263ffffffff9091166024820152604401610d2f565b67ffffffffffffffff84166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902086518154938801518389015160608a015160808b015160a08c015115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff63ffffffff9283166e01000000000000000000000000000002167fffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffff9383166a0100000000000000000000027fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff61ffff9096166801000000000000000002959095167fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b590612a77908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a350506001016127a4565b505050806001019050612771565b5060005b81518110156123c6576000828281518110612ab857612ab861564f565b60200260200101516000015190506000838381518110612ada57612ada61564f565b60209081029190910181015181015167ffffffffffffffff84166000818152600a8452604080822073ffffffffffffffffffffffffffffffffffffffff8516808452955280822080547fffffffffffffffffffffffffff000000000000000000000000000000000000001690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a35050600101612a9b565b60005b8251811015612c1e57612bb4838281518110612b9c57612b9c61564f565b6020026020010151600b61407b90919063ffffffff16565b15612c1657828181518110612bcb57612bcb61564f565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b600101612b7e565b5060005b81518110156123c657612c58828281518110612c4057612c4061564f565b6020026020010151600b61409d90919063ffffffff16565b15612cba57818181518110612c6f57612c6f61564f565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b600101612c22565b6040810151604a820151605e90920151909260609290921c91565b6040805173ffffffffffffffffffffffffffffffffffffffff868116602080840191909152908616828401527fffffffffffffffffffff00000000000000000000000000000000000000000000851660608301527fffff00000000000000000000000000000000000000000000000000000000000084166080808401919091528351808403909101815260a09092018352815191810191909120600081815260049092529190205460ff16612e2e576040517f097e17ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201527fffffffffffffffffffff00000000000000000000000000000000000000000000841660448201527fffff00000000000000000000000000000000000000000000000000000000000083166064820152608401610d2f565b5050505050565b600080612e428486615902565b9050600060248260ff161115612e7c57612e60602460ff84166158ef565b612e6b90600a615a3b565b612e759085615614565b9050612ea2565b612e8a60ff831660246158ef565b612e9590600a615a3b565b612e9f90856155fd565b90505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612ef8576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b95945050505050565b602081015160005b8151811015612f9c576000828281518110612f2657612f2661564f565b60200260200101519050612f448160026140bf90919063ffffffff16565b15612f935760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101612f09565b50815160005b81518110156111c8576000828281518110612fbf57612fbf61564f565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361302f576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61303a60028261407b565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101612fa2565b60005b81518110156112205760008282815181106130ad576130ad61564f565b6020026020010151905060008383815181106130cb576130cb61564f565b60200260200101516000015190506000826020015190508167ffffffffffffffff1660001480613104575061016081015163ffffffff16155b8061315657506101e08101517fffffffff00000000000000000000000000000000000000000000000000000000167f2812d52c0000000000000000000000000000000000000000000000000000000014155b806131755750806060015163ffffffff1681610160015163ffffffff16115b156131b8576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610d2f565b67ffffffffffffffff821660009081526009602052604081206001015471010000000000000000000000000000000000900460e01b7fffffffff0000000000000000000000000000000000000000000000000000000016900361325c578167ffffffffffffffff167fd31c671936387b2f84ed402b553bd50c0e9c20408ea4e91a836d77b8180fb7248260405161324f9190614abf565b60405180910390a261329f565b8167ffffffffffffffff167f1edd6f3553cfa16f10b95b195abae3a1cfca4783de4843f95d674b1e1df5ab20826040516132969190614abf565b60405180910390a25b80600960008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548160ff0219169083151502179055506101e08201518160010160116101000a81548163ffffffff021916908360e01c0217905550905050505050806001019050613090565b60005b81518110156112205760008282815181106135535761355361564f565b602002602001015160000151905060008383815181106135755761357561564f565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff841660008181526008845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a25050600101613536565b6040805180820190915260008082526020820152600083900361365e57506040805180820190915267ffffffffffffffff8216815260006020820152610b8f565b600061366a8486615a47565b9050600061367b8560048189615a8d565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050507fffffffff0000000000000000000000000000000000000000000000000000000082167fe7e230f00000000000000000000000000000000000000000000000000000000001613718578080602001905181019061370f9190615ab7565b92505050610b8f565b7f6859a837000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831601613794576040518060400160405280828060200190518101906137809190615ae3565b815260006020909101529250610b8f915050565b6040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091526000808252602082015260008260000151905060008173ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613830573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138549190615b16565b5050509150506000811215613895576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60006139148373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138e5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139099190615b66565b866020015184612e35565b604080518082019091527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815263ffffffff4216602082015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b8f565b836040015163ffffffff168311156139dd5760408085015190517f8693378900000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101849052604401610d2f565b836020015161ffff16821115613a1f576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c8846101e0015182612374565b6000808083815b81811015613cf8576000878783818110613a5157613a5161564f565b905060400201803603810190613a679190615b83565b67ffffffffffffffff8c166000908152600a60209081526040808320845173ffffffffffffffffffffffffffffffffffffffff168452825291829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a0820181905291925090613b87576101208d0151613b549061ffff16662386f26fc100006155fd565b613b5e90886158dc565b96508c610140015186613b719190615bbc565b9550613b7e602086615bbc565b94505050613cf0565b604081015160009061ffff1615613c405760008c73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614613be3578351613bdc906122da565b9050613be6565b508a5b620186a0836040015161ffff16613c288660200151847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166140e190919063ffffffff16565b613c3291906155fd565b613c3c9190615614565b9150505b6060820151613c4f9088615bbc565b9650816080015186613c619190615bbc565b8251909650600090613c809063ffffffff16662386f26fc100006155fd565b905080821015613c9f57613c94818a6158dc565b985050505050613cf0565b6000836020015163ffffffff16662386f26fc10000613cbe91906155fd565b905080831115613cde57613cd2818b6158dc565b99505050505050613cf0565b613ce8838b6158dc565b995050505050505b600101613a35565b505096509650969350505050565b60008063ffffffff8316613d1c610160866155fd565b613d28876101c06158dc565b613d3291906158dc565b613d3c91906158dc565b905060008760c0015163ffffffff168860e0015161ffff1683613d5f91906155fd565b613d6991906158dc565b61010089015190915061ffff16613d906dffffffffffffffffffffffffffff8916836155fd565b613d9a91906155fd565b613daa90655af3107a40006155fd565b98975050505050505050565b60408051808201909152600080825260208201526000613de2858585610160015163ffffffff1661361d565b9050826060015163ffffffff1681600001511115613e2c576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826101c001518015613e4057508060200151155b15610b8c576040517fee433e9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603613ef6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610d2f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008151602014613fab57816040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610d2f9190614530565b600082806020019051810190613fc19190615ae3565b905073ffffffffffffffffffffffffffffffffffffffff811180613fe6575061040081105b156112e957826040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610d2f9190614530565b60608160000180548060200260200160405190810160405280929190818152602001828054801561406f57602002820191906000526020600020905b81548152602001906001019080831161405b575b50505050509050919050565b6000610b8f8373ffffffffffffffffffffffffffffffffffffffff841661411e565b6000610b8f8373ffffffffffffffffffffffffffffffffffffffff841661416d565b6000610b8f8373ffffffffffffffffffffffffffffffffffffffff8416614267565b6000670de0b6b3a7640000614114837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff86166155fd565b610b8f9190615614565b6000818152600183016020526040812054614165575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556112e9565b5060006112e9565b600081815260018301602052604081205480156142565760006141916001836158ef565b85549091506000906141a5906001906158ef565b905080821461420a5760008660000182815481106141c5576141c561564f565b90600052602060002001549050808760000184815481106141e8576141e861564f565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061421b5761421b615bd9565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506112e9565b60009150506112e9565b5092915050565b6000818152600183016020526040812054801561425657600061428b6001836158ef565b855490915060009061429f906001906158ef565b905081811461420a5760008660000182815481106141c5576141c561564f565b803573ffffffffffffffffffffffffffffffffffffffff811681146142e357600080fd5b919050565b6000806000606084860312156142fd57600080fd5b614306846142bf565b92506020840135915061431b604085016142bf565b90509250925092565b60006020828403121561433657600080fd5b610b8f826142bf565b803567ffffffffffffffff811681146142e357600080fd5b60008083601f84011261436957600080fd5b50813567ffffffffffffffff81111561438157600080fd5b6020830191508360208260051b85010111156122d357600080fd5b6000806000806000606086880312156143b457600080fd5b6143bd8661433f565b9450602086013567ffffffffffffffff808211156143da57600080fd5b6143e689838a01614357565b909650945060408801359150808211156143ff57600080fd5b818801915088601f83011261441357600080fd5b81358181111561442257600080fd5b8960208260061b850101111561443757600080fd5b9699959850939650602001949392505050565b6000815180845260005b8181101561447057602081850181015186830182015201614454565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b82811015614523577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc088860301845261451185835161444a565b945092850192908501906001016144d7565b5092979650505050505050565b602081526000610b8f602083018461444a565b6020808252825182820181905260009190848201906040850190845b8181101561459157835173ffffffffffffffffffffffffffffffffffffffff168352928401929184019160010161455f565b50909695505050505050565b6000602082840312156145af57600080fd5b813567ffffffffffffffff8111156145c657600080fd5b820160408185031215610b8f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561462a5761462a6145d8565b60405290565b60405160a0810167ffffffffffffffff8111828210171561462a5761462a6145d8565b60405160c0810167ffffffffffffffff8111828210171561462a5761462a6145d8565b604051610200810167ffffffffffffffff8111828210171561462a5761462a6145d8565b6040516060810167ffffffffffffffff8111828210171561462a5761462a6145d8565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff81118282101715614704576147046145d8565b604052919050565b600067ffffffffffffffff821115614726576147266145d8565b5060051b60200190565b60ff811681146111df57600080fd5b6000602080838503121561475257600080fd5b823567ffffffffffffffff81111561476957600080fd5b8301601f8101851361477a57600080fd5b803561478d6147888261470c565b6146bd565b818152606091820283018401918482019190888411156147ac57600080fd5b938501935b8385101561484c57848903818112156147ca5760008081fd5b6147d2614607565b6147db876142bf565b81526040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08401121561480f5760008081fd5b614817614607565b92506148248989016142bf565b835287013561483281614730565b8289015280880191909152835293840193918501916147b1565b50979650505050505050565b80151581146111df57600080fd5b80356142e381614858565b6000602080838503121561488457600080fd5b823567ffffffffffffffff81111561489b57600080fd5b8301601f810185136148ac57600080fd5b80356148ba6147888261470c565b81815260a091820283018401918482019190888411156148d957600080fd5b938501935b8385101561484c5780858a0312156148f65760008081fd5b6148fe614630565b614907866142bf565b8152868601357fffffffffffffffffffff000000000000000000000000000000000000000000008116811461493c5760008081fd5b818801526040868101357fffff000000000000000000000000000000000000000000000000000000000000811681146149755760008081fd5b9082015260606149868782016142bf565b9082015260808681013561499981614858565b90820152835293840193918501916148de565b600080602083850312156149bf57600080fd5b823567ffffffffffffffff8111156149d657600080fd5b6149e285828601614357565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015614a5c57614a4c84835180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16825260209081015163ffffffff16910152565b9284019290850190600101614a0b565b5091979650505050505050565b600060208284031215614a7b57600080fd5b610b8f8261433f565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260208083015163ffffffff1690820152604081016112e9565b81511515815261020081016020830151614adf602084018261ffff169052565b506040830151614af7604084018263ffffffff169052565b506060830151614b0f606084018263ffffffff169052565b506080830151614b27608084018263ffffffff169052565b5060a0830151614b3d60a084018261ffff169052565b5060c0830151614b5560c084018263ffffffff169052565b5060e0830151614b6b60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff90811691840191909152610160808501518216908401526101808085015167ffffffffffffffff16908401526101a080850151909116908301526101c0808401511515908301526101e0808401517fffffffff000000000000000000000000000000000000000000000000000000008116828501525b505092915050565b803563ffffffff811681146142e357600080fd5b803561ffff811681146142e357600080fd5b600082601f830112614c4f57600080fd5b81356020614c5f6147888361470c565b82815260069290921b84018101918181019086841115614c7e57600080fd5b8286015b84811015614ccb5760408189031215614c9b5760008081fd5b614ca3614607565b614cac8261433f565b8152614cb98583016142bf565b81860152835291830191604001614c82565b509695505050505050565b60008060408385031215614ce957600080fd5b67ffffffffffffffff83351115614cff57600080fd5b83601f843585010112614d1157600080fd5b614d21614788843585013561470c565b8335840180358083526020808401939260059290921b90910101861015614d4757600080fd5b602085358601015b85358601803560051b01602001811015614f545767ffffffffffffffff81351115614d7957600080fd5b8035863587010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a03011215614db257600080fd5b614dba614607565b614dc66020830161433f565b815267ffffffffffffffff60408301351115614de157600080fd5b88603f604084013584010112614df657600080fd5b614e0c614788602060408501358501013561470c565b6020604084810135850182810135808552928401939260e00201018b1015614e3357600080fd5b6040808501358501015b6040858101358601602081013560e0020101811015614f355760e0818d031215614e6657600080fd5b614e6e614607565b614e77826142bf565b815260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f03011215614eab57600080fd5b614eb3614653565b614ebf60208401614c18565b8152614ecd60408401614c18565b6020820152614ede60608401614c2c565b6040820152614eef60808401614c18565b6060820152614f0060a08401614c18565b6080820152614f1260c0840135614858565b60c083013560a0820152602082810191909152908452929092019160e001614e3d565b5080602084015250508085525050602083019250602081019050614d4f565b5092505067ffffffffffffffff60208401351115614f7157600080fd5b614f818460208501358501614c3e565b90509250929050565b600082601f830112614f9b57600080fd5b81356020614fab6147888361470c565b8083825260208201915060208460051b870101935086841115614fcd57600080fd5b602086015b84811015614ccb57614fe3816142bf565b8352918301918301614fd2565b6000806040838503121561500357600080fd5b823567ffffffffffffffff8082111561501b57600080fd5b61502786838701614f8a565b9350602085013591508082111561503d57600080fd5b5061504a85828601614f8a565b9150509250929050565b60008083601f84011261506657600080fd5b50813567ffffffffffffffff81111561507e57600080fd5b6020830191508360208285010111156122d357600080fd5b600080600080604085870312156150ac57600080fd5b843567ffffffffffffffff808211156150c457600080fd5b6150d088838901615054565b909650945060208701359150808211156150e957600080fd5b506150f687828801615054565b95989497509550505050565b6000806040838503121561511557600080fd5b61511e8361433f565b9150614f81602084016142bf565b60006020828403121561513e57600080fd5b813567ffffffffffffffff8082111561515657600080fd5b908301906040828603121561516a57600080fd5b615172614607565b82358281111561518157600080fd5b61518d87828601614f8a565b8252506020830135828111156151a257600080fd5b6151ae87828601614f8a565b60208301525095945050505050565b80357fffffffff00000000000000000000000000000000000000000000000000000000811681146142e357600080fd5b6000602080838503121561520057600080fd5b823567ffffffffffffffff81111561521757600080fd5b8301601f8101851361522857600080fd5b80356152366147888261470c565b818152610220918202830184019184820191908884111561525657600080fd5b938501935b8385101561484c57848903818112156152745760008081fd5b61527c614607565b6152858761433f565b8152610200807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840112156152ba5760008081fd5b6152c2614676565b92506152cf898901614866565b835260406152de818a01614c2c565b8a85015260606152ef818b01614c18565b8286015260809150615302828b01614c18565b9085015260a06153138a8201614c18565b8286015260c09150615326828b01614c2c565b9085015260e06153378a8201614c18565b82860152610100915061534b828b01614c2c565b9085015261012061535d8a8201614c2c565b828601526101409150615371828b01614c2c565b908501526101606153838a8201614c18565b828601526101809150615397828b01614c18565b908501526101a06153a98a820161433f565b828601526101c091506153bd828b01614c18565b908501526101e06153cf8a8201614866565b828601526153de838b016151bd565b908501525050808801919091528352938401939185019161525b565b6000602080838503121561540d57600080fd5b823567ffffffffffffffff81111561542457600080fd5b8301601f8101851361543557600080fd5b80356154436147888261470c565b81815260069190911b8201830190838101908783111561546257600080fd5b928401925b828410156154b457604084890312156154805760008081fd5b615488614607565b615491856142bf565b815261549e86860161433f565b8187015282526040939093019290840190615467565b979650505050505050565b6000806000806000608086880312156154d757600080fd5b6154e08661433f565b94506154ee602087016142bf565b935060408601359250606086013567ffffffffffffffff81111561551157600080fd5b61551d88828901615054565b969995985093965092949392505050565b8381528215156020820152606060408201526000612ef8606083018461444a565b6000806040838503121561556257600080fd5b61556b8361433f565b9150602083013567ffffffffffffffff81111561558757600080fd5b830160a0818603121561559957600080fd5b809150509250929050565b600080604083850312156155b757600080fd5b6155c0836142bf565b9150614f816020840161433f565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176112e9576112e96155ce565b60008261564a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126156b257600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126156f157600080fd5b83018035915067ffffffffffffffff82111561570c57600080fd5b6020019150368190038213156122d357600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261575657600080fd5b83018035915067ffffffffffffffff82111561577157600080fd5b6020019150600681901b36038213156122d357600080fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811681146142e357600080fd5b6000604082840312156157c757600080fd5b6157cf614607565b6157d8836142bf565b81526157e660208401615789565b60208201529392505050565b60006040828403121561580457600080fd5b61580c614607565b6157d88361433f565b6000602080838503121561582857600080fd5b823567ffffffffffffffff81111561583f57600080fd5b8301601f8101851361585057600080fd5b803561585e6147888261470c565b8181526060918202830184019184820191908884111561587d57600080fd5b938501935b8385101561484c5780858a03121561589a5760008081fd5b6158a261469a565b6158ab866142bf565b81526158b8878701615789565b8782015260406158c9818801614c18565b9082015283529384019391850191615882565b808201808211156112e9576112e96155ce565b818103818111156112e9576112e96155ce565b60ff81811683821601908111156112e9576112e96155ce565b600181815b8085111561597457817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561595a5761595a6155ce565b8085161561596757918102915b93841c9390800290615920565b509250929050565b60008261598b575060016112e9565b81615998575060006112e9565b81600181146159ae57600281146159b8576159d4565b60019150506112e9565b60ff8411156159c9576159c96155ce565b50506001821b6112e9565b5060208310610133831016604e8410600b84101617156159f7575081810a6112e9565b615a01838361591b565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a3357615a336155ce565b029392505050565b6000610b8f838361597c565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015614c105760049490940360031b84901b1690921692915050565b60008085851115615a9d57600080fd5b83861115615aaa57600080fd5b5050820193919092039150565b600060408284031215615ac957600080fd5b615ad1614607565b8251815260208301516157e681614858565b600060208284031215615af557600080fd5b5051919050565b805169ffffffffffffffffffff811681146142e357600080fd5b600080600080600060a08688031215615b2e57600080fd5b615b3786615afc565b9450602086015193506040860151925060608601519150615b5a60808701615afc565b90509295509295909350565b600060208284031215615b7857600080fd5b8151610b8f81614730565b600060408284031215615b9557600080fd5b615b9d614607565b615ba6836142bf565b8152602083013560208201528091505092915050565b63ffffffff818116838216019080821115614260576142606155ce565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", + Bin: "0x60e06040523480156200001157600080fd5b50604051620077a3380380620077a3833981016040819052620000349162001834565b8533806000816200008c5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000bf57620000bf8162000207565b5050604080518082018252838152815160008152602080820190935291810191909152620000ee9150620002b2565b5060208701516001600160a01b0316158062000112575086516001600160601b0316155b80620001265750604087015163ffffffff16155b15620001455760405163d794ef9560e01b815260040160405180910390fd5b6020878101516001600160a01b031660a05287516001600160601b031660805260408089015163ffffffff1660c05280516000815291820190526200018c90869062000401565b620001978462000549565b620001a2816200061a565b620001ad8262000a5a565b60408051600080825260208201909252620001fa91859190620001f3565b6040805180820190915260008082526020820152815260200190600190039081620001cb5790505b5062000b26565b5050505050505062001ae5565b336001600160a01b03821603620002615760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000083565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b602081015160005b815181101562000342576000828281518110620002db57620002db62001953565b60209081029190910101519050620002f560028262000e5f565b1562000338576040516001600160a01b03821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101620002ba565b50815160005b8151811015620003fb57600082828151811062000369576200036962001953565b6020026020010151905060006001600160a01b0316816001600160a01b031603620003a7576040516342bcdf7f60e11b815260040160405180910390fd5b620003b460028262000e7f565b506040516001600160a01b03821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a15060010162000348565b50505050565b60005b8251811015620004a2576200044083828151811062000427576200042762001953565b6020026020010151600b62000e7f60201b90919060201c565b1562000499578281815181106200045b576200045b62001953565b60200260200101516001600160a01b03167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b60010162000404565b5060005b81518110156200054457620004e2828281518110620004c957620004c962001953565b6020026020010151600b62000e9660201b90919060201c565b156200053b57818181518110620004fd57620004fd62001953565b60200260200101516001600160a01b03167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b600101620004a6565b505050565b60005b8151811015620006165760008282815181106200056d576200056d62001953565b6020908102919091018101518051818301516001600160a01b0380831660008181526007875260409081902084518154868a018051929096166001600160a81b03199091168117600160a01b60ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506200054c565b5050565b60005b8151811015620006165760008282815181106200063e576200063e62001953565b6020026020010151905060008383815181106200065f576200065f62001953565b6020026020010151600001519050600082602001519050816001600160401b03166000148062000698575061016081015163ffffffff16155b80620006ba57506101e08101516001600160e01b031916630a04b54b60e21b14155b80620006da5750806060015163ffffffff1681610160015163ffffffff16115b15620007055760405163c35aa79d60e01b81526001600160401b038316600482015260240162000083565b6001600160401b038216600090815260096020526040812060010154600160881b900460e01b6001600160e01b03191690036200078557816001600160401b03167fd31c671936387b2f84ed402b553bd50c0e9c20408ea4e91a836d77b8180fb7248260405162000777919062001969565b60405180910390a2620007c9565b816001600160401b03167f1edd6f3553cfa16f10b95b195abae3a1cfca4783de4843f95d674b1e1df5ab2082604051620007c0919062001969565b60405180910390a25b8060096000846001600160401b03166001600160401b0316815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a8154816001600160401b0302191690836001600160401b031602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548160ff0219169083151502179055506101e08201518160010160116101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506200061d565b60005b81518110156200061657600082828151811062000a7e5762000a7e62001953565b6020026020010151600001519050600083838151811062000aa35762000aa362001953565b6020908102919091018101518101516001600160a01b03841660008181526008845260409081902080546001600160401b0319166001600160401b0385169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010162000a5d565b60005b825181101562000d9957600083828151811062000b4a5762000b4a62001953565b6020026020010151905060008160000151905060005b82602001515181101562000d8a5760008360200151828151811062000b895762000b8962001953565b602002602001015160200151905060008460200151838151811062000bb25762000bb262001953565b6020026020010151600001519050602063ffffffff16826080015163ffffffff16101562000c115760808201516040516312766e0160e11b81526001600160a01b038316600482015263ffffffff909116602482015260440162000083565b6001600160401b0384166000818152600a602090815260408083206001600160a01b0386168085529083529281902086518154938801518389015160608a015160808b015160a08c01511515600160901b0260ff60901b1963ffffffff928316600160701b021664ffffffffff60701b199383166a01000000000000000000000263ffffffff60501b1961ffff90961668010000000000000000029590951665ffffffffffff60401b19968416640100000000026001600160401b0319909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b59062000d77908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a3505060010162000b60565b50505080600101905062000b29565b5060005b81518110156200054457600082828151811062000dbe5762000dbe62001953565b6020026020010151600001519050600083838151811062000de35762000de362001953565b6020908102919091018101518101516001600160401b0384166000818152600a845260408082206001600160a01b038516808452955280822080546001600160981b03191690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a3505060010162000d9d565b600062000e76836001600160a01b03841662000ead565b90505b92915050565b600062000e76836001600160a01b03841662000fb1565b600062000e76836001600160a01b03841662001003565b6000818152600183016020526040812054801562000fa657600062000ed460018362001aad565b855490915060009062000eea9060019062001aad565b905081811462000f5657600086600001828154811062000f0e5762000f0e62001953565b906000526020600020015490508087600001848154811062000f345762000f3462001953565b6000918252602080832090910192909255918252600188019052604090208390555b855486908062000f6a5762000f6a62001acf565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505062000e79565b600091505062000e79565b600081815260018301602052604081205462000ffa5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000e79565b50600062000e79565b6000818152600183016020526040812054801562000fa65760006200102a60018362001aad565b8554909150600090620010409060019062001aad565b905080821462000f5657600086600001828154811062000f0e5762000f0e62001953565b634e487b7160e01b600052604160045260246000fd5b604080519081016001600160401b03811182821017156200109f576200109f62001064565b60405290565b60405160c081016001600160401b03811182821017156200109f576200109f62001064565b60405161020081016001600160401b03811182821017156200109f576200109f62001064565b604051601f8201601f191681016001600160401b03811182821017156200111b576200111b62001064565b604052919050565b80516001600160a01b03811681146200113b57600080fd5b919050565b805163ffffffff811681146200113b57600080fd5b6000606082840312156200116857600080fd5b604051606081016001600160401b03811182821017156200118d576200118d62001064565b604052825190915081906001600160601b0381168114620011ad57600080fd5b8152620011bd6020840162001123565b6020820152620011d06040840162001140565b60408201525092915050565b60006001600160401b03821115620011f857620011f862001064565b5060051b60200190565b600082601f8301126200121457600080fd5b815160206200122d6200122783620011dc565b620010f0565b8083825260208201915060208460051b8701019350868411156200125057600080fd5b602086015b848110156200127757620012698162001123565b835291830191830162001255565b509695505050505050565b600082601f8301126200129457600080fd5b81516020620012a76200122783620011dc565b82815260609283028501820192828201919087851115620012c757600080fd5b8387015b858110156200135a5780890382811215620012e65760008081fd5b620012f06200107a565b620012fb8362001123565b8152604080601f1984011215620013125760008081fd5b6200131c6200107a565b92506200132b88850162001123565b835283015160ff81168114620013415760008081fd5b82880152808701919091528452928401928101620012cb565b5090979650505050505050565b80516001600160401b03811681146200113b57600080fd5b805161ffff811681146200113b57600080fd5b805180151581146200113b57600080fd5b600082601f830112620013b557600080fd5b81516020620013c86200122783620011dc565b82815260059290921b84018101918181019086841115620013e857600080fd5b8286015b84811015620012775780516001600160401b03808211156200140d57600080fd5b908801906040601f19838c0381018213156200142857600080fd5b620014326200107a565b6200143f89860162001367565b815282850151848111156200145357600080fd5b8086019550508c603f8601126200146957600080fd5b8885015193506200147e6200122785620011dc565b84815260e09094028501830193898101908e8611156200149d57600080fd5b958401955b858710156200157657868f0360e0811215620014bd57600080fd5b620014c76200107a565b620014d28962001123565b815260c08683011215620014e557600080fd5b620014ef620010a5565b9150620014fe8d8a0162001140565b82526200150d878a0162001140565b8d8301526200151f60608a016200137f565b878301526200153160808a0162001140565b60608301526200154460a08a0162001140565b60808301526200155760c08a0162001392565b60a0830152808d0191909152825260e09690960195908a0190620014a2565b828b015250875250505092840192508301620013ec565b600082601f8301126200159f57600080fd5b81516020620015b26200122783620011dc565b82815260069290921b84018101918181019086841115620015d257600080fd5b8286015b84811015620012775760408189031215620015f15760008081fd5b620015fb6200107a565b620016068262001123565b81526200161585830162001367565b81860152835291830191604001620015d6565b80516001600160e01b0319811681146200113b57600080fd5b600082601f8301126200165357600080fd5b81516020620016666200122783620011dc565b82815261022092830285018201928282019190878511156200168757600080fd5b8387015b858110156200135a5780890382811215620016a65760008081fd5b620016b06200107a565b620016bb8362001367565b815261020080601f1984011215620016d35760008081fd5b620016dd620010ca565b9250620016ec88850162001392565b83526040620016fd8186016200137f565b8985015260606200171081870162001140565b82860152608091506200172582870162001140565b9085015260a06200173886820162001140565b8286015260c091506200174d8287016200137f565b9085015260e06200176086820162001140565b828601526101009150620017768287016200137f565b908501526101206200178a8682016200137f565b828601526101409150620017a08287016200137f565b90850152610160620017b486820162001140565b828601526101809150620017ca82870162001140565b908501526101a0620017de86820162001367565b828601526101c09150620017f482870162001140565b908501526101e06200180886820162001392565b828601526200181983870162001628565b9085015250508087019190915284529284019281016200168b565b6000806000806000806000610120888a0312156200185157600080fd5b6200185d898962001155565b60608901519097506001600160401b03808211156200187b57600080fd5b620018898b838c0162001202565b975060808a0151915080821115620018a057600080fd5b620018ae8b838c0162001202565b965060a08a0151915080821115620018c557600080fd5b620018d38b838c0162001282565b955060c08a0151915080821115620018ea57600080fd5b620018f88b838c01620013a3565b945060e08a01519150808211156200190f57600080fd5b6200191d8b838c016200158d565b93506101008a01519150808211156200193557600080fd5b50620019448a828b0162001641565b91505092959891949750929550565b634e487b7160e01b600052603260045260246000fd5b815115158152610200810160208301516200198a602084018261ffff169052565b506040830151620019a3604084018263ffffffff169052565b506060830151620019bc606084018263ffffffff169052565b506080830151620019d5608084018263ffffffff169052565b5060a0830151620019ec60a084018261ffff169052565b5060c083015162001a0560c084018263ffffffff169052565b5060e083015162001a1c60e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff9081169184019190915261016080850151821690840152610180808501516001600160401b0316908401526101a080850151909116908301526101c0808401511515908301526101e0928301516001600160e01b031916929091019190915290565b8181038181111562000e7957634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b60805160a05160c051615c5d62001b466000396000818161030501528181611bcf0152818161226b01526122d40152600081816102c90152818161193d015261199d015260008181610295015281816119c60152611a360152615c5d6000f3fe608060405234801561001057600080fd5b50600436106101e45760003560e01c806379ba50971161010f578063bf78e03f116100a2578063d63d3af211610071578063d63d3af214610ab2578063d8694ccd14610aba578063f2fde38b14610acd578063ffdb4b3714610ae057600080fd5b8063bf78e03f146109c8578063c4276bfc14610a75578063cdc73d5114610a97578063d02641a014610a9f57600080fd5b80638da5cb5b116100de5780638da5cb5b1461096757806391a2749a1461098f5780639ea60026146109a2578063a69c64c0146109b557600080fd5b806379ba5097146107c95780637afac322146107d1578063805f2132146107e457806382b49eb0146107f757600080fd5b80633937306f116101875780634ab35b0b116101565780634ab35b0b1461045f578063514e8cff1461049f5780636def4ce714610542578063770e2dc4146107b657600080fd5b80633937306f14610404578063407e10861461041957806341ed29e71461042c57806345ac924d1461043f57600080fd5b8063085318f8116101c3578063085318f81461037e578063181f5a771461039e5780632451a627146103e7578063325c868e146103fc57600080fd5b806241e5be146101e9578063061877e31461020f57806306285c6914610268575b600080fd5b6101fc6101f7366004614330565b610b28565b6040519081526020015b60405180910390f35b61024f61021d36600461436c565b73ffffffffffffffffffffffffffffffffffffffff1660009081526008602052604090205467ffffffffffffffff1690565b60405167ffffffffffffffff9091168152602001610206565b610332604080516060810182526000808252602082018190529181019190915260405180606001604052807f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1681526020017f000000000000000000000000000000000000000000000000000000000000000063ffffffff16815250905090565b6040805182516bffffffffffffffffffffffff16815260208084015173ffffffffffffffffffffffffffffffffffffffff16908201529181015163ffffffff1690820152606001610206565b61039161038c3660046143e4565b610b96565b60405161020691906144f6565b6103da6040518060400160405280601381526020017f46656551756f74657220312e362e302d6465760000000000000000000000000081525081565b6040516102069190614578565b6103ef610f08565b604051610206919061458b565b6101fc602481565b6104176104123660046145e5565b610f19565b005b610417610427366004614787565b6111ce565b61041761043a3660046148b9565b6111e2565b61045261044d3660046149f4565b611224565b6040516102069190614a36565b61047261046d36600461436c565b6112ef565b6040517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b6105356104ad366004614ab1565b60408051808201909152600080825260208201525067ffffffffffffffff166000908152600560209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811683527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169082015290565b6040516102069190614acc565b6107a9610550366004614ab1565b6040805161020081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810182905261012081018290526101408101829052610160810182905261018081018290526101a081018290526101c081018290526101e08101919091525067ffffffffffffffff908116600090815260096020908152604091829020825161020081018452815460ff8082161515835261ffff61010080840482169685019690965263ffffffff630100000084048116978501979097526701000000000000008304871660608501526b0100000000000000000000008304871660808501526f010000000000000000000000000000008304811660a085015271010000000000000000000000000000000000808404881660c086015275010000000000000000000000000000000000000000008404821660e08087019190915277010000000000000000000000000000000000000000000000850483169786019790975279010000000000000000000000000000000000000000000000000084049091166101208501527b01000000000000000000000000000000000000000000000000000000909204861661014084015260019093015480861661016084015264010000000081049096166101808301526c0100000000000000000000000086049094166101a0820152700100000000000000000000000000000000850490911615156101c08201527fffffffff0000000000000000000000000000000000000000000000000000000092909304901b166101e082015290565b6040516102069190614b07565b6104176107c4366004614d1e565b6112fa565b61041761130c565b6104176107df366004615038565b611409565b6104176107f23660046150de565b61141b565b61090761080536600461514a565b6040805160c081018252600080825260208201819052918101829052606081018290526080810182905260a08101919091525067ffffffffffffffff919091166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff94909416835292815290829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a082015290565b6040516102069190600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b61041761099d366004615174565b611903565b6104176109b0366004615235565b611914565b6104176109c3366004615442565b611925565b610a416109d636600461436c565b6040805180820182526000808252602091820181905273ffffffffffffffffffffffffffffffffffffffff93841681526007825282902082518084019093525492831682527401000000000000000000000000000000000000000090920460ff169181019190915290565b60408051825173ffffffffffffffffffffffffffffffffffffffff16815260209283015160ff169281019290925201610206565b610a88610a83366004615507565b611936565b60405161020693929190615576565b6103ef611b2c565b610535610aad36600461436c565b611b38565b6101fc601281565b6101fc610ac8366004615597565b611c7c565b610417610adb36600461436c565b612186565b610af3610aee3660046155ec565b612197565b604080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff938416815292909116602083015201610206565b6000610b3382612322565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610b5a85612322565b610b82907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1685615645565b610b8c919061565c565b90505b9392505050565b67ffffffffffffffff8086166000908152600960205260409020600101546060917101000000000000000000000000000000000090910460e01b908590811115610be257610be2614620565b604051908082528060200260200182016040528015610c1557816020015b6060815260200190600190039081610c005790505b50915060005b85811015610efd576000858583818110610c3757610c37615697565b610c4d926020604090920201908101915061436c565b90506000888884818110610c6357610c63615697565b9050602002810190610c7591906156c6565b610c83906040810190615704565b9150506020811115610d385767ffffffffffffffff8a166000908152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff861684529091529020546e010000000000000000000000000000900463ffffffff16811115610d38576040517f36f536ca00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff831660048201526024015b60405180910390fd5b610da8848a8a86818110610d4e57610d4e615697565b9050602002810190610d6091906156c6565b610d6e906020810190615704565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123bc92505050565b67ffffffffffffffff8a166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff871684528252808320815160c081018352905463ffffffff8082168352640100000000820481168386015268010000000000000000820461ffff16838501526a01000000000000000000008204811660608401526e010000000000000000000000000000820481166080840152720100000000000000000000000000000000000090910460ff16151560a08301908152958552600990935290832054935190937b0100000000000000000000000000000000000000000000000000000090049091169190610ea75781610ead565b82606001515b6040805163ffffffff8316602082015291925001604051602081830303815290604052888781518110610ee257610ee2615697565b60200260200101819052505050505050806001019050610c1b565b505095945050505050565b6060610f146002612413565b905090565b610f21612420565b6000610f2d8280615769565b9050905060005b81811015611077576000610f488480615769565b83818110610f5857610f58615697565b905060400201803603810190610f6e91906157fd565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885173ffffffffffffffffffffffffffffffffffffffff9081166000908152600690975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a926110669290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a250600101610f34565b5060006110876020840184615769565b9050905060005b818110156111c85760006110a56020860186615769565b838181106110b5576110b5615697565b9050604002018036038101906110cb919061583a565b604080518082018252602080840180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff908116845263ffffffff42818116858701908152885167ffffffffffffffff9081166000908152600590975295889020965190519092167c010000000000000000000000000000000000000000000000000000000002919092161790935584519051935194955016927fdd84a3fa9ef9409f550d54d6affec7e9c480c878c6ab27b78912a03e1b371c6e926111b79290917bffffffffffffffffffffffffffffffffffffffffffffffffffffffff929092168252602082015260400190565b60405180910390a25060010161108e565b50505050565b6111d6612465565b6111df816124e6565b50565b6111ea612465565b60005b81518110156112205761121882828151811061120b5761120b615697565b60200260200101516125e4565b6001016111ed565b5050565b60608160008167ffffffffffffffff81111561124257611242614620565b60405190808252806020026020018201604052801561128757816020015b60408051808201909152600080825260208201528152602001906001900390816112605790505b50905060005b828110156112e4576112bf8686838181106112aa576112aa615697565b9050602002016020810190610aad919061436c565b8282815181106112d1576112d1615697565b602090810291909101015260010161128d565b509150505b92915050565b60006112e982612322565b611302612465565b61122082826127b6565b60015473ffffffffffffffffffffffffffffffffffffffff16331461138d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610d2f565b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b611411612465565b6112208282612bc3565b600080600061145f87878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250612d0a92505050565b92509250925061147133838584612d25565b600061147f8587018761585d565b905060005b81518110156118f8576000600760008484815181106114a5576114a5615697565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160009081205474010000000000000000000000000000000000000000900460ff1691508190036115665782828151811061150f5761150f615697565b6020908102919091010151516040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d2f565b60006115af60128386868151811061158057611580615697565b6020026020010151602001517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612e7d565b9050600660008585815181106115c7576115c7615697565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001601c9054906101000a900463ffffffff1663ffffffff1684848151811061163957611639615697565b60200260200101516040015163ffffffff1610156117435783838151811061166357611663615697565b60200260200101516000015184848151811061168157611681615697565b602002602001015160400151600660008787815181106116a3576116a3615697565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff90811683529082019290925260409081016000205490517f191ec70600000000000000000000000000000000000000000000000000000000815293909116600484015263ffffffff91821660248401527c01000000000000000000000000000000000000000000000000000000009004166044820152606401610d2f565b6040518060400160405280827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260200185858151811061178457611784615697565b60200260200101516040015163ffffffff16815250600660008686815181106117af576117af615697565b6020908102919091018101515173ffffffffffffffffffffffffffffffffffffffff168252818101929092526040016000208251929091015163ffffffff167c0100000000000000000000000000000000000000000000000000000000027bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909216919091179055835184908490811061184757611847615697565b60200260200101516000015173ffffffffffffffffffffffffffffffffffffffff167f52f50aa6d1a95a4595361ecf953d095f125d442e4673716dede699e049de148a8286868151811061189d5761189d615697565b6020026020010151604001516040516118e69291907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff92909216825263ffffffff16602082015260400190565b60405180910390a25050600101611484565b505050505050505050565b61190b612465565b6111df81612f49565b61191c612465565b6111df816130d5565b61192d612465565b6111df8161357b565b60008060607f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff1603611996578592506119c4565b6119c187877f0000000000000000000000000000000000000000000000000000000000000000610b28565b92505b7f00000000000000000000000000000000000000000000000000000000000000006bffffffffffffffffffffffff16831115611a63576040517f6a92a483000000000000000000000000000000000000000000000000000000008152600481018490526bffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000166024820152604401610d2f565b67ffffffffffffffff881660009081526009602052604081206001015463ffffffff1690611a92878784613665565b9050806020015193508484611b19836040805182516024820152602092830151151560448083019190915282518083039091018152606490910190915290810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f181dcf100000000000000000000000000000000000000000000000000000000017905290565b9450945094505050955095509592505050565b6060610f14600b612413565b604080518082019091526000808252602082015273ffffffffffffffffffffffffffffffffffffffff82166000908152600660209081526040918290208251808401909352547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116835263ffffffff7c010000000000000000000000000000000000000000000000000000000090910481169183018290527f00000000000000000000000000000000000000000000000000000000000000001690611bfa9042615924565b1015611c065792915050565b73ffffffffffffffffffffffffffffffffffffffff8381166000908152600760209081526040918290208251808401909352549283168083527401000000000000000000000000000000000000000090930460ff169082015290611c6b575092915050565b611c748161380e565b949350505050565b67ffffffffffffffff8083166000908152600960209081526040808320815161020081018352815460ff808216151580845261ffff61010080850482169886019890985263ffffffff630100000085048116978601979097526701000000000000008404871660608601526b0100000000000000000000008404871660808601526f010000000000000000000000000000008404811660a086015271010000000000000000000000000000000000808504881660c087015275010000000000000000000000000000000000000000008504821660e08088019190915277010000000000000000000000000000000000000000000000860483169987019990995279010000000000000000000000000000000000000000000000000085049091166101208601527b01000000000000000000000000000000000000000000000000000000909304861661014085015260019094015480861661016085015264010000000081049098166101808401526c0100000000000000000000000088049094166101a0830152700100000000000000000000000000000000870490931615156101c08201527fffffffff000000000000000000000000000000000000000000000000000000009290950490921b166101e0840152909190611e96576040517f99ac52f200000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610d2f565b611eb1611ea9608085016060860161436c565b600b9061399d565b611f1057611ec5608084016060850161436c565b6040517f2502348c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9091166004820152602401610d2f565b6000611f1f6040850185615769565b9150611f7b905082611f346020870187615704565b905083611f418880615704565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506139cc92505050565b600080611f97611f91608088016060890161436c565b88612197565b9092509050600080808515611fda57611fce878b611fbb60808d0160608e0161436c565b88611fc960408f018f615769565b613a76565b91945092509050611ffa565b6101a0870151611ff79063ffffffff16662386f26fc10000615645565b92505b61010087015160009061ffff161561203e5761203b886dffffffffffffffffffffffffffff607088901c1661203260208e018e615704565b90508a86613d4e565b90505b61018088015160009067ffffffffffffffff1661206761206160808e018e615704565b8c613dfe565b600001518563ffffffff168b60a0015161ffff168e806020019061208b9190615704565b612096929150615645565b8c6080015163ffffffff166120ab9190615937565b6120b59190615937565b6120bf9190615937565b6120d9906dffffffffffffffffffffffffffff8916615645565b6120e39190615645565b9050867bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168282600860008f606001602081019061211d919061436c565b73ffffffffffffffffffffffffffffffffffffffff1681526020810191909152604001600020546121589067ffffffffffffffff1689615645565b6121629190615937565b61216c9190615937565b612176919061565c565b9c9b505050505050505050505050565b61218e612465565b6111df81613ebf565b67ffffffffffffffff811660009081526005602090815260408083208151808301909252547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811682527c0100000000000000000000000000000000000000000000000000000000900463ffffffff169181018290528291820361224f576040517f2e59db3a00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff85166004820152602401610d2f565b6000816020015163ffffffff16426122679190615924565b90507f000000000000000000000000000000000000000000000000000000000000000063ffffffff16811115612308576040517ff08bcb3e00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff8616600482015263ffffffff7f000000000000000000000000000000000000000000000000000000000000000016602482015260448101829052606401610d2f565b61231186612322565b9151919350909150505b9250929050565b60008061232e83611b38565b9050806020015163ffffffff1660001480612366575080517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16155b156123b5576040517f06439c6b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610d2f565b5192915050565b7fd7ed2ad4000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016112205761240e81613fb4565b505050565b60606000610b8f83614067565b61242b60023361399d565b612463576040517fd86ad9cf000000000000000000000000000000000000000000000000000000008152336004820152602401610d2f565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314612463576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610d2f565b60005b815181101561122057600082828151811061250657612506615697565b60209081029190910181015180518183015173ffffffffffffffffffffffffffffffffffffffff80831660008181526007875260409081902084518154868a018051929096167fffffffffffffffffffffff00000000000000000000000000000000000000000090911681177401000000000000000000000000000000000000000060ff9384160217909255825191825293519093169683019690965293955091939092917f08a5f7f5bb38a81d8e43aca13ecd76431dbf8816ae4699affff7b00b2fc1c464910160405180910390a25050508060010190506124e9565b600061269d82600001518360600151846020015185604001516040805173ffffffffffffffffffffffffffffffffffffffff80871660208301528516918101919091527fffffffffffffffffffff00000000000000000000000000000000000000000000831660608201527fffff0000000000000000000000000000000000000000000000000000000000008216608082015260009060a001604051602081830303815290604052805190602001209050949350505050565b60808301516000828152600460205260409081902080549215157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00909316929092179091555190915081907f32a4ba3fa3351b11ad555d4c8ec70a744e8705607077a946807030d64b6ab1a3906127aa908590600060a08201905073ffffffffffffffffffffffffffffffffffffffff8084511683527fffffffffffffffffffff0000000000000000000000000000000000000000000060208501511660208401527fffff00000000000000000000000000000000000000000000000000000000000060408501511660408401528060608501511660608401525060808301511515608083015292915050565b60405180910390a25050565b60005b8251811015612adf5760008382815181106127d6576127d6615697565b6020026020010151905060008160000151905060005b826020015151811015612ad15760008360200151828151811061281157612811615697565b602002602001015160200151905060008460200151838151811061283757612837615697565b6020026020010151600001519050602063ffffffff16826080015163ffffffff1610156128ba5760808201516040517f24ecdc0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8316600482015263ffffffff9091166024820152604401610d2f565b67ffffffffffffffff84166000818152600a6020908152604080832073ffffffffffffffffffffffffffffffffffffffff86168085529083529281902086518154938801518389015160608a015160808b015160a08c015115157201000000000000000000000000000000000000027fffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffff63ffffffff9283166e01000000000000000000000000000002167fffffffffffffffffffffffffff0000000000ffffffffffffffffffffffffffff9383166a0100000000000000000000027fffffffffffffffffffffffffffffffffffff00000000ffffffffffffffffffff61ffff9096166801000000000000000002959095167fffffffffffffffffffffffffffffffffffff000000000000ffffffffffffffff968416640100000000027fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000909b16939097169290921798909817939093169390931717919091161792909217909155519091907f94967ae9ea7729ad4f54021c1981765d2b1d954f7c92fbec340aa0a54f46b8b590612abf908690600060c08201905063ffffffff80845116835280602085015116602084015261ffff60408501511660408401528060608501511660608401528060808501511660808401525060a0830151151560a083015292915050565b60405180910390a350506001016127ec565b5050508060010190506127b9565b5060005b815181101561240e576000828281518110612b0057612b00615697565b60200260200101516000015190506000838381518110612b2257612b22615697565b60209081029190910181015181015167ffffffffffffffff84166000818152600a8452604080822073ffffffffffffffffffffffffffffffffffffffff8516808452955280822080547fffffffffffffffffffffffffff000000000000000000000000000000000000001690555192945090917f4de5b1bcbca6018c11303a2c3f4a4b4f22a1c741d8c4ba430d246ac06c5ddf8b9190a35050600101612ae3565b60005b8251811015612c6657612bfc838281518110612be457612be4615697565b6020026020010151600b6140c390919063ffffffff16565b15612c5e57828181518110612c1357612c13615697565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167fdf1b1bd32a69711488d71554706bb130b1fc63a5fa1a2cd85e8440f84065ba2360405160405180910390a25b600101612bc6565b5060005b815181101561240e57612ca0828281518110612c8857612c88615697565b6020026020010151600b6140e590919063ffffffff16565b15612d0257818181518110612cb757612cb7615697565b602002602001015173ffffffffffffffffffffffffffffffffffffffff167f1795838dc8ab2ffc5f431a1729a6afa0b587f982f7b2be0b9d7187a1ef547f9160405160405180910390a25b600101612c6a565b6040810151604a820151605e90920151909260609290921c91565b6040805173ffffffffffffffffffffffffffffffffffffffff868116602080840191909152908616828401527fffffffffffffffffffff00000000000000000000000000000000000000000000851660608301527fffff00000000000000000000000000000000000000000000000000000000000084166080808401919091528351808403909101815260a09092018352815191810191909120600081815260049092529190205460ff16612e76576040517f097e17ff00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8087166004830152851660248201527fffffffffffffffffffff00000000000000000000000000000000000000000000841660448201527fffff00000000000000000000000000000000000000000000000000000000000083166064820152608401610d2f565b5050505050565b600080612e8a848661594a565b9050600060248260ff161115612ec457612ea8602460ff8416615924565b612eb390600a615a83565b612ebd908561565c565b9050612eea565b612ed260ff83166024615924565b612edd90600a615a83565b612ee79085615645565b90505b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff811115612f40576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b95945050505050565b602081015160005b8151811015612fe4576000828281518110612f6e57612f6e615697565b60200260200101519050612f8c81600261410790919063ffffffff16565b15612fdb5760405173ffffffffffffffffffffffffffffffffffffffff821681527fc3803387881faad271c47728894e3e36fac830ffc8602ca6fc07733cbda775809060200160405180910390a15b50600101612f51565b50815160005b81518110156111c857600082828151811061300757613007615697565b60200260200101519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603613077576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130826002826140c3565b5060405173ffffffffffffffffffffffffffffffffffffffff821681527feb1b9b92e50b7f88f9ff25d56765095ac6e91540eee214906f4036a908ffbdef9060200160405180910390a150600101612fea565b60005b81518110156112205760008282815181106130f5576130f5615697565b60200260200101519050600083838151811061311357613113615697565b60200260200101516000015190506000826020015190508167ffffffffffffffff166000148061314c575061016081015163ffffffff16155b8061319e57506101e08101517fffffffff00000000000000000000000000000000000000000000000000000000167f2812d52c0000000000000000000000000000000000000000000000000000000014155b806131bd5750806060015163ffffffff1681610160015163ffffffff16115b15613200576040517fc35aa79d00000000000000000000000000000000000000000000000000000000815267ffffffffffffffff83166004820152602401610d2f565b67ffffffffffffffff821660009081526009602052604081206001015471010000000000000000000000000000000000900460e01b7fffffffff000000000000000000000000000000000000000000000000000000001690036132a4578167ffffffffffffffff167fd31c671936387b2f84ed402b553bd50c0e9c20408ea4e91a836d77b8180fb724826040516132979190614b07565b60405180910390a26132e7565b8167ffffffffffffffff167f1edd6f3553cfa16f10b95b195abae3a1cfca4783de4843f95d674b1e1df5ab20826040516132de9190614b07565b60405180910390a25b80600960008467ffffffffffffffff1667ffffffffffffffff16815260200190815260200160002060008201518160000160006101000a81548160ff02191690831515021790555060208201518160000160016101000a81548161ffff021916908361ffff16021790555060408201518160000160036101000a81548163ffffffff021916908363ffffffff16021790555060608201518160000160076101000a81548163ffffffff021916908363ffffffff160217905550608082015181600001600b6101000a81548163ffffffff021916908363ffffffff16021790555060a082015181600001600f6101000a81548161ffff021916908361ffff16021790555060c08201518160000160116101000a81548163ffffffff021916908363ffffffff16021790555060e08201518160000160156101000a81548161ffff021916908361ffff1602179055506101008201518160000160176101000a81548161ffff021916908361ffff1602179055506101208201518160000160196101000a81548161ffff021916908361ffff16021790555061014082015181600001601b6101000a81548163ffffffff021916908363ffffffff1602179055506101608201518160010160006101000a81548163ffffffff021916908363ffffffff1602179055506101808201518160010160046101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506101a082015181600101600c6101000a81548163ffffffff021916908363ffffffff1602179055506101c08201518160010160106101000a81548160ff0219169083151502179055506101e08201518160010160116101000a81548163ffffffff021916908360e01c02179055509050505050508060010190506130d8565b60005b815181101561122057600082828151811061359b5761359b615697565b602002602001015160000151905060008383815181106135bd576135bd615697565b60209081029190910181015181015173ffffffffffffffffffffffffffffffffffffffff841660008181526008845260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001667ffffffffffffffff85169081179091559051908152919350917fbb77da6f7210cdd16904228a9360133d1d7dfff99b1bc75f128da5b53e28f97d910160405180910390a2505060010161357e565b604080518082019091526000808252602082015260008390036136a657506040805180820190915267ffffffffffffffff8216815260006020820152610b8f565b60006136b28486615a8f565b905060006136c38560048189615ad5565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509293505050507fffffffff0000000000000000000000000000000000000000000000000000000082167fe7e230f0000000000000000000000000000000000000000000000000000000000161376057808060200190518101906137579190615aff565b92505050610b8f565b7f6859a837000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316016137dc576040518060400160405280828060200190518101906137c89190615b2b565b815260006020909101529250610b8f915050565b6040517f5247fdce00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080518082019091526000808252602082015260008260000151905060008173ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613878573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061389c9190615b5e565b50505091505060008112156138dd576040517f10cb51d100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061395c8373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561392d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139519190615bae565b866020015184612e7d565b604080518082019091527bffffffffffffffffffffffffffffffffffffffffffffffffffffffff909116815263ffffffff4216602082015295945050505050565b73ffffffffffffffffffffffffffffffffffffffff811660009081526001830160205260408120541515610b8f565b836040015163ffffffff16831115613a255760408085015190517f8693378900000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260248101849052604401610d2f565b836020015161ffff16821115613a67576040517f4c056b6a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111c8846101e00151826123bc565b6000808083815b81811015613d40576000878783818110613a9957613a99615697565b905060400201803603810190613aaf9190615bcb565b67ffffffffffffffff8c166000908152600a60209081526040808320845173ffffffffffffffffffffffffffffffffffffffff168452825291829020825160c081018452905463ffffffff8082168352640100000000820481169383019390935268010000000000000000810461ffff16938201939093526a01000000000000000000008304821660608201526e01000000000000000000000000000083049091166080820152720100000000000000000000000000000000000090910460ff16151560a0820181905291925090613bcf576101208d0151613b9c9061ffff16662386f26fc10000615645565b613ba69088615937565b96508c610140015186613bb99190615c04565b9550613bc6602086615c04565b94505050613d38565b604081015160009061ffff1615613c885760008c73ffffffffffffffffffffffffffffffffffffffff16846000015173ffffffffffffffffffffffffffffffffffffffff1614613c2b578351613c2490612322565b9050613c2e565b508a5b620186a0836040015161ffff16613c708660200151847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1661412990919063ffffffff16565b613c7a9190615645565b613c84919061565c565b9150505b6060820151613c979088615c04565b9650816080015186613ca99190615c04565b8251909650600090613cc89063ffffffff16662386f26fc10000615645565b905080821015613ce757613cdc818a615937565b985050505050613d38565b6000836020015163ffffffff16662386f26fc10000613d069190615645565b905080831115613d2657613d1a818b615937565b99505050505050613d38565b613d30838b615937565b995050505050505b600101613a7d565b505096509650969350505050565b60008063ffffffff8316613d6461016086615645565b613d70876101c0615937565b613d7a9190615937565b613d849190615937565b905060008760c0015163ffffffff168860e0015161ffff1683613da79190615645565b613db19190615937565b61010089015190915061ffff16613dd86dffffffffffffffffffffffffffff891683615645565b613de29190615645565b613df290655af3107a4000615645565b98975050505050505050565b60408051808201909152600080825260208201526000613e2a858585610160015163ffffffff16613665565b9050826060015163ffffffff1681600001511115613e74576040517f4c4fc93a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826101c001518015613e8857508060200151155b15610b8c576040517fee433e9900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff821603613f3e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610d2f565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60008151602014613ff357816040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610d2f9190614578565b6000828060200190518101906140099190615b2b565b905073ffffffffffffffffffffffffffffffffffffffff81118061402e575061040081105b156112e957826040517f8d666f60000000000000000000000000000000000000000000000000000000008152600401610d2f9190614578565b6060816000018054806020026020016040519081016040528092919081815260200182805480156140b757602002820191906000526020600020905b8154815260200190600101908083116140a3575b50505050509050919050565b6000610b8f8373ffffffffffffffffffffffffffffffffffffffff8416614166565b6000610b8f8373ffffffffffffffffffffffffffffffffffffffff84166141b5565b6000610b8f8373ffffffffffffffffffffffffffffffffffffffff84166142af565b6000670de0b6b3a764000061415c837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8616615645565b610b8f919061565c565b60008181526001830160205260408120546141ad575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556112e9565b5060006112e9565b6000818152600183016020526040812054801561429e5760006141d9600183615924565b85549091506000906141ed90600190615924565b905080821461425257600086600001828154811061420d5761420d615697565b906000526020600020015490508087600001848154811061423057614230615697565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061426357614263615c21565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506112e9565b60009150506112e9565b5092915050565b6000818152600183016020526040812054801561429e5760006142d3600183615924565b85549091506000906142e790600190615924565b905081811461425257600086600001828154811061420d5761420d615697565b803573ffffffffffffffffffffffffffffffffffffffff8116811461432b57600080fd5b919050565b60008060006060848603121561434557600080fd5b61434e84614307565b92506020840135915061436360408501614307565b90509250925092565b60006020828403121561437e57600080fd5b610b8f82614307565b803567ffffffffffffffff8116811461432b57600080fd5b60008083601f8401126143b157600080fd5b50813567ffffffffffffffff8111156143c957600080fd5b6020830191508360208260051b850101111561231b57600080fd5b6000806000806000606086880312156143fc57600080fd5b61440586614387565b9450602086013567ffffffffffffffff8082111561442257600080fd5b61442e89838a0161439f565b9096509450604088013591508082111561444757600080fd5b818801915088601f83011261445b57600080fd5b81358181111561446a57600080fd5b8960208260061b850101111561447f57600080fd5b9699959850939650602001949392505050565b6000815180845260005b818110156144b85760208185018101518683018201520161449c565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b600060208083016020845280855180835260408601915060408160051b87010192506020870160005b8281101561456b577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0888603018452614559858351614492565b9450928501929085019060010161451f565b5092979650505050505050565b602081526000610b8f6020830184614492565b6020808252825182820181905260009190848201906040850190845b818110156145d957835173ffffffffffffffffffffffffffffffffffffffff16835292840192918401916001016145a7565b50909695505050505050565b6000602082840312156145f757600080fd5b813567ffffffffffffffff81111561460e57600080fd5b820160408185031215610b8f57600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040805190810167ffffffffffffffff8111828210171561467257614672614620565b60405290565b60405160a0810167ffffffffffffffff8111828210171561467257614672614620565b60405160c0810167ffffffffffffffff8111828210171561467257614672614620565b604051610200810167ffffffffffffffff8111828210171561467257614672614620565b6040516060810167ffffffffffffffff8111828210171561467257614672614620565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111828210171561474c5761474c614620565b604052919050565b600067ffffffffffffffff82111561476e5761476e614620565b5060051b60200190565b60ff811681146111df57600080fd5b6000602080838503121561479a57600080fd5b823567ffffffffffffffff8111156147b157600080fd5b8301601f810185136147c257600080fd5b80356147d56147d082614754565b614705565b818152606091820283018401918482019190888411156147f457600080fd5b938501935b8385101561489457848903818112156148125760008081fd5b61481a61464f565b61482387614307565b81526040807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840112156148575760008081fd5b61485f61464f565b925061486c898901614307565b835287013561487a81614778565b8289015280880191909152835293840193918501916147f9565b50979650505050505050565b80151581146111df57600080fd5b803561432b816148a0565b600060208083850312156148cc57600080fd5b823567ffffffffffffffff8111156148e357600080fd5b8301601f810185136148f457600080fd5b80356149026147d082614754565b81815260a0918202830184019184820191908884111561492157600080fd5b938501935b838510156148945780858a03121561493e5760008081fd5b614946614678565b61494f86614307565b8152868601357fffffffffffffffffffff00000000000000000000000000000000000000000000811681146149845760008081fd5b818801526040868101357fffff000000000000000000000000000000000000000000000000000000000000811681146149bd5760008081fd5b9082015260606149ce878201614307565b908201526080868101356149e1816148a0565b9082015283529384019391850191614926565b60008060208385031215614a0757600080fd5b823567ffffffffffffffff811115614a1e57600080fd5b614a2a8582860161439f565b90969095509350505050565b602080825282518282018190526000919060409081850190868401855b82811015614aa457614a9484835180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16825260209081015163ffffffff16910152565b9284019290850190600101614a53565b5091979650505050505050565b600060208284031215614ac357600080fd5b610b8f82614387565b81517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16815260208083015163ffffffff1690820152604081016112e9565b81511515815261020081016020830151614b27602084018261ffff169052565b506040830151614b3f604084018263ffffffff169052565b506060830151614b57606084018263ffffffff169052565b506080830151614b6f608084018263ffffffff169052565b5060a0830151614b8560a084018261ffff169052565b5060c0830151614b9d60c084018263ffffffff169052565b5060e0830151614bb360e084018261ffff169052565b506101008381015161ffff9081169184019190915261012080850151909116908301526101408084015163ffffffff90811691840191909152610160808501518216908401526101808085015167ffffffffffffffff16908401526101a080850151909116908301526101c0808401511515908301526101e0808401517fffffffff000000000000000000000000000000000000000000000000000000008116828501525b505092915050565b803563ffffffff8116811461432b57600080fd5b803561ffff8116811461432b57600080fd5b600082601f830112614c9757600080fd5b81356020614ca76147d083614754565b82815260069290921b84018101918181019086841115614cc657600080fd5b8286015b84811015614d135760408189031215614ce35760008081fd5b614ceb61464f565b614cf482614387565b8152614d01858301614307565b81860152835291830191604001614cca565b509695505050505050565b60008060408385031215614d3157600080fd5b67ffffffffffffffff83351115614d4757600080fd5b83601f843585010112614d5957600080fd5b614d696147d08435850135614754565b8335840180358083526020808401939260059290921b90910101861015614d8f57600080fd5b602085358601015b85358601803560051b01602001811015614f9c5767ffffffffffffffff81351115614dc157600080fd5b8035863587010160407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828a03011215614dfa57600080fd5b614e0261464f565b614e0e60208301614387565b815267ffffffffffffffff60408301351115614e2957600080fd5b88603f604084013584010112614e3e57600080fd5b614e546147d06020604085013585010135614754565b6020604084810135850182810135808552928401939260e00201018b1015614e7b57600080fd5b6040808501358501015b6040858101358601602081013560e0020101811015614f7d5760e0818d031215614eae57600080fd5b614eb661464f565b614ebf82614307565b815260c07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0838f03011215614ef357600080fd5b614efb61469b565b614f0760208401614c60565b8152614f1560408401614c60565b6020820152614f2660608401614c74565b6040820152614f3760808401614c60565b6060820152614f4860a08401614c60565b6080820152614f5a60c08401356148a0565b60c083013560a0820152602082810191909152908452929092019160e001614e85565b5080602084015250508085525050602083019250602081019050614d97565b5092505067ffffffffffffffff60208401351115614fb957600080fd5b614fc98460208501358501614c86565b90509250929050565b600082601f830112614fe357600080fd5b81356020614ff36147d083614754565b8083825260208201915060208460051b87010193508684111561501557600080fd5b602086015b84811015614d135761502b81614307565b835291830191830161501a565b6000806040838503121561504b57600080fd5b823567ffffffffffffffff8082111561506357600080fd5b61506f86838701614fd2565b9350602085013591508082111561508557600080fd5b5061509285828601614fd2565b9150509250929050565b60008083601f8401126150ae57600080fd5b50813567ffffffffffffffff8111156150c657600080fd5b60208301915083602082850101111561231b57600080fd5b600080600080604085870312156150f457600080fd5b843567ffffffffffffffff8082111561510c57600080fd5b6151188883890161509c565b9096509450602087013591508082111561513157600080fd5b5061513e8782880161509c565b95989497509550505050565b6000806040838503121561515d57600080fd5b61516683614387565b9150614fc960208401614307565b60006020828403121561518657600080fd5b813567ffffffffffffffff8082111561519e57600080fd5b90830190604082860312156151b257600080fd5b6151ba61464f565b8235828111156151c957600080fd5b6151d587828601614fd2565b8252506020830135828111156151ea57600080fd5b6151f687828601614fd2565b60208301525095945050505050565b80357fffffffff000000000000000000000000000000000000000000000000000000008116811461432b57600080fd5b6000602080838503121561524857600080fd5b823567ffffffffffffffff81111561525f57600080fd5b8301601f8101851361527057600080fd5b803561527e6147d082614754565b818152610220918202830184019184820191908884111561529e57600080fd5b938501935b8385101561489457848903818112156152bc5760008081fd5b6152c461464f565b6152cd87614387565b8152610200807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0840112156153025760008081fd5b61530a6146be565b92506153178989016148ae565b83526040615326818a01614c74565b8a8501526060615337818b01614c60565b828601526080915061534a828b01614c60565b9085015260a061535b8a8201614c60565b8286015260c0915061536e828b01614c74565b9085015260e061537f8a8201614c60565b828601526101009150615393828b01614c74565b908501526101206153a58a8201614c74565b8286015261014091506153b9828b01614c74565b908501526101606153cb8a8201614c60565b8286015261018091506153df828b01614c60565b908501526101a06153f18a8201614387565b828601526101c09150615405828b01614c60565b908501526101e06154178a82016148ae565b82860152615426838b01615205565b90850152505080880191909152835293840193918501916152a3565b6000602080838503121561545557600080fd5b823567ffffffffffffffff81111561546c57600080fd5b8301601f8101851361547d57600080fd5b803561548b6147d082614754565b81815260069190911b820183019083810190878311156154aa57600080fd5b928401925b828410156154fc57604084890312156154c85760008081fd5b6154d061464f565b6154d985614307565b81526154e6868601614387565b81870152825260409390930192908401906154af565b979650505050505050565b60008060008060006080868803121561551f57600080fd5b61552886614387565b945061553660208701614307565b935060408601359250606086013567ffffffffffffffff81111561555957600080fd5b6155658882890161509c565b969995985093965092949392505050565b8381528215156020820152606060408201526000612f406060830184614492565b600080604083850312156155aa57600080fd5b6155b383614387565b9150602083013567ffffffffffffffff8111156155cf57600080fd5b830160a081860312156155e157600080fd5b809150509250929050565b600080604083850312156155ff57600080fd5b61560883614307565b9150614fc960208401614387565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820281158282048414176112e9576112e9615616565b600082615692577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff618336030181126156fa57600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261573957600080fd5b83018035915067ffffffffffffffff82111561575457600080fd5b60200191503681900382131561231b57600080fd5b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe184360301811261579e57600080fd5b83018035915067ffffffffffffffff8211156157b957600080fd5b6020019150600681901b360382131561231b57600080fd5b80357bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8116811461432b57600080fd5b60006040828403121561580f57600080fd5b61581761464f565b61582083614307565b815261582e602084016157d1565b60208201529392505050565b60006040828403121561584c57600080fd5b61585461464f565b61582083614387565b6000602080838503121561587057600080fd5b823567ffffffffffffffff81111561588757600080fd5b8301601f8101851361589857600080fd5b80356158a66147d082614754565b818152606091820283018401918482019190888411156158c557600080fd5b938501935b838510156148945780858a0312156158e25760008081fd5b6158ea6146e2565b6158f386614307565b81526159008787016157d1565b878201526040615911818801614c60565b90820152835293840193918501916158ca565b818103818111156112e9576112e9615616565b808201808211156112e9576112e9615616565b60ff81811683821601908111156112e9576112e9615616565b600181815b808511156159bc57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048211156159a2576159a2615616565b808516156159af57918102915b93841c9390800290615968565b509250929050565b6000826159d3575060016112e9565b816159e0575060006112e9565b81600181146159f65760028114615a0057615a1c565b60019150506112e9565b60ff841115615a1157615a11615616565b50506001821b6112e9565b5060208310610133831016604e8410600b8410161715615a3f575081810a6112e9565b615a498383615963565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115615a7b57615a7b615616565b029392505050565b6000610b8f83836159c4565b7fffffffff000000000000000000000000000000000000000000000000000000008135818116916004851015614c585760049490940360031b84901b1690921692915050565b60008085851115615ae557600080fd5b83861115615af257600080fd5b5050820193919092039150565b600060408284031215615b1157600080fd5b615b1961464f565b82518152602083015161582e816148a0565b600060208284031215615b3d57600080fd5b5051919050565b805169ffffffffffffffffffff8116811461432b57600080fd5b600080600080600060a08688031215615b7657600080fd5b615b7f86615b44565b9450602086015193506040860151925060608601519150615ba260808701615b44565b90509295509295909350565b600060208284031215615bc057600080fd5b8151610b8f81614778565b600060408284031215615bdd57600080fd5b615be561464f565b615bee83614307565b8152602083013560208201528091505092915050565b63ffffffff8181168382160190808211156142a8576142a8615616565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fdfea164736f6c6343000818000a", } var FeeQuoterABI = FeeQuoterMetaData.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 9908bcfcd8..b3ed8635dd 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 @@ -11,7 +11,7 @@ commit_store_helper: ../../../contracts/solc/v0.8.24/CommitStoreHelper/CommitSto ether_sender_receiver: ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.abi ../../../contracts/solc/v0.8.24/EtherSenderReceiver/EtherSenderReceiver.bin 09510a3f773f108a3c231e8d202835c845ded862d071ec54c4f89c12d868b8de evm_2_evm_offramp: ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOffRamp/EVM2EVMOffRamp.bin b0d77babbe635cd6ba04c2af049badc9e9d28a4b6ed6bb75f830ad902a618beb evm_2_evm_onramp: ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.abi ../../../contracts/solc/v0.8.24/EVM2EVMOnRamp/EVM2EVMOnRamp.bin 5c02c2b167946b3467636ff2bb58594cb4652fc63d8bdfee2488ed562e2a3e50 -fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 286117b3f17fe2854ddada25666be4ed2eb8069718f4ba595958accad170a4a2 +fee_quoter: ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.abi ../../../contracts/solc/v0.8.24/FeeQuoter/FeeQuoter.bin 392a7b95a2ff4e3c5c452965a21f5bdb89ad28316f7280ecf81b81740fd54273 lock_release_token_pool: ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPool/LockReleaseTokenPool.bin e6a8ec9e8faccb1da7d90e0f702ed72975964f97dc3222b54cfcca0a0ba3fea2 lock_release_token_pool_and_proxy: ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.abi ../../../contracts/solc/v0.8.24/LockReleaseTokenPoolAndProxy/LockReleaseTokenPoolAndProxy.bin e632b08be0fbd1d013e8b3a9d75293d0d532b83071c531ff2be1deec1fa48ec1 maybe_revert_message_receiver: ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.abi ../../../contracts/solc/v0.8.24/MaybeRevertMessageReceiver/MaybeRevertMessageReceiver.bin d73956c26232ebcc4a5444429fa99cbefed960e323be9b5a24925885c2e477d5