From 25c0c00002e8f2709f63a941b540cc8108f4399e Mon Sep 17 00:00:00 2001 From: FelixFan1992 Date: Fri, 22 Mar 2024 14:03:12 -0400 Subject: [PATCH] update --- .../dev/v2_3/AutomationRegistry2_3.sol | 111 +++++++++--------- .../dev/v2_3/AutomationRegistryLogicC2_3.sol | 6 +- .../automation_registry_wrapper_2_3.go | 2 +- ...rapper-dependency-versions-do-not-edit.txt | 2 +- 4 files changed, 59 insertions(+), 62 deletions(-) diff --git a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol index 84a76adc457..d01e2592cde 100644 --- a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol +++ b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistry2_3.sol @@ -299,59 +299,7 @@ contract AutomationRegistry2_3 is AutomationRegistryBase2_3, OCR2Abstract, Chain // set billing config for tokens _setBillingConfig(billingTokens, billingConfigs); - // move all pooled payments out of the pool to each transmitter's balance - for (uint256 i = 0; i < s_transmittersList.length; i++) { - _updateTransmitterBalanceFromPool( - s_transmittersList[i], - s_hotVars.totalPremium, - uint96(s_transmittersList.length) - ); - } - - // remove any old signer/transmitter addresses - address signerAddress; - address transmitterAddress; - //PayoutMode mode = s_payoutMode; - for (uint256 i = 0; i < s_transmittersList.length; i++) { - signerAddress = s_signersList[i]; - transmitterAddress = s_transmittersList[i]; - delete s_signers[signerAddress]; - // Do not delete the whole transmitter struct as it has balance information stored - s_transmitters[transmitterAddress].active = false; - if (s_payoutMode == PayoutMode.OFF_CHAIN) { - s_deactivatedTransmitters.add(transmitterAddress); - } - } - delete s_signersList; - delete s_transmittersList; - - // add new signer/transmitter addresses - { - Transmitter memory transmitter; - address temp; - //PayoutMode mode = s_payoutMode; - for (uint256 i = 0; i < signers.length; i++) { - if (s_signers[signers[i]].active) revert RepeatedSigner(); - if (signers[i] == ZERO_ADDRESS) revert InvalidSigner(); - s_signers[signers[i]] = Signer({active: true, index: uint8(i)}); - - temp = transmitters[i]; - if (temp == ZERO_ADDRESS) revert InvalidTransmitter(); - transmitter = s_transmitters[temp]; - if (transmitter.active) revert RepeatedTransmitter(); - transmitter.active = true; - transmitter.index = uint8(i); - // new transmitters start afresh from current totalPremium - // some spare change of premium from previous pool will be forfeited - transmitter.lastCollected = s_hotVars.totalPremium; - s_transmitters[temp] = transmitter; - if (s_payoutMode == PayoutMode.OFF_CHAIN) { - s_deactivatedTransmitters.remove(temp); - } - } - } - s_signersList = signers; - s_transmittersList = transmitters; + _updateTransmitters(signers, transmitters); s_hotVars = HotVars({ f: f, @@ -400,9 +348,7 @@ contract AutomationRegistry2_3 is AutomationRegistryBase2_3, OCR2Abstract, Chain offchainConfig ); - for (uint256 idx = 0; idx < s_registrars.length(); idx++) { - s_registrars.remove(s_registrars.at(idx)); - } + delete s_registrars; for (uint256 idx = 0; idx < onchainConfig.registrars.length; idx++) { s_registrars.add(onchainConfig.registrars[idx]); @@ -421,6 +367,59 @@ contract AutomationRegistry2_3 is AutomationRegistryBase2_3, OCR2Abstract, Chain ); } + function _updateTransmitters(address[] memory signers, address[] memory transmitters) internal { + // move all pooled payments out of the pool to each transmitter's balance + for (uint256 i = 0; i < s_transmittersList.length; i++) { + _updateTransmitterBalanceFromPool( + s_transmittersList[i], + s_hotVars.totalPremium, + uint96(s_transmittersList.length) + ); + } + + // remove any old signer/transmitter addresses + address signerAddress; + address transmitterAddress; + PayoutMode mode = s_payoutMode; + for (uint256 i = 0; i < s_transmittersList.length; i++) { + signerAddress = s_signersList[i]; + transmitterAddress = s_transmittersList[i]; + delete s_signers[signerAddress]; + // Do not delete the whole transmitter struct as it has balance information stored + s_transmitters[transmitterAddress].active = false; + if (mode == PayoutMode.OFF_CHAIN) { + s_deactivatedTransmitters.add(transmitterAddress); + } + } + delete s_signersList; + delete s_transmittersList; + + // add new signer/transmitter addresses + Transmitter memory transmitter; + for (uint256 i = 0; i < signers.length; i++) { + if (s_signers[signers[i]].active) revert RepeatedSigner(); + if (signers[i] == ZERO_ADDRESS) revert InvalidSigner(); + s_signers[signers[i]] = Signer({active: true, index: uint8(i)}); + + transmitterAddress = transmitters[i]; + if (transmitterAddress == ZERO_ADDRESS) revert InvalidTransmitter(); + transmitter = s_transmitters[transmitterAddress]; + if (transmitter.active) revert RepeatedTransmitter(); + transmitter.active = true; + transmitter.index = uint8(i); + // new transmitters start afresh from current totalPremium + // some spare change of premium from previous pool will be forfeited + transmitter.lastCollected = s_hotVars.totalPremium; + s_transmitters[transmitterAddress] = transmitter; + if (mode == PayoutMode.OFF_CHAIN) { + s_deactivatedTransmitters.remove(transmitterAddress); + } + } + + s_signersList = signers; + s_transmittersList = transmitters; + } + // ================================================================ // | GETTERS | // ================================================================ diff --git a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryLogicC2_3.sol b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryLogicC2_3.sol index d057c6671d7..f2dee23aa5d 100644 --- a/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryLogicC2_3.sol +++ b/contracts/src/v0.8/automation/dev/v2_3/AutomationRegistryLogicC2_3.sol @@ -181,10 +181,8 @@ contract AutomationRegistryLogicC2_3 is AutomationRegistryBase2_3 { address deactivatedAddr = s_deactivatedTransmitters.at(i); Transmitter memory transmitter = s_transmitters[deactivatedAddr]; payees[i + activeTransmittersLength] = s_transmitterPayees[deactivatedAddr]; - if (transmitter.balance != 0) { - payments[i + activeTransmittersLength] = transmitter.balance; - s_transmitters[deactivatedAddr].balance = 0; - } + payments[i + activeTransmittersLength] = transmitter.balance; + s_transmitters[deactivatedAddr].balance = 0; } delete s_deactivatedTransmitters; diff --git a/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go b/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go index 15dbae1eaff..06d85628800 100644 --- a/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go +++ b/core/gethwrappers/generated/automation_registry_wrapper_2_3/automation_registry_wrapper_2_3.go @@ -59,7 +59,7 @@ type AutomationRegistryBase23OnchainConfig struct { var AutomationRegistryMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"contractAutomationRegistryLogicA2_3\",\"name\":\"logicA\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ArrayHasNoEntries\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CannotCancel\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CheckDataExceedsLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ConfigDigestMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateEntry\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DuplicateSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitCanOnlyIncrease\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasLimitOutsideRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfFaultyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSignatures\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectNumberOfSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"available\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"requested\",\"type\":\"uint256\"}],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidBillingToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidDataLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidFeed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidRecipient\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidReport\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTransmitter\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTrigger\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTriggerType\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MigrationNotPermitted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSettleOffchain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MustSettleOnchain\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAContract\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveSigners\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyActiveTransmitters\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByLINKToken\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByOwnerOrRegistrar\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByProposedPayee\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableByUpkeepPrivilegeManager\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyFinanceAdmin\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyPausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlySimulatedBackend\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyUnpausedUpkeep\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ParameterLengthError\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RegistryPaused\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedSigner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RepeatedTransmitter\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"reason\",\"type\":\"bytes\"}],\"name\":\"TargetCheckReverted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyOracles\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TranscoderNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepCancelled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotCanceled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UpkeepNotNeeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValueNotChanged\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddressNotAllowed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"AdminPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"contractIERC20\",\"name\":\"token\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasFeePPB\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"flatFeeMilliCents\",\"type\":\"uint24\"},{\"internalType\":\"contractAggregatorV3Interface\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fallbackPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"minSpend\",\"type\":\"uint96\"}],\"indexed\":false,\"internalType\":\"structAutomationRegistryBase2_3.BillingConfig\",\"name\":\"config\",\"type\":\"tuple\"}],\"name\":\"BillingConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"CancelledUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newModule\",\"type\":\"address\"}],\"name\":\"ChainSpecificModuleUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"previousConfigBlockNumber\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"configCount\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"onchainConfig\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"dedupKey\",\"type\":\"bytes32\"}],\"name\":\"DedupKeyAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"assetAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FeesWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"FundsAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"FundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"InsufficientFundsUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"payments\",\"type\":\"uint256[]\"}],\"name\":\"NOPsSettledOffchain\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"payees\",\"type\":\"address[]\"}],\"name\":\"PayeesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"PayeeshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"transmitter\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"payee\",\"type\":\"address\"}],\"name\":\"PaymentWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"ReorgedUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"StaleUpkeepReport\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"name\":\"Transmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"UpkeepAdminTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"atBlockHeight\",\"type\":\"uint64\"}],\"name\":\"UpkeepCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"newCheckData\",\"type\":\"bytes\"}],\"name\":\"UpkeepCheckDataSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"gasLimit\",\"type\":\"uint96\"}],\"name\":\"UpkeepGasLimitSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"UpkeepMigrated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepOffchainConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepPaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"totalPayment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasOverhead\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"trigger\",\"type\":\"bytes\"}],\"name\":\"UpkeepPerformed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"privilegeConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepPrivilegeConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"startingBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"importedFrom\",\"type\":\"address\"}],\"name\":\"UpkeepReceived\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"performGas\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"admin\",\"type\":\"address\"}],\"name\":\"UpkeepRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"triggerConfig\",\"type\":\"bytes\"}],\"name\":\"UpkeepTriggerConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"}],\"name\":\"UpkeepUnpaused\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fallbackTo\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDetails\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"configCount\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"blockNumber\",\"type\":\"uint32\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"latestConfigDigestAndEpoch\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"scanLogs\",\"type\":\"bool\"},{\"internalType\":\"bytes32\",\"name\":\"configDigest\",\"type\":\"bytes32\"},{\"internalType\":\"uint32\",\"name\":\"epoch\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"internalType\":\"bytes\",\"name\":\"onchainConfigBytes\",\"type\":\"bytes\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"signers\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"transmitters\",\"type\":\"address[]\"},{\"internalType\":\"uint8\",\"name\":\"f\",\"type\":\"uint8\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"checkGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"stalenessSeconds\",\"type\":\"uint24\"},{\"internalType\":\"uint16\",\"name\":\"gasCeilingMultiplier\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformGas\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxCheckDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxPerformDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"maxRevertDataSize\",\"type\":\"uint32\"},{\"internalType\":\"uint256\",\"name\":\"fallbackGasPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackLinkPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"fallbackNativePrice\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"transcoder\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"registrars\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"upkeepPrivilegeManager\",\"type\":\"address\"},{\"internalType\":\"contractIChainModule\",\"name\":\"chainModule\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"reorgProtectionEnabled\",\"type\":\"bool\"},{\"internalType\":\"address\",\"name\":\"financeAdmin\",\"type\":\"address\"}],\"internalType\":\"structAutomationRegistryBase2_3.OnchainConfig\",\"name\":\"onchainConfig\",\"type\":\"tuple\"},{\"internalType\":\"uint64\",\"name\":\"offchainConfigVersion\",\"type\":\"uint64\"},{\"internalType\":\"bytes\",\"name\":\"offchainConfig\",\"type\":\"bytes\"},{\"internalType\":\"contractIERC20[]\",\"name\":\"billingTokens\",\"type\":\"address[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"gasFeePPB\",\"type\":\"uint32\"},{\"internalType\":\"uint24\",\"name\":\"flatFeeMilliCents\",\"type\":\"uint24\"},{\"internalType\":\"contractAggregatorV3Interface\",\"name\":\"priceFeed\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"fallbackPrice\",\"type\":\"uint256\"},{\"internalType\":\"uint96\",\"name\":\"minSpend\",\"type\":\"uint96\"}],\"internalType\":\"structAutomationRegistryBase2_3.BillingConfig[]\",\"name\":\"billingConfigs\",\"type\":\"tuple[]\"}],\"name\":\"setConfigTypeSafe\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"id\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"performData\",\"type\":\"bytes\"}],\"name\":\"simulatePerformUpkeep\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"gasUsed\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[3]\",\"name\":\"reportContext\",\"type\":\"bytes32[3]\"},{\"internalType\":\"bytes\",\"name\":\"rawReport\",\"type\":\"bytes\"},{\"internalType\":\"bytes32[]\",\"name\":\"rs\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"ss\",\"type\":\"bytes32[]\"},{\"internalType\":\"bytes32\",\"name\":\"rawVs\",\"type\":\"bytes32\"}],\"name\":\"transmit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"typeAndVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", - Bin: "0x6101806040523480156200001257600080fd5b50604051620062503803806200625083398101604081905262000035916200062f565b80816001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200062f565b826001600160a01b031663226cf83c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200062f565b836001600160a01b031663614486af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200062f565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200062f565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200062f565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200062f565b876001600160a01b031663c5b964e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000656565b886001600160a01b031663ac4dc59a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200062f565b3380600081620003b55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620003e857620003e8816200056b565b5050506001600160a01b0380891660805287811660a05286811660c05285811660e052848116610100528316610120526024805483919060ff19166001838181111562000439576200043962000679565b0217905550806001600160a01b0316610140816001600160a01b03168152505060c0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c091906200068f565b60ff1660a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052a91906200068f565b60ff16146200054c576040516301f86e1760e41b815260040160405180910390fd5b5050506001600160a01b039095166101605250620006b4945050505050565b336001600160a01b03821603620005c55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620003ac565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200062c57600080fd5b50565b6000602082840312156200064257600080fd5b81516200064f8162000616565b9392505050565b6000602082840312156200066957600080fd5b8151600281106200064f57600080fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620006a257600080fd5b815160ff811681146200064f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051615b20620007306000396000818160c9015261017c015260005050600061245c015260005050600050506000613abd0152600050506000818161147c01528181611589015281816116b4015281816116fe0152611de20152615b206000f3fe6080604052600436106100c75760003560e01c8063a4c0ed3611610074578063b1dc65a41161004e578063b1dc65a414610338578063e3d0e71214610358578063f2fde38b14610378576100c7565b8063a4c0ed361461029b578063aed2e929146102bb578063afcb95d7146102f2576100c7565b806379ba5097116100a557806379ba5097146101e157806381ff7048146101f65780638da5cb5b14610270576100c7565b8063181f5a771461010e578063349e8cca1461016d57806350097389146101c1575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610107573d6000f35b3d6000fd5b005b34801561011a57600080fd5b506101576040518060400160405280601881526020017f4175746f6d6174696f6e526567697374727920322e332e30000000000000000081525081565b604051610164919061452a565b60405180910390f35b34801561017957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b3480156101cd57600080fd5b5061010c6101dc366004614a9f565b610398565b3480156101ed57600080fd5b5061010c611362565b34801561020257600080fd5b5061024d60175460135463ffffffff74010000000000000000000000000000000000000000830481169378010000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610164565b34801561027c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661019c565b3480156102a757600080fd5b5061010c6102b6366004614c00565b611464565b3480156102c757600080fd5b506102db6102d6366004614c5c565b61177f565b604080519215158352602083019190915201610164565b3480156102fe57600080fd5b50601354601454604080516000815260208101939093526c0100000000000000000000000090910463ffffffff1690820152606001610164565b34801561034457600080fd5b5061010c610353366004614ced565b611915565b34801561036457600080fd5b5061010c610373366004614da4565b611bf6565b34801561038457600080fd5b5061010c610393366004614e71565b611c30565b6103a0611c44565b601f885111156103dc576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560ff16600003610419576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b865188511415806104385750610430866003614ec4565b60ff16885111155b1561046f576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80518251146104aa576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b48282611cc7565b60005b600e5481101561052b57610518600e82815481106104d7576104d7614ee0565b600091825260209091200154601454600e5473ffffffffffffffffffffffffffffffffffffffff909216916bffffffffffffffffffffffff9091169061212f565b508061052381614f0f565b9150506104b7565b5060008060005b600e5481101561065357600d818154811061054f5761054f614ee0565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff9092169450908290811061058a5761058a614ee0565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8681168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690559150600160245460ff16600181111561062f5761062f614f47565b036106415761063f600f83612337565b505b8061064b81614f0f565b915050610532565b50610660600d6000614411565b61066c600e6000614411565b604080516080810182526000808252602082018190529181018290526060810182905290805b8c51811015610afc57600c60008e83815181106106b1576106b1614ee0565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff161561071c576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168d828151811061074657610746614ee0565b602002602001015173ffffffffffffffffffffffffffffffffffffffff160361079b576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c60008f84815181106107cc576107cc614ee0565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558b518c908290811061087457610874614ee0565b60200260200101519150600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036108e4576040517f58a70a0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82166000908152600b60209081526040918290208251608081018452905460ff80821615801584526101008304909116938301939093526bffffffffffffffffffffffff6201000082048116948301949094526e0100000000000000000000000000009004909216606083015290935061099f576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180845260ff82811660208087019182526014546bffffffffffffffffffffffff9081166060890190815273ffffffffffffffffffffffffffffffffffffffff88166000908152600b909352604092839020895181549551948b015192517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00009096169015157fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff161761010094871694909402939093177fffffffffffff000000000000000000000000000000000000000000000000ffff1662010000918316919091027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff16176e01000000000000000000000000000093909116929092029190911790556024541681811115610ad857610ad8614f47565b03610aea57610ae8600f83612362565b505b80610af481614f0f565b915050610692565b50508a51610b129150600d9060208d019061442f565b508851610b2690600e9060208c019061442f565b50604051806101200160405280601460000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001600063ffffffff168152602001886020015162ffffff168152602001886040015161ffff1681526020018960ff168152602001601460000160169054906101000a900460ff1615158152602001601460000160179054906101000a900460ff1615158152602001886101c0015115158152602001886101a0015173ffffffffffffffffffffffffffffffffffffffff16815250601460008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160106101000a81548162ffffff021916908362ffffff16021790555060608201518160000160136101000a81548161ffff021916908361ffff16021790555060808201518160000160156101000a81548160ff021916908360ff16021790555060a08201518160000160166101000a81548160ff02191690831515021790555060c08201518160000160176101000a81548160ff02191690831515021790555060e08201518160000160186101000a81548160ff0219169083151502179055506101008201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505060405180610160016040528088610140015173ffffffffffffffffffffffffffffffffffffffff168152602001886000015163ffffffff168152602001886060015163ffffffff1681526020016016600001601c9054906101000a900463ffffffff1663ffffffff16815260200188610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601660010160149054906101000a900463ffffffff1663ffffffff168152602001601660010160189054906101000a900463ffffffff1663ffffffff168152602001886080015163ffffffff168152602001886101e0015173ffffffffffffffffffffffffffffffffffffffff1681526020018860a0015163ffffffff1681526020018860c0015163ffffffff16815250601660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160020160146101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160186101000a81548163ffffffff021916908363ffffffff1602179055509050508660e00151601981905550866101000151601a81905550866101200151601b819055506000601660010160189054906101000a900463ffffffff169050876101a0015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561112d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111519190614f76565b601780547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff93841602178082556001926014916111c891859174010000000000000000000000000000000000000000900416614f8f565b92506101000a81548163ffffffff021916908363ffffffff1602179055506000886040516020016111f99190614ffd565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905260175490915061125e904690309074010000000000000000000000000000000000000000900463ffffffff168f8f8f878f8f612384565b60135560005b61126e600961242e565b81101561129e5761128b611283600983612438565b600990612362565b508061129681614f0f565b915050611264565b5060005b896101600151518110156112f5576112e28a610160015182815181106112ca576112ca614ee0565b6020026020010151600961233790919063ffffffff16565b50806112ed81614f0f565b9150506112a2565b507f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0582601354601660010160149054906101000a900463ffffffff168f8f8f878f8f60405161134c99989796959493929190615184565b60405180910390a1505050505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff1633146113e8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016146114d3576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6020811461150d576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061151b8284018461521a565b60008181526004602052604090205490915065010000000000900463ffffffff90811614611575576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600201547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff9081169116146115f9576040517f1183afea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008181526004602052604090206001015461163890859070010000000000000000000000000000000090046bffffffffffffffffffffffff16615233565b600082815260046020908152604080832060010180546bffffffffffffffffffffffff95909516700100000000000000000000000000000000027fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff9095169490941790935573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168252601c905220546116e7908590615258565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166000908152601c602090815260409182902093909355516bffffffffffffffffffffffff871681529087169183917fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa734891506203910160405180910390a35050505050565b60008061178a612444565b601454760100000000000000000000000000000000000000000000900460ff16156117e1576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526004602090815260409182902082516101008082018552825460ff81161515835263ffffffff918104821683860181905265010000000000820483168488015273ffffffffffffffffffffffffffffffffffffffff690100000000000000000090920482166060850181905260018601546fffffffffffffffffffffffffffffffff811660808701526bffffffffffffffffffffffff70010000000000000000000000000000000082041660a08701527c0100000000000000000000000000000000000000000000000000000000900490931660c08501526002909401541660e08301528451601f890185900485028101850190955287855290936119089391929189908990819084018382808284376000920191909152506124b392505050565b9097909650945050505050565b60005a60408051610120810182526014546bffffffffffffffffffffffff8116825263ffffffff6c01000000000000000000000000820416602083015262ffffff7001000000000000000000000000000000008204169282019290925261ffff730100000000000000000000000000000000000000830416606082015260ff75010000000000000000000000000000000000000000008304811660808301527601000000000000000000000000000000000000000000008304811615801560a08401527701000000000000000000000000000000000000000000000084048216151560c0840152780100000000000000000000000000000000000000000000000090930416151560e082015260155473ffffffffffffffffffffffffffffffffffffffff16610100820152919250611a79576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff16611ac2576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6013548a3514611afe576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6080810151611b0e90600161526b565b60ff1686141580611b1f5750858414155b15611b56576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611b668a8a8a8a8a8a8a8a6126ce565b6000611b728a8a612937565b905060208b0135600881901c63ffffffff16611b8f8484876129f0565b836020015163ffffffff168163ffffffff161115611be757601480547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790555b50505050505050505050505050565b600080600085806020019051810190611c0f91906153de565b925092509250611c258989898689898888610398565b505050505050505050565b611c38611c44565b611c418161342e565b50565b60005473ffffffffffffffffffffffffffffffffffffffff163314611cc5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e65720000000000000000000060448201526064016113df565b565b60005b602354811015611d85576022600060238381548110611ceb57611ceb614ee0565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001812080547fffffffffff000000000000000000000000000000000000000000000000000000168155600181019190915560020180547fffffffffffffffffffffffffffffffffffffffff00000000000000000000000016905580611d7d81614f0f565b915050611cca565b50611d9260236000614411565b60245460ff1660005b8351811015612129576000848281518110611db857611db8614ee0565b602002602001015190506000848381518110611dd657611dd6614ee0565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16148015611e4c57506001846001811115611e4a57611e4a614f47565b145b15611e83576040517f1183afea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82161580611ebe5750604081015173ffffffffffffffffffffffffffffffffffffffff16155b15611ef5576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff82811660009081526022602052604090205467010000000000000090041615611f5f576040517f357d0cc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6023805460018082019092557fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169182179092556000818152602260209081526040918290208651815488840180518a8701805163ffffffff9095167fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000909416841764010000000062ffffff93841602177fffffffffff0000000000000000000000000000000000000000ffffffffffffff16670100000000000000958b16959095029490941785556060808c0180519b87019b909b556080808d018051600290980180547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff998a1617905589519586529351909216968401969096529251909716948101949094529551918301919091529251909216928201929092527f720a5849025dc4fd0061aed1bb30efd713cde64ce7f8d807953ecca27c8f143c9060a00160405180910390a25050808061212190614f0f565b915050611d9b565b50505050565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e010000000000000000000000000000900490911660608201529061232b5760008160600151856121c79190615589565b905060006121d585836155dd565b905080836040018181516121e99190615233565b6bffffffffffffffffffffffff169052506122048582615608565b836060018181516122159190615233565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b60006123598373ffffffffffffffffffffffffffffffffffffffff8416613523565b90505b92915050565b60006123598373ffffffffffffffffffffffffffffffffffffffff8416613572565b6000808a8a8a8a8a8a8a8a8a6040516020016123a899989796959493929190615638565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b600061235c825490565b6000612359838361366c565b3273ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611cc5576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601454600090819077010000000000000000000000000000000000000000000000900460ff1615612510576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000001790556040517f4585e33b000000000000000000000000000000000000000000000000000000009061258590859060240161452a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d169061265890879087906004016156cd565b60408051808303816000875af1158015612676573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269a91906156e6565b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16905590969095509350505050565b600087876040516126e0929190615714565b6040519081900381206126f7918b90602001615724565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b888110156128ce5760018587836020811061276357612763614ee0565b61277091901a601b61526b565b8c8c8581811061278257612782614ee0565b905060200201358b8b8681811061279b5761279b614ee0565b90506020020135604051600081526020016040526040516127d8949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156127fa573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff80821615158085526101009092041693830193909352909550935090506128a8576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b8401935080806128c690614f0f565b915050612746565b50827e01010101010101010101010101010101010101010101010101010101010101841614612929576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b6129706040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600061297e83850185615815565b60408101515160608201515191925090811415806129a157508082608001515114155b806129b15750808260a001515114155b156129e8576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b600082604001515167ffffffffffffffff811115612a1057612a1061453d565b604051908082528060200260200182016040528015612ad457816020015b604080516101e081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff909201910181612a2e5790505b50905060006040518060800160405280600061ffff16815260200160006bffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff16815260200160008152509050600085610100015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b969190614f76565b9050600086610100015173ffffffffffffffffffffffffffffffffffffffff166318b8f6136040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c0e9190614f76565b905060005b866040015151811015613085576004600088604001518381518110612c3a57612c3a614ee0565b602090810291909101810151825281810192909252604090810160002081516101008082018452825460ff81161515835263ffffffff91810482169583019590955265010000000000850481169382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009094048416606082015260018201546fffffffffffffffffffffffffffffffff811660808301526bffffffffffffffffffffffff70010000000000000000000000000000000082041660a08301527c0100000000000000000000000000000000000000000000000000000000900490921660c08301526002015490911660e08201528551869083908110612d4457612d44614ee0565b602002602001015160000181905250612d7987604001518281518110612d6c57612d6c614ee0565b6020026020010151613696565b858281518110612d8b57612d8b614ee0565b6020026020010151606001906001811115612da857612da8614f47565b90816001811115612dbb57612dbb614f47565b81525050612e1f87604001518281518110612dd857612dd8614ee0565b60200260200101518489608001518481518110612df757612df7614ee0565b6020026020010151888581518110612e1157612e11614ee0565b60200260200101518c613741565b868381518110612e3157612e31614ee0565b6020026020010151602001878481518110612e4e57612e4e614ee0565b602002602001015160c0018281525082151515158152505050848181518110612e7957612e79614ee0565b60200260200101516020015115612ea957600184600001818151612e9d9190615902565b61ffff16905250612eae565b613073565b612f14858281518110612ec357612ec3614ee0565b6020026020010151600001516060015188606001518381518110612ee957612ee9614ee0565b60200260200101518960a001518481518110612f0757612f07614ee0565b60200260200101516124b3565b868381518110612f2657612f26614ee0565b6020026020010151604001878481518110612f4357612f43614ee0565b6020026020010151608001828152508215151515815250505087608001516001612f6d919061526b565b612f7b9060ff16604061591d565b6103a48860a001518381518110612f9457612f94614ee0565b602002602001015151612fa79190615258565b612fb19190615258565b858281518110612fc357612fc3614ee0565b602002602001015160a0018181525050848181518110612fe557612fe5614ee0565b602002602001015160a00151846060018181516130029190615258565b905250845185908290811061301957613019614ee0565b602002602001015160800151866130309190615934565b95506130738760400151828151811061304b5761304b614ee0565b60200260200101518487848151811061306657613066614ee0565b6020026020010151613860565b8061307d81614f0f565b915050612c13565b50825161ffff1660000361309c5750505050505050565b6155f06130aa36601061591d565b5a6130b59088615934565b6130bf9190615258565b6130c99190615258565b8351909550611b58906130e09061ffff1687615947565b6130ea9190615258565b604080516060810182526000808252602082018190529181018290529196505b87604001515181101561335d5785818151811061312957613129614ee0565b6020026020010151602001511561334b576131658987838151811061315057613150614ee0565b60200260200101516000015160e00151613965565b9150600061322f8a6040518061010001604052808a868151811061318b5761318b614ee0565b60200260200101516080015181526020018b815260200189606001518b87815181106131b9576131b9614ee0565b602002602001015160a00151896131d0919061591d565b6131da9190615947565b81526020018c6000015181526020018c6020015181526020016131fc8e613ab6565b81526020810187905260016040918201528c015180518690811061322257613222614ee0565b6020026020010151613ba0565b90508060600151866040018181516132479190615233565b6bffffffffffffffffffffffff16905250604081015160208701805161326e908390615233565b6bffffffffffffffffffffffff16905250865187908390811061329357613293614ee0565b6020026020010151604001511515896040015183815181106132b7576132b7614ee0565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b836060015184604001516132f49190615233565b8a868151811061330657613306614ee0565b6020026020010151608001518c8e60800151888151811061332957613329614ee0565b6020026020010151604051613341949392919061595b565b60405180910390a3505b8061335581614f0f565b91505061310a565b5050602083810151336000908152600b909252604090912080546002906133999084906201000090046bffffffffffffffffffffffff16615233565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508260400151601460000160008282829054906101000a90046bffffffffffffffffffffffff166133f79190615233565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff8216036134ad576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c6600000000000000000060448201526064016113df565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b600081815260018301602052604081205461356a5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915561235c565b50600061235c565b6000818152600183016020526040812054801561365b576000613596600183615934565b85549091506000906135aa90600190615934565b905081811461360f5760008660000182815481106135ca576135ca614ee0565b90600052602060002001549050808760000184815481106135ed576135ed614ee0565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061362057613620615998565b60019003818190600052602060002001600090559055856001016000868152602001908152602001600020600090556001935050505061235c565b600091505061235c565b5092915050565b600082600001828154811061368357613683614ee0565b9060005260206000200154905092915050565b6000818160045b600f811015613723577fff0000000000000000000000000000000000000000000000000000000000000082168382602081106136db576136db614ee0565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461371157506000949350505050565b8061371b81614f0f565b91505061369d565b5081600f1a600181111561373957613739614f47565b949350505050565b60008080808560600151600181111561375c5761375c614f47565b036137825761376e8888888888613e0e565b61377d57600092509050613856565b6137fa565b60018560600151600181111561379a5761379a614f47565b036137c85760006137ad89898988613f98565b92509050806137c25750600092509050613856565b506137fa565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516040015163ffffffff16871061384f57877fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd56368760405161383c919061452a565b60405180910390a2600092509050613856565b6001925090505b9550959350505050565b60008160600151600181111561387857613878614f47565b036138dc57600083815260046020526040902060010180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff851602179055505050565b6001816060015160018111156138f4576138f4614f47565b036139605760c08101805160009081526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915191517fa4a4e334c0e330143f9437484fe516c13bc560b86b5b0daf58e7084aaac228f29190a25b505050565b604080516060810182526000808252602080830182815283850183905273ffffffffffffffffffffffffffffffffffffffff868116845260229092528483208054640100000000810462ffffff1690925263ffffffff8216855285517ffeaf968c00000000000000000000000000000000000000000000000000000000815295519495909484936701000000000000009093049092169163feaf968c9160048082019260a0929091908290030181865afa158015613a27573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a4b91906159e1565b50935050925050600082131580613a6157508042105b80613a9157506000866040015162ffffff16118015613a915750613a858142615934565b866040015162ffffff16105b15613aa55760018301546040850152613aad565b604084018290525b50505092915050565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015613b26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4a91906159e1565b50935050925050600082131580613b6057508042105b80613b9057506000846040015162ffffff16118015613b905750613b848142615934565b846040015162ffffff16105b15613665575050601b5492915050565b604080516080810182526000808252602082018190529181018290526060810182905290613bce85856141a5565b60008481526004602090815260408220600101549083015183519394507001000000000000000000000000000000009091046bffffffffffffffffffffffff1692613c199190615233565b905082600001516bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613c9e57819050613c7f86608001518760c0015160400151846bffffffffffffffffffffffff16613c70919061591d565b613c7a9190615947565b61436f565b6bffffffffffffffffffffffff16604084015260006060840152613d2a565b806bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613d2a57819050613d1683604001516bffffffffffffffffffffffff1687608001518860c0015160400151856bffffffffffffffffffffffff16613d02919061591d565b613d0c9190615947565b613c7a9190615934565b6bffffffffffffffffffffffff1660608401525b60008581526004602052604090206001018054829190601090613d7090849070010000000000000000000000000000000090046bffffffffffffffffffffffff16615589565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008781526004602052604081206001018054928516935091613dcb9084906fffffffffffffffffffffffffffffffff16615a31565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508293505050509392505050565b60008084806020019051810190613e259190615a5a565b845160c00151815191925063ffffffff90811691161015613e8257867f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e886604051613e70919061452a565b60405180910390a26000915050613f8f565b8260e001518015613f425750602081015115801590613f425750602081015161010084015182516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa158015613f1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3f9190614f76565b14155b80613f545750805163ffffffff168611155b15613f8957867f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc30186604051613e70919061452a565b60019150505b95945050505050565b600080600084806020019051810190613fb19190615ab2565b905060008782600001518360200151846040015160405160200161401394939291909384526020840192909252604083015260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016606082015260640190565b6040516020818303038152906040528051906020012090508460e0015180156140ee57506080820151158015906140ee5750608082015161010086015160608401516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa1580156140c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906140eb9190614f76565b14155b80614103575086826060015163ffffffff1610155b1561414d57877f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc30187604051614138919061452a565b60405180910390a260009350915061419c9050565b60008181526008602052604090205460ff161561419457877f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e887604051614138919061452a565b600193509150505b94509492505050565b6040805160808101825260008082526020820181905291810182905260608101919091526000836060015161ffff1683606001516141e3919061591d565b90508260e0015180156141f55750803a105b156141fd57503a5b60008360a0015184604001518560200151866000015161421d9190615258565b614227908561591d565b6142319190615258565b61423b919061591d565b90506142548460c001516040015182613c7a9190615947565b6bffffffffffffffffffffffff168352608084015161427790613c7a9083615947565b6bffffffffffffffffffffffff16604084015260c0840151602001516000906142ae9062ffffff16683635c9adc5dea0000061591d565b9050600081633b9aca008760a001518860c001516000015163ffffffff1689604001518a60000151896142e1919061591d565b6142eb9190615258565b6142f5919061591d565b6142ff919061591d565b6143099190615947565b6143139190615258565b905061432c8660c001516040015182613c7a9190615947565b6bffffffffffffffffffffffff166020860152608086015161435290613c7a9083615947565b6bffffffffffffffffffffffff1660608601525050505092915050565b60006bffffffffffffffffffffffff82111561440d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f362062697473000000000000000000000000000000000000000000000000000060648201526084016113df565b5090565b5080546000825590600052602060002090810190611c4191906144b1565b8280548282559060005260206000209081019282156144a9579160200282015b828111156144a957825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff90911617825560209092019160019091019061444f565b5061440d9291505b5b8082111561440d57600081556001016144b2565b6000815180845260005b818110156144ec576020818501810151868301820152016144d0565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b60208152600061235960208301846144c6565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610200810167ffffffffffffffff811182821017156145905761459061453d565b60405290565b60405160a0810167ffffffffffffffff811182821017156145905761459061453d565b60405160c0810167ffffffffffffffff811182821017156145905761459061453d565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156146235761462361453d565b604052919050565b600067ffffffffffffffff8211156146455761464561453d565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff81168114611c4157600080fd5b803561467c8161464f565b919050565b600082601f83011261469257600080fd5b813560206146a76146a28361462b565b6145dc565b82815260059290921b840181019181810190868411156146c657600080fd5b8286015b848110156146ea5780356146dd8161464f565b83529183019183016146ca565b509695505050505050565b803560ff8116811461467c57600080fd5b63ffffffff81168114611c4157600080fd5b803561467c81614706565b62ffffff81168114611c4157600080fd5b803561467c81614723565b61ffff81168114611c4157600080fd5b803561467c8161473f565b8015158114611c4157600080fd5b803561467c8161475a565b6000610200828403121561478657600080fd5b61478e61456c565b905061479982614718565b81526147a760208301614734565b60208201526147b86040830161474f565b60408201526147c960608301614718565b60608201526147da60808301614718565b60808201526147eb60a08301614718565b60a08201526147fc60c08301614718565b60c082015260e082810135908201526101008083013590820152610120808301359082015261014061482f818401614671565b908201526101608281013567ffffffffffffffff81111561484f57600080fd5b61485b85828601614681565b82840152505061018061486f818401614671565b908201526101a0614881838201614671565b908201526101c0614893838201614768565b908201526101e06148a5838201614671565b9082015292915050565b803567ffffffffffffffff8116811461467c57600080fd5b600082601f8301126148d857600080fd5b813567ffffffffffffffff8111156148f2576148f261453d565b61492360207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f840116016145dc565b81815284602083860101111561493857600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261496657600080fd5b813560206149766146a28361462b565b82815260059290921b8401810191818101908684111561499557600080fd5b8286015b848110156146ea5780356149ac8161464f565b8352918301918301614999565b6bffffffffffffffffffffffff81168114611c4157600080fd5b600082601f8301126149e457600080fd5b813560206149f46146a28361462b565b82815260a09283028501820192828201919087851115614a1357600080fd5b8387015b85811015614a925781818a031215614a2f5760008081fd5b614a37614596565b8135614a4281614706565b815281860135614a5181614723565b81870152604082810135614a648161464f565b9082015260608281013590820152608080830135614a81816149b9565b908201528452928401928101614a17565b5090979650505050505050565b600080600080600080600080610100898b031215614abc57600080fd5b883567ffffffffffffffff80821115614ad457600080fd5b614ae08c838d01614681565b995060208b0135915080821115614af657600080fd5b614b028c838d01614681565b9850614b1060408c016146f5565b975060608b0135915080821115614b2657600080fd5b614b328c838d01614773565b9650614b4060808c016148af565b955060a08b0135915080821115614b5657600080fd5b614b628c838d016148c7565b945060c08b0135915080821115614b7857600080fd5b614b848c838d01614955565b935060e08b0135915080821115614b9a57600080fd5b50614ba78b828c016149d3565b9150509295985092959890939650565b60008083601f840112614bc957600080fd5b50813567ffffffffffffffff811115614be157600080fd5b602083019150836020828501011115614bf957600080fd5b9250929050565b60008060008060608587031215614c1657600080fd5b8435614c218161464f565b935060208501359250604085013567ffffffffffffffff811115614c4457600080fd5b614c5087828801614bb7565b95989497509550505050565b600080600060408486031215614c7157600080fd5b83359250602084013567ffffffffffffffff811115614c8f57600080fd5b614c9b86828701614bb7565b9497909650939450505050565b60008083601f840112614cba57600080fd5b50813567ffffffffffffffff811115614cd257600080fd5b6020830191508360208260051b8501011115614bf957600080fd5b60008060008060008060008060e0898b031215614d0957600080fd5b606089018a811115614d1a57600080fd5b8998503567ffffffffffffffff80821115614d3457600080fd5b614d408c838d01614bb7565b909950975060808b0135915080821115614d5957600080fd5b614d658c838d01614ca8565b909750955060a08b0135915080821115614d7e57600080fd5b50614d8b8b828c01614ca8565b999c989b50969995989497949560c00135949350505050565b60008060008060008060c08789031215614dbd57600080fd5b863567ffffffffffffffff80821115614dd557600080fd5b614de18a838b01614681565b97506020890135915080821115614df757600080fd5b614e038a838b01614681565b9650614e1160408a016146f5565b95506060890135915080821115614e2757600080fd5b614e338a838b016148c7565b9450614e4160808a016148af565b935060a0890135915080821115614e5757600080fd5b50614e6489828a016148c7565b9150509295509295509295565b600060208284031215614e8357600080fd5b8135614e8e8161464f565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff818116838216029081169081811461366557613665614e95565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614f4057614f40614e95565b5060010190565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215614f8857600080fd5b5051919050565b63ffffffff81811683821601908082111561366557613665614e95565b600081518084526020808501945080840160005b83811015614ff257815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614fc0565b509495945050505050565b6020815261501460208201835163ffffffff169052565b6000602083015161502c604084018262ffffff169052565b50604083015161ffff8116606084015250606083015163ffffffff8116608084015250608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015163ffffffff811660e08401525060e08301516101008381019190915283015161012080840191909152830151610140808401919091528301516101606150d58185018373ffffffffffffffffffffffffffffffffffffffff169052565b8085015191505061020061018081818601526150f5610220860184614fac565b908601519092506101a06151208682018373ffffffffffffffffffffffffffffffffffffffff169052565b86015190506101c06151498682018373ffffffffffffffffffffffffffffffffffffffff169052565b86015190506101e061515e8682018315159052565b9095015173ffffffffffffffffffffffffffffffffffffffff1693019290925250919050565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526151b48184018a614fac565b905082810360808401526151c88189614fac565b905060ff871660a084015282810360c08401526151e581876144c6565b905067ffffffffffffffff851660e084015282810361010084015261520a81856144c6565b9c9b505050505050505050505050565b60006020828403121561522c57600080fd5b5035919050565b6bffffffffffffffffffffffff81811683821601908082111561366557613665614e95565b8082018082111561235c5761235c614e95565b60ff818116838216019081111561235c5761235c614e95565b805161467c81614706565b805161467c81614723565b805161467c8161473f565b805161467c8161464f565b600082601f8301126152c157600080fd5b815160206152d16146a28361462b565b82815260059290921b840181019181810190868411156152f057600080fd5b8286015b848110156146ea5780516153078161464f565b83529183019183016152f4565b805161467c8161475a565b600082601f83011261533057600080fd5b815160206153406146a28361462b565b82815260a0928302850182019282820191908785111561535f57600080fd5b8387015b85811015614a925781818a03121561537b5760008081fd5b615383614596565b815161538e81614706565b81528186015161539d81614723565b818701526040828101516153b08161464f565b90820152606082810151908201526080808301516153cd816149b9565b908201528452928401928101615363565b6000806000606084860312156153f357600080fd5b835167ffffffffffffffff8082111561540b57600080fd5b90850190610200828803121561542057600080fd5b61542861456c565b61543183615284565b815261543f6020840161528f565b60208201526154506040840161529a565b604082015261546160608401615284565b606082015261547260808401615284565b608082015261548360a08401615284565b60a082015261549460c08401615284565b60c082015260e08381015190820152610100808401519082015261012080840151908201526101406154c78185016152a5565b9082015261016083810151838111156154df57600080fd5b6154eb8a8287016152b0565b8284015250506101806154ff8185016152a5565b908201526101a06155118482016152a5565b908201526101c0615523848201615314565b908201526101e06155358482016152a5565b90820152602087015190955091508082111561555057600080fd5b61555c878388016152b0565b9350604086015191508082111561557257600080fd5b5061557f8682870161531f565b9150509250925092565b6bffffffffffffffffffffffff82811682821603908082111561366557613665614e95565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006bffffffffffffffffffffffff808416806155fc576155fc6155ae565b92169190910492915050565b6bffffffffffffffffffffffff81811683821602808216919082811461563057615630614e95565b505092915050565b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b16604085015281606085015261567f8285018b614fac565b91508382036080850152615693828a614fac565b915060ff881660a085015283820360c08501526156b082886144c6565b90861660e0850152838103610100850152905061520a81856144c6565b82815260406020820152600061373960408301846144c6565b600080604083850312156156f957600080fd5b82516157048161475a565b6020939093015192949293505050565b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f83011261574b57600080fd5b8135602061575b6146a28361462b565b82815260059290921b8401810191818101908684111561577a57600080fd5b8286015b848110156146ea578035835291830191830161577e565b600082601f8301126157a657600080fd5b813560206157b66146a28361462b565b82815260059290921b840181019181810190868411156157d557600080fd5b8286015b848110156146ea57803567ffffffffffffffff8111156157f95760008081fd5b6158078986838b01016148c7565b8452509183019183016157d9565b60006020828403121561582757600080fd5b813567ffffffffffffffff8082111561583f57600080fd5b9083019060c0828603121561585357600080fd5b61585b6145b9565b823581526020830135602082015260408301358281111561587b57600080fd5b6158878782860161573a565b60408301525060608301358281111561589f57600080fd5b6158ab8782860161573a565b6060830152506080830135828111156158c357600080fd5b6158cf87828601615795565b60808301525060a0830135828111156158e757600080fd5b6158f387828601615795565b60a08301525095945050505050565b61ffff81811683821601908082111561366557613665614e95565b808202811582820484141761235c5761235c614e95565b8181038181111561235c5761235c614e95565b600082615956576159566155ae565b500490565b6bffffffffffffffffffffffff8516815283602082015282604082015260806060820152600061598e60808301846144c6565b9695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b805169ffffffffffffffffffff8116811461467c57600080fd5b600080600080600060a086880312156159f957600080fd5b615a02866159c7565b9450602086015193506040860151925060608601519150615a25608087016159c7565b90509295509295909350565b6fffffffffffffffffffffffffffffffff81811683821601908082111561366557613665614e95565b600060408284031215615a6c57600080fd5b6040516040810181811067ffffffffffffffff82111715615a8f57615a8f61453d565b6040528251615a9d81614706565b81526020928301519281019290925250919050565b600060a08284031215615ac457600080fd5b615acc614596565b82518152602083015160208201526040830151615ae881614706565b60408201526060830151615afb81614706565b6060820152608092830151928101929092525091905056fea164736f6c6343000813000a", + Bin: "0x6101806040523480156200001257600080fd5b50604051620062023803806200620283398101604081905262000035916200062f565b80816001600160a01b031663ca30e6036040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000075573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200009b91906200062f565b826001600160a01b031663226cf83c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200010091906200062f565b836001600160a01b031663614486af6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200013f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200016591906200062f565b846001600160a01b0316636709d0e56040518163ffffffff1660e01b8152600401602060405180830381865afa158015620001a4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001ca91906200062f565b856001600160a01b0316635425d8ac6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000209573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200022f91906200062f565b866001600160a01b031663a08714c06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200026e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200029491906200062f565b876001600160a01b031663c5b964e06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620002d3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002f9919062000656565b886001600160a01b031663ac4dc59a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000338573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200035e91906200062f565b3380600081620003b55760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620003e857620003e8816200056b565b5050506001600160a01b0380891660805287811660a05286811660c05285811660e052848116610100528316610120526024805483919060ff19166001838181111562000439576200043962000679565b0217905550806001600160a01b0316610140816001600160a01b03168152505060c0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200049a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620004c091906200068f565b60ff1660a0516001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200052a91906200068f565b60ff16146200054c576040516301f86e1760e41b815260040160405180910390fd5b5050506001600160a01b039095166101605250620006b4945050505050565b336001600160a01b03821603620005c55760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401620003ac565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6001600160a01b03811681146200062c57600080fd5b50565b6000602082840312156200064257600080fd5b81516200064f8162000616565b9392505050565b6000602082840312156200066957600080fd5b8151600281106200064f57600080fd5b634e487b7160e01b600052602160045260246000fd5b600060208284031215620006a257600080fd5b815160ff811681146200064f57600080fd5b60805160a05160c05160e05161010051610120516101405161016051615ad2620007306000396000818160c9015261017c015260005050600061220e01526000505060005050600061397501526000505060008181610df301528181610f000152818161102b0152818161107501526117590152615ad26000f3fe6080604052600436106100c75760003560e01c8063a4c0ed3611610074578063b1dc65a41161004e578063b1dc65a414610338578063e3d0e71214610358578063f2fde38b14610378576100c7565b8063a4c0ed361461029b578063aed2e929146102bb578063afcb95d7146102f2576100c7565b806379ba5097116100a557806379ba5097146101e157806381ff7048146101f65780638da5cb5b14610270576100c7565b8063181f5a771461010e578063349e8cca1461016d57806350097389146101c1575b7f00000000000000000000000000000000000000000000000000000000000000003660008037600080366000845af43d6000803e808015610107573d6000f35b3d6000fd5b005b34801561011a57600080fd5b506101576040518060400160405280601881526020017f4175746f6d6174696f6e526567697374727920322e332e30000000000000000081525081565b60405161016491906144dc565b60405180910390f35b34801561017957600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610164565b3480156101cd57600080fd5b5061010c6101dc366004614a51565b610398565b3480156101ed57600080fd5b5061010c610cd9565b34801561020257600080fd5b5061024d60175460135463ffffffff74010000000000000000000000000000000000000000830481169378010000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610164565b34801561027c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff1661019c565b3480156102a757600080fd5b5061010c6102b6366004614bb2565b610ddb565b3480156102c757600080fd5b506102db6102d6366004614c0e565b6110f6565b604080519215158352602083019190915201610164565b3480156102fe57600080fd5b50601354601454604080516000815260208101939093526c0100000000000000000000000090910463ffffffff1690820152606001610164565b34801561034457600080fd5b5061010c610353366004614c9f565b61128c565b34801561036457600080fd5b5061010c610373366004614d56565b61156d565b34801561038457600080fd5b5061010c610393366004614e23565b6115a7565b6103a06115bb565b601f885111156103dc576040517f25d0209c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8560ff16600003610419576040517fe77dba5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b865188511415806104385750610430866003614e76565b60ff16885111155b1561046f576040517f1d2d1c5800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80518251146104aa576040517fcf54c06a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6104b4828261163e565b6104be8888611aa6565b604051806101200160405280601460000160009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff168152602001600063ffffffff168152602001866020015162ffffff168152602001866040015161ffff1681526020018760ff168152602001601460000160169054906101000a900460ff1615158152602001601460000160179054906101000a900460ff1615158152602001866101c0015115158152602001866101a0015173ffffffffffffffffffffffffffffffffffffffff16815250601460008201518160000160006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550602082015181600001600c6101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160106101000a81548162ffffff021916908362ffffff16021790555060608201518160000160136101000a81548161ffff021916908361ffff16021790555060808201518160000160156101000a81548160ff021916908360ff16021790555060a08201518160000160166101000a81548160ff02191690831515021790555060c08201518160000160176101000a81548160ff02191690831515021790555060e08201518160000160186101000a81548160ff0219169083151502179055506101008201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555090505060405180610160016040528086610140015173ffffffffffffffffffffffffffffffffffffffff168152602001866000015163ffffffff168152602001866060015163ffffffff1681526020016016600001601c9054906101000a900463ffffffff1663ffffffff16815260200186610180015173ffffffffffffffffffffffffffffffffffffffff168152602001601660010160149054906101000a900463ffffffff1663ffffffff168152602001601660010160189054906101000a900463ffffffff1663ffffffff168152602001866080015163ffffffff168152602001866101e0015173ffffffffffffffffffffffffffffffffffffffff1681526020018660a0015163ffffffff1681526020018660c0015163ffffffff16815250601660008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060208201518160000160146101000a81548163ffffffff021916908363ffffffff16021790555060408201518160000160186101000a81548163ffffffff021916908363ffffffff160217905550606082015181600001601c6101000a81548163ffffffff021916908363ffffffff16021790555060808201518160010160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060a08201518160010160146101000a81548163ffffffff021916908363ffffffff16021790555060c08201518160010160186101000a81548163ffffffff021916908363ffffffff16021790555060e082015181600101601c6101000a81548163ffffffff021916908363ffffffff1602179055506101008201518160020160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101208201518160020160146101000a81548163ffffffff021916908363ffffffff1602179055506101408201518160020160186101000a81548163ffffffff021916908363ffffffff1602179055509050508460e00151601981905550846101000151601a81905550846101200151601b819055506000601660010160189054906101000a900463ffffffff169050856101a0015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ac4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae89190614e92565b601780547fffffffff00000000ffffffffffffffffffffffffffffffffffffffffffffffff16780100000000000000000000000000000000000000000000000063ffffffff9384160217808255600192601491610b5f91859174010000000000000000000000000000000000000000900416614eab565b92506101000a81548163ffffffff021916908363ffffffff160217905550600086604051602001610b909190614f19565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0018152919052601754909150610bf5904690309074010000000000000000000000000000000000000000900463ffffffff168d8d8d878d8d612121565b601355600960008181610c0882826143c3565b5050505060005b87610160015151811015610c6257610c4f8861016001518281518110610c3757610c376150a0565b602002602001015160096121cb90919063ffffffff16565b5080610c5a816150cf565b915050610c0f565b506013546017546040517f1591690b8638f5fb2dbec82ac741805ac5da8b45dc5263f4875b0496fdce4e0592610cc59286927401000000000000000000000000000000000000000090910463ffffffff16908f908f908f9089908f908f90615107565b60405180910390a150505050505050505050565b60015473ffffffffffffffffffffffffffffffffffffffff163314610d5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e65720000000000000000000060448201526064015b60405180910390fd5b60008054337fffffffffffffffffffffffff00000000000000000000000000000000000000008083168217845560018054909116905560405173ffffffffffffffffffffffffffffffffffffffff90921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b3373ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614610e4a576040517fc8bad78d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60208114610e84576040517fdfe9309000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610e928284018461519d565b60008181526004602052604090205490915065010000000000900463ffffffff90811614610eec576040517f9c0083a200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000818152600460205260409020600201547f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff908116911614610f70576040517f1183afea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815260046020526040902060010154610faf90859070010000000000000000000000000000000090046bffffffffffffffffffffffff166151b6565b600082815260046020908152604080832060010180546bffffffffffffffffffffffff95909516700100000000000000000000000000000000027fffffffff000000000000000000000000ffffffffffffffffffffffffffffffff9095169490941790935573ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168252601c9052205461105e9085906151db565b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166000908152601c602090815260409182902093909355516bffffffffffffffffffffffff871681529087169183917fafd24114486da8ebfc32f3626dada8863652e187461aa74d4bfa734891506203910160405180910390a35050505050565b6000806111016121f6565b601454760100000000000000000000000000000000000000000000900460ff1615611158576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008581526004602090815260409182902082516101008082018552825460ff81161515835263ffffffff918104821683860181905265010000000000820483168488015273ffffffffffffffffffffffffffffffffffffffff690100000000000000000090920482166060850181905260018601546fffffffffffffffffffffffffffffffff811660808701526bffffffffffffffffffffffff70010000000000000000000000000000000082041660a08701527c0100000000000000000000000000000000000000000000000000000000900490931660c08501526002909401541660e08301528451601f8901859004850281018501909552878552909361127f93919291899089908190840183828082843760009201919091525061226592505050565b9097909650945050505050565b60005a60408051610120810182526014546bffffffffffffffffffffffff8116825263ffffffff6c01000000000000000000000000820416602083015262ffffff7001000000000000000000000000000000008204169282019290925261ffff730100000000000000000000000000000000000000830416606082015260ff75010000000000000000000000000000000000000000008304811660808301527601000000000000000000000000000000000000000000008304811615801560a08401527701000000000000000000000000000000000000000000000084048216151560c0840152780100000000000000000000000000000000000000000000000090930416151560e082015260155473ffffffffffffffffffffffffffffffffffffffff166101008201529192506113f0576040517f24522f3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b602052604090205460ff16611439576040517f1099ed7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6013548a3514611475576040517fdfdcf8e700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60808101516114859060016151ee565b60ff16861415806114965750858414155b156114cd576040517f0244f71a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6114dd8a8a8a8a8a8a8a8a612480565b60006114e98a8a6126e9565b905060208b0135600881901c63ffffffff166115068484876127a2565b836020015163ffffffff168163ffffffff16111561155e57601480547fffffffffffffffffffffffffffffffff00000000ffffffffffffffffffffffff166c0100000000000000000000000063ffffffff8416021790555b50505050505050505050505050565b6000806000858060200190518101906115869190615361565b92509250925061159c8989898689898888610398565b505050505050505050565b6115af6115bb565b6115b8816131e0565b50565b60005473ffffffffffffffffffffffffffffffffffffffff16331461163c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610d56565b565b60005b6023548110156116fc576022600060238381548110611662576116626150a0565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff168352820192909252604001812080547fffffffffff000000000000000000000000000000000000000000000000000000168155600181019190915560020180547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169055806116f4816150cf565b915050611641565b50611709602360006143c3565b60245460ff1660005b8351811015611aa057600084828151811061172f5761172f6150a0565b60200260200101519050600084838151811061174d5761174d6150a0565b602002602001015190507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480156117c3575060018460018111156117c1576117c161550c565b145b156117fa576040517f1183afea00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff821615806118355750604081015173ffffffffffffffffffffffffffffffffffffffff16155b1561186c576040517f8579befe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff828116600090815260226020526040902054670100000000000000900416156118d6576040517f357d0cc400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6023805460018082019092557fd57b2b5166478fd4318d2acc6cc2c704584312bdd8781b32d5d06abda57f42300180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff8581169182179092556000818152602260209081526040918290208651815488840180518a8701805163ffffffff9095167fffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000909416841764010000000062ffffff93841602177fffffffffff0000000000000000000000000000000000000000ffffffffffffff16670100000000000000958b16959095029490941785556060808c0180519b87019b909b556080808d018051600290980180547fffffffffffffffffffffffffffffffffffffffff000000000000000000000000166bffffffffffffffffffffffff998a1617905589519586529351909216968401969096529251909716948101949094529551918301919091529251909216928201929092527f720a5849025dc4fd0061aed1bb30efd713cde64ce7f8d807953ecca27c8f143c9060a00160405180910390a250508080611a98906150cf565b915050611712565b50505050565b60005b600e54811015611b1d57611b0a600e8281548110611ac957611ac96150a0565b600091825260209091200154601454600e5473ffffffffffffffffffffffffffffffffffffffff909216916bffffffffffffffffffffffff909116906132d5565b5080611b15816150cf565b915050611aa9565b50602454600090819060ff16815b600e54811015611c4757600d8181548110611b4857611b486150a0565b600091825260209091200154600e805473ffffffffffffffffffffffffffffffffffffffff90921695509082908110611b8357611b836150a0565b600091825260208083209091015473ffffffffffffffffffffffffffffffffffffffff8781168452600c8352604080852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690559116808452600b90925290912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905592506001826001811115611c2357611c2361550c565b03611c3557611c33600f846121cb565b505b80611c3f816150cf565b915050611b2b565b50611c54600d60006143c3565b611c60600e60006143c3565b6040805160808101825260008082526020820181905291810182905260608101829052905b86518110156120f057600c6000888381518110611ca457611ca46150a0565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528101919091526040016000205460ff1615611d0f576040517f77cea0fa00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16878281518110611d3957611d396150a0565b602002602001015173ffffffffffffffffffffffffffffffffffffffff1603611d8e576040517f815e1d6400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60405180604001604052806001151581526020018260ff16815250600c6000898481518110611dbf57611dbf6150a0565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff1682528181019290925260400160002082518154939092015160ff16610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909316929092171790558551869082908110611e6757611e676150a0565b60200260200101519350600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ed7576040517f58a70a0a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73ffffffffffffffffffffffffffffffffffffffff84166000908152600b60209081526040918290208251608081018452905460ff80821615801584526101008304909116938301939093526bffffffffffffffffffffffff6201000082048116948301949094526e01000000000000000000000000000090049092166060830152909250611f92576040517f6a7281ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600180835260ff80831660208086019182526014546bffffffffffffffffffffffff9081166060880190815273ffffffffffffffffffffffffffffffffffffffff8a166000908152600b909352604092839020885181549551948a0151925184166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff939094166201000002929092167fffffffffffff000000000000000000000000000000000000000000000000ffff94909616610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909516949094171791909116929092179190911790558360018111156120cc576120cc61550c565b036120de576120dc600f856134dd565b505b806120e8816150cf565b915050611c85565b50855161210490600d9060208901906143e1565b50845161211890600e9060208801906143e1565b50505050505050565b6000808a8a8a8a8a8a8a8a8a6040516020016121459998979695949392919061553b565b604080518083037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe001815291905280516020909101207dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff167e01000000000000000000000000000000000000000000000000000000000000179b9a5050505050505050505050565b60006121ed8373ffffffffffffffffffffffffffffffffffffffff84166134ff565b90505b92915050565b3273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000161461163c576040517fb60ac5db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601454600090819077010000000000000000000000000000000000000000000000900460ff16156122c2576040517f37ed32e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16770100000000000000000000000000000000000000000000001790556040517f4585e33b00000000000000000000000000000000000000000000000000000000906123379085906024016144dc565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08184030181529181526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff000000000000000000000000000000000000000000000000000000009094169390931790925290517f79188d1600000000000000000000000000000000000000000000000000000000815290935073ffffffffffffffffffffffffffffffffffffffff8616906379188d169061240a90879087906004016155d0565b60408051808303816000875af1158015612428573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061244c91906155e9565b601480547fffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffffffff16905590969095509350505050565b60008787604051612492929190615617565b6040519081900381206124a9918b90602001615627565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081840301815282825280516020918201208383019092526000808452908301819052909250906000805b8881101561268057600185878360208110612515576125156150a0565b61252291901a601b6151ee565b8c8c85818110612534576125346150a0565b905060200201358b8b8681811061254d5761254d6150a0565b905060200201356040516000815260200160405260405161258a949392919093845260ff9290921660208401526040830152606082015260800190565b6020604051602081039080840390855afa1580156125ac573d6000803e3d6000fd5b5050604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe081015173ffffffffffffffffffffffffffffffffffffffff81166000908152600c602090815290849020838501909452925460ff808216151580855261010090920416938301939093529095509350905061265a576040517f0f4c073700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b826020015160080260ff166001901b840193508080612678906150cf565b9150506124f8565b50827e010101010101010101010101010101010101010101010101010101010101018416146126db576040517fc103be2e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050505050505050505050565b6127226040518060c001604052806000815260200160008152602001606081526020016060815260200160608152602001606081525090565b600061273083850185615718565b604081015151606082015151919250908114158061275357508082608001515114155b806127635750808260a001515114155b1561279a576040517fb55ac75400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b509392505050565b600082604001515167ffffffffffffffff8111156127c2576127c26144ef565b60405190808252806020026020018201604052801561288657816020015b604080516101e081018252600060e08201818152610100830182905261012083018290526101408301829052610160830182905261018083018290526101a083018290526101c0830182905282526020808301829052928201819052606082018190526080820181905260a0820181905260c082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816127e05790505b50905060006040518060800160405280600061ffff16815260200160006bffffffffffffffffffffffff16815260200160006bffffffffffffffffffffffff16815260200160008152509050600085610100015173ffffffffffffffffffffffffffffffffffffffff166357e871e76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612924573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129489190614e92565b9050600086610100015173ffffffffffffffffffffffffffffffffffffffff166318b8f6136040518163ffffffff1660e01b8152600401602060405180830381865afa15801561299c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129c09190614e92565b905060005b866040015151811015612e375760046000886040015183815181106129ec576129ec6150a0565b602090810291909101810151825281810192909252604090810160002081516101008082018452825460ff81161515835263ffffffff91810482169583019590955265010000000000850481169382019390935273ffffffffffffffffffffffffffffffffffffffff69010000000000000000009094048416606082015260018201546fffffffffffffffffffffffffffffffff811660808301526bffffffffffffffffffffffff70010000000000000000000000000000000082041660a08301527c0100000000000000000000000000000000000000000000000000000000900490921660c08301526002015490911660e08201528551869083908110612af657612af66150a0565b602002602001015160000181905250612b2b87604001518281518110612b1e57612b1e6150a0565b602002602001015161354e565b858281518110612b3d57612b3d6150a0565b6020026020010151606001906001811115612b5a57612b5a61550c565b90816001811115612b6d57612b6d61550c565b81525050612bd187604001518281518110612b8a57612b8a6150a0565b60200260200101518489608001518481518110612ba957612ba96150a0565b6020026020010151888581518110612bc357612bc36150a0565b60200260200101518c6135f9565b868381518110612be357612be36150a0565b6020026020010151602001878481518110612c0057612c006150a0565b602002602001015160c0018281525082151515158152505050848181518110612c2b57612c2b6150a0565b60200260200101516020015115612c5b57600184600001818151612c4f9190615805565b61ffff16905250612c60565b612e25565b612cc6858281518110612c7557612c756150a0565b6020026020010151600001516060015188606001518381518110612c9b57612c9b6150a0565b60200260200101518960a001518481518110612cb957612cb96150a0565b6020026020010151612265565b868381518110612cd857612cd86150a0565b6020026020010151604001878481518110612cf557612cf56150a0565b6020026020010151608001828152508215151515815250505087608001516001612d1f91906151ee565b612d2d9060ff166040615820565b6103a48860a001518381518110612d4657612d466150a0565b602002602001015151612d5991906151db565b612d6391906151db565b858281518110612d7557612d756150a0565b602002602001015160a0018181525050848181518110612d9757612d976150a0565b602002602001015160a0015184606001818151612db491906151db565b9052508451859082908110612dcb57612dcb6150a0565b60200260200101516080015186612de29190615837565b9550612e2587604001518281518110612dfd57612dfd6150a0565b602002602001015184878481518110612e1857612e186150a0565b6020026020010151613718565b80612e2f816150cf565b9150506129c5565b50825161ffff16600003612e4e5750505050505050565b6155f0612e5c366010615820565b5a612e679088615837565b612e7191906151db565b612e7b91906151db565b8351909550611b5890612e929061ffff1687615879565b612e9c91906151db565b604080516060810182526000808252602082018190529181018290529196505b87604001515181101561310f57858181518110612edb57612edb6150a0565b602002602001015160200151156130fd57612f1789878381518110612f0257612f026150a0565b60200260200101516000015160e0015161381d565b91506000612fe18a6040518061010001604052808a8681518110612f3d57612f3d6150a0565b60200260200101516080015181526020018b815260200189606001518b8781518110612f6b57612f6b6150a0565b602002602001015160a0015189612f829190615820565b612f8c9190615879565b81526020018c6000015181526020018c602001518152602001612fae8e61396e565b81526020810187905260016040918201528c0151805186908110612fd457612fd46150a0565b6020026020010151613a5f565b9050806060015186604001818151612ff991906151b6565b6bffffffffffffffffffffffff1690525060408101516020870180516130209083906151b6565b6bffffffffffffffffffffffff169052508651879083908110613045576130456150a0565b602002602001015160400151151589604001518381518110613069576130696150a0565b60200260200101517fad8cc9579b21dfe2c2f6ea35ba15b656e46b4f5b0cb424f52739b8ce5cac9c5b836060015184604001516130a691906151b6565b8a86815181106130b8576130b86150a0565b6020026020010151608001518c8e6080015188815181106130db576130db6150a0565b60200260200101516040516130f3949392919061588d565b60405180910390a3505b80613107816150cf565b915050612ebc565b5050602083810151336000908152600b9092526040909120805460029061314b9084906201000090046bffffffffffffffffffffffff166151b6565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508260400151601460000160008282829054906101000a90046bffffffffffffffffffffffff166131a991906151b6565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff16021790555050505050505050565b3373ffffffffffffffffffffffffffffffffffffffff82160361325f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610d56565b600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b73ffffffffffffffffffffffffffffffffffffffff83166000908152600b602090815260408083208151608081018352905460ff80821615801584526101008304909116948301949094526bffffffffffffffffffffffff6201000082048116938301939093526e01000000000000000000000000000090049091166060820152906134d157600081606001518561336d91906158ca565b9050600061337b85836158ef565b9050808360400181815161338f91906151b6565b6bffffffffffffffffffffffff169052506133aa858261591a565b836060018181516133bb91906151b6565b6bffffffffffffffffffffffff90811690915273ffffffffffffffffffffffffffffffffffffffff89166000908152600b602090815260409182902087518154928901519389015160608a015186166e010000000000000000000000000000027fffffffffffff000000000000000000000000ffffffffffffffffffffffffffff919096166201000002167fffffffffffff000000000000000000000000000000000000000000000000ffff60ff95909516610100027fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff921515929092167fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000909416939093171792909216179190911790555050505b60400151949350505050565b60006121ed8373ffffffffffffffffffffffffffffffffffffffff8416613ccd565b6000818152600183016020526040812054613546575081546001818101845560008481526020808220909301849055845484825282860190935260409020919091556121f0565b5060006121f0565b6000818160045b600f8110156135db577fff000000000000000000000000000000000000000000000000000000000000008216838260208110613593576135936150a0565b1a60f81b7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135c957506000949350505050565b806135d3816150cf565b915050613555565b5081600f1a60018111156135f1576135f161550c565b949350505050565b6000808080856060015160018111156136145761361461550c565b0361363a576136268888888888613dc0565b6136355760009250905061370e565b6136b2565b6001856060015160018111156136525761365261550c565b0361368057600061366589898988613f4a565b925090508061367a575060009250905061370e565b506136b2565b6040517ff2b2d41200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84516040015163ffffffff16871061370757877fc3237c8807c467c1b39b8d0395eff077313e691bf0a7388106792564ebfd5636876040516136f491906144dc565b60405180910390a260009250905061370e565b6001925090505b9550959350505050565b6000816060015160018111156137305761373061550c565b0361379457600083815260046020526040902060010180547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167c010000000000000000000000000000000000000000000000000000000063ffffffff851602179055505050565b6001816060015160018111156137ac576137ac61550c565b036138185760c08101805160009081526008602052604080822080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055915191517fa4a4e334c0e330143f9437484fe516c13bc560b86b5b0daf58e7084aaac228f29190a25b505050565b604080516060810182526000808252602080830182815283850183905273ffffffffffffffffffffffffffffffffffffffff868116845260229092528483208054640100000000810462ffffff1690925263ffffffff8216855285517ffeaf968c00000000000000000000000000000000000000000000000000000000815295519495909484936701000000000000009093049092169163feaf968c9160048082019260a0929091908290030181865afa1580156138df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139039190615964565b5093505092505060008213158061391957508042105b8061394957506000866040015162ffffff16118015613949575061393d8142615837565b866040015162ffffff16105b1561395d5760018301546040850152613965565b604084018290525b50505092915050565b60008060007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156139de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a029190615964565b50935050925050600082131580613a1857508042105b80613a4857506000846040015162ffffff16118015613a485750613a3c8142615837565b846040015162ffffff16105b15613a58575050601b5492915050565b5092915050565b604080516080810182526000808252602082018190529181018290526060810182905290613a8d8585614157565b60008481526004602090815260408220600101549083015183519394507001000000000000000000000000000000009091046bffffffffffffffffffffffff1692613ad891906151b6565b905082600001516bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613b5d57819050613b3e86608001518760c0015160400151846bffffffffffffffffffffffff16613b2f9190615820565b613b399190615879565b614321565b6bffffffffffffffffffffffff16604084015260006060840152613be9565b806bffffffffffffffffffffffff16826bffffffffffffffffffffffff161015613be957819050613bd583604001516bffffffffffffffffffffffff1687608001518860c0015160400151856bffffffffffffffffffffffff16613bc19190615820565b613bcb9190615879565b613b399190615837565b6bffffffffffffffffffffffff1660608401525b60008581526004602052604090206001018054829190601090613c2f90849070010000000000000000000000000000000090046bffffffffffffffffffffffff166158ca565b82546101009290920a6bffffffffffffffffffffffff81810219909316918316021790915560008781526004602052604081206001018054928516935091613c8a9084906fffffffffffffffffffffffffffffffff166159b4565b92506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055508293505050509392505050565b60008181526001830160205260408120548015613db6576000613cf1600183615837565b8554909150600090613d0590600190615837565b9050818114613d6a576000866000018281548110613d2557613d256150a0565b9060005260206000200154905080876000018481548110613d4857613d486150a0565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080613d7b57613d7b6159dd565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506121f0565b60009150506121f0565b60008084806020019051810190613dd79190615a0c565b845160c00151815191925063ffffffff90811691161015613e3457867f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e886604051613e2291906144dc565b60405180910390a26000915050613f41565b8260e001518015613ef45750602081015115801590613ef45750602081015161010084015182516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa158015613ecd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ef19190614e92565b14155b80613f065750805163ffffffff168611155b15613f3b57867f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc30186604051613e2291906144dc565b60019150505b95945050505050565b600080600084806020019051810190613f639190615a64565b9050600087826000015183602001518460400151604051602001613fc594939291909384526020840192909252604083015260e01b7fffffffff0000000000000000000000000000000000000000000000000000000016606082015260640190565b6040516020818303038152906040528051906020012090508460e0015180156140a057506080820151158015906140a05750608082015161010086015160608401516040517f85df51fd00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015273ffffffffffffffffffffffffffffffffffffffff909116906385df51fd90602401602060405180830381865afa158015614079573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061409d9190614e92565b14155b806140b5575086826060015163ffffffff1610155b156140ff57877f6aa7f60c176da7af894b384daea2249497448137f5943c1237ada8bc92bdc301876040516140ea91906144dc565b60405180910390a260009350915061414e9050565b60008181526008602052604090205460ff161561414657877f405288ea7be309e16cfdf481367f90a413e1d4634fcdaf8966546db9b93012e8876040516140ea91906144dc565b600193509150505b94509492505050565b6040805160808101825260008082526020820181905291810182905260608101919091526000836060015161ffff1683606001516141959190615820565b90508260e0015180156141a75750803a105b156141af57503a5b60008360a001518460400151856020015186600001516141cf91906151db565b6141d99085615820565b6141e391906151db565b6141ed9190615820565b90506142068460c001516040015182613b399190615879565b6bffffffffffffffffffffffff168352608084015161422990613b399083615879565b6bffffffffffffffffffffffff16604084015260c0840151602001516000906142609062ffffff16683635c9adc5dea00000615820565b9050600081633b9aca008760a001518860c001516000015163ffffffff1689604001518a60000151896142939190615820565b61429d91906151db565b6142a79190615820565b6142b19190615820565b6142bb9190615879565b6142c591906151db565b90506142de8660c001516040015182613b399190615879565b6bffffffffffffffffffffffff166020860152608086015161430490613b399083615879565b6bffffffffffffffffffffffff1660608601525050505092915050565b60006bffffffffffffffffffffffff8211156143bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203960448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d56565b5090565b50805460008255906000526020600020908101906115b89190614463565b82805482825590600052602060002090810192821561445b579160200282015b8281111561445b57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190614401565b506143bf9291505b5b808211156143bf5760008155600101614464565b6000815180845260005b8181101561449e57602081850181015186830182015201614482565b5060006020828601015260207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011685010191505092915050565b6020815260006121ed6020830184614478565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051610200810167ffffffffffffffff81118282101715614542576145426144ef565b60405290565b60405160a0810167ffffffffffffffff81118282101715614542576145426144ef565b60405160c0810167ffffffffffffffff81118282101715614542576145426144ef565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff811182821017156145d5576145d56144ef565b604052919050565b600067ffffffffffffffff8211156145f7576145f76144ef565b5060051b60200190565b73ffffffffffffffffffffffffffffffffffffffff811681146115b857600080fd5b803561462e81614601565b919050565b600082601f83011261464457600080fd5b81356020614659614654836145dd565b61458e565b82815260059290921b8401810191818101908684111561467857600080fd5b8286015b8481101561469c57803561468f81614601565b835291830191830161467c565b509695505050505050565b803560ff8116811461462e57600080fd5b63ffffffff811681146115b857600080fd5b803561462e816146b8565b62ffffff811681146115b857600080fd5b803561462e816146d5565b61ffff811681146115b857600080fd5b803561462e816146f1565b80151581146115b857600080fd5b803561462e8161470c565b6000610200828403121561473857600080fd5b61474061451e565b905061474b826146ca565b8152614759602083016146e6565b602082015261476a60408301614701565b604082015261477b606083016146ca565b606082015261478c608083016146ca565b608082015261479d60a083016146ca565b60a08201526147ae60c083016146ca565b60c082015260e08281013590820152610100808301359082015261012080830135908201526101406147e1818401614623565b908201526101608281013567ffffffffffffffff81111561480157600080fd5b61480d85828601614633565b828401525050610180614821818401614623565b908201526101a0614833838201614623565b908201526101c061484583820161471a565b908201526101e0614857838201614623565b9082015292915050565b803567ffffffffffffffff8116811461462e57600080fd5b600082601f83011261488a57600080fd5b813567ffffffffffffffff8111156148a4576148a46144ef565b6148d560207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401160161458e565b8181528460208386010111156148ea57600080fd5b816020850160208301376000918101602001919091529392505050565b600082601f83011261491857600080fd5b81356020614928614654836145dd565b82815260059290921b8401810191818101908684111561494757600080fd5b8286015b8481101561469c57803561495e81614601565b835291830191830161494b565b6bffffffffffffffffffffffff811681146115b857600080fd5b600082601f83011261499657600080fd5b813560206149a6614654836145dd565b82815260a092830285018201928282019190878511156149c557600080fd5b8387015b85811015614a445781818a0312156149e15760008081fd5b6149e9614548565b81356149f4816146b8565b815281860135614a03816146d5565b81870152604082810135614a1681614601565b9082015260608281013590820152608080830135614a338161496b565b9082015284529284019281016149c9565b5090979650505050505050565b600080600080600080600080610100898b031215614a6e57600080fd5b883567ffffffffffffffff80821115614a8657600080fd5b614a928c838d01614633565b995060208b0135915080821115614aa857600080fd5b614ab48c838d01614633565b9850614ac260408c016146a7565b975060608b0135915080821115614ad857600080fd5b614ae48c838d01614725565b9650614af260808c01614861565b955060a08b0135915080821115614b0857600080fd5b614b148c838d01614879565b945060c08b0135915080821115614b2a57600080fd5b614b368c838d01614907565b935060e08b0135915080821115614b4c57600080fd5b50614b598b828c01614985565b9150509295985092959890939650565b60008083601f840112614b7b57600080fd5b50813567ffffffffffffffff811115614b9357600080fd5b602083019150836020828501011115614bab57600080fd5b9250929050565b60008060008060608587031215614bc857600080fd5b8435614bd381614601565b935060208501359250604085013567ffffffffffffffff811115614bf657600080fd5b614c0287828801614b69565b95989497509550505050565b600080600060408486031215614c2357600080fd5b83359250602084013567ffffffffffffffff811115614c4157600080fd5b614c4d86828701614b69565b9497909650939450505050565b60008083601f840112614c6c57600080fd5b50813567ffffffffffffffff811115614c8457600080fd5b6020830191508360208260051b8501011115614bab57600080fd5b60008060008060008060008060e0898b031215614cbb57600080fd5b606089018a811115614ccc57600080fd5b8998503567ffffffffffffffff80821115614ce657600080fd5b614cf28c838d01614b69565b909950975060808b0135915080821115614d0b57600080fd5b614d178c838d01614c5a565b909750955060a08b0135915080821115614d3057600080fd5b50614d3d8b828c01614c5a565b999c989b50969995989497949560c00135949350505050565b60008060008060008060c08789031215614d6f57600080fd5b863567ffffffffffffffff80821115614d8757600080fd5b614d938a838b01614633565b97506020890135915080821115614da957600080fd5b614db58a838b01614633565b9650614dc360408a016146a7565b95506060890135915080821115614dd957600080fd5b614de58a838b01614879565b9450614df360808a01614861565b935060a0890135915080821115614e0957600080fd5b50614e1689828a01614879565b9150509295509295509295565b600060208284031215614e3557600080fd5b8135614e4081614601565b9392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff8181168382160290811690818114613a5857613a58614e47565b600060208284031215614ea457600080fd5b5051919050565b63ffffffff818116838216019080821115613a5857613a58614e47565b600081518084526020808501945080840160005b83811015614f0e57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101614edc565b509495945050505050565b60208152614f3060208201835163ffffffff169052565b60006020830151614f48604084018262ffffff169052565b50604083015161ffff8116606084015250606083015163ffffffff8116608084015250608083015163ffffffff811660a08401525060a083015163ffffffff811660c08401525060c083015163ffffffff811660e08401525060e0830151610100838101919091528301516101208084019190915283015161014080840191909152830151610160614ff18185018373ffffffffffffffffffffffffffffffffffffffff169052565b808501519150506102006101808181860152615011610220860184614ec8565b908601519092506101a061503c8682018373ffffffffffffffffffffffffffffffffffffffff169052565b86015190506101c06150658682018373ffffffffffffffffffffffffffffffffffffffff169052565b86015190506101e061507a8682018315159052565b9095015173ffffffffffffffffffffffffffffffffffffffff1693019290925250919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361510057615100614e47565b5060010190565b600061012063ffffffff808d1684528b6020850152808b166040850152508060608401526151378184018a614ec8565b9050828103608084015261514b8189614ec8565b905060ff871660a084015282810360c08401526151688187614478565b905067ffffffffffffffff851660e084015282810361010084015261518d8185614478565b9c9b505050505050505050505050565b6000602082840312156151af57600080fd5b5035919050565b6bffffffffffffffffffffffff818116838216019080821115613a5857613a58614e47565b808201808211156121f0576121f0614e47565b60ff81811683821601908111156121f0576121f0614e47565b805161462e816146b8565b805161462e816146d5565b805161462e816146f1565b805161462e81614601565b600082601f83011261524457600080fd5b81516020615254614654836145dd565b82815260059290921b8401810191818101908684111561527357600080fd5b8286015b8481101561469c57805161528a81614601565b8352918301918301615277565b805161462e8161470c565b600082601f8301126152b357600080fd5b815160206152c3614654836145dd565b82815260a092830285018201928282019190878511156152e257600080fd5b8387015b85811015614a445781818a0312156152fe5760008081fd5b615306614548565b8151615311816146b8565b815281860151615320816146d5565b8187015260408281015161533381614601565b90820152606082810151908201526080808301516153508161496b565b9082015284529284019281016152e6565b60008060006060848603121561537657600080fd5b835167ffffffffffffffff8082111561538e57600080fd5b9085019061020082880312156153a357600080fd5b6153ab61451e565b6153b483615207565b81526153c260208401615212565b60208201526153d36040840161521d565b60408201526153e460608401615207565b60608201526153f560808401615207565b608082015261540660a08401615207565b60a082015261541760c08401615207565b60c082015260e083810151908201526101008084015190820152610120808401519082015261014061544a818501615228565b90820152610160838101518381111561546257600080fd5b61546e8a828701615233565b828401525050610180615482818501615228565b908201526101a0615494848201615228565b908201526101c06154a6848201615297565b908201526101e06154b8848201615228565b9082015260208701519095509150808211156154d357600080fd5b6154df87838801615233565b935060408601519150808211156154f557600080fd5b50615502868287016152a2565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b60006101208b835273ffffffffffffffffffffffffffffffffffffffff8b16602084015267ffffffffffffffff808b1660408501528160608501526155828285018b614ec8565b91508382036080850152615596828a614ec8565b915060ff881660a085015283820360c08501526155b38288614478565b90861660e0850152838103610100850152905061518d8185614478565b8281526040602082015260006135f16040830184614478565b600080604083850312156155fc57600080fd5b82516156078161470c565b6020939093015192949293505050565b8183823760009101908152919050565b8281526080810160608360208401379392505050565b600082601f83011261564e57600080fd5b8135602061565e614654836145dd565b82815260059290921b8401810191818101908684111561567d57600080fd5b8286015b8481101561469c5780358352918301918301615681565b600082601f8301126156a957600080fd5b813560206156b9614654836145dd565b82815260059290921b840181019181810190868411156156d857600080fd5b8286015b8481101561469c57803567ffffffffffffffff8111156156fc5760008081fd5b61570a8986838b0101614879565b8452509183019183016156dc565b60006020828403121561572a57600080fd5b813567ffffffffffffffff8082111561574257600080fd5b9083019060c0828603121561575657600080fd5b61575e61456b565b823581526020830135602082015260408301358281111561577e57600080fd5b61578a8782860161563d565b6040830152506060830135828111156157a257600080fd5b6157ae8782860161563d565b6060830152506080830135828111156157c657600080fd5b6157d287828601615698565b60808301525060a0830135828111156157ea57600080fd5b6157f687828601615698565b60a08301525095945050505050565b61ffff818116838216019080821115613a5857613a58614e47565b80820281158282048414176121f0576121f0614e47565b818103818111156121f0576121f0614e47565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000826158885761588861584a565b500490565b6bffffffffffffffffffffffff851681528360208201528260408201526080606082015260006158c06080830184614478565b9695505050505050565b6bffffffffffffffffffffffff828116828216039080821115613a5857613a58614e47565b60006bffffffffffffffffffffffff8084168061590e5761590e61584a565b92169190910492915050565b6bffffffffffffffffffffffff81811683821602808216919082811461594257615942614e47565b505092915050565b805169ffffffffffffffffffff8116811461462e57600080fd5b600080600080600060a0868803121561597c57600080fd5b6159858661594a565b94506020860151935060408601519250606086015191506159a86080870161594a565b90509295509295909350565b6fffffffffffffffffffffffffffffffff818116838216019080821115613a5857613a58614e47565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b600060408284031215615a1e57600080fd5b6040516040810181811067ffffffffffffffff82111715615a4157615a416144ef565b6040528251615a4f816146b8565b81526020928301519281019290925250919050565b600060a08284031215615a7657600080fd5b615a7e614548565b82518152602083015160208201526040830151615a9a816146b8565b60408201526060830151615aad816146b8565b6060820152608092830151928101929092525091905056fea164736f6c6343000813000a", } var AutomationRegistryABI = AutomationRegistryMetaData.ABI diff --git a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt index 584b1a0083f..6f545de49a1 100644 --- a/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt +++ b/core/gethwrappers/generation/generated-wrapper-dependency-versions-do-not-edit.txt @@ -14,7 +14,7 @@ automation_registry_logic_a_wrapper_2_3: ../../contracts/solc/v0.8.19/Automation automation_registry_logic_b_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_2/AutomationRegistryLogicB2_2.bin a6d33dfbbfb0ff253eb59a51f4f6d6d4c22ea5ec95aae52d25d49a312b37a22f automation_registry_logic_b_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_3/AutomationRegistryLogicB2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistryLogicB2_3/AutomationRegistryLogicB2_3.bin 92956f3846438cc0e0d305e0fd71ea656d786532a9644a039bcf2657cf6ee562 automation_registry_wrapper_2_2: ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_2/AutomationRegistry2_2.bin de60f69878e9b32a291a001c91fc8636544c2cfbd9b507c8c1a4873b602bfb62 -automation_registry_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.bin 2b6099b9d5964a17d194b573789863ee62517ff96be9474284cbc4e458567f43 +automation_registry_wrapper_2_3: ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.abi ../../contracts/solc/v0.8.19/AutomationRegistry2_3/AutomationRegistry2_3.bin 58158d11bba7f93fa0efbeb3d0c04ed5886553858d6b1fc6f51c5445d20891a3 automation_utils_2_1: ../../contracts/solc/v0.8.16/AutomationUtils2_1/AutomationUtils2_1.abi ../../contracts/solc/v0.8.16/AutomationUtils2_1/AutomationUtils2_1.bin 815b17b63f15d26a0274b962eefad98cdee4ec897ead58688bbb8e2470e585f5 automation_utils_2_2: ../../contracts/solc/v0.8.19/AutomationUtils2_2/AutomationUtils2_2.abi ../../contracts/solc/v0.8.19/AutomationUtils2_2/AutomationUtils2_2.bin 8743f6231aaefa3f2a0b2d484258070d506e2d0860690e66890dccc3949edb2e automation_utils_2_3: ../../contracts/solc/v0.8.19/AutomationUtils2_3/AutomationUtils2_3.abi ../../contracts/solc/v0.8.19/AutomationUtils2_3/AutomationUtils2_3.bin 11e2b481dc9a4d936e3443345d45d2cc571164459d214917b42a8054b295393b