UNPKG

@chainlink/functions-toolkit

Version:

An NPM package with collection of functions that can be used for working with Chainlink Functions.

1,275 lines 136 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FunctionsCoordinatorSource = void 0; exports.FunctionsCoordinatorSource = { _format: 'hh-sol-artifact-1', contractName: 'FunctionsCoordinator', sourceName: 'FunctionsCoordinator.sol', abi: [ { inputs: [ { internalType: 'address', name: 'router', type: 'address', }, { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], internalType: 'struct FunctionsBillingConfig', name: 'config', type: 'tuple', }, { internalType: 'address', name: 'linkToNativeFeed', type: 'address', }, { internalType: 'address', name: 'linkToUsdFeed', type: 'address', }, ], stateMutability: 'nonpayable', type: 'constructor', }, { inputs: [], name: 'EmptyPublicKey', type: 'error', }, { inputs: [], name: 'InconsistentReportData', type: 'error', }, { inputs: [], name: 'InsufficientBalance', type: 'error', }, { inputs: [], name: 'InvalidCalldata', type: 'error', }, { inputs: [ { internalType: 'string', name: 'message', type: 'string', }, ], name: 'InvalidConfig', type: 'error', }, { inputs: [ { internalType: 'int256', name: 'linkWei', type: 'int256', }, ], name: 'InvalidLinkWeiPrice', type: 'error', }, { inputs: [], name: 'InvalidSubscription', type: 'error', }, { inputs: [ { internalType: 'int256', name: 'usdLink', type: 'int256', }, ], name: 'InvalidUsdLinkPrice', type: 'error', }, { inputs: [ { internalType: 'address', name: 'owner', type: 'address', }, ], name: 'MustBeSubOwner', type: 'error', }, { inputs: [], name: 'NoTransmittersSet', type: 'error', }, { inputs: [], name: 'OnlyCallableByRouter', type: 'error', }, { inputs: [], name: 'OnlyCallableByRouterOwner', type: 'error', }, { inputs: [], name: 'PaymentTooLarge', type: 'error', }, { inputs: [ { internalType: 'string', name: 'message', type: 'string', }, ], name: 'ReportInvalid', type: 'error', }, { inputs: [], name: 'RouterMustBeSet', type: 'error', }, { inputs: [], name: 'UnauthorizedPublicKeyChange', type: 'error', }, { inputs: [], name: 'UnauthorizedSender', type: 'error', }, { inputs: [], name: 'UnsupportedRequestDataVersion', type: 'error', }, { anonymous: false, inputs: [ { indexed: false, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, ], name: 'CommitmentDeleted', 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: [ { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], indexed: false, internalType: 'struct FunctionsBillingConfig', name: 'config', type: 'tuple', }, ], name: 'ConfigUpdated', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { indexed: true, internalType: 'address', name: 'requestingContract', type: 'address', }, { indexed: false, internalType: 'address', name: 'requestInitiator', type: 'address', }, { indexed: false, internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { indexed: false, internalType: 'address', name: 'subscriptionOwner', type: 'address', }, { indexed: false, internalType: 'bytes', name: 'data', type: 'bytes', }, { indexed: false, internalType: 'uint16', name: 'dataVersion', type: 'uint16', }, { indexed: false, internalType: 'bytes32', name: 'flags', type: 'bytes32', }, { indexed: false, internalType: 'uint64', name: 'callbackGasLimit', type: 'uint64', }, { components: [ { internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { internalType: 'address', name: 'coordinator', type: 'address', }, { internalType: 'uint96', name: 'estimatedTotalCostJuels', type: 'uint96', }, { internalType: 'address', name: 'client', type: 'address', }, { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint72', name: 'adminFee', type: 'uint72', }, { internalType: 'uint72', name: 'donFee', type: 'uint72', }, { internalType: 'uint40', name: 'gasOverheadBeforeCallback', type: 'uint40', }, { internalType: 'uint40', name: 'gasOverheadAfterCallback', type: 'uint40', }, { internalType: 'uint32', name: 'timeoutTimestamp', type: 'uint32', }, ], indexed: false, internalType: 'struct FunctionsResponse.Commitment', name: 'commitment', type: 'tuple', }, ], name: 'OracleRequest', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { indexed: false, internalType: 'address', name: 'transmitter', type: 'address', }, ], name: 'OracleResponse', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'address', name: 'from', type: 'address', }, { indexed: true, internalType: 'address', name: 'to', type: 'address', }, ], name: 'OwnershipTransferRequested', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'address', name: 'from', type: 'address', }, { indexed: true, internalType: 'address', name: 'to', type: 'address', }, ], name: 'OwnershipTransferred', type: 'event', }, { anonymous: false, inputs: [ { indexed: true, internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { indexed: false, internalType: 'uint96', name: 'juelsPerGas', type: 'uint96', }, { indexed: false, internalType: 'uint256', name: 'l1FeeShareWei', type: 'uint256', }, { indexed: false, internalType: 'uint96', name: 'callbackCostJuels', type: 'uint96', }, { indexed: false, internalType: 'uint72', name: 'donFeeJuels', type: 'uint72', }, { indexed: false, internalType: 'uint72', name: 'adminFeeJuels', type: 'uint72', }, { indexed: false, internalType: 'uint72', name: 'operationFeeJuels', type: 'uint72', }, ], name: 'RequestBilled', 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', }, { inputs: [], name: 'acceptOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, ], name: 'deleteCommitment', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'bytes', name: 'data', type: 'bytes', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint256', name: 'gasPriceWei', type: 'uint256', }, ], name: 'estimateCost', outputs: [ { internalType: 'uint96', name: '', type: 'uint96', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getAdminFeeJuels', outputs: [ { internalType: 'uint72', name: '', type: 'uint72', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getConfig', outputs: [ { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], internalType: 'struct FunctionsBillingConfig', name: '', type: 'tuple', }, ], stateMutability: 'view', type: 'function', }, { inputs: [ { internalType: 'bytes', name: '', type: 'bytes', }, ], name: 'getDONFeeJuels', outputs: [ { internalType: 'uint72', name: '', type: 'uint72', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getDONPublicKey', outputs: [ { internalType: 'bytes', name: '', type: 'bytes', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getOperationFeeJuels', outputs: [ { internalType: 'uint72', name: '', type: 'uint72', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getThresholdPublicKey', outputs: [ { internalType: 'bytes', name: '', type: 'bytes', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getUsdPerUnitLink', outputs: [ { internalType: 'uint256', name: '', type: 'uint256', }, { internalType: 'uint8', name: '', type: 'uint8', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'getWeiPerUnitLink', outputs: [ { internalType: 'uint256', name: '', type: 'uint256', }, ], 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: 'recipient', type: 'address', }, { internalType: 'uint96', name: 'amount', type: 'uint96', }, ], name: 'oracleWithdraw', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [], name: 'oracleWithdrawAll', 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: '_onchainConfig', type: 'bytes', }, { internalType: 'uint64', name: '_offchainConfigVersion', type: 'uint64', }, { internalType: 'bytes', name: '_offchainConfig', type: 'bytes', }, ], name: 'setConfig', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes', name: 'donPublicKey', type: 'bytes', }, ], name: 'setDONPublicKey', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes', name: 'thresholdPublicKey', type: 'bytes', }, ], name: 'setThresholdPublicKey', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { components: [ { internalType: 'bytes', name: 'data', type: 'bytes', }, { internalType: 'bytes32', name: 'flags', type: 'bytes32', }, { internalType: 'address', name: 'requestingContract', type: 'address', }, { internalType: 'uint96', name: 'availableBalance', type: 'uint96', }, { internalType: 'uint72', name: 'adminFee', type: 'uint72', }, { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'uint64', name: 'initiatedRequests', type: 'uint64', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint16', name: 'dataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'completedRequests', type: 'uint64', }, { internalType: 'address', name: 'subscriptionOwner', type: 'address', }, ], internalType: 'struct FunctionsResponse.RequestMeta', name: 'request', type: 'tuple', }, ], name: 'startRequest', outputs: [ { components: [ { internalType: 'bytes32', name: 'requestId', type: 'bytes32', }, { internalType: 'address', name: 'coordinator', type: 'address', }, { internalType: 'uint96', name: 'estimatedTotalCostJuels', type: 'uint96', }, { internalType: 'address', name: 'client', type: 'address', }, { internalType: 'uint64', name: 'subscriptionId', type: 'uint64', }, { internalType: 'uint32', name: 'callbackGasLimit', type: 'uint32', }, { internalType: 'uint72', name: 'adminFee', type: 'uint72', }, { internalType: 'uint72', name: 'donFee', type: 'uint72', }, { internalType: 'uint40', name: 'gasOverheadBeforeCallback', type: 'uint40', }, { internalType: 'uint40', name: 'gasOverheadAfterCallback', type: 'uint40', }, { internalType: 'uint32', name: 'timeoutTimestamp', type: 'uint32', }, ], internalType: 'struct FunctionsResponse.Commitment', name: 'commitment', type: 'tuple', }, ], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'address', name: 'to', type: 'address', }, ], name: 'transferOwnership', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [ { internalType: 'bytes32[3]', name: 'reportContext', type: 'bytes32[3]', }, { internalType: 'bytes', name: 'report', type: 'bytes', }, { internalType: 'bytes32[]', name: 'rs', type: 'bytes32[]', }, { internalType: 'bytes32[]', name: 'ss', type: 'bytes32[]', }, { internalType: 'bytes32', name: 'rawVs', type: 'bytes32', }, ], name: 'transmit', outputs: [], stateMutability: 'nonpayable', type: 'function', }, { inputs: [], name: 'transmitters', outputs: [ { internalType: 'address[]', name: '', type: 'address[]', }, ], stateMutability: 'view', type: 'function', }, { inputs: [], name: 'typeAndVersion', outputs: [ { internalType: 'string', name: '', type: 'string', }, ], stateMutability: 'view', type: 'function', }, { inputs: [ { components: [ { internalType: 'uint32', name: 'fulfillmentGasPriceOverEstimationBP', type: 'uint32', }, { internalType: 'uint32', name: 'feedStalenessSeconds', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadBeforeCallback', type: 'uint32', }, { internalType: 'uint32', name: 'gasOverheadAfterCallback', type: 'uint32', }, { internalType: 'uint40', name: 'minimumEstimateGasPriceWei', type: 'uint40', }, { internalType: 'uint16', name: 'maxSupportedRequestDataVersion', type: 'uint16', }, { internalType: 'uint64', name: 'fallbackUsdPerUnitLink', type: 'uint64', }, { internalType: 'uint8', name: 'fallbackUsdPerUnitLinkDecimals', type: 'uint8', }, { internalType: 'uint224', name: 'fallbackNativePerUnitLink', type: 'uint224', }, { internalType: 'uint32', name: 'requestTimeoutSeconds', type: 'uint32', }, { internalType: 'uint16', name: 'donFeeCentsUsd', type: 'uint16', }, { internalType: 'uint16', name: 'operationFeeCentsUsd', type: 'uint16', }, ], internalType: 'struct FunctionsBillingConfig', name: 'config', type: 'tuple', }, ], name: 'updateConfig', outputs: [], stateMutability: 'nonpayable', type: 'function', }, ], bytecode: '0x60a06040523480156200001157600080fd5b506040516200601f3803806200601f8339810160408190526200003491620004db565b83838383833380600081620000905760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000c357620000c3816200014e565b5050506001600160a01b038116620000ee57604051632530e88560e11b815260040160405180910390fd5b6001600160a01b03908116608052600c80546001600160601b03166c0100000000000000000000000085841602179055600d80546001600160a01b0319169183169190911790556200014083620001f9565b505050505050505062000742565b336001600160a01b03821603620001a85760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000087565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b620002036200039e565b80516008805460208401516040808601516060870151608088015160a089015160c08a015160e08b015160ff16600160f81b026001600160f81b036001600160401b03909216600160b81b02919091166001600160b81b0361ffff938416600160a81b0261ffff60a81b1964ffffffffff909616600160801b029590951666ffffffffffffff60801b1963ffffffff9788166c010000000000000000000000000263ffffffff60601b19998916680100000000000000000299909916600160401b600160801b03199b8916640100000000026001600160401b0319909d169e89169e909e179b909b17999099169b909b1795909517979097169590951717969096161792909217909255610100840151610120850151909316600160e01b026001600160e01b0390931692909217600955610140830151600a80546101608601518416620100000263ffffffff19919091169290931691909117919091179055517f2e2c8535dcc25459d519f2300c114d2d2128bf6399722d04eca078461a3bf33a906200039390839062000639565b60405180910390a150565b620003a8620003aa565b565b6000546001600160a01b03163314620003a85760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e657200000000000000000000604482015260640162000087565b80516001600160a01b03811681146200041e57600080fd5b919050565b60405161018081016001600160401b03811182821017156200045557634e487b7160e01b600052604160045260246000fd5b60405290565b805163ffffffff811681146200041e57600080fd5b805164ffffffffff811681146200041e57600080fd5b805161ffff811681146200041e57600080fd5b80516001600160401b03811681146200041e57600080fd5b805160ff811681146200041e57600080fd5b80516001600160e01b03811681146200041e57600080fd5b6000806000808486036101e0811215620004f457600080fd5b620004ff8662000406565b945061018080601f19830112156200051657600080fd5b6200052062000423565b915062000530602088016200045b565b825262000540604088016200045b565b602083015262000553606088016200045b565b604083015262000566608088016200045b565b60608301526200057960a0880162000470565b60808301526200058c60c0880162000486565b60a08301526200059f60e0880162000499565b60c0830152610100620005b4818901620004b1565b60e0840152610120620005c9818a01620004c3565b828501526101409150620005df828a016200045b565b90840152610160620005f389820162000486565b8285015262000604838a0162000486565b90840152509093506200061d90506101a0860162000406565b91506200062e6101c0860162000406565b905092959194509250565b815163ffffffff1681526101808101602083015162000660602084018263ffffffff169052565b50604083015162000679604084018263ffffffff169052565b50606083015162000692606084018263ffffffff169052565b506080830151620006ac608084018264ffffffffff169052565b5060a0830151620006c360a084018261ffff169052565b5060c0830151620006df60c08401826001600160401b03169052565b5060e0830151620006f560e084018260ff169052565b50610100838101516001600160e01b0316908301526101208084015163ffffffff16908301526101408084015161ffff908116918401919091526101609384015116929091019190915290565b608051615897620007886000396000818161079c01528181610c7d01528181610f110152818161102701528181611b2d015281816129eb015261396901526158976000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c80638da5cb5b116100ee578063d227d24511610097578063e4ddcea611610071578063e4ddcea6146105d5578063f2f22ef1146105eb578063f2fde38b146105f3578063f6ea41f61461060657600080fd5b8063d227d2451461058a578063d328a91e146105ba578063e3d0e712146105c257600080fd5b8063b1dc65a4116100c8578063b1dc65a414610396578063ba9c924d146103a9578063c3f909d4146103bc57600080fd5b80638da5cb5b1461032e578063a631571e14610356578063afcb95d71461037657600080fd5b80637d4807871161015057806381f1b9381161012a57806381f1b938146102a657806381ff7048146102ae57806385b214cf1461031b57600080fd5b80637d480787146102765780637f15e1661461027e578063814118341461029157600080fd5b806366316d8d1161018157806366316d8d1461023c5780637212762f1461024f57806379ba50971461026e57600080fd5b8063083a5466146101a8578063181f5a77146101bd578063626f458c1461020f575b600080fd5b6101bb6101b6366004614010565b61060e565b005b6101f96040518060400160405280601c81526020017f46756e6374696f6e7320436f6f7264696e61746f722076312e332e300000000081525081565b60405161020691906140c0565b60405180910390f35b61022261021d36600461422d565b610663565b60405168ffffffffffffffffff9091168152602001610206565b6101bb61024a3660046142b4565b6106a0565b610257610859565b6040805192835260ff909116602083015201610206565b6101bb610a6c565b6101bb610b69565b6101bb61028c366004614010565b610d69565b610299610db9565b604051610206919061433e565b6101f9610e28565b6102f860015460025463ffffffff74010000000000000000000000000000000000000000830481169378010000000000000000000000000000000000000000000000009093041691565b6040805163ffffffff948516815293909216602084015290820152606001610206565b6101bb610329366004614351565b610ef9565b60005460405173ffffffffffffffffffffffffffffffffffffffff9091168152602001610206565b61036961036436600461436a565b610fb6565b60405161020691906144bf565b604080516001815260006020820181905291810191909152606001610206565b6101bb6103a4366004614513565b611247565b6101bb6103b736600461467e565b61185e565b61057d6040805161018081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e0810182905261010081018290526101208101829052610140810182905261016081019190915250604080516101808101825260085463ffffffff80821683526401000000008204811660208401526801000000000000000082048116938301939093526c01000000000000000000000000810483166060830152700100000000000000000000000000000000810464ffffffffff1660808301527501000000000000000000000000000000000000000000810461ffff90811660a084015277010000000000000000000000000000000000000000000000820467ffffffffffffffff1660c08401527f010000000000000000000000000000000000000000000000000000000000000090910460ff1660e08301526009547bffffffffffffffffffffffffffffffffffffffffffffffffffffffff81166101008401527c01000000000000000000000000000000000000000000000000000000009004909216610120820152600a5480831661014083015262010000900490911661016082015290565b604051610206919061476a565b61059d610598366004614887565b611b29565b6040516bffffffffffffffffffffffff9091168152602001610206565b6101f9611c97565b6101bb6105d036600461498f565b611cee565b6105dd61286a565b604051908152602001610206565b6102226129ae565b6101bb610601366004614a5c565b6129d3565b6102226129e7565b610616612a78565b6000819003610651576040517f4f42be3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600f61065e828483614b0c565b505050565b600a5460009061069a9060649061067d9061ffff16612afb565b6106879190614c85565b6bffffffffffffffffffffffff16612b48565b92915050565b6106a8612be7565b806bffffffffffffffffffffffff166000036106e25750336000908152600b60205260409020546bffffffffffffffffffffffff1661073c565b336000908152600b60205260409020546bffffffffffffffffffffffff8083169116101561073c576040517ff4d678b800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336000908152600b6020526040812080548392906107699084906bffffffffffffffffffffffff16614cb0565b92506101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055506107be7f000000000000000000000000000000000000000000000000000000000000000090565b6040517f66316d8d00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84811660048301526bffffffffffffffffffffffff8416602483015291909116906366316d8d90604401600060405180830381600087803b15801561083d57600080fd5b505af1158015610851573d6000803e3d6000fd5b505050505050565b600080600080600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156108cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f09190614cf6565b5093505092505080426109039190614d46565b600854640100000000900463ffffffff161080156109305750600854640100000000900463ffffffff1615155b1561098d57505060085477010000000000000000000000000000000000000000000000810467ffffffffffffffff16937f010000000000000000000000000000000000000000000000000000000000000090910460ff1692509050565b600082136109cf576040517f56b22ab8