diff --git a/contracts/gas-snapshots/vrf.gas-snapshot b/contracts/gas-snapshots/vrf.gas-snapshot index ff95ebd8afe..29053204765 100644 --- a/contracts/gas-snapshots/vrf.gas-snapshot +++ b/contracts/gas-snapshots/vrf.gas-snapshot @@ -1,16 +1,18 @@ TrustedBlockhashStoreTest:testGenericBHSFunctions() (gas: 53507) TrustedBlockhashStoreTest:testTrustedBHSFunctions() (gas: 49536) VRFCoordinatorV2Plus_Migration:testDeregister() (gas: 101083) -VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenInvalidCaller() (gas: 29377) -VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenInvalidCoordinator() (gas: 19877) -VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenPendingFulfillment() (gas: 237679) -VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenReentrant() (gas: 361358) -VRFCoordinatorV2Plus_Migration:testMigration() (gas: 471429) -VRFV2Plus:testCreateSubscription() (gas: 181121) -VRFV2Plus:testGetActiveSubscriptionIds() (gas: 3465607) -VRFV2Plus:testRegisterProvingKey() (gas: 101019) -VRFV2Plus:testRequestAndFulfillRandomWordsLINK() (gas: 755125) -VRFV2Plus:testRequestAndFulfillRandomWordsNative() (gas: 705549) -VRFV2Plus:testSetConfig() (gas: 73057) +VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenInvalidCaller() (gas: 29421) +VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenInvalidCoordinator() (gas: 19855) +VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenPendingFulfillment() (gas: 237702) +VRFCoordinatorV2Plus_Migration:testMigrateRevertsWhenReentrant() (gas: 354749) +VRFCoordinatorV2Plus_Migration:testMigration() (gas: 471631) +VRFCoordinatorV2Plus_Migration:testMigrationNoLink() (gas: 431052) +VRFV2Plus:testCancelSubWithNoLink() (gas: 160261) +VRFV2Plus:testCreateSubscription() (gas: 181127) +VRFV2Plus:testGetActiveSubscriptionIds() (gas: 3453659) +VRFV2Plus:testRegisterProvingKey() (gas: 101025) +VRFV2Plus:testRequestAndFulfillRandomWordsLINK() (gas: 755178) +VRFV2Plus:testRequestAndFulfillRandomWordsNative() (gas: 705581) +VRFV2Plus:testSetConfig() (gas: 73032) VRFV2PlusWrapperTest:testRequestAndFulfillRandomWordsLINKWrapper() (gas: 390063) VRFV2PlusWrapperTest:testRequestAndFulfillRandomWordsNativeWrapper() (gas: 290612) \ No newline at end of file diff --git a/contracts/src/v0.8/dev/vrf/SubscriptionAPI.sol b/contracts/src/v0.8/dev/vrf/SubscriptionAPI.sol index a320bbd7688..e9652d0bf6b 100644 --- a/contracts/src/v0.8/dev/vrf/SubscriptionAPI.sol +++ b/contracts/src/v0.8/dev/vrf/SubscriptionAPI.sol @@ -400,9 +400,14 @@ abstract contract SubscriptionAPI is ConfirmedOwner, IERC677Receiver, IVRFSubscr function cancelSubscriptionHelper(uint256 subId, address to) internal { (uint96 balance, uint96 ethBalance) = deleteSubscription(subId); - if (!LINK.transfer(to, uint256(balance))) { - revert InsufficientBalance(); + + // Only withdraw LINK if the token is active and there is a balance. + if (address(LINK) != address(0) && balance != 0) { + if (!LINK.transfer(to, uint256(balance))) { + revert InsufficientBalance(); + } } + // send eth to the "to" address using call (bool success, ) = to.call{value: uint256(ethBalance)}(""); if (!success) { diff --git a/contracts/src/v0.8/dev/vrf/VRFCoordinatorV2Plus.sol b/contracts/src/v0.8/dev/vrf/VRFCoordinatorV2Plus.sol index 7c1e7acd4cb..50abefc3ff8 100644 --- a/contracts/src/v0.8/dev/vrf/VRFCoordinatorV2Plus.sol +++ b/contracts/src/v0.8/dev/vrf/VRFCoordinatorV2Plus.sol @@ -672,7 +672,11 @@ contract VRFCoordinatorV2Plus is VRF, SubscriptionAPI { bytes memory encodedData = abi.encode(migrationData); deleteSubscription(subId); IVRFCoordinatorV2PlusMigration(newCoordinator).onMigration{value: ethBalance}(encodedData); - require(LINK.transfer(address(newCoordinator), balance), "insufficient funds"); + + // Only transfer LINK if the token is active and there is a balance. + if (address(LINK) != address(0) && balance != 0) { + require(LINK.transfer(address(newCoordinator), balance), "insufficient funds"); + } // despite the fact that we follow best practices this is still probably safest // to prevent any re-entrancy possibilities. diff --git a/contracts/test/v0.8/foundry/vrf/VRFCoordinatorV2Plus_Migration.t.sol b/contracts/test/v0.8/foundry/vrf/VRFCoordinatorV2Plus_Migration.t.sol index 5cba7353c13..41cb24492c6 100644 --- a/contracts/test/v0.8/foundry/vrf/VRFCoordinatorV2Plus_Migration.t.sol +++ b/contracts/test/v0.8/foundry/vrf/VRFCoordinatorV2Plus_Migration.t.sol @@ -26,13 +26,19 @@ contract VRFCoordinatorV2Plus_Migration is BaseTest { ExposedVRFCoordinatorV2Plus v1Coordinator; VRFCoordinatorV2Plus_V2Example v2Coordinator; + ExposedVRFCoordinatorV2Plus v1Coordinator_noLink; + VRFCoordinatorV2Plus_V2Example v2Coordinator_noLink; uint256 subId; + uint256 subId_noLink; VRFV2PlusConsumerExample testConsumer; + VRFV2PlusConsumerExample testConsumer_noLink; MockLinkToken linkToken; address linkTokenAddr; MockV3Aggregator linkEthFeed; address v1CoordinatorAddr; address v2CoordinatorAddr; + address v1CoordinatorAddr_noLink; + address v2CoordinatorAddr_noLink; event CoordinatorRegistered(address coordinatorAddress); event CoordinatorDeregistered(address coordinatorAddress); @@ -43,14 +49,19 @@ contract VRFCoordinatorV2Plus_Migration is BaseTest { vm.deal(OWNER, 100 ether); address bhs = makeAddr("bhs"); v1Coordinator = new ExposedVRFCoordinatorV2Plus(bhs); + v1Coordinator_noLink = new ExposedVRFCoordinatorV2Plus(bhs); subId = v1Coordinator.createSubscription(); + subId_noLink = v1Coordinator_noLink.createSubscription(); linkToken = new MockLinkToken(); linkEthFeed = new MockV3Aggregator(18, 500000000000000000); // .5 ETH (good for testing) v1Coordinator.setLINKAndLINKETHFeed(address(linkToken), address(linkEthFeed)); linkTokenAddr = address(linkToken); v2Coordinator = new VRFCoordinatorV2Plus_V2Example(address(linkToken), address(v1Coordinator)); + v2Coordinator_noLink = new VRFCoordinatorV2Plus_V2Example(address(0), address(v1Coordinator_noLink)); v1CoordinatorAddr = address(v1Coordinator); v2CoordinatorAddr = address(v2Coordinator); + v1CoordinatorAddr_noLink = address(v1Coordinator_noLink); + v2CoordinatorAddr_noLink = address(v2Coordinator_noLink); vm.expectEmit( false, // no first indexed topic @@ -62,7 +73,18 @@ contract VRFCoordinatorV2Plus_Migration is BaseTest { v1Coordinator.registerMigratableCoordinator(v2CoordinatorAddr); assertTrue(v1Coordinator.isTargetRegisteredExternal(v2CoordinatorAddr)); + vm.expectEmit( + false, // no first indexed topic + false, // no second indexed topic + false, // no third indexed topic + true // check data (target coordinator address) + ); + emit CoordinatorRegistered(v2CoordinatorAddr_noLink); + v1Coordinator_noLink.registerMigratableCoordinator(v2CoordinatorAddr_noLink); + assertTrue(v1Coordinator_noLink.isTargetRegisteredExternal(v2CoordinatorAddr_noLink)); + testConsumer = new VRFV2PlusConsumerExample(address(v1Coordinator), address(linkToken)); + testConsumer_noLink = new VRFV2PlusConsumerExample(address(v1Coordinator_noLink), address(0)); v1Coordinator.setConfig( DEFAULT_REQUEST_CONFIRMATIONS, DEFAULT_CALLBACK_GAS_LIMIT, @@ -71,8 +93,17 @@ contract VRFCoordinatorV2Plus_Migration is BaseTest { 20_000, VRFCoordinatorV2Plus.FeeConfig({fulfillmentFlatFeeLinkPPM: 200, fulfillmentFlatFeeEthPPM: 100}) ); + v1Coordinator_noLink.setConfig( + DEFAULT_REQUEST_CONFIRMATIONS, + DEFAULT_CALLBACK_GAS_LIMIT, + 600, + 10_000, + 20_000, + VRFCoordinatorV2Plus.FeeConfig({fulfillmentFlatFeeLinkPPM: 200, fulfillmentFlatFeeEthPPM: 100}) + ); registerProvingKey(); testConsumer.setCoordinator(v1CoordinatorAddr); + testConsumer_noLink.setCoordinator(v1CoordinatorAddr_noLink); } function testDeregister() public { @@ -181,6 +212,78 @@ contract VRFCoordinatorV2Plus_Migration is BaseTest { ); } + function testMigrationNoLink() public { + v1Coordinator_noLink.fundSubscriptionWithEth{value: DEFAULT_NATIVE_FUNDING}(subId_noLink); + v1Coordinator_noLink.addConsumer(subId_noLink, address(testConsumer_noLink)); + + // subscription exists in V1 coordinator before migration + ( + uint96 balance, + uint96 ethBalance, + uint64 reqCount, + address owner, + address[] memory consumers + ) = v1Coordinator_noLink.getSubscription(subId_noLink); + assertEq(balance, 0); + assertEq(ethBalance, DEFAULT_NATIVE_FUNDING); + assertEq(owner, address(OWNER)); + assertEq(consumers.length, 1); + assertEq(consumers[0], address(testConsumer_noLink)); + + assertEq(v1Coordinator_noLink.s_totalBalance(), 0); + assertEq(v1Coordinator_noLink.s_totalEthBalance(), DEFAULT_NATIVE_FUNDING); + + // Update consumer to point to the new coordinator + vm.expectEmit( + false, // no first indexed field + false, // no second indexed field + false, // no third indexed field + true // check data fields + ); + emit MigrationCompleted(v2CoordinatorAddr_noLink, subId_noLink); + v1Coordinator_noLink.migrate(subId_noLink, v2CoordinatorAddr_noLink); + + // subscription no longer exists in v1 coordinator after migration + vm.expectRevert(SubscriptionAPI.InvalidSubscription.selector); + v1Coordinator_noLink.getSubscription(subId); + assertEq(v1Coordinator_noLink.s_totalBalance(), 0); + assertEq(v1Coordinator_noLink.s_totalEthBalance(), 0); + assertEq(linkToken.balanceOf(v1CoordinatorAddr_noLink), 0); + assertEq(v1CoordinatorAddr_noLink.balance, 0); + + // subscription exists in v2 coordinator + (owner, consumers, balance, ethBalance) = v2Coordinator_noLink.getSubscription(subId_noLink); + assertEq(owner, address(OWNER)); + assertEq(consumers.length, 1); + assertEq(consumers[0], address(testConsumer_noLink)); + assertEq(balance, 0); + assertEq(ethBalance, DEFAULT_NATIVE_FUNDING); + assertEq(v2Coordinator_noLink.s_totalLinkBalance(), 0); + assertEq(v2Coordinator_noLink.s_totalNativeBalance(), DEFAULT_NATIVE_FUNDING); + assertEq(linkToken.balanceOf(v2CoordinatorAddr_noLink), 0); + assertEq(v2CoordinatorAddr_noLink.balance, DEFAULT_NATIVE_FUNDING); + + // calling migrate again on V1 coordinator should fail + vm.expectRevert(SubscriptionAPI.InvalidSubscription.selector); + v1Coordinator_noLink.migrate(subId_noLink, v2CoordinatorAddr_noLink); + + // test request still works after migration + testConsumer_noLink.requestRandomWords( + DEFAULT_CALLBACK_GAS_LIMIT, + DEFAULT_REQUEST_CONFIRMATIONS, + DEFAULT_NUM_WORDS, + KEY_HASH, + false + ); + assertEq(testConsumer_noLink.s_recentRequestId(), 1); + + v2Coordinator_noLink.fulfillRandomWords(testConsumer_noLink.s_recentRequestId()); + assertEq( + testConsumer_noLink.getRandomness(testConsumer_noLink.s_recentRequestId(), 0), + v2Coordinator_noLink.generateFakeRandomness(testConsumer_noLink.s_recentRequestId())[0] + ); + } + function testMigrateRevertsWhenInvalidCoordinator() external { address invalidCoordinator = makeAddr("invalidCoordinator"); @@ -227,6 +330,7 @@ contract VRFCoordinatorV2Plus_Migration is BaseTest { function registerProvingKey() public { uint256[2] memory uncompressedKeyParts = this.getProvingKeyParts(UNCOMPRESSED_PUBLIC_KEY); v1Coordinator.registerProvingKey(OWNER, uncompressedKeyParts); + v1Coordinator_noLink.registerProvingKey(OWNER, uncompressedKeyParts); } // note: Call this function via this.getProvingKeyParts to be able to pass memory as calldata and diff --git a/contracts/test/v0.8/foundry/vrf/VRFV2Plus.t.sol b/contracts/test/v0.8/foundry/vrf/VRFV2Plus.t.sol index 4e22008549c..4d4669d988f 100644 --- a/contracts/test/v0.8/foundry/vrf/VRFV2Plus.t.sol +++ b/contracts/test/v0.8/foundry/vrf/VRFV2Plus.t.sol @@ -6,6 +6,7 @@ import {MockLinkToken} from "../../../../src/v0.8/mocks/MockLinkToken.sol"; import {MockV3Aggregator} from "../../../../src/v0.8/tests/MockV3Aggregator.sol"; import {ExposedVRFCoordinatorV2Plus} from "../../../../src/v0.8/dev/vrf/testhelpers/ExposedVRFCoordinatorV2Plus.sol"; import {VRFCoordinatorV2Plus} from "../../../../src/v0.8/dev/vrf/VRFCoordinatorV2Plus.sol"; +import {SubscriptionAPI} from "../../../../src/v0.8/dev/vrf/SubscriptionAPI.sol"; import {BlockhashStore} from "../../../../src/v0.8/dev/BlockhashStore.sol"; import {VRFV2PlusConsumerExample} from "../../../../src/v0.8/dev/vrf/testhelpers/VRFV2PlusConsumerExample.sol"; import {VRFV2PlusClient} from "../../../../src/v0.8/dev/vrf/libraries/VRFV2PlusClient.sol"; @@ -31,6 +32,7 @@ contract VRFV2Plus is BaseTest { BlockhashStore s_bhs; ExposedVRFCoordinatorV2Plus s_testCoordinator; + ExposedVRFCoordinatorV2Plus s_testCoordinator_noLink; VRFV2PlusConsumerExample s_testConsumer; MockLinkToken s_linkToken; MockV3Aggregator s_linkEthFeed; @@ -57,9 +59,8 @@ contract VRFV2Plus is BaseTest { s_bhs = new BlockhashStore(); // Deploy coordinator and consumer. + // Note: adding contract deployments to this section will require the VRF proofs be regenerated. s_testCoordinator = new ExposedVRFCoordinatorV2Plus(address(s_bhs)); - - // Deploy link token and link/eth feed. s_linkToken = new MockLinkToken(); s_linkEthFeed = new MockV3Aggregator(18, 500000000000000000); // .5 ETH (good for testing) @@ -81,6 +82,8 @@ contract VRFV2Plus is BaseTest { } s_testConsumer = VRFV2PlusConsumerExample(consumerCreate2Address); + s_testCoordinator_noLink = new ExposedVRFCoordinatorV2Plus(address(s_bhs)); + // Configure the coordinator. s_testCoordinator.setLINKAndLINKETHFeed(address(s_linkToken), address(s_linkEthFeed)); } @@ -142,6 +145,18 @@ contract VRFV2Plus is BaseTest { s_testCoordinator.fundSubscriptionWithEth{value: 10 ether}(subId); } + function testCancelSubWithNoLink() public { + uint256 subId = s_testCoordinator_noLink.createSubscription(); + s_testCoordinator_noLink.fundSubscriptionWithEth{value: 1000 ether}(subId); + + assertEq(LINK_WHALE.balance, 9000 ether); + s_testCoordinator_noLink.cancelSubscription(subId, LINK_WHALE); + assertEq(LINK_WHALE.balance, 10_000 ether); + + vm.expectRevert(SubscriptionAPI.InvalidSubscription.selector); + s_testCoordinator_noLink.getSubscription(subId); + } + function testGetActiveSubscriptionIds() public { uint numSubs = 40; for (uint i = 0; i < numSubs; i++) { diff --git a/core/gethwrappers/generated/vrf_coordinator_v2plus/vrf_coordinator_v2plus.go b/core/gethwrappers/generated/vrf_coordinator_v2plus/vrf_coordinator_v2plus.go index fa620c7b981..710e2ae2ab7 100644 --- a/core/gethwrappers/generated/vrf_coordinator_v2plus/vrf_coordinator_v2plus.go +++ b/core/gethwrappers/generated/vrf_coordinator_v2plus/vrf_coordinator_v2plus.go @@ -67,7 +67,7 @@ type VRFV2PlusClientRandomWordsRequest struct { var VRFCoordinatorV2PlusMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"blockhashStore\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"internalBalance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"externalBalance\",\"type\":\"uint256\"}],\"name\":\"BalanceInvariantViolated\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockNum\",\"type\":\"uint256\"}],\"name\":\"BlockhashNotInStore\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToSendEther\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedToTransferLink\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"have\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"want\",\"type\":\"uint32\"}],\"name\":\"GasLimitTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IndexOutOfRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"have\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"want\",\"type\":\"uint256\"}],\"name\":\"InsufficientGasForConsumer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidCalldata\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"InvalidConsumer\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidExtraArgsTag\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"linkWei\",\"type\":\"int256\"}],\"name\":\"InvalidLinkWeiPrice\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"have\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"min\",\"type\":\"uint16\"},{\"internalType\":\"uint16\",\"name\":\"max\",\"type\":\"uint16\"}],\"name\":\"InvalidRequestConfirmations\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidSubscription\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"LinkAlreadySet\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"proposedOwner\",\"type\":\"address\"}],\"name\":\"MustBeRequestedOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"MustBeSubOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoCorrespondingRequest\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"}],\"name\":\"NoSuchProvingKey\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint32\",\"name\":\"have\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"want\",\"type\":\"uint32\"}],\"name\":\"NumWordsTooBig\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OnlyCallableFromLink\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PaymentTooLarge\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PendingRequestExists\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"}],\"name\":\"ProvingKeyAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"Reentrant\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TooManyConsumers\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"stalenessSeconds\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"gasAfterPaymentCalculation\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"fallbackWeiPerUnitLink\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeLinkPPM\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeEthPPM\",\"type\":\"uint32\"}],\"indexed\":false,\"internalType\":\"structVRFCoordinatorV2Plus.FeeConfig\",\"name\":\"feeConfig\",\"type\":\"tuple\"}],\"name\":\"ConfigSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"coordinatorAddress\",\"type\":\"address\"}],\"name\":\"CoordinatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"EthFundsRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"FundsRecovered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newCoordinator\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"MigrationCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"ProvingKeyDeregistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"}],\"name\":\"ProvingKeyRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"outputSeed\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subID\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint96\",\"name\":\"payment\",\"type\":\"uint96\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"success\",\"type\":\"bool\"}],\"name\":\"RandomWordsFulfilled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"requestId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"preSeed\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"callbackGasLimit\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"numWords\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RandomWordsRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountLink\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amountEth\",\"type\":\"uint256\"}],\"name\":\"SubscriptionCanceled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"SubscriptionConsumerAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"SubscriptionConsumerRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"SubscriptionCreated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newBalance\",\"type\":\"uint256\"}],\"name\":\"SubscriptionFunded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldEthBalance\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newEthBalance\",\"type\":\"uint256\"}],\"name\":\"SubscriptionFundedWithEth\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"SubscriptionOwnerTransferRequested\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"SubscriptionOwnerTransferred\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BLOCKHASH_STORE\",\"outputs\":[{\"internalType\":\"contractBlockhashStoreInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LINK\",\"outputs\":[{\"internalType\":\"contractLinkTokenInterface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"LINK_ETH_FEED\",\"outputs\":[{\"internalType\":\"contractAggregatorV3Interface\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_CONSUMERS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_NUM_WORDS\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_REQUEST_CONFIRMATIONS\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"acceptSubscriptionOwnerTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"addConsumer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"cancelSubscription\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"createSubscription\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deregisterMigratableCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"publicProvingKey\",\"type\":\"uint256[2]\"}],\"name\":\"deregisterProvingKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256[2]\",\"name\":\"pk\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"gamma\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"c\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"s\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"seed\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"uWitness\",\"type\":\"address\"},{\"internalType\":\"uint256[2]\",\"name\":\"cGammaWitness\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256[2]\",\"name\":\"sHashWitness\",\"type\":\"uint256[2]\"},{\"internalType\":\"uint256\",\"name\":\"zInv\",\"type\":\"uint256\"}],\"internalType\":\"structVRF.Proof\",\"name\":\"proof\",\"type\":\"tuple\"},{\"components\":[{\"internalType\":\"uint64\",\"name\":\"blockNum\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"callbackGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"numWords\",\"type\":\"uint32\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structVRFCoordinatorV2Plus.RequestCommitment\",\"name\":\"rc\",\"type\":\"tuple\"}],\"name\":\"fulfillRandomWords\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"fundSubscriptionWithEth\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"startIndex\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"maxCount\",\"type\":\"uint256\"}],\"name\":\"getActiveSubscriptionIds\",\"outputs\":[{\"internalType\":\"uint256[]\",\"name\":\"\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRequestConfig\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"},{\"internalType\":\"bytes32[]\",\"name\":\"\",\"type\":\"bytes32[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"getSubscription\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"balance\",\"type\":\"uint96\"},{\"internalType\":\"uint96\",\"name\":\"ethBalance\",\"type\":\"uint96\"},{\"internalType\":\"uint64\",\"name\":\"reqCount\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"consumers\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256[2]\",\"name\":\"publicKey\",\"type\":\"uint256[2]\"}],\"name\":\"hashOfKey\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newCoordinator\",\"type\":\"address\"}],\"name\":\"migrate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"migrationVersion\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"onTokenTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"oracleWithdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"recipient\",\"type\":\"address\"},{\"internalType\":\"uint96\",\"name\":\"amount\",\"type\":\"uint96\"}],\"name\":\"oracleWithdrawEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"ownerCancelSubscription\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"}],\"name\":\"pendingRequestExists\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"addresspayable\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"recoverEthFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"recoverFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"registerMigratableCoordinator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"oracle\",\"type\":\"address\"},{\"internalType\":\"uint256[2]\",\"name\":\"publicProvingKey\",\"type\":\"uint256[2]\"}],\"name\":\"registerProvingKey\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"consumer\",\"type\":\"address\"}],\"name\":\"removeConsumer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes32\",\"name\":\"keyHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"uint16\",\"name\":\"requestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"callbackGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"numWords\",\"type\":\"uint32\"},{\"internalType\":\"bytes\",\"name\":\"extraArgs\",\"type\":\"bytes\"}],\"internalType\":\"structVRFV2PlusClient.RandomWordsRequest\",\"name\":\"req\",\"type\":\"tuple\"}],\"name\":\"requestRandomWords\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"subId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"requestSubscriptionOwnerTransfer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_config\",\"outputs\":[{\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"bool\",\"name\":\"reentrancyLock\",\"type\":\"bool\"},{\"internalType\":\"uint32\",\"name\":\"stalenessSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasAfterPaymentCalculation\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_currentSubNonce\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_fallbackWeiPerUnitLink\",\"outputs\":[{\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_feeConfig\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeLinkPPM\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeEthPPM\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"s_provingKeyHashes\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"s_provingKeys\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"s_requestCommitments\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_totalBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"s_totalEthBalance\",\"outputs\":[{\"internalType\":\"uint96\",\"name\":\"\",\"type\":\"uint96\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint16\",\"name\":\"minimumRequestConfirmations\",\"type\":\"uint16\"},{\"internalType\":\"uint32\",\"name\":\"maxGasLimit\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"stalenessSeconds\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"gasAfterPaymentCalculation\",\"type\":\"uint32\"},{\"internalType\":\"int256\",\"name\":\"fallbackWeiPerUnitLink\",\"type\":\"int256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeLinkPPM\",\"type\":\"uint32\"},{\"internalType\":\"uint32\",\"name\":\"fulfillmentFlatFeeEthPPM\",\"type\":\"uint32\"}],\"internalType\":\"structVRFCoordinatorV2Plus.FeeConfig\",\"name\":\"feeConfig\",\"type\":\"tuple\"}],\"name\":\"setConfig\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"link\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"linkEthFeed\",\"type\":\"address\"}],\"name\":\"setLINKAndLINKETHFeed\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523480156200001157600080fd5b50604051620060ad380380620060ad833981016040819052620000349162000183565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000d7565b50505060601b6001600160601b031916608052620001b5565b6001600160a01b038116331415620001325760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200019657600080fd5b81516001600160a01b0381168114620001ae57600080fd5b9392505050565b60805160601c615ed2620001db600039600081816105ee01526139e70152615ed26000f3fe6080604052600436106102dc5760003560e01c80638da5cb5b1161017f578063bec4c08c116100e1578063dc311dd31161008a578063e95704bd11610064578063e95704bd1461095d578063ee9d2d3814610984578063f2fde38b146109b157600080fd5b8063dc311dd3146108f9578063e72f6e301461092a578063e8509bff1461094a57600080fd5b8063d98e620e116100bb578063d98e620e14610883578063da2f2610146108a3578063dac83d29146108d957600080fd5b8063bec4c08c14610823578063caf70c4a14610843578063cb6317971461086357600080fd5b8063a8cb447b11610143578063aefb212f1161011d578063aefb212f146107b6578063b08c8795146107e3578063b2a7cac51461080357600080fd5b8063a8cb447b14610756578063aa433aff14610776578063ad1783611461079657600080fd5b80638da5cb5b146106ab5780639b1c385e146106c95780639d40a6fd146106e9578063a21a23e414610721578063a4c0ed361461073657600080fd5b806340d6bb821161024357806366316d8d116101ec5780636f64f03f116101c65780636f64f03f1461065657806379ba50971461067657806386fe91c71461068b57600080fd5b806366316d8d146105bc578063689c4517146105dc5780636b6feccc1461061057600080fd5b806357133e641161021d57806357133e64146105675780635d06b4ab1461058757806364d51a2a146105a757600080fd5b806340d6bb82146104ec57806341af6c871461051757806346d8d4861461054757600080fd5b80630ae09540116102a5578063294daa491161027f578063294daa4914610478578063330987b314610494578063405b84fa146104cc57600080fd5b80630ae09540146103f857806315c48b84146104185780631b6b6d231461044057600080fd5b8062012291146102e157806304104edb1461030e578063043bd6ae14610330578063088070f51461035457806308821d58146103d8575b600080fd5b3480156102ed57600080fd5b506102f66109d1565b60405161030593929190615a36565b60405180910390f35b34801561031a57600080fd5b5061032e610329366004615383565b610a4d565b005b34801561033c57600080fd5b5061034660115481565b604051908152602001610305565b34801561036057600080fd5b50600d546103a09061ffff81169063ffffffff62010000820481169160ff600160301b820416916701000000000000008204811691600160581b90041685565b6040805161ffff909616865263ffffffff9485166020870152921515928501929092528216606084015216608082015260a001610305565b3480156103e457600080fd5b5061032e6103f33660046154c3565b610c0f565b34801561040457600080fd5b5061032e610413366004615765565b610da3565b34801561042457600080fd5b5061042d60c881565b60405161ffff9091168152602001610305565b34801561044c57600080fd5b50600254610460906001600160a01b031681565b6040516001600160a01b039091168152602001610305565b34801561048457600080fd5b5060405160018152602001610305565b3480156104a057600080fd5b506104b46104af366004615595565b610e71565b6040516001600160601b039091168152602001610305565b3480156104d857600080fd5b5061032e6104e7366004615765565b61135b565b3480156104f857600080fd5b506105026101f481565b60405163ffffffff9091168152602001610305565b34801561052357600080fd5b50610537610532366004615518565b61175a565b6040519015158152602001610305565b34801561055357600080fd5b5061032e6105623660046153a0565b61195b565b34801561057357600080fd5b5061032e6105823660046153d5565b611ad8565b34801561059357600080fd5b5061032e6105a2366004615383565b611b38565b3480156105b357600080fd5b5061042d606481565b3480156105c857600080fd5b5061032e6105d73660046153a0565b611bf6565b3480156105e857600080fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c57600080fd5b506012546106399063ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610305565b34801561066257600080fd5b5061032e61067136600461540e565b611d95565b34801561068257600080fd5b5061032e611e94565b34801561069757600080fd5b50600a546104b4906001600160601b031681565b3480156106b757600080fd5b506000546001600160a01b0316610460565b3480156106d557600080fd5b506103466106e4366004615672565b611f45565b3480156106f557600080fd5b50600754610709906001600160401b031681565b6040516001600160401b039091168152602001610305565b34801561072d57600080fd5b5061034661233a565b34801561074257600080fd5b5061032e61075136600461543b565b61258a565b34801561076257600080fd5b5061032e610771366004615383565b61272a565b34801561078257600080fd5b5061032e610791366004615518565b612845565b3480156107a257600080fd5b50600354610460906001600160a01b031681565b3480156107c257600080fd5b506107d66107d136600461578a565b6128a5565b604051610305919061599b565b3480156107ef57600080fd5b5061032e6107fe3660046156c7565b6129a6565b34801561080f57600080fd5b5061032e61081e366004615518565b612b3a565b34801561082f57600080fd5b5061032e61083e366004615765565b612c70565b34801561084f57600080fd5b5061034661085e3660046154df565b612e0c565b34801561086f57600080fd5b5061032e61087e366004615765565b612e3c565b34801561088f57600080fd5b5061034661089e366004615518565b61313f565b3480156108af57600080fd5b506104606108be366004615518565b600e602052600090815260409020546001600160a01b031681565b3480156108e557600080fd5b5061032e6108f4366004615765565b613160565b34801561090557600080fd5b50610919610914366004615518565b61327f565b604051610305959493929190615b9e565b34801561093657600080fd5b5061032e610945366004615383565b61337a565b61032e610958366004615518565b613539565b34801561096957600080fd5b50600a546104b490600160601b90046001600160601b031681565b34801561099057600080fd5b5061034661099f366004615518565b60106020526000908152604090205481565b3480156109bd57600080fd5b5061032e6109cc366004615383565b613678565b600d54600f805460408051602080840282018101909252828152600094859460609461ffff8316946201000090930463ffffffff16939192839190830182828015610a3b57602002820191906000526020600020905b815481526020019060010190808311610a27575b50505050509050925092509250909192565b610a55613689565b60135460005b81811015610be257826001600160a01b031660138281548110610a8057610a80615e76565b6000918252602090912001546001600160a01b03161415610bd0576013610aa8600184615d6f565b81548110610ab857610ab8615e76565b600091825260209091200154601380546001600160a01b039092169183908110610ae457610ae4615e76565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055826013610b1b600185615d6f565b81548110610b2b57610b2b615e76565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506013805480610b6a57610b6a615e60565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03851681527ff80a1a97fd42251f3c33cda98635e7399253033a6774fe37cd3f650b5282af37910160405180910390a1505050565b80610bda81615dde565b915050610a5b565b50604051635428d44960e01b81526001600160a01b03831660048201526024015b60405180910390fd5b50565b610c17613689565b604080518082018252600091610c46919084906002908390839080828437600092019190915250612e0c915050565b6000818152600e60205260409020549091506001600160a01b031680610c8257604051631dfd6e1360e21b815260048101839052602401610c03565b6000828152600e6020526040812080546001600160a01b03191690555b600f54811015610d5a5782600f8281548110610cbd57610cbd615e76565b90600052602060002001541415610d4857600f805460009190610ce290600190615d6f565b81548110610cf257610cf2615e76565b9060005260206000200154905080600f8381548110610d1357610d13615e76565b600091825260209091200155600f805480610d3057610d30615e60565b60019003818190600052602060002001600090559055505b80610d5281615dde565b915050610c9f565b50806001600160a01b03167f72be339577868f868798bac2c93e52d6f034fef4689a9848996c14ebb7416c0d83604051610d9691815260200190565b60405180910390a2505050565b60008281526005602052604090205482906001600160a01b031680610ddb57604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b03821614610e0f57604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff1615610e3a5760405163769dd35360e11b815260040160405180910390fd5b610e438461175a565b15610e6157604051631685ecdd60e31b815260040160405180910390fd5b610e6b84846136e5565b50505050565b600d54600090600160301b900460ff1615610e9f5760405163769dd35360e11b815260040160405180910390fd5b60005a90506000610eb0858561387c565b90506000846060015163ffffffff166001600160401b03811115610ed657610ed6615e8c565b604051908082528060200260200182016040528015610eff578160200160208202803683370190505b50905060005b856060015163ffffffff16811015610f7f57826040015181604051602001610f37929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c828281518110610f6257610f62615e76565b602090810291909101015280610f7781615dde565b915050610f05565b5060208083018051600090815260109092526040808320839055905190518291631fe543e360e01b91610fb791908690602401615aa9565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600d805466ff0000000000001916600160301b17905590880151608089015191925060009161101f9163ffffffff169084613b09565b600d805466ff00000000000019169055602089810151600090815260069091526040902054909150600160c01b90046001600160401b0316611062816001615cef565b6020808b0151600090815260069091526040812080546001600160401b0393909316600160c01b026001600160c01b039093169290921790915560a08a015180516110af90600190615d6f565b815181106110bf576110bf615e76565b602091010151600d5460f89190911c60011491506000906110f0908a90600160581b900463ffffffff163a85613b57565b905081156111f9576020808c01516000908152600690915260409020546001600160601b03808316600160601b90920416101561114057604051631e9acf1760e31b815260040160405180910390fd5b60208b81015160009081526006909152604090208054829190600c90611177908490600160601b90046001600160601b0316615d86565b82546101009290920a6001600160601b0381810219909316918316021790915589516000908152600e60209081526040808320546001600160a01b03168352600c9091528120805485945090926111d091859116615d1a565b92506101000a8154816001600160601b0302191690836001600160601b031602179055506112e5565b6020808c01516000908152600690915260409020546001600160601b038083169116101561123a57604051631e9acf1760e31b815260040160405180910390fd5b6020808c0151600090815260069091526040812080548392906112679084906001600160601b0316615d86565b82546101009290920a6001600160601b0381810219909316918316021790915589516000908152600e60209081526040808320546001600160a01b03168352600b9091528120805485945090926112c091859116615d1a565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b8a6020015188602001517f49580fdfd9497e1ed5c1b1cec0495087ae8e3f1267470ec2fb015db32e3d6aa78a604001518488604051611342939291909283526001600160601b039190911660208301521515604082015260600190565b60405180910390a3985050505050505050505b92915050565b600d54600160301b900460ff16156113865760405163769dd35360e11b815260040160405180910390fd5b61138f81613ba7565b6113b757604051635428d44960e01b81526001600160a01b0382166004820152602401610c03565b6000806000806113c68661327f565b945094505093509350336001600160a01b0316826001600160a01b0316146114305760405162461bcd60e51b815260206004820152601660248201527f4e6f7420737562736372697074696f6e206f776e6572000000000000000000006044820152606401610c03565b6114398661175a565b156114865760405162461bcd60e51b815260206004820152601660248201527f50656e64696e67207265717565737420657869737473000000000000000000006044820152606401610c03565b60006040518060c0016040528061149b600190565b60ff168152602001888152602001846001600160a01b03168152602001838152602001866001600160601b03168152602001856001600160601b031681525090506000816040516020016114ef91906159c1565b604051602081830303815290604052905061150988613c11565b505060405163ce3f471960e01b81526001600160a01b0388169063ce3f4719906001600160601b038816906115429085906004016159ae565b6000604051808303818588803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b505060025460405163a9059cbb60e01b81526001600160a01b038c811660048301526001600160601b038c166024830152909116935063a9059cbb92506044019050602060405180830381600087803b1580156115cb57600080fd5b505af11580156115df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160391906154fb565b61164f5760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610c03565b600d805466ff0000000000001916600160301b17905560005b83518110156116fd5783818151811061168357611683615e76565b6020908102919091010151604051638ea9811760e01b81526001600160a01b038a8116600483015290911690638ea9811790602401600060405180830381600087803b1580156116d257600080fd5b505af11580156116e6573d6000803e3d6000fd5b5050505080806116f590615dde565b915050611668565b50600d805466ff00000000000019169055604080516001600160a01b0389168152602081018a90527fd63ca8cb945956747ee69bfdc3ea754c24a4caf7418db70e46052f7850be4187910160405180910390a15050505050505050565b6000818152600560209081526040808320815160608101835281546001600160a01b03908116825260018301541681850152600282018054845181870281018701865281815287969395860193909291908301828280156117e457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117c6575b505050505081525050905060005b8160400151518110156119515760005b600f5481101561193e576000611907600f838154811061182457611824615e76565b90600052602060002001548560400151858151811061184557611845615e76565b602002602001015188600460008960400151898151811061186857611868615e76565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081208e82528252829020548251808301889052959093168583015260608501939093526001600160401b039091166080808501919091528151808503909101815260a08401825280519083012060c084019490945260e0808401859052815180850390910181526101009093019052815191012091565b506000818152601060205260409020549091501561192b5750600195945050505050565b508061193681615dde565b915050611802565b508061194981615dde565b9150506117f2565b5060009392505050565b600d54600160301b900460ff16156119865760405163769dd35360e11b815260040160405180910390fd5b336000908152600c60205260409020546001600160601b03808316911610156119c257604051631e9acf1760e31b815260040160405180910390fd5b336000908152600c6020526040812080548392906119ea9084906001600160601b0316615d86565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a600c8282829054906101000a90046001600160601b0316611a329190615d86565b92506101000a8154816001600160601b0302191690836001600160601b031602179055506000826001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d8060008114611aac576040519150601f19603f3d011682016040523d82523d6000602084013e611ab1565b606091505b5050905080611ad357604051630dcf35db60e41b815260040160405180910390fd5b505050565b611ae0613689565b6002546001600160a01b031615611b0a57604051631688c53760e11b815260040160405180910390fd5b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b611b40613689565b611b4981613ba7565b15611b725760405163ac8a27ef60e01b81526001600160a01b0382166004820152602401610c03565b601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0383169081179091556040519081527fb7cabbfc11e66731fc77de0444614282023bcbd41d16781c753a431d0af016259060200160405180910390a150565b600d54600160301b900460ff1615611c215760405163769dd35360e11b815260040160405180910390fd5b336000908152600b60205260409020546001600160601b0380831691161015611c5d57604051631e9acf1760e31b815260040160405180910390fd5b336000908152600b602052604081208054839290611c859084906001600160601b0316615d86565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a60008282829054906101000a90046001600160601b0316611ccd9190615d86565b82546101009290920a6001600160601b0381810219909316918316021790915560025460405163a9059cbb60e01b81526001600160a01b03868116600483015292851660248201529116915063a9059cbb90604401602060405180830381600087803b158015611d3c57600080fd5b505af1158015611d50573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7491906154fb565b611d9157604051631e9acf1760e31b815260040160405180910390fd5b5050565b611d9d613689565b604080518082018252600091611dcc919084906002908390839080828437600092019190915250612e0c915050565b6000818152600e60205260409020549091506001600160a01b031615611e0857604051634a0b8fa760e01b815260048101829052602401610c03565b6000818152600e6020908152604080832080546001600160a01b0319166001600160a01b038816908117909155600f805460018101825594527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802909301849055518381527fe729ae16526293f74ade739043022254f1489f616295a25bf72dfb4511ed73b89101610d96565b6001546001600160a01b03163314611eee5760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610c03565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600d54600090600160301b900460ff1615611f735760405163769dd35360e11b815260040160405180910390fd5b6020808301356000908152600590915260409020546001600160a01b0316611fae57604051630fb532db60e11b815260040160405180910390fd5b3360009081526004602090815260408083208583013584529091529020546001600160401b031680611fff576040516379bfd40160e01b815260208401356004820152336024820152604401610c03565b600d5461ffff1661201660608501604086016156ac565b61ffff161080612039575060c861203360608501604086016156ac565b61ffff16115b1561207f5761204e60608401604085016156ac565b600d5460405163539c34bb60e11b815261ffff92831660048201529116602482015260c86044820152606401610c03565b600d5462010000900463ffffffff1661209e60808501606086016157ac565b63ffffffff1611156120ee576120ba60808401606085016157ac565b600d54604051637aebf00f60e11b815263ffffffff9283166004820152620100009091049091166024820152604401610c03565b6101f461210160a08501608086016157ac565b63ffffffff1611156121475761211d60a08401608085016157ac565b6040516311ce1afb60e21b815263ffffffff90911660048201526101f46024820152604401610c03565b6000612154826001615cef565b604080518635602080830182905233838501528089013560608401526001600160401b0385166080808501919091528451808503909101815260a0808501865281519183019190912060c085019390935260e0808501849052855180860390910181526101009094019094528251920191909120929350906000906121e4906121df90890189615bf3565b613e60565b905060006121f182613edd565b9050836121fc613f4e565b60208a013561221160808c0160608d016157ac565b61222160a08d0160808e016157ac565b33866040516020016122399796959493929190615b01565b604051602081830303815290604052805190602001206010600086815260200190815260200160002081905550336001600160a01b0316886020013589600001357feb0e3652e0f44f417695e6e90f2f42c99b65cd7169074c5a654b16b9748c3a4e87878d60400160208101906122b091906156ac565b8e60600160208101906122c391906157ac565b8f60800160208101906122d691906157ac565b896040516122e996959493929190615ac2565b60405180910390a450503360009081526004602090815260408083208983013584529091529020805467ffffffffffffffff19166001600160401b039490941693909317909255925050505b919050565b600d54600090600160301b900460ff16156123685760405163769dd35360e11b815260040160405180910390fd5b600033612376600143615d6f565b600754604051606093841b6bffffffffffffffffffffffff199081166020830152924060348201523090931b909116605483015260c01b6001600160c01b031916606882015260700160408051601f198184030181529190528051602090910120600780549192506001600160401b039091169060006123f583615df9565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550506000806001600160401b0381111561243457612434615e8c565b60405190808252806020026020018201604052801561245d578160200160208202803683370190505b506040805160608082018352600080835260208084018281528486018381528984526006835286842095518654925191516001600160601b039182166001600160c01b031990941693909317600160601b9190921602176001600160c01b0316600160c01b6001600160401b039092169190910217909355835191820184523382528183018181528285018681528883526005855294909120825181546001600160a01b03199081166001600160a01b03928316178355925160018301805490941691161790915592518051949550909361253e9260028501920190615099565b5061254e91506008905083613fe7565b5060405133815282907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250905090565b600d54600160301b900460ff16156125b55760405163769dd35360e11b815260040160405180910390fd5b6002546001600160a01b031633146125e0576040516344b0e3c360e01b815260040160405180910390fd5b6020811461260157604051638129bbcd60e01b815260040160405180910390fd5b600061260f82840184615518565b6000818152600560205260409020549091506001600160a01b031661264757604051630fb532db60e11b815260040160405180910390fd5b600081815260066020526040812080546001600160601b03169186919061266e8385615d1a565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555084600a60008282829054906101000a90046001600160601b03166126b69190615d1a565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f1ced9348ff549fceab2ac57cd3a9de38edaaab274b725ee82c23e8fc8c4eec7a8287846127099190615cd7565b604080519283526020830191909152015b60405180910390a2505050505050565b612732613689565b600a544790600160601b90046001600160601b031681811115612772576040516354ced18160e11b81526004810182905260248101839052604401610c03565b81811015611ad35760006127868284615d6f565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d80600081146127d5576040519150601f19603f3d011682016040523d82523d6000602084013e6127da565b606091505b50509050806127fc57604051630dcf35db60e41b815260040160405180910390fd5b604080516001600160a01b0387168152602081018490527f879c9ea2b9d5345b84ccd12610b032602808517cebdb795007f3dcb4df377317910160405180910390a15050505050565b61284d613689565b6000818152600560205260409020546001600160a01b031661288257604051630fb532db60e11b815260040160405180910390fd5b600081815260056020526040902054610c0c9082906001600160a01b03166136e5565b606060006128b36008613ff3565b90508084106128d557604051631390f2a160e01b815260040160405180910390fd5b60006128e18486615cd7565b9050818111806128ef575083155b6128f957806128fb565b815b905060006129098683615d6f565b6001600160401b0381111561292057612920615e8c565b604051908082528060200260200182016040528015612949578160200160208202803683370190505b50905060005b815181101561299c5761296d6129658883615cd7565b600890613ffd565b82828151811061297f5761297f615e76565b60209081029190910101528061299481615dde565b91505061294f565b5095945050505050565b6129ae613689565b60c861ffff871611156129e85760405163539c34bb60e11b815261ffff871660048201819052602482015260c86044820152606401610c03565b60008213612a0c576040516321ea67b360e11b815260048101839052602401610c03565b6040805160a0808201835261ffff891680835263ffffffff89811660208086018290526000868801528a831660608088018290528b85166080988901819052600d805465ffffffffffff19168817620100008702176effffffffffffffffff000000000000191667010000000000000085026effffffff0000000000000000000000191617600160581b83021790558a51601280548d87015192891667ffffffffffffffff199091161764010000000092891692909202919091179081905560118d90558a519788528785019590955298860191909152840196909652938201879052838116928201929092529190921c90911660c08201527f777357bb93f63d088f18112d3dba38457aec633eb8f1341e1d418380ad328e789060e00160405180910390a1505050505050565b600d54600160301b900460ff1615612b655760405163769dd35360e11b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316612b9a57604051630fb532db60e11b815260040160405180910390fd5b6000818152600560205260409020600101546001600160a01b03163314612bf3576000818152600560205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c03565b6000818152600560209081526040918290208054336001600160a01b0319808316821784556001909301805490931690925583516001600160a01b0390911680825292810191909152909183917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c938691015b60405180910390a25050565b60008281526005602052604090205482906001600160a01b031680612ca857604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b03821614612cdc57604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff1615612d075760405163769dd35360e11b815260040160405180910390fd5b60008481526005602052604090206002015460641415612d3a576040516305a48e0f60e01b815260040160405180910390fd5b6001600160a01b03831660009081526004602090815260408083208784529091529020546001600160401b031615612d7157610e6b565b6001600160a01b03831660008181526004602090815260408083208884528252808320805467ffffffffffffffff19166001908117909155600583528184206002018054918201815584529282902090920180546001600160a01b03191684179055905191825285917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a250505050565b600081604051602001612e1f919061598d565b604051602081830303815290604052805190602001209050919050565b60008281526005602052604090205482906001600160a01b031680612e7457604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b03821614612ea857604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff1615612ed35760405163769dd35360e11b815260040160405180910390fd5b612edc8461175a565b15612efa57604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b03831660009081526004602090815260408083208784529091529020546001600160401b0316612f56576040516379bfd40160e01b8152600481018590526001600160a01b0384166024820152604401610c03565b600084815260056020908152604080832060020180548251818502810185019093528083529192909190830182828015612fb957602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612f9b575b50505050509050600060018251612fd09190615d6f565b905060005b82518110156130dc57856001600160a01b0316838281518110612ffa57612ffa615e76565b60200260200101516001600160a01b031614156130ca57600083838151811061302557613025615e76565b6020026020010151905080600560008a8152602001908152602001600020600201838154811061305757613057615e76565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394909416939093179092558981526005909152604090206002018054806130a2576130a2615e60565b600082815260209020810160001990810180546001600160a01b0319169055019055506130dc565b806130d481615dde565b915050612fd5565b506001600160a01b03851660008181526004602090815260408083208a8452825291829020805467ffffffffffffffff19169055905191825287917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a7910161271a565b600f818154811061314f57600080fd5b600091825260209091200154905081565b60008281526005602052604090205482906001600160a01b03168061319857604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b038216146131cc57604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff16156131f75760405163769dd35360e11b815260040160405180910390fd5b6000848152600560205260409020600101546001600160a01b03848116911614610e6b5760008481526005602090815260409182902060010180546001600160a01b0319166001600160a01b03871690811790915582513381529182015285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a19101612dfe565b6000818152600560205260408120548190819081906060906001600160a01b03166132bd57604051630fb532db60e11b815260040160405180910390fd5b60008681526006602090815260408083205460058352928190208054600290910180548351818602810186019094528084526001600160601b0380871696600160601b810490911695600160c01b9091046001600160401b0316946001600160a01b039094169391839183018282801561336057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613342575b505050505090509450945094509450945091939590929450565b613382613689565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156133c657600080fd5b505afa1580156133da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133fe9190615531565b600a549091506001600160601b031681811115613438576040516354ced18160e11b81526004810182905260248101839052604401610c03565b81811015611ad357600061344c8284615d6f565b60025460405163a9059cbb60e01b81526001600160a01b0387811660048301526024820184905292935091169063a9059cbb90604401602060405180830381600087803b15801561349c57600080fd5b505af11580156134b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d491906154fb565b6134f157604051631f01ff1360e21b815260040160405180910390fd5b604080516001600160a01b0386168152602081018390527f59bfc682b673f8cbf945f1e454df9334834abf7dfe7f92237ca29ecb9b436600910160405180910390a150505050565b600d54600160301b900460ff16156135645760405163769dd35360e11b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b031661359957604051630fb532db60e11b815260040160405180910390fd5b60008181526006602052604090208054600160601b90046001600160601b0316903490600c6135c88385615d1a565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555034600a600c8282829054906101000a90046001600160601b03166136109190615d1a565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f3f1ddc3ab1bdb39001ad76ca51a0e6f57ce6627c69f251d1de41622847721cde8234846136639190615cd7565b60408051928352602083019190915201612c64565b613680613689565b610c0c81614009565b6000546001600160a01b031633146136e35760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610c03565b565b6000806136f184613c11565b60025460405163a9059cbb60e01b81526001600160a01b0387811660048301526001600160601b0385166024830152939550919350919091169063a9059cbb90604401602060405180830381600087803b15801561374e57600080fd5b505af1158015613762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061378691906154fb565b6137a357604051631e9acf1760e31b815260040160405180910390fd5b6000836001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d80600081146137f9576040519150601f19603f3d011682016040523d82523d6000602084013e6137fe565b606091505b505090508061382057604051630dcf35db60e41b815260040160405180910390fd5b604080516001600160a01b03861681526001600160601b038581166020830152841681830152905186917f8c74ce8b8cf87f5eb001275c8be27eb34ea2b62bfab6814fcc62192bb63e81c4919081900360600190a25050505050565b604080516060810182526000808252602082018190529181019190915260006138a88460000151612e0c565b6000818152600e60205260409020549091506001600160a01b0316806138e457604051631dfd6e1360e21b815260048101839052602401610c03565b6000828660800151604051602001613906929190918252602082015260400190565b60408051601f198184030181529181528151602092830120600081815260109093529120549091508061394c57604051631b44092560e11b815260040160405180910390fd5b85516020808801516040808a015160608b015160808c015160a08d0151935161397b978a979096959101615b4b565b6040516020818303038152906040528051906020012081146139b05760405163354a450b60e21b815260040160405180910390fd5b60006139bf87600001516140b3565b905080613a97578651604051631d2827a760e31b81526001600160401b0390911660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e9413d389060240160206040518083038186803b158015613a3157600080fd5b505afa158015613a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a699190615531565b905080613a9757865160405163175dadad60e01b81526001600160401b039091166004820152602401610c03565b6000886080015182604051602001613ab9929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c90506000613ae08a8361419d565b604080516060810182529889526020890196909652948701949094525093979650505050505050565b60005a611388811015613b1b57600080fd5b611388810390508460408204820311613b3357600080fd5b50823b613b3f57600080fd5b60008083516020850160008789f190505b9392505050565b60008115613b8557601254613b7e9086908690640100000000900463ffffffff1686614208565b9050613b9f565b601254613b9c908690869063ffffffff1686614272565b90505b949350505050565b6000805b601354811015613c0857826001600160a01b031660138281548110613bd257613bd2615e76565b6000918252602090912001546001600160a01b03161415613bf65750600192915050565b80613c0081615dde565b915050613bab565b50600092915050565b6000818152600560209081526040808320815160608101835281546001600160a01b03908116825260018301541681850152600282018054845181870281018701865281815287968796949594860193919290830182828015613c9d57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613c7f575b505050919092525050506000858152600660209081526040808320815160608101835290546001600160601b03808216808452600160601b8304909116948301859052600160c01b9091046001600160401b0316928201929092529096509094509192505b826040015151811015613d7a576004600084604001518381518110613d2957613d29615e76565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081208982529092529020805467ffffffffffffffff1916905580613d7281615dde565b915050613d02565b50600085815260056020526040812080546001600160a01b03199081168255600182018054909116905590613db260028301826150fe565b5050600085815260066020526040812055613dce600886614360565b50600a8054859190600090613ded9084906001600160601b0316615d86565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555082600a600c8282829054906101000a90046001600160601b0316613e359190615d86565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050915091565b60408051602081019091526000815281613e895750604080516020810190915260008152611355565b63125fa26760e31b613e9b8385615dae565b6001600160e01b03191614613ec357604051632923fee760e11b815260040160405180910390fd5b613ed08260048186615cad565b810190613b50919061554a565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa82604051602401613f1691511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b60004661a4b1811480613f63575062066eed81145b15613fe05760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613fa257600080fd5b505afa158015613fb6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613fda9190615531565b91505090565b4391505090565b6000613b50838361436c565b6000611355825490565b6000613b5083836143bb565b6001600160a01b0381163314156140625760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c03565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60004661a4b18114806140c8575062066eed81145b1561418e57610100836001600160401b03166140e2613f4e565b6140ec9190615d6f565b118061410857506140fb613f4e565b836001600160401b031610155b156141165750600092915050565b6040516315a03d4160e11b81526001600160401b0384166004820152606490632b407a829060240160206040518083038186803b15801561415657600080fd5b505afa15801561416a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b509190615531565b50506001600160401b03164090565b60006141d18360000151846020015185604001518660600151868860a001518960c001518a60e001518b61010001516143e5565b600383602001516040516020016141e9929190615a95565b60408051601f1981840301815291905280516020909101209392505050565b600080614213614610565b905060005a6142228888615cd7565b61422c9190615d6f565b6142369085615d50565b9050600061424f63ffffffff871664e8d4a51000615d50565b90508261425c8284615cd7565b6142669190615cd7565b98975050505050505050565b60008061427d61466c565b9050600081136142a3576040516321ea67b360e11b815260048101829052602401610c03565b60006142ad614610565b9050600082825a6142be8b8b615cd7565b6142c89190615d6f565b6142d29088615d50565b6142dc9190615cd7565b6142ee90670de0b6b3a7640000615d50565b6142f89190615d3c565b9050600061431163ffffffff881664e8d4a51000615d50565b9050614329816b033b2e3c9fd0803ce8000000615d6f565b8211156143495760405163e80fa38160e01b815260040160405180910390fd5b6143538183615cd7565b9998505050505050505050565b6000613b50838361473b565b60008181526001830160205260408120546143b357508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611355565b506000611355565b60008260000182815481106143d2576143d2615e76565b9060005260206000200154905092915050565b6143ee8961482e565b61443a5760405162461bcd60e51b815260206004820152601a60248201527f7075626c6963206b6579206973206e6f74206f6e2063757276650000000000006044820152606401610c03565b6144438861482e565b61448f5760405162461bcd60e51b815260206004820152601560248201527f67616d6d61206973206e6f74206f6e20637572766500000000000000000000006044820152606401610c03565b6144988361482e565b6144e45760405162461bcd60e51b815260206004820152601d60248201527f6347616d6d615769746e657373206973206e6f74206f6e2063757276650000006044820152606401610c03565b6144ed8261482e565b6145395760405162461bcd60e51b815260206004820152601c60248201527f73486173685769746e657373206973206e6f74206f6e206375727665000000006044820152606401610c03565b614545878a8887614907565b6145915760405162461bcd60e51b815260206004820152601960248201527f6164647228632a706b2b732a6729213d5f755769746e657373000000000000006044820152606401610c03565b600061459d8a87614a2a565b905060006145b0898b878b868989614a8e565b905060006145c1838d8d8a86614bae565b9050808a146146025760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b6044820152606401610c03565b505050505050505050505050565b60004661a4b1811480614625575062066eed81145b1561466457606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b158015613fa257600080fd5b600091505090565b600d5460035460408051633fabe5a360e21b81529051600093670100000000000000900463ffffffff169283151592859283926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b1580156146ce57600080fd5b505afa1580156146e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061470691906157c7565b50945090925084915050801561472a57506147218242615d6f565b8463ffffffff16105b15613b9f5750601154949350505050565b6000818152600183016020526040812054801561482457600061475f600183615d6f565b855490915060009061477390600190615d6f565b90508181146147d857600086600001828154811061479357614793615e76565b90600052602060002001549050808760000184815481106147b6576147b6615e76565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806147e9576147e9615e60565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611355565b6000915050611355565b80516000906401000003d019116148875760405162461bcd60e51b815260206004820152601260248201527f696e76616c696420782d6f7264696e61746500000000000000000000000000006044820152606401610c03565b60208201516401000003d019116148e05760405162461bcd60e51b815260206004820152601260248201527f696e76616c696420792d6f7264696e61746500000000000000000000000000006044820152606401610c03565b60208201516401000003d0199080096149008360005b6020020151614bee565b1492915050565b60006001600160a01b03821661494d5760405162461bcd60e51b815260206004820152600b60248201526a626164207769746e65737360a81b6044820152606401610c03565b60208401516000906001161561496457601c614967565b601b5b9050600070014551231950b75fc4402da1732fc9bebe1985876000602002015109865170014551231950b75fc4402da1732fc9bebe19918203925060009190890987516040805160008082526020820180845287905260ff88169282019290925260608101929092526080820183905291925060019060a0016020604051602081039080840390855afa158015614a02573d6000803e3d6000fd5b5050604051601f1901516001600160a01b039081169088161495505050505050949350505050565b614a3261511c565b614a5f60018484604051602001614a4b9392919061596c565b604051602081830303815290604052614c12565b90505b614a6b8161482e565b611355578051604080516020810192909252614a879101614a4b565b9050614a62565b614a9661511c565b825186516401000003d0199081900691061415614af55760405162461bcd60e51b815260206004820152601e60248201527f706f696e747320696e2073756d206d7573742062652064697374696e637400006044820152606401610c03565b614b00878988614c60565b614b4c5760405162461bcd60e51b815260206004820152601660248201527f4669727374206d756c20636865636b206661696c6564000000000000000000006044820152606401610c03565b614b57848685614c60565b614ba35760405162461bcd60e51b815260206004820152601760248201527f5365636f6e64206d756c20636865636b206661696c65640000000000000000006044820152606401610c03565b614266868484614d88565b600060028686868587604051602001614bcc9695949392919061590d565b60408051601f1981840301815291905280516020909101209695505050505050565b6000806401000003d01980848509840990506401000003d019600782089392505050565b614c1a61511c565b614c2382614e4f565b8152614c38614c338260006148f6565b614e8a565b602082018190526002900660011415612335576020810180516401000003d019039052919050565b600082614c9d5760405162461bcd60e51b815260206004820152600b60248201526a3d32b9379039b1b0b630b960a91b6044820152606401610c03565b83516020850151600090614cb390600290615e20565b15614cbf57601c614cc2565b601b5b9050600070014551231950b75fc4402da1732fc9bebe198387096040805160008082526020820180845281905260ff86169282019290925260608101869052608081018390529192509060019060a0016020604051602081039080840390855afa158015614d34573d6000803e3d6000fd5b505050602060405103519050600086604051602001614d5391906158fb565b60408051601f1981840301815291905280516020909101206001600160a01b0392831692169190911498975050505050505050565b614d9061511c565b835160208086015185519186015160009384938493614db193909190614eaa565b919450925090506401000003d019858209600114614e115760405162461bcd60e51b815260206004820152601960248201527f696e765a206d75737420626520696e7665727365206f66207a000000000000006044820152606401610c03565b60405180604001604052806401000003d01980614e3057614e30615e4a565b87860981526020016401000003d0198785099052979650505050505050565b805160208201205b6401000003d019811061233557604080516020808201939093528151808203840181529082019091528051910120614e57565b6000611355826002614ea36401000003d0196001615cd7565b901c614f8a565b60008080600180826401000003d019896401000003d019038808905060006401000003d0198b6401000003d019038a0890506000614eea8383858561502c565b9098509050614efb88828e88615050565b9098509050614f0c88828c87615050565b90985090506000614f1f8d878b85615050565b9098509050614f308882868661502c565b9098509050614f4188828e89615050565b9098509050818114614f76576401000003d019818a0998506401000003d01982890997506401000003d0198183099650614f7a565b8196505b5050505050509450945094915050565b600080614f9561513a565b6020808252818101819052604082015260608101859052608081018490526401000003d01960a0820152614fc7615158565b60208160c0846005600019fa9250826150225760405162461bcd60e51b815260206004820152601260248201527f6269674d6f64457870206661696c7572652100000000000000000000000000006044820152606401610c03565b5195945050505050565b6000806401000003d0198487096401000003d0198487099097909650945050505050565b600080806401000003d019878509905060006401000003d01987876401000003d019030990506401000003d0198183086401000003d01986890990999098509650505050505050565b8280548282559060005260206000209081019282156150ee579160200282015b828111156150ee57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906150b9565b506150fa929150615176565b5090565b5080546000825590600052602060002090810190610c0c9190615176565b60405180604001604052806002906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5b808211156150fa5760008155600101615177565b803561233581615ea2565b806040810183101561135557600080fd5b600082601f8301126151b857600080fd5b6151c0615c40565b8083856040860111156151d257600080fd5b60005b60028110156151f45781358452602093840193909101906001016151d5565b509095945050505050565b600082601f83011261521057600080fd5b81356001600160401b038082111561522a5761522a615e8c565b604051601f8301601f19908116603f0116810190828211818310171561525257615252615e8c565b8160405283815286602085880101111561526b57600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060c0828403121561529d57600080fd5b6152a5615c68565b905081356001600160401b0380821682146152bf57600080fd5b818352602084013560208401526152d86040850161533e565b60408401526152e96060850161533e565b60608401526152fa6080850161518b565b608084015260a084013591508082111561531357600080fd5b50615320848285016151ff565b60a08301525092915050565b803561ffff8116811461233557600080fd5b803563ffffffff8116811461233557600080fd5b805169ffffffffffffffffffff8116811461233557600080fd5b80356001600160601b038116811461233557600080fd5b60006020828403121561539557600080fd5b8135613b5081615ea2565b600080604083850312156153b357600080fd5b82356153be81615ea2565b91506153cc6020840161536c565b90509250929050565b600080604083850312156153e857600080fd5b82356153f381615ea2565b9150602083013561540381615ea2565b809150509250929050565b6000806060838503121561542157600080fd5b823561542c81615ea2565b91506153cc8460208501615196565b6000806000806060858703121561545157600080fd5b843561545c81615ea2565b93506020850135925060408501356001600160401b038082111561547f57600080fd5b818701915087601f83011261549357600080fd5b8135818111156154a257600080fd5b8860208285010111156154b457600080fd5b95989497505060200194505050565b6000604082840312156154d557600080fd5b613b508383615196565b6000604082840312156154f157600080fd5b613b5083836151a7565b60006020828403121561550d57600080fd5b8151613b5081615eb7565b60006020828403121561552a57600080fd5b5035919050565b60006020828403121561554357600080fd5b5051919050565b60006020828403121561555c57600080fd5b604051602081018181106001600160401b038211171561557e5761557e615e8c565b604052823561558c81615eb7565b81529392505050565b6000808284036101c08112156155aa57600080fd5b6101a0808212156155ba57600080fd5b6155c2615c8a565b91506155ce86866151a7565b82526155dd86604087016151a7565b60208301526080850135604083015260a0850135606083015260c0850135608083015261560c60e0860161518b565b60a0830152610100615620878288016151a7565b60c08401526156338761014088016151a7565b60e0840152610180860135908301529092508301356001600160401b0381111561565c57600080fd5b6156688582860161528b565b9150509250929050565b60006020828403121561568457600080fd5b81356001600160401b0381111561569a57600080fd5b820160c08185031215613b5057600080fd5b6000602082840312156156be57600080fd5b613b508261532c565b60008060008060008086880360e08112156156e157600080fd5b6156ea8861532c565b96506156f86020890161533e565b95506157066040890161533e565b94506157146060890161533e565b9350608088013592506040609f198201121561572f57600080fd5b50615738615c40565b61574460a0890161533e565b815261575260c0890161533e565b6020820152809150509295509295509295565b6000806040838503121561577857600080fd5b82359150602083013561540381615ea2565b6000806040838503121561579d57600080fd5b50508035926020909101359150565b6000602082840312156157be57600080fd5b613b508261533e565b600080600080600060a086880312156157df57600080fd5b6157e886615352565b945060208601519350604086015192506060860151915061580b60808701615352565b90509295509295909350565b600081518084526020808501945080840160005b838110156158505781516001600160a01b03168752958201959082019060010161582b565b509495945050505050565b8060005b6002811015610e6b57815184526020938401939091019060010161585f565b600081518084526020808501945080840160005b8381101561585057815187529582019590820190600101615892565b6000815180845260005b818110156158d4576020818501810151868301820152016158b8565b818111156158e6576000602083870101525b50601f01601f19169290920160200192915050565b615905818361585b565b604001919050565b86815261591d602082018761585b565b61592a606082018661585b565b61593760a082018561585b565b61594460e082018461585b565b60609190911b6bffffffffffffffffffffffff19166101208201526101340195945050505050565b83815261597c602082018461585b565b606081019190915260800192915050565b60408101611355828461585b565b602081526000613b50602083018461587e565b602081526000613b5060208301846158ae565b6020815260ff8251166020820152602082015160408201526001600160a01b0360408301511660608201526000606083015160c06080840152615a0760e0840182615817565b905060808401516001600160601b0380821660a08601528060a08701511660c086015250508091505092915050565b60006060820161ffff86168352602063ffffffff86168185015260606040850152818551808452608086019150828701935060005b81811015615a8757845183529383019391830191600101615a6b565b509098975050505050505050565b82815260608101613b50602083018461585b565b828152604060208201526000613b9f604083018461587e565b86815285602082015261ffff85166040820152600063ffffffff808616606084015280851660808401525060c060a083015261426660c08301846158ae565b878152866020820152856040820152600063ffffffff80871660608401528086166080840152506001600160a01b03841660a083015260e060c083015261435360e08301846158ae565b8781526001600160401b0387166020820152856040820152600063ffffffff80871660608401528086166080840152506001600160a01b03841660a083015260e060c083015261435360e08301846158ae565b60006001600160601b0380881683528087166020840152506001600160401b03851660408301526001600160a01b038416606083015260a06080830152615be860a0830184615817565b979650505050505050565b6000808335601e19843603018112615c0a57600080fd5b8301803591506001600160401b03821115615c2457600080fd5b602001915036819003821315615c3957600080fd5b9250929050565b604080519081016001600160401b0381118282101715615c6257615c62615e8c565b60405290565b60405160c081016001600160401b0381118282101715615c6257615c62615e8c565b60405161012081016001600160401b0381118282101715615c6257615c62615e8c565b60008085851115615cbd57600080fd5b83861115615cca57600080fd5b5050820193919092039150565b60008219821115615cea57615cea615e34565b500190565b60006001600160401b03808316818516808303821115615d1157615d11615e34565b01949350505050565b60006001600160601b03808316818516808303821115615d1157615d11615e34565b600082615d4b57615d4b615e4a565b500490565b6000816000190483118215151615615d6a57615d6a615e34565b500290565b600082821015615d8157615d81615e34565b500390565b60006001600160601b0383811690831681811015615da657615da6615e34565b039392505050565b6001600160e01b03198135818116916004851015615dd65780818660040360031b1b83161692505b505092915050565b6000600019821415615df257615df2615e34565b5060010190565b60006001600160401b0380831681811415615e1657615e16615e34565b6001019392505050565b600082615e2f57615e2f615e4a565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c0c57600080fd5b8015158114610c0c57600080fdfea164736f6c6343000806000a", + Bin: "0x60a06040523480156200001157600080fd5b50604051620060fa380380620060fa833981016040819052620000349162000183565b33806000816200008b5760405162461bcd60e51b815260206004820152601860248201527f43616e6e6f7420736574206f776e657220746f207a65726f000000000000000060448201526064015b60405180910390fd5b600080546001600160a01b0319166001600160a01b0384811691909117909155811615620000be57620000be81620000d7565b50505060601b6001600160601b031916608052620001b5565b6001600160a01b038116331415620001325760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c66000000000000000000604482015260640162000082565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b6000602082840312156200019657600080fd5b81516001600160a01b0381168114620001ae57600080fd5b9392505050565b60805160601c615f1f620001db600039600081816105ee0152613a340152615f1f6000f3fe6080604052600436106102dc5760003560e01c80638da5cb5b1161017f578063bec4c08c116100e1578063dc311dd31161008a578063e95704bd11610064578063e95704bd1461095d578063ee9d2d3814610984578063f2fde38b146109b157600080fd5b8063dc311dd3146108f9578063e72f6e301461092a578063e8509bff1461094a57600080fd5b8063d98e620e116100bb578063d98e620e14610883578063da2f2610146108a3578063dac83d29146108d957600080fd5b8063bec4c08c14610823578063caf70c4a14610843578063cb6317971461086357600080fd5b8063a8cb447b11610143578063aefb212f1161011d578063aefb212f146107b6578063b08c8795146107e3578063b2a7cac51461080357600080fd5b8063a8cb447b14610756578063aa433aff14610776578063ad1783611461079657600080fd5b80638da5cb5b146106ab5780639b1c385e146106c95780639d40a6fd146106e9578063a21a23e414610721578063a4c0ed361461073657600080fd5b806340d6bb821161024357806366316d8d116101ec5780636f64f03f116101c65780636f64f03f1461065657806379ba50971461067657806386fe91c71461068b57600080fd5b806366316d8d146105bc578063689c4517146105dc5780636b6feccc1461061057600080fd5b806357133e641161021d57806357133e64146105675780635d06b4ab1461058757806364d51a2a146105a757600080fd5b806340d6bb82146104ec57806341af6c871461051757806346d8d4861461054757600080fd5b80630ae09540116102a5578063294daa491161027f578063294daa4914610478578063330987b314610494578063405b84fa146104cc57600080fd5b80630ae09540146103f857806315c48b84146104185780631b6b6d231461044057600080fd5b8062012291146102e157806304104edb1461030e578063043bd6ae14610330578063088070f51461035457806308821d58146103d8575b600080fd5b3480156102ed57600080fd5b506102f66109d1565b60405161030593929190615a83565b60405180910390f35b34801561031a57600080fd5b5061032e6103293660046153d0565b610a4d565b005b34801561033c57600080fd5b5061034660115481565b604051908152602001610305565b34801561036057600080fd5b50600d546103a09061ffff81169063ffffffff62010000820481169160ff600160301b820416916701000000000000008204811691600160581b90041685565b6040805161ffff909616865263ffffffff9485166020870152921515928501929092528216606084015216608082015260a001610305565b3480156103e457600080fd5b5061032e6103f3366004615510565b610c0f565b34801561040457600080fd5b5061032e6104133660046157b2565b610da3565b34801561042457600080fd5b5061042d60c881565b60405161ffff9091168152602001610305565b34801561044c57600080fd5b50600254610460906001600160a01b031681565b6040516001600160a01b039091168152602001610305565b34801561048457600080fd5b5060405160018152602001610305565b3480156104a057600080fd5b506104b46104af3660046155e2565b610e71565b6040516001600160601b039091168152602001610305565b3480156104d857600080fd5b5061032e6104e73660046157b2565b61135b565b3480156104f857600080fd5b506105026101f481565b60405163ffffffff9091168152602001610305565b34801561052357600080fd5b50610537610532366004615565565b611782565b6040519015158152602001610305565b34801561055357600080fd5b5061032e6105623660046153ed565b611983565b34801561057357600080fd5b5061032e610582366004615422565b611b00565b34801561059357600080fd5b5061032e6105a23660046153d0565b611b60565b3480156105b357600080fd5b5061042d606481565b3480156105c857600080fd5b5061032e6105d73660046153ed565b611c1e565b3480156105e857600080fd5b506104607f000000000000000000000000000000000000000000000000000000000000000081565b34801561061c57600080fd5b506012546106399063ffffffff8082169164010000000090041682565b6040805163ffffffff938416815292909116602083015201610305565b34801561066257600080fd5b5061032e61067136600461545b565b611dbd565b34801561068257600080fd5b5061032e611ebc565b34801561069757600080fd5b50600a546104b4906001600160601b031681565b3480156106b757600080fd5b506000546001600160a01b0316610460565b3480156106d557600080fd5b506103466106e43660046156bf565b611f6d565b3480156106f557600080fd5b50600754610709906001600160401b031681565b6040516001600160401b039091168152602001610305565b34801561072d57600080fd5b50610346612362565b34801561074257600080fd5b5061032e610751366004615488565b6125b2565b34801561076257600080fd5b5061032e6107713660046153d0565b612752565b34801561078257600080fd5b5061032e610791366004615565565b61286d565b3480156107a257600080fd5b50600354610460906001600160a01b031681565b3480156107c257600080fd5b506107d66107d13660046157d7565b6128cd565b60405161030591906159e8565b3480156107ef57600080fd5b5061032e6107fe366004615714565b6129ce565b34801561080f57600080fd5b5061032e61081e366004615565565b612b62565b34801561082f57600080fd5b5061032e61083e3660046157b2565b612c98565b34801561084f57600080fd5b5061034661085e36600461552c565b612e34565b34801561086f57600080fd5b5061032e61087e3660046157b2565b612e64565b34801561088f57600080fd5b5061034661089e366004615565565b613167565b3480156108af57600080fd5b506104606108be366004615565565b600e602052600090815260409020546001600160a01b031681565b3480156108e557600080fd5b5061032e6108f43660046157b2565b613188565b34801561090557600080fd5b50610919610914366004615565565b6132a7565b604051610305959493929190615beb565b34801561093657600080fd5b5061032e6109453660046153d0565b6133a2565b61032e610958366004615565565b613561565b34801561096957600080fd5b50600a546104b490600160601b90046001600160601b031681565b34801561099057600080fd5b5061034661099f366004615565565b60106020526000908152604090205481565b3480156109bd57600080fd5b5061032e6109cc3660046153d0565b6136a0565b600d54600f805460408051602080840282018101909252828152600094859460609461ffff8316946201000090930463ffffffff16939192839190830182828015610a3b57602002820191906000526020600020905b815481526020019060010190808311610a27575b50505050509050925092509250909192565b610a556136b1565b60135460005b81811015610be257826001600160a01b031660138281548110610a8057610a80615ec3565b6000918252602090912001546001600160a01b03161415610bd0576013610aa8600184615dbc565b81548110610ab857610ab8615ec3565b600091825260209091200154601380546001600160a01b039092169183908110610ae457610ae4615ec3565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055826013610b1b600185615dbc565b81548110610b2b57610b2b615ec3565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506013805480610b6a57610b6a615ead565b6000828152602090819020600019908301810180546001600160a01b03191690559091019091556040516001600160a01b03851681527ff80a1a97fd42251f3c33cda98635e7399253033a6774fe37cd3f650b5282af37910160405180910390a1505050565b80610bda81615e2b565b915050610a5b565b50604051635428d44960e01b81526001600160a01b03831660048201526024015b60405180910390fd5b50565b610c176136b1565b604080518082018252600091610c46919084906002908390839080828437600092019190915250612e34915050565b6000818152600e60205260409020549091506001600160a01b031680610c8257604051631dfd6e1360e21b815260048101839052602401610c03565b6000828152600e6020526040812080546001600160a01b03191690555b600f54811015610d5a5782600f8281548110610cbd57610cbd615ec3565b90600052602060002001541415610d4857600f805460009190610ce290600190615dbc565b81548110610cf257610cf2615ec3565b9060005260206000200154905080600f8381548110610d1357610d13615ec3565b600091825260209091200155600f805480610d3057610d30615ead565b60019003818190600052602060002001600090559055505b80610d5281615e2b565b915050610c9f565b50806001600160a01b03167f72be339577868f868798bac2c93e52d6f034fef4689a9848996c14ebb7416c0d83604051610d9691815260200190565b60405180910390a2505050565b60008281526005602052604090205482906001600160a01b031680610ddb57604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b03821614610e0f57604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff1615610e3a5760405163769dd35360e11b815260040160405180910390fd5b610e4384611782565b15610e6157604051631685ecdd60e31b815260040160405180910390fd5b610e6b848461370d565b50505050565b600d54600090600160301b900460ff1615610e9f5760405163769dd35360e11b815260040160405180910390fd5b60005a90506000610eb085856138c9565b90506000846060015163ffffffff166001600160401b03811115610ed657610ed6615ed9565b604051908082528060200260200182016040528015610eff578160200160208202803683370190505b50905060005b856060015163ffffffff16811015610f7f57826040015181604051602001610f37929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c828281518110610f6257610f62615ec3565b602090810291909101015280610f7781615e2b565b915050610f05565b5060208083018051600090815260109092526040808320839055905190518291631fe543e360e01b91610fb791908690602401615af6565b60408051601f198184030181529181526020820180516001600160e01b03166001600160e01b031990941693909317909252600d805466ff0000000000001916600160301b17905590880151608089015191925060009161101f9163ffffffff169084613b56565b600d805466ff00000000000019169055602089810151600090815260069091526040902054909150600160c01b90046001600160401b0316611062816001615d3c565b6020808b0151600090815260069091526040812080546001600160401b0393909316600160c01b026001600160c01b039093169290921790915560a08a015180516110af90600190615dbc565b815181106110bf576110bf615ec3565b602091010151600d5460f89190911c60011491506000906110f0908a90600160581b900463ffffffff163a85613ba4565b905081156111f9576020808c01516000908152600690915260409020546001600160601b03808316600160601b90920416101561114057604051631e9acf1760e31b815260040160405180910390fd5b60208b81015160009081526006909152604090208054829190600c90611177908490600160601b90046001600160601b0316615dd3565b82546101009290920a6001600160601b0381810219909316918316021790915589516000908152600e60209081526040808320546001600160a01b03168352600c9091528120805485945090926111d091859116615d67565b92506101000a8154816001600160601b0302191690836001600160601b031602179055506112e5565b6020808c01516000908152600690915260409020546001600160601b038083169116101561123a57604051631e9acf1760e31b815260040160405180910390fd5b6020808c0151600090815260069091526040812080548392906112679084906001600160601b0316615dd3565b82546101009290920a6001600160601b0381810219909316918316021790915589516000908152600e60209081526040808320546001600160a01b03168352600b9091528120805485945090926112c091859116615d67565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505b8a6020015188602001517f49580fdfd9497e1ed5c1b1cec0495087ae8e3f1267470ec2fb015db32e3d6aa78a604001518488604051611342939291909283526001600160601b039190911660208301521515604082015260600190565b60405180910390a3985050505050505050505b92915050565b600d54600160301b900460ff16156113865760405163769dd35360e11b815260040160405180910390fd5b61138f81613bf4565b6113b757604051635428d44960e01b81526001600160a01b0382166004820152602401610c03565b6000806000806113c6866132a7565b945094505093509350336001600160a01b0316826001600160a01b0316146114305760405162461bcd60e51b815260206004820152601660248201527f4e6f7420737562736372697074696f6e206f776e6572000000000000000000006044820152606401610c03565b61143986611782565b156114865760405162461bcd60e51b815260206004820152601660248201527f50656e64696e67207265717565737420657869737473000000000000000000006044820152606401610c03565b60006040518060c0016040528061149b600190565b60ff168152602001888152602001846001600160a01b03168152602001838152602001866001600160601b03168152602001856001600160601b031681525090506000816040516020016114ef9190615a0e565b604051602081830303815290604052905061150988613c5e565b505060405163ce3f471960e01b81526001600160a01b0388169063ce3f4719906001600160601b038816906115429085906004016159fb565b6000604051808303818588803b15801561155b57600080fd5b505af115801561156f573d6000803e3d6000fd5b50506002546001600160a01b031615801593509150611598905057506001600160601b03861615155b156116775760025460405163a9059cbb60e01b81526001600160a01b0389811660048301526001600160601b03891660248301529091169063a9059cbb90604401602060405180830381600087803b1580156115f357600080fd5b505af1158015611607573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061162b9190615548565b6116775760405162461bcd60e51b815260206004820152601260248201527f696e73756666696369656e742066756e647300000000000000000000000000006044820152606401610c03565b600d805466ff0000000000001916600160301b17905560005b8351811015611725578381815181106116ab576116ab615ec3565b6020908102919091010151604051638ea9811760e01b81526001600160a01b038a8116600483015290911690638ea9811790602401600060405180830381600087803b1580156116fa57600080fd5b505af115801561170e573d6000803e3d6000fd5b50505050808061171d90615e2b565b915050611690565b50600d805466ff00000000000019169055604080516001600160a01b0389168152602081018a90527fd63ca8cb945956747ee69bfdc3ea754c24a4caf7418db70e46052f7850be4187910160405180910390a15050505050505050565b6000818152600560209081526040808320815160608101835281546001600160a01b039081168252600183015416818501526002820180548451818702810187018652818152879693958601939092919083018282801561180c57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116117ee575b505050505081525050905060005b8160400151518110156119795760005b600f5481101561196657600061192f600f838154811061184c5761184c615ec3565b90600052602060002001548560400151858151811061186d5761186d615ec3565b602002602001015188600460008960400151898151811061189057611890615ec3565b6020908102919091018101516001600160a01b03908116835282820193909352604091820160009081208e82528252829020548251808301889052959093168583015260608501939093526001600160401b039091166080808501919091528151808503909101815260a08401825280519083012060c084019490945260e0808401859052815180850390910181526101009093019052815191012091565b50600081815260106020526040902054909150156119535750600195945050505050565b508061195e81615e2b565b91505061182a565b508061197181615e2b565b91505061181a565b5060009392505050565b600d54600160301b900460ff16156119ae5760405163769dd35360e11b815260040160405180910390fd5b336000908152600c60205260409020546001600160601b03808316911610156119ea57604051631e9acf1760e31b815260040160405180910390fd5b336000908152600c602052604081208054839290611a129084906001600160601b0316615dd3565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a600c8282829054906101000a90046001600160601b0316611a5a9190615dd3565b92506101000a8154816001600160601b0302191690836001600160601b031602179055506000826001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d8060008114611ad4576040519150601f19603f3d011682016040523d82523d6000602084013e611ad9565b606091505b5050905080611afb57604051630dcf35db60e41b815260040160405180910390fd5b505050565b611b086136b1565b6002546001600160a01b031615611b3257604051631688c53760e11b815260040160405180910390fd5b600280546001600160a01b039384166001600160a01b03199182161790915560038054929093169116179055565b611b686136b1565b611b7181613bf4565b15611b9a5760405163ac8a27ef60e01b81526001600160a01b0382166004820152602401610c03565b601380546001810182556000919091527f66de8ffda797e3de9c05e8fc57b3bf0ec28a930d40b0d285d93c06501cf6a0900180546001600160a01b0319166001600160a01b0383169081179091556040519081527fb7cabbfc11e66731fc77de0444614282023bcbd41d16781c753a431d0af016259060200160405180910390a150565b600d54600160301b900460ff1615611c495760405163769dd35360e11b815260040160405180910390fd5b336000908152600b60205260409020546001600160601b0380831691161015611c8557604051631e9acf1760e31b815260040160405180910390fd5b336000908152600b602052604081208054839290611cad9084906001600160601b0316615dd3565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555080600a60008282829054906101000a90046001600160601b0316611cf59190615dd3565b82546101009290920a6001600160601b0381810219909316918316021790915560025460405163a9059cbb60e01b81526001600160a01b03868116600483015292851660248201529116915063a9059cbb90604401602060405180830381600087803b158015611d6457600080fd5b505af1158015611d78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d9c9190615548565b611db957604051631e9acf1760e31b815260040160405180910390fd5b5050565b611dc56136b1565b604080518082018252600091611df4919084906002908390839080828437600092019190915250612e34915050565b6000818152600e60205260409020549091506001600160a01b031615611e3057604051634a0b8fa760e01b815260048101829052602401610c03565b6000818152600e6020908152604080832080546001600160a01b0319166001600160a01b038816908117909155600f805460018101825594527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802909301849055518381527fe729ae16526293f74ade739043022254f1489f616295a25bf72dfb4511ed73b89101610d96565b6001546001600160a01b03163314611f165760405162461bcd60e51b815260206004820152601660248201527f4d7573742062652070726f706f736564206f776e6572000000000000000000006044820152606401610c03565b60008054336001600160a01b0319808316821784556001805490911690556040516001600160a01b0390921692909183917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a350565b600d54600090600160301b900460ff1615611f9b5760405163769dd35360e11b815260040160405180910390fd5b6020808301356000908152600590915260409020546001600160a01b0316611fd657604051630fb532db60e11b815260040160405180910390fd5b3360009081526004602090815260408083208583013584529091529020546001600160401b031680612027576040516379bfd40160e01b815260208401356004820152336024820152604401610c03565b600d5461ffff1661203e60608501604086016156f9565b61ffff161080612061575060c861205b60608501604086016156f9565b61ffff16115b156120a75761207660608401604085016156f9565b600d5460405163539c34bb60e11b815261ffff92831660048201529116602482015260c86044820152606401610c03565b600d5462010000900463ffffffff166120c660808501606086016157f9565b63ffffffff161115612116576120e260808401606085016157f9565b600d54604051637aebf00f60e11b815263ffffffff9283166004820152620100009091049091166024820152604401610c03565b6101f461212960a08501608086016157f9565b63ffffffff16111561216f5761214560a08401608085016157f9565b6040516311ce1afb60e21b815263ffffffff90911660048201526101f46024820152604401610c03565b600061217c826001615d3c565b604080518635602080830182905233838501528089013560608401526001600160401b0385166080808501919091528451808503909101815260a0808501865281519183019190912060c085019390935260e08085018490528551808603909101815261010090940190945282519201919091209293509060009061220c9061220790890189615c40565b613ead565b9050600061221982613f2a565b905083612224613f9b565b60208a013561223960808c0160608d016157f9565b61224960a08d0160808e016157f9565b33866040516020016122619796959493929190615b4e565b604051602081830303815290604052805190602001206010600086815260200190815260200160002081905550336001600160a01b0316886020013589600001357feb0e3652e0f44f417695e6e90f2f42c99b65cd7169074c5a654b16b9748c3a4e87878d60400160208101906122d891906156f9565b8e60600160208101906122eb91906157f9565b8f60800160208101906122fe91906157f9565b8960405161231196959493929190615b0f565b60405180910390a450503360009081526004602090815260408083208983013584529091529020805467ffffffffffffffff19166001600160401b039490941693909317909255925050505b919050565b600d54600090600160301b900460ff16156123905760405163769dd35360e11b815260040160405180910390fd5b60003361239e600143615dbc565b600754604051606093841b6bffffffffffffffffffffffff199081166020830152924060348201523090931b909116605483015260c01b6001600160c01b031916606882015260700160408051601f198184030181529190528051602090910120600780549192506001600160401b0390911690600061241d83615e46565b91906101000a8154816001600160401b0302191690836001600160401b03160217905550506000806001600160401b0381111561245c5761245c615ed9565b604051908082528060200260200182016040528015612485578160200160208202803683370190505b506040805160608082018352600080835260208084018281528486018381528984526006835286842095518654925191516001600160601b039182166001600160c01b031990941693909317600160601b9190921602176001600160c01b0316600160c01b6001600160401b039092169190910217909355835191820184523382528183018181528285018681528883526005855294909120825181546001600160a01b03199081166001600160a01b03928316178355925160018301805490941691161790915592518051949550909361256692600285019201906150e6565b5061257691506008905083614034565b5060405133815282907f1d3015d7ba850fa198dc7b1a3f5d42779313a681035f77c8c03764c61005518d9060200160405180910390a250905090565b600d54600160301b900460ff16156125dd5760405163769dd35360e11b815260040160405180910390fd5b6002546001600160a01b03163314612608576040516344b0e3c360e01b815260040160405180910390fd5b6020811461262957604051638129bbcd60e01b815260040160405180910390fd5b600061263782840184615565565b6000818152600560205260409020549091506001600160a01b031661266f57604051630fb532db60e11b815260040160405180910390fd5b600081815260066020526040812080546001600160601b0316918691906126968385615d67565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555084600a60008282829054906101000a90046001600160601b03166126de9190615d67565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f1ced9348ff549fceab2ac57cd3a9de38edaaab274b725ee82c23e8fc8c4eec7a8287846127319190615d24565b604080519283526020830191909152015b60405180910390a2505050505050565b61275a6136b1565b600a544790600160601b90046001600160601b03168181111561279a576040516354ced18160e11b81526004810182905260248101839052604401610c03565b81811015611afb5760006127ae8284615dbc565b90506000846001600160a01b03168260405160006040518083038185875af1925050503d80600081146127fd576040519150601f19603f3d011682016040523d82523d6000602084013e612802565b606091505b505090508061282457604051630dcf35db60e41b815260040160405180910390fd5b604080516001600160a01b0387168152602081018490527f879c9ea2b9d5345b84ccd12610b032602808517cebdb795007f3dcb4df377317910160405180910390a15050505050565b6128756136b1565b6000818152600560205260409020546001600160a01b03166128aa57604051630fb532db60e11b815260040160405180910390fd5b600081815260056020526040902054610c0c9082906001600160a01b031661370d565b606060006128db6008614040565b90508084106128fd57604051631390f2a160e01b815260040160405180910390fd5b60006129098486615d24565b905081811180612917575083155b6129215780612923565b815b905060006129318683615dbc565b6001600160401b0381111561294857612948615ed9565b604051908082528060200260200182016040528015612971578160200160208202803683370190505b50905060005b81518110156129c45761299561298d8883615d24565b60089061404a565b8282815181106129a7576129a7615ec3565b6020908102919091010152806129bc81615e2b565b915050612977565b5095945050505050565b6129d66136b1565b60c861ffff87161115612a105760405163539c34bb60e11b815261ffff871660048201819052602482015260c86044820152606401610c03565b60008213612a34576040516321ea67b360e11b815260048101839052602401610c03565b6040805160a0808201835261ffff891680835263ffffffff89811660208086018290526000868801528a831660608088018290528b85166080988901819052600d805465ffffffffffff19168817620100008702176effffffffffffffffff000000000000191667010000000000000085026effffffff0000000000000000000000191617600160581b83021790558a51601280548d87015192891667ffffffffffffffff199091161764010000000092891692909202919091179081905560118d90558a519788528785019590955298860191909152840196909652938201879052838116928201929092529190921c90911660c08201527f777357bb93f63d088f18112d3dba38457aec633eb8f1341e1d418380ad328e789060e00160405180910390a1505050505050565b600d54600160301b900460ff1615612b8d5760405163769dd35360e11b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b0316612bc257604051630fb532db60e11b815260040160405180910390fd5b6000818152600560205260409020600101546001600160a01b03163314612c1b576000818152600560205260409081902060010154905163d084e97560e01b81526001600160a01b039091166004820152602401610c03565b6000818152600560209081526040918290208054336001600160a01b0319808316821784556001909301805490931690925583516001600160a01b0390911680825292810191909152909183917fd4114ab6e9af9f597c52041f32d62dc57c5c4e4c0d4427006069635e216c938691015b60405180910390a25050565b60008281526005602052604090205482906001600160a01b031680612cd057604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b03821614612d0457604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff1615612d2f5760405163769dd35360e11b815260040160405180910390fd5b60008481526005602052604090206002015460641415612d62576040516305a48e0f60e01b815260040160405180910390fd5b6001600160a01b03831660009081526004602090815260408083208784529091529020546001600160401b031615612d9957610e6b565b6001600160a01b03831660008181526004602090815260408083208884528252808320805467ffffffffffffffff19166001908117909155600583528184206002018054918201815584529282902090920180546001600160a01b03191684179055905191825285917f1e980d04aa7648e205713e5e8ea3808672ac163d10936d36f91b2c88ac1575e191015b60405180910390a250505050565b600081604051602001612e4791906159da565b604051602081830303815290604052805190602001209050919050565b60008281526005602052604090205482906001600160a01b031680612e9c57604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b03821614612ed057604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff1615612efb5760405163769dd35360e11b815260040160405180910390fd5b612f0484611782565b15612f2257604051631685ecdd60e31b815260040160405180910390fd5b6001600160a01b03831660009081526004602090815260408083208784529091529020546001600160401b0316612f7e576040516379bfd40160e01b8152600481018590526001600160a01b0384166024820152604401610c03565b600084815260056020908152604080832060020180548251818502810185019093528083529192909190830182828015612fe157602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612fc3575b50505050509050600060018251612ff89190615dbc565b905060005b825181101561310457856001600160a01b031683828151811061302257613022615ec3565b60200260200101516001600160a01b031614156130f257600083838151811061304d5761304d615ec3565b6020026020010151905080600560008a8152602001908152602001600020600201838154811061307f5761307f615ec3565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394909416939093179092558981526005909152604090206002018054806130ca576130ca615ead565b600082815260209020810160001990810180546001600160a01b031916905501905550613104565b806130fc81615e2b565b915050612ffd565b506001600160a01b03851660008181526004602090815260408083208a8452825291829020805467ffffffffffffffff19169055905191825287917f32158c6058347c1601b2d12bc696ac6901d8a9a9aa3ba10c27ab0a983e8425a79101612742565b600f818154811061317757600080fd5b600091825260209091200154905081565b60008281526005602052604090205482906001600160a01b0316806131c057604051630fb532db60e11b815260040160405180910390fd5b336001600160a01b038216146131f457604051636c51fda960e11b81526001600160a01b0382166004820152602401610c03565b600d54600160301b900460ff161561321f5760405163769dd35360e11b815260040160405180910390fd5b6000848152600560205260409020600101546001600160a01b03848116911614610e6b5760008481526005602090815260409182902060010180546001600160a01b0319166001600160a01b03871690811790915582513381529182015285917f21a4dad170a6bf476c31bbcf4a16628295b0e450672eec25d7c93308e05344a19101612e26565b6000818152600560205260408120548190819081906060906001600160a01b03166132e557604051630fb532db60e11b815260040160405180910390fd5b60008681526006602090815260408083205460058352928190208054600290910180548351818602810186019094528084526001600160601b0380871696600160601b810490911695600160c01b9091046001600160401b0316946001600160a01b039094169391839183018282801561338857602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161336a575b505050505090509450945094509450945091939590929450565b6133aa6136b1565b6002546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a082319060240160206040518083038186803b1580156133ee57600080fd5b505afa158015613402573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613426919061557e565b600a549091506001600160601b031681811115613460576040516354ced18160e11b81526004810182905260248101839052604401610c03565b81811015611afb5760006134748284615dbc565b60025460405163a9059cbb60e01b81526001600160a01b0387811660048301526024820184905292935091169063a9059cbb90604401602060405180830381600087803b1580156134c457600080fd5b505af11580156134d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134fc9190615548565b61351957604051631f01ff1360e21b815260040160405180910390fd5b604080516001600160a01b0386168152602081018390527f59bfc682b673f8cbf945f1e454df9334834abf7dfe7f92237ca29ecb9b436600910160405180910390a150505050565b600d54600160301b900460ff161561358c5760405163769dd35360e11b815260040160405180910390fd5b6000818152600560205260409020546001600160a01b03166135c157604051630fb532db60e11b815260040160405180910390fd5b60008181526006602052604090208054600160601b90046001600160601b0316903490600c6135f08385615d67565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555034600a600c8282829054906101000a90046001600160601b03166136389190615d67565b92506101000a8154816001600160601b0302191690836001600160601b03160217905550817f3f1ddc3ab1bdb39001ad76ca51a0e6f57ce6627c69f251d1de41622847721cde82348461368b9190615d24565b60408051928352602083019190915201612c8c565b6136a86136b1565b610c0c81614056565b6000546001600160a01b0316331461370b5760405162461bcd60e51b815260206004820152601660248201527f4f6e6c792063616c6c61626c65206279206f776e6572000000000000000000006044820152606401610c03565b565b60008061371984613c5e565b60025491935091506001600160a01b03161580159061374057506001600160601b03821615155b156137f05760025460405163a9059cbb60e01b81526001600160a01b0385811660048301526001600160601b03851660248301529091169063a9059cbb90604401602060405180830381600087803b15801561379b57600080fd5b505af11580156137af573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137d39190615548565b6137f057604051631e9acf1760e31b815260040160405180910390fd5b6000836001600160a01b0316826001600160601b031660405160006040518083038185875af1925050503d8060008114613846576040519150601f19603f3d011682016040523d82523d6000602084013e61384b565b606091505b505090508061386d57604051630dcf35db60e41b815260040160405180910390fd5b604080516001600160a01b03861681526001600160601b038581166020830152841681830152905186917f8c74ce8b8cf87f5eb001275c8be27eb34ea2b62bfab6814fcc62192bb63e81c4919081900360600190a25050505050565b604080516060810182526000808252602082018190529181019190915260006138f58460000151612e34565b6000818152600e60205260409020549091506001600160a01b03168061393157604051631dfd6e1360e21b815260048101839052602401610c03565b6000828660800151604051602001613953929190918252602082015260400190565b60408051601f198184030181529181528151602092830120600081815260109093529120549091508061399957604051631b44092560e11b815260040160405180910390fd5b85516020808801516040808a015160608b015160808c015160a08d015193516139c8978a979096959101615b98565b6040516020818303038152906040528051906020012081146139fd5760405163354a450b60e21b815260040160405180910390fd5b6000613a0c8760000151614100565b905080613ae4578651604051631d2827a760e31b81526001600160401b0390911660048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169063e9413d389060240160206040518083038186803b158015613a7e57600080fd5b505afa158015613a92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ab6919061557e565b905080613ae457865160405163175dadad60e01b81526001600160401b039091166004820152602401610c03565b6000886080015182604051602001613b06929190918252602082015260400190565b6040516020818303038152906040528051906020012060001c90506000613b2d8a836141ea565b604080516060810182529889526020890196909652948701949094525093979650505050505050565b60005a611388811015613b6857600080fd5b611388810390508460408204820311613b8057600080fd5b50823b613b8c57600080fd5b60008083516020850160008789f190505b9392505050565b60008115613bd257601254613bcb9086908690640100000000900463ffffffff1686614255565b9050613bec565b601254613be9908690869063ffffffff16866142bf565b90505b949350505050565b6000805b601354811015613c5557826001600160a01b031660138281548110613c1f57613c1f615ec3565b6000918252602090912001546001600160a01b03161415613c435750600192915050565b80613c4d81615e2b565b915050613bf8565b50600092915050565b6000818152600560209081526040808320815160608101835281546001600160a01b03908116825260018301541681850152600282018054845181870281018701865281815287968796949594860193919290830182828015613cea57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613ccc575b505050919092525050506000858152600660209081526040808320815160608101835290546001600160601b03808216808452600160601b8304909116948301859052600160c01b9091046001600160401b0316928201929092529096509094509192505b826040015151811015613dc7576004600084604001518381518110613d7657613d76615ec3565b6020908102919091018101516001600160a01b0316825281810192909252604090810160009081208982529092529020805467ffffffffffffffff1916905580613dbf81615e2b565b915050613d4f565b50600085815260056020526040812080546001600160a01b03199081168255600182018054909116905590613dff600283018261514b565b5050600085815260066020526040812055613e1b6008866143ad565b50600a8054859190600090613e3a9084906001600160601b0316615dd3565b92506101000a8154816001600160601b0302191690836001600160601b0316021790555082600a600c8282829054906101000a90046001600160601b0316613e829190615dd3565b92506101000a8154816001600160601b0302191690836001600160601b031602179055505050915091565b60408051602081019091526000815281613ed65750604080516020810190915260008152611355565b63125fa26760e31b613ee88385615dfb565b6001600160e01b03191614613f1057604051632923fee760e11b815260040160405180910390fd5b613f1d8260048186615cfa565b810190613b9d9190615597565b60607f92fd13387c7fe7befbc38d303d6468778fb9731bc4583f17d92989c6fcfdeaaa82604051602401613f6391511515815260200190565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915292915050565b60004661a4b1811480613fb0575062066eed81145b1561402d5760646001600160a01b031663a3b1b31d6040518163ffffffff1660e01b815260040160206040518083038186803b158015613fef57600080fd5b505afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190614027919061557e565b91505090565b4391505090565b6000613b9d83836143b9565b6000611355825490565b6000613b9d8383614408565b6001600160a01b0381163314156140af5760405162461bcd60e51b815260206004820152601760248201527f43616e6e6f74207472616e7366657220746f2073656c660000000000000000006044820152606401610c03565b600180546001600160a01b0319166001600160a01b0383811691821790925560008054604051929316917fed8889f560326eb138920d842192f0eb3dd22b4f139c87a2c57538e05bae12789190a350565b60004661a4b1811480614115575062066eed81145b156141db57610100836001600160401b031661412f613f9b565b6141399190615dbc565b11806141555750614148613f9b565b836001600160401b031610155b156141635750600092915050565b6040516315a03d4160e11b81526001600160401b0384166004820152606490632b407a829060240160206040518083038186803b1580156141a357600080fd5b505afa1580156141b7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9d919061557e565b50506001600160401b03164090565b600061421e8360000151846020015185604001518660600151868860a001518960c001518a60e001518b6101000151614432565b60038360200151604051602001614236929190615ae2565b60408051601f1981840301815291905280516020909101209392505050565b60008061426061465d565b905060005a61426f8888615d24565b6142799190615dbc565b6142839085615d9d565b9050600061429c63ffffffff871664e8d4a51000615d9d565b9050826142a98284615d24565b6142b39190615d24565b98975050505050505050565b6000806142ca6146b9565b9050600081136142f0576040516321ea67b360e11b815260048101829052602401610c03565b60006142fa61465d565b9050600082825a61430b8b8b615d24565b6143159190615dbc565b61431f9088615d9d565b6143299190615d24565b61433b90670de0b6b3a7640000615d9d565b6143459190615d89565b9050600061435e63ffffffff881664e8d4a51000615d9d565b9050614376816b033b2e3c9fd0803ce8000000615dbc565b8211156143965760405163e80fa38160e01b815260040160405180910390fd5b6143a08183615d24565b9998505050505050505050565b6000613b9d8383614788565b600081815260018301602052604081205461440057508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611355565b506000611355565b600082600001828154811061441f5761441f615ec3565b9060005260206000200154905092915050565b61443b8961487b565b6144875760405162461bcd60e51b815260206004820152601a60248201527f7075626c6963206b6579206973206e6f74206f6e2063757276650000000000006044820152606401610c03565b6144908861487b565b6144dc5760405162461bcd60e51b815260206004820152601560248201527f67616d6d61206973206e6f74206f6e20637572766500000000000000000000006044820152606401610c03565b6144e58361487b565b6145315760405162461bcd60e51b815260206004820152601d60248201527f6347616d6d615769746e657373206973206e6f74206f6e2063757276650000006044820152606401610c03565b61453a8261487b565b6145865760405162461bcd60e51b815260206004820152601c60248201527f73486173685769746e657373206973206e6f74206f6e206375727665000000006044820152606401610c03565b614592878a8887614954565b6145de5760405162461bcd60e51b815260206004820152601960248201527f6164647228632a706b2b732a6729213d5f755769746e657373000000000000006044820152606401610c03565b60006145ea8a87614a77565b905060006145fd898b878b868989614adb565b9050600061460e838d8d8a86614bfb565b9050808a1461464f5760405162461bcd60e51b815260206004820152600d60248201526c34b73b30b634b210383937b7b360991b6044820152606401610c03565b505050505050505050505050565b60004661a4b1811480614672575062066eed81145b156146b157606c6001600160a01b031663c6f7de0e6040518163ffffffff1660e01b815260040160206040518083038186803b158015613fef57600080fd5b600091505090565b600d5460035460408051633fabe5a360e21b81529051600093670100000000000000900463ffffffff169283151592859283926001600160a01b03169163feaf968c9160048083019260a0929190829003018186803b15801561471b57600080fd5b505afa15801561472f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906147539190615814565b509450909250849150508015614777575061476e8242615dbc565b8463ffffffff16105b15613bec5750601154949350505050565b600081815260018301602052604081205480156148715760006147ac600183615dbc565b85549091506000906147c090600190615dbc565b90508181146148255760008660000182815481106147e0576147e0615ec3565b906000526020600020015490508087600001848154811061480357614803615ec3565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061483657614836615ead565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611355565b6000915050611355565b80516000906401000003d019116148d45760405162461bcd60e51b815260206004820152601260248201527f696e76616c696420782d6f7264696e61746500000000000000000000000000006044820152606401610c03565b60208201516401000003d0191161492d5760405162461bcd60e51b815260206004820152601260248201527f696e76616c696420792d6f7264696e61746500000000000000000000000000006044820152606401610c03565b60208201516401000003d01990800961494d8360005b6020020151614c3b565b1492915050565b60006001600160a01b03821661499a5760405162461bcd60e51b815260206004820152600b60248201526a626164207769746e65737360a81b6044820152606401610c03565b6020840151600090600116156149b157601c6149b4565b601b5b9050600070014551231950b75fc4402da1732fc9bebe1985876000602002015109865170014551231950b75fc4402da1732fc9bebe19918203925060009190890987516040805160008082526020820180845287905260ff88169282019290925260608101929092526080820183905291925060019060a0016020604051602081039080840390855afa158015614a4f573d6000803e3d6000fd5b5050604051601f1901516001600160a01b039081169088161495505050505050949350505050565b614a7f615169565b614aac60018484604051602001614a98939291906159b9565b604051602081830303815290604052614c5f565b90505b614ab88161487b565b611355578051604080516020810192909252614ad49101614a98565b9050614aaf565b614ae3615169565b825186516401000003d0199081900691061415614b425760405162461bcd60e51b815260206004820152601e60248201527f706f696e747320696e2073756d206d7573742062652064697374696e637400006044820152606401610c03565b614b4d878988614cad565b614b995760405162461bcd60e51b815260206004820152601660248201527f4669727374206d756c20636865636b206661696c6564000000000000000000006044820152606401610c03565b614ba4848685614cad565b614bf05760405162461bcd60e51b815260206004820152601760248201527f5365636f6e64206d756c20636865636b206661696c65640000000000000000006044820152606401610c03565b6142b3868484614dd5565b600060028686868587604051602001614c199695949392919061595a565b60408051601f1981840301815291905280516020909101209695505050505050565b6000806401000003d01980848509840990506401000003d019600782089392505050565b614c67615169565b614c7082614e9c565b8152614c85614c80826000614943565b614ed7565b60208201819052600290066001141561235d576020810180516401000003d019039052919050565b600082614cea5760405162461bcd60e51b815260206004820152600b60248201526a3d32b9379039b1b0b630b960a91b6044820152606401610c03565b83516020850151600090614d0090600290615e6d565b15614d0c57601c614d0f565b601b5b9050600070014551231950b75fc4402da1732fc9bebe198387096040805160008082526020820180845281905260ff86169282019290925260608101869052608081018390529192509060019060a0016020604051602081039080840390855afa158015614d81573d6000803e3d6000fd5b505050602060405103519050600086604051602001614da09190615948565b60408051601f1981840301815291905280516020909101206001600160a01b0392831692169190911498975050505050505050565b614ddd615169565b835160208086015185519186015160009384938493614dfe93909190614ef7565b919450925090506401000003d019858209600114614e5e5760405162461bcd60e51b815260206004820152601960248201527f696e765a206d75737420626520696e7665727365206f66207a000000000000006044820152606401610c03565b60405180604001604052806401000003d01980614e7d57614e7d615e97565b87860981526020016401000003d0198785099052979650505050505050565b805160208201205b6401000003d019811061235d57604080516020808201939093528151808203840181529082019091528051910120614ea4565b6000611355826002614ef06401000003d0196001615d24565b901c614fd7565b60008080600180826401000003d019896401000003d019038808905060006401000003d0198b6401000003d019038a0890506000614f3783838585615079565b9098509050614f4888828e8861509d565b9098509050614f5988828c8761509d565b90985090506000614f6c8d878b8561509d565b9098509050614f7d88828686615079565b9098509050614f8e88828e8961509d565b9098509050818114614fc3576401000003d019818a0998506401000003d01982890997506401000003d0198183099650614fc7565b8196505b5050505050509450945094915050565b600080614fe2615187565b6020808252818101819052604082015260608101859052608081018490526401000003d01960a08201526150146151a5565b60208160c0846005600019fa92508261506f5760405162461bcd60e51b815260206004820152601260248201527f6269674d6f64457870206661696c7572652100000000000000000000000000006044820152606401610c03565b5195945050505050565b6000806401000003d0198487096401000003d0198487099097909650945050505050565b600080806401000003d019878509905060006401000003d01987876401000003d019030990506401000003d0198183086401000003d01986890990999098509650505050505050565b82805482825590600052602060002090810192821561513b579160200282015b8281111561513b57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190615106565b506151479291506151c3565b5090565b5080546000825590600052602060002090810190610c0c91906151c3565b60405180604001604052806002906020820280368337509192915050565b6040518060c001604052806006906020820280368337509192915050565b60405180602001604052806001906020820280368337509192915050565b5b8082111561514757600081556001016151c4565b803561235d81615eef565b806040810183101561135557600080fd5b600082601f83011261520557600080fd5b61520d615c8d565b80838560408601111561521f57600080fd5b60005b6002811015615241578135845260209384019390910190600101615222565b509095945050505050565b600082601f83011261525d57600080fd5b81356001600160401b038082111561527757615277615ed9565b604051601f8301601f19908116603f0116810190828211818310171561529f5761529f615ed9565b816040528381528660208588010111156152b857600080fd5b836020870160208301376000602085830101528094505050505092915050565b600060c082840312156152ea57600080fd5b6152f2615cb5565b905081356001600160401b03808216821461530c57600080fd5b818352602084013560208401526153256040850161538b565b60408401526153366060850161538b565b6060840152615347608085016151d8565b608084015260a084013591508082111561536057600080fd5b5061536d8482850161524c565b60a08301525092915050565b803561ffff8116811461235d57600080fd5b803563ffffffff8116811461235d57600080fd5b805169ffffffffffffffffffff8116811461235d57600080fd5b80356001600160601b038116811461235d57600080fd5b6000602082840312156153e257600080fd5b8135613b9d81615eef565b6000806040838503121561540057600080fd5b823561540b81615eef565b9150615419602084016153b9565b90509250929050565b6000806040838503121561543557600080fd5b823561544081615eef565b9150602083013561545081615eef565b809150509250929050565b6000806060838503121561546e57600080fd5b823561547981615eef565b915061541984602085016151e3565b6000806000806060858703121561549e57600080fd5b84356154a981615eef565b93506020850135925060408501356001600160401b03808211156154cc57600080fd5b818701915087601f8301126154e057600080fd5b8135818111156154ef57600080fd5b88602082850101111561550157600080fd5b95989497505060200194505050565b60006040828403121561552257600080fd5b613b9d83836151e3565b60006040828403121561553e57600080fd5b613b9d83836151f4565b60006020828403121561555a57600080fd5b8151613b9d81615f04565b60006020828403121561557757600080fd5b5035919050565b60006020828403121561559057600080fd5b5051919050565b6000602082840312156155a957600080fd5b604051602081018181106001600160401b03821117156155cb576155cb615ed9565b60405282356155d981615f04565b81529392505050565b6000808284036101c08112156155f757600080fd5b6101a08082121561560757600080fd5b61560f615cd7565b915061561b86866151f4565b825261562a86604087016151f4565b60208301526080850135604083015260a0850135606083015260c0850135608083015261565960e086016151d8565b60a083015261010061566d878288016151f4565b60c08401526156808761014088016151f4565b60e0840152610180860135908301529092508301356001600160401b038111156156a957600080fd5b6156b5858286016152d8565b9150509250929050565b6000602082840312156156d157600080fd5b81356001600160401b038111156156e757600080fd5b820160c08185031215613b9d57600080fd5b60006020828403121561570b57600080fd5b613b9d82615379565b60008060008060008086880360e081121561572e57600080fd5b61573788615379565b96506157456020890161538b565b95506157536040890161538b565b94506157616060890161538b565b9350608088013592506040609f198201121561577c57600080fd5b50615785615c8d565b61579160a0890161538b565b815261579f60c0890161538b565b6020820152809150509295509295509295565b600080604083850312156157c557600080fd5b82359150602083013561545081615eef565b600080604083850312156157ea57600080fd5b50508035926020909101359150565b60006020828403121561580b57600080fd5b613b9d8261538b565b600080600080600060a0868803121561582c57600080fd5b6158358661539f565b94506020860151935060408601519250606086015191506158586080870161539f565b90509295509295909350565b600081518084526020808501945080840160005b8381101561589d5781516001600160a01b031687529582019590820190600101615878565b509495945050505050565b8060005b6002811015610e6b5781518452602093840193909101906001016158ac565b600081518084526020808501945080840160005b8381101561589d578151875295820195908201906001016158df565b6000815180845260005b8181101561592157602081850181015186830182015201615905565b81811115615933576000602083870101525b50601f01601f19169290920160200192915050565b61595281836158a8565b604001919050565b86815261596a60208201876158a8565b61597760608201866158a8565b61598460a08201856158a8565b61599160e08201846158a8565b60609190911b6bffffffffffffffffffffffff19166101208201526101340195945050505050565b8381526159c960208201846158a8565b606081019190915260800192915050565b6040810161135582846158a8565b602081526000613b9d60208301846158cb565b602081526000613b9d60208301846158fb565b6020815260ff8251166020820152602082015160408201526001600160a01b0360408301511660608201526000606083015160c06080840152615a5460e0840182615864565b905060808401516001600160601b0380821660a08601528060a08701511660c086015250508091505092915050565b60006060820161ffff86168352602063ffffffff86168185015260606040850152818551808452608086019150828701935060005b81811015615ad457845183529383019391830191600101615ab8565b509098975050505050505050565b82815260608101613b9d60208301846158a8565b828152604060208201526000613bec60408301846158cb565b86815285602082015261ffff85166040820152600063ffffffff808616606084015280851660808401525060c060a08301526142b360c08301846158fb565b878152866020820152856040820152600063ffffffff80871660608401528086166080840152506001600160a01b03841660a083015260e060c08301526143a060e08301846158fb565b8781526001600160401b0387166020820152856040820152600063ffffffff80871660608401528086166080840152506001600160a01b03841660a083015260e060c08301526143a060e08301846158fb565b60006001600160601b0380881683528087166020840152506001600160401b03851660408301526001600160a01b038416606083015260a06080830152615c3560a0830184615864565b979650505050505050565b6000808335601e19843603018112615c5757600080fd5b8301803591506001600160401b03821115615c7157600080fd5b602001915036819003821315615c8657600080fd5b9250929050565b604080519081016001600160401b0381118282101715615caf57615caf615ed9565b60405290565b60405160c081016001600160401b0381118282101715615caf57615caf615ed9565b60405161012081016001600160401b0381118282101715615caf57615caf615ed9565b60008085851115615d0a57600080fd5b83861115615d1757600080fd5b5050820193919092039150565b60008219821115615d3757615d37615e81565b500190565b60006001600160401b03808316818516808303821115615d5e57615d5e615e81565b01949350505050565b60006001600160601b03808316818516808303821115615d5e57615d5e615e81565b600082615d9857615d98615e97565b500490565b6000816000190483118215151615615db757615db7615e81565b500290565b600082821015615dce57615dce615e81565b500390565b60006001600160601b0383811690831681811015615df357615df3615e81565b039392505050565b6001600160e01b03198135818116916004851015615e235780818660040360031b1b83161692505b505092915050565b6000600019821415615e3f57615e3f615e81565b5060010190565b60006001600160401b0380831681811415615e6357615e63615e81565b6001019392505050565b600082615e7c57615e7c615e97565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114610c0c57600080fd5b8015158114610c0c57600080fdfea164736f6c6343000806000a", } var VRFCoordinatorV2PlusABI = VRFCoordinatorV2PlusMetaData.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 03a59f8601d..a6c491ac6b2 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 @@ -75,7 +75,7 @@ vrf_consumer_v2_upgradeable_example: ../../contracts/solc/v0.8.6/VRFConsumerV2Up vrf_coordinator_mock: ../../contracts/solc/v0.8.6/VRFCoordinatorMock.abi ../../contracts/solc/v0.8.6/VRFCoordinatorMock.bin 5c495cf8df1f46d8736b9150cdf174cce358cb8352f60f0d5bb9581e23920501 vrf_coordinator_v2: ../../contracts/solc/v0.8.6/VRFCoordinatorV2.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2.bin 75c87cf1624a401ac6303df9c8e04896aa8a53849e8b0c3d7340a9d089ef6d4b vrf_coordinator_v2_plus_v2_example: ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus_V2Example.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus_V2Example.bin 50d881ecf2551c0e56b84cb932f068b703b38b00c73eb05d4e4b80754ecf6b6d -vrf_coordinator_v2plus: ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus.bin 03bcd9234a008f13fb9b0bc8bb28d80b93c294092769e4cebb3c8c8ba5f56950 +vrf_coordinator_v2plus: ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus.abi ../../contracts/solc/v0.8.6/VRFCoordinatorV2Plus.bin bcd16361198eea25b9ca2fb41f019d0ff02f4e7b05289608c37f2e4c9440754d vrf_external_sub_owner_example: ../../contracts/solc/v0.8.6/VRFExternalSubOwnerExample.abi ../../contracts/solc/v0.8.6/VRFExternalSubOwnerExample.bin 14f888eb313930b50233a6f01ea31eba0206b7f41a41f6311670da8bb8a26963 vrf_load_test_external_sub_owner: ../../contracts/solc/v0.8.6/VRFLoadTestExternalSubOwner.abi ../../contracts/solc/v0.8.6/VRFLoadTestExternalSubOwner.bin 2097faa70265e420036cc8a3efb1f1e0836ad2d7323b295b9a26a125dbbe6c7d vrf_load_test_ownerless_consumer: ../../contracts/solc/v0.8.6/VRFLoadTestOwnerlessConsumer.abi ../../contracts/solc/v0.8.6/VRFLoadTestOwnerlessConsumer.bin 74f914843cbc70b9c3079c3e1c709382ce415225e8bb40113e7ac018bfcb0f5c