From d4c3b7a7e1e1ccc2bf93bd90f067752991f94693 Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Mon, 4 Nov 2024 12:12:43 -0500 Subject: [PATCH 01/15] =?UTF-8?q?=F0=9F=91=B7=20set=20earlyVestFees=20to?= =?UTF-8?q?=200=20on=20RewardEscrow?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/RewardEscrowV2.sol | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/contracts/RewardEscrowV2.sol b/contracts/RewardEscrowV2.sol index b40966ea0..01916e9eb 100644 --- a/contracts/RewardEscrowV2.sol +++ b/contracts/RewardEscrowV2.sol @@ -325,22 +325,13 @@ contract RewardEscrowV2 is if (block.timestamp >= _entry.endTime) { quantity = escrowAmount; } else { - fee = _earlyVestFee(_entry); + /// @dev early vest fees are set to 0 to + /// release all escrowed $KWENTA as liquid + fee = 0; quantity = escrowAmount - fee; } } - function _earlyVestFee(VestingEntry memory _entry) - internal - view - returns (uint256 earlyVestFee) - { - uint256 timeUntilVest = _entry.endTime - block.timestamp; - // Fee starts by default at 90% (but could be any percentage) and falls linearly - earlyVestFee = - (_entry.escrowAmount * _entry.earlyVestingFee * timeUntilVest) / (100 * _entry.duration); - } - /*/////////////////////////////////////////////////////////////// MUTATIVE FUNCTIONS ///////////////////////////////////////////////////////////////*/ From 36a8187c7c621bfb5a5a1a4d407ce18cea96aef3 Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Mon, 4 Nov 2024 12:20:39 -0500 Subject: [PATCH 02/15] =?UTF-8?q?=F0=9F=91=B7=20transfer=20rewards=20to=20?= =?UTF-8?q?account=20in=20=5FgetReward?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/StakingRewardsV2.sol | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/contracts/StakingRewardsV2.sol b/contracts/StakingRewardsV2.sol index 9a2d712c1..4bd961ffd 100644 --- a/contracts/StakingRewardsV2.sol +++ b/contracts/StakingRewardsV2.sol @@ -369,10 +369,8 @@ contract StakingRewardsV2 is // emit reward claimed event and index account emit RewardPaid(_account, reward); - // transfer token from this contract to the rewardEscrow - // and create a vesting entry at the _to address - kwenta.transfer(address(rewardEscrow), reward); - rewardEscrow.appendVestingEntry(_to, reward); + // transfer token from this contract to the account + kwenta.transfer(_to, reward); } uint256 rewardUSDC = rewardsUSDC[_account] / PRECISION; From ba55e941432d8abfa67fda7bc07287ffb31cee7f Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Mon, 4 Nov 2024 12:22:17 -0500 Subject: [PATCH 03/15] =?UTF-8?q?=F0=9F=91=B7=20remove=20USDC=20fee=20dist?= =?UTF-8?q?ribution=20in=20StakingRewardsV2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/StakingRewardsV2.sol | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/contracts/StakingRewardsV2.sol b/contracts/StakingRewardsV2.sol index 4bd961ffd..a05667cff 100644 --- a/contracts/StakingRewardsV2.sol +++ b/contracts/StakingRewardsV2.sol @@ -372,19 +372,6 @@ contract StakingRewardsV2 is // transfer token from this contract to the account kwenta.transfer(_to, reward); } - - uint256 rewardUSDC = rewardsUSDC[_account] / PRECISION; - if (rewardUSDC > 0) { - // update state (first) - rewardsUSDC[_account] = 0; - - // emit reward claimed event and index account - emit RewardPaidUSDC(_account, rewardUSDC); - - // transfer token from this contract to the account - // as newly issued rewards from inflation are now issued as non-escrowed - usdc.transfer(_to, rewardUSDC); - } } /// @inheritdoc IStakingRewardsV2 From b9e66320c4e2bb1af9c31dc64dfb6b973100a4c1 Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Mon, 4 Nov 2024 12:45:11 -0500 Subject: [PATCH 04/15] =?UTF-8?q?=F0=9F=93=9A=20fix=20comment?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/RewardEscrowV2.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/RewardEscrowV2.sol b/contracts/RewardEscrowV2.sol index 01916e9eb..fc586c298 100644 --- a/contracts/RewardEscrowV2.sol +++ b/contracts/RewardEscrowV2.sol @@ -325,7 +325,7 @@ contract RewardEscrowV2 is if (block.timestamp >= _entry.endTime) { quantity = escrowAmount; } else { - /// @dev early vest fees are set to 0 to + // early vest fees are set to 0 to /// release all escrowed $KWENTA as liquid fee = 0; quantity = escrowAmount - fee; From 15ee16ce3295e8d32a9d0f48f7f7451a3b7085e0 Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Mon, 4 Nov 2024 14:13:08 -0500 Subject: [PATCH 05/15] =?UTF-8?q?=F0=9F=91=B7=20revert=20StakingRewards=20?= =?UTF-8?q?changes?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/StakingRewardsV2.sol | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/contracts/StakingRewardsV2.sol b/contracts/StakingRewardsV2.sol index a05667cff..048671a5f 100644 --- a/contracts/StakingRewardsV2.sol +++ b/contracts/StakingRewardsV2.sol @@ -369,8 +369,22 @@ contract StakingRewardsV2 is // emit reward claimed event and index account emit RewardPaid(_account, reward); + // transfer token from this contract to the rewardEscrow + // and create a vesting entry at the _to address + kwenta.transfer(address(rewardEscrow), reward); + rewardEscrow.appendVestingEntry(_to, reward); + } + uint256 rewardUSDC = rewardsUSDC[_account] / PRECISION; + if (rewardUSDC > 0) { + // update state (first) + rewardsUSDC[_account] = 0; + + // emit reward claimed event and index account + emit RewardPaidUSDC(_account, rewardUSDC); + // transfer token from this contract to the account - kwenta.transfer(_to, reward); + // as newly issued rewards from inflation are now issued as non-escrowed + usdc.transfer(_to, rewardUSDC); } } From 990ee7cb347d5f29541fdad29de11afec3c84d1f Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Mon, 4 Nov 2024 14:13:42 -0500 Subject: [PATCH 06/15] =?UTF-8?q?=F0=9F=93=9A=20add=20space?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/StakingRewardsV2.sol | 1 + 1 file changed, 1 insertion(+) diff --git a/contracts/StakingRewardsV2.sol b/contracts/StakingRewardsV2.sol index 048671a5f..b77cbb6fd 100644 --- a/contracts/StakingRewardsV2.sol +++ b/contracts/StakingRewardsV2.sol @@ -374,6 +374,7 @@ contract StakingRewardsV2 is kwenta.transfer(address(rewardEscrow), reward); rewardEscrow.appendVestingEntry(_to, reward); } + uint256 rewardUSDC = rewardsUSDC[_account] / PRECISION; if (rewardUSDC > 0) { // update state (first) From fa9a1bfd91e2c4b26598aad2fa75b4db11d4185c Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Mon, 4 Nov 2024 14:14:44 -0500 Subject: [PATCH 07/15] =?UTF-8?q?=F0=9F=93=9A=20remove=20space?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/StakingRewardsV2.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/contracts/StakingRewardsV2.sol b/contracts/StakingRewardsV2.sol index b77cbb6fd..9a2d712c1 100644 --- a/contracts/StakingRewardsV2.sol +++ b/contracts/StakingRewardsV2.sol @@ -374,7 +374,7 @@ contract StakingRewardsV2 is kwenta.transfer(address(rewardEscrow), reward); rewardEscrow.appendVestingEntry(_to, reward); } - + uint256 rewardUSDC = rewardsUSDC[_account] / PRECISION; if (rewardUSDC > 0) { // update state (first) From 47985ea2668a72c5361f1ec08f218bc191583ecb Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Tue, 19 Nov 2024 17:06:08 +0800 Subject: [PATCH 08/15] =?UTF-8?q?=F0=9F=91=B7=20simplify=20=5FclaimableAmo?= =?UTF-8?q?unt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contracts/RewardEscrowV2.sol | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/contracts/RewardEscrowV2.sol b/contracts/RewardEscrowV2.sol index fc586c298..5a92e7aaf 100644 --- a/contracts/RewardEscrowV2.sol +++ b/contracts/RewardEscrowV2.sol @@ -320,16 +320,8 @@ contract RewardEscrowV2 is returns (uint256 quantity, uint256 fee) { uint256 escrowAmount = _entry.escrowAmount; - - // Full escrow amounts claimable if block.timestamp equal to or after entry endTime - if (block.timestamp >= _entry.endTime) { - quantity = escrowAmount; - } else { - // early vest fees are set to 0 to - /// release all escrowed $KWENTA as liquid - fee = 0; - quantity = escrowAmount - fee; - } + quantity = escrowAmount; + fee = 0; } /*/////////////////////////////////////////////////////////////// From 1aec566ca0a11ecece9f2632e027e3eb0a958e2f Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Tue, 19 Nov 2024 17:07:23 +0800 Subject: [PATCH 09/15] lower optimizer runs --- foundry.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/foundry.toml b/foundry.toml index 0251eded9..56b428929 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,7 +4,7 @@ out = 'out' libs = ['node_modules', 'lib'] test = 'test/foundry' cache_path = 'forge-cache' -optimizer_runs = 1_000_000 +optimizer_runs = 800_000 [fmt] line_length = 100 From 605ee96b39a5ea761e8959da78e9a891971773af Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Tue, 19 Nov 2024 19:20:54 +0800 Subject: [PATCH 10/15] =?UTF-8?q?=F0=9F=91=B7=F0=9F=9A=80=20deployment=20s?= =?UTF-8?q?cript?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/UpgradeRewardEscrowV2.s.sol | 36 +++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 scripts/UpgradeRewardEscrowV2.s.sol diff --git a/scripts/UpgradeRewardEscrowV2.s.sol b/scripts/UpgradeRewardEscrowV2.s.sol new file mode 100644 index 000000000..06ed85cbb --- /dev/null +++ b/scripts/UpgradeRewardEscrowV2.s.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.19; + +contract UpgradeRewardEscrowV2 is Script { + function deployRewardEscrow( + address _kwenta, + address _rewardsNotifier + bool _printLogs + ) public { + uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + rewardEscrowV2Implementation = + address(new RewardEscrowV2(_kwenta, address(_rewardsNotifier))); + rewardEscrowV2 = RewardEscrowV2( + address( + new ERC1967Proxy( + rewardEscrowV2Implementation, + abi.encodeWithSignature( + "initialize(address)", + _owner + ) + ) + ) + ); + + if (_printLogs) { + console.log( + "Deployed RewardEscrowV2 Implementation at %s", rewardEscrowV2Implementation + ); + } + if (_printLogs) console.log("Deployed RewardEscrowV2 Proxy at %s", address(rewardEscrowV2)); + + vm.stopBroadcast(); + } +} \ No newline at end of file From 8148475e28a645f5a3bd1bc21b7b2d79680852f3 Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Tue, 19 Nov 2024 23:36:14 +0800 Subject: [PATCH 11/15] =?UTF-8?q?=E2=9C=85=20fix=20breaking=20tests=20for?= =?UTF-8?q?=200=20vesting=20fee=20change?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../integration/escrow.migrator.fork.t.sol | 6 +- .../stakingV2.migration.fork.t.sol | 4 +- .../unit/RewardEscrowV2/RewardEscrowV2.t.sol | 63 ++++++------------- .../RewardEscrowV2VestingChanges.t.sol | 14 ++--- .../StakingRewardsNotifier.t.sol | 20 +++--- .../StakingV2RewardCalculations.t.sol | 2 +- 6 files changed, 43 insertions(+), 66 deletions(-) diff --git a/test/foundry/integration/escrow.migrator.fork.t.sol b/test/foundry/integration/escrow.migrator.fork.t.sol index 7c9609765..d3700a1fd 100644 --- a/test/foundry/integration/escrow.migrator.fork.t.sol +++ b/test/foundry/integration/escrow.migrator.fork.t.sol @@ -983,9 +983,9 @@ contract StakingV2MigrationForkTests is EscrowMigratorTestHelpers { entryIDs = rewardEscrowV2.getAccountVestingEntryIDs(user1, 0, numVestingEntries); (uint256 newTotal, uint256 newTotalFee) = rewardEscrowV2.getVestingQuantity(entryIDs); - // check within 1% of target - assertCloseTo(newTotal, total, total / 100); - assertCloseTo(newTotalFee, totalFee, totalFee / 100); + // new entries should no longer have a fee + assertEq(newTotal, 17.246155111414632908 ether); + assertEq(newTotalFee, 0); } /*////////////////////////////////////////////////////////////// diff --git a/test/foundry/integration/stakingV2.migration.fork.t.sol b/test/foundry/integration/stakingV2.migration.fork.t.sol index 4a829d74b..2c1ba047d 100644 --- a/test/foundry/integration/stakingV2.migration.fork.t.sol +++ b/test/foundry/integration/stakingV2.migration.fork.t.sol @@ -147,9 +147,9 @@ contract StakingV2MigrationForkTests is StakingTestHelpers { // check user got some funds assertGt(kwenta.balanceOf(user2), 0); - // check treasury got some funds + // check treasury got nothing (vest fees are now 0) uint256 treasuryBalanceAfter = kwenta.balanceOf(treasury); - assertGt(treasuryBalanceAfter, treasuryBalanceBefore); + assertEq(treasuryBalanceAfter, treasuryBalanceBefore); } function test_Cannot_Vest_If_Treasury_Transfer_Fails() public { diff --git a/test/foundry/unit/RewardEscrowV2/RewardEscrowV2.t.sol b/test/foundry/unit/RewardEscrowV2/RewardEscrowV2.t.sol index a5996da23..b965615af 100644 --- a/test/foundry/unit/RewardEscrowV2/RewardEscrowV2.t.sol +++ b/test/foundry/unit/RewardEscrowV2/RewardEscrowV2.t.sol @@ -211,7 +211,7 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { vm.warp(block.timestamp + 26 weeks); (uint256 claimable,) = rewardEscrowV2.getVestingEntryClaimable(1); - assertEq(claimable, 11 ether / 2); + assertEq(claimable, 10 ether); } function test_Correct_Amount_Claimable_After_6_Months_Fuzz(uint32 _amount) public { @@ -223,13 +223,8 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { vm.warp(block.timestamp + 26 weeks); (uint256 claimable, uint256 fee) = rewardEscrowV2.getVestingEntryClaimable(1); - - uint256 maxFee = amount * 90 / 100; - uint256 earlyVestFee = maxFee * 26 weeks / 52 weeks; - uint256 expectedClaimable = amount - earlyVestFee; - - assertEq(claimable, expectedClaimable); - assertEq(fee, earlyVestFee); + assertEq(claimable, amount); + assertEq(fee, 0); } function test_Correct_Amount_Claimable_After_1_Year() public { @@ -472,10 +467,10 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { (uint256 total, uint256 totalFee) = rewardEscrowV2.getVestingQuantity(entries); - // 55% should be claimable - assertEq(total, 220 ether); - // 45% should be the fee - assertEq(totalFee, 180 ether); + // 100% should be claimable (fee is now 0) + assertEq(total, 400 ether); + // 0 should be the fee + assertEq(totalFee, 0); } /*////////////////////////////////////////////////////////////// @@ -500,8 +495,8 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { // check initial values (uint256 claimable, uint256 fee) = rewardEscrowV2.getVestingEntryClaimable(1); - assertEq(claimable, 550 ether); - assertEq(fee, 450 ether); + assertEq(claimable, 1000 ether); + assertEq(fee, 0); assertEq(rewardEscrowV2.totalEscrowedBalance(), 1000 ether); assertEq(rewardEscrowV2.totalEscrowedAccountBalance(address(this)), 1000 ether); assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 0); @@ -514,15 +509,15 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { uint256 treasuryBalanceAfter = kwenta.balanceOf(treasury); uint256 treasuryReceived = treasuryBalanceAfter - treasuryBalanceBefore; - // 22.5% should go to the treasury - assertEq(treasuryReceived, 225 ether); + // 0% should go to the treasury + assertEq(treasuryReceived, 0); - // 22.5% should go to RewardsNotifier - assertEq(kwenta.balanceOf(address(rewardsNotifier)), 225 ether); + // 0% should go to RewardsNotifier + assertEq(kwenta.balanceOf(address(rewardsNotifier)), 0); - // 55% should go to the staker - assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 550 ether); - assertEq(kwenta.balanceOf(address(this)), 550 ether); + // 100% should go to the staker + assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 1000 ether); + assertEq(kwenta.balanceOf(address(this)), 1000 ether); assertEq(rewardEscrowV2.totalEscrowedAccountBalance(address(this)), 0); // Nothing should be left in reward escrow @@ -544,24 +539,6 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { assertEq(earlyVestingFee, 90); } - function test_vest_Should_Properly_Emit_Event_With_Distributor() public { - appendRewardEscrowEntryV2(address(this), 1000 ether); - vm.warp(block.timestamp + 26 weeks); - - // check initial values - (uint256 claimable, uint256 fee) = rewardEscrowV2.getVestingEntryClaimable(1); - assertEq(claimable, 550 ether); - assertEq(fee, 450 ether); - assertEq(rewardEscrowV2.totalEscrowedBalance(), 1000 ether); - assertEq(rewardEscrowV2.totalEscrowedAccountBalance(address(this)), 1000 ether); - assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 0); - - vm.expectEmit(true, true, true, true); - emit EarlyVestFeeSent(225 ether, 225 ether); - entryIDs.push(1); - rewardEscrowV2.vest(entryIDs); - } - function test_Should_Revert_If_Kwenta_Transfer_Fails() public { appendRewardEscrowEntryV2(address(this), 1000 ether); @@ -779,7 +756,7 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { function test_vest_Should_Emit_Correct_Event_For_Three_Entries() public { create3EntriesWithDifferentDurations(address(this)); vm.expectEmit(true, true, true, true); - emit Vested(address(this), 775 ether); + emit Vested(address(this), 1000 ether); vestAllEntries(address(this)); } @@ -794,7 +771,7 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { create3EntriesWithDifferentDurations(address(this)); assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 0); vestAllEntries(address(this)); - assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 775 ether); + assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 1000 ether); } function test_vest_Three_Entries_Should_Update_totalEscrowedBalance() public { @@ -814,14 +791,14 @@ contract RewardEscrowV2Tests is DefaultStakingV2Setup { rewardEscrowV2.vest(entryIDs); // Check only 2 entries were vested - assertEq(kwenta.balanceOf(address(this)), 775 ether); + assertEq(kwenta.balanceOf(address(this)), 1000 ether); assertEq(kwenta.balanceOf(address(rewardEscrowV2)), 0 ether); // Attempt to vest again rewardEscrowV2.vest(entryIDs); // Check only 2 entries were vested - assertEq(kwenta.balanceOf(address(this)), 775 ether); + assertEq(kwenta.balanceOf(address(this)), 1000 ether); assertEq(kwenta.balanceOf(address(rewardEscrowV2)), 0 ether); } diff --git a/test/foundry/unit/RewardEscrowV2/RewardEscrowV2VestingChanges.t.sol b/test/foundry/unit/RewardEscrowV2/RewardEscrowV2VestingChanges.t.sol index 21f8b2906..5576ef079 100644 --- a/test/foundry/unit/RewardEscrowV2/RewardEscrowV2VestingChanges.t.sol +++ b/test/foundry/unit/RewardEscrowV2/RewardEscrowV2VestingChanges.t.sol @@ -102,7 +102,7 @@ contract RewardEscrowV2VestingChangesTests is DefaultStakingV2Setup { // check vested balance uint256 balanceAfter = kwenta.balanceOf(user1); - uint256 amountVestedAfterFee = escrowAmount - (escrowAmount * earlyVestingFee / 100); + uint256 amountVestedAfterFee = escrowAmount; assertEq(balanceAfter, balanceBefore + amountVestedAfterFee); } @@ -131,7 +131,7 @@ contract RewardEscrowV2VestingChangesTests is DefaultStakingV2Setup { // check vested balance uint256 balanceAfter = kwenta.balanceOf(user1); - uint256 amountVestedAfterFee = escrowAmount - (escrowAmount * earlyVestingFee / 100); + uint256 amountVestedAfterFee = escrowAmount; assertEq(balanceAfter, balanceBefore + amountVestedAfterFee); } @@ -154,11 +154,11 @@ contract RewardEscrowV2VestingChangesTests is DefaultStakingV2Setup { // check vested balance uint256 balanceAfter = kwenta.balanceOf(user1); - assertEq(balanceAfter, userBalanceBefore); + assertEq(balanceAfter, userBalanceBefore + escrowAmount); uint256 treasuryBalanceAfter = kwenta.balanceOf(treasury); - assertEq(treasuryBalanceAfter, treasuryBalanceBefore + escrowAmount * 50 / 100); + assertEq(treasuryBalanceAfter, treasuryBalanceBefore); uint256 earlyVestFeeDistributorBalanceAfter = kwenta.balanceOf(address(rewardsNotifier)); - assertEq(earlyVestFeeDistributorBalanceAfter, escrowAmount * 50 / 100); + assertEq(earlyVestFeeDistributorBalanceAfter, 0); } /*////////////////////////////////////////////////////////////// @@ -185,7 +185,7 @@ contract RewardEscrowV2VestingChangesTests is DefaultStakingV2Setup { // check vested balance uint256 balanceAfter = kwenta.balanceOf(user1); - uint256 amountVestedAfterFee = escrowAmount - (escrowAmount * earlyVestingFee / 100); + uint256 amountVestedAfterFee = escrowAmount; assertEq(balanceAfter, balanceBefore + amountVestedAfterFee); } @@ -222,7 +222,7 @@ contract RewardEscrowV2VestingChangesTests is DefaultStakingV2Setup { // check vested balance uint256 balanceAfter = kwenta.balanceOf(user1); - uint256 amountVestedAfterFee = escrowAmount - (escrowAmount * earlyVestingFee / 100); + uint256 amountVestedAfterFee = escrowAmount; assertEq(balanceAfter, balanceBefore + amountVestedAfterFee); } } diff --git a/test/foundry/unit/StakingRewardsNotifier/StakingRewardsNotifier.t.sol b/test/foundry/unit/StakingRewardsNotifier/StakingRewardsNotifier.t.sol index 4c7375c1a..9b8ce6463 100644 --- a/test/foundry/unit/StakingRewardsNotifier/StakingRewardsNotifier.t.sol +++ b/test/foundry/unit/StakingRewardsNotifier/StakingRewardsNotifier.t.sol @@ -134,8 +134,8 @@ contract StakingRewardsNotifierTest is DefaultStakingV2Setup { // check initial values (uint256 claimable, uint256 fee) = rewardEscrowV2.getVestingEntryClaimable(1); - assertEq(claimable, 550 ether); - assertEq(fee, 450 ether); + assertEq(claimable, 1000 ether); + assertEq(fee, 0); assertEq(rewardEscrowV2.totalEscrowedBalance(), 1000 ether); assertEq(rewardEscrowV2.totalEscrowedAccountBalance(address(this)), 1000 ether); assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 0); @@ -148,15 +148,15 @@ contract StakingRewardsNotifierTest is DefaultStakingV2Setup { uint256 treasuryBalanceAfter = kwenta.balanceOf(treasury); uint256 treasuryReceived = treasuryBalanceAfter - treasuryBalanceBefore; - // 22.5% should go to the treasury - assertEq(treasuryReceived, 225 ether); + // 0% should go to the treasury + assertEq(treasuryReceived, 0); - // 22.5% should go to RewardsNotifier - assertEq(kwenta.balanceOf(address(rewardsNotifier)), 225 ether); + // 0% should go to RewardsNotifier + assertEq(kwenta.balanceOf(address(rewardsNotifier)), 0); - // 55% should go to the staker - assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 550 ether); - assertEq(kwenta.balanceOf(address(this)), 550 ether); + // 100% should go to the staker + assertEq(rewardEscrowV2.totalVestedAccountBalance(address(this)), 1000 ether); + assertEq(kwenta.balanceOf(address(this)), 1000 ether); assertEq(rewardEscrowV2.totalEscrowedAccountBalance(address(this)), 0); // Nothing should be left in reward escrow @@ -170,6 +170,6 @@ contract StakingRewardsNotifierTest is DefaultStakingV2Setup { supplySchedule.mint(); uint256 balanceAfter = kwenta.balanceOf(address(stakingRewardsV2)); assertGt(balanceAfter, balanceBefore); - assertEq(balanceAfter - balanceBefore, 225 ether + mintAmount); + assertEq(balanceAfter - balanceBefore, mintAmount); } } diff --git a/test/foundry/unit/StakingRewardsV2/StakingV2RewardCalculations.t.sol b/test/foundry/unit/StakingRewardsV2/StakingV2RewardCalculations.t.sol index 7aa97ea5b..3876cd5fe 100644 --- a/test/foundry/unit/StakingRewardsV2/StakingV2RewardCalculations.t.sol +++ b/test/foundry/unit/StakingRewardsV2/StakingV2RewardCalculations.t.sol @@ -516,7 +516,7 @@ contract StakingV2RewardCalculationTests is DefaultStakingV2Setup { rewards = rewardEscrowV2.escrowedBalanceOf(user1); rewardsUsdc = usdc.balanceOf(user1); assertEq(rewards, expectedRewards); - assertApproxEqAbs(rewardsUsdc, expectedUsdcRewards, 10); + assertApproxEqAbs(rewardsUsdc, expectedUsdcRewards, 15); } } From fdeceb46aa95f1f8cec3c089ed74a8feef5b5fcb Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Wed, 20 Nov 2024 00:05:33 +0800 Subject: [PATCH 12/15] =?UTF-8?q?=F0=9F=91=B7=F0=9F=9A=80=20update=20deplo?= =?UTF-8?q?y=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/UpgradeRewardEscrowV2.s.sol | 32 +++++++++++++++++------------ 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/scripts/UpgradeRewardEscrowV2.s.sol b/scripts/UpgradeRewardEscrowV2.s.sol index 06ed85cbb..bc18c4fc9 100644 --- a/scripts/UpgradeRewardEscrowV2.s.sol +++ b/scripts/UpgradeRewardEscrowV2.s.sol @@ -1,35 +1,41 @@ // SPDX-License-Identifier: GPL-3.0-or-later pragma solidity 0.8.19; +import {Script, console} from "forge-std/Script.sol"; +import "../test/foundry/utils/Constants.t.sol"; + +/// @dev steps to deploy, setup and verify on Optimism: +/// (1) ensure the .env file contains the following variables: +/// - DEPLOYER_PRIVATE_KEY - the private key of the deployer +/// - ETHERSCAN_API_KEY - the API key of the Optimism Etherscan account (a normal etherscan API key will not work) +/// - ARCHIVE_NODE_URL_L2 - the archive node URL of the Optimism network +/// (2) load the variables in the .env file via `source .env` +/// (3) run `forge script scripts/UpgradeRewardEscrowV2.s.sol:UpgradeRewardEscrowV2 --rpc-url $ARCHIVE_NODE_URL_L2 --broadcast --verify -vvvv` contract UpgradeRewardEscrowV2 is Script { - function deployRewardEscrow( - address _kwenta, - address _rewardsNotifier - bool _printLogs - ) public { + function run() public { uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); vm.startBroadcast(deployerPrivateKey); + address deployer = vm.addr(deployerPrivateKey); rewardEscrowV2Implementation = - address(new RewardEscrowV2(_kwenta, address(_rewardsNotifier))); + address(new RewardEscrowV2(OPTIMISM_KWENTA_TOKEN, OPTIMISM_STAKING_REWARDS_NOTIFIER); rewardEscrowV2 = RewardEscrowV2( address( new ERC1967Proxy( rewardEscrowV2Implementation, abi.encodeWithSignature( "initialize(address)", - _owner + deployer ) ) ) ); - if (_printLogs) { - console.log( - "Deployed RewardEscrowV2 Implementation at %s", rewardEscrowV2Implementation - ); - } - if (_printLogs) console.log("Deployed RewardEscrowV2 Proxy at %s", address(rewardEscrowV2)); + console.log( + "Deployed RewardEscrowV2 Implementation at %s", rewardEscrowV2Implementation + ) + + console.log("Deployed RewardEscrowV2 Proxy at %s", address(rewardEscrowV2)); vm.stopBroadcast(); } From b47fcb1cdf5b0f892f6033217bb6bde1d278d89a Mon Sep 17 00:00:00 2001 From: Flocqst Date: Tue, 19 Nov 2024 18:52:52 +0100 Subject: [PATCH 13/15] =?UTF-8?q?=F0=9F=9A=80=20Upgrade=20deploy=20script?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/Upgrade.s.sol | 51 +++++++++++++++++++ scripts/UpgradeRewardEscrowV2.s.sol | 42 --------------- .../utils/parameters/OptimismParameters.sol | 12 +++++ 3 files changed, 63 insertions(+), 42 deletions(-) create mode 100644 scripts/Upgrade.s.sol delete mode 100644 scripts/UpgradeRewardEscrowV2.s.sol create mode 100644 scripts/utils/parameters/OptimismParameters.sol diff --git a/scripts/Upgrade.s.sol b/scripts/Upgrade.s.sol new file mode 100644 index 000000000..bad4a6264 --- /dev/null +++ b/scripts/Upgrade.s.sol @@ -0,0 +1,51 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.19; + +import {Script, console} from "forge-std/Script.sol"; +import {RewardEscrowV2} from "../contracts/RewardEscrowV2.sol"; +import {StakingRewardsV2} from "../contracts/StakingRewardsV2.sol"; +import {OptimismParameters} from "scripts/utils/parameters/OptimismParameters.sol"; + +/// @dev steps to upgrade RewardEscrowV2 on Optimism: +/// (1) ensure the .env file contains the following variables: +/// - DEPLOYER_PRIVATE_KEY - the private key of the deployer +/// - ETHERSCAN_API_KEY - the API key of the Optimism Etherscan account (a normal etherscan API key will not work) +/// - ARCHIVE_NODE_URL_L2 - the archive node URL of the Optimism network +/// (2) load the variables in the .env file via `source .env` +/// (3) run `forge script scripts/Upgrade.s.sol:UpgradeRewardEscrowV2 --rpc-url $ARCHIVE_NODE_URL_L2 --etherscan-api-key $ETHERSCAN_API_KEY --broadcast --verify -vvvv`` +/// (4) Call upgradeTo() on the proxy with the new implementation address +contract UpgradeRewardEscrowV2 is Script, OptimismParameters { + function run() public { + uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + RewardEscrowV2 rewardEscrowImplementation = new RewardEscrowV2(KWENTA_TOKEN, STAKING_REWARDS_NOTIFIER); + + vm.stopBroadcast(); + } +} + + +/// @dev steps to upgrade StakingRewardsV2 on Optimism: +/// (1) ensure the .env file contains the following variables: +/// - DEPLOYER_PRIVATE_KEY - the private key of the deployer +/// - ETHERSCAN_API_KEY - the API key of the Optimism Etherscan account (a normal etherscan API key will not work) +/// - ARCHIVE_NODE_URL_L2 - the archive node URL of the Optimism network +/// (2) load the variables in the .env file via `source .env` +/// (3) run `forge script scripts/Upgrade.s.sol:UpgradeStakingRewardsV2 --rpc-url $ARCHIVE_NODE_URL_L2 --etherscan-api-key $ETHERSCAN_API_KEY --broadcast --verify -vvvv`` +/// (4) Call upgradeTo() on the proxy with the new implementation address +contract UpgradeStakingRewardsV2 is Script, OptimismParameters { + function run() public { + uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); + vm.startBroadcast(deployerPrivateKey); + + StakingRewardsV2 stakingRewardsV2Implementation = new StakingRewardsV2( + KWENTA_TOKEN, + USDC_TOKEN, + REWARD_ESCROW_V2, + STAKING_REWARDS_NOTIFIER + ); + + vm.stopBroadcast(); + } +} diff --git a/scripts/UpgradeRewardEscrowV2.s.sol b/scripts/UpgradeRewardEscrowV2.s.sol deleted file mode 100644 index bc18c4fc9..000000000 --- a/scripts/UpgradeRewardEscrowV2.s.sol +++ /dev/null @@ -1,42 +0,0 @@ -// SPDX-License-Identifier: GPL-3.0-or-later -pragma solidity 0.8.19; - -import {Script, console} from "forge-std/Script.sol"; -import "../test/foundry/utils/Constants.t.sol"; - -/// @dev steps to deploy, setup and verify on Optimism: -/// (1) ensure the .env file contains the following variables: -/// - DEPLOYER_PRIVATE_KEY - the private key of the deployer -/// - ETHERSCAN_API_KEY - the API key of the Optimism Etherscan account (a normal etherscan API key will not work) -/// - ARCHIVE_NODE_URL_L2 - the archive node URL of the Optimism network -/// (2) load the variables in the .env file via `source .env` -/// (3) run `forge script scripts/UpgradeRewardEscrowV2.s.sol:UpgradeRewardEscrowV2 --rpc-url $ARCHIVE_NODE_URL_L2 --broadcast --verify -vvvv` -contract UpgradeRewardEscrowV2 is Script { - function run() public { - uint256 deployerPrivateKey = vm.envUint("DEPLOYER_PRIVATE_KEY"); - vm.startBroadcast(deployerPrivateKey); - address deployer = vm.addr(deployerPrivateKey); - - rewardEscrowV2Implementation = - address(new RewardEscrowV2(OPTIMISM_KWENTA_TOKEN, OPTIMISM_STAKING_REWARDS_NOTIFIER); - rewardEscrowV2 = RewardEscrowV2( - address( - new ERC1967Proxy( - rewardEscrowV2Implementation, - abi.encodeWithSignature( - "initialize(address)", - deployer - ) - ) - ) - ); - - console.log( - "Deployed RewardEscrowV2 Implementation at %s", rewardEscrowV2Implementation - ) - - console.log("Deployed RewardEscrowV2 Proxy at %s", address(rewardEscrowV2)); - - vm.stopBroadcast(); - } -} \ No newline at end of file diff --git a/scripts/utils/parameters/OptimismParameters.sol b/scripts/utils/parameters/OptimismParameters.sol new file mode 100644 index 000000000..c35c7eb90 --- /dev/null +++ b/scripts/utils/parameters/OptimismParameters.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: GPL-3.0-or-later +pragma solidity 0.8.19; + +contract OptimismParameters { + address public constant KWENTA_TOKEN = 0x920Cf626a271321C151D027030D5d08aF699456b; + + address public constant STAKING_REWARDS_NOTIFIER = 0xb176DaD2916db0905cd2D65ed54FDC3a878aFFe4; + + address public constant REWARD_ESCROW_V2 = 0xb2a20fCdc506a685122847b21E34536359E94C56; + + address public constant USDC_TOKEN = 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85; +} From 59f4b5aa63aaf674648424f9bbd6adf6b1a543d5 Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Wed, 20 Nov 2024 11:08:29 +0800 Subject: [PATCH 14/15] =?UTF-8?q?=F0=9F=93=9A=20add=20=5FPROXY?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/utils/parameters/OptimismParameters.sol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/utils/parameters/OptimismParameters.sol b/scripts/utils/parameters/OptimismParameters.sol index c35c7eb90..3a6f1d409 100644 --- a/scripts/utils/parameters/OptimismParameters.sol +++ b/scripts/utils/parameters/OptimismParameters.sol @@ -6,7 +6,7 @@ contract OptimismParameters { address public constant STAKING_REWARDS_NOTIFIER = 0xb176DaD2916db0905cd2D65ed54FDC3a878aFFe4; - address public constant REWARD_ESCROW_V2 = 0xb2a20fCdc506a685122847b21E34536359E94C56; + address public constant REWARD_ESCROW_V2_PROXY = 0xb2a20fCdc506a685122847b21E34536359E94C56; address public constant USDC_TOKEN = 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85; } From 14094473cb5715173a7806d0cea393d6c1354c5d Mon Sep 17 00:00:00 2001 From: Andrew Chiaramonte Date: Wed, 20 Nov 2024 11:32:11 +0800 Subject: [PATCH 15/15] =?UTF-8?q?=F0=9F=9A=80=20deploy=20RewardEscrowV2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../Upgrade.s.sol/10/run-1732072435.json | 69 +++++++++++++++++++ broadcast/Upgrade.s.sol/10/run-latest.json | 69 +++++++++++++++++++ scripts/Upgrade.s.sol | 2 +- 4 files changed, 140 insertions(+), 2 deletions(-) create mode 100644 broadcast/Upgrade.s.sol/10/run-1732072435.json create mode 100644 broadcast/Upgrade.s.sol/10/run-latest.json diff --git a/README.md b/README.md index 7bdf03ae1..74ebb00b1 100644 --- a/README.md +++ b/README.md @@ -134,7 +134,7 @@ Note: for contracts with both an implementation and proxy, when interaction with | StakingRewardsV2 Proxy | [`0x61294940CE7cD1BDA10e349adC5B538B722CeB88`](https://optimistic.etherscan.io/address/0x61294940CE7cD1BDA10e349adC5B538B722CeB88) | | StakingRewardsV2 Implementation | [`0x276df8bfe424Ab1aaD1EFC138eef3099a8ac8FE1`](https://optimistic.etherscan.io/address/0x276df8bfe424ab1aad1efc138eef3099a8ac8fe1) | | RewardEscrowV2 Proxy | [`0xb2a20fCdc506a685122847b21E34536359E94C56`](https://optimistic.etherscan.io/address/0xb2a20fCdc506a685122847b21E34536359E94C56) | -| RewardEscrowV2 Implementation | [`0xFBF7D647E94780F2787f8d80DA59DCe74D40C5cc`](https://optimistic.etherscan.io/address/0xfbf7d647e94780f2787f8d80da59dce74d40c5cc) | +| RewardEscrowV2 Implementation | [`0x7Bf712E355A5aFfCD026D0e65ef57Bcd0a7B9986`](https://optimistic.etherscan.io/address/0x7Bf712E355A5aFfCD026D0e65ef57Bcd0a7B9986) | | EscrowMigrator Proxy | [`0xC9aF789Ae606F69cF8Ed073A04eC92f2354b027d`](https://optimistic.etherscan.io/address/0xC9aF789Ae606F69cF8Ed073A04eC92f2354b027d) | | EscrowMigrator Implementation | [`0x10B04483d762Bd4F193F35600112ad52391004A7`](https://optimistic.etherscan.io/address/0x10B04483d762Bd4F193F35600112ad52391004A7) | | MultipleMerkleDistributor | [`0xf486A72E8c8143ACd9F65A104A16990fDb38be14`](https://optimistic.etherscan.io/address/0xf486A72E8c8143ACd9F65A104A16990fDb38be14) | diff --git a/broadcast/Upgrade.s.sol/10/run-1732072435.json b/broadcast/Upgrade.s.sol/10/run-1732072435.json new file mode 100644 index 000000000..1054a6c71 --- /dev/null +++ b/broadcast/Upgrade.s.sol/10/run-1732072435.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x208a7f9a4260e1154509bb39c1fdc3b716c10f0b6b281857a244dc0036c7ec67", + "transactionType": "CREATE", + "contractName": "RewardEscrowV2", + "contractAddress": "0x7bf712e355a5affcd026d0e65ef57bcd0a7b9986", + "function": null, + "arguments": [ + "0x920Cf626a271321C151D027030D5d08aF699456b", + "0xb176DaD2916db0905cd2D65ed54FDC3a878aFFe4" + ], + "transaction": { + "from": "0x1dd9a4d1a114934cd2754b4a9c1bb7f3dfb9620b", + "gas": "0x6606d9", + "value": "0x0", + "input": "0x60e0604052306080523480156200001557600080fd5b5060405162005e7b38038062005e7b833981016040819052620000389162000179565b6001600160a01b03821615806200005657506001600160a01b038116155b15620000755760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0380831660a052811660c052620000926200009a565b5050620001b1565b600054610100900460ff1615620001075760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200015a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b03811681146200017457600080fd5b919050565b600080604083850312156200018d57600080fd5b62000198836200015c565b9150620001a8602084016200015c565b90509250929050565b60805160a05160c051615c4d6200022e60003960008181610c6201526117ea01526000818161039f0152818161098c0152818161127d0152818161173f01528181611819015281816118fe01526131680152600081816119d601528181611a8601528181611bf601528181611ca60152611ead0152615c4d6000f3fe60806040526004361061038b5760003560e01c80636fb83a57116101dc578063ad18e97e11610102578063ca2c7f76116100a0578063e6b2cf6c1161006f578063e6b2cf6c14610c84578063e985e9c514610c9b578063eac6248914610cf1578063f2fde38b14610d1e57600080fd5b8063ca2c7f7614610be5578063daf3807314610c05578063e30c397814610c25578063e509584314610c5057600080fd5b8063b88d4fde116100dc578063b88d4fde14610b6d578063c297fa0f14610b8d578063c4d66de814610ba5578063c87b56dd14610bc557600080fd5b8063ad18e97e14610b07578063b1724b4614610b35578063b5ddb9c714610b4d57600080fd5b80638da5cb5b1161017a578063a22cb46511610149578063a22cb465146109e3578063a4116a7e14610a03578063a46eddcf14610ad2578063ac2fdb1a14610af257600080fd5b80638da5cb5b1461094f5780639034802b1461097a57806395d89b41146109ae57806398ab1e3d146109c357600080fd5b806371e780f3116101b657806371e780f3146108e1578063773ab39f146108f857806379ba5097146109255780637d5ff94d1461093a57600080fd5b80636fb83a571461088c57806370a08231146108ac578063715018a6146108cc57600080fd5b806334c7fec9116102c157806352d1902d1161025f5780635c975abb1161022e5780635c975abb1461072a5780636352211e1461074357806364b87a70146107635780636d3cbe211461079157600080fd5b806352d1902d146106c0578063534c0842146106d557806353a535d3146106ea5780635414408d1461070a57600080fd5b806342842e0e1161029b57806342842e0e1461063f57806348591dd71461065f5780634f1ef2861461068d5780634f6ccce7146106a057600080fd5b806334c7fec9146105ea5780633659cfe61461060a5780633e7f4c091461062a57600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd1461056757806324c0f5b5146105875780632f745c591461059c578063326a3cfb146105bc57600080fd5b806318160ddd1461050457806318c1cb5214610519578063227d517a1461053957600080fd5b8063057a601b1161036a578063057a601b1461044e57806306fdde03146104a0578063081812fc146104c2578063095ea7b3146104e257600080fd5b80624d37e21461039057806301ffc9a7146103e957806303df264014610419575b600080fd5b34801561039c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156103f557600080fd5b506104096104043660046151f8565b610d3e565b60405190151581526020016103e0565b34801561042557600080fd5b50610439610434366004615261565b610d9a565b604080519283526020830191909152016103e0565b34801561045a57600080fd5b506104926104693660046152cc565b73ffffffffffffffffffffffffffffffffffffffff1660009081526101c8602052604090205490565b6040519081526020016103e0565b3480156104ac57600080fd5b506104b5610e0f565b6040516103e09190615355565b3480156104ce57600080fd5b506103bf6104dd366004615368565b610ea1565b3480156104ee57600080fd5b506105026104fd366004615381565b610ed5565b005b34801561051057600080fd5b50609954610492565b34801561052557600080fd5b506105026105343660046153ab565b611066565b34801561054557600080fd5b506104926105543660046152cc565b6101c96020526000908152604090205481565b34801561057357600080fd5b506105026105823660046153e4565b611323565b34801561059357600080fd5b50610492606481565b3480156105a857600080fd5b506104926105b7366004615381565b6113c5565b3480156105c857600080fd5b506104926105d73660046152cc565b6101c86020526000908152604090205481565b3480156105f657600080fd5b50610502610605366004615261565b611494565b34801561061657600080fd5b506105026106253660046152cc565b6119bf565b34801561063657600080fd5b50610492603281565b34801561064b57600080fd5b5061050261065a3660046153e4565b611bc4565b34801561066b57600080fd5b506101c4546103bf9073ffffffffffffffffffffffffffffffffffffffff1681565b61050261069b3660046154fa565b611bdf565b3480156106ac57600080fd5b506104926106bb366004615368565b611dd5565b3480156106cc57600080fd5b50610492611e93565b3480156106e157600080fd5b50610502611f7f565b3480156106f657600080fd5b50610502610705366004615548565b611f91565b34801561071657600080fd5b506105026107253660046152cc565b612088565b34801561073657600080fd5b5061012d5460ff16610409565b34801561074f57600080fd5b506103bf61075e366004615368565b612158565b34801561076f57600080fd5b506101c3546103bf9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079d57600080fd5b5061083f6107ac366004615368565b6101c66020526000908152604090205471ffffffffffffffffffffffffffffffffffff8116907201000000000000000000000000000000000000810464ffffffffff169077010000000000000000000000000000000000000000000000810467ffffffffffffffff16907f0100000000000000000000000000000000000000000000000000000000000000900460ff1684565b6040805171ffffffffffffffffffffffffffffffffffff909516855264ffffffffff909316602085015267ffffffffffffffff9091169183019190915260ff1660608201526080016103e0565b34801561089857600080fd5b506105026108a73660046152cc565b6121e4565b3480156108b857600080fd5b506104926108c73660046152cc565b6122fe565b3480156108d857600080fd5b506105026123cc565b3480156108ed57600080fd5b506104926101ca5481565b34801561090457600080fd5b506109186109133660046155a9565b6123de565b6040516103e091906155dc565b34801561093157600080fd5b506105026125f5565b34801561094657600080fd5b50610492605a81565b34801561095b57600080fd5b5060c95473ffffffffffffffffffffffffffffffffffffffff166103bf565b34801561098657600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109ba57600080fd5b506104b56126a7565b3480156109cf57600080fd5b506104396109de366004615368565b6126b6565b3480156109ef57600080fd5b506105026109fe366004615643565b6126d0565b348015610a0f57600080fd5b50610ab2610a1e366004615368565b60009081526101c6602052604090205477010000000000000000000000000000000000000000000000810467ffffffffffffffff169171ffffffffffffffffffffffffffffffffffff8216917201000000000000000000000000000000000000810464ffffffffff16917f010000000000000000000000000000000000000000000000000000000000000090910460ff1690565b6040805194855260208501939093529183015260608201526080016103e0565b348015610ade57600080fd5b50610502610aed3660046152cc565b6126db565b348015610afe57600080fd5b506105026127a4565b348015610b1357600080fd5b506101c5546103bf9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610b4157600080fd5b5061049263077f880081565b348015610b5957600080fd5b50610502610b68366004615381565b6127b4565b348015610b7957600080fd5b50610502610b8836600461567a565b6127e0565b348015610b9957600080fd5b506104926301dfe20081565b348015610bb157600080fd5b50610502610bc03660046152cc565b612888565b348015610bd157600080fd5b506104b5610be0366004615368565b612afa565b348015610bf157600080fd5b50610502610c003660046156e2565b612b6d565b348015610c1157600080fd5b50610492610c203660046152cc565b612bdc565b348015610c3157600080fd5b5060fb5473ffffffffffffffffffffffffffffffffffffffff166103bf565b348015610c5c57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610c9057600080fd5b506104926101c75481565b348015610ca757600080fd5b50610409610cb636600461578a565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b348015610cfd57600080fd5b50610d11610d0c3660046155a9565b612ca3565b6040516103e091906157bd565b348015610d2a57600080fd5b50610502610d393660046152cc565b612d7a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610d945750610d9482612e2a565b92915050565b60008082815b81811015610e06576000610dcb878784818110610dbf57610dbf615801565b90506020020135612f0d565b9050600080610ddb835190600090565b9092509050610dea828861585f565b9650610df6818761585f565b9550836001019350505050610da0565b50509250929050565b606060658054610e1e90615872565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a90615872565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905090565b6000610eac82612feb565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610ee082612158565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610fcb5750610fcb8133610cb6565b611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610f99565b6110618383613076565b505050565b73ffffffffffffffffffffffffffffffffffffffff84166110b3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60648111156110ee576040517f30aed3ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032811015611129576040517f6eede11900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611163576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c354604080517f04646a49000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916304646a499160048083019260209291908290030181865afa1580156111d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f891906158c5565b90508083108061120b575063077f880083115b15611242576040517f7616640100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af11580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff91906158de565b50600061130c844261585f565b905061131b8682878787613116565b505050505050565b61132e335b826133df565b6113ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610f99565b61106183838361349f565b60006113d0836122fe565b821061145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610f99565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152609760209081526040808320938352929052205490565b61149c6134e1565b60008082815b818110156115b05760008686838181106114be576114be615801565b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1661150a8260009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461152b57506115a0565b60008061154161153a84612f0d565b5190600090565b60008581526101c66020526040902080547fffffffffffffffffffffffffffff00000000000000000000000000000000000016905590925090506115848361354f565b61158e828861585f565b965061159a818761585f565b95505050505b6115a9816158fb565b90506114a2565b5060006115bd838561585f565b9050801561131b5760006115d033612bdc565b905080821115611669576101c3546040517f7f94e8ff000000000000000000000000000000000000000000000000000000008152336004820152828403602482018190529173ffffffffffffffffffffffffffffffffffffffff1690637f94e8ff90604401600060405180830381600087803b15801561164f57600080fd5b505af1158015611663573d6000803e3d6000fd5b50505050505b816101ca600082825461167c9190615933565b90915550503360009081526101c86020526040812080548492906116a1908490615933565b90915550503360009081526101c96020526040812080548792906116c690849061585f565b909155505083156118c35760006116de600286615946565b905060006116ec8287615933565b6101c5546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018590529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac91906158de565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188691906158de565b5060408051838152602081018390527fadd2755028f410fd28d5b98415bb469e4a5f7824d30429ca1c0c8a54de1eb537910160405180910390a150505b8415611982576040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af115801561195c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198091906158de565b505b60405185815233907ed5958799b183a7b738d3ad5e711305293dd5076a37a4e3b7e6611dea6114f39060200160405180910390a250505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610f99565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611af97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610f99565b611ba581613635565b60408051600080825260208201909252611bc19183919061363d565b50565b611061838383604051806020016040528060008152506127e0565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610f99565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d197f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610f99565b611dc582613635565b611dd18282600161363d565b5050565b6000611de060995490565b8210611e6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610f99565b60998281548110611e8157611e81615801565b90600052602060002001549050919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611f5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610f99565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611f8761383c565b611f8f6138bd565b565b611f996134e1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815b8181101561207c57600085858381811061201f5761201f615801565b6020908102929092013560008181526101c690935260409092205491925061205d9171ffffffffffffffffffffffffffffffffffff1690508561585f565b93506120688161393b565b6120738888836139d0565b50600101612003565b5061131b868684613cd8565b61209061383c565b73ffffffffffffffffffffffffffffffffffffffff81166120dd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f790bf62e04348d5f5d45f86cb3a270b9b281e2e4e11f54a24eca40cf4dea5703906020015b60405180910390a150565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610f99565b6121ec61383c565b73ffffffffffffffffffffffffffffffffffffffff8116612239576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c35473ffffffffffffffffffffffffffffffffffffffff161561228a576040517fa32250de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fb63c81227c62f4cb3e2b1120e3afbf3a2ed5dd8b9d99b8bef7275b084e6a98cb9060200161214d565b600073ffffffffffffffffffffffffffffffffffffffff82166123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610f99565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b6123d461383c565b611f8f6000613d7b565b60608160000361243d576040805160008082526020820190925290612435565b61242260405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816123fe5790505b5090506125ee565b6000612449838561585f565b90506000612456866122fe565b905080821115612464578091505b848210156124c35760408051600080825260208201909252906124b9565b6124a660405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816124825790505b50925050506125ee565b84820360008167ffffffffffffffff8111156124e1576124e1615420565b60405190808252806020026020018201604052801561253657816020015b61252360405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816124ff5790505b50905060005b828110156125e75760006125528a8a84016113c5565b60008181526101c660209081526040918290208251606081018452815471ffffffffffffffffffffffffffffffffffff811682529281018590527701000000000000000000000000000000000000000000000090920467ffffffffffffffff1692820192909252855192935090918590859081106125d2576125d2615801565b6020908102919091010152505060010161253c565b5093505050505b9392505050565b60fb54339073ffffffffffffffffffffffffffffffffffffffff16811461269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610f99565b611bc181613d7b565b606060668054610e1e90615872565b60008060006126c484612f0d565b51946000945092505050565b611dd1338383613dac565b6126e361383c565b73ffffffffffffffffffffffffffffffffffffffff8116612730576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd780e06c55efd6b3157e8c26704d2fd7bd2750bd9d0e71d2e5f675572dfad7a29060200161214d565b6127ac61383c565b611f8f613ed9565b6127bc613f35565b60006127cc6301dfe2004261585f565b90506110618382846301dfe200605a613116565b6127ea33836133df565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610f99565b61288284848484613f87565b50505050565b600054610100900460ff16158080156128a85750600054600160ff909116105b806128c25750303b1580156128c2575060005460ff166001145b61294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610f99565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156129ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff82166129f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a6d6040518060400160405280601481526020017f4b77656e74612052657761726420457363726f770000000000000000000000008152506040518060400160405280600381526020017f4b5245000000000000000000000000000000000000000000000000000000000081525061402a565b612a756140cb565b612a7d61416a565b612a85614209565b612a8e82613d7b565b60016101c7558015611dd157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060612b0582612feb565b6000612b1c60408051602081019091526000815290565b90506000815111612b3c57604051806020016040528060008152506125ee565b80612b46846142a0565b604051602001612b57929190615981565b6040516020818303038152906040529392505050565b6101c45473ffffffffffffffffffffffffffffffffffffffff163314612bbf576040517f8f8a680600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dd1828260400151836000015184602001518560600151613116565b6101c3546040517f057a601b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063057a601b90602401602060405180830381865afa158015612c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7291906158c5565b73ffffffffffffffffffffffffffffffffffffffff831660009081526101c86020526040902054610d949190615933565b60606000612cb1838561585f565b90506000612cbe866122fe565b905080821115612ccc578091505b848211612ce95760408051600080825260208201909252906124b9565b6000612cf58684615933565b905060008167ffffffffffffffff811115612d1257612d12615420565b604051908082528060200260200182016040528015612d3b578160200160208202803683370190505b50905060005b828110156125e757612d55898983016113c5565b828281518110612d6757612d67615801565b6020908102919091010152600101612d41565b612d8261383c565b60fb805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155612de560c95473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612ebd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610d9457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610d94565b612f386040518060800160405280600081526020016000815260200160008152602001600081525090565b5060009081526101c660209081526040918290208251608081018452905471ffffffffffffffffffffffffffffffffffff811682527201000000000000000000000000000000000000810464ffffffffff169282019290925277010000000000000000000000000000000000000000000000820467ffffffffffffffff16928101929092527f0100000000000000000000000000000000000000000000000000000000000000900460ff16606082015290565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff16611bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610f99565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906130d082612158565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61311e6134e1565b826101ca6000828254613131919061585f565b90915550506101ca546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e891906158c5565b10156131f6576131f66159b0565b73ffffffffffffffffffffffffffffffffffffffff851660009081526101c860205260408120805485929061322c90849061585f565b90915550506101c78054604080516080808201835271ffffffffffffffffffffffffffffffffffff888116835264ffffffffff888116602080860191825267ffffffffffffffff8d811687890190815260ff8c81166060808b0191825260008d81526101c687528c90209a518b549751945192519093167f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290951677010000000000000000000000000000000000000000000000029190911676ffffffffffffffffffffffffffffffffffffffffffffff939097167201000000000000000000000000000000000000027fffffffffffffffffff000000000000000000000000000000000000000000000090961691909716179390931792909216929092171790935585546001019095558251888152918201879052918101839052928301849052909173ffffffffffffffffffffffffffffffffffffffff8816917f2cc016694185d38abbe28d9e9baea2e9d95a321ae43475e5ea7b643756840bc0910160405180910390a261131b868261435e565b6000806133eb83612158565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613459575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b8061349757508373ffffffffffffffffffffffffffffffffffffffff1661347f84610ea1565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b6134a76134e1565b60008181526101c6602052604090205471ffffffffffffffffffffffffffffffffffff166134d6848483613cd8565b6128828484846139d0565b61012d5460ff1615611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610f99565b600061355a82612158565b905061356a816000846001614591565b61357382612158565b600083815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff85168085526068845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558785526067909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611bc161383c565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156136705761106183614735565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156136f5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526136f2918101906158c5565b60015b613781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610f99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610f99565b5061106183838361483f565b60c95473ffffffffffffffffffffffffffffffffffffffff163314611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f99565b6138c5614864565b61012d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61394433611328565b611bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610f99565b8273ffffffffffffffffffffffffffffffffffffffff166139f082612158565b73ffffffffffffffffffffffffffffffffffffffff1614613a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610f99565b73ffffffffffffffffffffffffffffffffffffffff8216613b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f99565b613b428383836001614591565b8273ffffffffffffffffffffffffffffffffffffffff16613b6282612158565b73ffffffffffffffffffffffffffffffffffffffff1614613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610f99565b600081815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526068855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000613ce384612bdc565b905081811015613d29576040517f89906d5e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610f99565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526101c860205260408082208054869003905591851681529081208054849290613d7090849061585f565b909155505050505050565b60fb80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055611bc1816148d1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610f99565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613ee16134e1565b61012d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586139113390565b6101c35473ffffffffffffffffffffffffffffffffffffffff163314611f8f576040517f18bc9fde00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f9284848461349f565b613f9e84848484614948565b612882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610f99565b600054610100900460ff166140c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611dd18282614b3b565b600054610100900460ff16614162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611f8f614beb565b600054610100900460ff16614201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611f8f614c8b565b600054610100900460ff16611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b606060006142ad83614d4d565b600101905060008167ffffffffffffffff8111156142cd576142cd615420565b6040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461430157509392505050565b73ffffffffffffffffffffffffffffffffffffffff82166143db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610f99565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615614467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f99565b614475600083836001614591565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615614501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f99565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260686020908152604080832080546001019055848352606790915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115614622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610f99565b8173ffffffffffffffffffffffffffffffffffffffff851661468b5761468681609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b6146c8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146146c8576146c88582614e2f565b73ffffffffffffffffffffffffffffffffffffffff84166146f1576146ec81614ee6565b61472e565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461472e5761472e8482614f95565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b6147d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610f99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61484883614fe6565b6000825111806148555750805b15611061576128828383615033565b61012d5460ff16611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610f99565b60c9805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600073ffffffffffffffffffffffffffffffffffffffff84163b15614b30576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906149bf9033908990889088906004016159df565b6020604051808303816000875af1925050508015614a18575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252614a1591810190615a28565b60015b614ae5573d808015614a46576040519150601f19603f3d011682016040523d82523d6000602084013e614a4b565b606091505b508051600003614add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610f99565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050613497565b506001949350505050565b600054610100900460ff16614bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b6065614bde8382615a8b565b5060666110618282615a8b565b600054610100900460ff16614c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611f8f33613d7b565b600054610100900460ff16614d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b61012d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614d96577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614dc2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614de057662386f26fc10000830492506010015b6305f5e1008310614df8576305f5e100830492506008015b6127108310614e0c57612710830492506004015b60648310614e1e576064830492506002015b600a8310610d945760010192915050565b60006001614e3c846122fe565b614e469190615933565b600083815260986020526040902054909150808214614ea65773ffffffffffffffffffffffffffffffffffffffff841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b50600091825260986020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352609781528383209183525290812055565b609954600090614ef890600190615933565b6000838152609a602052604081205460998054939450909284908110614f2057614f20615801565b906000526020600020015490508060998381548110614f4157614f41615801565b6000918252602080832090910192909255828152609a90915260408082208490558582528120556099805480614f7957614f79615ba5565b6001900381819060005260206000200160009055905550505050565b6000614fa0836122fe565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b614fef81614735565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606073ffffffffffffffffffffffffffffffffffffffff83163b6150d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610f99565b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516151019190615bd4565b600060405180830381855af49150503d806000811461513c576040519150601f19603f3d011682016040523d82523d6000602084013e615141565b606091505b50915091506151698282604051806060016040528060278152602001615bf160279139615172565b95945050505050565b606083156151815750816125ee565b6125ee83838151156151965781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f999190615355565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611bc157600080fd5b60006020828403121561520a57600080fd5b81356125ee816151ca565b60008083601f84011261522757600080fd5b50813567ffffffffffffffff81111561523f57600080fd5b6020830191508360208260051b850101111561525a57600080fd5b9250929050565b6000806020838503121561527457600080fd5b823567ffffffffffffffff81111561528b57600080fd5b61529785828601615215565b90969095509350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146152c757600080fd5b919050565b6000602082840312156152de57600080fd5b6125ee826152a3565b60005b838110156153025781810151838201526020016152ea565b50506000910152565b600081518084526153238160208601602086016152e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125ee602083018461530b565b60006020828403121561537a57600080fd5b5035919050565b6000806040838503121561539457600080fd5b61539d836152a3565b946020939093013593505050565b600080600080608085870312156153c157600080fd5b6153ca856152a3565b966020860135965060408601359560600135945092505050565b6000806000606084860312156153f957600080fd5b615402846152a3565b9250615410602085016152a3565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261546057600080fd5b813567ffffffffffffffff8082111561547b5761547b615420565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156154c1576154c1615420565b816040528381528660208588010111156154da57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561550d57600080fd5b615516836152a3565b9150602083013567ffffffffffffffff81111561553257600080fd5b61553e8582860161544f565b9150509250929050565b6000806000806060858703121561555e57600080fd5b615567856152a3565b9350615575602086016152a3565b9250604085013567ffffffffffffffff81111561559157600080fd5b61559d87828801615215565b95989497509550505050565b6000806000606084860312156155be57600080fd5b6155c7846152a3565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b8281101561562857815180518552868101518786015285015185850152606090930192908501906001016155f9565b5091979650505050505050565b8015158114611bc157600080fd5b6000806040838503121561565657600080fd5b61565f836152a3565b9150602083013561566f81615635565b809150509250929050565b6000806000806080858703121561569057600080fd5b615699856152a3565b93506156a7602086016152a3565b925060408501359150606085013567ffffffffffffffff8111156156ca57600080fd5b6156d68782880161544f565b91505092959194509250565b60008082840360a08112156156f657600080fd5b6156ff846152a3565b925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561573157600080fd5b506040516080810181811067ffffffffffffffff8211171561575557615755615420565b806040525060208401358152604084013560208201526060840135604082015260808401356060820152809150509250929050565b6000806040838503121561579d57600080fd5b6157a6836152a3565b91506157b4602084016152a3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156157f5578351835292840192918401916001016157d9565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610d9457610d94615830565b600181811c9082168061588657607f821691505b6020821081036158bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156158d757600080fd5b5051919050565b6000602082840312156158f057600080fd5b81516125ee81615635565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361592c5761592c615830565b5060010190565b81810381811115610d9457610d94615830565b60008261597c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600083516159938184602088016152e7565b8351908301906159a78183602088016152e7565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152615a1e608083018461530b565b9695505050505050565b600060208284031215615a3a57600080fd5b81516125ee816151ca565b601f82111561106157600081815260208120601f850160051c81016020861015615a6c5750805b601f850160051c820191505b8181101561131b57828155600101615a78565b815167ffffffffffffffff811115615aa557615aa5615420565b615ab981615ab38454615872565b84615a45565b602080601f831160018114615b0c5760008415615ad65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561131b565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615b5957888601518255948401946001909101908401615b3a565b5085821015615b9557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615be68184602087016152e7565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200b48abdc663c736567aa4e1f98e48008d123b0ff46d012c2c87e82bd6490a31864736f6c63430008130033000000000000000000000000920cf626a271321c151d027030d5d08af699456b000000000000000000000000b176dad2916db0905cd2d65ed54fdc3a878affe4", + "nonce": "0x1", + "chainId": "0xa" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x8f621a", + "logs": [ + { + "address": "0x7bf712e355a5affcd026d0e65ef57bcd0a7b9986", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x884efbe8ff4756315d2aa58028df1e212b1f8f9ea0fa76bccebc8aecfc4258d0", + "blockNumber": "0x7a4bd12", + "transactionHash": "0x208a7f9a4260e1154509bb39c1fdc3b716c10f0b6b281857a244dc0036c7ec67", + "transactionIndex": "0xf", + "logIndex": "0x2c", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000", + "type": "0x2", + "transactionHash": "0x208a7f9a4260e1154509bb39c1fdc3b716c10f0b6b281857a244dc0036c7ec67", + "transactionIndex": "0xf", + "blockHash": "0x884efbe8ff4756315d2aa58028df1e212b1f8f9ea0fa76bccebc8aecfc4258d0", + "blockNumber": "0x7a4bd12", + "gasUsed": "0x4e7b6c", + "effectiveGasPrice": "0x1a263", + "from": "0x1dd9a4d1a114934cd2754b4a9c1bb7f3dfb9620b", + "to": null, + "contractAddress": "0x7bf712e355a5affcd026d0e65ef57bcd0a7b9986", + "l1BaseFeeScalar": "0x146b", + "l1BlobBaseFee": "0x36220ebf0", + "l1BlobBaseFeeScalar": "0xf79c5", + "l1Fee": "0x8916a9b23d3b", + "l1GasPrice": "0x2be7ade6f", + "l1GasUsed": "0x25725" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1732072435, + "chain": 10, + "commit": "59f4b5a" +} \ No newline at end of file diff --git a/broadcast/Upgrade.s.sol/10/run-latest.json b/broadcast/Upgrade.s.sol/10/run-latest.json new file mode 100644 index 000000000..1054a6c71 --- /dev/null +++ b/broadcast/Upgrade.s.sol/10/run-latest.json @@ -0,0 +1,69 @@ +{ + "transactions": [ + { + "hash": "0x208a7f9a4260e1154509bb39c1fdc3b716c10f0b6b281857a244dc0036c7ec67", + "transactionType": "CREATE", + "contractName": "RewardEscrowV2", + "contractAddress": "0x7bf712e355a5affcd026d0e65ef57bcd0a7b9986", + "function": null, + "arguments": [ + "0x920Cf626a271321C151D027030D5d08aF699456b", + "0xb176DaD2916db0905cd2D65ed54FDC3a878aFFe4" + ], + "transaction": { + "from": "0x1dd9a4d1a114934cd2754b4a9c1bb7f3dfb9620b", + "gas": "0x6606d9", + "value": "0x0", + "input": "0x60e0604052306080523480156200001557600080fd5b5060405162005e7b38038062005e7b833981016040819052620000389162000179565b6001600160a01b03821615806200005657506001600160a01b038116155b15620000755760405163d92e233d60e01b815260040160405180910390fd5b6001600160a01b0380831660a052811660c052620000926200009a565b5050620001b1565b600054610100900460ff1615620001075760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff90811610156200015a576000805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b80516001600160a01b03811681146200017457600080fd5b919050565b600080604083850312156200018d57600080fd5b62000198836200015c565b9150620001a8602084016200015c565b90509250929050565b60805160a05160c051615c4d6200022e60003960008181610c6201526117ea01526000818161039f0152818161098c0152818161127d0152818161173f01528181611819015281816118fe01526131680152600081816119d601528181611a8601528181611bf601528181611ca60152611ead0152615c4d6000f3fe60806040526004361061038b5760003560e01c80636fb83a57116101dc578063ad18e97e11610102578063ca2c7f76116100a0578063e6b2cf6c1161006f578063e6b2cf6c14610c84578063e985e9c514610c9b578063eac6248914610cf1578063f2fde38b14610d1e57600080fd5b8063ca2c7f7614610be5578063daf3807314610c05578063e30c397814610c25578063e509584314610c5057600080fd5b8063b88d4fde116100dc578063b88d4fde14610b6d578063c297fa0f14610b8d578063c4d66de814610ba5578063c87b56dd14610bc557600080fd5b8063ad18e97e14610b07578063b1724b4614610b35578063b5ddb9c714610b4d57600080fd5b80638da5cb5b1161017a578063a22cb46511610149578063a22cb465146109e3578063a4116a7e14610a03578063a46eddcf14610ad2578063ac2fdb1a14610af257600080fd5b80638da5cb5b1461094f5780639034802b1461097a57806395d89b41146109ae57806398ab1e3d146109c357600080fd5b806371e780f3116101b657806371e780f3146108e1578063773ab39f146108f857806379ba5097146109255780637d5ff94d1461093a57600080fd5b80636fb83a571461088c57806370a08231146108ac578063715018a6146108cc57600080fd5b806334c7fec9116102c157806352d1902d1161025f5780635c975abb1161022e5780635c975abb1461072a5780636352211e1461074357806364b87a70146107635780636d3cbe211461079157600080fd5b806352d1902d146106c0578063534c0842146106d557806353a535d3146106ea5780635414408d1461070a57600080fd5b806342842e0e1161029b57806342842e0e1461063f57806348591dd71461065f5780634f1ef2861461068d5780634f6ccce7146106a057600080fd5b806334c7fec9146105ea5780633659cfe61461060a5780633e7f4c091461062a57600080fd5b806318160ddd1161032e57806323b872dd1161030857806323b872dd1461056757806324c0f5b5146105875780632f745c591461059c578063326a3cfb146105bc57600080fd5b806318160ddd1461050457806318c1cb5214610519578063227d517a1461053957600080fd5b8063057a601b1161036a578063057a601b1461044e57806306fdde03146104a0578063081812fc146104c2578063095ea7b3146104e257600080fd5b80624d37e21461039057806301ffc9a7146103e957806303df264014610419575b600080fd5b34801561039c57600080fd5b507f00000000000000000000000000000000000000000000000000000000000000005b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b3480156103f557600080fd5b506104096104043660046151f8565b610d3e565b60405190151581526020016103e0565b34801561042557600080fd5b50610439610434366004615261565b610d9a565b604080519283526020830191909152016103e0565b34801561045a57600080fd5b506104926104693660046152cc565b73ffffffffffffffffffffffffffffffffffffffff1660009081526101c8602052604090205490565b6040519081526020016103e0565b3480156104ac57600080fd5b506104b5610e0f565b6040516103e09190615355565b3480156104ce57600080fd5b506103bf6104dd366004615368565b610ea1565b3480156104ee57600080fd5b506105026104fd366004615381565b610ed5565b005b34801561051057600080fd5b50609954610492565b34801561052557600080fd5b506105026105343660046153ab565b611066565b34801561054557600080fd5b506104926105543660046152cc565b6101c96020526000908152604090205481565b34801561057357600080fd5b506105026105823660046153e4565b611323565b34801561059357600080fd5b50610492606481565b3480156105a857600080fd5b506104926105b7366004615381565b6113c5565b3480156105c857600080fd5b506104926105d73660046152cc565b6101c86020526000908152604090205481565b3480156105f657600080fd5b50610502610605366004615261565b611494565b34801561061657600080fd5b506105026106253660046152cc565b6119bf565b34801561063657600080fd5b50610492603281565b34801561064b57600080fd5b5061050261065a3660046153e4565b611bc4565b34801561066b57600080fd5b506101c4546103bf9073ffffffffffffffffffffffffffffffffffffffff1681565b61050261069b3660046154fa565b611bdf565b3480156106ac57600080fd5b506104926106bb366004615368565b611dd5565b3480156106cc57600080fd5b50610492611e93565b3480156106e157600080fd5b50610502611f7f565b3480156106f657600080fd5b50610502610705366004615548565b611f91565b34801561071657600080fd5b506105026107253660046152cc565b612088565b34801561073657600080fd5b5061012d5460ff16610409565b34801561074f57600080fd5b506103bf61075e366004615368565b612158565b34801561076f57600080fd5b506101c3546103bf9073ffffffffffffffffffffffffffffffffffffffff1681565b34801561079d57600080fd5b5061083f6107ac366004615368565b6101c66020526000908152604090205471ffffffffffffffffffffffffffffffffffff8116907201000000000000000000000000000000000000810464ffffffffff169077010000000000000000000000000000000000000000000000810467ffffffffffffffff16907f0100000000000000000000000000000000000000000000000000000000000000900460ff1684565b6040805171ffffffffffffffffffffffffffffffffffff909516855264ffffffffff909316602085015267ffffffffffffffff9091169183019190915260ff1660608201526080016103e0565b34801561089857600080fd5b506105026108a73660046152cc565b6121e4565b3480156108b857600080fd5b506104926108c73660046152cc565b6122fe565b3480156108d857600080fd5b506105026123cc565b3480156108ed57600080fd5b506104926101ca5481565b34801561090457600080fd5b506109186109133660046155a9565b6123de565b6040516103e091906155dc565b34801561093157600080fd5b506105026125f5565b34801561094657600080fd5b50610492605a81565b34801561095b57600080fd5b5060c95473ffffffffffffffffffffffffffffffffffffffff166103bf565b34801561098657600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b3480156109ba57600080fd5b506104b56126a7565b3480156109cf57600080fd5b506104396109de366004615368565b6126b6565b3480156109ef57600080fd5b506105026109fe366004615643565b6126d0565b348015610a0f57600080fd5b50610ab2610a1e366004615368565b60009081526101c6602052604090205477010000000000000000000000000000000000000000000000810467ffffffffffffffff169171ffffffffffffffffffffffffffffffffffff8216917201000000000000000000000000000000000000810464ffffffffff16917f010000000000000000000000000000000000000000000000000000000000000090910460ff1690565b6040805194855260208501939093529183015260608201526080016103e0565b348015610ade57600080fd5b50610502610aed3660046152cc565b6126db565b348015610afe57600080fd5b506105026127a4565b348015610b1357600080fd5b506101c5546103bf9073ffffffffffffffffffffffffffffffffffffffff1681565b348015610b4157600080fd5b5061049263077f880081565b348015610b5957600080fd5b50610502610b68366004615381565b6127b4565b348015610b7957600080fd5b50610502610b8836600461567a565b6127e0565b348015610b9957600080fd5b506104926301dfe20081565b348015610bb157600080fd5b50610502610bc03660046152cc565b612888565b348015610bd157600080fd5b506104b5610be0366004615368565b612afa565b348015610bf157600080fd5b50610502610c003660046156e2565b612b6d565b348015610c1157600080fd5b50610492610c203660046152cc565b612bdc565b348015610c3157600080fd5b5060fb5473ffffffffffffffffffffffffffffffffffffffff166103bf565b348015610c5c57600080fd5b506103bf7f000000000000000000000000000000000000000000000000000000000000000081565b348015610c9057600080fd5b506104926101c75481565b348015610ca757600080fd5b50610409610cb636600461578a565b73ffffffffffffffffffffffffffffffffffffffff9182166000908152606a6020908152604080832093909416825291909152205460ff1690565b348015610cfd57600080fd5b50610d11610d0c3660046155a9565b612ca3565b6040516103e091906157bd565b348015610d2a57600080fd5b50610502610d393660046152cc565b612d7a565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f780e9d63000000000000000000000000000000000000000000000000000000001480610d945750610d9482612e2a565b92915050565b60008082815b81811015610e06576000610dcb878784818110610dbf57610dbf615801565b90506020020135612f0d565b9050600080610ddb835190600090565b9092509050610dea828861585f565b9650610df6818761585f565b9550836001019350505050610da0565b50509250929050565b606060658054610e1e90615872565b80601f0160208091040260200160405190810160405280929190818152602001828054610e4a90615872565b8015610e975780601f10610e6c57610100808354040283529160200191610e97565b820191906000526020600020905b815481529060010190602001808311610e7a57829003601f168201915b5050505050905090565b6000610eac82612feb565b5060009081526069602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b6000610ee082612158565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610fa2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560448201527f720000000000000000000000000000000000000000000000000000000000000060648201526084015b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff82161480610fcb5750610fcb8133610cb6565b611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603d60248201527f4552433732313a20617070726f76652063616c6c6572206973206e6f7420746f60448201527f6b656e206f776e6572206f7220617070726f76656420666f7220616c6c0000006064820152608401610f99565b6110618383613076565b505050565b73ffffffffffffffffffffffffffffffffffffffff84166110b3576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60648111156110ee576040517f30aed3ff00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6032811015611129576040517f6eede11900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b82600003611163576040517f1f2a200500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c354604080517f04646a49000000000000000000000000000000000000000000000000000000008152905160009273ffffffffffffffffffffffffffffffffffffffff16916304646a499160048083019260209291908290030181865afa1580156111d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f891906158c5565b90508083108061120b575063077f880083115b15611242576040517f7616640100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040517f23b872dd000000000000000000000000000000000000000000000000000000008152336004820152306024820152604481018590527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906323b872dd906064016020604051808303816000875af11580156112db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ff91906158de565b50600061130c844261585f565b905061131b8682878787613116565b505050505050565b61132e335b826133df565b6113ba576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610f99565b61106183838361349f565b60006113d0836122fe565b821061145e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f455243373231456e756d657261626c653a206f776e657220696e646578206f7560448201527f74206f6620626f756e64730000000000000000000000000000000000000000006064820152608401610f99565b5073ffffffffffffffffffffffffffffffffffffffff919091166000908152609760209081526040808320938352929052205490565b61149c6134e1565b60008082815b818110156115b05760008686838181106114be576114be615801565b9050602002013590503373ffffffffffffffffffffffffffffffffffffffff1661150a8260009081526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff161461152b57506115a0565b60008061154161153a84612f0d565b5190600090565b60008581526101c66020526040902080547fffffffffffffffffffffffffffff00000000000000000000000000000000000016905590925090506115848361354f565b61158e828861585f565b965061159a818761585f565b95505050505b6115a9816158fb565b90506114a2565b5060006115bd838561585f565b9050801561131b5760006115d033612bdc565b905080821115611669576101c3546040517f7f94e8ff000000000000000000000000000000000000000000000000000000008152336004820152828403602482018190529173ffffffffffffffffffffffffffffffffffffffff1690637f94e8ff90604401600060405180830381600087803b15801561164f57600080fd5b505af1158015611663573d6000803e3d6000fd5b50505050505b816101ca600082825461167c9190615933565b90915550503360009081526101c86020526040812080548492906116a1908490615933565b90915550503360009081526101c96020526040812080548792906116c690849061585f565b909155505083156118c35760006116de600286615946565b905060006116ec8287615933565b6101c5546040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018590529192507f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611788573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117ac91906158de565b506040517fa9059cbb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063a9059cbb906044016020604051808303816000875af1158015611862573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061188691906158de565b5060408051838152602081018390527fadd2755028f410fd28d5b98415bb469e4a5f7824d30429ca1c0c8a54de1eb537910160405180910390a150505b8415611982576040517fa9059cbb000000000000000000000000000000000000000000000000000000008152336004820152602481018690527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063a9059cbb906044016020604051808303816000875af115801561195c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198091906158de565b505b60405185815233907ed5958799b183a7b738d3ad5e711305293dd5076a37a4e3b7e6611dea6114f39060200160405180910390a250505050505050565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611a84576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610f99565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611af97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611b9c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610f99565b611ba581613635565b60408051600080825260208201909252611bc19183919061363d565b50565b611061838383604051806020016040528060008152506127e0565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000163003611ca4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f64656c656761746563616c6c00000000000000000000000000000000000000006064820152608401610f99565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16611d197f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1614611dbc576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060448201527f6163746976652070726f787900000000000000000000000000000000000000006064820152608401610f99565b611dc582613635565b611dd18282600161363d565b5050565b6000611de060995490565b8210611e6e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602c60248201527f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60448201527f7574206f6620626f756e647300000000000000000000000000000000000000006064820152608401610f99565b60998281548110611e8157611e81615801565b90600052602060002001549050919050565b60003073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001614611f5a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603860248201527f555550535570677261646561626c653a206d757374206e6f742062652063616c60448201527f6c6564207468726f7567682064656c656761746563616c6c00000000000000006064820152608401610f99565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b611f8761383c565b611f8f6138bd565b565b611f996134e1565b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611ffe576040517fdad89dca00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600081815b8181101561207c57600085858381811061201f5761201f615801565b6020908102929092013560008181526101c690935260409092205491925061205d9171ffffffffffffffffffffffffffffffffffff1690508561585f565b93506120688161393b565b6120738888836139d0565b50600101612003565b5061131b868684613cd8565b61209061383c565b73ffffffffffffffffffffffffffffffffffffffff81166120dd576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527f790bf62e04348d5f5d45f86cb3a270b9b281e2e4e11f54a24eca40cf4dea5703906020015b60405180910390a150565b60008181526067602052604081205473ffffffffffffffffffffffffffffffffffffffff1680610d94576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610f99565b6121ec61383c565b73ffffffffffffffffffffffffffffffffffffffff8116612239576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c35473ffffffffffffffffffffffffffffffffffffffff161561228a576040517fa32250de00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c380547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fb63c81227c62f4cb3e2b1120e3afbf3a2ed5dd8b9d99b8bef7275b084e6a98cb9060200161214d565b600073ffffffffffffffffffffffffffffffffffffffff82166123a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4552433732313a2061646472657373207a65726f206973206e6f74206120766160448201527f6c6964206f776e657200000000000000000000000000000000000000000000006064820152608401610f99565b5073ffffffffffffffffffffffffffffffffffffffff1660009081526068602052604090205490565b6123d461383c565b611f8f6000613d7b565b60608160000361243d576040805160008082526020820190925290612435565b61242260405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816123fe5790505b5090506125ee565b6000612449838561585f565b90506000612456866122fe565b905080821115612464578091505b848210156124c35760408051600080825260208201909252906124b9565b6124a660405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816124825790505b50925050506125ee565b84820360008167ffffffffffffffff8111156124e1576124e1615420565b60405190808252806020026020018201604052801561253657816020015b61252360405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816124ff5790505b50905060005b828110156125e75760006125528a8a84016113c5565b60008181526101c660209081526040918290208251606081018452815471ffffffffffffffffffffffffffffffffffff811682529281018590527701000000000000000000000000000000000000000000000090920467ffffffffffffffff1692820192909252855192935090918590859081106125d2576125d2615801565b6020908102919091010152505060010161253c565b5093505050505b9392505050565b60fb54339073ffffffffffffffffffffffffffffffffffffffff16811461269e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f74207468652060448201527f6e6577206f776e657200000000000000000000000000000000000000000000006064820152608401610f99565b611bc181613d7b565b606060668054610e1e90615872565b60008060006126c484612f0d565b51946000945092505050565b611dd1338383613dac565b6126e361383c565b73ffffffffffffffffffffffffffffffffffffffff8116612730576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6101c580547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd780e06c55efd6b3157e8c26704d2fd7bd2750bd9d0e71d2e5f675572dfad7a29060200161214d565b6127ac61383c565b611f8f613ed9565b6127bc613f35565b60006127cc6301dfe2004261585f565b90506110618382846301dfe200605a613116565b6127ea33836133df565b612876576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610f99565b61288284848484613f87565b50505050565b600054610100900460ff16158080156128a85750600054600160ff909116105b806128c25750303b1580156128c2575060005460ff166001145b61294e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152608401610f99565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905580156129ac57600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff166101001790555b73ffffffffffffffffffffffffffffffffffffffff82166129f9576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a6d6040518060400160405280601481526020017f4b77656e74612052657761726420457363726f770000000000000000000000008152506040518060400160405280600381526020017f4b5245000000000000000000000000000000000000000000000000000000000081525061402a565b612a756140cb565b612a7d61416a565b612a85614209565b612a8e82613d7b565b60016101c7558015611dd157600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15050565b6060612b0582612feb565b6000612b1c60408051602081019091526000815290565b90506000815111612b3c57604051806020016040528060008152506125ee565b80612b46846142a0565b604051602001612b57929190615981565b6040516020818303038152906040529392505050565b6101c45473ffffffffffffffffffffffffffffffffffffffff163314612bbf576040517f8f8a680600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611dd1828260400151836000015184602001518560600151613116565b6101c3546040517f057a601b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8381166004830152600092169063057a601b90602401602060405180830381865afa158015612c4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c7291906158c5565b73ffffffffffffffffffffffffffffffffffffffff831660009081526101c86020526040902054610d949190615933565b60606000612cb1838561585f565b90506000612cbe866122fe565b905080821115612ccc578091505b848211612ce95760408051600080825260208201909252906124b9565b6000612cf58684615933565b905060008167ffffffffffffffff811115612d1257612d12615420565b604051908082528060200260200182016040528015612d3b578160200160208202803683370190505b50905060005b828110156125e757612d55898983016113c5565b828281518110612d6757612d67615801565b6020908102919091010152600101612d41565b612d8261383c565b60fb805473ffffffffffffffffffffffffffffffffffffffff83167fffffffffffffffffffffffff00000000000000000000000000000000000000009091168117909155612de560c95473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f80ac58cd000000000000000000000000000000000000000000000000000000001480612ebd57507fffffffff0000000000000000000000000000000000000000000000000000000082167f5b5e139f00000000000000000000000000000000000000000000000000000000145b80610d9457507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff00000000000000000000000000000000000000000000000000000000831614610d94565b612f386040518060800160405280600081526020016000815260200160008152602001600081525090565b5060009081526101c660209081526040918290208251608081018452905471ffffffffffffffffffffffffffffffffffff811682527201000000000000000000000000000000000000810464ffffffffff169282019290925277010000000000000000000000000000000000000000000000820467ffffffffffffffff16928101929092527f0100000000000000000000000000000000000000000000000000000000000000900460ff16606082015290565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff16611bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f4552433732313a20696e76616c696420746f6b656e20494400000000000000006044820152606401610f99565b600081815260696020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff841690811790915581906130d082612158565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b61311e6134e1565b826101ca6000828254613131919061585f565b90915550506101ca546040517f70a082310000000000000000000000000000000000000000000000000000000081523060048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa1580156131c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e891906158c5565b10156131f6576131f66159b0565b73ffffffffffffffffffffffffffffffffffffffff851660009081526101c860205260408120805485929061322c90849061585f565b90915550506101c78054604080516080808201835271ffffffffffffffffffffffffffffffffffff888116835264ffffffffff888116602080860191825267ffffffffffffffff8d811687890190815260ff8c81166060808b0191825260008d81526101c687528c90209a518b549751945192519093167f0100000000000000000000000000000000000000000000000000000000000000027effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290951677010000000000000000000000000000000000000000000000029190911676ffffffffffffffffffffffffffffffffffffffffffffff939097167201000000000000000000000000000000000000027fffffffffffffffffff000000000000000000000000000000000000000000000090961691909716179390931792909216929092171790935585546001019095558251888152918201879052918101839052928301849052909173ffffffffffffffffffffffffffffffffffffffff8816917f2cc016694185d38abbe28d9e9baea2e9d95a321ae43475e5ea7b643756840bc0910160405180910390a261131b868261435e565b6000806133eb83612158565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480613459575073ffffffffffffffffffffffffffffffffffffffff8082166000908152606a602090815260408083209388168352929052205460ff165b8061349757508373ffffffffffffffffffffffffffffffffffffffff1661347f84610ea1565b73ffffffffffffffffffffffffffffffffffffffff16145b949350505050565b6134a76134e1565b60008181526101c6602052604090205471ffffffffffffffffffffffffffffffffffff166134d6848483613cd8565b6128828484846139d0565b61012d5460ff1615611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152606401610f99565b600061355a82612158565b905061356a816000846001614591565b61357382612158565b600083815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff85168085526068845282852080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190558785526067909352818420805490911690555192935084927fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a45050565b611bc161383c565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff16156136705761106183614735565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156136f5575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01682019092526136f2918101906158c5565b60015b613781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f45524331393637557067726164653a206e657720696d706c656d656e7461746960448201527f6f6e206973206e6f7420555550530000000000000000000000000000000000006064820152608401610f99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc8114613830576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602960248201527f45524331393637557067726164653a20756e737570706f727465642070726f7860448201527f6961626c655555494400000000000000000000000000000000000000000000006064820152608401610f99565b5061106183838361483f565b60c95473ffffffffffffffffffffffffffffffffffffffff163314611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610f99565b6138c5614864565b61012d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa335b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390a1565b61394433611328565b611bc1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f4552433732313a2063616c6c6572206973206e6f7420746f6b656e206f776e6560448201527f72206f7220617070726f766564000000000000000000000000000000000000006064820152608401610f99565b8273ffffffffffffffffffffffffffffffffffffffff166139f082612158565b73ffffffffffffffffffffffffffffffffffffffff1614613a93576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610f99565b73ffffffffffffffffffffffffffffffffffffffff8216613b35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f4552433732313a207472616e7366657220746f20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152608401610f99565b613b428383836001614591565b8273ffffffffffffffffffffffffffffffffffffffff16613b6282612158565b73ffffffffffffffffffffffffffffffffffffffff1614613c05576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f4552433732313a207472616e736665722066726f6d20696e636f72726563742060448201527f6f776e65720000000000000000000000000000000000000000000000000000006064820152608401610f99565b600081815260696020908152604080832080547fffffffffffffffffffffffff000000000000000000000000000000000000000090811690915573ffffffffffffffffffffffffffffffffffffffff8781168086526068855283862080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01905590871680865283862080546001019055868652606790945282852080549092168417909155905184937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4505050565b6000613ce384612bdc565b905081811015613d29576040517f89906d5e0000000000000000000000000000000000000000000000000000000081526004810183905260248101829052604401610f99565b73ffffffffffffffffffffffffffffffffffffffff80851660009081526101c860205260408082208054869003905591851681529081208054849290613d7090849061585f565b909155505050505050565b60fb80547fffffffffffffffffffffffff0000000000000000000000000000000000000000169055611bc1816148d1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603613e41576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601960248201527f4552433732313a20617070726f766520746f2063616c6c6572000000000000006044820152606401610f99565b73ffffffffffffffffffffffffffffffffffffffff8381166000818152606a602090815260408083209487168084529482529182902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b613ee16134e1565b61012d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586139113390565b6101c35473ffffffffffffffffffffffffffffffffffffffff163314611f8f576040517f18bc9fde00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613f9284848461349f565b613f9e84848484614948565b612882576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610f99565b600054610100900460ff166140c1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611dd18282614b3b565b600054610100900460ff16614162576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611f8f614beb565b600054610100900460ff16614201576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611f8f614c8b565b600054610100900460ff16611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b606060006142ad83614d4d565b600101905060008167ffffffffffffffff8111156142cd576142cd615420565b6040519080825280601f01601f1916602001820160405280156142f7576020820181803683370190505b5090508181016020015b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff017f3031323334353637383961626364656600000000000000000000000000000000600a86061a8153600a850494508461430157509392505050565b73ffffffffffffffffffffffffffffffffffffffff82166143db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4552433732313a206d696e7420746f20746865207a65726f20616464726573736044820152606401610f99565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615614467576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f99565b614475600083836001614591565b60008181526067602052604090205473ffffffffffffffffffffffffffffffffffffffff1615614501576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601c60248201527f4552433732313a20746f6b656e20616c7265616479206d696e746564000000006044820152606401610f99565b73ffffffffffffffffffffffffffffffffffffffff8216600081815260686020908152604080832080546001019055848352606790915280822080547fffffffffffffffffffffffff0000000000000000000000000000000000000000168417905551839291907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908290a45050565b6001811115614622576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603560248201527f455243373231456e756d657261626c653a20636f6e736563757469766520747260448201527f616e7366657273206e6f7420737570706f7274656400000000000000000000006064820152608401610f99565b8173ffffffffffffffffffffffffffffffffffffffff851661468b5761468681609980546000838152609a60205260408120829055600182018355919091527f72a152ddfb8e864297c917af52ea6c1c68aead0fee1a62673fcc7e0c94979d000155565b6146c8565b8373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16146146c8576146c88582614e2f565b73ffffffffffffffffffffffffffffffffffffffff84166146f1576146ec81614ee6565b61472e565b8473ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161461472e5761472e8482614f95565b5050505050565b73ffffffffffffffffffffffffffffffffffffffff81163b6147d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e7472616374000000000000000000000000000000000000006064820152608401610f99565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055565b61484883614fe6565b6000825111806148555750805b15611061576128828383615033565b61012d5460ff16611f8f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152606401610f99565b60c9805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600073ffffffffffffffffffffffffffffffffffffffff84163b15614b30576040517f150b7a0200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85169063150b7a02906149bf9033908990889088906004016159df565b6020604051808303816000875af1925050508015614a18575060408051601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0168201909252614a1591810190615a28565b60015b614ae5573d808015614a46576040519150601f19603f3d011682016040523d82523d6000602084013e614a4b565b606091505b508051600003614add576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152603260248201527f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560448201527f63656976657220696d706c656d656e74657200000000000000000000000000006064820152608401610f99565b805181602001fd5b7fffffffff00000000000000000000000000000000000000000000000000000000167f150b7a0200000000000000000000000000000000000000000000000000000000149050613497565b506001949350505050565b600054610100900460ff16614bd2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b6065614bde8382615a8b565b5060666110618282615a8b565b600054610100900460ff16614c82576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b611f8f33613d7b565b600054610100900460ff16614d22576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152608401610f99565b61012d80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00169055565b6000807a184f03e93ff9f4daa797ed6e38ed64bf6a1f0100000000000000008310614d96577a184f03e93ff9f4daa797ed6e38ed64bf6a1f010000000000000000830492506040015b6d04ee2d6d415b85acef81000000008310614dc2576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310614de057662386f26fc10000830492506010015b6305f5e1008310614df8576305f5e100830492506008015b6127108310614e0c57612710830492506004015b60648310614e1e576064830492506002015b600a8310610d945760010192915050565b60006001614e3c846122fe565b614e469190615933565b600083815260986020526040902054909150808214614ea65773ffffffffffffffffffffffffffffffffffffffff841660009081526097602090815260408083208584528252808320548484528184208190558352609890915290208190555b50600091825260986020908152604080842084905573ffffffffffffffffffffffffffffffffffffffff9094168352609781528383209183525290812055565b609954600090614ef890600190615933565b6000838152609a602052604081205460998054939450909284908110614f2057614f20615801565b906000526020600020015490508060998381548110614f4157614f41615801565b6000918252602080832090910192909255828152609a90915260408082208490558582528120556099805480614f7957614f79615ba5565b6001900381819060005260206000200160009055905550505050565b6000614fa0836122fe565b73ffffffffffffffffffffffffffffffffffffffff9093166000908152609760209081526040808320868452825280832085905593825260989052919091209190915550565b614fef81614735565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b606073ffffffffffffffffffffffffffffffffffffffff83163b6150d9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e747261637400000000000000000000000000000000000000000000000000006064820152608401610f99565b6000808473ffffffffffffffffffffffffffffffffffffffff16846040516151019190615bd4565b600060405180830381855af49150503d806000811461513c576040519150601f19603f3d011682016040523d82523d6000602084013e615141565b606091505b50915091506151698282604051806060016040528060278152602001615bf160279139615172565b95945050505050565b606083156151815750816125ee565b6125ee83838151156151965781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f999190615355565b7fffffffff0000000000000000000000000000000000000000000000000000000081168114611bc157600080fd5b60006020828403121561520a57600080fd5b81356125ee816151ca565b60008083601f84011261522757600080fd5b50813567ffffffffffffffff81111561523f57600080fd5b6020830191508360208260051b850101111561525a57600080fd5b9250929050565b6000806020838503121561527457600080fd5b823567ffffffffffffffff81111561528b57600080fd5b61529785828601615215565b90969095509350505050565b803573ffffffffffffffffffffffffffffffffffffffff811681146152c757600080fd5b919050565b6000602082840312156152de57600080fd5b6125ee826152a3565b60005b838110156153025781810151838201526020016152ea565b50506000910152565b600081518084526153238160208601602086016152e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006125ee602083018461530b565b60006020828403121561537a57600080fd5b5035919050565b6000806040838503121561539457600080fd5b61539d836152a3565b946020939093013593505050565b600080600080608085870312156153c157600080fd5b6153ca856152a3565b966020860135965060408601359560600135945092505050565b6000806000606084860312156153f957600080fd5b615402846152a3565b9250615410602085016152a3565b9150604084013590509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600082601f83011261546057600080fd5b813567ffffffffffffffff8082111561547b5761547b615420565b604051601f83017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f011681019082821181831017156154c1576154c1615420565b816040528381528660208588010111156154da57600080fd5b836020870160208301376000602085830101528094505050505092915050565b6000806040838503121561550d57600080fd5b615516836152a3565b9150602083013567ffffffffffffffff81111561553257600080fd5b61553e8582860161544f565b9150509250929050565b6000806000806060858703121561555e57600080fd5b615567856152a3565b9350615575602086016152a3565b9250604085013567ffffffffffffffff81111561559157600080fd5b61559d87828801615215565b95989497509550505050565b6000806000606084860312156155be57600080fd5b6155c7846152a3565b95602085013595506040909401359392505050565b602080825282518282018190526000919060409081850190868401855b8281101561562857815180518552868101518786015285015185850152606090930192908501906001016155f9565b5091979650505050505050565b8015158114611bc157600080fd5b6000806040838503121561565657600080fd5b61565f836152a3565b9150602083013561566f81615635565b809150509250929050565b6000806000806080858703121561569057600080fd5b615699856152a3565b93506156a7602086016152a3565b925060408501359150606085013567ffffffffffffffff8111156156ca57600080fd5b6156d68782880161544f565b91505092959194509250565b60008082840360a08112156156f657600080fd5b6156ff846152a3565b925060807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08201121561573157600080fd5b506040516080810181811067ffffffffffffffff8211171561575557615755615420565b806040525060208401358152604084013560208201526060840135604082015260808401356060820152809150509250929050565b6000806040838503121561579d57600080fd5b6157a6836152a3565b91506157b4602084016152a3565b90509250929050565b6020808252825182820181905260009190848201906040850190845b818110156157f5578351835292840192918401916001016157d9565b50909695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b80820180821115610d9457610d94615830565b600181811c9082168061588657607f821691505b6020821081036158bf577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b6000602082840312156158d757600080fd5b5051919050565b6000602082840312156158f057600080fd5b81516125ee81615635565b60007fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361592c5761592c615830565b5060010190565b81810381811115610d9457610d94615830565b60008261597c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b500490565b600083516159938184602088016152e7565b8351908301906159a78183602088016152e7565b01949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052600160045260246000fd5b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152615a1e608083018461530b565b9695505050505050565b600060208284031215615a3a57600080fd5b81516125ee816151ca565b601f82111561106157600081815260208120601f850160051c81016020861015615a6c5750805b601f850160051c820191505b8181101561131b57828155600101615a78565b815167ffffffffffffffff811115615aa557615aa5615420565b615ab981615ab38454615872565b84615a45565b602080601f831160018114615b0c5760008415615ad65750858301515b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600386901b1c1916600185901b17855561131b565b6000858152602081207fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08616915b82811015615b5957888601518255948401946001909101908401615b3a565b5085821015615b9557878501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600388901b60f8161c191681555b5050505050600190811b01905550565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b60008251615be68184602087016152e7565b919091019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212200b48abdc663c736567aa4e1f98e48008d123b0ff46d012c2c87e82bd6490a31864736f6c63430008130033000000000000000000000000920cf626a271321c151d027030d5d08af699456b000000000000000000000000b176dad2916db0905cd2d65ed54fdc3a878affe4", + "nonce": "0x1", + "chainId": "0xa" + }, + "additionalContracts": [], + "isFixedGasLimit": false + } + ], + "receipts": [ + { + "status": "0x1", + "cumulativeGasUsed": "0x8f621a", + "logs": [ + { + "address": "0x7bf712e355a5affcd026d0e65ef57bcd0a7b9986", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "blockHash": "0x884efbe8ff4756315d2aa58028df1e212b1f8f9ea0fa76bccebc8aecfc4258d0", + "blockNumber": "0x7a4bd12", + "transactionHash": "0x208a7f9a4260e1154509bb39c1fdc3b716c10f0b6b281857a244dc0036c7ec67", + "transactionIndex": "0xf", + "logIndex": "0x2c", + "removed": false + } + ], + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000", + "type": "0x2", + "transactionHash": "0x208a7f9a4260e1154509bb39c1fdc3b716c10f0b6b281857a244dc0036c7ec67", + "transactionIndex": "0xf", + "blockHash": "0x884efbe8ff4756315d2aa58028df1e212b1f8f9ea0fa76bccebc8aecfc4258d0", + "blockNumber": "0x7a4bd12", + "gasUsed": "0x4e7b6c", + "effectiveGasPrice": "0x1a263", + "from": "0x1dd9a4d1a114934cd2754b4a9c1bb7f3dfb9620b", + "to": null, + "contractAddress": "0x7bf712e355a5affcd026d0e65ef57bcd0a7b9986", + "l1BaseFeeScalar": "0x146b", + "l1BlobBaseFee": "0x36220ebf0", + "l1BlobBaseFeeScalar": "0xf79c5", + "l1Fee": "0x8916a9b23d3b", + "l1GasPrice": "0x2be7ade6f", + "l1GasUsed": "0x25725" + } + ], + "libraries": [], + "pending": [], + "returns": {}, + "timestamp": 1732072435, + "chain": 10, + "commit": "59f4b5a" +} \ No newline at end of file diff --git a/scripts/Upgrade.s.sol b/scripts/Upgrade.s.sol index bad4a6264..0bcfbcbd3 100644 --- a/scripts/Upgrade.s.sol +++ b/scripts/Upgrade.s.sol @@ -42,7 +42,7 @@ contract UpgradeStakingRewardsV2 is Script, OptimismParameters { StakingRewardsV2 stakingRewardsV2Implementation = new StakingRewardsV2( KWENTA_TOKEN, USDC_TOKEN, - REWARD_ESCROW_V2, + REWARD_ESCROW_V2_PROXY, STAKING_REWARDS_NOTIFIER );