From 7fa850e720ae41d03dd3df3066c2495bee2b1fa5 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Thu, 6 Jun 2024 16:15:10 +1000 Subject: [PATCH 01/12] Changed registerSsvValidator to registerSsvValidators so it can register multiple validators --- .../contracts/interfaces/ISSVNetwork.sol | 19 ++++++ contracts/contracts/mocks/MockSSVNetwork.sol | 8 +++ .../NativeStaking/ValidatorRegistrator.sol | 38 ++++++------ .../docs/NativeStakingSSVStrategySquashed.svg | 2 +- contracts/tasks/validator.js | 6 +- contracts/test/behaviour/ssvStrategy.js | 59 +++++++++---------- contracts/test/strategies/nativeSSVStaking.js | 10 ++-- 7 files changed, 86 insertions(+), 56 deletions(-) diff --git a/contracts/contracts/interfaces/ISSVNetwork.sol b/contracts/contracts/interfaces/ISSVNetwork.sol index f069138177..78e49a5ad3 100644 --- a/contracts/contracts/interfaces/ISSVNetwork.sol +++ b/contracts/contracts/interfaces/ISSVNetwork.sol @@ -168,6 +168,11 @@ interface ISSVNetwork { function exitValidator(bytes memory publicKey, uint64[] memory operatorIds) external; + function bulkExitValidator( + bytes[] calldata publicKeys, + uint64[] calldata operatorIds + ) external; + function getVersion() external pure returns (string memory version); function initialize( @@ -216,6 +221,14 @@ interface ISSVNetwork { Cluster memory cluster ) external; + function bulkRegisterValidator( + bytes[] calldata publicKeys, + uint64[] calldata operatorIds, + bytes[] calldata sharesData, + uint256 amount, + Cluster memory cluster + ) external; + function removeOperator(uint64 operatorId) external; function removeValidator( @@ -224,6 +237,12 @@ interface ISSVNetwork { Cluster memory cluster ) external; + function bulkRemoveValidator( + bytes[] calldata publicKeys, + uint64[] calldata operatorIds, + Cluster memory cluster + ) external; + function renounceOwnership() external; function setFeeRecipientAddress(address recipientAddress) external; diff --git a/contracts/contracts/mocks/MockSSVNetwork.sol b/contracts/contracts/mocks/MockSSVNetwork.sol index 38b36e3e5f..4eb096aca3 100644 --- a/contracts/contracts/mocks/MockSSVNetwork.sol +++ b/contracts/contracts/mocks/MockSSVNetwork.sol @@ -12,6 +12,14 @@ contract MockSSVNetwork { Cluster memory cluster ) external {} + function bulkRegisterValidator( + bytes[] calldata publicKeys, + uint64[] calldata operatorIds, + bytes[] calldata sharesData, + uint256 amount, + Cluster memory cluster + ) external {} + function exitValidator( bytes calldata publicKey, uint64[] calldata operatorIds diff --git a/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol b/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol index 2c8f0c8670..176f44c199 100644 --- a/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol +++ b/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol @@ -224,36 +224,40 @@ abstract contract ValidatorRegistrator is Governable, Pausable { /// @notice Registers a new validator in the SSV Cluster. /// Only the registrator can call this function. - /// @param publicKey The public key of the validator + /// @param publicKeys The public keys of the validators /// @param operatorIds The operator IDs of the SSV Cluster - /// @param sharesData The validator shares data + /// @param sharesData The shares data for each validator /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster /// @param cluster The SSV cluster details including the validator count and SSV balance // slither-disable-start reentrancy-no-eth - function registerSsvValidator( - bytes calldata publicKey, + function registerSsvValidators( + bytes[] calldata publicKeys, uint64[] calldata operatorIds, - bytes calldata sharesData, + bytes[] calldata sharesData, uint256 ssvAmount, Cluster calldata cluster ) external onlyRegistrator whenNotPaused { - bytes32 pubKeyHash = keccak256(publicKey); - VALIDATOR_STATE currentState = validatorsStates[pubKeyHash]; - require( - currentState == VALIDATOR_STATE.NON_REGISTERED, - "Validator already registered" - ); - ISSVNetwork(SSV_NETWORK).registerValidator( - publicKey, + // Check each public key has not already been used + for (uint256 i = 0; i < publicKeys.length; ++i) { + bytes32 pubKeyHash = keccak256(publicKeys[i]); + VALIDATOR_STATE currentState = validatorsStates[pubKeyHash]; + require( + currentState == VALIDATOR_STATE.NON_REGISTERED, + "Validator already registered" + ); + + validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED; + + emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds); + } + + ISSVNetwork(SSV_NETWORK).bulkRegisterValidator( + publicKeys, operatorIds, sharesData, ssvAmount, cluster ); - - validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED; - - emit SSVValidatorRegistered(pubKeyHash, publicKey, operatorIds); } // slither-disable-end reentrancy-no-eth diff --git a/contracts/docs/NativeStakingSSVStrategySquashed.svg b/contracts/docs/NativeStakingSSVStrategySquashed.svg index 0913f2ed0e..155519cece 100644 --- a/contracts/docs/NativeStakingSSVStrategySquashed.svg +++ b/contracts/docs/NativeStakingSSVStrategySquashed.svg @@ -92,7 +92,7 @@    setStakeETHThreshold(_amount: uint256) <<onlyGovernor>> <<ValidatorRegistrator>>    resetStakeETHTally() <<onlyStakingMonitor>> <<ValidatorRegistrator>>    stakeEth(validators: ValidatorStakeData[]) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> -    registerSsvValidator(publicKey: bytes, operatorIds: uint64[], sharesData: bytes, ssvAmount: uint256, cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>> +    registerSsvValidators(publicKeys: bytes[], operatorIds: uint64[], sharesData: bytes[], ssvAmount: uint256, cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>>    exitSsvValidator(publicKey: bytes, operatorIds: uint64[]) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>>    removeSsvValidator(publicKey: bytes, operatorIds: uint64[], cluster: Cluster) <<onlyRegistrator, whenNotPaused>> <<ValidatorRegistrator>>    depositSSV(operatorIds: uint64[], ssvAmount: uint256, cluster: Cluster) <<onlyStrategist>> <<ValidatorRegistrator>> diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index b00d58e79f..9653ed470d 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -635,10 +635,10 @@ const broadcastRegisterValidator = async ( try { const tx = await nativeStakingStrategy .connect(signer) - .registerSsvValidator( - publicKey, + .registerSsvValidators( + [publicKey], operatorIds, - sharesData, + [sharesData], amount, cluster ); diff --git a/contracts/test/behaviour/ssvStrategy.js b/contracts/test/behaviour/ssvStrategy.js index b4205aef61..b02d22eb65 100644 --- a/contracts/test/behaviour/ssvStrategy.js +++ b/contracts/test/behaviour/ssvStrategy.js @@ -137,6 +137,7 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { }); describe("Validator operations", function () { + const stakeAmount = oethUnits("32"); const depositToStrategy = async (amount) => { const { weth, domen, nativeStakingSSVStrategy, oethVault, strategist } = await context(); @@ -181,8 +182,6 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { hre ); - const stakeAmount = oethUnits("32"); - expect( await nativeStakingSSVStrategy.validatorsStates( keccak256(testValidator.publicKey) @@ -190,13 +189,14 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { ).to.equal(0, "Validator state not 0 (NON_REGISTERED)"); // Register a new validator with the SSV Network + const ssvAmount = oethUnits("2"); const regTx = await nativeStakingSSVStrategy .connect(validatorRegistrator) - .registerSsvValidator( - testValidator.publicKey, + .registerSsvValidators( + [testValidator.publicKey], testValidator.operatorIds, - testValidator.sharesData, - stakeAmount, + [testValidator.sharesData], + ssvAmount, cluster ); await expect(regTx) @@ -255,13 +255,12 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { const { addresses, ssv, + ssvNetwork, nativeStakingSSVStrategy, validatorRegistrator, testValidator, } = await context(); - const stakeAmount = oethUnits("32"); - await depositToStrategy(stakeAmount); await setERC20TokenBalance( @@ -279,33 +278,33 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { }); // Register a new validator the first time - await nativeStakingSSVStrategy + const ssvAmount = oethUnits("3"); + const tx = await nativeStakingSSVStrategy .connect(validatorRegistrator) - .registerSsvValidator( - testValidator.publicKey, + .registerSsvValidators( + [testValidator.publicKey], testValidator.operatorIds, - testValidator.sharesData, - stakeAmount, + [testValidator.sharesData], + ssvAmount, cluster ); - const emptyCluster = { - validatorCount: 0, - networkFeeIndex: 0, - index: 0, - active: true, - balance: 0, - }; + const receipt = await tx.wait(); + console.log(receipt.events); + const { chainId } = await ethers.provider.getNetwork(); + const validatorAddedEvent = ssvNetwork.interface.parseLog( + receipt.events[chainId === 1 ? 3 : 2] + ); // Try to register the same validator again in a different cluster const tx2 = nativeStakingSSVStrategy .connect(validatorRegistrator) - .registerSsvValidator( - testValidator.publicKey, + .registerSsvValidators( + [testValidator.publicKey], [1, 20, 300, 4000], - testValidator.sharesData, - stakeAmount, - emptyCluster + [testValidator.sharesData], + ssvAmount, + validatorAddedEvent.args.cluster ); await expect(tx2).to.be.revertedWith("Validator already registered"); @@ -361,7 +360,6 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { ssvNetwork: addresses.SSVNetwork, }); - const stakeAmount = oethUnits("32"); await setERC20TokenBalance( nativeStakingSSVStrategy.address, ssv, @@ -370,13 +368,14 @@ const shouldBehaveLikeAnSsvStrategy = (context) => { ); // Register a new validator with the SSV network + const ssvAmount = oethUnits("4"); const regTx = await nativeStakingSSVStrategy .connect(validatorRegistrator) - .registerSsvValidator( - testValidator.publicKey, + .registerSsvValidators( + [testValidator.publicKey], testValidator.operatorIds, - testValidator.sharesData, - stakeAmount, + [testValidator.sharesData], + ssvAmount, cluster ); const regReceipt = await regTx.wait(); diff --git a/contracts/test/strategies/nativeSSVStaking.js b/contracts/test/strategies/nativeSSVStaking.js index ee580df1ef..ef1a1b7228 100644 --- a/contracts/test/strategies/nativeSSVStaking.js +++ b/contracts/test/strategies/nativeSSVStaking.js @@ -1087,15 +1087,15 @@ describe("Unit test: Native SSV Staking Strategy", function () { ) ).to.equal(0, "Validator state not 0 (NON_REGISTERED)"); - const stakeAmount = ethUnits("32"); + const ssvAmount = ethUnits("2"); // Register a new validator with the SSV Network const regTx = await nativeStakingSSVStrategy .connect(validatorRegistrator) - .registerSsvValidator( - testPublicKeys[i], + .registerSsvValidators( + [testPublicKeys[i]], testValidator.operatorIds, - testValidator.sharesData, - stakeAmount, + [testValidator.sharesData], + ssvAmount, emptyCluster ); From e2b8707a3919b9e2fb6e14ca417cd681a973e04d Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Thu, 6 Jun 2024 17:39:47 +1000 Subject: [PATCH 02/12] Added length check on publicKeys and sharesData in registerSsvValidators Added test to bulk register validators --- .../NativeStaking/ValidatorRegistrator.sol | 10 ++- contracts/test/strategies/nativeSSVStaking.js | 80 +++++++++++++++++-- 2 files changed, 81 insertions(+), 9 deletions(-) diff --git a/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol b/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol index 176f44c199..cb02565491 100644 --- a/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol +++ b/contracts/contracts/strategies/NativeStaking/ValidatorRegistrator.sol @@ -237,10 +237,16 @@ abstract contract ValidatorRegistrator is Governable, Pausable { uint256 ssvAmount, Cluster calldata cluster ) external onlyRegistrator whenNotPaused { + require( + publicKeys.length == sharesData.length, + "Pubkey sharesData mismatch" + ); // Check each public key has not already been used + bytes32 pubKeyHash; + VALIDATOR_STATE currentState; for (uint256 i = 0; i < publicKeys.length; ++i) { - bytes32 pubKeyHash = keccak256(publicKeys[i]); - VALIDATOR_STATE currentState = validatorsStates[pubKeyHash]; + pubKeyHash = keccak256(publicKeys[i]); + currentState = validatorsStates[pubKeyHash]; require( currentState == VALIDATOR_STATE.NON_REGISTERED, "Validator already registered" diff --git a/contracts/test/strategies/nativeSSVStaking.js b/contracts/test/strategies/nativeSSVStaking.js index ef1a1b7228..236f2f276c 100644 --- a/contracts/test/strategies/nativeSSVStaking.js +++ b/contracts/test/strategies/nativeSSVStaking.js @@ -1071,7 +1071,7 @@ describe("Unit test: Native SSV Staking Strategy", function () { .setStakeETHThreshold(stakeThreshold); }); - const stakeValidator = async ( + const stakeValidatorsSingle = async ( validators, stakeTresholdErrorTriggered, startingIndex = 0 @@ -1148,16 +1148,82 @@ describe("Unit test: Native SSV Staking Strategy", function () { } }; + const stakeValidatorsBulk = async ( + validators, + stakeTresholdErrorTriggered, + startingIndex = 0 + ) => { + const { nativeStakingSSVStrategy, validatorRegistrator } = fixture; + + const publicKeys = testPublicKeys.slice(startingIndex, validators); + const sharesData = new Array(validators) + .fill() + .map(() => testValidator.sharesData); + const ssvAmount = ethUnits("2"); + + // Register a new validator with the SSV Network + const regTx = await nativeStakingSSVStrategy + .connect(validatorRegistrator) + .registerSsvValidators( + publicKeys, + testValidator.operatorIds, + sharesData, + ssvAmount, + emptyCluster + ); + + for (const pubKey of publicKeys) { + await expect(regTx) + .to.emit(nativeStakingSSVStrategy, "SSVValidatorRegistered") + .withArgs(keccak256(pubKey), pubKey, testValidator.operatorIds); + + expect( + await nativeStakingSSVStrategy.validatorsStates(keccak256(pubKey)) + ).to.equal(1, "Validator state not 1 (REGISTERED)"); + } + // Stake ETH to the new validator + const stakeValidators = publicKeys.map((pubKey) => ({ + pubkey: pubKey, + signature: testValidator.signature, + depositDataRoot: testValidator.depositDataRoot, + })); + const stakeTx = nativeStakingSSVStrategy + .connect(validatorRegistrator) + .stakeEth(stakeValidators); + + if (stakeTresholdErrorTriggered) { + await expect(stakeTx).to.be.revertedWith("Staking ETH over threshold"); + } else { + await stakeTx; + + for (const pubKey of publicKeys) { + await expect(stakeTx) + .to.emit(nativeStakingSSVStrategy, "ETHStaked") + .withArgs(keccak256(pubKey), pubKey, parseEther("32")); + expect( + await nativeStakingSSVStrategy.validatorsStates(keccak256(pubKey)) + ).to.equal(2, "Validator state not 2 (STAKED)"); + } + } + }; + it("Should stake to a validator", async () => { - await stakeValidator(1, false); + await stakeValidatorsSingle(1, false); }); it("Should stake to 2 validators", async () => { - await stakeValidator(2, false); + await stakeValidatorsSingle(2, false); }); it("Should not stake to 3 validators as stake threshold is triggered", async () => { - await stakeValidator(3, true); + await stakeValidatorsSingle(3, true); + }); + + it("Should register and stake 2 validators together", async () => { + await stakeValidatorsBulk(2, false); + }); + it("Should register 3 but not stake 3 validators together", async () => { + await stakeValidatorsBulk(3, true); }); it("Fail to stake a validator that hasn't been registered", async () => { @@ -1184,11 +1250,11 @@ describe("Unit test: Native SSV Staking Strategy", function () { await nativeStakingSSVStrategy.connect(anna).resetStakeETHTally(); }; - await stakeValidator(2, false, 0); + await stakeValidatorsSingle(2, false, 0); await resetThreshold(); - await stakeValidator(2, false, 2); + await stakeValidatorsSingle(2, false, 2); await resetThreshold(); - await stakeValidator(2, false, 4); + await stakeValidatorsSingle(2, false, 4); await resetThreshold(); }); From a6ffc8d27d0401990bd555a394624771afaf65b0 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Thu, 6 Jun 2024 20:04:22 +1000 Subject: [PATCH 03/12] Updated process diagrams --- .../docs/plantuml/oethProcesses-admin.png | Bin 0 -> 49661 bytes .../docs/plantuml/oethProcesses-pause.png | Bin 28166 -> 0 bytes .../docs/plantuml/oethProcesses-register.png | Bin 159704 -> 171169 bytes .../docs/plantuml/oethProcesses-rewards.png | Bin 0 -> 123915 bytes .../docs/plantuml/oethProcesses-withdraw.png | Bin 0 -> 109705 bytes contracts/docs/plantuml/oethProcesses.png | Bin 454018 -> 454529 bytes contracts/docs/plantuml/oethProcesses.puml | 8 ++++---- 7 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 contracts/docs/plantuml/oethProcesses-admin.png delete mode 100644 contracts/docs/plantuml/oethProcesses-pause.png create mode 100644 contracts/docs/plantuml/oethProcesses-rewards.png create mode 100644 contracts/docs/plantuml/oethProcesses-withdraw.png diff --git a/contracts/docs/plantuml/oethProcesses-admin.png b/contracts/docs/plantuml/oethProcesses-admin.png new file mode 100644 index 0000000000000000000000000000000000000000..8a690b5d5c024b995148662f3c0b143b377210ab GIT binary patch literal 49661 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 XDr~d1rc2=m*+>*+)$V_kHh=j)8zaHv diff --git a/contracts/docs/plantuml/oethProcesses-register.png b/contracts/docs/plantuml/oethProcesses-register.png index 03ac1f8f611aa6d81472e8bbd0595b751906c2c9..e55e65c68f3f29db7bb26393f0357ed2b9c7c910 100644 GIT binary patch literal 171169 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̂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 z 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
;hVa?MkrX$ansq$8N zZ8LaEcPiHQ5juhQJ)^Y{NHf+~DWFUVO&_~=@a9z&1uE(Hrxz%KZm&R-iopQ*&EdwR zs6!$o>~kZY30+a~I(rx}OFN9X{U-ay4HLP#h0(mEXmZDS1y>U28N1ed?0nnpk9s&U1Nzqp z$HnOQnm;qwc&MmNU*Y?9t``AyF~{1hY-^UCvP${T1x+XkA)JuOO+`!USdePLz2U{x z;SZ3>u+aS@yh_t;y#Kk<6BcIo8q`SU4oYC$+E3lYFSoiG$wJ=l3Yakup zUXv9X&?*vSXS=ps)1>rV3V@C(*%#06mX+-MXwg1R`MSC>h>`eC6y=M9{mQ@YeFVrL z&iKWPV^=J69xkd(wi?b4g|Chnu0lI4X%xhvQ})1ow(mAnwhGicl|sl>fAopL+r*nR zWv3UM{LUI&ab52M^igDCtEp&BgYy`_@cKhhX>8%<@LFra*;;i5`h?&{zu8sgW&6>F zI>6b;m>u8z)IH<|qCk-vf}^)aVjSWF_=ryx#hCNM|Jy9dJ;|aHG7n0eoOj2asHx5t^sr1$tH6zed=?q0QKi9K&?^ z1fm!xXM2Fc1Fd^tsVHlJrUAv$e@brUQZl{3egta_%ke>k3W5ImRM6dJIY+_mPTo#K z;5Rhq9;2QWEf6*!$-4c{ECN3(&}stSl$91a>8%6;(mVE<1wMkuiUXB5zYzOUij9{% zzD(3g;+u{(fxBLP*yI~mTyMl*1VAHB zc6(dr=f3`4e11)qm3y3yXN`lB$wTJBADwm721tQDQECZIK>+st60B$ux)N1_(d#nE9SSHm8-sD^ik-%aF z$*n^?xA=H%?u1j1goB=dfr&=2R7l6`sVzMp_ko@G8ZwZDIjx0`o@YFjss@rCkcIu2 zf`!}HA9el4jRKRwODKL5lH7bkt5TG?T6yS2MwYuIwAb?o0AmPJ@SS2WNgw}0@K$-# z@GIL5W%?8{i_a7&bNS$4!zF*+oSd?ADYXqhKYUJ;XqcMGAP+xS<&LM_#`|5~dmd_h z5&6gbW8B>`VMbG%l{>KqK#(YVaqk#TNfFkblWOg^C*0p7{0vz1+V&UM&)>sf)Hi8= zyuUK;n`mHE)vQy0&9ZJ-XOi&Zyi%uz7|%KO;fllG5zJvIVg8fv(Q$6&b7+XO25Pv* zLAQc4Zhy^`*~0O!_?NDCJg_x?6f!H%&fN&-++8|fn|oI54I~Fd1XRnMGFDaNUy?$# z5@C@JeGEV?Z3hDZ6Of|T0qx6YcH2<*r3-I~mOx^?Msj&ZByB{9yHg(bAH zO^9BBcAU1{zz}A5e#)uKw~FW)A6s_!_Ht@p7m>$G?d~UetX#AUs=Y1ucpx}YYHJ${yLJLd?J zmI1w91M4Kl{oU8to33wpF%2e5b<(4{#sgjS<;x#dzPPQrSba()WL0E6zoPj~#_m2q@LOMm6bXvDAqP$4(9~HIBe99h;)3$g#^W-D`%sI)% zO>yZzStNcb(|fw`ss-S9Jn`_bFgFJ-BCw2Z`-?M9@3#PA$yKm8W?^9w5-JB7k?*ov z4)8dE3JHWr5d4YU5fwe4)6?5)*biTsz03zT_yJb98h1JoL4AgY1(zH4@E z@dtQt>swgN?AdU;iJU~H=gEzJt7i>}pE(T`ZdjEyJrjDa*(?hFWX5ocx4Daf&&ZKA z@|`9Q_bE_6LhV+)Kzmp-kj{X+&UD*cU7d+z!*H`+6ThDiaqX4ga9f<>|E_q^d&85tVR@un()6zvVi# zZlK)rA#l>#YaeAKMB}opNHX}Z&Zlh7CiN=hW5%OdFt|pWO;1! z8LpVt;wqkLCs)RYC+9RYI&Ow>X}=D%N~)5)rOQAH?HL)my#84t7YdX&SFtiC!opF; zF|JP4KG)>bGwP^N+=Q}r8OkscK}C-?8Yl3K`0Q8AL8_eb@p14G=*rK(+$HJeR+a)T zJe1`k0YpGOGjENr1~LdlxsK22^7D8EQs+N@3%(9u!3^{LOlVOI`oR?sXe{mRN>tDy zYd<}{wz>)yc~jup0RQ*a9cTi8Oe*HwB@Lvxq?w_RLr0H#7y#{t?!|!sFcF|4`jR5g zn70-``cD?bqqHzw+ctL{G`xr2%dx>I0bE@!g>>~I{c!lBvW@M?P4$^0TBE*PS)hlJ z_;74}ZR86FVQp4#F-Z=48cmef|B7=g* zUu7!gTMc}xufGS4D{u?>o)TLo^oj?AVAR+6(Q~i~mysbk#2USC2nf3=X9Zn~!P5r3 z?M(*Y3;|U{a$+JsSW}v0v7+H8Y;SMV_+wk51%NPQ@+vy|#X2y|!N((bj}Wj&+Xt3~ zLIQ>v2<81B9FmU#2^$zS#>U3JPCz}n%?@w%G(ZbLVTX(-C%7_xQukk3r3b<_1yNgu zCVcSU0!em=)u_f$LSSIAf3XQ+@4c>UhC*5}w73gm%9X=yZEa7UY`<`Q)H@x=?V~5PrM~M3KX}OPEg-lii>-t z5Q8WTa0woxgmH$87p0xv0bKRy5dl^S)z3U7qPqMk8UQKc-CCS0qR zv9z282h}w(lS9Bf<5(lm;(k;NMK3@ZR-7&v6EXayQc07*0tn)< zdkwvpJ^r8f7IVMsSI~7_vl;t%6>ws3E%^c_GPm1}vDo7vMHnRaAUalZfAC2P zYz1RIy;$JM0d@kk>cqR09BPj|pFckY$y@-t0aFJ+OitWBF)=aFV1Fi^KVep2H9(&Z zfpfFHMY1`>{Z}5~_RY}837S_s^;>}T4=hW`^2-fRgWsJ3MjFD|WMqt00wX~21+W?spJkD=le;fu^!*SpidV7O4%#$Roa<>nFn7;n# z35vit0X38U5?&|a51>xjgF}Jm3`}<}yC;G<_h81kzJ<4ZxdvRWf%1zSiwsUe$U%C6|3|4l2zF6dsssk5Il z?*lC_ZLBKrB*7k^Zjt3a#U=yXJ|7&|`mtVC%+~Iz3JNDm4E5K)=HOjW>fN%`Z$L@jMO_zrO zt?fopxmvc~x$a-eId&+lr-%JGNfuL1NJhBpVc*wH_1 zF_lJxMUndW)?Yb)@X+Vz08Ed};(Bq7RBud$KhY2X_uo&pwIF3OEUi zl|0XffC=!l5EwUO6hJeU@%`*~pKG->@~KqmrpsuBLTR7XO}B{a|FFwa{E8w37#`AB z;Gls6A@0mAY?Te;U*|Zyk%@_kPa?2K?n2T9aQhRNfDR0dZIkb_voG#K-ev0vYIjhF z$iwjE&bXYoI1vqaGX(%!Q5EY&dUkejFep5nMZFeg0myvEtYu!MU?O?d{Mv}DXRbgWQR~ z2Mw`!B@#pr$oNYG(eSYJE?40Luv;2=se zSC2epJ|%((G=Hn)Lde(X3`+fP_EpwA4Ze1r5L0sD!iDcvhTyII&0+Z1p3Ddya>P6Q zTbS6u9Vqi?S9KK9O?LL|zz8{5)Po5&li)##zm#c;q12zA27_`A9{_AquI&mlW`vNB8f4|f;& zvU#_DA88&pH@8pvL?l$PttK$YMMSQDYbgAJ-1<$mefGgqUtU;^&mF1QPfuwxL2+W8K!Btg_>`UwYcSpkXL;XamFUjIip4Q*rsX8{^k&5?f{9Brh z(7e0v;~)hNVgJJgT3+rBGlOdT`>+r}-Rd*A`)KzF*``=zd7u=NuHFKzBYe;5%1Xv_ z=RP(y`3qL=F1)|>r!peg18tr(%~)98upmVn06GchQef zLZa4Yz2f~v_>u@dhK(5@_HB^iv!as^{;RBqhYNzSvg z@&;Aa+mO{Fr|_td19@-`BUX-oiJa~zU;``q%H7?8>HufG8Fb9>C$Y@WrH(c_IEF+Y zA-_^oW*h8tyq=v`BsRbv@@_&AYYhzD-wJSZ6 z8UcAF%#PMUwu&=5VepMAWB14u`u)C<1Le06YwrNsd$>s5wW}ZAUGcVmiK?#cBl!LM zWi$WYo2kp)dWRXr7xYKK>hhV_t{NIjrrkpgjs>4JZHQ-4)9I1iyjU zZYCKt_7uopRJoMG8iN>alG%7Dq5(mQ!&6z@RB~S{(5qfNTDCfL6gd=jOG-KHuFED2 z3@(nWBNFjlYYF%@l-bd&)t$x-GstfRM*-|Xu;44eD?M*PL@UqVxl;Z83<6PxCs2xR zzklWi_XAVx-iPpuORd9iW!Yp6@M*uqjLF8ZO}XqEonXAwkG^F1{T`2n;+AMB!AS6N zE-)vpV!mzt42WMaTJ9b0JpX=sxZEBr#};z|e{8fm+IHwPSG3nCP`Q*1*@#}~@}yy+ z5o5>SPq=FL+4;rAp@t{A--;bwsqk>VVj_3edmi`%6uXn5*t4VINBlllR$AaAKEsS4 z>his(+rZ|4#}k{25f|K^_I)N#5{^R+Sc$_Xg)vV7H}%loV$25NirwT(HHTFRd2nhw zetaph=;=!k1+b^-Jw^QSIChpdUSG3e);|eWSoOV1)0B47VA{eg3&v0#J`_QR-WsTX zz*aokM+nvhawm81_fMn=L5(Cazj!qqOb{Io4~GXn_NnKw?EJTj8y=tjCK!V`AF!)@ z?VpiMynpbu6y|XVTyOScr5U#szwJT#Wn<}RVL<_8OhM2?_64*_`IzUy$tg%Re5KY2 z^y12&%N^sU-dfnFwlItO0_^;Gg#kIB!*~<`D{F4{+pnd55ZMH5zxH-@ndTu5fuWM? zX8l2V_wyKIfWD!~+9MqYT_+y~pX2Pp!Zg(u`pVuScN?~t6t;eMZ+P>tHjs-RdhJ5I zFay{iR~iAdaY*x#)kmI7y4SAQ&tAAqt5LL^saR|9{bS&Wi1q6mMPQnmP<){+&O_*% z)Ygx0=$-4I3p27Vpi^FD+JiGI;_{ACjXUlqVFqRqLx8zTA4S4PdWUQw?;1b1UcfN*n_=%vv zwnLV0_zRciHKxCI29+-!P&992`M^F#_42?_j@jXcI+-UVde>m^b74im>A*HHbUA?N zUDwe;bTs?WWe1BNPRNYMNZelgS3u4DjgGW|cre(Wy2>Hmh}guT+PzO!iVja*y_>N8 zc~CVkmsEeBCi#+eR@tNQ@JnZ_DYdm;<;>luSW_7pR(;px_m^YuS7tO2pP0`2G&bE} zF#RUe=R@)i);2lKfe40l3G!aWbee;;RI5?D8PxvsJgpAyqSpoI;m&)W5>NE;6H>L)TJIOnhD z2~8L;UNwuOA|jH9Pw|wVfFRzAXB&nF@u4h@m(o;8zvV6o?cB%}^JO-y-PV1uqu`>Y zr}wBkT(6E&N&U{X=1jg0u4y&4hOLzq^WMVhr-w;vtNnwHzMIj<`L1rLntUq_G8)#^ zJ+soM>?k?a(KO1>4${>MzHaEWwmwa>PFpLOq>9lq(F zANeBn#0*HZ2Sj`j?Ea#gHK<|zjj`U7?mL(Jqaua2e?=GI=R-GNHe9i= zEG;#BU1G|t?DkIX=R6B>%TDl|(ppT+S-W?hP zCy?vWhisL-klR0bw-DBj2e7Q)V0vBthXYWC&Hj zL53)SrFc{$iR^k0<=(I4(9ORwowxoqA*-s&=6U7`jwTXR(=_h95zR9Ux4ND8Y3RWFr#O3h>eW(tZ&>gOpWE- zMfmkTo<@F07gE{=KLL@ako}AV@9c(vBT0M^OSk)N_d=lw>+qwHZ$r@McV#z?os$Gf z46pheZsc{4AOapM7M=zC0a8`|&i;k(4*vvs;>h1d{)j}}(0=@X^L>0|Kn$tcR!ZuhL#r4!2%8TbE64isR|zs z#6jZ?>2HwE)b#pBCwm`295Bs*(J{@56S<%tRO|w93BcGiBx3Qd`YL4Ufv?DW;Axrl zt>vBOxv_qDr$f_9TZi#_M~Munr2TxHas`y zK7&a{awF^OJ6t{iXe#A{Cjl8XkC!DIN4Baa7O*CAdivBs6?o}{DO>M{%v6BjROkO3(>Q0kW2K)i|P zkOQ7s{U?OI%;q%rVMQz58(?R!7{AEM$_nY(Fdzfm3KXpZ0@_>v!XlY)H%R$^K5|RD z*gpqQ#)9+czzK9HmwN66c6O=o&(Is7RSk8ZPD*}thee~rHZ`5r@2rrH9hg>>0@%o+ zf8XMB!84UDz%tXFgN45$GGKU~Fnc}CsWD<(1Ed-{0jKuL=MIP7UJL)mem8u$N4Cfs z-5SAX9q(j$siPnUhI@2qEXi#+jR@=fRFPDvs|l_~;`d4xG^Uc^34-BDz0-Lcc$IBY zAi=D3xkwDop)VH1L$8`+P>sjSPzY}RtX#kWEl$UMYYD*Ghnk#RT(a-B z83Xvw$0?k@6si#C_9&{>4&du^qYgVmECousA4191FU7gqxxsu0Fh4MG_5(S5?#}ws z6bNkXAo!LO;wkJ1nbx5xfyEZt6B6iP37M}XF0YWwLf z`2thrS{&KbKB@xq_Er(S*O%V7;TqU&dy&un3}`i`pn@$?DB4oOq$;I0X**=T77mT3 z%H7Qr{%(fKgToRt*&!`8%Y?@2cH4m3Zp~(U=OlRk3&1OYCXq@qhqNht(> zr`-Nk{EWk4nBN>fdQ_3OyFJRPtUFzmOYEbKUcb(ZUN@&eYU#kfWksLy6itGUcoH;n z&j{BC!VYL=eR-vOF~_j>Z2&GQIT?hyBD4B*ypSrWvLn`=_W;xVVrdfAF|br&3R$*r z9@|8a)GW2KwYkZBCsIkR0Lal&R%gE0*Cx6^lmNYvczn{`NLAQ}kkk7PELkPATfO<~ z{7P7Gx22>O`eMyU?`#2nrj(_l{Z%H;Tp~P`;JT~PMJA@|wrU`_a;oQwl82eYsRD-5 z5=~CW-}W|IBd^HDb)=>s2FRzdr31gAtl2sqY2Kl6S`ZxEtfu1Ge~yVvg@}jhUvHmsF2Rb$5ba0yTGxvQ0)9#1eug?eIzF@x7Vv8+j}1+{!uUS#WO!3 z91oJ}Z~r-K^vrNUm0I@wcHjpC(YX&`rQaC@ene9n9-tYl@I@25jkd&>DC~slHW<6D%&NfTQhAW4Hme?;`Tv zGS(k>1KR?oF-*+NlT2*j-2K$?dR-9wTeqo7sn2zOqKn{k4Da2okkfD+ zP6`O`eZFCe-C|+2w;5j?91~M++(K_gm)GcaUNJS#ubRJ6KGF305}fmArr@@T++iQC z1C%_}<^98N6KX90bWWw?PO)>)WFB*}3Hubral>`p7XG85(GwaFGW@xCCb+lQar_6A z5^pi1QY`$PcVnewNg&D_mdVdMxX0;t#KmjC_{qGBXG(X4fB?OFk^Ju$I_^3YVp?qf zLxJOZ8>>d}2uDqzhlTqa{_wky`E!jUCC=}py1%k(_x<1gKFG&3@_OrObm$P<_Jhl*sx{i)=Bf789cZBFq2=KIY1z^yRd_YMuQ%#&tP9nMb`;~XeV=YVPYXHWFVVP?`91d*e5J1@!$qT+a8inQ)*LE(w1{6`H zTmnhr-C|G(K|;z0%F87Q^?B}p|A^YbK%l&87w$aIgOR$`RR@hg}3 z77BQ|0nXePJDZDjp7+M$_#m5JJ{=K7sw(ymq z!bmZFmbL=W`kMhP&(80WE|m72 z8?(j3U~bsit&I_Xjnhtk_m#Tn^w1TPv7gY)&-A@hB){)Wkp?41?ISj)qs>_4l32Vr zb~j;&Bu;+21m;s<+XIE*8hFtaHiRZWd-_yuk%AIF{6*ceQU#;*5tuwHC+o<`#csiL zZt5%4nNg>@@!Tm-B2m;2L68I|uG{`7Ll{#5*1e%4N{5VK!ih_o8nx5aPdz-pIKe^f zX#@=>g=JRtQt*fAM9;4xIY0}6zz*e?C8cX)QQ#J;V9ZbQ)bo-f7)MQdD;5qGqAj_q zJn+!kHsy~kvxA$^4_3p!>V!xBf>>q{J%5Q4AR&;cTQ`fBcu1V z{kI8r^xfCi&J30wW9xPPQ_8TOi!6G>lpu(8Z!dl@s^Pbf4iC3qY`Tif z1)wgYht2}n87XB8&aayr3GH+yp50xCfQ-&m#oCe4%�rZpZ@xuuQwu!5Vh%SNEdM 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 diff --git a/contracts/docs/plantuml/oethProcesses-rewards.png b/contracts/docs/plantuml/oethProcesses-rewards.png new file mode 100644 index 0000000000000000000000000000000000000000..d73b2b73ea53617a85eda0a34accdb23bbed071d GIT binary patch literal 123915 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 S)q4c~lao=t_F2m4$^QpP<{o_j literal 0 HcmV?d00001 diff --git a/contracts/docs/plantuml/oethProcesses-withdraw.png b/contracts/docs/plantuml/oethProcesses-withdraw.png new file mode 100644 index 0000000000000000000000000000000000000000..8e946d90f24256b9f78f4c335f147fa6c70a307e GIT binary patch literal 109705 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
    -nt zfw0if@&q3mAr@|o5{o!3SiN7$?(gUbj)>5dm#5pf(5H~5{8$3Tu9gLAY1K87$7g(h z6)Aib`R62G0B!;Z)JM3-pzDbgcE~a5WeEhWNWaY(8gmskqF`RAhyvaC?c5RwrBp*1 z&VUCZl+ig}W2V3wV2M0&N8W%83~S~-$d-X{0b)Wz=q!d{qEK{7f*2Ng(h`W)YWfZj zaiG-2iTkRm;$mVSX&0|EBDS};si~;u7`|P)@SkzTl=OdfrFnUIz!?U*pMfNb8yE!q zHVZMzcmfKX>$0W}3=q>g!K3Sn&zzEVOALXQ6P| zhED?2TPS#7iAM&XR9~v@m*RTSrnzD)trAV5dq9GPk=`2Jfvn30_$t>9b zudXykgt+3rhRZdQKP!{IKBNWwi>IxH0w`9+KJh`JWy*%7IDV?~d!qxlQpph_gyiu) zXYP_0Ex}9^c%A^|S2#i(tr9;Ai&WA)_z0-gN_7Ing;j^6P(6Syl zBFP7K@{%LJXSaX}=ylVyVAtZItosE*-XPV1ii%21rWn&)z6gc1I%%fAR7)BqW#s_A zyn`cej-N3!Gz($x4Ilahu7gL~aQod;O00eQQ6T=lgyAe*gWRKl(hMC+=~*uj{J-I1iqOM93(_rTUuiHGF5i% zqH>Tw?@-z+7avIr7=8p#)R1Y{q5`5H>oG1qE|D^p!NwO7h#u$ zX(Nw-6FaF8VGuPNWfaXjXpoG*fB)z}hBGPZ0GRits~CWV;?HCI3hxq(^@3y=5tFJG zp-E&tF+G?adAK+vC!0vPh`mk35PU?mqm1~fZo_j94z96z`?a@sGu%A1J3BhI*wNI% zH>0FPsT|E0F&W+iNvE>h#vUWF3CErAX`ueq%a=+sHg8V9ckdoF$}F%kw5sDSLiZL9 zM#RM}3&?tj!n^EBZf@K`h|mFP`$czs{=ArvPu#l%_kzX_JJ`gDz_4qu`=h2AEa(7B zub%m1B^y=#%6QhUkQKlaRt=Sl(OGSJG61BMofNg!z+^?2txA}@k@MRm(f=Ee_uSg$vgjFV!vqP( zh6~X(!Y{8ZzqNC!umI%Llc{HO$?E~RaPEqzFJdvB&8Qeq%1B?6i_H+m_V+b%4|3Ilc*Mkxl_XW08FucZ{g3k|hO}T_3EIR``TwY!t zdAw%{C-$>3#)CLJIa$>|r4pUCKfXe(KAL2H=cjtO$p~94j9%lJ)2BnNW*LOgfX)nbyefZ*H%Kl3j?hcY zte(6hjEGCab=qpzv5cR^#v)nYhcv@X=j2WIz^|93esi-oN>MN}va|h8eAwoN&nHFI z(`kHgnGAe#qnDSeb;8!Q6fI4EBETn3M)=By>SIgDO(nWwgt72Ppw92#-_eYb$f2b5 zd@8<0(rPkdTpQtuG@lZTBNXA7%imhgM)n*&Pn*tQaR|y(3Gpy>@|&A^4@Ms|$7yz^)@BBjK`( zl47x}FNQQA<`otcC?!L7mzthlS68>^-F|7ihrpTCv{AQjY~;(NoWyp=1V|#>ocYNh zecALU`EquY1SltScf?~fi9UYp1H71;CitqZm+CzClU3MBp$y?GhoQOtWvF zU$y>w8IYEJ60b+K03N45io%qaANSsLU|ck&B4& z%9q(}5cKT_*C>|&X)r(`6xjaYV@F5k5h_Kx(dlkRh6}VGmef>w#6J)@_kZQ;sa_@4 z%G%lim}RP@q_lneIrwTLi)+EYh7;o9*ngqAzPvzpGmkh~QhU?B z`264q|Kq4IQHLg+G8ZUc{az;%JN!FFr8;vV8G;}G(;BpwgqZ&btRycj|2*)m z4VTOEfKncyl${_5)dE(2WmIrO401-~HZpYpAY5w=-((m zkoN$OMr7t+;*8RDUBmc|xi~p_xXHL$QSGvhKx6qhA>mrV&}UhsMOvYG5CIS^W7s{+H%pL%g9B1-c$P2QaL7w& zpu2nhT3LEg^INhj2)9ts(@BpW&1PZY_KPM(9lq5huYY^b7LCa?cGjMpRMZ?rE)uCu zyH*qFT1g@-IXQ7r{oer5P)jO-B?dV7#^T74P4=HF?a3*Tk)Lo!8+hOmQ^h2J1{?*u zQhAYgv%~aRvu+Lj42b`6(zhB@v~-bxZh>*C!pnfwKar`e5C_b?G^2MRbr+%U!*N$K z=jI{<4ZZXO_h1y|jKj|R%g@zt{Zt7MDdln#f@k}^mb3%Kjm94oE&I!kSs3xZ|DHvf z-S`(N2h22lRl$z*&21wWpeZseFfixq6eMeAUbye&w5Agq5L<@AerJhKNlo3lOeAK{ zAjd-*#Pip#$|Dh$0>!swwC*9akdz@$K8CT3C?X5ltB zui`yoV}ql+A6zFmArlkvxwzb2TwFTS+8;u61D7X|j?BXD=|6{ zcu7J+HwvjH|BkSUQS+JCzFz?WI?Vc)W+U6FRQx~DCWN-vge^=2u{gN^Clz~Ucf^L} z%kMmTq~5!=IR4=tKOpD7@V+tK(a}Q1cR@7ZB%jawE-)z&`QKs}+_c5Fq;QHjqb|h8#s)rO^=jqBZq)bueqqN(uBmGr1NS?B<$vFR*udle3fAfs zk}d=J!Q}vI4TaF1!Pz1|>u(>VBi{>f*MWxC&Q4=JJ;(kUKBhi;oo^0^`^X3Qu%}T@ zLQ)EuL{~;H^Uo!upFYRGPak63T--@Z7cCmRB^9u{1?-6uQI5YQ9cI9{0GS}qps2Hv zArC;Dj`7xsw@#a6F=4`2~FA5x_jCaIRjxsxaPt1xZ2tiR`89 z(%S%}uJRw+MFDC33;Sli+?;;UHW1oN36kAzz_6imr^?IHiHJ60jS(LhW0f=)2T4>! zJVz;GN?iNDDCcAuv&-RJcI$ zcG@+*UUCn0r6-HZA*i3H)y-yR=JLO2BKIebfn#6hVbls!7@*>xkSQN{F?HG3>3^Ud z#82rMMLn;p!$<|-C0@}w%g7VbI}49-lQB`W-h8EO6~&*!e#KKKKmV|>uBIjmSFq_j zyuGmSE@z7W(X&`ss9OG;fjsLwpez;zkqB@gD3r;#zUu3XlAn*R`d`2SzUSbzhuaWi zhHGT1t{k@&Tc-fk+K+l?2I-f22Mg_XukdPcu%N4kQ9G;Z!x^6hp;n{AL?!!Y{mJ(d zD!9g5IbcBZTW+po2+g1t zW6I-YdN_lTJ|l0Kyat$3r#(;plP8>NJL}BRDU%X3O0O&&5`I^=UETaVr;xEKB@b^+ z-a~z$_Wuj%Zf3TP0(dj|d#WYfxWYoI{%>ygor#-pSpn6mFo{gk!FzpM>C10#Nb ziJD)pY-cMzH;;F8_VNE*=}soM3r9b2!NBi&aBvD{h!Y%!e48bPXt~+0Ahf(#gMabZ zSnhbnH~8o_pc3p&mAfO#;a3hrvdE>60m?Wncw+O;t>Ux}ym~n~b4HuD2R-;-4gXQ3;YLurzP@|D#e1b^-KvX-j9d*Z#ST8#0GVm968aZn zLrL(A;X@CGHqF5}o(tX79UTvJ0Jm8h+LeTEN$*YjM!S0j#4m2$_2z%@9MhEqw>m!M zYWn!`L0p{G_k>?)_iEMKFehBZ%lklG2$#3+Lqkkgn5~gpQ{#vLS*}4TdBviTfvHxr zX3fGah{0Vka)0o+lvTpQF%V5ql#(!napi6dg8faoX06_P4+Xp~8Rg*KP`Ol-C18&5 zDYW(WCz$5E^q7Zw0YmZhwY9$~V5%m_T?EkjJ-h9d%yl0aRPiV-Xt;?=WxP zlGBg?{ayPtbQmBv=>1jfMe;^j0-_DK6J8Qx4_n)wAhG?s_v|@;{yfwp{JbE@3=EV> zB#gqeM{b4IJ`Rt+Q6kDC3dOVl^NFmjDPvfoU($i5r%yNS*s;U@e25^@O-{e8YUOR) z&RUZZK7p&EM1v|EJY53&!iCFSHyeN6&nS_UHbafVGJifXT+R#QL`ie?>ot5r9bYem zL9X#gm%dc3b*WrB{D@BR9>@M9&aOL5LVi~xAc%0==%sQcJxc?6j6o2k$h?Br=$m3( z+C%t5*#fak$g->wfo3@I*gIuCkwCB~=;{i|Ex9FKT2rI9H0gRItv=&aqLZEkgV3gKiD`rtSoO8HwJA1X z--yqh;qt+QJ1I8j_3Po0kv$_zq^zzgnIq+WQ;S;Kyhu$cYLpZ;*rhfhb278kzR?+G zh7;@Q5*5DL^xgK0a`Y)1vGnm@l+3~87>5aM8GUNqAe(@_U;dCLSJ!W74mxmqI3_`q zagxi~$(Z!2yebl<>GeS3eT|7$qo#;&NqXs&L<(g)Ix1Gm7VFyi>~(%vVOQf#Yi5~F zzc(h~ICf@=|CN_?C3LFEJj`4TOHV&-WJG?bMsO9HP8Eeey|ZgvmqlY#<=|p zpydG9r-SI8q-k1M#2i^AB$QWNyw`w~X+#z7Cw)M_vmjt0-;#EF?85P_46OJ26#&~r zq4{2_@0$Wgk{`i}9z-^j1#S6z3E`Cxm^)^`Rs$x#m4v!v!7vxi0ADhlpf&?@WoE|7 z%6bAlE-^1Lp>b?hIW+vlkv(aCv4n$$YZ>-b#*Bf0bP&yzjw{k#gbPyGa1hNv{p9v@`5z9j*xSQw`b%;4xcm`4db$6k z)TTBwAMbVuKN^mvIdO3tWESu$T4s@PZ74=mwlq|93ET+YCZ(%tbGx}E7}&a?yg&mK zY(U)x6V|&L*}e!B>yipmR+}6zkDv|qQ~;DmPihC>6?Bk5{Bs-W$cRl!;ImR zgGclRacV^Ad5FQ@PF>gT@uNOebJR z+DD^)#E!i*T~u}{M{`$etNy-#F?40U;gJ;CI_#6VN;V6g0kn<_a}K)0b?myFWaTOL zL@JqX95#X2_Fo8&D*u28wz15soYU>`9#Fh^r3CDbfMN%5-L8**MQU2l(v~fJzs24% zK$q<9>OP#18}zO1ATGS$n<#gh(3YXc98IOeds@nauC5bbSElziKJG1lXK=-Dev+oN zd!NlW*2pDl-rjDN8b4mUGn{ts_s+`2EKfcU8dJ~0#hl6`saW+N8&T?F? zCFsFXZ4p82Te#yz(zI)a=(a1N_okwE?w+}rxSPgZQQ3)*Ed318kj1iwCOg!0KQLTIJ`t<`e?-Cd- zIvxn@MT_F)Dv>p!6Zf5D+{for(eZe6-7>48Yc3i?fiS`kt}}5n&fr+EdrbfFq46)Z z16~eFY${zY>9s#gNXJh!rpfkuIJzQ)%U3Ur_W<(^ikx6NUcKTM5FiDp+};F<$NJ%k zM~C&>Pk6NTD>LqR0s*G6jm;^u8}GKrt9MwDD&~^##5X# zIMYKEk8GNLZqrqtXm4+sma8e+l_Mr;oedMco7s1;*S6jsaP6;1ER`SmlKCtwS*mfY z(Y54rc@Abo2nd*UHD>Z+DDl7zOgMs$GM~k#LHW`mD#k{^y9X1IRtX5WqA3MNY6OuM z^yT%%M5r;Cb}4PsUOHSHND_ePpRq^WyyJHlLEyGi3TcSM~SaPq43htkAVoAs}!K-)rc+96Jp% zms=OyOiXvra{boj&Ue7ZCit{0sY{u(1`;)+q@iMIlj`=llD?b^zQT6Lp0}`ZwL$sQ z6JA%YM7@blYAtDCXJr*D2sm;5ow;;Gw@2hzI%CI5Ce8L|o#MK!W7XEGfP>_Obv#gA zo%O9*^U$NRvJ%KYMp^q1QTqdne!ey%wb%?tJrDY}8{kPsto}4)+t6 zSg@M^@d0Z7A(&SbDizZ?G;MG|KdL|DOy{AI5m9j@IFJgisHur}m$+F3`|p5s=k5)F zCOWHuqM*7;SjNL6%m5hBpn?5pwgWX|yL8A?8rSJI+u^|bJdu1azP-M6 z!xQbuf&1iiyjAU$f1@0O7ms0MI`iCcU>U?%il z6e-#*Q*f(?kQfqYV){2`Y|ohkoRDJ)Lo7pN1=T{bH!sbm&9fAo5*xX+{gOw%7e1 zflv~-(#g?-(c7spPu!O?(xEc$O4X^_dj(g@o)Dm?{|{%tJjO(Ptf;oOd;Gi>Nu^o5gOn&gL19g6!(c` zwqu={{;xbq-eXa(FH!4vwDYG?D!g`z*;$mYx@VGA!}#df9Z=}Yo_V|LOsw$5edtlF z$K_WuRnCSw)E1xtTrnZ>^o!E?*X9WybC5>9bsPLp1_)!5j7+G!|8++M`WEAHm*@uA6$^oBC?h6JxY*43hOOtEPy${cqm38Cnq zTeo~&Vg~p_C|X_2E2q>lxle=u81~$`OX~ecHDynas>GC(dCdJ2)+2Kh%!+QDZ8E#L zLDe*jQ&d4(GeGwxk-Xw74;3BQu#&!UqC;%sHgc`zr{{ULV*5S}R&tVCdo)c>Ke&74 zO6wI1?^gF(!G#TlKG3VrJ3fZzOK`= z;!Zy{Vm)-3eE;0}u?QN6P1S=XWe<%Kznx!lk>!e}c4QEZqj0eMe9n%C#)a#?v6AdQ zH*AxLQ{{bUkeuP4vSw(7{evTyObzg$^@G<9?CXE>_3O+B`=x_+6H6v!vTCS3LPC*b zAu!sd@c8B>m_i8p!)sKGUDB7JBh`T^1M8dhlxuUx3jZ0SALpI+i5o$~c zLdJSV`kud-6<7Ky$>2@F8Hh;Z+tBE znbpvIcwfhPUGe3WA3pMQrR)MSX>RVNqGE$kjn1x)4vnbG@rKm`MOC7*IF=Q)wHh)W zojU?VzI86Y6)T~lWmiHTNVs@0{eHV|6F(p`Z|Y<-3Zud!T79QK3Oc$1J{!q3#{8M4 ztmO28IM$SuLcOA^;=wLkj54&JIgQ&UP=`FYcZ2TPO|_t{xp>7zRF|!~)W6QW z^k&?UQY%sld$n+3*?7ZZq5ah|8y+Y2Jdf<$krYa+eEVVhxEnyDh(gnr!u1Dd7R+=B zV~dxw9M=Eh1oP7rn-oDG<{w!jo-{rcz)2m$d1%UoFbB;Bu^M+@qm6CtlP?YFDR5(I zS%#b<0qthz#AK;Mt>lj|C`FEQ+015hKw$l3?lH(sYHbmn1$pr*2Y*Cd{aC&Dl~1BN zjZ*CNae!Da<*EYLtbkx$S;fczZ)$%>PseH}CX^vMmxvnNz>GLX7)YKH_L{LUQ zXejb&#I8$H+_!IwUJbXx=y6(mydzw(k`fYFmq@Q#yHISGicejpx!;jcux+Dn-JmJV z+2x+@miLV|8Nqt>UmjB0YNEb*j=E&aKJzsy#C7?;Nz(V|3ITx#0Fw_4l6M1J+_R@J zKR?DO{mGRpYKDgOu!PCpjk)TeV)Cl9yJPfVbz7cp-N4jhrmp_r!>frbPkd#=sLM9q zxn2#AnQf>I@No)VvBJZ*B>wPTP2<&ZVS)~~q+D-zC&pb4YkRM5V8y|ww=9~YuJm?8 z!(+1>P8J6bYK3o4z2|qLhofhkVt3hoQQPB z+iLGpBydr}g%O2qA?1&}xH8RCPYz_`Ft#;Jye@vl-7}y-6`nihb&WSfavnrQ+Q#F~ z!X3ujF7Hb{)$TPIP(S$opU%{b%5x(!Xzq$tGEbOTuN_X)uA}2SI1iIa0Xr*s5|2Z^ z7^i<_wNoubuP!$Oz8yIi4B5xkV{o{=Z{*zP9C5O>`s3>bmT%U*fq1TDwYK5UB!-Zq zF`o3oNrmUpMoJ=veb~AdhwNa_fXYSj*=_kT>U8nZP$o(uEy(?tk*r0}I|{fY-Vy81 zjrKWpi|CgC!D85&UuM4Jz;?&7U+c@E((Q6RKYcgFCZAu5*&EE(DRp)th@YpYTg4X}u6a zZ`6&3euV)@MVicm3KMi0!b3q2l*^#hR=R2~Br6Bq)=Cexv*bU@MHWeLie)2zCOix# zWh#&hfDfWt9M9jJ<@om73G637pU+Z`jk%suZjwjKM`wgty7u$&O^l5MI2DVnuXtS& zx>5gR;ib~Mj;?$Yw&h#$Hn$NrCBjj6qTA|xBR(%PdD;au(cGA{0{htykX)M@RN z-Bq%8ILOAvRc=|Xl~-v2vs^w)F{q+P7+UgYSjgjj-_&B@G#47}VrQ4nJ|&2mfF%Qk zKQ_1O9n2{xZILcZw{KSu-!7A2*R`y>(8JY$Z&yRQYJIQjP1&?EKU0g^4X~RE?GZW> zDDp7v3bH!=O#MXl?rwTAQMi$hmAcGf2PZn|rz zrs9Ko^vrD=g|}@>mbJI+J7~}p zA6!1S6CPNV%(K4|k@V`*t#KDTXEwSY-`%c->M{FRSD|=HzD#oA;OqEcx7AYPcB7jU z#vA%M(RyCAIZN+H-m~8kKL(>rI zodz1D{j^t=;Bm2YRvkOp)8syJO^np)ck5yfPhFCQEph{;sE~<8vFdiQ9pAzGZ!?HY zx5C>?)o>1j+50f@=)-#AbW1`MobJ%^co8+GPx9;7tZLtp+8HObnhQ_$DzJ)Il>5VZ zs~1V2?4|&&!U7$WMYV&-9!g3sBbKnWYiKmUD4kNrBrGd#r0RGgW?%Y~QgXT=T)J)C z&mDPQd1HOd>6)>V9aaf$LZbTji|>ELyotBQnL!D-)CLbA6aG{*c5zeuk=OmaqWEGC zm%WaJ4^{P@o%Rl9;U|tin!q=M5Dn=iovo!81zxJJr6}xrQ;EEDUuE(_HnyI(N8^RX z3G=^)Mw|C=lHbMM6zDW(Ic#;E_zKyD$?czLeb!O7SvF`Azpc$&-e{C@XmQrhV@O|rihqJ1Ejy5Ct(;Rj zXs`(Vd1wW~TVrIQ9?T%5(FW*{?ZpZpMa<+`2JTb1M1v7+27CgwN@rfPJowuVbdILx zLN1D4JvD2avO6#C?ecFP22YE|h=7CR9X9T#(eGvK(w%eW%$Yz@Js&@$B^*%>zhosa zX~K-5Wt)yazpiBd?pZ@KQHf=bed*!c*jz{;0^%(-`F(4f#1dX1Px7-;sU7oks!bob z&&(WQ(2ZF^|o%^dDpuGRrOeA|h)`2jYmn*^Q!6HTSN-g?R(8XT`v8CJC zu<60wyLTg@$^M6(ogG|xb`asOviTXhTVF0Es@&QrH9ZrPctl^ecK1dZ5RR~dw#Ub}HRQ4&TeUUphylJSXsJ20Dzo)kt z#HpMj0ejvqimLm>zhgqcVUgr#-l1!r3(g}o)&>CdOhQ{@GMS`l8#j&*B%m-06bV!~ zVLOYWl^l)8xA7Oj2X60V!+Cs|$dsNw0-F)qhYv{n?@}nu&SxWLnuq`fr*%rlMRI{8Lg@RC&p@dj>s6IP1 zSIvr>PuT8bqJee2oD1%qZmA_Em-G&CeNSko7QBw~W z<2^aVTl(87_{KKe9W}K;bc8ARmeeuWu1J#X9NMe*T9l(*B|99gRc5;={tWZ0Uv7H4 zsT?1YA3=$9;xs2WcM5)N=7PnLNEF0JbBoC0jfhAh{}|F_=!>piU8ts}mZ0&a0y8a! z``Uf|V9NL8O{zMzHuB2~;!B4_qTn@$Fqr&>DM7ZO1Lm9L2|Uhs=>G^#9cTdHNDO%^;$jH}+52_T1K|C-~*bY{eUFn-83{>W98;vLXYf zM3(s-QzGO+iHC5BBOhk}09RwZ2L^q_l(?QVf*&g^#SbY7ek6oNF4O-?rRn;f7hepc zl;V~+KlkspNao()&$|90kug)Y{|ey}YO02#Q&jFDP}-VxH|2PA7Cld#8Jb1Y_Ri4? zq-mQg{nUm-U}ZSZ@*fD@3dHSUt3nJwS+H2*hTN&gE);)l$ix_65z6LC!gd`?p?->W zL$I-P47MvgaSam>?*$kd!|;)!>n`a(O&4yRe0+Oq@s3TqI42iHO96!`BfZhOZ2uZH z>!fNbkezrAF~*r`)%>^b6?nwWBr?~}eCRhj%0d2LI45RRhm5E+GcSI*^aGL9$`kge z{%Z2O_U;wXS$oLdr^K{W-GicajJ~WWC>VTz-Aao8{x!(6@l2=2eAiVGJPv(Z!cy%C zy-rhnzvIl&v)ZXwzeBu#!i1hoqqA$KUKQcqfGmM1rR3ND_5D1V)*2_KbD>`r9XwHv zpH67Dh+hgc$x~6zeoBbwe8Fve2cRUTFP{38OC^g7{7s@kvZXgK!jAW~taW#0Qe*zc zd+w}Y@|iH$xocM&G1ueb#kzxNjNa=x>H+j}@&lor78y+0LZ-tf#a#Mp&A}%JyCv!; z9+tGMgkWIClpbz$d`u#O3}N(EMW!1slJE4*j(Q)cXAHIT3)`PRlz9Bcp9uGYDTWy$ z8C>5sIDLIjqa8_DX)bZt=xD=(b&H&;kFVIs!^+sxO8+Z~4@ikQ0~t*SuVDtsSq$y6 zud}l+czR-F>(JofPPNvywtRN-CAD*!w`gnn=j#Z`R!I@t9?9fS$a&Hrk82_s^3*a$ z!wE)iznA3+oBm^DBi-MC4pPfxpCdpZ#K7+4J96*yb`%qyL@%y`u>iK*keCdyw1v=Toj9a$(a(kXy~KIe}+xaF@1b z?w<+3djqC*Cja)30qQ;FVq&}-5zz5KaU(S|Gu2Eba#Ld0eZQ&lcs+`WijXIHPh4LG zl>ED>ZoyyJ(BT!1z=Y7vSg2AFd(M}enm@QoNU7CgHUEZ-Cp>6L%2b{uOOEPL5`{j` z7(VxQ*Ymme4=>ukbxqD%St!a=OO-koUEd7VG_D+2mYq0VgmFsw>RXO?uVk#awxXv9 z2ibDTq?6%K^aDP2Ckn{KU13>O(9mFH6^A1ay((ITW-nC0Q+X}8?FWiTH_!M1`oEap ze7R?Kl=khZxa$^6S{{(;=J!%P;KKHcZuK`{q)54QCni8PNWkIa%pyTk(q*n{oyTie zT#Pc7W`#`>}~t!PbeJqCe{*SLkxtSF>|KR#O{w;5xWCt%;UNm`WEdBDk}wk zUod@+Xnn${>&$KfLy;s!ecDovI}nCRAyUUacXar*L$hrEZ*J-^#cS z+ik#){c(JYRP01nty(pG#tcS4VEt~iNYp0u{jhEiRXD$>=r)LE*xBx6`|$%6%l`~W z2b3x7+B3Mt|6voxN~>+;xh8W7N@Yo(k~eSm-De|{G{ouWN_U^+t2a|kg&n9oyu8J5 zJ%nk?<>TFKtFK|fwHELY73(oW#E$LvoVjP`&V>_Z8I);Y zs-i>w*N?K3(G5jZ1%vNuQRkXI`mdk=v}65Rr_KHJ_ptTK zxuhi6OCnCq;kp0zjVW7;DO&z0@+B-QcMccB2M+?iUW{Qmcw;KlnLza~-*KPckEX>3 ziWYRxFW|lMp|$m53;l`VFn(Y4<+8-uBhLc8HZvdEgH4mjCZpGSermo8YxVq0wSg(b^S+r*19jMUh5o!% zhs31XS;=XAA}mfD+S6wI`dh+TZ|7If`Q_Jsi@dmzL#}+daN)w!)KoZX`o8dC;D@qw zN361utplv|T|z`Bw7KcSgaNEN9E7fig_Syy7}zD*i`L9FkLG%3WVZj#Ig@&7N`)cm z_pt8FN0WcKN^>$gA8-Sjxtjm;+vN7(&mYk$G{H6*Tb7y*^%TNiQB6p9c%VyRN*t$i zSm!k2H=Uo@(aO%|d-?FLhKa1fYE9yl(*Kc@4vqRXD;mAu+|uGY1Aq595|NFaAdA;{ z!7hwA(e%iBz#iuEjNhlnUOaiC4*`D?KY%+aY9?tt&$W<*C(dn?G_a}01K_}=RnszA z?D&X>aF)j`k6_+0HUhBFgIJch2gXE8K3!LYTr*9+&X{F zVD1c@?c^r{5s|vQm``dAVe^ao>-9*6_5Au`-{c!+UD$PRI>|Fgka2?oF~=8tE{o8I z&(G8gwwkzQh<~Tc?CHn{{r@w*A>+1LMSR&`|AR|Eq!p7lu}n43JfyBazUk0m#y2IJ zx6T+aUUlDfMhZ$S9pk?cO9xWsxBvg^=b$fbiQt)huQNo|0Gv9ZWFL`+eBV1o(u%~R zWn6=mjQ;^v5+%zI+g!XXaTVep`fmLF|I>RUfBAc4a8v#am|MH1HSD;dv|IhaGoB4R zge5K!bMJ6b_3z;vv!LG_^+-Vwd`IBh;5%V^5bhLATuf^CJoG)o#I;s-;7cu3)$c!k z)BecDlC-75Azu~QT_e<3lMh{z1akGseu-Xw(-ixY#XNA_beN?rZ4U!`Kj#vNFPqEy{jO=y0&JGfcJ&ba5m~*POb# z)4-)*krZU&Q(9ESu>>A$Im6s0E(qa*x^N4zu(1(Wbw&#XMokt*ZH9n1TRC9@{;uNk z*Kgl;!E3&{$g;n~ZpL z!cxKR$LN{MDKkE}A{bFqPxT&7kjLXg4PV%SJbdAfGB$F1O+2>^RxS^Uc3}8xb=>T? ztX+#o@^IuJwia9tPd8=HIdKSL4tV_d>{r5DK3c`#e;GMI;wp&av4iluvakazh zY7|=nt*K~26Omdb=cGP>!7FCFskL{uO#}Da`2Vg-0!pe`CbOUmwKxzh@<@G5!AOz8+G#iCsI$z>zIth06>9>Dg)Nv8g$zg@J;e*j z4d5?gm=5R?M%;!OfPF^hGR2)?=9N{Uzhdt_Scx>bQ@tnHJi5Jnyg&!9lzl+5!w+cN z^;qE44~47*C7Shoc1amEwj^51d*CWrZ;@&jz7X!}eSQ0$g2+ zxPrpFGUZJE&o}39EWW%>q7lIwiiV|>-l5SJ4FxXUWP1mSM-Ier1W0sx)qRh~@6V;I zM=9#GNQRHP}j zf+<1UI4nwK62>vRY)f)n?W2Db;mBNl-Yob1(C%IX6d*zfY9y*~m>M>1j}} z-M+nM`$7$`%Z*P@+#M_o#4IJpkC@`z{2Gpdg{5$hymu&{Fnw|Jq*RnSZPc)fjh(lU zOxNQ99QmF_BOjt?6fQFm<7ihBs{4(lGeCx3v^*r@kFvCj$1rz5-t+%mqKP z>=C|w)1{_Te-{`R{L^g<;55?iLbcPLy?b>$BZR>Da<$!Y)&MJWnCtmo_oUte`Oi4ji|YZ1c^?+pw*zigaG-@z5~uV*jI=flLu2;t zvn@?cD~*A@4&i6G`KS`ReJ-TILLF>E&M>hXzUnuhA0P1rvCUer`bm zX9pRO9pupQ7Bls%VdDeGsip@&`P$vqiHobbX{2Elo3xPSfu})k`Ji!{$c;C|@~+uC zHyvEj;$6GCQYF@BuG~96d2fnhM@L6a38*^mb^w3MAt3<)t4?dh`DQ8gw6`LsfE!*I zoPC<*=K`H;T5fs~EAQ*z^WwmfyUSteWW`Z@HLFA)JSh~pmdOqnZf6>X%rHN=>0{G9 zjDg({!7oumTGC7yUS6EfvvO+X(jby_bSNi0T^B~(z+~8)<2b!4%1Yw=vdIS)Pe1DU z>#=1h_WZL3myqGzjf^*_4r?mcV*whJVgp&>IX=ULc__SjA8d!F3UM+uLxH8S5!?O8|rhG{GD#Zm?!^l#{ zLQuQ+RQP*pZm?UsS0!#Icf*r52O4t571c0eHA+~UC1xERgA5m9Eiksj7}biWu;%rd z(Lrp)=4qY=xe6zmlzh3wn$L9i_3hoWXJZnE1(BP~@KKQ*thE0Oi>#!}4&6;8i-Rdv zwYEb&X4FA+kK8I}HK3ft$UjpePe%N!;-xRt98EII5~=wbGY)Kl{(&B;_t0f8*m`TE zsHu!hY-l>Ar@_+9n#UWca8H>DEDZX_7f~WF;8|3GQxjq-2W2E9`NWtSGy1g!3Dt0a zhp2QxJZHPT=Hp`!{am$i?atwDG6U)vo^?>|0mI|O;g_pbC|FB;qGD; z&xtW{AG1deXW}+Q8c;8P-A|(`78Ibuxk-HUio8c_K5y$&32j*_WwmeHwke-yfq)>c zF?t|{cvX+oit7L&2-Xh=F@qy3Z7m-Y>=Da`SLC^mwVRlp#sP{q&J=01tcdhmK^4v` zEWEY;pt8qY&gO;MmDhXfqpQc^+!Xvy9%JqOE?=&;*X%iuf`qFb4!u1OFkOD9w7HM} zhQ?L=3$E_q3ijWbk2w+uNy@}-Frw-oAaHdxBEYkCd>Kp=WaO3S z3-a^tkna(utb2R{nv13gltSnpfF$6-z$W||$QOfAN>B}i=RgchIERS>6%8CAu4A5{ z(tp(dkpX^7d}X>`k)lO{R5PoudcSEVc$e1FFz%0<;{}JXnJ|%S6B78C%!kIA1~Hlf z2@ScqQ9yTlZj}^hzx825kAjUE1M#F zR~i3w_tPvWB1LrLgp4mQT5k%+?Z=p^_+UflJr#@V*JcXsaGMw#h*)1#Tr3%IJ^ZAF zsVT_-Ge+uESjnCtB6%exK`f^|FJ3H+Io(`{SqVpYU9gFfqH&3VDDr!w|D_^g4|nF0 zmT}lXB&4JS@2D8d*YJSDae-@g*vsv{5Szk`okpVxRYM;#2%$*+T??O*m5a6A8*F_( zTxfx110BC%L|Yqrv~8ByplOF(UU!%n+~5@qyL*eWJ7;lvM@wvw+O+H#A1ZZ+PAL&H zRpT@JLq@5JW(A8+C86E<1gw9>W47hIhOj@MPYpS|IWVmpLcdTv){>hOwOvuM<%$^L zb1eH9)h5mDID!{?lgrI@;`V8buZrlLBDp?dm-6B}OYv0;HH(rhDqgGa_AH6;_U5#B z@=m?ZZnL(Y-QqU&Z3hnA>3KB+HxEZU>I+19pXwJa(;hs&2HQaR2bwn18lqjA5k-Rg z>+_ZesA>85Km{;QOgC|BaUZZ~_%dzFm_K*!^^G?Qz0dpDso%WYg6g3lJeZXnb#vy6 zwBOQKqQ9f0Nl;2kcL60)op3copT^$SWGGfp;`#;xo7^=k$z{kkGc41oy9wS(_9=ve zGm%;GsNLSQBFoqn1L)yMnV&Z+Cx?H(scfV~{?2JCYWaDo}R4J{HVWlaUw9o~6 zsuE?hLmy3AclmM_m)XUY9#h}a@I^7FZ;iRe|9wIhgMj2ay7mc-V_o_mAbh7?5uJKQ z);*Y=x=ZF8jEeTJv1XogmI3UoRHSD!7E+W%1jt)H*P;I~h5Q5_Nna{sDnP}uv9n80 zIWs4(3+CWo;NVVQsCv^ACwI>NUKh|^EL0PL)Z8)falLG>B-m0`NaXQPWmZl9j=<5O zz1EG9LXmrK$lAwB2*1031!_$fmTw;RHP759++V7!yl9N_FoX3%TyoJx6>sZr4r4* z<8Ij$HfsLAzAu*oL7rCCDu2!dF@(IGpPwIHOOgkkGbOn7f6-5HMRd9=`35eMX!k$j z+T7ZD(%&TG;FU>0vS_EBkGopx{{SSbMd>O9AkPmCQ^D1v;pX7`=Vu{-LfXNJDHHly z8CAXRE*NiXli3$!$X$p0FfavH<+*$1gD$+?1#gTu|CTBfxp^P-VF@^}NQbqaU>3qx z{Fnjxt*`dF_KwINR2eK3WYDT_(c!j#r?9ie5G<)AV z`;$w5`Q`s8#4I{~l}P`UR1*~EFVsBo_mhkU#?vx5P-58GPZ9I+lQ`i2OeFvohD}Wr z&|{TWY=7jfq=uKRC%N|Uo>t3-f`%A)7g%F_$!|?L7w{3{^p{kqoIlX;8+JfoG*M=z zF=XCFi#A!kS;xQG3Z|8~C`fier3w>r!oqFh%SLY|eU(|-JCw8z*7)-)2@I~ScEU7w zOP%s~V95sUyk2isrZo)y;pf9IubpVg&AqW!7K*^8rY04I_w3#!xa0jWm0Mg_`^Y>U z+amLF6OSifhZe~eU*2fOBxk`NM!Vr2kvQLPE0Ck#Hi4G?k^GR=dqYsDlqzB5dbt2p zco@37Nak7fl(3z4% zHH}6w!-!}dg_JKiSkKgy@@B)~qD2@)vB9ihaA@cOhRKNJA!WL>ShAq1DjD6Bh{0uY zFKbNPc^5B^&48zgbz?>fz}*D>rw^g!@9oV=CuCpsjmQvM z*f`rU#jE;QKA>Y*)wcrQ?dqC<51$vi#pkH)`=cEXVz>>=yaUwwzSL^WH$>Ax@;UL~f0v8S^vlZ%ET9~>t0GPzAIgU6+%rG*z@UJzsn7zB=HQh}J| zdjdtOU^I<#P1>?D8u2D%R$KLhI!O6ihVf}InFM+;JLF)v($IIJ*fj+jdf1dfyZ!3b zE4=&zVOg8T4B?PU#4W%gmUGk<#aIO&5RNql$*8KYV^9to8zmxa?y>MjKMb^uRS$nj z-t3s|41pEKMO**agD%%yu0CtFopzBrezEELv%+zi?j-}WssPk4L~m{8M~rsc?!U?u^p zWTHh(d+9ct`x2W~6FpY)@s~dQeC%H1l!Hxo%Ioxi&BI8#EQEP{oWBgK@7^@$* zn90-Q;piQlmlK(!-t`(a!rM1*h%1e*w?sL!UOU-pA5q(A#C2Gnb*q z#)6VCglA!4!Bm(NmV2od#C*f2hw|AJpQ+gF0Yfe*A8})i*w`V{d41Ma5d7kqLpP=c zLI!o;LEidJj=}Qy}3keBft6b!B6LQqG#Yix2 zanhitff?dbPoemNaq%AMDf55(%E|^_{E86aAoIKP1Dhr81LS1DC+XJ326eY2EGTki z=7t13`3)9mRl|cIYf!AUH#bXQf?LD1$b0vW$k*Yk19m9Ku|MIGaD{GL`tJ4X!3W#(2|-DuP%3U;Z7@Wj&HVqUUzFI9MabwPtO z3c4YsDC-)I#qo_?mZ3&>ZZ{C$^ja7hGud#yvI_uGHTTD7jT>at!{8@e*TP%1b~}F! zIb3=1;&qYpMKZ||(#QGh0=LgkUbw@P5GJMU+xp{qdeH?w7=CAH10QohE66Gc={YJt zj9bTL>)io&0iX++7!Mdufeqqk03*7_C=hXfb1j^$@?}D{+ThYscAW)hiNG=QV@(@ex3#qH@(ZZ zf2<)leqSvO+JgE#hvMzup8U_%@?~GmfBiO$;NcKSsiiBFwch|Zee)DeePGZuBX;NS zXvRbYPZqwl17R{JBk`aO6)vc6Y`lu%D;&5PXj=g{j{a(Dc)+;p3h5$!fbZixW@{j66%QZLbz>F>8bsgDEKAHYU&JTpbjNYNA)*hI=V~FL!u$n0 z`TLk}Y@ZbvE;N6J^*w$SZ`PuD>py|^6YyN1v2O)rXau9r;P_v!t|Qg1F(9Nn0DD@;_!})jVH@RQb}}wkYaW?x)mb_1?m_^EDnFz*W`q>631zv;FHi zKeHWrO{O~oM}iFCAFv5xb#YU>KMv0*?CP}ZGLTkS*FN?*F{64b@}RndAScHA>ugY6 zhpI4`U_xHo^lTv+1>c#W1e_~aOqrONAOV199&qmNGn0fSk+;_e%Mbz)4l^Ot`K=g+b=CKd{QEC$;kSzo zm|s&fKz3|Iz2OL7Id2gnG5^osa+#hnS8#X_>Q)pI9Ooh|%aev2{2Rvx^68ARc=8pEc5?VKgXa~73y#`w&6(V6# z9&eJB^^Aq-OpA9(jdAK2om+)u3`RW()xx~%K z8A#hc2ujP!%3w`j+~J%R|&%yYS3v?lh`j_A2m}8Sk9Y-IMDr9x~@!7YfZ9>5Xz(X!2Wq=)nOmlY( zPwo?VERu%s!3V+ynKut4{6EaScU;c@{y&bly)qhTAyir<($zu>rJ+HCj8ak3-i7xY z4V5%RT}7p|L`yrXtt(ekLs`|ONqhIZzpmoV`+Yv2&-woMJGXPYopZd8x~|vjIUbMu z<39dcLNHr?R2>!fn{oVO_*;u8=!ucqNK#Qm3!;f?)nsN35llK+9A}RI^&DsNkfGk3gr*MPk~v4i1h@p!d#%^ z2RRAqqr5c&DmIevTN~H@@>}`o?;jJI>PKp?5Q5a)jOu@gMd)NeBSNM?G}i_{1vfp+ ztBG4);{-Y=UiIj`Bob^GFLZOAyx5fS6iEl4RMBp*BE+1LeBFn0&6-ag9p_)v{o%h_ zdlvzR-p`^pDVU!kewu z&4?VV(>?TXtKuxzVa4JIzH~8tno&%y&a~pYmr``bk$T*VhB%td4b3UG!SviY zPh_c?8!vi}-1+q4Rnz7{u3b{T%1WM9<63W0pQ6-dEPMB~*K_c_Q*Ch4LgAxr>Oxnp zxWW`AHuGAX4n9{9sV(r8a)?w91aj?Mq`M&?yzC=KsFPQJByO?v?d~^kqWk0$!#3)V zy>qVoK#`BjvB#Vv7JnWOcn0}zPphVYaI#f@+lu#1da`F1&UmU1ofXuT`h0gd_CY@Pn;LqGa7Q^l+E1|%6}_XC_%h5P9Qy176NjkT6Q4OFbx@J|`@iyL zn>pt_aLCP_^I_D35?(P02a;WjZdA^lD<$ce6Lm2BpW^0Q;&xvvZ9ly}jdq)rFPF<>3}3n|o?B`STh}xc$&SAFvwdqVr|!7;`H^8T;_31_=1Zj2 z^#-APgu-9m+p(x-uprCkkM!Q-CS!*Jg;%f_sY;bbI7K|)m%mBIv6Dl=+{i?*Q2YRY zOhr`j=?}g7{kXJO83nw0u3C2Fs~5z1Dd$vfkGqLkohb`CUFrZo3ge2f697^R9G02o zJg^_!^X9F6diu^Jcjc!d=QWP;7ltI-W%pz%=?5#}SYJh!B|NyM+=6e?4vls{Yr!n= zdY@|hyGVk&S>s88hF#{s`9%xIe(`%5$ejM5@jh!V>JCNe42zL(JaXCYlHh`m_GFt+ zS#@{ewRLr!%orS}!efEJ6{I{4S+K5QamNX|&tm@5_XQ6>-QO<>*NI%0qS8*$CMX6w@jL0-+y7ac$l57+wMXh+ zS?<+Pcxyr8>sr`Ot(P`~w2^y*$)m~S*oTMfffjB)J((l#-Lc0^r)9wZyp&7q@ZRfv zYRvD~ewFljKsg$8K>R?LDjYKsb(*1^oVb;x74;xPI@d_#sZi5xuw^Q_Xzlgn)^QpK#MH;Ff>rVL)JlVpid zZ{2ZY2|*)%@lUY^d9tq4+skWh4b$LoDRAfhsHiQu<{0mp4V*3XVdtv_3H5Aros8NH z(OWB#rX-!AHt}6Ab+3Hqg`Dvr?&98x=$;e96=^92V-FGxzFxpoc$=M+qiOuRJl9tf zgxZ|xyLP5a^MuOlvebbs7NO8%%gFrUrlcq$66xcY^nJTkoO>j11=*u@xKTlRSP^SYdtwU(DnecQE~>(>YM>B-iqBJOaXfKBVpr~4^>h;{Rs zL)GSAB~IsBZxE*2aL|=jtI6kA!**#mD{|%aroZnj)!luecA&4%6O9_c$&ir7&n5F0 zHUlgwrl$H_9(aKD+R-jVdib^k-VIw_^0ap;CfGYURYN*^$7YFDnsYhU3WnXVgHp}x zhs}W@WvU%R?^>e?ye?_RxnUo$92-62z{&?{BC zIV4NW;c1V2Zg-t&2aCS)jxD6YFyeto`ZPN$O?WG}?!8V@Ec>?M>teNpbMuI4EB5I! z&^N`Rd12;u^5N<0g(*xv4i@iBC-N1R{?Rm43i*2Zm`pr5{Yuse!4*o<^JcE^@O+wt^B3LkMcYqLN{m_#g_hh? zc_yGIqItpXh(4FJxcL+};pW3vc5K2R^l__>Iomd_=isMY#m z1q|JA%qz&-GIzGbyyj#0(58g zDoQ$*=n8{wSy}n(S$>wOI$pFd&0#yP5PW+2G>;n>N{1vy4+gGHOrBX}Zq8tF>ui1F z>#!ec_vtAvr;ib_kUKJA6&gXc3nz3pMstyDXE z!hOh0amIaU@14ZNZn#{f`kXT6EN`JLUpZuFWu={Wrm#TYttrFgBYXyTRl9OstqkyI z-cDN48kuR_8i~`9q^Pa*)&0p6$H$L_2Y6#FP%Nk-%L91iDe9Wksm(0MbZ} z!VmQzhV{_Lz%2r>5DGW?)xx}M=*@y{TxWzgcQTUkmt|j!q?>JT-mY6aTE!d5#?C%5 zdEq?!i?>qu6e+PMRQh2_Rz7MpmEo?LNNE1Nu2i9OwMMz~ z@-);Dyk5NQ7Gp|>Vc@rL#nooF{OQ*ouTUs>ry>G=m5|)7?QqAUG@^#GSS4qDo+IUL zVaS@KbBs8z(!3pxz@}Q~dbX1xCuaq0QOt}Vu{J!e(UFZQJ-u=*q1?Gzr6g~#67o?K zZ%oPs1BeWBO9EZj->!cGe6Rco$_Omq0rT?JrX(jvMH0QqZ}9pzdpED)YjSeO7FE16iWNx>QhU(BN)TyBd-lp%Y$sMM~=k}avbUH>wK8%w7_>L z2j)j6!OkgT{+Iq;rghtO|5^}LG63H*G|t_DCM7*;nW*- zk)lE!;r6U6woh-{XzN!ypHmER}n%71AMvfsMO6-kR>3L1u}D?8>`c> zKyf=-;S+4H52m0Kel%?CmJZ%QS=2qi$W~CH6;*P)8on zdKzSU;J{z2&iHPPT6}dwTJ^hUo+oq^HPo-)TjQ9$E_Q2ys?t4=TaRcvG|w*C?|y&7 z8PUL%i8>A2uTHtyM7L*7hd3q8FL^H&-YyYlr9yG37~ zul5nKq>rY02X}Dtd=6OuQmiqJP z9ho!i)eCFLZFEtc2_Jb9Gf2WUg-V78#d8~M<-dV>;tL%W*Uf#=?@&(gVt&USMb?8y zY6$iW*ejq?m(W;<-9%ux1Q@@WByh;Op}{~_C1DtMDxLzSVrS==dem{us>_exq8V(M zulozxcx=WV^oXx;?Bi~0TZ`&tga+jD3axTO(*;k1^{fkDzuqCAto=7Go~UAduhC}4 zZGcWzxqqGz#IE{V<2uXJfq;;%CqcXu>&!p@C$zrlS2Nn@A67vE`%4io_X80pl#u1W zDIxiPC?ORWlUVWXXF%&cTS?{r4|KC-pTLs6ADDtpE%qJ26N$2I0bPRO*NQMuTu zL~hV$g`L$Oz>9Kmae+0u7ftrstyzQND=#*^b)h4nvwUN?(CM4Qmj>U5osA8y0!R=N z(2aE}0ilSxQOXi)1hNYwOIlX`aY8&Bma4EVCGzb0FJE@T$aDV{35xF*(g zzjefcgR^eQ|5~7qSQ`4AZqJ*_%Hlz4xv`SHvib3FWT!NShfpqjZEK4r6%`j3<319F za}@z>7NT4^v=LO*m3JUH=)?>dj&6U*Nt^?p)6sYH3fx2RmLE@+a+`97)=nFiM|VUB zZ5_@J6p3ZfAk&#!R$y*5{yjp{38$;;VrsZ9% zA)p4RK$=_(xJVKfn3Q*f0sK#vvyGn??>j%8Mr)z+9@-vZ1tCV|DJX+>dk`!>i_(;5eVw%O`x-JaB}hmzrJ1yjw{#_ zEno)KLarM12+sC!|T`>ki(=rtxxjzhq?vN2maAkl&zQTDo}gI{@F9#UgB3 z=tNeOI|Z!i&}lLnR2o~sEgECgi)Ssati%`mRd497JlT}vP*qWZv||dD`V=f9LQ#_J z0v--#h

    3<`{H5`jNao`{+I-^%DezXmdh_&-d_z7KE6GsXi){-4$m2vPrRB$xS6{TYk? zNy8$T@_+iz$m@wzw33N+uq@f|eTTtBQvYKZA|PSgsMY z-G&RJw0Z51lac@kKQ~#?%p5(2!A*#Osmg;eE`I)0h(*qOo|(^t7JM_G0ra~_CVR)c z+{~v=$S8iC&2h9#9xbc*AXq*XNCz%Rg!2v@j>kA!TMI8BE6&8V*(q30MP+>lb^?#q zpI_tJ6C)i($bEAKq>G_g=%;S?xk2HPf)8kGV*-&jW#K*ro(m=?0=9`nlQp<4X48?+ z@C~x=Xumyrv6u*pjgRkXU3|y2Zn!zsxZ*3jZ8$jEvv6$b1&q5lIkvX{YF|-tVc|}A z@)~ZYq1gvGKi~D8n!dBknOt?Yr+Ps!E5S#0a+-pej&KT6Z+S9yPvr-T%W01P&UKh& zc>&c<(BLvwebD=15GWFuSg;j_Oj*|1CP-`gJH?9+%n{NqCk=;9_z@V6*dO5!<)zW; zi9vyZ-!N&1XF50%NTt=j(ra&L2O5WeBltR!3)9Bbi#O}V)y#>2sd-9|X{iSV$y?3c zd^dSq_PzylD~1mln?=x!Go&bHH5H4Q80BO>eDtUfS=2}rj%lJYC8DLDoRqrrlyAq5 zlOT=N&SF9Wk5xJ4}{jGzT^aT#>#Po?v!7Q5l_`D~y?NzW`Zlod3sih+;;MM%h z7~pU4TZn0q7at{l#Fj1nP?MkgdZJIK9Ad>?yLW$u`i5rU8YPqa*O#kUb?D(`V$s00 ze}BRC>l8Cqc(X)2YDNUY^c**EgV->DSrK>+;KD78E$*-3RIvriDRm^=scmC?KfVNv z8BWzaayS8}(tXv)J_KRH`PySKE`HAo7cKyqFMHr$vn{YO6+;{ds?qnirW#)xF%II< zVRm%K><8qtqOZWJ*_G~X_w4^cG_#2S{wITYMG(YhjYohRMhaU;Xm334*k4~-S7-Mw z&7?!IVtG+e$2?eF8)i~;(q%=}=Fe<5ICNd%%Ke0k_ESxw1qUo2`o~bSB4E$U7=xkH z^I=CtV71d>czZEUIW(pfLE17Gz$+nSy-enbO_m^e*&)1i0j{>I&e1e%d9wPV#-Y7C z4>AAZzhV2;BfoM|>`tTUiHVe5sQlw7_$ui{7mmQ~f zw6#q;X{@Gp%b~{nJ+U#U{x90TJf7C6lLGH%9_1$D0@w1 zO=Jxr`%YOyGNr|?V-2A~_9gr7cfF66nfZLa-|t_)`D0#_={V;+@8`Ln`@Zh$y6(qw zFBc}dbL|oW$t(M_J5n6yXM#5cb{w2P$}?uMFL}&*opfDGFG6= znzh%O^F;0R(MM=2Vi24IM30zIIgJA^<$s6=|B0ADxZXk^QT-XTNAJa50LjW`()G(= z9mb=kR_Hj7FNU_ZRC6=pK?t|eKGtg0biK3VY;)*-q+KX{VO*EU9CqUi3?;<9Qp?=; zG@v(&k_+6j0*w-q`$>FDUFt2Y7lLum=$AV+Y)D*h}OtrSdmYW$4%)bHx; z>4$qzu`=e?2Hhb@rbQb-J54s9B#b(^B{^frEiHsGHkN?5_C#-2@A=t~mO`>@-7v=9 zfv74_q6c#1=Roxuhr|U>8lIVj*&)U&Mt)cHE;35`xw^R_C|7z$o zXu5@-p2HJ^w69|JW8*Hf{#e?pFyOpat$y?&ueJ|d|+CiRy&%*vbLM(tPU zzg(&e*1Mg$Cto$fYx>s8H68oK%owlMrD!x%rV$=qdOq@7RuvwlmUASgQyakor-uaxt4E)C0E(8z=1@>1d7A2Ac>)$%XB#}hVH%;qqn&%L z6Q(K-lP%ZveG%e9+$-TbQg*e@%YsHY&pb0C^I2YAqC`UlRo!Jp_{LnvHz_P!1d4ku zidXQESu@%c0)m2tGrz;Z13XTR#);0r3jy(-u^Qm~9ktc8g)2t&`2|l;&kY+kD7AFB z!f5%%KvqMvm(S%UXJ{yKXl%c29vmD*vy<4KxCiTGjs^>VFllNdEn0ppKT4BG(+aeh zy$@8=@sW}A7cxcfGX3LxeIxkZh+EFUH%`;fr%|p39vZ+?`wCHMFj1RJoEK6LNK1 zqxblP13#zspS#6+`jAzcY{Z}TX7v-<_S4rC_#vbHi}vTeLShgogux}wYvS7?myOtX zQwS%{k(O8h=SYS5%Gk~4gSn{%txaLH1yVo~o8D8MH|U$>Tqf_6id3+jnVO2P;2|63 zMZn%uP_af1Gz+B{0oysW?Xee~Z)b8Is=Ea9D=aM<>2njCF|{^5eE^f^(P$sTb)~v9 zv{1;lV*+>1gFEkDzdjh=`SmL=u4#CMD2(!4di9&lbu^*Z(S5@V?NVjj^2Up?ku{lx zJqsd>bCyvNG*mL#JU(8rv)uhoINgSZU5G{wGd*!=vB-sBs@J6aeT;}Grz=w=8H>ak zSuZ*}L`FrK)FtXib#v3)G`c4ql_(!m3f25#F8M~MWQG#g_D};>{eq9wZ!fzFOa^dV zNX^1H)lBJ7C-eCu+z(+LE@xfMjd*J`tFmbF5_YAuj+buUxtJXy%I@^07qQ*YiyYOL z-8Jx?cU-tIo`xaW7slIiEZRUTXBMobQwira3$|89685WB>6RklyVfA!z?^`%;)QGp z8gk4x)Om*wAFjTE{zqJx?V;1;T)h&XEsT=eIJD>RG)Ar=K!LLj)Lx=q8O?ruGKxau^b<>h11*|KS8r7J%HFy=Gd{37-`5x2tbRi4Gf`Eup311p{Ny$?1I`w1FVr(iXKm(~4 zBI{rGBcYji%t6k*_;N*-FdTi5hr?tjkX6MTu_o~p%C9;Ne+UTB}+XG>6ws{2= zqvT>@V*?H;p|u(|GC8@3duGELBYj2naLgz1XH%;#E9-M(4x7RSl42@oTpJHldYB7= zkQ;bVP6q^#5vwbhe>{?o2v(|;kgHF%=h$9PByDw>_rVd*$gl*BSMO2P@zHyqopC0$ zRjc={^giMDybl*Co^o^%j;pDyOQ@Vv#w;IA;^$!)aiz7$7#f8qI>CaeG?0VC@Ghsa zBv0ur#kb1Isu46?cFDNj&xajX+iKqwEp9Mr@j;>$BVw}Qd78b$dF7Fc3G_Q%SEGHvVh4nJ33JD>e zq$h|?iPV{Q5H6-`uqpgrmIYnxi7YmS=HVFha%*R{<>%M zDd9g3DaJp!@l9tuhsi1K8r$LX=s{38E(WW>gD^hXuXi(ko%k^vDnX}(=W^}1Ln9nd zbFC|O?sY83HAN7~cb?PM{ zg25zRVh}B|p}N#q&(b4^S1hPJRN)YUoY|Cxpapq;)u>Wzt>riqAFjcpSlu*(DCo&_ zKSu@=NB`>;e&Ak9Pu1H^_O=Iip;_Odwo@H^{=dx;voRV?z)KfgirK0^YCWnTz5Ijy6NWcE3up;_Y zI{%mV0M}NqfMnO{Fs~Fne{AL)AqA~lQz}8c-Jf$I-(^siYu$e-^0nNgXU|bcY`;Fk z53vuCApPuc{Q#c+#%SIg8uaOOoUGP%LFO;3h|PDxMb46D=grKH+-^V8w|R{mS%=a! z2Ymf}4qj6o7L6+ih4Mqly%HP$zrN<4yZaZKv;XZy#GA*jdg{A8GS(HIeNS)puI$_& z6zwPaW85x$VbnJXQlB7QGv6u}alyc%Yz_T-n@)e}#%>Cn^|vP= zYG}^EnP}ofhnecq2rWMf=pUG0<=i2G&bC5xx{B1<|9ovLG$*Orf)Cl@X^2ndE ze-qE=ZZ3B0KSlb3^d$#k4*W4xqu6Wg?%Lh4WnH|mtgz2n$+O$K6-f)vEsDGuEC!_-AF7?_?`)I1YGP=Z)@@(D z)NB-G{=RiLZw}Se`MGmfgt}Kshla5##>?iI4{(k7hzw}&_m~*zi8Gx>*x7g+sQ}on6O;q{{Md-P&%^ z#($jD9g;ry`SW3pK(_guF(b&(o_!lCk<`{HN&$@x#0NKYla>>HlWclKWAV6 zx}r3hq2d*LCb0qD{M5_dq!TlgmF-N`YHrC7hp12sBj4(7Olk)wqe8n@S{Ow|H)B4K z*I4~Ir@i^~Db#oK<%7}BMtAx|Yg{1=V}1#B-S$TOO^@w4?w)MN`BI|kn3$ii*i zOP7>Fci-&MRvD^__fu*3pw8tTqAm{vu3MUsTE={;svO3Mdyzpa8*{H7w zO+>_tC4g2JrW4ku!uc?tnuEgZ3Fi!`7L$R zk24bn8Ae;-wU~FvTKe@mBAnl(iu%fZc$ra&B{}G>MUw2r$1{E#DF>nBeX3|zrcCQ~ zE34d*cU9_T&Yq)xY(JEFMXtZa&Ik=Cj8^stJjZ|CaWZe*(){D`$Ail@{61X6WXQKI zG{>C&kXrgP)7B&vi6Z)$_3M+L_2i3T0a^pozjY+gF9kA{uieX*!h19*OqzREAP%0u z>5AkM6f=avKPm0SK~ zt6WZrHHguBjbAaaga7ws6C%@Z@{*Coms(vbpHn(5A%sGih)Ax%SH^;NAg4*(=;uYb z)~EU4)rU{Q75MlAcIe;X>;I6Ei2jYWft^B-HU52@syGtnhJU-B2?O47;!?mT+PnC5 z81oC_t6ThbT5}mtr=%epWh5x_rFH7IeFhO@roc}hMKO{}Lk8j4Wb;&#z+62s= zY*T82;f^$8fBXvVUT2X5ckB+Glafx3JLrO8UqX=?-qK$bml`HmF3M{U;k6QHWn?5Mi$1)YaOPPi``9t6Mp)sue?6MD(~_jG zuk}PH?zMi2`Tm^Gc(k}zqT(CWU;tyj zrUKYCCg6ujzpUE_3e$vT-c?4x4KEXGTD<*Bdpjix7~c2IGTI7z9knH&H~df2ivTZH zX;awFTtjZ2o)xc@F^$Tnuo}qn+hsQ^G2_@{ZW@{VqVK!MKsdv@y;khV682F2tGb$a zsy4WrI(EHhRSX|lP9zMHBK&?FT1YrBunq^$@Wr-J04lzP)%aK<%T5@AFR#5Y=LE?7 z<6=k2(6%S><7%&01Oyyk^pv)nJ+%I3;&E-C3*-mlcrL_e$JG+~*Y7Twdj)Q-Gkt7- zVCxwcw|#da40%LiYD|A;tS%2G9`{xs{k&8KBI_@L&Y21Y!=Z@Kq9YnZ3drXmQ$0Zx zZhjrbxeP_xn15%#+6)FrrtNXzj)^oJ+Rx*&TYw(JjGD2)OYP;OU8jLQy;ugI^Xd2yp#Ir|r|r+x~f+Emz*k z=e#38h<3Y6OTA2_tqkFl5%2u`nGC%>wrxTVo99dJD@ElG-|A!+G8i{wT1VNgXc_qP z#b`qm|0o$Uq7gV-*T2&Z-YWIdm<wV@uB-*1ck71uCd&p<}^=?qubZ;10?8S2ype)ngEdQ9^R;Ni`75GcX)XBYbDd5FdVtU$JNEq6OLb;81wzv9T) zm|q~F;wRL*A-j4{RZv5hpMa;HE_~_L9keJ=duz0|K=ke_Bh2CnRAvJ3apuCc_b@mH z(x$2&%wxi9KQ#;q%FOI+nZ^aD`K%si#OmJ9oj~8plrh)=NllyMY)T`oF)Ry|3o!3} z6lhMVa#Jz;s-%JU6&2^dj1LccTW$A2+e=?te8ojB;^@=!S_|dg}3&Ac?eW4^K>)oLrY!n z+miVt_!G>cUrEUC(M+Xwt3;?N&6^o_Calxz#OlrX!?})ol!pa0-rb`}#jqIqbtUcJ zOHPG`NCn8(o?R+hT_+5;Go!UsRMN0#5^;Kw+>orMkROwZO=}z*2;5#{OQ>-HxW>+W zZFle7Ihbbr!3ovAcvKS*OxCpL`z+AE3o)NU6DFy7W<8?{gg`0%vc$1|t`sTi2DpE> z=STS`O;qT*9PR_^?QJC@BEqWsWZScd^IZ4d$UD{0Bpii4N!~XFIyb*@deR)7P~#sj!VNgF884RGWMozHlc@N7BBg;yCn?TAS|n-LD|6l5E0 zLV4z5B!e5mhBtNu39)CavRcC$u;c_umfq_#`^?Pb|jqHBlXtIJvZ7&LJ_k2k1u63mQ25=8<)heF75f?Ke6+BbWyXZ|p z%S%<;*~LX;u|SMb78gryW1xjXo7^S$i;zi>I zh;PXP$&{k5$Gv-*)v5)yRyHhlgCCwo<>#ZfwrH+JQl~bn^t^;7P<6yvUnXVT|G4)$ z?X$nJl}6a{cXBXp6tNi*JSQ&dzd2O=$c8_|B7UUJGbP`3Gr1C`rl#iZmAEg=n=(sY zzI<6ya#koW)m&zDe7uh7hTL42$l`+uAjH~`p0yfRN4qhS6X#v0$?|y4BV-%?66ke zt`@Qp4OT=YRgFkiMcylTE#phm#d3G)W@6`Ol!pqc%)rD!!{`yWkMp3%&^CBr4J#CM_aLb#&EqY|Vj|)B)nOgsB!H!4IeuJ|1_*9q&l|KLTZg;$dx{zY zAl8dHb@z{S+$LJ%g7=(v!&k%qu$HuSA3$X&8kvT&5m_PpljUn; zAsex%nz^8N=%ZRIbXzh~jplaDUmMmK?DB|N2-+T+-St}XiL=+V)Wh^}fW_jXqG!6$ zd=EBLoQHi#s^f9RBQpu-H|!?j#Cxiy=(E1qoF(BO2z+m3D-BKJL;_nJlfY7RNY_Hn zICO2Fz*?6>1i16%i}wN9rL1qsc}>*NaeJt-@lHkoSdT=UI}f<9qZ1z*4HJwtc}#a8 z4ft(S2e9B|;OXcSUAXai)won}Q#7lw1-jDdtT^W}Cu5#sCTDNpQM_Cov#X8PuV2sI zpT--QVqBk`;CR-u`+Y>IMv7X-TT&5veQ@MgN{Gi9a{^#5zVgWKe&}@S*zFh?7@+_4 z+iqsCOX}qzvF)2TN3`9kuFJ98b-Y7$F*hT(3=|pk%&J>(7`&ifvSVxrg@l9>qpuE7oq%D?CT` zvl9>hbS65dz{r~}_SP4VMw;BH=~;pNw)xt)pEeU$>{CV z86U{rf0|QKmwI(liwCF{Yxy7bFd4kN$Z|#M>4)kzanmX{qbK4F2QY2uz=3$RxMXev z_j5`|T;A@D@l$9}JjhxJk?7piw|D&EDa`eihV-XMTd0&^p5^xD4a3>TOE~HG?6A_5 zsex&K>55*m7R+L-3^mbvWaE!oapJ!8{*~Tc85{M>z_Y~Y^mxw5n%`qjzUTT|CcDI8 zs%e#r%)qzpv-Ck2e1@luz)9GV077p6@}+*KrncQc7NlVM7>&@ky#FR0+I;T|9(^|& zeZPHXbLhls0utf}g=*C<_+~F<_yp_a;8Y|REQ%H+A>v+Kxon###(hi|um0t3uy)l2 z;!r9rNQz8%Y;}h`b&06F1Skhh>X|j&nPU|Q61x4pwqRgK<`=a3WYy0^cE01gb@a#m zL7aZst@ois0z^tw);m78KZ=WI^f_j3NP_L%cz7R zzkLE~+z5;d4wIMDwAG%c`Ifl$FLG@l5WXOuku+GzzGpxJ^x=hroxS}W7)EAoy@(vq zsTX~_hzGKF@+2vJ7eFNQR$)JV0G^qaOT46ICr-BG*dU`v=MPg?&_v3)ngsVOadB}U zp(Uec-mEcrbW@XS(TkI7{T)yr$ils{w%{t_{gDh$tof4l=N(JMl0~;WCB)-)HFCyShMdiyL@9{J5H* ziOG52jw#EKAIO`)IioPwO3SY6vr{($S-Uz12BvlARDxQL&y!w7mlQ$3|2|5>g_`S~ znlXl{c2^lXT+SR=)4qECiG$6Kw|n;N`B3PzQOm8eyz)GO5iABd6Hv8cLjm@%n#WE8 zK)JQYeP-%gJAy1|QPPr7C$1XyG1Qy@BRTJ6Kk5`U1bh0VFX*0z#ut1DzIeJ2*KxH7+8rSwOjhL0JYB z!I;!-_}9(lNaLHRvToA}kj@By*00+3^sn${AU|j#J=@#BP6;{XNq)g~8U#o!Rmq>V zYMsa-0nF|0z6F+ek{Z_s`SyoL=Lx3!vpkt*UdHj=)7m+cT^rPX zR}PQlQn1|GxGW#?TcdUp6DE(MUxuk#DKfByfa;C4 z4^9S1UKSn3xNVU);Pwjg^V54~7A{O|fjV1IxHWS6f$~*PVHFc;Y!4P_y^ZSiQ9uAODB>3gL#INT z7;3vc3H zJ{OCFTFy|lPtBeZ#kvejrnOmHBikJ-Koy`4iXKM1Nx%oP)ZRDLNopPaK$Jb;i^WYF)a5M;f(0v?7d}8|Lvy+J})t}7D#U0g5 zr<;igvK&ChLD_Ycr$yta$&DBwiA=sl6W&zEvuvCrM+?0M`w&#qpgEPex9id&fjZhy ztHh+vP%M6s;@bI5jZis2Cw@3cscNM8t$n;?pE|6deri+4^=`>@!`3C zPn`)%^^HS93wL*_&&;ZL&xbEKG|aDg_v%$5ugL^yB+P2%>apR8iCXK+H)M-8i;MHx zjya`=MAJ4K6kL7z$}9TY`_DuA^RpFFf9yQ`$Wh>>JpgZ2yZXSuT{VO26B5{EkC9} zmAHU7VuH;=y?HaL$s3@IN=1(1%D`HkmyszX^~j?Hm>uiUJtQ#HlCOf^H-ae$s)Gpf zNDvV*X3|Q`qN}?wP3*Djs)dgRcrT*;6-%XHTo%>$^5v}u4?OS9%vrSuKG;8Nd*hjj z0}XHT{A5d1x-f%*Yf_Sj?c;oGfnc87SuUk@FoO)l{NAh=tXH$_UwZtlW#YiHo1IoM zpU?8+)MUq|bT+Mtr~cy9pfH&ixl9I((+LT18_BoXK5-LqU|;!=$L>#Cehh3F;bgH% zp{WY7crntSF|OCquyC&8%5b(}6hyz646so3vPQc)5{9l18gH?L;pMvI1K5|$9Ljnqp49p zE`$4{;||r}en|S;Z-9YJS9?N~f0M$YBS)S@<~5AGdZVX6&eiFR^Kz6d{?YO&3Mg^H z?8MV4>I@^>2hk5n;eIjEB!#Yq)+|?+>d~C(bxax?l{XkvwT}1d%a1fUh4rhA2hn)p z06T>p4i-7vTp#e#@S*35{Q_nZM2)q?eP6cB<}c*FI4whMg%%SnxZ`0-Bcq&pp>P4U zl6qSmuxYOT{b#~~L8|v`!Zf&g4GTFMB3rl#Ty%1fw%omvKAU5)E70lddB1Tl9SOaI z0(GJHE;#Z4KQnvnDjYD_{fLW?XNmC(Mh|u28ya2od>KCiI&= zO}?vhh;1@I|B)?s%2Pwo?p>w-=FM5)Ecy#^Cr#jNA2T#BPZ*o>2%PZa7^;ht*$KYY zq_#Q|g%vAV&1cNX1A;D-F{X-qy6Rg(HF6w|noQh5caPZ7CvV$g=;QoMvvr1NuxhgA zGz;}8Yg*>fq~Z0q{g*2ycCcQhJvJ43FIv0ciqqmB)$yKPm2DFH_V2d2@hqvU(Tv*O zx$%c~|CbHhHBk~%zq(e$sp)-Ud+I_%zBi(5N>G>|pJ9p6LAdSz`juvzVq<(&t&wiD zmU61LRDvpbk}R{9pT~mk>cmHx#M8L8ie4oey9he!NVLDTTAWlk#aN#jVwQQjNPpqa zl61Zv&CJUWXm}FYHMf~0$Z5RwbdqUpnyRpu%DGFkI-f&d7x&d&I)>Zl&d!Tl)x5QA z|9Z>SRUKuOVoj{!v8nYLgwUSIZ~1@!$uGVWRh3CFEgXPgE4Z-munN?9ddF3_54Ff} z%??hlJ9~X-ezZQkVbX+aR8@W9Ssq7`aQc~WF2k*656n3eizIlIli@!)5*;AyiLTYxLM;G0t!(K=K?37??On-sOijkc^5)C{nHa4Q* zUYzfhAT>1`5*_P*^y!H#oM_cW`mUnnj=%0+PU`VN30cuf%vZU%?}-2rng7^bI`-4|VvWe0wug3A z4q;g8VU^0V=H^lS{%hio3WW5ELt;HV6=t3Q5QC$reA?4rsZ5y#^P4n)KA z5u_dvLgBIDc;m(mKs!K%ckkTE%nGWo{qU#dZhx*|A!OUv=rbZMar3xux6EJsq+02g zp>o0DsbyDoI*dDtpVsEFG0V)mDwW4Y)>x127Z_MNdux|@H}4Y8Td0u{DT(U?>9np4 z2)3p+Of!5LDRo}Qqi*}z0dw32xw`LdC+r#a{>4#b4r+nB+0qswlDK6jgm;7@F8awd zfF+k02+GIEHGEdRwUjD=|A2tVqa)8m*KTBvi$wZDNj1!xd1-kPFLYI!A)+`6z7YD) zB%(<+PfTKCe?yvG5GP}j(x{B2w%~y8q=Q3vvMTv{<4y&$ouT3`g8!l%$UERX;0e+o zT|$4l%|bhphR^g-!;?#9)Hc&2+7kE8f@w$*F3wbRTEVVwknCddU&Rf zqj0n`srWn*n}~aO*-g_;p#P~l`D@iR?mx$me=&r_4%~<&!6iOmB+mh$q>@i64baOJX>O-gz<^N@rLEV z_x0)NheXnb0>^Dena_rYQ#m2bDY=o zEl=ui2)81~m@8_d+FC{T;#@6RF~f;g*5%Xd zmQVsENi#GIXD4L=q&psJE1l@qO4DXyO!E)CkTO#quQAjbiq2AO{Z95UA2qTO=^0Xi zB$bV_Wyn9H9p08-eepuZ)<%fIf`y!reEH%I8%sz? z%4>00sN4W;y#c2}6p9lQC>x2>MrqC$-;SpjwtpBF<_I_;r4vO2!2MV}2v_M7gUi63 z@Xm>}d{^n@c*^0M4@+<7+$!Hr{a2}VIE6$i{q^lG>#0k#*Nh$sT0|y0Z4*4THMI9d zB}ZW}x;wl&qV(rU;$j6U^%$gWc$So^AtEusQgm27v$)Yx7;u|ws!V+P^hq{R(JiabpsgUVKGSHW5sUWo4=!6*=jZ0GUZwQHmOVyC>_Sg_ ze}C*Gjv11$>+4nN}OeQk>mA8h9OUP}^E)&i%pIwnc;2Ni1ZvG!g8MLvr$=#Xy zxmS)(S9ccVGBu^n2ibl#jl5Jwxol%fN^#ki?+7K#{k%+xmz@ySo!nnL zgK7d+P@w;ct1lrwKlHrQ=ZMBVh5aVr1*2yIFsjvl0S{ypE>W(w$8uoLzf|28`RxeQ_KRNh&zfnEwm^D7DA3u*Y)rFIZtCbicVU!Z`PTxs&bT9KAtqA%5m z>^Awp2?}7dqpJBVU9{83rbaI==dqf#zDye}nlew~DljPDV>s)K+Z1u6*o{Hx>t7>* z-I?=4Dn#}!T(k6aD2tX$I}Y?6oofe-JcZEGFx)|zXEk6U0Rb@WrbQN~Wq|kr`b8WY zfLS&`qNb`U8G(<5P9iWU!eXFF2YWAHfAmy^Zw#MkwH+y8#%k3$c1ZcBrKM$8?GtlH z>u;nltuPf*K=e+czbye#>CMs6(Wn~El%WyZvDFa*hHV&V)+w}<9WqCb#$!oFqC6vdKv}6&fQ{$JMQlzm|nqVZBMR-t-p9({*fG?#(kZ$B!jY%V=FTl zbpy8i+1&xqmN?fGklK4vuIdqg4XmWf%93y>og*{Qd@wG+N8mB8mF>eEVPy)ylb((N z*mZ>DlLJi_eJzslte@9a6zm`vjMSr7bP)8@?`dr;ooLtl2n)z1P;0DNt*n_o*4A6n zM@6gdcSz|}z|ITz=H|-}XGD&IELytr3C2tYyH|e4e)@U2xx0Znl+(qSHOE$;S4PF+ zN!KC+>yb*cy0Wdz*RwB^-@kd&SXE_+BqVD2YvyF1C>d939ibgH4|cg%BAxGS+4y#Y z{6Ld;t?k%{>#H|97NM$r@+2`NhfQgqkhZNA97eEBPoDH|yAkEPr?~id)3GCsi}7;v z2UM?L=WC2(r{)UTl+pgcoXDu|2s_nfMuo2XBZ44#Xl!T@EIYDwgRyP%t78Qp+~p6q^b+G|MhZc z-#%lZSyQ2!s9jBO0cj%VdFIgdB$@tvbML25PjtH^`E^uP>kKNwq+2u0|GG&B_G2vP zVb1gi_GTu46`G!!8R#Ar+%oVUaE1SA;2Mi48_x}m`HiC@L}w;*rY{I{&3G;ka~Sz` zD5lY2$XtwPTlwPA1=h2E>;D?tA*HdJX*TeT-56#Av_D5aWbp84#@eUcVNdCw_jM?a z0ZHhw9I5pJ^P-QhT%U6vts{=m_(6dT@rCUms#%Lcb7TJqt7Z+U7$(_|FrE{N42$T- zFli!()AI$^9~&KAo1_A((F-&&GJuA_aoFoQR4^Gvs+1+Ttn7RDegb8yw-Zqon$5+j z_Kk@OpU~R{3Cw#|Z>pP;)bYiuWiZDFa*5D$aQON(pw8KOn90sIAXT}7^0n!;7W>|E z?3W;nQTS%}W*cnx3jgpK>uCRmIb9g#57@QErKzv$u6=yycDjA5vcq&8Nv$m~ojlfX zhx)eaI2SWy z=JOaaCbLM@#BK=Yv74C) zEkb>d9>is{UFkNc|BcnMY@O8@ulG058`u5uV8{^(*Jayn8T%ic7UbVP-<2CV?aMZA z9rt+#2?B8GKkIyS&yt!rk3_YttvI4uYKX8G?0kv z|0Xqx(knx)LTb6V+rym}f)dO?0J$+eq964ZhZXJpHxr@9?Wc|i3C&}M3G69xCHW`I zZX@856JZ(9L1MrF=syPSqfY`Tpi}M4{m{j^Ei+#j6>52 zx~1j38v#oNp8r}Ia_)=hHv&b6g;#DW5T4{0+WUqe!ZeCF<5UFDun-;|aN zXI45(JmucPPXelP!8XAkxaHVWEm9bN$ia5aX9tyMJI}L5)|CErZ^A%8B%K8n}btxqg8boqm*3e$r`vucg(xOAR3<15Rg^zGyDy=N_U*C z{EYm6|2|{jNG+&d#(VG1&Z@|YJT^K@koM!?34F~nS+t9YOmv7)_d{9rMR2GI^o+D^ zf6a9?%X}C;%0PLvQe?kA6jK*3$NoKiChH&QeR0ODF>k;FCvcC*)AqF8h3jc*%NiSd z8rrgV)4r)bQyVcf=Wqa#$;Bmq;-VvTqyc$WCTIm5HC8OVPph$$_3KykTl}asRvTnG zX>b~_Fa*4{9CB1giJY!sR28AtKqUJYIV0z2IDUv2)@lFbh6ZswM27?Hlpf3mqM=cb zICU30UA;sD8Js*HopQYFi!+-gtQ0=uyW^bC4XybzF*e#!*Sg+n{9dlQvXhX4fK2dl zO_p2=IA#|4H*jq1AO$&_a;h?)9B5YJ1+X8Ng|8WPwLP!8`)7i_o9ZIqFqHWt=9mf# ztzB$O-Q^qGr1q1k9DYJx$FGq*$lmK4Q0eb)Hm>=jU~a@R%lPi|*+CQCw_~th=PJF& zzLKk{5H7|c@MA!A98PM*%I+c9)Ow5mEf-xTr||mEKtf5=XqWa|2S>bc=SrU-o(2|- z7g9-(e^b37jGD;q{W@P3U66@+*Onh1o2B{ep?%LtE88*7tVf03q{&thyV=nhN3&P- zHBoxcin9$XnSvdpCM>6l4H_fHRm<-m&-|Hj=0#}5 zewHYk0L1Z@ggLoACv*~oa7r2+pojb)j z!=Sv%0al%N#q8nl$R?VqgCJupP5*5Yq&$ER8^JRR;?#GSfAk901tn{{C5gwfSK#Ev zZeY2)iI0l~-OKj@@f9s7@M`hbVE?NMt{ZyOVVO(xlckWmg!?WlUUNC;%FN76V*WAx zmbNzfGQ?vnKJmqg2(|PZot^+tw6I){5kKIODAyk6P0k22=|gSBbuZ{!K)|2|Hg9pMS=TqPzS|QT0RBQ8)|iN6ZD`} zKe#>L<$L&EfsctZxldqGWXqNkX^t&LOpoP6PaQXX^j1s=LPU&u9AMP%RUBOtkHn7M-&G_!mVf zN;wAqn{pJ3%~kV1%Q%0nEy$9|siKDUOWMnu@hmzo3F7&`C4AK~RO7&~m!uJ!L%)9! zqRo$G{GkpcYUvXs;eEowFCfhZX|dPP2~+LHZhvHCVlqhN2ZvTfDXp8|TFCJ6O|c3i z&1Kcq6jh14y~eH$wm)SU`s*;BVriR^gV3uMKDv&uNhSX2IM8Umk=TR9ZIN8eO#5-J z0-wV&zh>8aJ}{pja7CaT41cH#9eQ~8cA^H z`l6&G1<^0^UCCPPexnO8W*{UA*D+aRVVOe)=4J73g{RM&g{kGsraXybaMSdFOaCQd znnYUnB_{m$m_>2KTG~I$$rB ze?gg8!Ar#HM5N>%#?3%Z2x}II=*4IEpvybPrj<7a(#Ih?)hy#W7^NUF8+#ZD!)l-i zx}bXo;j6N_Rwjqqty=kyXMkhc)Ld1!@`s)n9V$_(rJ<4KLOQy-qnf0{pxWE~^}kZ> z(V#&Sxq1Qe^AI|ePs&Nk6>V*c=mn(<+fQ9l3+K0t?af9pU_H>}4^9rq-KZuKZ-X^v z+SlGb3a&%qN=Own1&W33#(QIge6=XYbyN z*b~(UXV(GQ%UO2xzMyCoi;j?BO#-EspqJiKB5 zWf3r*>S}0$1|^GutX0u*C)lpP0v4AAWw;B5KIm_S!2Cgh_SmB+e$W%{Vi=qA z8MJ_0j2td@ zLPJ;S#CzQx>f3&N-)-No@7`0SKfbfxXV#X%TPr&HfRrZ|(mxQi_SQnDMKCV(=fS?> zYHD6XZ@+f{Mmt{n1(b3?CZ%b0rrxq;pJxc4MZh?QtQFfrU!$Y*1>8LS0@Q@gE)UW2 z@Ly(F5zN>JLPEpf3vN9KM$(>-xRYG(-{<|<1v`AUK8u3!fMk=6{TjBc3j52o@$Jl8 zz!QFO66$wC1C(`e=Z6zZLh!ra6OmQ2q(k84$H#8O+{y1mb~wup1C)jTF5yriKC70l z=QeYz5`qB3^Q1p;C~CfP8WYU==Ph`3U>ws<`Kg(iV7gcGH;G9+{y0Oste=5I0>wt% z*WRNx`^gCt{CdTkV2m@PyhHpUd$B|a4S&EL$R{Ix2@dm)RX+skKR#FP9U&yp#ehxg z6h0`^U~b+44zSYz7sHp{IL{Z_!!w3GFyY^(A=(9VC=ShMvgj+FhLGoQpb)?=$yG^i zl`t{7JSm0i-&iEdXkt^q3JU2RzDCu<_bWl-lhQ@|hVXDWztcdCWMFoOfByB1F0suG zt|F6p6;bM1+4hj*RNK!eJ9ik@e(^#TJj*Er5^ZuW1Uo2RKprM;PGBbK$al;tcoP>e z2|I_QFlHRMY6l6C)g%Q zTS7O`aC`ehXkxoDm zm2Sk;t?bsVVFku{jhx#}RV~Y@D8mph+>h zQjZmStnX0^Njm!Ic1+f#irf6lUT_?SxX{lxIL&2SHt3j>(HS;-bGNZM-5a}dgP35 z#ncS_vK@fAvSr9dvn~;iZ~~cMLp08Q)zF*CZmi2eQrt*<#>vQ0`iAL-m(~MeM7!cg z-SY3J61)B&ePm5NxiN}^c^xdF zPt`3sRscUU%hBSUDDRi0N3FbS-|;6cm%-yl(*}WP zS1egu1S1pwN0)PHkMyfhIHDN_GWmIVzpYYoZ1M+W z!cqYX&6h>m-xjLmm~ZIWL_;$+|CJH?)0&lH;=Hi@3$Kp=yQVkBNJb4aQE7xGLSNo) z8y>OU$Cljtm0hZW$_lm*8+O-QUpu7!;(5b^D2;n>-#>m?NYGAbQvqZd3!(E3T9)y! z!>l!rfV)2fh-)$v?Sq3%Jv_}48s}Vs6LhH$_rz_*Ol7%5#kFeM_D4r1x$;fdR+z3Z zTR#v!%Lp+08;9!D1I-MXMbl*7hrV%+id{-|i3=PBwUS$d1Dedv1~=|gPcwD)`0Pvm zUc|U{-?@kGZ-6>9uP>2Zx3{-jw7oF<@EP8a&>A|Fhr*MGI9!~pppMEUX$w7;^q1US z7_d(#`pfqEX9C5D3&=90#Ze4jFuTuasoC=h&2%sA!5|c#0vM z-s~R#*RD#2P@TEQwyRKzl6%t(>l3!tW2Mfy9J&N0GX$-p-?j?!TBzBMtGknrm0VObs`T%Kj&Xs=^g$Xpi_8tlRmflnUwKXyd(&2X-`uR4p(e(5Un;^gEyj`b!^=I#I9|@RC8p}*(9#UiO8%ay9 z3gshrKToeUm#Qw`akQv(NgXfR)eavDwTqMcGXs%`5ZYE)G)M-pvD_*guh;O(<%2VB z<)SXq|HduP$a3Y^(6&PIjnuAe=GEPG9@|-C&o-k;VhbH6JO=|>XyBbDjY0&HkNLn7 z*Rc)0n>P~@tA)4rOf$})qC8;?ij5piQVK8G{w}Pb&+~PSyMK78WQ^ns0MYUKb-mQ} zVqN!w+U*^}$3|>VWkZdpE+G3KjTBa)4cBMC)shXw;;tDYVCZi|KLm7*#>=|`)A}*! zPjli;t@S`K!BJ~1C>pKe^WBgA`T{l~)pDlPJ~6_)3*v^(?>I}Nl}n>LvPR^4Lo6do zs#7%Vdg^m6n-6P+SyV^ANS^Ge5o_`f{Wv?iI%>33KHu{!mxgGcf5nBRxVMJ_ zng(dhrnxO?UOW0Tg+%o5P%a$V9yUdyAJZ^cJA2St)L^KaTj)JnF{OXKb(#tb2}!c0 zYm}Ekcja=tWF{Q&Ja>`bao=&?U;>u4Ca(<0srL^v;PTG|?_T-7PMJ5`_*0*{bF@+# z*8Q3+v^zM0BDE_o98uE-sW#LyLTkF+5Oce*Y~gd{-?M5Hwkk*7dFL6jMt;(XH6(4p zHnx|4KI3UGu?6k016Nern-HKTz z49W*$_I7x9xb0V4q^{tF)6vmY8zMJH_XIyUjV=S~R%Rz@@G||wh>@y%7Rp1=s}QJ=ekt3OvVZBbs*1F4*_5oHAnk2Hl}s zQSv}v@RM5=K|ZO%i6QFB8l=OWOf+vg#74Ym+x9I8=(*xzD~M_1FOZ60U+5T$w4C-o zUCM7C5_C{J;JHnjwzUpt{$#Z4>2>QYW8T-+IhI8mvFlhK^7x*Jx>h!O=3pR3QBf3Z z2HPAaTW}c>)kdVDtx4d83Yk48sEK#VjsGh<}z?d;^iaN&<1Kc=U1#&mC+hl4rF zy)cl2<+xEF#Ky*A`yD@WG&IG^+~+PgFE0d~W5CETO_?Oo)gAZCFr{nwFNs=U1z)Mq=|a`~(!-+LuU!?At@*)?Jr= zI9&YKEp31j{Tdb(*-wrHHm&opUbSY{!^z0Q$xcJf>U@>!PEWgQ@^+Kie7wB!3+0j3 z=kDJ5&9zc1@8fK1WbW6m2Il4tqWOU;g|4oPA6V-g>dyDMz2-HkKR}M3Y4%XJOQf3p z_9f?aLX1OQg0kXQ_-nYT1U)3t@pC>IdnH_9v}gYF1)Yvu%M0FAYc`DFKF=TP9Av7z zR>s1!`SCS{GGmX*m^|9bsAcD25CyfLMMSIlbFjd3zeUd*hM#o-%Inh&okZFPSj}vw z_3`z6fCFD9mwp0Dt|nV})GK*!gwiD6on z++_BCCYXb7VHXn<`?C0(&)6e)s=K(jd?54iK|AvJ@nZ}ed`iD{tFD1Ttj&%TuEt!; zxLp`$yTAG~Facm}{!Vq!JUN@`NLH_qki^{i9qj6G99zAahoXGGzcP0vbWhoeq(pO! zXLPEyOUzbOrscnor!tUV^oB9tKlq$gzG{Gm#`UOz-d?$HuXao`Rcvi>l*vlaPB`|l zTCL?}313T`TXOc8rhXum=0fL14d+;sr0MxM%Pz~{w$?`(ChT7Z6nA_t0W6k#Y+ehi z?_{kTut?z{LwH9TWnEcGw}^q&N=d=%si;~3x`N2$?+JM6`jsnBo<7~o5hxlLy#f=E zEfxkxK7ggxv*rJB_TGV1_y7BNyY2>+&>%$_Wh4s6Y8<1KnaVB=86`QC-9{=6rEsW| zJ+mdFK|`TqkK!hAtRx}(cfHP`b>HvL`~CfW`s35PyEtC2=kqbH$Mv`_YCtX>5ZOY^ ziuLqL!4n6Q+KbD?UN7|;ZN4E^X6_!eu<&_~u07R|ve9Dujl-PD&JYeZxU63EaPb1- zr*E;Wkh(5|w6xj&MwC8b31qh1>0q99Lg8ZRS4Q`>S4Frw%j{aQEYSU!sA?$0Df7MN zQ!id>!1A5n?c0|;_+w484M~?TU*6?LlUliQbKDq$dc=;qv}nOwxpa}0ioAF4+!0p% z@L&=3Mze;dX4=DtdmrvQ6Hk{`A!MZU=R!tD(ca#^HLy9ex#B!ym!ePe4p=}O6YcR2 zdap~5;z^U!TL?5mlL9yAMvlpoHZ>EKU4Uu~W4N+eg2tW0vs}r2bhs5!XJ1a$eCpts z>1|&|8IzWI_mbwB+}vE~V`qGF0ap)v9McP1RxWLCYnw55@!xH2nV4h1jU01R_=VGz zoW34J6?Ey+Y!jLke3=if0JsJbhjr`Ty?VvKC<4B}fBp3rba22APD@WGaOg4v`xL;8 zSzmG?H)1Lcpg9}(ri@4JkX%$?{3E=iXbbuV4#~eE1pa}a9!0XT4_{T4b~Mo2`!$NU z?_`#a-X;wdp=Ha)fditx4I8^X- zYOMh{x%~rR)YWYI9{PIi?_p1Ym>bFlh8TuwCBmf;};*;yaf-|d|Ff@jke`cJ&jJeFDGLXNmXgz0X1ug@zl}&I-;55 zEfQy%JqVecV1NjY2=6< zDndRBwkeE!EA>_Q`ijstJMwPDg)OkE=dXS9Ena*{78cf^-C0+ZS}D1Ylbef$NhuUM z3w}l2o5S`RX!B89aCSG@opeLNQoAF3H+`T%O~upQaAQ@>a}a9!DxANJJ)_lr+(D$n7z4;sA^d^8J}z=X9MITgvUK9 zmkEO8b9$gr2!r9j+)cWyxLB{mDi|{d8@&Mn(uXufZ%CivM^>Thy zRyF>Mn3kU`aG2fE*?I2VIX73=fKyMBIcdo%weRld=tU@1?4Vb_`)*%KE2VdzF-sVE zw}T$#*mn3>X7iV$hiP}7jJ}snJys~E5z~9jKCSldUi0z+4ZSN_5`qL+Y3h1 zdR$vgyDQV{o%E${nkzduya~7~XObZ$O}TUTZWJCbx9O?vLF$DH8|}@_hh^$c=}fcU zzhC@?jpmCKL2|n*IsL9w$nM~gffk{x;jdCZpoAuG%?SyHuVf+i3xve!NuyY!^rE^t zQxS1qUS5btNGP2M6C$Z-l=>ceuS;2zib~{6YOkBr;T@u)HK}6OM^z5x7#5dakk8H< zyt1U{-RS!ipF@vItZ{QyeU}Gk+70~uRB7^L_U&dlecg8K^LQOsNWe4eeMN;~48wT% zb$y8Ii5&pn`lp}*iJr`6SFPfcyF+pj; z5ERjSz8tq~=4o4|nT-Q0X^|Lb(qAl?^EqxKhh3Xx>F7p0MO)kSf@lH5+>-bWQYEDU z-63K(24gRqh3X?$!!>6Pq{kJl{uc)nz+TjAIhtg#G-hxX)b zH{@4^i_aI-d}(;OC>N@>X%0Yscc@-qmr6_0r!J@^q$EBvn|nfoE|P{Q_U_&ON^4EH z&3E2hO)m^OmqHyJsGmC1S!B^Ayc6qSgzUU1`I9+nmqRkz+)VD41uPM%$~spsEk+8I zl1#1tEBg>meyI0=*PJJXalYzNIIvwgGM@Fw)=dJW-iZY|<~ZXt7ntWWkbh>*oSCX7 z+ZE053vM4KIYnK#FmQIdRO+Q75xo~OVx%z7nP_P&oy#4zQ7&~xMJ#{RviyLZ>Nd)# zOUsPzujljjCXV@LOpmV7tcA7DkAKj$=WZ2DsA*$$@wj{Vw;eQb7#CGOP&;Y&Qpme#r{&swcSGml_>RygPtHJ!M1PO( zMz^-{E-$MMEs>w$F*(mp`HF#$Pn^&eUWD(cc6DyqAWwa8P+47eCt^-$ z%gkE|oV71~>etK2-0U0gfC6PD0}w*KT|TvwF5>pmxJFk-oSRxd_V zP~uWi?a5feMS3z_#2N&*A29tZDKUf>uwX(~UeZkM+@8O`e7d7_`o$L^J{pdd<=pR2 z2ul_Xlw`-1YH`0gVcmW#h=w-dlWTxSTl3q^m+c!Pj+#FSpISz`DW5cNS#wKEOLd!f zs`!DOtH?){N+ZVN%#>TM9+g8?K1P%)D@nD4&540`Q3Y#Hhaj|F^}p@NO^xnfvqA<# z_N|mU5&CP#J?Rl4qi+O!FT?X?$+;O$YZqN=^3&?ISMnEcxqJ8SXwOINAPx@f7v`f! z*^ZrK%?E!{dm6VBTF6@|Ngt|4QwMw)7bHAAeWA59_*qfJSw3V~pnhbeYr&^IYy=-_ znElUL%xmQf1osgCK9NP3`mx0ZHZzT5&lF;?_DeBXi|T6Jec&&(V9WiIOmT$yR2v(w zqK)6z9h4*-)*EwQ&uk zm!J~f<3{AGsasCeoJ`u~_;ix~7wfM9)pN1@wkY;$84CHBxvS0_tK2Vesw>M5CsPJPzg%StPvt)Ii{=ps)syd z8OB*089)C<+TwqIs>UI!X49)@$o>0c#lt|x=v2~ITtpot#Hvs&j|+O^IWqfHBD-QY zfjJq+Xz9lXBA8nE55%93xBWJfsAsQsDER(4Vo6M;&+E+|-d<@)vOf`Wpu&j4Q^Oe z84P#lQ=jy1qx~pTonAH`J#yqrcQ+PuVS(o3<#lb;av>9C($~`y=$kWp_M+J;j*e*+ z!BZeccHqEA%;0UI7>^kdG@)pT4e`zHVIs~3EaJi+Lr6}}paa2$o0Ah68O_;t${iL|5+8hnF?aTCcrS7eVH|$= z@ZpkI(Pk#LHa02A$vr(iZwd?l%ORV~C6Kuq6%;=YRHS^zZUh9ZsR7>@P@T1v6+~Wg zVA~@Ikz8jugBacAiKFR#4aH+MKM#P`6bpaPbNTlE20Hj$BR~h@ZsDL7yd&aX>zKm@ zhTj8*4e!OZB%?Fmf)2wy%5VrM0q5*|i0xV&J0|W{YP_ddklX@U!(A?Dd$Cn-w0AGm zTTjc(oivGJ!#tQ67%z@z*z`xW-5ZOUxh z#-^qecwLC=DdzUEY$dMUW)on_T^0Kga#ug!vqg_RGaFTMBA|%Op+~u%FNL-NHV%dl zKuGqHR*2GGO_m1-VdC*`G4uI+szlCrTHHq1^hoHgbPPTJuztqS!n~s1O&{h_2&KTX zvUmNcXy$eM>Lf~x+)U~0CkSqiauP#>4<(|tmRI?=VB*c`_U*N>F^qsJ>V6|#<^(h5Tk~ApG`7V)CEuos4nr3L8%lP#P z7)Wd>njlFLxd9N`7=CiStMCTF5iKJRoED0SpE~Ju?2(hqthXwNBd?wf%mxgv!Z$YwR zD%j68p=?z4B+vp!6ILZK(Z3>n<^K@pXOY+@6RC!X@F1F`f?99-57OYj<~*hczNsfAdcx>IN1wo3*SznQj>w z_-fd;Tv@5F>H$XlpGg1ucW8RU{mzA2970O^rlv(tN>)N$-Afya1BuDWs4yerE1A|h!4HD|wkc@4NQi^DsB z&?Wox1U+3xKxb!y%V_h+Ejc5Bc@-OJJ#4`-Cgg~3ym0Ld$<-)!NcsV9vog(OLaqK^ z^2}ymzH^!F*izB1kJ97Qv$px5cNajDVR2YUEhrGHZX`G$^}Nz~po(N*=Qf3+UK7ye zoq)45X&ZU-E)(Xt_%quGG5i?{F5(u?&a1`7bxBFKcC@uovYXEbFy_wX$v9}4k}`&Q z&DnD!VI#Iu9Our?aQN)%o1I;#C6r9oIM^gD=>;Tfu|;8xFIj_rw?pT_*&RD~^6>IO zhEvzMA;WGZW~@*n{3t5=R*U=dF6!I6ja^%}dZK>GeBAHW=b-ZrO4;tMnGd+XN)hNknIkqn@djs`II}{fe`Ih?%rd`fXz00JU z?~gpPL?_g~OmpCShUY~#`D^}QfF859j&n8Mbzl4Z4|pe<-FKGzH8+`Ln8LyrM~2*hXhu1AW+8_xE$R3g<%5e~Nu0vH`1KLZCGFl@*;f(h;?LXds128es618#fSm?;Mo6Get zX|_HpO1SB7xc834-gSB+d=WdABn*;UEdG)#G;U?QqK_>Y(UTGPXY+T@)Luv(t9!J0 zAhbofkt_0&=BG!L-s{N>zyHUOvDuewan$4taOAkSUVm$)tmAebFJwYYhC1&A`0yyX z9^drj93FMcTPIUvhZ~IHxWVuEG?=DIm=q6BF2%Um z%uDynX6&i0u-$8O`0$!Ra8K5*KM}BsxJ+BNOv!Wi7w^wWKNA1w(cM5JzEu0xww`aL z9y;P2z6|o21x%Y9qPZBi$zjnoy)-|+mB+GUnudRmyNGfmSooE}WrLM#IX!`;Ms5Ir zX>6QiWSDJILk{T)a|yH@v2q^+LdsLv2bee2LFPqlrt>Z*-Bf$a&gXk7b@nmI4NvB6 z{C&fzg?fgWf#~NM2MG_}^lv?y#1Tv8TZa0sLMf*Cm=gz~67t!=o z(J8X-#|$x2ty{FS@DB*jOLHT$Wkk;WrI{q&#qY~6#3FE!{A0WnyEmy93lew+8>$Wm z2@)+R;f=z&TvZ1Xl<#4AOEv%^{xcj4;fq?^O?MGiv zs(i=;p0O)3ri*$KAFiv@~t8u7-JSd(i4BYtt<-etZ51dFb$LsPgk+9 zO=VoZ>i)VQy1h4m!+h-EQ^yNi64%Oa>v)-`8XhVx@93(r@9!rI1TG#y_;TO+u{bAZ zB){QyoY~={W-Xna;ftsN=YquF1DLdZd&je{CEP^xOQz)Id48ycpd9)5P%GdQ$h>-1ghUdVz@1gtC09AhXoFfV%vSs<<2mH$#aQ%_)t5= zh1nuME~Lr351#_#Q$D;u%-?johK99?Sbzixz$kk6d1h|>eJzE7%?%B-!Ai`}prMv5 zDkc^%pE~pF`n=Tv*A~aL$Fy6Wi*(=W+Ld#KmVC;alHr>FxN%+orc7z~y;aAf6z$4~ zXeL4G_MMM&jqC7Yhl`af>FlUkJr$EOCC zw>8$?mM&P(jXA7l;Kn#q1?b(<1xV$ZbRH`!D`R70B@j3_&N05((P0Bh0uY_lHpxh? zVO0xt^-V_@4>2tQTG03U#+YlROZC^2JUq@dRqwkxI^Lx)2yj1x%)WeZw;sicms~F7 zek+AcDU$zwg>uJbg$a*fgln{8d~ByoPG<0p%pLY$nLpUBtHZ^<^&JG=^WTF}6cul; z{5jO<30-w3*#9uF%mp<-G*4j)fMxwS^jf#HPp zwfkG$kcTBYy9zWHy5$)6+^1x;^|0qP1PAR(wKvHOvN(Kr>B5EglX(e&gbe*{XRTVld&18UgQI&vfuMP6WFEr^C-FRXc#3yX)#OE(mhm6g%yI)l27 zSn>jv5Ed53NXBy9*|TQ@t&7N(yu0-&GiJ=d&%LY03`V?Ql%#~*y}M-5qB1O~xVQ`f z^soxv(k?v>+SnZZkuWYvdH8UC4>uKClA+3$ee84QaD>Daczf^J=9#H#ime?mqK?|w zfUcF4l$27m-M;xOfU~7bmY8H5-`wG|Ku{~#RfcSV@CD5~{`F%Zp=}o<*lN#zlGS*k zJ~#q;W@V(EqD62bN8** zW~oWI8eHaDu9Wlei2t207~G-=OtY`tv-9#g*YAIyK0Q`g-;DjCD2WJgBM8As}j3bt2u5aaJWz{3n($az@52(TuYxnNmhYp1` zi==37T{_%cBGZ7^N0>(6c|j~?wrtxl_1*f$|opbb~F^*CHs$>Y*tr4eFU-ub^Tn0 z8)Rhc?b`)vF#J^^534PR{+v+%u&R=BX*eaqD z(e{c@!d+v>j+#A4QR7#TiN6z^0kpTFs*(+Gwb?3s;6Lz9wNinZ z)2EkLR9qT?NR^b7RG~p@z@sP6o|%JPDi)`L8oi>^+~63>)vBmW=ai&2^-?NE(WsY# z4zrbjs9^W{bLQZbL+O|=i;tc7a$9eq1S-7V=ZS?SnQhU56${)G6bCd0o;G{N%1Lqw zlo$cxM(8Zxmpw~v>n|`!(&Fo*X2@%Dmx?M3<^o|i{J3-5wnvH5g-_2}(WFFLU)YL3 zh00}^yE|OJ#|;G3+-_@MnOdWjq}85#N=>foKoZD~>gwwD z9X4tZnruxyafk+ zu-j45**rz5c$o8qT8|P8>ZNw~D_! z68L(Awso1pg=Xn8Eb9g*WadOdnRJfp*I}B78T}EIsj%V<53S-5<&c+tHQVTQlJqFS(Ti-oR8nu^Mh+^% zBH8|MSZa5lN(--lFftReKK_q2jU%@R`SE?_4IAKT)9+vZ^L^oZn0RxS;qHgvr}|l7;ek6}V;oGn zRD^zVWMpR6NKwpAFHM9}t6iMbOmhXjVYefUb)d(b?9b6s=zge6v0}U9(IhXEuEgj5 zEhI1Aq+iRde$?MXj*uc?{wOS31c7#LmLNw&M8qT}(i!yUKqB}Qs)Sbjy_vqZ{&>O5 zmx|Jqsxw)ay}XVa8Cla$Wgd?J*IDww@|uu9$3)To)`&5FhtaU%dnu=O;Y>Du>3;b< zTx-k-yo3Z>4}2VO@rcrbS6Nw0GM1uxVaozmNnaoBt3gXnYV(r)7&4}i0`7w!cwSaR zS9{HCvxQVDV^cOp1Bj7CJ1u%xcr@iuyT3tgrIX9!Z8W{g({t+G^IyF>VpL&xeWr$n z&#i8sQ@>_7e$xE|mo&KqtOP-mvT8n|_%72hWfx_}^m&8XeW6umi=>K?a66hhc5-r? z{*FJD=Va!%KQ|W;cwkn*?w&}}oLllhtzXMOd!#*;FK-sQrq3VJb+WcwPW4YX)&GLO zcVhGjjy*RZ( zVk<>c{j&a0TW0*^{E!z{M|zMT6u;kl3Gh%<_29h_` z%%9_udL)XmYn0rqtn99Lf56Jn;l z@;~OoEmUsmknOYb`WZAm=jiU_^NUl9h<^L-dQ+#xV16Zd@QRq;@MuDzs+^XRvRFp^ zAaKn_t;b0>^JbaF4`{bNnkd`jX!hV05~qK0OTD~|^h#1{(e}z+Na{rS-~9|dWLRHV zh&ag5diGCHK%v!kbsGZTB>l);0kV*e9+@nZzW0ZPFl(SeT$3@+@dhOhF4EWgpYw84 zQyr$m5(6&LHCdPq2XLT7D_-OwQ6mHd*T?7MtxL~!$Ex~UGysK+04IX*(<-*)v;+>% zMtzzhU^5`7d2hz6)+I~eEsBl`dFu^kUo7B9J>#!d}{A4F=?UPVU7Oif4l`9}pN197+wOfAK1Z^~NPDzm}xG!~VJ zo*^WZdeYYAzyX2Q2r=K$FB0_qz`aBL=PqsffNO?Auk{NER>Y~*yzcAkGJ3sBx;WDL zRA>4Dpc&Xe?kjyQY7!G~O}$m2YGL8o5)$%`a=Bebbfc6Mr^KR`OP7PfjU7zvpLle= zUqP$OI+XhDnZId(m3fK5K>mMvOy}8F6END9%uKkb&v=h!gU{_79R_1}0AiY%B?v-A zreg^&uUMxKyC^7ci2|7hMn=VVBp+aSvvzGvQj)GTp24pjNbLRlPhY+il9ra1kdWZ# ze^ybkdmw{R$eH~d&p9S0=FnI73^e%xb!%d-21$H~sbN*R$HEG;KJ9jFee%hStuAVS z5pXO1h0(DMxnq>iu9`i?C*+qQi*8WqcrwAzVcx1=$S{LfF*Y+Ivbs@ z#n)6<4-5=^!q!HPc5h63$=^80jheFKqy&v~o)<2>9+ixYlwZqL{mlS#69iMNE#FhI zc&w$*t}?;r8B^b$naHyf9EEXc-6S8-IMYUn^ z@kO<@wV1mW25jJ#Fdc3Vv_&;2vw@pX0>M@hmIff#=cSI)3j=^_*R*wYPe7{?-89be zb}9}yeC2g@bh=-9cuXoQFL%Ix8tQlR^H?o|ktJYcCjBYAf;AJU(d) z#z|ft*>3On&OlgVT%NYoxi_A*K&YPk(n?A`2G)BV8s`7h)&xfS!M!2rL{fP8-;+Y2 zZ$GMK&t zIm^)Z4BIz`Yg0o+MwM8s?8h$kLcyo@ijaJY4*D+TJZNRr$oT#QLj~IEu~#RtW~DUD zQ0CbC_;Uy#MTxN!^WS(gR#_23$6Ry%jC(kIpJ@!}@lX}zjURzbBMs~p8DJ)R-(Ry% zX*=&LtxV7TUit%;6!b1aMgS^`q`=m62o-#7jiJUlQP&|(R02m0tTD?2lVk6a+*$em z@w;waNIhY6`BhqW!_j-~HII4eOa9<4+avcIpa07{(aOxExH@o+qq(`j$*ye!0N1LN zgF-~S>4^u%T*pRsvnw$qj~UN$$650V;4fG?&T-@;2Bm*8$ErUE+*-wOpBvpv(|a@q zyv>gsu}YGF>UL5Hl&(WoULG>8>PFk!)<+d%jF}e#>XY5;W5dlKxTq`+*`#$x=+&R~ z${|KGu3bU4n7IH<(NW)wS;TOvh8RxaQWh^XFPi~umUAiTEuJ9wzNodm>%r>zRXB@T zTNd?U?%n>6DG>%!Pft%C!L7uKyIXd1Uc>NPFqD0Y=yS}{(sH`c_xCR2@(CVRB?8DV zqXq&LB2(%dSe#aVWBaj>`L@8@whfJke}8khVe$(^i0mG(HqWTRW=`=bk*a z4pH!zbRgIDx6EE*=E00~tU<`xr(T+m#8k_2-jG+20wYy?$QDxR0reiFlS*psA*@L4 z^AdCZ0oT#_Y?kz`^w-V{PW%TBKwR=-P^D`7yQRq%9H|-0Xg7D-szfO8E$ZB-)01NR zKMwzi#uek5*_Z!q*bbt@cUtl|y@?x-=ipY#!VQEjoX<~PIObEELM#13Zo&4mf`S72 z&66EfcK$_Ine>8j6_xisQzm3yChR&NPw`oB%ikYcNpP7i>=Oii>10=jSCOC<9YcLq zkfQq|IBoi0f)ml&-9n>(g;%};tHxl{y?FxxS0@-7p6tDhuZmg!TAF?R=uUIJ>9WxTx5Ul7gwf~twMMb~2 z5Zx8LZUX`p@0y{bDZcs_y5uKEyQF0gLKl?#X$wN ztG}<$5n@A451{K$2#fvgt(l?s&%t_1Sq10Z#qY*)hBDp0>y&l#rH5MNfzSNs=!Elw zf})8D7savSlPF%wp z3Q?qLny%?%Z?WJf^|suMIA_wsoNdN(ue6wuAM?BKgT}06tbI0JM2%ie@*xg}lG(h&!r;GrS3tb)Eeg0MbhqGq z-(O&_E>Z-V_C}&CtEL~rZR}&NA+0WW^M)`RHZ&~gjfPu^Ud?v9GhtybF?*Ojm*>dA zgS#AhkNk&uJww6itC@*0Pr@#qibd4&N{^0;IG@F=je=0VLCPN;2T!hJ5MQl6JtguXPkik zIr8L?eW{-qm?fads65zm|6x*FK=1-zMiW)NjBrg5W68DtECFV$AbrXLH$z{{Fmo|I zKk0o<=9EM|{KROI4-H}K0*&dePGTjEiS(XrW*48KV3z6Mg$TNUVAoT*z@lc_AKuVi zc!6Pajt5i^^fysm;9g8qbf3Fsb_{rnMDNh`;*V zpH`cLf%h$xOKc%^dW562N8&v$2Z-MDD|rahTua8cnXd29-462c(QD&7Keb;aGb{EI zAhSYnczWuQ>*J-!@G;6^>t%G2;*;hxeFA(-*{%_r1OMfqBDvCT&Lb+Ue}AtS)PJ2% z1w~7Muea~5KPq0IiZK z$IKLwtzF?M3I{SsWXK~;6HGI!yNsaqhq6+}Fj;7HuFbH#@HHXVbf}@X(!#*dkTKYn zdD!#bz0DwdEE@7LZ^p3b5;Z70%Dl>{Cp;=g+v>9SmG{{~pW2(k%*T$q6FiBzet5YA zYDg3Uzi}{T2#{`lPD+cvhaoKZVzer=v|(OQw@?>jrTGYER~=uNl^m1IbZ8ihnQcyC zs@;a{?A(?b+e|J_bR{f6l1URh2CWadLFGngqnySMMEmQwaNz-!kC=cSaeiy$sLjcY zXIUZxdZ|JrtYz&lcNkBtEGUp@*#2ho(gbEVlikgw^@QoE@28}sN&z{_gvBl5HvMD4 zDSG^?0t%_CJC>GK0XXK%v;2`I^{$R+*Gt$>0=_?5mo$h_{e0lA#id-eiNvU*6(dFXP91s}z=uz*2PA0zaEUrbuoq7Gy(%Fc}KbH!IvAb0v6SPLW+GLN}y}<|;amNrt(YRO=ZJ-9v6M{BH zLjXPvADn8yf|08O^&~Bbb=1N>FnzrH?APF7^}w zo|3bSX~!O(fq&nMuphnh&s+bW`YPhJWpON^x(2a`m|DNcXrKR(zO7sMZ%Z+M z0vSiu+IKI-y3y-`H7o~n4iwxR{|!(qk{2P34OZs5$9gbYVw=2!te-jv7tf_UjC^!i zev=_)F9U}kuLsLOW^??+%q_C^AUwCmpL?|<^JgF~?cbj#Y$H#aP;UGAxzZ9Y^C^#V zjPs|DtG^Kn!Fazd&JmNJ4zX)%Cn9d!Rbs(yeE(+H?DGqA^5EPUi-}F9P?fX4M54{h znywMD4Op3Zd7MdnX0V>wwW$PY`}g%9=KO&r2hJ+tCa(X4KHxZ`i=SjP7u!-SWBKy} z#VG_Qn-EbavhtCM{8{aoH?ik4!3lTFnixth-}ZATInbo71k!u_TISC*?kN8UT1s4L zq|bCHGh)jCds3Lqyf>db(NpmMP-YinDzi`0!Ta1ynIhx)2fI$};xFuXi{IGqDZjDD zH+n){i$~rucIq@;6O+QnY?CH^+s$PBzM4!dAhAf}bt{yVOv#m1Rj2k8e+5@0EF!{s zq!gS0WpH7xUAqQ93+!98TNx)Ed<`+qa?_zA`L2%lkMueSOG;7E%O`n%mC_`}C0+cG zj15%w$Vtf^6D)Dxx)lbdZqRaoA_8DT9c5)@lPisSC1qtP5KWM4zAm7a_m-WPv`bI# zV`Jmjr!)D!V5#8eIEh#^Yw^gaEt%M|>H|WUUyT(MeXY1uoh(bv*%#WjQla|V^X1EY zc|O-KXJGrcbLYG+(y!|TE9MaQd|`fmK7c0xba1x=6nDrtX(~${wRxB_=bbPj~qIzPhe%6h8L_ zn?uu$e-Kz=V%h-;=g-Zr1_z}qJg!=J78_e%f4_epWP*SK)_IJ%B}!Z@>3A<0pM7<5 zOa=}hOVQ-^X6AAcvozVRG`<0s-04L)cQMMA0vCG#v#yAU7N}uEH|uj}rpuk6F1TJW$#Ux$I@Js2h1Jy=<>MevoJ zqnyP(0A`2YPo7x4a9Qa0Zun zYhtQHqNwkrVE*sTJF!X@-7E}27Gi$!nKP^iGE9Co>^!n7*z|OD^G5MQK=UT7MG~^K z6fB~5_Y^DRziQvtUc}8UL;v29TnywH=;H_Q^q~p-=m?gHcF&v1yQ$;g=}0UQt{|OR zX2Xn2Q@n|+h+T&{bf<3&o$@Yc4?+W7iz2vcRb=lT2fq^QJ+XUNw&p`8UA>d|TC#6n zzrN0ve*`QyfbVe8dbfsj%hxNK-!xusa_S2}4c^bU-4sNfW|Hl!pW^4|=f!15Vy!O; z{*rTbX9H40@OtEhzVrqI6J{u+eQ$^GiI}M9D!Rd*Ju>^AOxm-j5@P0{ay7NIXcX&U zn+{^rd?X43U@LU7apN#or=5cs_u?kF%F$Y`t=u};*SU5nz_DAO?N`fm<>0_!iS=&h*)OVaxtQhi+ZJ zzEZ9LqTcVI&m;{pn*MUHNgBpBP?|xicW? ztagMfTh@9H&$S65pn*%8Pho}uogk+;4{Xe>5fjs2zMcI5%-!(P$|@^k9C9GlFOfS; zs~~pgW>_|M0L(6+=Xv0a2-!u}Y_>kYK~_`4ej4@9cwL}D*~nLJOKq1LKD+$SQ0|Zf zF^2LkZ^UC3e90}Qv4Yv--TS$KMbEUASr*Ue*jL|7n2cbVaxUfTiP6J~xocMZ zEIDdS;4i9T=ez2M-n^gdiJx0`ScTGq^gbT+211zh)|@=OIsdq%eygrwDVe#I=gqJY z=&KJ6OE_`jgfpbp=2Ii*uipfDJlIkGgFy~%by5A>F926%(zHJq6`b5(;Zw9=zSAWutkD-GXCY!S<2UPm~1Yie>q z-*P~=<>AA1sZSG39`_BlCqOV_yC<R5mt*(VRA>X}5s^%o^*Jljhu(F#C*g zG3K|}DtBDzm06WS@F|OIfsN}~@C4XU z($Es(Ab1%ce*91&5<+F!3!P5FyzkQkf9%nL&o$t6M5;Ju4Jk~{=6!~a z)!4UEEq!i*h4McF|KB6O{%9NrR}s@(ZPZ&G9XyK{pTg29#(^uhUi{WsyGMHaGx~=Q zBM?G^Oc)zGyNs07S~0P>n3!eo)<9WvTg-?o(|rSDzzy^^jGSFIvb7$spp)yBv!SYn3bAA)C?r=kNDm+%a6Jc^YiI&G^SKE>hz z!9mqRnYW6xmMKk^cW?)jvgQOS#i(RdX85=J%eS!oKh-`6@ZQkG8~OT1B3i8E=B;`2 z=CR0URwFUd(csqyE`Eq>f*qp{W29=z?WIU9<*KC$wxz?cbAYmNrA@vM^6nnwzMwTK zi7tk=6>Ic3i;o{;W5e0dFo0MX0fBM8M;kgj3MEDQ>UV7j!fIc&w6Re@w-4iEDACHU zSg~oGr{TRH{S`v^yUF81ZUk{sZW@y~IX=23P}4M}I*3nX!_yT?6x&4z>tryp6AAl6 zsB2ne*UZNm-~xD^=sHLixiNO5s7-}-~VlaR0-U4h%d z3UKBgtbj#)p;2X*mML8NsiR|3{3pB5HoiJ^{`!#0{OLN6j%?a4q9)nn#Z8J>wZTt! z)0JI*Q+7Svk+(QsT9SYBWZvTI($hcjuQ)4An`&ifVCd9pRaZ2YUtXO%P(1hf=}S|4 zMikmxt6dWNYTDf@ZT5TABy*3)meY*$HYq>%kicK&jFEQJG_L}Gv)T?cQ)&W?kJr;$RDQe*W5JUXTfI57K$SelJC;hq*`u? zC&nur4^GlKu<)^|Velj3KIbdmcyYG+<+sVJI7C!v(n6jAVB>e%W5*1?2FBjVKiIwAt#&#eFQPtsry?;Lp4a;39l($mB?$=R9x4NqbZ6K!PyOHh-3N8&@g0<4R5Bo1(yts7fQdrJH z#YA00qy2GL&T|Lgew(&3=}D7L3*N(a(g)&=mub_TkmgbGEMB%O!6^N6M|Cpf_4>Q& z{TEOH1fi_52^_t?aMrYx&4tMC1mPa4-;kn(_m0mR_}a=s{1)IxVp7sq;5_Wh6^`56 z&zU<{!LBjy?DRR1XMIAtU*x1WK z^A5KdrVThsY`|zSv9W$i+JiCeu{|Jpqd!0jp*tQuD%P$bEUZ2#ymjky*q|5_)a&sE zZ3SuN_^;Znm{eX6;PRoJ~xWSh8U~wmx;>D8`;O>_=LX3F*$$E;36aI^r89E%ib!5v#+?TF0wF8PA<=! zJfAwB%ByzbM3Snv=7sLM$0uR-?0|5NO8GlV9N10`VQ1-ehC18<2t9*}3UR{}FLMi8 z4?Mu}4c|bHmN3GD{~0{$lU`sIA|*978x%i}vHmIA^74Ia_HfHY}>R3tKQ30ONus2>sPo9xBAWK-F!nU-f5)2L@rVS?Q`>%y~*ZbtKx*_EeU+wohZ z=?F-_NANz2mB;4(8ZX{0*`}ef?28wQuoB*UKsS;@8R;|C1rc&qdJ<1;KDBrf0E2bh ztZ%0#RSJOr3CBTnvCYlRxNn5Ub4m&f?!vzgvcr8Y0NgYf8*& zP>*WQdGk6a^Vs3T8&Pm+DGiYMuOFYsynmacUPRAJQbhy;PQs^jE-l2H>waPbasl!Z%O2@@n?MpQaBhg=*!{seAoi8D5Yj0 zjl+E!^Ww4c4Uu!au4wgD*e{e^E_Kosf2m9@nG=d(Y=kdPd|FnGM~oL zu^oNl->>o!jG-kW=DTf z1M~g+>F?g1c5!hHy-r-{Da3`Gt`;?(5kDa`8PW>s$quH>eO`Bbo#d;0n+N=uUy z6P+3^aLY2$X6%&$$DT9C2ZYfIvCsl$KsJ`vQ1v50=(od+LQvGLP87rm{XAhM{8$8!$&t}*X z4M*A=HwQS*`)`D^Ch$iPy)BJIxunz}bN_59pX~9|ZOVg;2iSouox%I&L(jWo?(Ryx z&s%z6fe1U)P%Wg;Ib&mcDwC6v7*F5{bYLTH1`$%Gu&x5G0jTU=nu3zBK^GDr$=FnF zS~lg(lRl5ou&~#%+r7y!lS#+IZ^bE;H?c~}${~(2$KIc6pv!ce-?FlE5O(DH`XaC? zudXgRM`$5VR13uKQSGiE=|f;;v_Cg2R}7f#_ErE+92|#gG~~BCihgKVxB2dk8_(J* zV-2=Gey@=inO;`5YwFZP(I{1(el1l${?-NY&u zrgg7gzXoEraoxIow42$E;5HnCJ;(j~n?Z7W(kvHA9RS0PN`=Lb}A`-nQ+p4b43R0B8KUsc>AtVs~^@)c(hmlJq*~ImzDR zLFhQ#3mh&MbCM$jFKG_m)OkR*7;2n8aed7zHQq>ZQ-LLBsGVil=u_g&a!s|gd`G|X z$R6K!>XdAHo3ou=qQ5_P=hstNrrFNkWd3Gh%$#tJqDo%9@^V?UOO&g&re?Hr0ow2m z#X#(oOgVGf5Gx_yzkkQXG-w0l8C%FgA0C33Yi((n*nb}RPqzj7OiPslGfuH?=+T1v z&0d-gL&lq#>14{=>E>!P=5G)LsSEozSI9zkpWi>iExVwMxzjEuC%N=D%U{^o*ocaV zTvuPU{t7^&Cf-9BfjZEz!L@T|Nw$irDl`w~_4j>O7hpy(X4plv+Kd$89jiNd~mjrCVl7m{3PFRt|L8O^;naeffG zEUvOrma44!9I_Cjk!D{Wt&ah!N}64_W8FbPp_fX-UDFpWnkVtsUy?dHwvoB*MEx=i zIX?NtuOXNVwL)evV_L>3d6)GoNjln*?=F0KNxc{uDTCoh<_qPE2=IvhdLLS|SSi2? zgE6uYF5~)56xzLY^lf9=E?NsYdQ>C6v&oYqYNjwdD?*e7H|XAHTF;k;=Oxzj2@%Az zCB0-J&OT!c?&Hi#g&7?27ttTir(SBkqv9zGZ3x(@E?&G?7TF$`OLjN&-$~Mv-()b; z)kMl-UQZ!WQojOir>85d?r=5p@|rMp_4V?)*9j!M`O~NUn)s-*x6ecc&@f)8%d`EX zIyyb$lIF>i{V1m1?Ao|tgNR&SeSI!Wd$EgZlO7#SNG4QQ8w}_~fBCNXcVp+26czb=_ZBxbsC`#@syDjT!LhTaq1H#g8x$0)gSguL<2)s{hkd&1L)5#n zY+gmXRV)k)ssV4|G-GCQe#?GL2QD+deffgn^MP6ld+Vo9`DyS`R!~&Lxdz7@65SZ#c@u3_)uL-%VOq?Y181cJ#FU9Ws4UdJamZ8mkpHd=5pA7 ztWh57NXC~q5fR?^K1zju!Ieu6z1UNM3g=_k>)-;R*^AvA)AA`R+WD+cf9q;JaN8Tr zWjx&XdU{7Jld;~NFA*dw`6ZwGWmb1*%3*|PDZkKxU)x;GD1Q|Ze))T zvR9FvaU0pAtQ*;TzvqRXU-kT+-~0aac7Hz4_{4qR*L8ir-}5|=^Ei%E<`y(MBxs{4 zPhvU&B!tOMIaEYMT1G~-1RPvk1jmlCUcA`w3S-Wy*cvw+M2{03w zXKe4_KtW0>YYtU#&tNnkH5)B0?fLWC(92j5HwX3lLSkYB(^%iww9EE70P#uj1qEy7 zemssVmnMO8aQh9H&m(B24v&tCZ|3FaXH+JK!&D+_*b?&qd<~L0Bz_osIsb~yT?B*# z7rZG-OHA&5juLhQ?{^rm^C)(8Zi)JazH&xJ_M%V$H6f{4u(WdXctvtT-0g$_wq+WQ zt_~Gm9+j#JG3oFVJSHLD<2B}ndNfuNeuD3-w$Jd#V-?D$-(TO2OFeFIrvxC+KXNz= zJSvp;W0I1wFuWtK^ePxX>W<$dL&FK=D9~R~AvU5L)~uc~ID%ri^4v?k7$)fw>m>EIfW`ba!8f%_?NUKmd~N!VX!P&il`|!0uoTcb)pGOqwa86 z242*3k>`3eZVLm0)YYl3UHe93L#cxb@$;*C*2pjYH4u&L?kqXYN(9hL;K zqU|5W_*M_V+R=usE@OFc_lq=bjvAkrIgSJaB$wp;Gxun^8-WF> zw(Lb-#9}pv-{QNdG%9nH7u=VR9X&eIfUfgw0L*l(0n(lzl!m;#wt+!)iDd&3HFa8C z+@qmtqOPTd1xEmaVV3#Qbia(tS@}Vb(*abvn#O}kf}x71)rw@;Lg%9Ar}%4Lo|Uew zESCRT@imh53)}JDLN)-q;^Q|5zn|+|%G4#=@5*Q@dxeB#@T!#vn+B7BEyMgss_KP^ zzX)?&W-Bg}1=;m$rW9>QVe0EIUur5G7yaaRNbA5~ArI4hss^E(_Jc%!Xv)ml^?Ct= z@Ybh~w`q#60cTj;hfM zJ-vt*X{B%?xCpDZ{mlz7+6)NTak}~J(N``rUZCfmlyZ6tYs;$9=cSDI!WcsaxCuP4 zTrC>9MX521`SH4vP2J6HgW(j(g_W$Q41C@j5_$6d1x{Yl-=+oU8X`xBA{P`w6l-5V zg1Kap^iAbJkWfG%CW48j|*Jnks6n+N)cPWS+X z_vZvuOyu4O&u8sG5NOxd);@p!3>F{IfuC9309sU5<=H}k2q6Y!eGmBhtIBeyr`*T=wnqH{3x!|l=Wuc@adAr+JN#45}d zfzI4{EG~Ga2E#D~q0}zxq@OQ=^4uYP_vrag^7M{Z#|b!fgm7yes?taPU3-3SHG#)|x6&SVWrVSCGo zJ3e)7xV>d<&Hl&b>&Xj?iyQM(c3mKukGCgl?3OEHt)OG$O;=B6zkJ!+GBbaE^y+GQ zTFaS!XNL%X|F>mq53CXjZIeQ_4pp!HxZV|i_n~!;BD-^Fu2yAfp~v^QSNZc!behYr zPvW9^`5e38;Xi!zDDTmFVA)CK5XGer@dopnlDz7HQL?CH_Dk+0Z)vshNSd2%(;U?$ zBSVJ*bCX{2f{%H^*+(z|i}#;p{UajuXLvwRP<949a1W!Fzb1tpek_nP(7 zc`+ONpMOD5Z?DM1A!+Tr_UW^yE620DSt46o%R=K{KYv!)s%cpkRH+OMXBt%`PA|(F z5~DZ$QQIj|uk=pk3@dL7SB1RS%7!z?VApvRBzxVrYa^cZ5hbC;i=`X2Z~vxI|- zYIf#?l=7N#uwPB2*f$AmD=%+Xz4>HEK|$P6hA&L`OQMS!!yp@j15q>uIS}av-+Ed- zd>{UxtO%c0m|Jo+7V_1 zHXN0cLE7CMXLVJO(^$!4;R%dzqGcM}sH~?vfByQ?utA!r_;Z`-w6+e^(;O!!#5GI< zB;-r2Tj)q2@o}`!6VZgf z*r5fx6ieUq5M#F-@wu%{>myEpjCHKzvXj`SzWUNF>l-)3R#%VFa2grhPPN5Ew^PHE z$-AhnC5O!sR?pz{KsaKb=3kAxx1~GsVtF_~W;x;A=q)SIHVvWKlV!%D18e z!WN-*@eH7!h$2*1LmdSfP5sjBEbxg6Hm%T7sya7B&H{oS;A_9w796J;&LrrZ=4iLl zg1S>yajOE7Ap37+%8cr_DZF$Vnwup$lBPH8E;3X%R#(5zWYQGF+^ncGJ`&kK4bNM{ zd9{L?|ER%N9rl>o-TTK%2M2ghA=}&h7_+1jD&tHfGellY2LJ%vt6j@5Up_$XkAq2S z;Nav;n(TNuD^RS%1XcviwjC|==@dL6p|hpyC2mZI33D{x53rF1X`UJHFI_!E0Q*9r zMs&3PUbcu9>^114N4WGocQ8x)zycX!k%JBE(u+R0ju`Rn#dGdp#dAlQ9i5eVmb0N6 z3-61am`L@~tS$+aj+;Wk??*@LWvNp#9ecK(gi@w?r)hRSsxe2Ak4-s`CYv<)1y-m3 zvc7w2!UuQ)@k9If-@uqb4%v6hBYGCB@#_-A^k|`F8Ff9jA20dghFa&^EF~rNroz3# zbqMx7@;=SrM@8F{KN zAPR1#gj{yVy~7@%TX!yTHu$;VWNS2uH&N0y+Yt}x+ob4!YbE}8A)^C;=wt8Yqzm$I zu|pA38?y=HubtOMd*|_7><9IH7TmacmP^<)8NaE~k{QiUwpk8ak8M4vv>GMk48O+U zG@wnc*pTv`;l-`Rxy|g_!sW1-yiF^rc0Wf|YWgf{b+|Ul@7)jb4kO%7Sn_8mfkYAr0fLp{kaV zg%bUPDp=sGugo^G-es?9X$h(toUH9kj2O({D#r!t0vwxv?UwBS1g8NCdvq2GCzx1J zB5?Mtos-t1t+lHcH9VvP)0DTY?%(UFz+V&#DcP_91~YpP7CTkW6s)u+nb^da8&>t1LQ;>KQPloB$#| zj?S}T5wh5_LeFOViQ z{Epz^!K_2=MVPGtbxkC@t|Y8FD4c+>TsIDVTEL%yI0Ylv{39Y7IDG+zARqwX48Tg& z4+a?E(xOl(pdP||2_GvfFE?z5jFf>i?Ov|*s$E>+EAsyW?1ugh(LNmViSrwi0&Q8TFEbI6}!agH$=k-SOO$9-V z2Ls-0zILPNBiQzf=Xn*y!FsJ=-)|ty#c26+{@||xWw9$Huc8zq(out{JF z{t4g4(_H;oH$QcEhq0XRof9uZn++GYrn(whmwuj}(1n6Q$^ciKxcuNC=N~X`+}ymR zO@(JeeEbF8r_O7?Ajs0=wH+Ni92_5DY|)h~Svfi6G=D|qM9bx zcoY{`YY{e0)S92b8pA(e<*Z6DEMrFlf7u>-eUSN>C_|sPwvoA)j2?lc6K~7O5vPon z6hOl3NI?+{?0UzeLgFwq;6$bW`Cd&s-OMm=X*#Of7n=E4lcY$e??)-Q=+E7~;vNKn zz?Ls!;W`?F`PR^o!%ig~GSHu;?}ty}-7y6@`hM3j7>Av#6JL%%lE`ZZq~3{@IDG1u zd>~h^y|Dre+Jt)#gRXw6t)g;bc|ad1vOqskac~v7zb*(3Z5>JyV0QutiuC?pQxM^$r4eYJ?h!ur;6a&Tdv$eFgLK|`D>SlV=vaA63mjQ4HQm$HY{X#nY6GDo zk}nhfZDJxRCdSmPLC|LFrQ?gaL4QI2vb?-=g3c5ag?96LqGI(U^XvKfSE=~|lV}Ci z7#Zsgx3*7vVp5glPV#qoKda}*Gt#S+Q7u*}5Y}!X;(a(bWYHXiPyY0d?wwiv@hhIG z(mPcwAgLTkF!&>m0)~F&+O;=ZBT_eSY84uPefL&+&K5PpSSu~Sn%+4N*9J9v6Jc%`86~^AegZmC;YaAjIN8?( zQlOWoZuRt{Pg9xB&51e8H5+PoTnb(%qztWwzD@T;y3D$x@_5K)4M<1@w=Kh*Vc_wJ z6Ik^}(f2>Oz2A30DzEC)4*j88z@pN;w4MG!#n4bZI*DyzcGh+(pQv@9tRni;lSxfS z3n?+(zU6kNph)EcW@(gwZHMUdCK>$Fl_AJ-0OJV3#->S0y%_z1TWp)OGVu1xn_MHZ z60E!)A3Hr#1>p^T_xiHZ`K`Cm*yq$}aG^uX%r~=`8^?5cV>eY11Kg*@{bR!*#iAVc1U9A07>w@*+Vi(j&h{cmC!`%7ns~FDvEG@;|ISkPMxbh)j&j3v_wZ z+ulCkSU75U?d)Y$O--2!=P5yh7cMqL*$F!pWe~>zB#y6HLa%pgX`S8LI}*blBNaV8YG9Ga|D&@RLgj;KE8r*XP?3N;+3Gy-(G}z?QYi4_kUK^B0#IpS8-oz+ zt~NMb!T=^=l$(;+sD3BZ@jQ2mgC~`gI7=n8lpAh@+Q{}5w?ma^)8~1A^6)WYo@?Ei zuL9m&*eL*|^?wQFY`&dqf#GTA+fd&t*J zZ^U?!tRJ(wb+|4Bs}M&sb#IiK`pMY$&GEU*bU~ozBn4<8wL8In;Zg@=qoL9SG=|Pk z9fy;1W0^yV^l}t#U&uh#^G>$~Qk6ry{VpNY1L!z^ll(a7C4B?V)<=)BQO6uI!N4~o zHWnBS)gJ_RnoIew2s)d`KipAP7WcWUD=!})Wj;5m*Z@sGU<3_KzzD6ptV>WCg5NiU zcvUiVh4>rI*qIt%(wxG@!4V3^z}LgIdCBsRw)Og-=@A|<>wCq};)fbMFLt*lCfGP2 zSn?YC)R+iaBQq;+=Lt(2^9PGbr<5hxZit?OJcN^jL!|(f_N7CW(r>{N&_ys@9W=j* zN^T}pX3$uzWDgRnh{Q}m`I)rcE!bYO@NiJ?n0t8%CtI=Jo#iQ2pWEWC`ouxIkf132 zW9(;EhFxApG)bhXhjbqC%xBRAK6cHs($Ehr}DHiYdT&BJLjHj~`7r^ucJ=770C0SLI$r@uo z<}^wYR}8oo-^ImM9PRxQ8en3YYS#14aIpvvs(#l4_1KrMn!`=I1E9+vg58*0UaP-H z3<>*Ni?BEIK#;jeqJ3-7->&P9mRhrz{RU|Ll-5`0W)jAtpLz#-xvVZOl)0zFcrXri z204|QRbk@^SB@>imJ19YENd9e=WUDHj9+i8b%*wE^V~{`Dn~HVo->iFv^l)OyTCxy z6;J7Zw4a0$$kD*t?J9U=JbL>`uJj%KgA~&(x8lnb+l`GX8X8=RB|g>HXDqckH~1f; z8aIJ~uUN5TH+o_MDcH#Ts5b$5Tw54}3N9L$QIixbD}sh6jyJ(xh~Rf93O=rTKWcj5 zetm=@z(mu1>fZeH9mv*;W;b{_klh}iIVqF%bz*|M^y8;4`}Tb0o&8+*S?lkKV`E`39u<-}4FwB499#1N>~A$>Iwmf;=ksa4U?zM;mHqMp_H z9ys1=+WYhFmZQZMXR9fOEo%HqsWzLw9UCQ(6HHY~)-VWbKnsfUSHHOZ^V^*MC({5} z8;NLaAlqE}UC}Yrp#V4wf4&fy0-=-OK92Wp@G(pYbX2E|lP5*^C_i7wj{rqURR3_s zC{c)T)H4`taOh_}6fKW5U4JKN;XuI@Pc-8}3g?v?2q^kZ$) zFRRh<(yPkyT1{)u{g_pS?aRN@`2GvA=Gq|1$*4iGQ5f(3?C43*0}l=iyw|QGP&#@1 z_;DD64S5W(*Sb48Ktq_Wl2Hcqf-}dPB9q?THZ&ZAQ0c&b4lEeoy?fE-U~3E7>M$ND5@wRf3}ocsX9 zFM!ccGk4N$#y~omrjbQ^=Dvc8ibPlZ%4;UUp5x1R)*RS-(_o3jGT^6|0oMw(eZt5W ztB|XCe0SsESh?=dY;VH3%Dm5rmKT)1kk3K_z|Y5bGg2YK%#rhH)Q$&J-2K2sAGs?+bF*+4IS6nyOB;%bNMMkmI``d}$i z-E%M!?0u>f+0*WuA-sp!Kym#?@%~t!h4&=TX8=iyc>DG&J>BN!=9{oE0|y9_C|gKW zOaXok+qwZQn*L%3Zc|!X+K0J9{LvKxy7?FFm$qJRMPDY?OprNa}!e$3B` z_sNo9KqF2b#(#Hp;@aq>1)O|SCJ(1!TS~CMuP+x>CYN0jY8|4%$TqJ3iC!Z*GRhN& z8vau!xNdZ);)Rl+`!!e-1e7b-bpBD_(AnJ=`P$wd@SUA|H1e9uk+Qw&?EdBG2Fl-v z=!oBe3nnxuNX*3woz1ZW@X1T2Aq z!fHiS0aEV&=noBiK||sS6Gcn6v+BF-qcSYaVcLyb@f*nSUjzjm;>@$r{5~}`gf$2V zX6p(FmOcgf7{0ZIjEI1R%dgv73^}p z;dgC)AMk|%nd++r0R4w%Fye-KHr&gVfx2vM-LD85BNt>0xqoe}G1MG*WcJ_zpT0B} z5XHlUx_w28_}^e6-~Z}E>D$}$Zq_prdjgXb_CDXTDkiq&e8Ks;WNxTfJhfSA(E|!JHKP(qZ9}N~R8hDY%@j ztotc!W!pm^p{cAqfq%K@2xS}OmMTvmFEx4@LMks8Houyt&;`XpZs1|b?9h`g9hWGk zn3n+PO8%RH3$&iya3f2B0ZJ11;)=OgFJUp~nV2LsHT%1|!p5QF6XY%3MebdZlau4( z@Dzdp@DuKy@|S4MHP@u}gHbrQ(GR2L3uFo?;;bwP6GC5K z&^~-64=jLpKf5g7q07RUw9#G~4@k6muRvSO^G{#>+8HR&l9kurj$sX2%qqXOu@5G^ zN$%O{?PI5tkYWy7N z8s>r|4UCMK7#X#+J913lJb!-p0x2p4%O}?gsS@kSn;(kdNEnaKS}_3JTAw#E;kA}Bq)zM=qPHS zEVbp?sqswvicZSM7YS|3O2$QE15ZAF#rJ-cSFk_G$iUz|YE12j_}|zRk}n`BMJE>~ zNeMDz4O(I?5#i^a4g7YHhgI+O7z~|V56nBIdNl}6aU7+jjk?~@O7XSTOZ>&dT-cnF zMuVf=j;)Dr74i-4z$HL&a7AA_GdsHgurfUpNofoqrvIAEdWs>*Y&DY1qBNS3?@!)^ z7Hm9pXcatUGpDoqi|OAM{gQLPQqZDih=XpEMv0u|=5vyf5l6h^|MLiZj5Rq77;DJw z|FrCH3JJj%MJ8iuhy=R2mOOdF*+xihQhNW>wkI&M?qY6sb7nu#A1&1w7#JB*ff#BW z@Jpkj6_=hjZhhnarX?@Mav+d&?4Snu@kws1xtS5hEC?6Qc^N@|3O$U(j2!D_SgJXu zGG<9~_87Z0f7|V^uc`5asPEkx{3f!#m*5;EzKJh_XJ!=t*yiJwEnjPjxodMm3amB|SUPRzFs(D+F{l zKM>tXT4h8|<+`K|er>*!p;oA|Snk)x9^}%;zdb0^mTWUOpw$BBE#N^4f?~Jac@24N zUfLUHXZC6vx7a4iN&;OYO|lNySY2T*ffreL6=^(o$cu;e0NQ8VTkvT=-do_RzA~-nM=HvU${Zlv;Y`~bq+f8JDE8unsM-fF> z5Vzpt<4-)+0`?CxSet|hs1+d){$7b=OPhj*^yMeOIJ^*w z{GQ5-M0s!IcQBoIegH?Xq zTwGr<7$Q7(hz#t}V9E$mW?$15{#am?b~jX4&nzsoe*FqGR$wnght1499RJ+Z^l}ZX zOQ_mT^V@^d1L!E*%gWq9^CToB1iU)XHoLkCgUA__rmtUr1zh5?C(z-4X7+#c=7mr> z;wVX4V!$jQ3vDqq{r|#XizzAD0{-BF%`}K&{B9nk`gqS=?BYFgZ#TE-*oWIAKO2KU zXhx0~&~Z>=fCqca#R^7E)V1a^@j`03;#dOmanR^5xc&=S>?V!w{rkts$lPxtQ3k1j zTGdexE}z@$I^Ez23q{JAR!x*y$9vbUkuNX^AqA^La|wXt=j%Hh=o)Y7ulYh}-fz-? z9+P571E;ICH8vq37le*d=k|mdLhF_u6&?rxbe6_dcfqT%qNJpnmKH?WS8??F zcSQoHN-TL&W+rjX=TQ<*5rUtZHuyfjN{=8sL2VPBn3iTXmH=%t<&_qge+IS;H3(}K z$PDk>x=*&o7Zs^#HKOi78%?#~^2ds9Vz?O#H_7qbP3^^~UU@ds|1DuzrG*jWKP$V3 z99LL@Y7D!2^{Dwv09h_M<=HAeo$~vOudJ;tNPsW7XclMZ3pPJJ4eJkyosSaccNFe8 ziQt%X96ip)yU&2RJI53R1~Gmgz-LM5%u1Eu);{z>oF)X}+#{R9I)?Hdw(AUt`CwL> z77UtMI}m|{;GZvK$AC7cft7b3whUPCIba!rG1A_!+6U+P&lmDTXLyC_$`$N=X?8 z8fbrshpYqho}z}91pil5d`CeCMdcLg#>3g1&p_SmcoN?1_wc*w$DPN?i8PBx@pj>d zzatc2lNF#&!J#mJ1JHN0%p54Ub*aC7&VCF}$o=$B_3C$W(%)3E(Ig-JPz1g-g3`Gy zpg_nYpIH@+ehHlR-B*vB$l)CYE~xvUf`og#LZpVj`%^y~yfg>?34aU`e5~*`-WMrD zi-!{0yX4=Yp=zpXs>jCr+V|sxJw`&_f!*tYM}Vk{Ef3?U;qN{`*i6WSfpqGO4bI2x z|0v4#^kk2F_Tj+0z=62)%Bue_PsIl3qJ|p&isQLEQ3w9-=Mv0-`%aB(dDt@Hikmk@ z`+k8)2~q=jg8y;fUtYtZNUv1K2l6-U4)9unnGWyPVpD)v94Vt#y&Fl9f974O+Ep~~ z-Oni;wW2(71#oh4lLoO5OmG6bq`2C%-V|&E!4IHYB;%+6R7Gf3t~h=ddG>EnAMO_r z+0V6?MTqki-$_+3{QB`D5RmRHUI(L711&A04MA+*ObtO2u#0MIjcQ)e{rYw$2mZV0 zD>q9Ge^(3TY#$Q_0z(jMNFgA$CFZJbZD0a-EZwcwFv$|;Q1Hz*j>2TZHJug} zY2T)T(G8rn9|r$>``+>}*nz6b4y*ntY6=5BsE3CKxWIrm25yU(H~F!X>`%LRczD1% z?Fp5bX&>NKV8pOI(GESu%U7-hv_Y%I*52O8*m!<*1J3h1x1m4b?@!bwyA8e|abX~e z1_mRXK&mP#5T>lCBqJ5xVgn83f2R)&hJntbA&fHx+$(@-4*n?2O7AXla*`c6h)SsG zYPt`QTVy3E?Vc1P&^nOJ0%&Kh&1s;fsNYS<_6j#x!9qT1?tjqN<$Ta+s{he-zvk5i zlUU(%p?zOdUvG+SdaD5SA86ixm02Za#>VPE<^&l_s|zePu(X3exw$sN!onb!2D)^8foaMKrwovGIOqKGvc9HIB<~|8F?HywbR*PvE>KOtt@x1Pvh56$ zpdXQ-7y4;**=Wr{}BWbIoLy1268k6iXJmZM+lyVrOulN_q#%mw~OUo&I?cJ zk<0EPXM5{c_tKq)W2d;9WRjS>xBbDi$3@OvQ$5(Me66$4hON84u`!_+EI?{G@Q)pP zWNG=Jn~{-G3I+2VTPi`ca)$R#E3okLty9x(_iH`h*}y+|{;6->Il1YH5ts72vL zWkyEN91wj;Jh1LP}ATJ|GA_%EV?DZ{mYG^3^Nit|(yv zpGF92wS(RbdhM&_V<4Y+xSfj=Ezj=)>I|c3EKEcB%7E!C`Axw%_eD$}G*E$uhX_RV zp zbF&Ik8cI3nUp@jb%goTQM(K{ZBC457v1IYPc~o3nd}?w*=3WV6`YGKUSE8w)PCWo#{_iDP&hjRv@&7U9mo~3!R#3d zsGK3(5_^h%lL0TJPCw*$aw>TjAAciAzbWyyo!#o-b2TskA<(=jx+6bJ1#LZ02>eKO zshB$#*J<>xxwi&zP;V_6T^)+I#MG$iLpd|It1Ll+{hxu}@~{xHFI^cVJaOOhosRN7!qT}%W8<8+fV2kzC)U)cA?b|W0e%zRRlB2{|F_2Dtx%)fE= z$|XQ(wYA3v?o&}vTm|M6u;f@3FKP;C%E&AO>2<23OMZQ0)v2d{Sl=&BwMMgl9dfFSe{O)Se1z}=}4HA1|qV)7OV%xlf4m%7_G{1a_s1Ks&nr{jBJKno+ zo)^)HI6;S|di)+`kyqzW{r4{R2stql!mQHWy}a<&h$0(d++}CBF-7x=j@T$%#*@R{ zr7PbhM$_hhtuM;+^YBbA3)w z%gu&geG3gw8oofgc_mgwz@6Cb=6Ft>x;4H%VO|UL2b7i7(W47#ym#K;7w!NpmfG`X z`XFj8*_SlEk7Ysz*bMpJ70nHr8Yj(}lv8}zguVk9j1zUxeTItnO~ zqMOqbq`FDjj)%;xZvJ(QSi)O6t$v+`Mcc?PNeJOieBI$rU{>!g{k6vUX!wUoousr` z7?bz*F4X&FaJHntQR?P!=@w_jmlrP3zy)GTj&sosyZ0uS5VRPE;y8Bo24(sCz_I$q z`btjPh_9mVOsd|2=q&tQTxb>X8vL&@DB;!mKAijmttX*V;>ap0CI)Dwp|LT(dl^{% z$=&_~xA~*7NhMJaZlquU*ajo8K>iHAd}Pc@Az@(6ru>y@_3T&qzWgxNr?{Y{eqST6vP^{o6@!}LWaK_o$*!*rv zT`L?3zWVIxQym>0Fju+y2fI^C(=tI%RaN!Vr%zB2p8`cS^y5GU!foEir}yOq0C*nK zW9(KVv@n$m;KZTqUZCt1tk(aevquH8J0!|ZZvH{2cbV!L`&(^gZC!T2y?Z;aMOL0! zk5D@YW~1Rvb6*h1au2rrBQAb)diP8NA2jGT4<8O#L;DvV zU&qo^Z~e52l!U~<)VSf#{LkFTD0&k7ndL?yv;9yEzB@+pnwo?d#!Xp}^6!AgH86G= zs1rv9i*$rOGSsTFjBQc~u3f#3$pFK@WZ>+Aim z_3m)u9qvT7X39irtR6ZSN)T5E9SvFYR+U}4dUpOBH) z>vxy(yZv<+LANV?M%()vR#t4m9P$n8o4)aZd-Z?)gd0TZr@p*Buxt21&HVq6v<6Gw;Xdf?hc+ z)8VBkhDxeE zVKSjcg~=|CB7zb)`7enn#c^;wKpw;{VUnX%+rQo)`sPclH=erf$8^%|rIsc%XyqMv zQs_2>kREWx$s?!MM1j{XU@l;k24NyY<;PC)cQc5RnfD%G3Ws1|=I_xJLQip;`^hVM zJiNS?h0v`J|3v%wK}PDN=Cn$z-um)%usOnT2jT?OBnS$D7%(9C0DwCO+eLQhSe)!V zW(eVU&_DW}HeI3f_8?0*+R-06oU?J^|Eb3jWC0FJsNV-vKW5LE{39`HmnYV`nL?3Z zrpBlqka=-w#-F9lA!-Q%OV!D8;6N&;-z7eNi3z-%P34Qm4;SQh)JM`RaXecHIq+m} zsc&rm&$LJuS6*{#zd7ZFLeLtObHFmmT9jawDL}AHzM_ogl-; z#8ynYP@k*&L&%7ng5o66>`Sa73G_ayRW+FbqYkkA$#;L#6v$CC2ap}IkR1+!S*srUbLC>bH zheH>46}1F`d{0ZOx}$ht*WMyMxiTY4eM=@D*E5S#r zT&*LxCkaes|D8ABE`k9~2pL#gKLFymWSyn1sQv>vDQUAVIHzf7{6-^AeRAv>__Wk| z>e!EULM2hryJTRM@`KLqP;CG*s4oU_(k=pH2Xd70kvQ7V(0S@R8&+`KTK|&f(|yS z@3+iOWy>@KlKkfO_LzSvL8C-_3!EgsDR&um|A*}xCjE&&m9c9>c|T(S5cru61VrpE zAXcBz+V(gI`9MXKr+Wm@P~TUZoLw9@`OrTRJAhNY5yZ}c+Vuy&e`A7IbU=Vjq^^0? zn|_iuhfXu#Fi%d^b~3b>{L{jPXh*N=gX)7%Cxqo5m32du99 zQOlr`2W9Ezw`V+NiKx7+ELP^L`G$BwYQVfF^!o$?LeLx!HAX+AMHx|1nT`u;PmI6r z>t!t7+~M5ne6qwf0m>=+rO@T4Ibpk6EnJcf;8rolUARy=U6Olb8vA2Ea(?{jR0f3{ z$AA#KRO*RNqXU{3paH#axn|Gw-yp9Ck5EKOIcb6R z@$(TIINz5nzW{R*XtJ167fqweU$u$xR?v0JF#psTezoT7*Kw$lS6w%^syd-H*?cFx zWQ{!~-$6!1`~8kIQu=%>CUf*${@n04nHDizsJ9S$x;wrmn2Z<}$kJMY(z8t3X|&M_ zwlq{UKkC+#J*1g5G_HfVcDjgU7F?B=uv#AnXa6Z#yv#i+pR3@f*bV`B*Ci4HFa*;9 zTuuC4mK}JM1K@|)Fz(oY{Dwe+3$uSWTqE3Yuzwt~-c>Gcmz-0VXNIowX7~BTyOT+q zbM>HTePm;?=4$$C}jK*D*iSPxg;a^JofgIxVa>S;PrP_JI&QOT-0#mZV=Xw&|{ z?_%xI7td}#S5O$Sfcd?^sht!H;-gOAP2|S*nQYqnz(Mi9bcc;-LE0;{W0MFiRy$wU zJzkn>`rGA|)ZDFX$5lsIVxeCWVMT8#ehDdi%5bs~>dGUL?TG-4@CTMIv@Sjd zl#<7S@Y%s;zKaJJ7q`ch57N2O^SOQ??P7!@ZgWQa(Ymi zl@G$fRBv!%A0gE`Xb;^5qn#-msA36p$8{TEv&qETIuOF__qg5z#+sFZw4!=^>7@eo zea^D$BD{6FUy>rzPn_DFX_gPF!DdOAAy$+WvI zMO*|wvc@B2JQ{r2wy(ZtH5+~dxFEQ#Xvl@dz3wJ#c<<-AXWvh0nvbPE@7%qNq^eN{?zf&u5EQyGi zg0i5Q%`LWYY&>8+_S%OWYKfr3c)7Q(RUu%}i?^xTNSCSgBf``LPsMKWU+o5MAfHP+ zq=rxBCxY3_4wcjmCrR|1s4T>Esk@zK-Y3P?#^a0eQOm5oZNOq5>g(SNB?!fS$jn>; zy%DRY^jEFIDzLi2B)R^6Vou>aHWq#&sxKv#mzL)1kJ;9qmiidYw7u2)*zGa1*BP(J z=Q59Y2;~J|iwkrx^17Q8dT&@MM#m^^u;gW)j^QgtJf@`kLxXl+X$ExQS zj7}BzR9C+o7fK*ahz=z`VF5_iPW0T3)_5s^MbL+vD5q`{1m|t9vn}NHT9Iu^ss7DHP+A4D_B}utU`u@CH!%oD2m)|Tlfrb8w2kn zUUagk{?_;*d*Ml1p*D_;nF_gq=$6`f=$s4HJe*IS(eQZj!lXMVbxYTqoHdNg)F@$E z=2mppy<9F!yKbAh&n;7<-t=|B_=0E#joS2pH&oxnA3U*}uey6T|511F_u-WEk{{pY zek`#)f9D~6S;H<)7ZWW83b12>7(aN#<2lagX&D zW-WS2iRniQr01A#yYV#S-jjbA>>=&2O>=N(KEc7guM7tB%=?B29?mmOXxL5{FB^S* zH#RgxN=o_x$VK^?K*c%m*HJ8(rGcaLf&KfNTUrD+X3Fu%n7|>>W0W($9`dU&ZgY+C zePCz;j>Ul!&>R)_J zh&$jeK|@^;t{p}mfie%0F9)z=VpdG175g>fVav$;W+y zOhbUtx8kx<6s^*bv-Nd*NUH&yM1-EidRek+!Ho8;XW{ztMh8aB>+Tt10 zZ?8Z9JoglrDd#B|U#2KgEH6gbU5RG4TtaZ*Y5 zK!!w$XdOpO-8i`5)^+o7GNU*;w!HuL;xc!C`|Gx~UO^AuAVUU~QdJ)e zpE55x%he!{$}#KhYHXYa=F{9T_)Gy%3Zeoc^wHfpm+-hDEsrL7dCfz5K;!+G2CR5+ zd`+|6V$vvDi4uMSyoh9_RHm=s^xa#4C9Q+rLtFA@BPj=f?m)!}=%%Ho4`#im6oY9^ zQII1muXp*Q)J@_yc1=t>B_&{6b1!Mf{XcQp(0CIAxf`RhQmLMe_r!|zGUVPqPXzAr1 ztHv5{yJjFVdPr?-Zqf|WY+XmOBLhAezC;Jqcs$mSy@o5xIh=Tf{KEPDqVx~vE!l=- zPFGJi2vUKNV0iIyVj_dZIA1AScN*ppySwkH)=3629Xfar+%BBJ+kK7%9b5bN=WG%FV>j76eiQ8Qsf0y8 z+o+96IjskL`E~1FpOjvgPVTA3YkXPbfm}|UcIl2hffO85^PfD!nL0G(&PODJo_iAh zjOH7y;(NAMn7sV!P*q5m^C(D#;i%lO3crE;3^L=BXy?|zT7-Hz|G>xM`!qkm1sY^+ zVA&aqhupT^m(DBYIv;DmP?rg93Q=nB-U+dFy9HcCx{x&kKaYoTh$2Re38+_-blHIAn zJJBRD?7}%-yU+VM4ni1S(5P-`kd~BWzc$a4G^csOOh=S{dT&(g-idS=QC*AMq81gA}JD&nW=VoSSlQwW*ra^@_1<4uY7jvqPhQ0v75mteB zi5Y1N2%SYf%HYU=#-(D41)6VQBc3Ar)=lL+IqaT{@C}N;eo!Fmb$4sRF8~k6;K<|s zg%n@rz+%!cTQ%cMDS2%sCR15srt$#tWRR7x^JI|1E2$43dwVSCSE^QP=l&|7=agyufw-RFTllpTPh z*aB=DKNWy%%rxA0E(EyOJ<#XBIk!a%GXZy2A?!sRX(Y)=472nAvwAo?VeJgSTOLF< zEgWJP+}(v>cM3+tf8IYt(75!m_~Uv&RQ2(l>tmV;gLS(5iSoX@+FI=AfSV3JAfy z)o4(hwQD%kx3_ci@N{%{7s|y+MmjB>+y__o^G&aq|9JtjfjtV5|_~*tVFHyl$Lm6eOM)<$HW}kmP2^M4U zKJdjQpC-vT)6dGntaDd{U{xcBU^{=n<>Eob6?O$btU}j1GDP%`GY?M)VVMCho0o?t z4`xK#4-QUD6hfZdT<&-L!f{4np6KrFiTE|Fex5PjN*hW%q7)=;1%l zQ--@J$`ZH}ZlC`GhT7-E<9T+t0TQ@)4VO;(^A|yAFd{{-mjCB*N4Jn;7-4v81dqjc zIC>?Bad3VR{JAZ`MPuj5{(d?ln;d!c$adS^zI(efnk0~oH}pld#~W^QpwD@^*p)KP z7mFi>QQ&nJ_ZukoW60VyOn5j?e8HcXG#r+tgRSP-zYD2^AbVhfQc+W1bZ+d+)WtVf zswi3B+Xrz?9@42wbyvU@3uEZF_YQmt&&FXHJHUGoAy){kc}S9hzWuuW01W=CyhcVP zv{RQ6VQS8kBN<%qCC|Vpo?HVa+`I*xP;Cw1w9XZt(kHy)kM|VRg z2Dhi^>CM=Khmd=JhIev+NMV~u8V0eMo14#iKSCa-QmWUm=;56-U^kE=JC;uB932C4 zk3MOLC3IalAI9&H18f8E`HYaRaC5w&yUNJoy-b}w?;JI~RLBR}zP-_O9VEdNr7yg6 zSDD9JG@UmW+wq5rSSYHIv+$#d_@(E#TEvXPpH5ylpZR>5ELz?t`ie_OI(B3FiC`_` z*1BA(D(9+&v@kO1vW6a>j*ueh3i59poYu$4VT61i#k0JNh#;eaLNl=73Jc58cG$l= zj}W#eGP2h&9V<9c^A2Xa!Z`)M3Lz0WgRL7u5eB?i7|4}l(pmO~Z0G2PzeaYr8^5P? z_U#*i`o-`J)bbvF1M-ONKOVnZ*xU6FghyauO7fqC!XKXH>cUHs_sQb_%zlR7^+ZWy z1tt%a(aO2W$^7!53F&#k_LaZB?|qf=#dnGM6h(w>p+aXv|WA%E=Lb`GZ?W?t}>6f74oY>BTwx|f7q{mia? z1FAI={J^}tJW*L@ROHe=hl0EW=A>k<*NzB|mH zN!@sgoFVX03}U-odM#pf?TaIDF8*rvU~pX4!Z}OIQw`UQpPFVzWUh>dytv{xoS89{UQFtZFV&H^8o+*{eN&@zi@tM zIy78#;5lBhI)IE$ahY^Loo9wKa)Mo_`Uu<|w-I*=jSw!=u$AEdL)?3ZQ{DgZ<9ByM zB}rCMloGO%eXNF2DKpt4yMgG~t8r(KN(dcvgviLsrb0sK*jrYPy|?51p6^5R9-r^; zpYQj&?(5=??yy0F=KM$c3hke?9tP@rPm(X~fJPMBtF@%w|;DyGkLV4*WtL^LW z+$($xtK0g_nKPyH^t^gBRlrcAt^#f4D{r7i%%&JgQw0ji^i>lDGXcR>)cbw<;F9Ze z!60;13k<*A<+=m`3=3j|SBM+ht4 z)X%jssb|JWxfemG(;E*dFcXY3gE=m;F-tJ;cdqVpYilkTA26CBQPeaesW8W*$i;EW z1_&7N5W}7M*&2>eV*m;oApCGyApJL0Us@`CcFDZYdJEK-XgLSeYn*5ChlO9K7bf6= ztYD;~@;D+w`w@#w5n*1NGc+_Zk|#v_%}tJwvLKJuniZG;1~a(GKyf11KW7v+wHhoS z4AfjjgUXu6;NEyIZ*MA`ZXWu4$~BlK39^0CkDYMWs)D8HN=qU{lin|UjYhhfELv%E&wh9 z9j{(Tb@dor0{ADo{Eza;I&175u1P`FyuFo^vqYJ<73Az$qa&A-Tiy_ zcG+jzI3{al?Hz&9Sum*;i3dW;!a>SB7xL#iWuMG}t58IN@?(-b@$P3hj!y}U$cZyr z;u?feS~+51$w+}IDfs#Wr)e%T2*ZS*VK4(+60%ZoJwh}lMn*XG=ZEU$!X-!Uskja5 z9!S0zc5*uV{L-WI%*@P$sMi9I1BIC6cu`QWa)he}*N$=dLPmQ8ycaUaz+3>>E7Pw= zuJAz3W%VW0x}d4fqAevQ)l7yAU0y}QB*p1=JTj-~B#`2D(hMIsXr>v;ETsegM>dE` zv)HC6Z8s8DATbjXe;}T>@qws_2-I3!p@a<;8~1@=bqME!p*1r;&Lg!;S;PqSb*WS8o33)MykwcNY&R@kT|N3NR0BLpti(G=i=&GW&@#;NOS_e zz-1{N1WPrLk|>CSRo*{`oOL5ncyxI3Eoy(O0^s?4Y9P)9_EJ?z$yp*B7w}jIl0?8D z!+3%aP8eH0z+6w`;OH1e`vm4C6h=iwt=EyhI(Z#(YU@s;*ax;olb#vBX&yKY zbgh2o?gJ-{y;coI!CLzbKSs0<+ztqGaV5cBGQ0|BTu4teM3q&T_v)Vz2_65reBA$iCXvm1-1o>1HeBqEj*B*$-ENGzoOIw*~q$UeEz4* zx0HCJl1{39P+^wnF-jr^^M_ZrBQe${FsP9CGMy&Xrw*YUt&X6`z44 zndsD!pQ3WdEu;?29ejVGKb~tBmbzhA2$Eny%0!Azb$x!X;(XkD)?*h{aS3=#?yZsg zVr2bQMzi=%dlI?|NSRh*v|+?2JUzpvSfGBlsdNs^>EGfa*x*ych~?9$$ZnhS+9Ht9Y0te;@24ZK6G-nQ@993fVeoAbm*(h5`Q6pqkdoa74X)%VY)9v1HgO1nRLP_h}w!El9R%Y_f zrIkBK0tUb8aS5yH*IvvN7-$vycH%Yvew=#(JratXx|&Q1fTaCt z{n@q93X#}L@`^kURhwT@wWR9b8ylH%JtbQt6Th#R=$HuW0xT+7QnZe=Cg8P`5XYo+ zzAAk^TQ`3-)2Pr%`K;%>6Iw1LaO5<)?E#*qFT4A8zMZSu;gt13;mC)D*R^EhlT_K# zofqDO=v7)1qv|Q0pOp(vTWdfjCTrOH$CQVFnB#Dd!$x5|A()1~h~+x-RynQW2dM1t!3zWc6T z3J?C0DLgJ+UHHZIWzCkInvDhi?#Wnkd2U9K~4b4f{|{X~sfarYbR z`o~dL15cUCKOXlPV39eXooW6w@8nRc*%26y!5T=-pq1=2cO05vmbE%e`}ecB$?)yP z$a>P|dsW}Nzqzh1NIe!B2g=HVr840@3S?xSdW9(0ESIL4+H#aAEn%R!#3R&rNW{In zI$4vyw6k!wpQA0NTO3D8;Zp;RoR0$~a!tM#S5lTsCm(Yilxq@mxTRRX8C0Gi7;Ee4Ih}3E+~AJszPWoB zR56VkJXZ>bab6P2_*SGHVIAw^Q*n<&&tjxQSm>mYofDIzM8SP54 z=b+>6mM2OF4eIa?P}IW z1?)3Ct)(2Zd46c-`pP`77biWRR_)!pc$a&>r|@11d6cl*B!lQ-q}HZ0C3Z^7Y5L7X zNMkDV7#{Di5_;CqwK*mEmDXu}qZJ zTF&i3{#4y=^)&3Dwv{bkCk`rnvS2S1Yi&wA7sfvKl=YVB3NrX7Y~>eE%JBdYL}?kb zXx?d^i(_q%Hf<`hDLQn7cRvVIOF1X!yayCWFPfg$WWSzAY@e4?Ny&W>mwzYz)>zy`2#d{gVP{Tc4WZiLXM}RMb})l+ul- z0?T*X*xK&cnRvWuq9ts2L_6&qmE6)*#h6gIo4~V5GvxJ`g}gOkwy{F0yK-t_fr=Mu z(!daRADZTIbcs0#u$+YnqLfYjEyuQ5Y3u6*owES%^b6SSJcwcP_9g%_;u7~$+*Qhc zqQu(^uQFxh0^S4yXbFqG{*>@&=qem^XTk?JdC%pgD>cmSO!@Z2%aQa(Ln6&7 z6ZzJ+i@8HBguo(@X2c>PC&UUZ)XZW?(mB<_GO zxCC^`T-2Petee1z!_TWfKQ9D;&Z#A&DC+p{p~M;V$$efmXIN3Rd+Fv9_XsZBTX>G5 zW;a%w5#rgB1}R*_^(-%iMr_OY=CLD4F;klDKGL-LUKoM^?H8YZVSjG?n|;-R#v~Vf z3O#*Jw(v(W;G2aYWsKN*hl?aH>^9ri@RJu_w}@L|;AH&uO3& z{H!yC170<&|Mk)6dXYy>R7TwR9TdkcT!IE^D-&rk;QIDbuK-!O2tD*zQj%5@Fk8iL zi<3ndvGV-f+(^; z6|;uBz)6zlPxjRW9MpDl$N}7n_kE({U`|f}T)46iO$P**bvf03J$p1y@kz=@KEHeS z96(|E+)*$@DGi1Eh3++OdTGKPh2UMvzLVRhgZ{o05hbv#0Mftzf&JNMwu-iqEe5KGS*w2@C`lIq}^wod&ZU!Ln)c3)5eAV_0Q|V1wa1+QeMS^+wvXujsZ+qhiWD%OY zZmb%)!_>KwJSoq0q5z?$AtmgXZDC#1Y@wmp}fQRA}?z`Co0P(JsD8tlU_h1bCB>8=^1px_z+DHt8 zU?OxB&?EDwbL&+8{zP++rzY}q0jUQzQc#PC0L;`MxUMvRMBJipXqEb>H<|gtWA>)8 zV0L{&p}=0`WRa?gOVE!*S^PzVG1M>FtVM-sx{-#yYC~xA+ZsoPwmE*>Ez_W9OUaz+ zE3k>=+x{!8^ErTck15X6;6D7CtX3?;G>A*R71INNT=NM9D34ZKXXX4f^&{Byfv;be z*H)}r*-^ZDm38IlZMep8iTFGeE%P-N=zk75{i_Zv5)9NfR>%d4oAaJABt;|aI;rwoPm1wKiQv!SF!HwO3QxEhPC$zvU6 z68vZj!4!fcK>10`fVc?)drF$Hv|EALZ*gVCi~EODslUCSM=>H2NKDu$+d`xA5FGC6 zL_z%#zO<-_h*zyzaC|HZ>Es{uN4D*yrsipOc6Qb)N^iea-t8u(QtXCqO^;Q4)?u6g zON<0_GV5)i0i@xMtJo|ASsPSwU*4m^5SCdx^4*6!mM)4m<^)^MwRMdM&$k!l56v5{ z&dzKilu9l!&J6>Kzwv}FaVGhh)S9@dJhv(DMZX)(3!MN`47uSjdwidlLgeLy?*;x} z-=&-jHN*Xa$=beME|iBi>t?HY%j+&az8(gDSp|zyBo&2L{kN|01*9tshL)^N4oQ=} z6k_A-}n>d?oGT5VA&uLfNZC-BkfOGuk~IAK%#!OrzEV;x8xVD`60;Fe!2G# z&TXVzZciwfn!O{Ztw&wiPXHR}C)=Q?h#qe%ys)dJ;JL_@NTVewX#NkKU9c~ZNRL580YfzPp$f_zwKIw*{AhFFZ%J5_ zmAH#TH=vF?J9M1qhmX2xVgJ%Lh$i;3s`e|E>Dg3~ON~PnH`dcLzeV=u+o48Ezw6Be|H^gpIVbIMKs;E=AfgwJXbBOPqh*rE}|V^Bm($f^UsGqR3w;}`9!iQ zSnj<6u*=CNZQWVMf+^YZyPNehYy>jW_U+DKd{+EA=2FC0Pz>4|qnn?@%sakXe1l0e z+N#?UKsLK~>}bglc3t+PlzFwH4+fYF2vAucL$N*B~Ix&2J5k z(}cADXv{yP{YXhCGWuWrl7^J!>ObgXGb%r zpnS8Jvup@1x>~9pt5N6sv9K!8pDj&A#X)7aZ{Kd~i#%1h;lbZ{3Q5k6dvR z7(Qq{09ZiUDnJa61Mt*z%tc-t%F>B7UuWzj#i( zZJPOtBRA$8kFfckndWY`vgsD<`?@+l-VZ(<)8-og`3~Ky9#c>&{3hz94=R6u)^ zLu2>O#AUc*5a%07y46LnS(Ks>C!a;@ z2Osy!=u+#ED;cFLw;SuZW#dl(tS)`Oy0x#Y@_gPx zvX=rO{v?Hap3z`&)O1j99bMYfLD;L0k5vjBIOJn+T+0{Pnko0!&7^rLEalcf8gFy^ zwkwg4-5(Av(EC0_XSwD$mQbFFbeoNRdE=UWF=^Fh%6Q49C!V@YK5Za~8snkNSoDOs z>zT0ov!Qq;|0`ORFbDz+s*;0rJghi`y)QM<+sMd9YoQvxTm+X6N&!$GLrOxcmJdTB z3m}u78<7)3p(-cD7`bAfAPZ?jFA#Q#~3-yTh^nONds2O!k z_PC0n9nu`E)%|6Sbf>>^pxlXlcu1#fFts%FI%(K=x7}E{z-98*t-aEwfk{%~u^PLG zvhhRP){)(T=lVY4D8N-;Zw}bCeKI(RMq&r<8ckM@{1Tfq>@5kWeJAHBbB%>?ex1sd zU-BNr_Wb7lFKb;2Z=fw^dcvi-+Lv};M;8XZCi=`>z1q04pm<_+3pUlN49Y$OW+y1z z!=0}Ka(R)Ta&msYz{MmRw~f+PkCW}BPNa~8^5{Q>1J}mh9FUU&8`3v1aU`XwwKYLA zV|kg<%7@QTTHm@lBAZLl*|;Po%)ji`)6Ora6lBfK1#?fbu!szPLDgq~=$GipI=@nv z77N6geFIh7(TG0bP(AKyo8B6HC4F6M^jqQag|u0*+YT^5D0|6z^SzUt>IIMn5%Q8o#7@j`- zY>NM^7bbQ^JePU^7z{n01go_t{um%x?Ap1**GbJQ+!@?GW(Q4rq9Y^yy$vvzbo_PY zn;W&!CzUe)BQu2%<==y|^}M$Ke6Z6`_$w-mxB-&(9#XlNjsaQ8i_czGFYJ>ros1b> z!yA2i`VQ6U#kbXUzfWc9P3Z>)UfuFkm^TRcwbFlvf7Oe1i611r)L z+h~-M&a{%`PMV*PAtY`R>;zH?AZ^LUi6C_tel8MhbQmZ%{SA`v;#<}KJKmx?8bGRz zv{{Yc3wJVUe+&QL>Ycm{t&Mg3TR#=edc26>7QaWd-+JBmw znINhAKa@9bZC@{M`s^YBA54x?I4cQEIj_7C-!?a?;;QF0Vs((XykGja8u022Sph!&|@o{L?fTDk>^( zVik;0L_W~p5`vP$q-N0}cIkK)>G=3~vl6m`)#)ln9|bF`2|A)Y$eJLl|KG1;)7O>z zhp^>0m`~=Wf6r|J|70h;Us*?|qlst&vw@Jkf<-&kLxu4HSSx&6DR&oJzcZLq-R;Aj zhYufm(qfohXAx8w@zW2vAY2;U(e_WNb{(RqWPthdA^Fa5jyF(}^O*1V4A zRXu~?q&WYElafIv(v{h5be!%M8vh&c=37~r1PZKKHSSgWjNDEyg>UeEFdl|KT6TX* z$Ge)X1I;$j_5;w+1afPgE7YdHAq!iIk=*7R_H5Yim-g4)Z&+kx{qCrI^YC}3p$W-# zYvWLp=nWgI1mDAVKP}{X!|dndk6U{A@Ac@nZv2_`6<)yQ0A^NcF)aHaH3?nzf3#}X zB!Yl81_60zRTU>I>%b0Og$IBv`i@Zx6h+>oF;Pu^x!P%N7=$Bvfm7nG_dni>S@9UK0%!_m>*Qf} zsbZTA(w`;%r{z`(3!;jB@xplsA^C>yp9Dfn`>2?h^XlRhAkjgd z6#j0V6cA=40cscS{|)Q+-J*xNtEj31RtIJ>0()BP5cCX5% zn`}2KynBFuf!IFj!5~(cyurowiL|mv-^E4cKezGnS7T{MO9Ys0-CGLg4JisMZow$T zC#Jki{*lx9&;nI~4ws-s)Bf#L&OiRwX8pGk3?RRdlW*XOz1_-RoA|doOSsu3Lm4DrFMw;_iD*L94zqdw%JdgX{fg zH&Vhzy0q|DzSYr@zxEF|XUEo!cl!3LxTQs?o&5j3t5BNQFkjy;Ci1`E(J?>J0)HWQ z_orWlJzo9KJznRaAcyf32UayrJPF?c9e5zB&2)?c_z9G0Pv`_iMC4od$xfvP7Xl!x zebeS`pK0I)N<}}R7~(P3%bOH6(J+EW@aWN_Cr-eOjXJI5rrvnQ5N=-|pW`YoycFW= zQ!j#43=#o4WymXy3fZ&FJA&fk4S65f;ge1uJEOf^%K2?H$0|JHD0C1vM+1M1LBn!_x*a_??(219r`4SWXBsK)*K?GU* znrEV_JLRUdLqV(nBxrjy{pOR^QzOMO1$XSbU7OL2)~i4j@r?=Q(o{K6pnyR!yRW8o z$lUA(WxJBTh0#`i5JU#yP(HpiuscoiyLaxa^R0m?3HdoW2T-{SzWhb;KSH`k?Ltl8;Hi+2t ze*}zPSvW9ns{&=4fc~~>4ipnW-arejy0Y>yb7M!I?W>H8+d$|+IECAQthf3#!b)=S z%jUFc7#fK{AjyFZQ1@`y1dA)$Otw2oH9lbRQA@0G#bZEo2zJUc>3@z_WKL_%pD5CX z9KkX3q)8>{@qT*!5P;}V>V$rXw|iOo7*UAplcE2l^=*8giAo{Td<=B zt0UM9!vNl%^BC}UVR{j}grEe&oMd=)@2-50bu9GHSpW6NHySSvXrbcb;?&gCMTzq% zROGj5G^VT2Ldo~2N?vf3*2bB z2|fajCTQsCzBYIlPuWuBn*W@%4jCCUa6~@&DAc>wiZA9Z0HG2vspbBRW_FB6a2)0h zFO?yJy3v?8*W<~|z(hm>+HR2fOXEtBi@~|fHL7DD#%@FA%9+Xx0yh?jmHnQl7RK7m zW*cp-k-XO+Q(dXH-X8=x9;F<;09S}Wj zOn}V{Xg!FcIoz~foO@(g<}=n^><)+(Lr3^9006A1u9k3Fd`56vkX z2e24GM)P_!FD}q>!a>x*N_&Gbs0s}Uuwq96_HkeiXyI=s7vX0x5-ZCxo5stutbK~+A4 z3t^|j;r|3y!sjEsp2Ktaq=wEzI|s&L9sx$oUP$~AuE?+&pq8bkAo-IRYXRhX&_M=k z0;lyNIaTqX_i;cmmzH^vzrLKR5D(&Epo%~fPp4fO3>3ZI*FX+~ZJ0KC?tv^W923J8 zpw3^w<-*Jyz_2?ko!KO;SV z0a)$)=@k&&t>Z401cAr^saVz36_APWBLRB%L5a+D@#Av5&QRe>d{Jk3y2R}zz?7U_g-O7}x@M8Lsi9}{EBMlYWxYlA zghhG~Kxvt?#+;1n(2Ms*;z`_O&p;t&wHHAtDpudtElSTj(ks{YTmEi31y5Lo^yV8cp1sZ1WHzpGw<%Kw-6kRooB3VhAp3T5bm&H8b}Ta!ZdvBHIou|PROawzFc~RN%x?5fk0d19$&Ic+k=Pn*NG%lE7G>bnCuD#qsl>?wO1V|(bN-^VeiZT2?2%Ky< z`m~jkQ;4tE_O6_3-W>~`x7#Cxk_UTLxI{#vU03L5vGtS7wa+@QJ3VsL^Xn0DzbXfG zrK%?!tg`ub)>3*M99P`L?UWK!SOE;`@SD=If(V)toj%I z{dVPoW`;)5cfg7-Cym_7OpSGh+#aKKaB1oJ4M$^-XbvoCj=yV$O^Kp+^9!KQ^D$24`%dqD|HKA7g5Qr~LrR(O4SgUzBW1vqs>nGzQ z^2Qu@!q%iNqgM7~Uk7mzZEWndi1VBot!*Wh!-eW1L)lPYPoe3hH}>IJ#YYN zjew+-hL=yG^~72Nfa)N;q}ua^lV|#UpqRfYyN}m)%eKs}F4tGkQka~cemEk{mCmaoz z9TmCrLNcA&C;by$v#&;Eo2^Kv$IW<5i(@xu?2CQpqx`6N7e+79S6LM{vWkm;6d1;6 zCKyJ*wgLWTs&QJ=aOsqShd>5kV|dh4E+%U|2Z+@!VJ7h$vq-r;`H)7)$~3kVvQK{fVIRWs?-vCjVdl{LA`yHryM>dMA^j}sIh_2h=2p4(IBkETi7rQfKz}UgCb3} zDtg#m0D6ZUsMt*%QH4!Ou z`vVo8bsTkjfis78mOzICKu)y-Uh{Jbp7^Z43OYO=poQG1ty~}MVtepE%W0$XXePkw zFS?_lwF>4MOH}GV+PMPMptbsF52-9`djhoffxTx6O*)(1DJzCU0%@);EZiN>msNEj=`Xj~W+4?HCGehGH1cl$&!F=P%dtn}cKtFd>^c>j&5NQFt1N&AKn zf&Rol0E4ao9-5e;Ag|ap-*WmU|~=ls_Xv}{=;AmTY{c(|4C6=GBZf)Z}d zHU#9t^zBE>QEfT-ZU<1S%xP0#&?`d$p#$ksqq|ziEnayu8Y2YQ%0lQSpshKM1t8LQ z02UdRiSL;wEy}(C=(0b5-q`<4W*ysFG3UBma9l4uSZ4!7JFPto$d3#9nANc+8s(a0 zil_<-knkEG9X(o173F;0S0rD&2qw1-aOPJt^$co@0tloxwj~XEnb3BA%u{tYuF3`TKo!Kr$ zaCtksT%BSJW%7Tdn^1dYe)dtAr3N_ae^4f#Ov?<8ipHF5;+B@;1KboCl|Kf2fP0Tb zj!FS|;}aYIxE_T^pYW;yNk7+oK@;b%(}2FZ@`ZsN0xof)+dy?xI)D~aZ$+8NAAVr< zGUNL9E(G#t@7$xuzzIvaTv65DUSCyZ1h48dHJ6+m?$+t`0+o#NPgjw!H8*4W<<9cHyHgAqml3%=G zamQH;sjS$Jn+JNU_w4z?NORe?|Kld!;tql1i5_EN8i~tPyhAwN(X`^TPyNnupK#vx z9Y6m7A-$>af1*3H&f2+23YW5E{ZFkdA2N=_W+-4j!W=8fN|XM+?XvkAyrq?8^0=Wv z^`YkO-R4n$?NEpP#sww*7vzz75aO?cIi@>h;NH55Al|z^9Gog zj4TtR^z_i-OvWD{M)sNjJO}%-Og`@8gqU{X`_~!-+BUZ>ocUg7mS-JpKSv8oNL0y4 zZ?Wpgl(t+VP<9Jibwz9NnE_-7kVRnQAO`mSlWZ3r!WoMM^{9y0{$%~LU<7+djmjzB z=ta-X>q3O>hPpnRAD6tkP(6b?Rc|a!ZtQ#iULwewbM{Khe#Lzt=fD1n+dGV+bac+E zy36U6@7kzU0nYl%+ve}>S(0QEl9=&Pt+!7S@5l@SZXMJ}wr`*81o{j_HnA@OP`V*A zInaC-RNQ|>K~2k#8}bA17NBm$Yqi)!HO~C}P=KWCgJA^}*TkTD1)l4O+-`Q&xCX>* z4+P~#lucy=c7-dDQOa0m_}LLT;f7S^&X>v-ssNuY0@Gm4+B@(|Kqm1qj3mA3%Sk1( zuDhwjsfPC@fbQio`5VIa5W7cYyeg$>GQJ)OoI#PULRbg_r>mO55`wd9&$qHAuI&I& zDHOqG_cPn!C$SJd1Yi_UJ928k zJUz8|b?qceKk!rGt*Rp4wX=x@C6_?`2{#UTj1HH5<_z%@?MMM}dv=gMm|3jewXW z8W^q6NtY`|K<}}1`rZTTQX!8zB|nH4LEVx=zh)0`r56C2ZMs;Gh#tNpbG`87Rt5`d zVO*Pgw-_*6+c)+f=C@k$m9YvU>CHl%V%DNte?mepB*H!h=yx_4IT; zckV5+6mGVi7YaRc!!C7&+{m#fHsJXtyl>DMRnV&@yL7f^x=J|PU2k~##z7Ua^`q)- z)yIxVC5MSyCCwEp7*st7vv?I;`e~ctkQ11<9z6bK#OhrQj@|eX?WwE8BJQ7(L{c}0 z`t-V$iF}N2AWuL5V8p7fUxKrkYNv&9oeWbiowd=K3J9G2z+eJZZK77J92grCMqkh6 z+Wd?rOXESsy0t;f*KjXP!t42m^t7FvO?8!2H&+=kfLeKoQe?WI1Ea(RMX$W5;p0S= z-4l7xvIr`nj6OBuBZ4S^#=OzFe;{7Lo$=toIGnkgNOtEeS4i7n|K-aE+~2+55wd0% z-)d}}w)`-exc|xsy=lW0#_q$icUPt6Yqm(nWlVI}9yQML*zPSY^yuNk?fyH}N>${! zW3yz3?kC3jL~~H;DjmG=V2?aUc-&uGa4Lx*T*sviIrhpcHvs)tE-PehqL~2l1q#Q4 zwmjm$oicJ;k^lwPTGyHh=cvAl+(`c05h9VGa|z8)uXBKD?jjoO0`j%Ur^t62>#B5n ze9s_i6$$%I$*(SwxR)>-WV{V?XpL9gF+grcVH1CB5i?kn^rJ=p*-EB3WkcD!)ZQoqOikAEnyGbx1=%|W*C_$E1jfZ zY|54kq?azlUcw=BuJ-qegrtF|?Yq^V8^&V2qOx~icR;h2|(SL4>Mn7yyh*nsh8_~*t zGdRac=BxMMok}Uw&gFBbQ4^{8xq$qXO6As8_hOQ^nhq)g z45KLb=?6?D*i?O1`-N#uB@} za^gqgTLWdM6H`=#n!!&Pu7FDmzOmd|e|ftJFkBj_qzw`-9iYeLSuOaoTI(j6ul9V} zaqJ9#+Q@1Jz02|96FFSLf7u|>xk6`E25>$p3y~mDus7ZyX z#@iRI+LX)s-;)hw5^kv+k1yu#Q<2E?K_0#zy2lp}tar^fDzDH3 z&0wz@;0#kwJ?M~G8?NV81VhvEa}5WYQaxt}Q~2^amSz?e>Fa!3DhOn3wUP3L&b$kc zUOD{5H0}N(TIK+94i!&iVkh$0%MUG!+POsFKcnxKF%%hc_w<0&-rYbKgTRod-luj2 zn0I^y)Fj(10faPVb z4SS)22tdBwxT+)pNg!n{znvt>2VsLA#ClaVYlkR?Et?t}XHWHczKBa!8=W#9yt!8E zF1uzUAs>sam)=ANiJJ-6hE5hBy7*Bj2BhyU_S0XIsV2t;X)75ZzlMMbNJY6GlD5(r zbo%Q)>{}kIlNd*?Z=yt_@3Js_aWp48F=~Ym%50K z^9j0jJ)jNril5{O7X;rD%MLpzcugfUmkVaa@^o&-x6ZI8+r=&NhCL1Niq-I4WNaxQ z3DLa_QlbBj4H_gYbkn=zyoq}s40(My50i}`fd8dpju>Q*X2^KJ9+Y?bRVcY z3`shVw(zC7f>?1W=q(`+^&O1xS6yjINetj{FvQcV34}U%-U{2a&Uf!lFEoLmk8~fj z^6`=pFlAfTuJQ@T-(Rjmhglw1iGopD&Q4C@=6=ZDA^XFn^AG3btH`pKLI#uMA%tXj zGV|uTDr%kFtH#9Zmm99|8lB#dkOPnkG;o2FIQ=mODrvaaS4$|FS=MTJE~ACaKO0O- z!SuSrDDIVBRs^@HqV^w~bzBRbmy;vD@Q_D0kLEZE#DCfeXQ5#aGlCFJAArum)9%4^ z-1~F=-FLAdwRoRB7#Ca2iUvuUX=9f<5^T(BzIj`OkAs|rUO7sidVo~@cZKr zgH7y8h#=K>w2C*L>r#4px}lL#nY%Y~FG!E^?Sg!jyLizrFi;VsUi$j_&TszP&!u7L z4RMViAtCWf>gcg!9v9&^kcXExn=&}bLb4hlM!BIyL3?tUkB{$CxWFT~`sU{5`uf{| zp_De}`Ek6EZi!XpryAA~350-`8bwcl7*33>4b zuoR}Bo>I}#HG#;mm)G_sb0|Lxmg?8`mz=#w;)5H1T!-V>CpJ|5ynEM7g*~B@eSaIp z^z`&~SaeV*x`pXzr~X;nOd2|MzgZO-|Dth_Yb?tS<2QT!cs~V+j)dr9De@sYckr~Q zvPi8ec>)s$JNrw3tW8Z#y#N<(Ad6KE`x)VAcI|O+upp?3gFM(?1beg&oBUJVoC9>$!Hp~XX8`P5-LMdjbtnN5C(x7T>3uO`jD%Mmobf^NVzkxo6*MMhS= z!Y~EefeR2kh_8zz{^Vnf`K)jpAwhC|QN7|YjXMJ6DRhrFrzqf)+uEN(7hY{;0 zQf4gu^_Ct<@-j;+IZ+nyzb7}mW+|w{?LTBM*N$VC3>>*^Pj8c{Q!afXH@4 z)L(7Lcdow!zZYE3_+e=?%dP-&dj5v5dmv<&L@$m+WZQf?hhB4U)@-{?-GdmSbxA+u zt~ensOPX!qM5UL4FD-^&@&Gfxd*WJ%W=4#?3%x!%mbHzIwOk^AM$BGvtR#$DE8CJ` zf2+mmQD+&VfkAY)7u6$H>vMsQ2CR8WmvjzobAqt^D=RAagfNxcUkFEg-R`iU66oQ6 z$e~qs$N1qhHE=_HeTOBpOh$IPI*as`OdUJW)HTuUE33C=D%v|!o z#00-dGz=+&vHe(Dz|M5ls59N&4jjZx>b` z?+T|i;oa(8!s#J6U0Qfca)a?G}Vddx(j)G;oumZqjSH&>$7n`9boEOwi3 z=s=a&@{(h+j-d9A`A1IE^z?-pkM6h3liL)^jfmw44CVziANa za~f$r3w4G(LOEsK2O+DjmJe}B5fN2W)a}&+X0ncl$p1K1{hR;MyonQC2qMmow!W*Z zJkBkFJB3z=qRJAoe)lLwJ3{bAL%Ip|P~W|K!)W~EDl9t0wZs?k8oa6>@^teD_coVF&Ro17cZt!*A7*#}dM+QvNj<5qntze9 zV@Cq#?nA^QAu^&TaK$eLPNuiVJ&7e2x@LYZ_1mWMdFrC8eWw4V)++UrG7-$R<7sc+ zAnn%i$vj6G1ui!DHiSOojGCt-{P8$Ugza35E5gBrf-6!Za3+X8s~r~ygJ`r zQW%M4SZuZhdz;o6We^0>?fnBI;qlqTf{8+fopI*g$SRJVHjh)cESTyeRF<|XVG7-b?X&+2+Z8gFjyhqKOsDsJD;i_%F)duR~Pi7D&1 z&rNh!zZ}y3x#%$$cA<``=%>)IBEU_VRMV zy~T#;(-H$A#p7SMku}fF%(SK3mcjNM{G{-xR%STF%HE}j-Lh?nKi_SIFsW@tk)D+$ z>Ucf=o!(B=-rNy5vv6QwcHO}RlVkMCXdhOvUuChwViUV2S~Je(+U#cV|8OV_dw^7# zNs2zT6BP;cKHxq}XB+0fqgq>-$3gigN+R_5Hib-F)SKL_7O^fsGs?Qk5e)6zhI zKf_jkCW%|q{Zs(~ySG))47}a7%xh>UyP3~gJm?q&y?=4%RPH;fuAH#3fdL*ARe5XN zCH|ONXBN~?`g9OUoG&D$`M`}gk&ZtuZT7sXHgthtE3BT>u{`(C@_p0_r9z}csMCU; zC2oZ(s_+(H30@l;WmKN+y?e%;L))EKHn88D>tE^*^ytZEs{=0S*FfT$L=(T3=Aid3NHedEbXQL5Aw^teId(arKmO(9&OVs5vUXlNsmDzKNvw zLJB-rr2wDxTWYUpyyR3h&7leq)KMX~)rSq4Sw0exqtB|rPJGl)F@r2@u~(23d-&|) zK93}Q>oIUFDF)U=>}9kI4Ld3r8LYAa!4javg+*k?MC-qF`Sd~2ZfU@&spp9HC*@-y zhUQ3l1&Mw)lKmPO;|R@te;$K@H^e}%mIUwH216oNJZwfD$O};%B1F9NlB*2NI}Gh zhc5C;I?gqQ_UEA8T<&9KiTfl=Oe@q)i-g21y4DE<)J_CR;)*oN-7_3(O2%Zg&oH3q5hKad#k`#xmM;;v^UG5`(md*XxWL>n^8I&Z<{ zS`yAoJwlG%+?OwTOiU?FO-5tlbO6>T_?0Om+9dNL zRU6ocnFal%KNK-t95Is%3rh>d`c#-I_MO#AVb~zH^CZFiCl5)iml|Z?#$cH5ILScZHq!XtgX17m(uTw?+(PBBp)u;*yQ5| z6=mJ{0Q<_XCeA9&UYmoIX~IG9Tlvo)=+9i$SiSE_C}7If&_1y+SWd#JV6w5f>ec0h z*>a2#%o|nhJ}6j;q~@l2gAcE!yhppw;JZAyC=7_V#vfB$&dDfi;+uVi$%OG&uat zl{K!RccV0fZDA|IUjFhSH76E_oj!Eg8p;$rX*Z%T;?*0kx+v84+?@9eIR(Y4oBm_( z)Q~}`ulME+djSzu#r2YCxRw3*UWsz5#P5jm%d?+VzHr3>wEkyv_1AQP$_TR9n2 zRwa02kiOxnlPoqWD%9Z>1Wlo-#^DNYzdW6pD1#V9%k(sXp7T_iKH)x}*L!K?!FT)+ zYv*G6Epf$y^q8>wT*Bg$Al2Bw!HZ7j(Os{zvN%*fI1Q%oMuy`*iOvR_)8$VRChR_p zM8>V26XPrP;LN;R6fZANj3T3ql@fGVvz~f9v{h8Z@r3t?;Xu{XCDqu@_AIf}Ngunp zX{*u|&3r-)>5rjkqLv}%jfp8K^-hJ5gD#Vv17%zLc9?f#;T^zk%f@IHo#D)ulc8vG zhmtqw>c80bi%}yLSP^S}mfPh)OXsNQw=;aP=Tyy+K5 z7aS-TIUl-F4^5jRNAg?S+jVoErb%9VWFGb8K=uv$GY}B;e>%6!kn(xka-_l&rQ#xY zxLjcVY=;IXgm3DsuDAz&)X#+3Hb3I4rKwS-`$k9?2@@ZetXp(u1dl&77HK{@HpcS? zg!a^263++i(eKtWjKS?DIbWjw*oQUHo`vc zjOaCA+GvgU@9#loS2R;I87U$5gmW+&XO1r3c^!4u1fkI>1(c~i`H9BGhRtxms!AT$ zNHbh=UYL0i4x>OH>l-!aR=E#7Um2^x`qsc+_+Kvy;f@dy6T2qBkY>NMWdKejkT8#5 z8u=b_d5wV?fDDZ5!sfJ3VPcv$Lq~EQ#TbNBcmq2c8)Xzy(U1wzalbF6OB(?y*D)(E zevvn|eS;uK>Aekmpwr0DaOK_T6G(BYx)=nuf2?WcY9E|Xq8W!!Nw2M~E%RFaXm4!c z5;Z&iDS4Z`mXl$!mL;-tZc>-C_i@*o6U!(j!59HrB~3Xd8W%$bx%hh=?s@d%Z<)$B zUTZ8DO5P;bntx@US*jyH%6?ua@foX5_Nt3xluP6+G=40*Dl3SsXBhW!L8wzaU$yDJ zfA4*I9#fjxM-cQjyW6R`=en@Y3}QA|wiB^3bxHOmZ$RZyGs>VDRr zwUyf=*7jaDf-A(zNc+o^oc{(6eZ%5yQ}sr?!%gJmu5d`(AG}yo!&@$hG43p4c=CVf z71m3fD%9hPbancFr?3?Ps5XAHSpH*5A%Op%j>FSu5TD?^^%H+5q8&y-zeRi3rGJ(z zp0aJ&V@UqeyGrcB^7Xr=8daJbw^{!8Z3XmB6n`u_y(~bHX4HaosRXJoIvex{@HqpW zdrgwn2Q!zK`0qFQK(TWc3ctp5nX?ibtd7IO-zU%M8397^&Mt^}P+Iku4kVkU^a;@{ zhNIZWhaxCx9t@NJ0H^ttNmyQ^c$+B{x}2MDztMJncz$X6h*6%B)QHTupMt`Hxk|o} z_N}MGT)f!D4VX)egR&aebtMp`e6V%>P zMQvv)CjQ8oZ$GTZ=xpY~A5O^Zr;{pu9pRQA!@c_^KgS%9df;Kupilz&zs5b&%AWWW zn(%abQu*WG>DpuZAc2lF3(Wr`8*Di9ud$QZb=4Oq%2z=`{4>?VJ{gm z;_Pz;a3{uzGbSlsrv-lgMB1CBjNC0ND+6P6DZAK(#6I-6)t51J(DZ<=vG{5S-ll~+ z$du2^cRI1M9)7s}5|7X3#^_sz9;>dhyG`3C{IVQ@8 znv>|5Hu24A{|m{-8iMPdDxOpUX9H%K>u)T23W=D~f?4z6N6%>*?!IbkqgPnbX_M4J z=U=~&IA(sE8yRos{r(Ff-*QQ(W;*0O{Ts@!>$CT2?E;IuSQ~USh=@jyll-(Pr4wQ#j5;q)Bp4Q|CiyNCly4 zhvRyF?BSD98vfD__Shp!?7TP<>g?uv|&&c+UVMG*%TBNsfKEfV)=a57v~#a zt6#T4g6OK2%f+VGctiH9IaW%LtM6|;$HG)l8n$UpFX=epR71Z{v|AZwDz76#KEMjX z=m*I8_F)fa*60EFIpmI>haeKe4lL;qc(xa|8rbInqw}H0q48YKvM`f|H1b=R$V;zC zSB(&3aMwOYeoc+>j-m=szi!r%S88T?1)~k7slH8|OJ1l4+_-Qy#yg3sprFv)V^aS9 z=S8}3_2(=Xj)t2Lkn*GF4^t`oBe1SZJuMEuW&5QXl_-r$0Q{|OJFE4BRtn=k+FX$U;viOXTr7X?ypC9{<%=ySRaI3^nq?8E`pZvh zm&a+RSjAAEBNXVkRvkNd(CNmF8&GmWB^s^qMrQzfE!NrgX0c`cbK=?2FaG+0EBs<7 zXHzYoorA1(XlRJ+g=*S$d*k~T*omp;seOwzd3k3{OpGi`zy@84Jz?}O$wiZ%EbIG8x!m%SK+jeacsLlsp!Rn&hm9~a>9EN zIQ1&CvhrjKfTN^w&fS*X8d$)ZRS>0_?4pGF4!(0xZRTHalz@w4XIVH`Jw#+Zh5n*2 zjQ~P;s`t442?r>6`!2ZBZJef5HJ08lgHpH~m$%69mU0(d< zFZ*INzbdA&q&hd{!N%d)-Rtw;ljONA7fbSGPW|PqsesKot7Xc)VUwYB_Rm0hQ#LHK zrpCH7^oZHm^?6G&ec!%)d*{v_z*^3OSnwG$QK}^Elite5E6l#@iqT%OaunmLEq{xO zDkmgAe*Aa)iNV_9fL)cJpDkOryXwVB;ob^(PxUz*9Tn+4HKMAk`&3MoN5VVyQmtyr z7%oDdp9hzOuy&e8l*UfH&>)A&HxR#Xkf5~UnP@?bYkR!-^9{KrY+YHSaHGi_g{VI> zNql>ZR*X&-=k-X#2Qyd%k$Tv}JBIc(^BFFJiv-3Y>LENrRFJdHgv zB4-at_VJQ7d>NQ8dW3tN~D^lxw+Q| z2=dQu&|)@SX>BCS7H}(6Q-H#!XfqNp@%i%^h^zPg{D!%<=`mVlB3$!u>3FXQn7?J| z^#{Mj3S#T6VnOp(UM_10*Rzs5Jc>v9+p@0mIq1HIJRbXY0%7z((yffrd~rO)rK-EL z^K_Wv+L5>meC-3=6hsqf-3@8R-#Cr$S_A%C#TVfv8hWRewnmqaB z_xX3=rx0JHj4d=kZvc5=BXVK-N1L0z)tj*Ddn zgDJTtvv(MOQnPO^5KbTH?ZuMHeQ*M7DgL{oHNi7g4?C-(c1ucz%wNd?arb5i#ok(z zbl_o8Rn)e&um&xA4cpCPVk(p4I#`wTsDVhhBhrb8Ki96!GDt+0X!g)-?fE!sWY;~3 zU_7>0pwm13g}SB|?iLf&fw8R=eav?iJ)+d(CuHE%Iy$vTa2f zg+{EoSpymNvE({wdkuSSV)G1^&);xnba6efE|04p>zv>+FgjZLp7dq(&7naJ7KO|~ z-K*oVK}PF&j$1znyW6MF`PXmtk4%_p^GOQ0vMr^Ti+A_mu~lcD#Ueho9OV(wNzj`* zUjc3ySK&u*_uU8^klv3^_7iU(pB780xVgD6&Anzj(9@v(Pq7)0ZDN{Uq^xk`vGK2J zR8WbAdDE~~ZfM*0tl#vFqm#Q=*rPAzM;#mPT7*rh-JU8-f{Ulyj3+J5iXj2S#@IHm zv$%1M3hY~TGA;9)1}n9vmaST{tvt}v^B)HC#e8DD!DaJ>G{)I-7FwfJbbx4qTqL~` zMfHEs0pYXtY2j=T`GC*eoF46=O`-8|%-O*^%KA$#h|UAtu%BQzP{Mc1>(tEUc2zuI z{Db%7B#X|)V0jtCZ=aL!>rv;CXQlNV%jxAS=32jPVSi72-6g$-8XTW<4qa@U$Eni5)K`7exUM-EvqS9 z%h#=gPlDB($%*~VqZ4Dp*xWQRF%hQVPZWC}KYrA)*mbo}ch|0DEOVm9H#avsZG8Re z)#8-_qmC*9lyHY}SrpB?a2^5?WlM@A&Hp*2fsJoOifZEv-FtM$Z~f0N#*MRL>7dkm zFOOm@zQZc7W@{{|-eikKY91926BlAL!{q(|;nJZRt)*$~ zfa)_cG7_iE9+wGQCUdf~R1zn_+tmb`2PUHIv&lOR!X z?qp7)Fk#`q$$C&a;b|IRV zTMJi%`j3^c;}Z_)L6ca3f&$j~{mn%>k|H87VNo5;;j6cUI}y%?$v#qdL%Q~wDcqNq zp>Zfqs4`RE@#Of~J8ioWqq7RIAhkN(xZ?>fs7u$*ojcW-fWr{{(*KAzEYO|d6#l)8 zSOr~A&=2zy6d#GNug6dY7mXkGypMKYeTB%|sH|Tc=(C}`xL8T5{VEE^YGUCfybvwB zKZPF;$xpf3PYPNqe);i>7oA9ssECH!!-DeN&{AQcrI3(NmJAXdZ>dlod^&56w^{KU)EQdmDy8V|FHp11xJ7W_UNPJ7LC;dkaBa=ri z-PGq?1iPSBM(GYy_A)XuXaga?MlM{;6o6A%+@No5on#-xxNf%^U}dU4R_B=&v;{dt zQ7#ZxO$!z*7_qyOhejoH0S=_0iOEza%DjnUX79fBMaJL{Q9xt zfQL4FAqHXjenIx5;Z}T$w^miYF>lMfa%`EO*sN=(lso8cxxgXP=B0?~$|2-_Fmd0# zdk1GMK)k8uZHhP|woK-*Mk*>QViVGEg6-avVnP~LkVR{wGdB5@xW2;jYt{N1=uKLO z8yp-uBNGrAvMem{8S!l&;ZUK7f;SF6Ytr~?emc@%gH%l)KmV#@6$c3 z6W0Q94{kEaSj>xI;_++jD+B&wWMrfWz?%sm0i2tTlUU1~CwpCMQd3j2k`H*STe)7$ zpoD1WChtCb$I!DO3JzUm^8$Mz-0^_nEB<)7$fcwXP6koo>1uADfKxy@D-8= zk}pA#w(k`|646Svp0Yj&J}F5$GrVD{fieB>p08iWQRiJgG3U3c1DkMjaBPLpk$zH= zwEFfLD-dz3#>T#^>CExqteo1bl!sDNrp?3L2&>!D;76f0g2G@)R|jDkguZgcF8tO! z91WbN^VV!|(poK|yYS>TA_)^okPg&r0HxPTcb&P}Swh~aASbi)jtIG*rS$J-9KULT z0_Fh1n@`N8)@9SLwjzWFlRr#M<7J#e}np*6sHRZOij&P=l#S)3HbPLi4$BB z{e69RCLieUt({Ge>bmF>KIzQ$uTr)O9{DMuVjc5pP+UF6Kfsv6@+CIfu(bm?Mv=o`3>B|>WgpWZDMhue9 z|L?imz#qHSrTAPnNGy@%l|TTxq_3ZVn?7O5x!daPHgKs~1!$$?+k42nM1fn*FM->! z8@qC`?p771W_5LTBYiDqHbBOJXf%)Fy<+d!6Xpl-rps&4(k8h`wWRO5j@#Vc;-`HD zcM}Ys{{Ce1Hg`pmaYI^NP0i@*VyV)#g&xwARq&d{#u%*7efo4`jBJW6mV{d@g~@ju zcC~r&!-9`qP0<&$!`ssF?b|)*Vb|}!9dYV4M$bVBF)<@u2@RP;FeSrYP}z8YF@t;P zo7;y*$;t`#IC5y|czMInXH6joVKZ~0Wltar#xUb%Sp6&Kz9xLvJ>>Zv@GRJ{K?f+3 zjt!XQS=qRyC%^8qkC{OIhN}*ow$TMJGaY^;==3-NVNa-EVU(vK4TCE2NyM9ntO0Vh z94iA>uU<`l2l#;DN=H+Z@{@h@dWqey794s_zzUv*ghZZtEf<01y+P6r^#DMyla~Ar zO^_z$toSVEvZ&tahnyH0$h1v4<~cDuZEj%Xe2eiHQ-VV%7M~4ay1H-Q^@STz!>3d4 zxVVfCr%!v{V> zgMCY7+5p1!)FoHOoI8LpA!#!-j+h?+2Z5~@QsC4WV@Lh?1h7sjwiM0NVB|LKKDKMo z(QPfu2}W^m`pZvT;jF)1*J)YG3D=@)*RG)=K^=)g0<$=Pl*f!5y5F=t0KN$$(DQ|> zj(Mk1#cI+XH&7$A)9vx{fGv-pn?l_0O`n?RX|R4BHH9hw;U-EYyyQ!UV+*78=*Y;W zx+J1f)TzWhSa}IarLDD<$NdTZjXDb%{(0yc!h3#)BOzhJc$onHiCa%DO{5xCy?g?+ zPcArIEv7NaqO*AjeuXM8RF4?ladKL<)9h&)6@97R-`x87o*4ch0>{Tc<~0 zlk|yJwrrcz3N92d4p^wXlRL>homeHUZNK#b;c6#6`90%;4YNk7^)`o-^GvZEbj16a zJMIo#;ufskGc81MQvCc=tV3&>oT*|r^PC1`!|oLa;<@9YyBZ0$S|iYIgTeLxtAu#{ zH>-f!%d7q8xjD}&Di%3R_6H#ko3Ece>zdv)hOm*2At(;gd{ch``b10Ty9`Mi_vzr? zp87PqhfWCew4UcjyBE#^Ekq0|((&4+#zvVkR3ckOiS^331)l4O!2r?u61VfEEkUDH z^6%k1{z>WTRj^CMo+XlrB!r-Zf6q@@hhpsm_+bC9p7%LZfKq(@b%x+Yfp$aHfDU%A zrSMVfQ*DrZy{}4oXTH%FdiLhZHr_L5|1T+}V`V^FaZnFtH7$;WbuUVmyS4urWXEQP zNTs^U4B2z0rBy&V0AFIpMr>@xaF+*FWT9^Mvc8p zxr*Wk^(}r7T1g^iGqJN<6Lq*M5Embxa^R*2X8kzfwN+K1jF>b=Vlst75^>U@IoA_t zrQd{8HoF@SdSJLIqwf+uUwBYK0ZZgBAf>2dsW-_oi@?Wab9UR^e4ZY47dK*y@k<5I!l$Vs0;A?SJ;Lht2 zHtHNCqN_+p0|c`ZKjFdjBxCFJQO$OE0#1y{K1A!C-<1>{wFE00_V3?MI9Fbth1w8h z*8czTBOPW%k+SjN!Gp^e*nWOHdqe~{cM1Vnvbb}}-ML$fCvT{y$8Ees&j!xt)>C)y z-@ovYSPhPa)7_1Y8`M#Y%6^JYqk3y?HgOc>bMs_&!ULHYcD4|CI zHAq9)iNq=|+lF>4B{dav`zvTczkdD7bL7GI(NPz-JCNJ)MDBybqC z?Ms&}8|v>zN&DggkCfTa*Hd$L`J-arcTiCgS2ckOwel$JI9Jw!^LP?AmjFaqlC*=# z%Adb{Sub_Z*Ee1#YcbZz@JXN^ONFZ}CSlG^By)2c6eW61z#s7ww9@SZ3K)NtB}5Sj z+A79RY2RF(U)R%p^hXK9(=4Ulfbsml$g;YTA^u8S`VdZrXGKm*Uks zK&R+s1ld)d9X$&s39Q8?Cnt3vH?#&U4pAZ(=a9e!9I!=rBHCC8{$?E~CwxGKYsS8R zhfeSiww1LW5f&CU-4Y)k593YG(g@cs*t`*)PT~+PhH}5dQ^?}9NA~6-tc|Bby$UN{ zExN@AldL1UEkuil=iXBeInb9BPn&EYJ}SQsE%>Rr3CT*Ca)|iRAl4Sl$7spcKrB_r}81~GGIvCXRL)a z;YaPYwfyl155Q;0Ka0va?Ed_B*OxmCo^UvL;li`Ty8QfnodH1(;^ulk{>`GxwNYs|Ljogn8y3x?2$oLGFoz`70KyV;X>vA!_#` zgZgkAUETT*6Ma7fO^t+=4?i`qd4jCFlRCXUu1NJ4ioyn+XWcj5fj0>Y2(9fjwg@L{ zjpu~=@U8N@(o*Fp0gN0!W`EjZZlXl&2Aby6fga9vaQCpxbh6z|Srnp#s%?1x)5M5l z!MFYVD$%n;ua%XowXQ5N474?Q!5nb&}wQ{;os3smK!klMHdX0 z6QjVvlyHwbbhdh&wlIX*ji!TCQES4Nz z)5h?F2tj-Fe@pBQA&ZKMk#g^@H?t$~VAO`F4v;pV8NNY9);rt*G=RW|UVxiG-l0sG<0z*m-x zMx;>%oFG@6oXrw|@ioCHz%*Na-4Xgbzpktxr@M?UO$VLfxje~NhAts^_VRb+7b{$4 z+fa$)MjIO%o<>1{vN*u{`<77bQs^EZ!B`XD-3I9~rXFSY)^phhJq*sBYob!AEiKys z$i_h90Ru@jd*JiMSy_6pb=J|0Wvi7v=io2}ETI)<4pQ^be=lNWOaQxKaL{L1@i?iq zXXDgt^ks2~@{Rj3)ei~`jOujw{_P8*;g!pmtKOK0U63~ZB!0_-hfSE!_Wo~?W0NeY zwWVd=+_^U$9RcL5N0zFtK4r`)X&sAR7=;!tDy#Vb-g==n(V$VB6lI1PAZs1={^>Pnqz47QP+C&m2 zXM0Gjnfm=hH9VE4K3}fJ@om3At zYC8&{8q1EdL&m3KFL+w5W@Gcad-vnBV_b%YhJ1V6TonI#@#4jWctFdMs-2%d|Ba~* zVCQS%R&WRJ?M6Q%yK?>d^?)VsDZk(-{3g_~R?=FG7eVTNFukm!g-XQJ$9OkYafT<= z)b5Y_S_3yl^lNNt!gS*#N(c^yRa@R>XUp016PpVp4DR2*Peo_0-eG^DzbvDjB6|`B zNu|zZh-EHu8s-y7Z@si7)kJ2b_0R+X_8PVMlNEhd5C9doIiYfZIJiJwp>*&4q=8iez~40JP(c{57Pl2dEq-DKS>PI`chU z{fIh^$Rl$@T#1DcztKFOsgiErzP)UX-kja+*9^7z@b z6^N}okV+)TYp{I!TjKCx603_MQPn}0V_fxe?^K-^uad}Pq~H!hyh}_5Xs-`-2G|}( zKz5M(@X3xn*>?-bpzQ$VfSFCOoLi`Z|AtD~^sixM4P|}+JA`~XWSMhkH5beuN&&f0 z0nH+%w6uU=wl#nXa+(jKHaZv50%-WV!N$R7KsRVkgjH9oYH%$zZvb-{0f|m85igmR zMSr|~r=qDFK|w)2KG-0X3cwT%d%mxr&G&C-V^UGZ;UnFf_UW?h+Z+yf*D{LJ?m89R)s{*DKD>gtBFf;IWBwo$`t zeGhz8^kb`xf6)_gra_1$mmVcu>8v;sWm5f0cHHv~TDMYi=>?l$vgp>W$HZ1)lfXMg z+!@RscuF5PqLP39uy>i;x_|0@)^bbNG6Ztjd_ORtGk<>ed9tvE${l+~dA+EAO1$012IkXU6Q~8z$(>11i z?hlt80@R;NKi#Wkh(YdS0ZMykXR<+QD4Hl_zYj%4LR?(?jT~D2_1U)@-M@FQuf{Oi zIej-?GG%Dqgj^Wbg`fh#!Ab)<^l%a^4OJ$@AN^PGt)|F<^iFY;?rZhn5vE4{;edjO_+DEZSx-gZHG*6#APv5{G{ z{+F`OR_D*&c+Uvgygub>V|4y+rE|z-uz0;|&CLl}AhMfKEhci6laBM2u&xqgO+gWk zS<*B0xaSuPR7k9*=?F5`KTP-z%)}9Ld0=o5eD6}A!pSg1*Vp%h6|KW*_$nKs>LvSs z&&4%o_}WY`4z-_~nwl>Fvw8UWUCn__{T7(cd?72}y?5_8uulicjeq}r z1|tBoWB?2(gTShU;UNaQ79PjDX<`Be0;g1sSOp&1_KI-j15-BL1Qm5D3WOb3zN&#B zz{we;%$R-&Q?v6R!%riWhbSYET@(zW$Ec~Ub{;~V2fWaiEDA+*?1}{-x|T+q65aVB zsj43H(Y-h3o9d`B=;&r0`H0Ko^w;m7_!?E z{dDDW{KlV^%lVBG{pY@|G<%)A&8NX{hjOCT5*;+H<(wsGg|_C)ju`y)zIl8j+}$?L zaCiIPKn(~qDCN&> zZ3H_8ee?sXw_aOzO8<}Xf-J*(ZC)up@S9iId$*6Hzj)qM)4m@|Z2*n=2hW*ySp==} zynuwWlZ}ll4(=1o)+9{%DkjFqv3Q0*h}x|FnfS8wfg|_AKNND<2>CYaw3+W~bk!&d zfjv8e0S)~+{l8MVL9Ba{3DYC%(z>g~v@WFk+N~9AY++*-xO|T^mdtv*Zh9g(4I!dM zJZgl7u!XIB>AEk?>OawHf_6*v1G5WnAO#S06AnLq0MXe@`zg?Pb+an}s{CvE1?OD* z^9ARw{oF|Zd_SEBX%aAuyPavKQcOqBmOsj7U4HlntM%@#+_mO6UHuII>GyiPXVL1- z=sCIovJ$^@+Vb*-6D;1Au<%;ao$K6+&MwtR!E6=JPKMW?u2=fe^eqn<=VOrf+jZ#B zAqGidDW?Cj`B!bbMLR9J`)hhH}noBIt%=%yB|#oGb)4c&V)#bhoGwJXa?+Za(|>&U(u^3QDbQ zU?O3Hg|_Tq9dS=vTH+uxC_%XTtt&Z$*tYG%qRnFU%KOXL>|ZYW#5*uFteoYN0Yl!1L+4KYi6IB2 zYO#!U-D5R=hFx(%aTWa&yA5-+hU13pjR@dff=pGAmp9u4nb#n#p89+ZQ{mdZ0(wFc z<-!%S$^8xIdC#1R(YZDHrO4ZxMJJZYs-M=QtL?w7iUrC4aj=+{L>we-c3&qcfdhbW zcz0uE4Bh#UzNBhJfQG;559>9c+NW0ryp5AQ`xkba(hmoEgOjbl^#;teU-}nqwEKA$ z8KjRN_ME1LYA8%`uOHI7`L|a@={q@Jd%rwSIkgdeUtf{8!%pqlv)-ohnbR05crn)` zofQq|ps*!fpj`d-`CV@A!I4L)=W>=Qs?r)z+F+i@M|(&$_oyhtPN!Izl1Q;VbFe{n zr!vtuFT&lWAA;Ew15w(ZH!wbzEMDva|E&K0B@7H$63HLNN1O7~h8RT8Qx!-hz0Grq zJuRN`{yij@kByrnKs@s;T~;JHP2-4JPst-ztjUDAy{CVv&-}0wxrM5?-H9y9$Cvj+ zrVYG!pK6HU`^(QF+B4k}c(zAP=$78RICH5j-P@Ch;xxOg!Vl!Np!@eX74${hE*F^4 z8=;=!$4=VUv@U<*UTjQC~+IMoE>;%%TzSlmCf zFigX_@JF<$jBSiW;HSOWKf*ZiSLo=0;|z0H`sw@mp^bh5Vt2j0n~(lv@4cPg? zrgv*hYjCm2nF$;;OfxJ@P0@4_>O}SG-~)_2J{1paXKQ7(!3l;d7O`Y|jegeNhOx${46L4JdpCqkA zJVbaRGf$hVK059e0`Npo@B>U{zgERqlSP4!<>eWm6Sz2m?(&0c5jZRIbE-N1_aEaz zux3E5djrJ-gc~6D0Z5DBmAFMm&F*kYPu^nF!ZI&V@kNY+ofV&et=yA3yzbvWw#{Ki z%^)w~3r@t`dGo+=f0L9XHPYJE?b+dpWMxXScF z?Bn|*ARhtY{S>X8j`^T>k?@>foG_xmKzK5u&#H-9V$l`unYP+F#IE{llm&Fc!OzrJ zy3nCHA=L;Y_36PS?F?qEEI@EJGdEwW{C^8VI^o&aoPoRHfpPdU!u|TU@mBsCf(INMkgP#{4nGzJm7(yd3z07y18@b z5_mc7d?sL02IjTt8cO)E`5+d9?6&eQ+CNz{Zrw?W)+#3S35CM%{g>Y+kc%$5H(IGw z%z5H99_7LOlTcouFvQYWjJ+*J8;xsm62!q)C73Tz!@d{2zdR-G?Iwgaafx&^-vDd-Y1XKbX`yw_WRq=A=zj@hI`$=J=`wi(ndkO2lvNmo@Yw!04=kwMp_!vZcG`iJ& zi*_>$=-ZJ}IK@P(|7v1sEtr0_*S`~}eU%y}2?)^LU0q$x%_?uqT5vUA48jk4H85)d zqTb@+2}Pg*W6>`R10XCR9}<*cW@dIhNxJRmn4L5H`k05PxoYF>0o?_js@&>d$<5(? zdt)De(^(X-F68oq_I2-7R73M)E0q(h&g~ejY)u$9Pqmh`#AN=}#Nma6)z$?}BK{qE zxg}uljp8qg5FJcTY_J@}kUS?d6Vsq0x7LV%58s{tkyZ9U!Ya}8cYR2qVyI{^2*y#zFS&AzC3{B|MM(viBnD=5vH135MWC$4TmG zFYwDC#$Q1>b&>qqqBD1LB1mx2(t(A;pH?2$m+#j~FG-L7Sh&Jflhm=)ab$w!FpDoK z4*NjN!bmZ@?_4QX*qOyKmg$_)!st%P@#ZsuT1$$TcR}?{n+=<2!RN==fG9dHJpv$R zRG(7ar@4}q)t6)vsZ9cQXZ-%=lbTW_u4iE<)2l0A>-%9pQ9;w2wxr4a+KJnnH}ZtG ze7fpY*4NOgVAPQ2quxyk?thxMC|EA_OOrC!h7CrwL*=i`2B`mFb=yjQ>)W^IN2*I6 zu22~1%vFtike3gMzj0l>eC?I-?@vmWDk*uyUkaYj*d09BHCSoGy)or^Ha79#p@kc#2qLMn``IS$xTh;qiV45pIbEORWvwUTcH( z+D2!=DXN2R$k+UFarR}7U$MW!Pw=anC+}-YtVOYIT?B4KB6EiEL+eUvV7UmZHE(UE zbFa1YYGd-?$3FI@$tRngpX&8pG7kOPmCDDZkfqgppLJwY%L|e&^Uubqs1aP~8J$st zg9sU`Iv_D0Nf>|q%2ujv2~b_lWaXZ^V&^+XEUc;~`>p%JI9T)cxw3v4ULr(oe}Xw* ze(S}nc&&IKVw%U(Qu>vZ;!Y<_X5?^sVAIzdvrD*eR-^697BF7=UODWj`ysYHxH9VW z<&FX0`}cj*9 z<@=lmGQPY_IVT%fc)m!iOQFK|gE!t%s_{dI$_x5~k+os23Wb-MBOQG!pH-%AC@nQh zH0@7}{aO}oF&SVUsv~Ts5P5_ovYvr>Lp5G>bZNS{o+W>TgaKYnUpAJ6m$YaqDk|~? zjYkWBr~5YBt+QZX>pz2iTle?h;1n8vv0IWPUS~#uUb`$HxlQkCM{EKHkcGCMLw?#y z?i@Rw>c}cxs*TdD4R3kT@D(~r#RoeTeM63%d7NG%S98vxRieELZwbq)#)f0BzOohA zwZHv&cipb?XUF2M_Gbf{-9Gw3LsVPB_x!6jC8wj)>t9^C)bLO`=x$3$fz;jopOWlq zsHPz>j#R=y!HfSm5g+|UJ~*x*N>@71HLSzVphm?_cHKVyin72XZr&8GbwxFsmK^p~ z6z+S`3C9_g0$wFMp-UAGNiTCv#YW35mh4h(&NFIN5M>FF^$ky8uA@KGIBwdB|Mui! zS(lb)dw4Lzn(xPR+?B*G)qKnT&~$!#tgb?&Jo<+!FKX;|I%14!zgiSN3Vs$8iLw0Y%>+v`hqnDkt9uyc5-ReVBPuODycMNW;ylCr~X zMJ9fJK%=o9cWfbk3M*SB#CCEQuV&@@%aa~RbWavqJbALW?;h!N-PiLML(XMk$afQ*JL0Q3Iwp@c_D9u)_ia7b^4$OVyH_ou&FyIu zoeZ-2I*ku6q7({>ks)2&5pDNIR5sb7+u>gJ1Ev7tE}l0vP32eF6f{;hd;dG$Xdx|; zBPJ6Q*O$b^P!M=wo`8yQo-$dvvoOO&Q90+t@X1NZOMz>^<#-pW${sm^5@Gc%57mtZ z(x=014unz8`AbK2_Xx7r(e7$y6Yr#wYSiheC)N@slg%4s!)lr{ZaD~=ty$`r(dWMM zs>o@xP=kWde6ctjqSN1_Vzz7*C71TGTO{irvhD~w2I~|hro^wMRjr#cLv&o45jT>`x zbkqYSQd`unWHT$tRJ>q&X3u)`WMZu0uoX5whrG-6j4o)EbtyWjHF6j((GE%W3cf^2 z+FpG(5RSRe*W`j-XD6vq+yk?`rk)-yL2auq1{r}3seYI>1b_VaxHuu=ZucRjw6s@k z!wp*>J^I|G*%j2#JteN^-ksoVVHs8HkL93p9{inb!v0rUI_f#2^bQ4;s|d=SeDFN= z#EbJ%QrogUI5%g3RVBW2r+@e{n^lrGwN}av8(n;=ur@|Z9!}U+@m%2H;UJf!b@?0-Xd1`mInOXljBd zqmJ1GVFOXEfAC-~tc^A~Dw`34n^&jX38HA6NkrJwr@8+uTO)qvJLPq5o>SR5$I0%Hm;G)}Z^HGBz9vn+drq zM~`0H?UNxnqI)MP=L1zcV3~V_OY;5ATZeR3bWt;8W zj>~y`H_cyTX}ROnYNq1{hU1S)Dp$lbG1u3Z>t-MxT}+U}p|Jkfp%_TIl$V^nC8qTQ z2M14Rf^)s{62r1i1a5-^BZC#;Cu#VCO9aJaF1tYbKc2-ta7>)|$jzVs+dt#sz z4lSe5x(r_7|FBNsZQU5>)b|6>sDR`Ldxh zNzH3*Zq99e^#Wr|1O8hu#S#Wb6VyGdOS5fs=2axt+-u#Pc$-D#H~B?Wvy(QA%h87>_JtAl)%^e;M7xhj4$Nbl*-HS?zl^kVxADt zIDOC7FM1xUgMh!kf1h*{zzqn5{Cs_R3P1^%vj67R2RcP1Y$wqr!*uE6w)^s=$=a_c zD?|K^qSAb!@QX&vI0n_dZws)Py!BAkUK&U&sV^>$23>m2e1?xw^R!Z|C{V6nNrcWM zqu7a{you;KfwCwNtvNO(Rt-te3E{l!OaYx06O-qzqEGdm-`_eRWhgHvcl#nV#al6< z*I^6LoBaMo-8VV8_G|i)myyQOHNi?j(x5l>23R(d$qyuU?hLE@TgB-wI2T(5Y84CU%(G z85tP?(FA$kFgo?TJPEOJm?9Gv-ZVM(?!!~KqC_}4=73mh(bM^8he=>O#BQ>6%QqK* zDsY0VJk$;cC!gm><}X|G%;rEF7y<)Q+Jp~91z~6gxD1^AuYLbeGbLBB5OD9AjF|%( zzIHX@gdofVy2Wj3Zfk><7{nUc3e3P^5H|)b@dKc zd@yBMyH)2VmT18is9E_l;59&`@zDK5L>k8T}`Z?AWJO^t?Oq&Sv7I-S^6|fR<`3q7O7+Rh!h(`<@ z+Z7_ABXoe)FjfOWiyo-6WaZ>KoE3v}QlT`)A=zzl<%+wr^RfOXcq$9#j!W%|hmT~u z2>P@m4;#V`4?&B&?V>mE7G$ZDjOR5W#eBHN?(MbN@O19`7;Q+gWq;UlsErGoV@!R65o@fBEto&NX79aCQ?UV-rxQSBwc*0rdrX z*BJ@*+)u~L)k5)^+^okCtv0Yq;)# zkrJ64DRuxS>>M6*X=u8Vm!!j_t!Pksc|x7wmjKJ#>C)Rg0YdH0AKGgB{c;(7%0inF z&6*{ClR8cf_JGxx_0ZRy7d}1))YP{cZWPm`H1&DEiVXL2*?m}Cm3Zbq(cFSS=sz8Q zvCozf6y;;K1?;s<0prU9e;*+I8{dg%hxzUdv^?+M8Z2(spT@AnC7^u+I(->nFERf5 z-FLQN`7d^0j+9Q!PGaciKEvl};`fvHb>%~5!tZI;871IP#6AB(>A|1PDEDXD$H7-UyZ&Q8#F5FnzXd(arjQ>l2Y+vomtg?KXkS$rkI0a*5n z=e>p|h&e|L*)Sdj_0Ep-B?uY!b|rmqE&{(R%5%*Op*#j86?8}1UxX2XKsDGQ-oJZy zIo|Qgl`F9)y{8AV*j6SxhWp0mfFoX;WP;={*hJ7moHzlCdHyt z)vy!((6fUXrxkf!=W_{1JsEwzv$ToXV-hAWmc@aRKHc69ksmF5-~89SOfi;YcX?d^ z*dX*N8U1ZePsvb${v37w`(G=ZXNVmj%D+HN_(yMifkcarP2} zVxpBfuwrH_b1I8z?OMXf!DeMZkkng+8}}yPjAAOpz%G{izGx3$#>Q1MCcDHm^*^!f z_Y* zGnt&ZxwwKcIK@l=8eG8MC;4p#s86JxEQZ?O#m&va(vs-0AbD89&i;H&NUT4&o+#EJ zcHOXH1AN+|Y8)UK)=VOqnw!H5w;LzEEFV?Pvw)koZb?p!_unSJ28oZEN8zJP*jHN^ zWAyP|hH=`fgnY)k+X*WYmH;I6M_@Cn2a22Oz!Rj*3?y1+CZ?yw7zW&J0wS)iiYDr) z3+RCiix5-*l-9z3QN@3ZXS4v@T2r(@C_Y`3KgVl7M(o(~&X z;6^Y7LwSLwj7?B|qapU9tzlv!+dW4Dzk(q!%nQj9JPWqftk!&54fjG!R!_qw7IT1* zu(0&8?qt;eix)1u>me5E&JW?M%BTiRPFAz8W)tOKYRCqC8*Ft2xi(EWK=%}4B5%wt z$;$S_NaGhtT+f~R$rYx@7xVeX)KLBObaky|V}k*33!0LKMAQ9|ApJnrb8;!XGd_XF z1VuB(HakFDH}@_HwH@gLs!)b5g0MA2FOr)NV`Ge!po)cM2u7A8qv&1U)djqI659aw zESt711?Ic^DLY{miYf)8^@2V)765KSwPS8(hO&Ur@W9#tb#&hKugx%Ru_oiGK7g|A zWC199ktbgG^6Upg85WAeUmQ8*qaW-ri4q9(E`^^WJU|F}P{kb(Ga*X`O~Ro1RSUDy z?k7@<3*t*0@o=F4Qz1V)`s6*~LJ|U>lw2u4fm7tMV<(bWSXo)ut|e-ib|0DN73qT& zr%S9bZ#6p#dz^6Pu#Qve8AVj`Xaj0>52?{-D2z`$hx<1xoT$5Spe}VJG688W$6onV zgzlXrSnq`U$Qk>4Ns)B|xZQWo?a-40_29?(nSY>Z{08uLLe(`0Zm~L?dC#4$H=y?8Mezyvttlm_y6I_3uU;*}D1qU*IUST1S6`v{2WXqn( z3`S`x>@QPslXO%_&$o9tsBuduD=UZWy?ps{)6^@tKy{&g4Sn&#$a6b%u}84dt?g0^_^f` zy!f8q)7lO>6=hsrKPwB-N|`W!_AUmVcR%PzAOD=-%OauTFrocH89Io)oyJiZ%VTC) zHi||cqs|U@!bgtUJq4P;D>I~lj_~6KfaPJe?0YU1#LbnPRgN}9s@9M|)b3#Z0+WsA z@X<%lc_j#)V%&J4XtCM`2?!U%eIYn46MXhcpoPDB*yo+@0h~bJ^Y|J<;E@0rV33w5 zctNn@Pdk9q1VRCN!>d+SDc{~N36%+}AdtOK_p$ODr^VYoJmk$;3#Ak7TCDIs2C(G# zLk0xWVRy6-gdF>&8FIo8g3YzYw*P-jiz3_y;BErYV56dd$^Z>LVZ1SjEOX<@LUEXy{*tcc+Bo{T|noR*0T^LHRX>&z0`#O3!nDUh|psqNhK;> zBG-{~AU1l&(g}GemvN{Z9@7u^2!g6)1D4MU78V4}=8lfhW-lds7*$@hLlKG07wRjl znN)_UAih}|A{v@W2vEh0;DxaU!95N!oM5xO=rP1Z%>wuI6&mF%7(}byzIl^c&-y$E z@wqt!o;w$U{(>6|p-rlq1AGV>E209XU3Z{W9pT>aE-;Hb&zEHM5;stHfgfzl3I$9FO0IVb_INQdNo_ea1- zZyOcvUg#Z1pBc2qP{0rvJ%~js1fnC%|Q)L7sh`If1kW@s{M3$qE z6nPbTv3WDG@R&YPp^?8_648nyi3u7YJ=VeO@34CQGN>dhD&eBmhNeAEw-$tiPCM4! zw%@YX@EmBofG*Yhbhj7SP(R#*de23q5E|nios~+LGT}HZ&}_dHXi{ zuJ~L=gMW2MByY6{bnm~S`4bRZ)^FQJ=w`r&L<;R29-b-sDh;FL)U~A7DqOrNOj?SYx!%dv3S+gQE zNSg~*uUOF=COyHoapP0qI0y(hD(Z7+A0J#C@UV%$`SKzqysjYJW(h&KA^t!78Qo#; zOe$FvH}C(W?7ic$?)&%g##OGShEy6FWUEL@pm*E)sXbbxcf(aCfT##NSz@9{C>1Xje0lAD@#3)9Iw7GlC#U>BKjb9qUgbrwBuGJf zS|6fmhz@hgBZjVZvu4kpJ!=*m=E~xnw3;R#({BfXEIRG`C?(T|Icx|{2s5)2X12) zl>>KWCSL}W+jz9xsQ}b*C88*XBCNl=u&BrycX4^SdMCY${sa>8Y{G&5jsDH$rDe1e zLXb&~3JTDqeHAcL`~C6i+?^!Y;ulq2+zM){ zv*aH6&rkJ!v83sN!*t+c+WpDgr=P@l`hQMx5r2EkpuLlwIrSNTZPiHxgYmaSsxLPl z5!T+1tfUWCNRGQeEc2GskiRk2xZ~~q;t~HsJEpj6=-J7u{aT7s+kX;eWc{t6eY5o_ zu_^cwmh`Z8N|?{f{v@3IjmftS=;{|y^FN^jx}Il}9r!m$!2VYmCI;Om zq66K<6M0h79xJ85m9R;=#rJq*weV$B44N22zZKhEwK#r@WpDqa8PCs%u5l0IYz}T~ z;wR`+P;W`sUF~c#zwLIA(l$`AuY2$qyMHijagwJn!$~G4-pUmo5m2yHR8)*UpJx>N zd*MPcht6BPM23kv1^udjcD5VD{h(XMtUk17&ogk8;SmUJ`Jw%brFskFR7p@pE<6H#SAXK!`fhd>@;4Ay~+>xNRp35pe`Q)HV)7m7ivlfr?H3a!OAj}9sLr~Y!7s=e;!xA4apa` zX2N~-yIWD6Rl=w~9aEx!Xxt@G0mTiVg+tnciqvzpDyQn;xaIh;WF0*`@OxY}FsB?O z*!Kiw!^LBdm*mjL36%U|=&~>mK}AEl)qJ!x4|G!6FzMTN@6`CHqo!tszrVlGRY|jv zow(>TU^8T(O`r%cucKxmhY0Qe4vY~n19&TIX&2c`$#zcQ5dk8i1J|^9DDa4}r|E5% zP5Dvj5qxhURTecZyagG`UVZZMtynK$;tDZ#2f7u2kY+G=EAPc@8#s#$L!U&nf#k)J z3FsChwK2p%uZ_woVbyok%VleV329tR#wtmoS6y zji_?=exJbfLyhIt2U8hKwpJ3*B9Yhm+IiWdDK9~;Z_P1|+mJbSdzS-0CnqO9LVa2F zep}l_AD?_X#&3OndN9tp51$1y8r2=k1Jeo$V?@y7&yS<%TdUn;7hP{a-@Z)IEih_~ zfo%caIbgAFKp=Hx0>JW8PwPw}H4yM5!Dy+v4*0GRQ{49T zg)dH`NdZgdOf!8U^1)s_?aF!zh$!L8)b1nK1nTg@}B zKjsw)9c^tat5zX(CKO5u&i<&Tw(AOLLeZ?oKfPUH;2aMJaAW~J$msD-Xi*E{)qO1g zbnsxcp2eMNl`jAnO1^@$t)WyvIpEL>{XKjJD<9%Gk{w-X6{GnA6p{vYv#(#i^yYHh zZt1VV0jX~EWCCptTHnf|qRm)xV@*-~Nv1{Er7D;s#%aVO(yj(RE0szb8i5(xPJaD> zahXM`KTA}6YCO$p7I+B`b&ekQHsVu~3;Vb{Ng$bYwo%x5Wu=^rm!c|KBIVlAQ*ir_ z+-rYbh=Ec4-0y{p;=)^l()Vs?Ai3z> zJ2mn7!w+p%T3KlQzjpD|y$KbH&Z?i4^RJtmAO?7=lg0An%}xG)$U3BixQ#cv0iz^L zV2k!@yg!1UdQ>%_KTk)Z`_0)n+@2sOjEgdk)2V!CePFZ`hD)G?2fc_H>)wZ61z7Jl z*aQyL-X=>HZ4Eq%0d)zT?uTi~YH0hr*FIt!&>r@9*wh={SL7$%ekowSpF+mq^vM%i z{pSgN3@BsX?FVSXnJQHh#39F?7$3}rGg)a|oCf=9ao3t2g-)affaHUNDa5=OUI(nK ztT0bQH(1~yHl$VXW;`D|+?%HX#c^argjUheI<2ra45U}>Zc>Nc4hTjovP3ZbQuPvj z5wk46^@st*;PjqHZZ)N~@pVOI_q<*}5OkdV_9eL(aobH2($YY@h*5&zX?s+gRi({2 zk_W!NFI_LMAZ#sTqo8poRN2^m+&|Y*#mE$qL_>m~@7DF0TrBFbyA$z7F_nY8k0D;` z@V*tq3nH0=F3DCLxv)!Q`m>YpxBFn7J*Hul#1V$^7FANC-JDhSX3m>8*}a9kOjtlE zA&#w}$H1;bM=tH}+W_+m7%)&@uK6}G6=wTizaF>vJ4q!{mUxWpE(6DaXdZyS0b7cF zbzhZ2jJ8O2k+@ZGW&C+hVsnCsf$VLOMrPiMpYgGF*)_?>F7P`kRe7^zn_HMx$;y{! zx43O$`l4I+!tM^!YsK~hbH?`0#Kci&r>COZ+PIZCyrvzH*sDhG1HRq@+5rS-NKif7 z)x{0&wD+C9To#5-qZF@;Jshiv?=PCUspvK<5adORz99~vtiUo^6V^y+;28uz4neBNfeWLZPrD#Bp{cRCzu`PpnV>A*AgSz6Kibpq;U@pU5#iB3G%4x$;q4VV2=H zYmT;#le064N*sJil|aPRAOJU60YKQkLM03<8}YThjo~`7p8f55oH&}8t)K{Lvr0(S zeQ6o+b%)DvGUX_OLK1CpcO|mMIw4fT>9$_~_6mE^i!NJqqRhD%e8*tAiZk*nbew%X zJ#E;unB}(-SI^|@XK(CsNT|v-2r5;Sy0l{b&105K#BW!kqq7s@6gzv}N|>k`;QDE` z19D^~=a~Jr$yPCMC@PjSa|T-3_?w$|Vyb_OH)E(N1eRMpS8f2$HV~5g5s8T+IO!Js?@OJCD$LwabXHvK2^D26&%+YB9&YWIp2 zKc*u9Hqk-TaN5#m-%c=ZCyR8lPlsdglW;zu^(Z!M*|mY1F(Us18bFw=9y;Ca-jr0j zkLbA)6N!mHkbL?sa^C^!)bna=ZvF^6MJyDeVFMtBGr2Ll#7+Eru3V+wSWF|XUx-pt z_5+3*Mgfk4vwUFFE@g*>c@wVyJ|)JRllmCf38^nMWSzqqe8aHZEV1InCr0f6MVEM9 z6xFP_W_twwDDgl~+sbXB7fLHG%e<>HGF`ed?dw73R*bbu5CkL&cF~jFWBG^1H&l$a zjnw8WOJpm*yPqNarK#2fcI9?ap=D1Dlp3^p+OUwhaxGlK1dL_LgggdJ@1q!`1ws_N z^nLrYjkk47F6wrbas!seMGkDAn+N~QbM_r_u90WPj8vVjwzgnjUt5^9clc57`zJ}h z?gKt<>yBW?jXWe$R0#ve&6xp4dtp^nu;IeX5(gcnD3r9}FIf;SrYL&V*0vo_3DOFc? znuS2weTqx8H&^Ec6B{S-#$sqpd!zz;RfSiFk8CS*1XIzcv}Ju?mPmZ6*Db1Vypb)U z19Bz0I`@TpX}e0Tv@~mCN=)lzgHKCcQ{uXieAcD?0Vl()H}JV>Km7K!M4{x}o?~Oe zcAYoH8N7|ZUdq}ANg5Vrs}{InC?{g8mxj9)U)prE@2@SpZ@CwI``!8>a=l2|C1IS< zmhYo3>ulEKa+?_W*uT04XG;Tn+6@FnRa9Tq`-+-hK9gHh8i#%&@2bGfhsFT`Z#x=J zW}d0{z<5vF;M6}Ix0t^LTW!~Jp4v?nW>Sp!f;MRvhYr6!2AXl&##!a}G`n!H(sren zXJY9#*`v6P)W$d7INT8#WZ+vE6NJS-Iy%~CB@rM%23>2kPzG+j$Qu-!-l@L)r4yf* zPFHN~vjxueot+7TW&PG!L$50M++4WYk2!4C|gK^q;x0_eSh>*k#%HU-HMA*xI(K zb93qQK+4;&C|88?l(|YiX%m)>>!EXA!*+)=*Mygp0UD-q`TFkoh0Wf@CE2#Epi)wcE|~U4|D$ zGTPlV$jaAb_P+M)n|4K`I}h?6HSLSUycPxS+m9VMJX-r-wXkjr&s`xpeLkb<5y8

    ?0{mlKsFS43qcNhM~#U7n_+Y8CsY6 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 nativeStrat : setStakeETHThreshold() activate nativeStrat -note right: set ETH that can be staked before the staking monitor has to reset +note right: set ETH that can be staked\nbefore the staking monitor has to reset return end group @@ -62,7 +62,7 @@ group Staking monitor resets staked ETH admin -> nativeStrat : resetStakeETHTally() activate nativeStrat -note right: resets the ETH that can be staked going forward +note right: resets the ETH that\ncan be staked going forward return end group @@ -88,7 +88,7 @@ activate api return status,\npubkey\nvalidatorRegistration,\nshareData note right : validatorRegistration contains the operatorIds and cluster details -reg -> nativeStrat : registerSsvValidator(\npublicKey,\noperatorIds,\nsharesData,\namount,\ncluster) +reg -> nativeStrat : registerSsvValidators(\npublicKeys[],\noperatorIds,\nsharesData[],\namount,\ncluster) activate nativeStrat note right cluster data: @@ -98,7 +98,7 @@ The last index calculated for the cluster Flag indicating whether the cluster is active The SSV balance of the cluster end note -nativeStrat -> ssvNet : registerValidator(\npublicKey,\noperatorIds,\nsharesData,\namount,\ncluster) +nativeStrat -> ssvNet : bulkRegisterValidator(\npublicKeys[],\noperatorIds,\nsharesData[],\namount,\ncluster) activate ssvNet ssvNet -> ssv : transferFrom(\nfrom\nto\namount) activate ssv From 09befdddc3a7f6d19ccdd12ccb3fb6f154411f43 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Thu, 6 Jun 2024 21:25:41 +1000 Subject: [PATCH 04/12] deployed new NativeStakingSSVStrategy to Holesky --- .../deployments/holesky/.migrations.json | 3 +- .../holesky/NativeStakingSSVStrategy.json | 146 +++++++++--------- .../ba8695eb2e88fba4c41fb618e06db1be.json | 107 +++++++++++++ 3 files changed, 179 insertions(+), 77 deletions(-) create mode 100644 contracts/deployments/holesky/solcInputs/ba8695eb2e88fba4c41fb618e06db1be.json diff --git a/contracts/deployments/holesky/.migrations.json b/contracts/deployments/holesky/.migrations.json index 620a172807..2c6d4ab015 100644 --- a/contracts/deployments/holesky/.migrations.json +++ b/contracts/deployments/holesky/.migrations.json @@ -10,5 +10,6 @@ "009_upgrade_strategy": 1716360052, "010_upgrade_strategy": 1716890877, "011_upgrade_strategy": 1717309951, - "012_upgrade_strategy": 1717477122 + "012_upgrade_strategy": 1717477122, + "013_upgrade_strategy": 1717672918 } \ No newline at end of file diff --git a/contracts/deployments/holesky/NativeStakingSSVStrategy.json b/contracts/deployments/holesky/NativeStakingSSVStrategy.json index d242b9baec..351ccd46b1 100644 --- a/contracts/deployments/holesky/NativeStakingSSVStrategy.json +++ b/contracts/deployments/holesky/NativeStakingSSVStrategy.json @@ -1,5 +1,5 @@ { - "address": "0x72045988ac7f8e2c16963d218CD556aB4cE5B554", + "address": "0x54aEe77082298423CF012423DA5963B8fFAa9AF8", "abi": [ { "inputs": [ @@ -181,12 +181,6 @@ "internalType": "uint256", "name": "amount", "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "withdrawal_credentials", - "type": "bytes" } ], "name": "ETHStaked", @@ -549,7 +543,7 @@ }, { "inputs": [], - "name": "MAX_STAKE", + "name": "FULL_STAKE", "outputs": [ { "internalType": "uint256", @@ -588,7 +582,7 @@ }, { "inputs": [], - "name": "SSV_NETWORK_ADDRESS", + "name": "SSV_NETWORK", "outputs": [ { "internalType": "address", @@ -601,7 +595,7 @@ }, { "inputs": [], - "name": "SSV_TOKEN_ADDRESS", + "name": "SSV_TOKEN", "outputs": [ { "internalType": "address", @@ -627,7 +621,7 @@ }, { "inputs": [], - "name": "WETH_TOKEN_ADDRESS", + "name": "WETH", "outputs": [ { "internalType": "address", @@ -1008,9 +1002,9 @@ { "inputs": [ { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" + "internalType": "bytes[]", + "name": "publicKeys", + "type": "bytes[]" }, { "internalType": "uint64[]", @@ -1018,9 +1012,9 @@ "type": "uint64[]" }, { - "internalType": "bytes", + "internalType": "bytes[]", "name": "sharesData", - "type": "bytes" + "type": "bytes[]" }, { "internalType": "uint256", @@ -1060,7 +1054,7 @@ "type": "tuple" } ], - "name": "registerSsvValidator", + "name": "registerSsvValidators", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -1461,34 +1455,34 @@ "type": "receive" } ], - "transactionHash": "0x9b8413b8e94da985aa27ae6561dc8380f6f7585042516e8fd99f3616c061430c", + "transactionHash": "0x2f98316331795007d4ecd332d724c7a2b778ec6356eb2f87e8116811a52fe7cb", "receipt": { "to": null, "from": "0x1b94CA50D3Ad9f8368851F8526132272d1a5028C", - "contractAddress": "0x72045988ac7f8e2c16963d218CD556aB4cE5B554", - "transactionIndex": 11, - "gasUsed": "4403238", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000080020000000000000000000800000000000002000000000000000000000004000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x52da6ae82a05a0972c82c551a902106962cfa41102bccf0896822524fc76a2f6", - "transactionHash": "0x9b8413b8e94da985aa27ae6561dc8380f6f7585042516e8fd99f3616c061430c", + "contractAddress": "0x54aEe77082298423CF012423DA5963B8fFAa9AF8", + "transactionIndex": 0, + "gasUsed": "4488473", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000800000000008000000000000000000000000004000000000000002000000000000000000040000000000100000000200000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd76a4500352484455c75022ca77f0a3faae763d2fc8e3abd8d5a1b766854bbe8", + "transactionHash": "0x2f98316331795007d4ecd332d724c7a2b778ec6356eb2f87e8116811a52fe7cb", "logs": [ { - "transactionIndex": 11, - "blockNumber": 1668064, - "transactionHash": "0x9b8413b8e94da985aa27ae6561dc8380f6f7585042516e8fd99f3616c061430c", - "address": "0x72045988ac7f8e2c16963d218CD556aB4cE5B554", + "transactionIndex": 0, + "blockNumber": 1682581, + "transactionHash": "0x2f98316331795007d4ecd332d724c7a2b778ec6356eb2f87e8116811a52fe7cb", + "address": "0x54aEe77082298423CF012423DA5963B8fFAa9AF8", "topics": [ "0xc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000001b94ca50d3ad9f8368851f8526132272d1a5028c" ], "data": "0x", - "logIndex": 416, - "blockHash": "0x52da6ae82a05a0972c82c551a902106962cfa41102bccf0896822524fc76a2f6" + "logIndex": 0, + "blockHash": "0xd76a4500352484455c75022ca77f0a3faae763d2fc8e3abd8d5a1b766854bbe8" } ], - "blockNumber": 1668064, - "cumulativeGasUsed": "19865050", + "blockNumber": 1682581, + "cumulativeGasUsed": "4488473", "status": 1, "byzantium": true }, @@ -1504,11 +1498,11 @@ "0x65a289f4BF934c964C942eFF6E6F83b6481BE550", "0x4242424242424242424242424242424242424242" ], - "numDeployments": 7, - "solcInputHash": "47ae51f49254a864e8595718d22928c8", - "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"platformAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAddress\",\"type\":\"address\"}],\"internalType\":\"struct InitializableAbstractStrategy.BaseStrategyConfig\",\"name\":\"_baseConfig\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_wethAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvNetwork\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxValidators\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_feeAccumulator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_beaconChainDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AccountingConsensusRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"noOfValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingFullyWithdrawnValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"validatorsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"consensusRewardsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingManuallyFixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"withdrawal_credentials\",\"type\":\"bytes\"}],\"name\":\"ETHStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"FuseIntervalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldHarvesterAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newHarvesterAddress\",\"type\":\"address\"}],\"name\":\"HarvesterAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"RegistratorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_oldAddresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_newAddresses\",\"type\":\"address[]\"}],\"name\":\"RewardTokenAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardTokenCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StakeETHTallyReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeETHThresholdChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"StakingMonitorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BEACON_CHAIN_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_ACCUMULATOR_ADDRESS\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_STAKE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_VALIDATORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FIX_ACCOUNTING_CADENCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_NETWORK_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_TOKEN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH_TOKEN_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeDepositedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetToPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"checkBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectRewardTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"consensusRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"depositSSV\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositedWethAccountedFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"doAccounting\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"accountingValid\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"harvesterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_pTokens\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFixAccountingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_validatorsDelta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_consensusRewardsDelta\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_ethToVaultAmount\",\"type\":\"uint256\"}],\"name\":\"manuallyFixAccounting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes\",\"name\":\"sharesData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_assetIndex\",\"type\":\"uint256\"}],\"name\":\"removePToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetStakeETHTally\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeApproveAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalEnd\",\"type\":\"uint256\"}],\"name\":\"setFuseInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_harvesterAddress\",\"type\":\"address\"}],\"name\":\"setHarvesterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"setPTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setRegistrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"setRewardTokenAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setStakeETHThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStakingMonitor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHTally\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ValidatorStakeData[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"stakeEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingMonitor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"supportsAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRegistrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"validatorsStates\",\"outputs\":[{\"internalType\":\"enum ValidatorRegistrator.VALIDATOR_STATE\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Origin Protocol Inc\",\"details\":\"This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that is on the contract across multiple blocks (and not just transitory within a transaction) is considered an asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is required since the rewards (reward token) is also in ETH. To simplify the accounting of WETH there is another difference in behavior compared to the other strategies. To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant immediately wraps ETH to WETH and sends it to the Vault. On the other hand any ETH on the contract (across multiple blocks) is there either: - as a result of already accounted for consensus rewards - as a result of not yet accounted for consensus rewards - as a results of not yet accounted for full validator withdrawals (or validator slashes) Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time interval and not immediately.\",\"kind\":\"dev\",\"methods\":{\"checkBalance(address)\":{\"params\":{\"_asset\":\"Address of weth asset\"},\"returns\":{\"balance\":\" Total value of (W)ETH\"}},\"constructor\":{\"params\":{\"_baseConfig\":\"Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI, and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\",\"_beaconChainDepositContract\":\"Address of the beacon chain deposit contract\",\"_feeAccumulator\":\"Address of the fee accumulator receiving execution layer validator rewards\",\"_maxValidators\":\"Maximum number of validators that can be registered in the strategy\",\"_ssvNetwork\":\"Address of the SSV Network contract\",\"_ssvToken\":\"Address of the Erc20 SSV Token contract\",\"_wethAddress\":\"Address of the Erc20 WETH Token contract\"}},\"deposit(address,uint256)\":{\"params\":{\"_amount\":\"Amount of assets that were transferred to the strategy by the vault.\",\"_asset\":\"Address of asset to deposit. Has to be WETH.\"}},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"details\":\"A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds. uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service that tries to top up SSV tokens.\",\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"doAccounting()\":{\"details\":\"This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it for now.\",\"returns\":{\"accountingValid\":\"true if accounting was successful, false if fuse is blown\"}},\"exitSsvValidator(bytes,uint64[])\":{\"params\":{\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"getRewardTokenAddresses()\":{\"returns\":{\"_0\":\"address[] the reward token addresses.\"}},\"initialize(address[],address[],address[])\":{\"params\":{\"_assets\":\"Addresses of initial supported assets\",\"_pTokens\":\"Platform Token corresponding addresses\",\"_rewardTokenAddresses\":\"Address of reward token for platform\"}},\"manuallyFixAccounting(int256,int256,uint256)\":{\"details\":\"There is a case when a validator(s) gets slashed so much that the eth swept from the beacon chain enters the fuse area and there are no consensus rewards on the contract to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval we need to reduce the amount of active deposited validators and immediately send WETH to the vault, so it doesn't interfere with further accounting.\",\"params\":{\"_consensusRewardsDelta\":\"adjust the accounted for consensus rewards up or down\",\"_ethToVaultAmount\":\"the amount of ETH that gets wrapped into WETH and sent to the Vault\",\"_validatorsDelta\":\"adjust the active validators by up to plus three or minus three\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"registerSsvValidator(bytes,uint64[],bytes,uint256,(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\",\"sharesData\":\"The validator shares data\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"removePToken(uint256)\":{\"params\":{\"_assetIndex\":\"Index of the asset to be removed\"}},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"setHarvesterAddress(address)\":{\"params\":{\"_harvesterAddress\":\"Address of the harvester contract.\"}},\"setPTokenAddress(address,address)\":{\"params\":{\"_asset\":\"Address for the asset\",\"_pToken\":\"Address for the corresponding platform token\"}},\"setRewardTokenAddresses(address[])\":{\"params\":{\"_rewardTokenAddresses\":\"Array of reward token addresses\"}},\"stakeEth((bytes,bytes,bytes32)[])\":{\"params\":{\"validators\":\"A list of validator data needed to stake. The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot. Only the registrator can call this function.\"}},\"supportsAsset(address)\":{\"params\":{\"_asset\":\"The address of the asset token.\"}},\"transferGovernance(address)\":{\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"transferToken(address,uint256)\":{\"params\":{\"_amount\":\"Amount of the asset to transfer\",\"_asset\":\"Address for the asset\"}},\"withdraw(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount of WETH to withdraw\",\"_asset\":\"WETH to withdraw\",\"_recipient\":\"Address to receive withdrawn assets\"}}},\"stateVariables\":{\"FEE_ACCUMULATOR_ADDRESS\":{\"details\":\"this address will receive Execution layer rewards - These are rewards earned for executing transactions on the Ethereum network as part of block proposals. They include priority fees (fees paid by users for their transactions to be included) and MEV rewards (rewards for arranging transactions in a way that benefits the validator).\"},\"depositedWethAccountedFor\":{\"details\":\"This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately deposit it to an underlying platform. Rather a special privilege account stakes it to the validators. For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track of WETH that has already been accounted for. This value represents the amount of WETH balance of this contract that has already been accounted for by the deposit events. It is important to note that this variable is not concerned with WETH that is a result of full/partial withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to be staked.\"}},\"title\":\"Native Staking SSV Strategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BEACON_CHAIN_DEPOSIT_CONTRACT()\":{\"notice\":\"The address of the beacon chain deposit contract\"},\"FEE_ACCUMULATOR_ADDRESS()\":{\"notice\":\"Fee collector address\"},\"MAX_STAKE()\":{\"notice\":\"The maximum amount of ETH that can be staked by a validator\"},\"MAX_VALIDATORS()\":{\"notice\":\"Maximum number of validators that can be registered in this strategy\"},\"MIN_FIX_ACCOUNTING_CADENCE()\":{\"notice\":\"The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\"},\"SSV_NETWORK_ADDRESS()\":{\"notice\":\"The address of the SSV Network contract used to interface with\"},\"SSV_TOKEN_ADDRESS()\":{\"notice\":\"SSV ERC20 token that serves as a payment for operating SSV validators\"},\"VAULT_ADDRESS()\":{\"notice\":\"Address of the OETH Vault proxy contract\"},\"WETH_TOKEN_ADDRESS()\":{\"notice\":\"The address of the Wrapped ETH (WETH) token contract\"},\"activeDepositedValidators()\":{\"notice\":\"The number of validators that have 32 (!) ETH actively deposited. When a new deposit to a validator happens this number increases, when a validator exit is detected this number decreases.\"},\"assetToPToken(address)\":{\"notice\":\"asset => pToken (Platform Specific Token Address)\"},\"checkBalance(address)\":{\"notice\":\"Returns the total value of (W)ETH that is staked to the validators and WETH deposits that are still to be staked. This does not include ETH from consensus rewards sitting in this strategy or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested and sent to the Dripper so will eventually be sent to the Vault as WETH.\"},\"claimGovernance()\":{\"notice\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"collectRewardTokens()\":{\"notice\":\"Collect accumulated reward token and send to Vault.\"},\"consensusRewards()\":{\"notice\":\"Keeps track of the total consensus rewards swept from the beacon chain\"},\"deposit(address,uint256)\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just checks the asset is WETH and emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositAll()\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\"},\"doAccounting()\":{\"notice\":\"This notion page offers a good explanation of how the accounting functions https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart, the accounting function will treat that ETH as Beacon chain consensus rewards. On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32, the accounting function will treat that as a validator slashing.Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\"},\"exitSsvValidator(bytes,uint64[])\":{\"notice\":\"Exit a validator from the Beacon chain. The staked ETH will eventually swept to this native staking strategy. Only the registrator can call this function.\"},\"fuseIntervalEnd()\":{\"notice\":\"end of fuse interval\"},\"fuseIntervalStart()\":{\"notice\":\"start of fuse interval\"},\"getRewardTokenAddresses()\":{\"notice\":\"Get the reward token addresses.\"},\"governor()\":{\"notice\":\"Returns the address of the current Governor.\"},\"harvesterAddress()\":{\"notice\":\"Address of the Harvester contract allowed to collect reward tokens\"},\"initialize(address[],address[],address[])\":{\"notice\":\"initialize function, to set up initial internal state\"},\"isGovernor()\":{\"notice\":\"Returns true if the caller is the current Governor.\"},\"lastFixAccountingBlockNumber()\":{\"notice\":\"last block number manuallyFixAccounting has been called\"},\"manuallyFixAccounting(int256,int256,uint256)\":{\"notice\":\"Allow the Strategist to fix the accounting of this strategy and unpause.\"},\"platformAddress()\":{\"notice\":\"Address of the underlying platform\"},\"registerSsvValidator(bytes,uint64[],bytes,uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Registers a new validator in the SSV Cluster. Only the registrator can call this function.\"},\"removePToken(uint256)\":{\"notice\":\"Remove a supported asset by passing its index. This method can only be called by the system Governor\"},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Remove a validator from the SSV Cluster. Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain. If removed before the validator has exited the beacon chain will result in the validator being slashed. Only the registrator can call this function.\"},\"resetStakeETHTally()\":{\"notice\":\"Reset the stakeETHTally\"},\"rewardTokenAddresses(uint256)\":{\"notice\":\"Address of the reward tokens. eg CRV, BAL, CVX, AURA\"},\"safeApproveAllTokens()\":{\"notice\":\"Approves the SSV Network contract to transfer SSV tokens for deposits\"},\"setFuseInterval(uint256,uint256)\":{\"notice\":\"set fuse interval values\"},\"setHarvesterAddress(address)\":{\"notice\":\"Set the Harvester contract that can collect rewards.\"},\"setPTokenAddress(address,address)\":{\"notice\":\"Provide support for asset by passing its pToken address. This method can only be called by the system Governor\"},\"setRegistrator(address)\":{\"notice\":\"Set the address of the registrator which can register, exit and remove validators\"},\"setRewardTokenAddresses(address[])\":{\"notice\":\"Set the reward token addresses. Any old addresses will be overwritten.\"},\"setStakeETHThreshold(uint256)\":{\"notice\":\"Set the amount of ETH that can be staked before staking monitor\"},\"setStakingMonitor(address)\":{\"notice\":\"Set the address of the staking monitor that is allowed to reset stakeETHTally\"},\"stakeETHTally()\":{\"notice\":\"Amount of ETH that can has been staked since the last governor approval.\"},\"stakeETHThreshold()\":{\"notice\":\"Amount of ETH that can be staked before staking on the contract is suspended and the governor needs to approve further staking\"},\"stakeEth((bytes,bytes,bytes32)[])\":{\"notice\":\"Stakes WETH to the node validators\"},\"stakingMonitor()\":{\"notice\":\"The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\"},\"supportsAsset(address)\":{\"notice\":\"Returns bool indicating whether asset is supported by strategy.\"},\"transferGovernance(address)\":{\"notice\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\"},\"transferToken(address,uint256)\":{\"notice\":\"Transfer token to governor. Intended for recovering tokens stuck in strategy contracts, i.e. mistaken sends.\"},\"validatorRegistrator()\":{\"notice\":\"Address of the registrator - allowed to register, exit and remove validators\"},\"validatorsStates(bytes32)\":{\"notice\":\"State of the validators keccak256(pubKey) => state\"},\"vaultAddress()\":{\"notice\":\"Address of the OToken vault\"},\"withdraw(address,address,uint256)\":{\"notice\":\"Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure.\"},\"withdrawAll()\":{\"notice\":\"transfer all WETH deposits back to the vault. This does not withdraw from the validators. That has to be done separately with the `exitSsvValidator` and `removeSsvValidator` operations. This does not withdraw any execution rewards from the FeeAccumulator or consensus rewards in this strategy. Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn. ETH from full validator withdrawals is sent to the Vault using `doAccounting`. Will NOT revert if the strategy is paused from an accounting failure.\"}},\"notice\":\"Strategy to deploy funds into DVT validators powered by the SSV Network\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":\"NativeStakingSSVStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused(), \\\"Pausable: paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n require(paused(), \\\"Pausable: not paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a >= b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a / b + (a % b == 0 ? 0 : 1);\\n }\\n}\\n\",\"keccak256\":\"0xfaad496c1c944b6259b7dc70b4865eb1775d6402bc0c81b38a0b24d9f525ae37\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @notice Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @notice Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0xb7133d6ce7a9e673ff79fcedb3fd41ae6e58e251f94915bb65731abe524270b4\",\"license\":\"MIT\"},\"contracts/interfaces/IBasicToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IBasicToken {\\n function symbol() external view returns (string memory);\\n\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xa562062698aa12572123b36dfd2072f1a39e44fed2031cc19c2c9fd522f96ec2\",\"license\":\"MIT\"},\"contracts/interfaces/IDepositContract.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDepositContract {\\n /// @notice A processed deposit event.\\n event DepositEvent(\\n bytes pubkey,\\n bytes withdrawal_credentials,\\n bytes amount,\\n bytes signature,\\n bytes index\\n );\\n\\n /// @notice Submit a Phase 0 DepositData object.\\n /// @param pubkey A BLS12-381 public key.\\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\\n /// @param signature A BLS12-381 signature.\\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\\n /// Used as a protection against malformed input.\\n function deposit(\\n bytes calldata pubkey,\\n bytes calldata withdrawal_credentials,\\n bytes calldata signature,\\n bytes32 deposit_data_root\\n ) external payable;\\n\\n /// @notice Query the current deposit root hash.\\n /// @return The deposit root hash.\\n function get_deposit_root() external view returns (bytes32);\\n\\n /// @notice Query the current deposit count.\\n /// @return The deposit count encoded as a little endian 64-bit number.\\n function get_deposit_count() external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x598f90bdbc854250bbd5991426bfb43367207e64e33109c41aa8b54323fd8d8e\",\"license\":\"MIT\"},\"contracts/interfaces/ISSVNetwork.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct Cluster {\\n uint32 validatorCount;\\n uint64 networkFeeIndex;\\n uint64 index;\\n bool active;\\n uint256 balance;\\n}\\n\\ninterface ISSVNetwork {\\n /**********/\\n /* Errors */\\n /**********/\\n\\n error CallerNotOwner(); // 0x5cd83192\\n error CallerNotWhitelisted(); // 0x8c6e5d71\\n error FeeTooLow(); // 0x732f9413\\n error FeeExceedsIncreaseLimit(); // 0x958065d9\\n error NoFeeDeclared(); // 0x1d226c30\\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\\n error OperatorDoesNotExist(); // 0x961e3e8c\\n error InsufficientBalance(); // 0xf4d678b8\\n error ValidatorDoesNotExist(); // 0xe51315d2\\n error ClusterNotLiquidatable(); // 0x60300a8d\\n error InvalidPublicKeyLength(); // 0x637297a4\\n error InvalidOperatorIdsLength(); // 0x38186224\\n error ClusterAlreadyEnabled(); // 0x3babafd2\\n error ClusterIsLiquidated(); // 0x95a0cf33\\n error ClusterDoesNotExists(); // 0x185e2b16\\n error IncorrectClusterState(); // 0x12e04c87\\n error UnsortedOperatorsList(); // 0xdd020e25\\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\\n error ExceedValidatorLimit(); // 0x6df5ab76\\n error TokenTransferFailed(); // 0x045c4b02\\n error SameFeeChangeNotAllowed(); // 0xc81272f8\\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\\n error NotAuthorized(); // 0xea8e4eb5\\n error OperatorsListNotUnique(); // 0xa5a1ff5d\\n error OperatorAlreadyExists(); // 0x289c9494\\n error TargetModuleDoesNotExist(); // 0x8f9195fb\\n error MaxValueExceeded(); // 0x91aa3017\\n error FeeTooHigh(); // 0xcd4e6167\\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\\n error EmptyPublicKeysList(); // df83e679\\n\\n // legacy errors\\n error ValidatorAlreadyExists(); // 0x8d09a73e\\n error IncorrectValidatorState(); // 0x2feda3c1\\n\\n event AdminChanged(address previousAdmin, address newAdmin);\\n event BeaconUpgraded(address indexed beacon);\\n event ClusterDeposited(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event ClusterLiquidated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterReactivated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterWithdrawn(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event DeclareOperatorFeePeriodUpdated(uint64 value);\\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\\n event FeeRecipientAddressUpdated(\\n address indexed owner,\\n address recipientAddress\\n );\\n event Initialized(uint8 version);\\n event LiquidationThresholdPeriodUpdated(uint64 value);\\n event MinimumLiquidationCollateralUpdated(uint256 value);\\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\\n event OperatorAdded(\\n uint64 indexed operatorId,\\n address indexed owner,\\n bytes publicKey,\\n uint256 fee\\n );\\n event OperatorFeeDeclarationCancelled(\\n address indexed owner,\\n uint64 indexed operatorId\\n );\\n event OperatorFeeDeclared(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeExecuted(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\\n event OperatorMaximumFeeUpdated(uint64 maxFee);\\n event OperatorRemoved(uint64 indexed operatorId);\\n event OperatorWhitelistUpdated(\\n uint64 indexed operatorId,\\n address whitelisted\\n );\\n event OperatorWithdrawn(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 value\\n );\\n event OwnershipTransferStarted(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event OwnershipTransferred(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event Upgraded(address indexed implementation);\\n event ValidatorAdded(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n bytes shares,\\n Cluster cluster\\n );\\n event ValidatorExited(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey\\n );\\n event ValidatorRemoved(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n Cluster cluster\\n );\\n\\n fallback() external;\\n\\n function acceptOwnership() external;\\n\\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\\n\\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function deposit(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function executeOperatorFee(uint64 operatorId) external;\\n\\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\\n external;\\n\\n function getVersion() external pure returns (string memory version);\\n\\n function initialize(\\n address token_,\\n address ssvOperators_,\\n address ssvClusters_,\\n address ssvDAO_,\\n address ssvViews_,\\n uint64 minimumBlocksBeforeLiquidation_,\\n uint256 minimumLiquidationCollateral_,\\n uint32 validatorsPerOperatorLimit_,\\n uint64 declareOperatorFeePeriod_,\\n uint64 executeOperatorFeePeriod_,\\n uint64 operatorMaxFeeIncrease_\\n ) external;\\n\\n function liquidate(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function owner() external view returns (address);\\n\\n function pendingOwner() external view returns (address);\\n\\n function proxiableUUID() external view returns (bytes32);\\n\\n function reactivate(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function registerOperator(bytes memory publicKey, uint256 fee)\\n external\\n returns (uint64 id);\\n\\n function registerValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n bytes memory sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function removeOperator(uint64 operatorId) external;\\n\\n function removeValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function renounceOwnership() external;\\n\\n function setFeeRecipientAddress(address recipientAddress) external;\\n\\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\\n external;\\n\\n function transferOwnership(address newOwner) external;\\n\\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\\n\\n function updateMaximumOperatorFee(uint64 maxFee) external;\\n\\n function updateMinimumLiquidationCollateral(uint256 amount) external;\\n\\n function updateModule(uint8 moduleId, address moduleAddress) external;\\n\\n function updateNetworkFee(uint256 fee) external;\\n\\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\\n\\n function upgradeTo(address newImplementation) external;\\n\\n function upgradeToAndCall(address newImplementation, bytes memory data)\\n external\\n payable;\\n\\n function withdraw(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\\n\\n function withdrawNetworkEarnings(uint256 amount) external;\\n\\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\\n external;\\n}\\n\",\"keccak256\":\"0xbef02bd5257e61dec0a6be4b1531064a7fdfeb4043885443a1902fb5d1b23e1b\",\"license\":\"MIT\"},\"contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\\n */\\ninterface IStrategy {\\n /**\\n * @dev Deposit the given asset to platform\\n * @param _asset asset address\\n * @param _amount Amount to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external;\\n\\n /**\\n * @dev Deposit the entire balance of all supported assets in the Strategy\\n * to the platform\\n */\\n function depositAll() external;\\n\\n /**\\n * @dev Withdraw given asset from Lending platform\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external;\\n\\n /**\\n * @dev Liquidate all assets in strategy and return them to Vault.\\n */\\n function withdrawAll() external;\\n\\n /**\\n * @dev Returns the current balance of the given asset.\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n returns (uint256 balance);\\n\\n /**\\n * @dev Returns bool indicating whether strategy supports asset.\\n */\\n function supportsAsset(address _asset) external view returns (bool);\\n\\n /**\\n * @dev Collect reward tokens from the Strategy.\\n */\\n function collectRewardTokens() external;\\n\\n /**\\n * @dev The address array of the reward tokens for the Strategy.\\n */\\n function getRewardTokenAddresses() external view returns (address[] memory);\\n}\\n\",\"keccak256\":\"0xb291e409a9b95527f9ed19cd6bff8eeb9921a21c1f5194a48c0bb9ce6613959a\",\"license\":\"MIT\"},\"contracts/interfaces/IVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { VaultStorage } from \\\"../vault/VaultStorage.sol\\\";\\n\\ninterface IVault {\\n event AssetSupported(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Governable.sol\\n function transferGovernance(address _newGovernor) external;\\n\\n function claimGovernance() external;\\n\\n function governor() external view returns (address);\\n\\n // VaultAdmin.sol\\n function setPriceProvider(address _priceProvider) external;\\n\\n function priceProvider() external view returns (address);\\n\\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\\n\\n function redeemFeeBps() external view returns (uint256);\\n\\n function setVaultBuffer(uint256 _vaultBuffer) external;\\n\\n function vaultBuffer() external view returns (uint256);\\n\\n function setAutoAllocateThreshold(uint256 _threshold) external;\\n\\n function autoAllocateThreshold() external view returns (uint256);\\n\\n function setRebaseThreshold(uint256 _threshold) external;\\n\\n function rebaseThreshold() external view returns (uint256);\\n\\n function setStrategistAddr(address _address) external;\\n\\n function strategistAddr() external view returns (address);\\n\\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\\n\\n function maxSupplyDiff() external view returns (uint256);\\n\\n function setTrusteeAddress(address _address) external;\\n\\n function trusteeAddress() external view returns (address);\\n\\n function setTrusteeFeeBps(uint256 _basis) external;\\n\\n function trusteeFeeBps() external view returns (uint256);\\n\\n function ousdMetaStrategy() external view returns (address);\\n\\n function setSwapper(address _swapperAddr) external;\\n\\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\\n\\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\\n external;\\n\\n function supportAsset(address _asset, uint8 _supportsAsset) external;\\n\\n function approveStrategy(address _addr) external;\\n\\n function removeStrategy(address _addr) external;\\n\\n function setAssetDefaultStrategy(address _asset, address _strategy)\\n external;\\n\\n function assetDefaultStrategies(address _asset)\\n external\\n view\\n returns (address);\\n\\n function pauseRebase() external;\\n\\n function unpauseRebase() external;\\n\\n function rebasePaused() external view returns (bool);\\n\\n function pauseCapital() external;\\n\\n function unpauseCapital() external;\\n\\n function capitalPaused() external view returns (bool);\\n\\n function transferToken(address _asset, uint256 _amount) external;\\n\\n function priceUnitMint(address asset) external view returns (uint256);\\n\\n function priceUnitRedeem(address asset) external view returns (uint256);\\n\\n function withdrawAllFromStrategy(address _strategyAddr) external;\\n\\n function withdrawAllFromStrategies() external;\\n\\n function withdrawFromStrategy(\\n address _strategyFromAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n function depositToStrategy(\\n address _strategyToAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n // VaultCore.sol\\n function mint(\\n address _asset,\\n uint256 _amount,\\n uint256 _minimumOusdAmount\\n ) external;\\n\\n function mintForStrategy(uint256 _amount) external;\\n\\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\\n\\n function burnForStrategy(uint256 _amount) external;\\n\\n function redeemAll(uint256 _minimumUnitAmount) external;\\n\\n function allocate() external;\\n\\n function rebase() external;\\n\\n function swapCollateral(\\n address fromAsset,\\n address toAsset,\\n uint256 fromAssetAmount,\\n uint256 minToAssetAmount,\\n bytes calldata data\\n ) external returns (uint256 toAssetAmount);\\n\\n function totalValue() external view returns (uint256 value);\\n\\n function checkBalance(address _asset) external view returns (uint256);\\n\\n function calculateRedeemOutputs(uint256 _amount)\\n external\\n view\\n returns (uint256[] memory);\\n\\n function getAssetCount() external view returns (uint256);\\n\\n function getAssetConfig(address _asset)\\n external\\n view\\n returns (VaultStorage.Asset memory config);\\n\\n function getAllAssets() external view returns (address[] memory);\\n\\n function getStrategyCount() external view returns (uint256);\\n\\n function swapper() external view returns (address);\\n\\n function allowedSwapUndervalue() external view returns (uint256);\\n\\n function getAllStrategies() external view returns (address[] memory);\\n\\n function isSupportedAsset(address _asset) external view returns (bool);\\n\\n function netOusdMintForStrategyThreshold() external view returns (uint256);\\n\\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\\n\\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\\n\\n function netOusdMintedForStrategy() external view returns (int256);\\n\\n function weth() external view returns (address);\\n\\n function cacheWETHAssetIndex() external;\\n\\n function wethAssetIndex() external view returns (uint256);\\n\\n function initialize(address, address) external;\\n\\n function setAdminImpl(address) external;\\n\\n function removeAsset(address _asset) external;\\n}\\n\",\"keccak256\":\"0xa03ba17b6224bec26290794760fc807e017260406037b4f812970701888e72c8\",\"license\":\"MIT\"},\"contracts/interfaces/IWETH9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IWETH9 {\\n event Approval(address indexed src, address indexed guy, uint256 wad);\\n event Deposit(address indexed dst, uint256 wad);\\n event Transfer(address indexed src, address indexed dst, uint256 wad);\\n event Withdrawal(address indexed src, uint256 wad);\\n\\n function allowance(address, address) external view returns (uint256);\\n\\n function approve(address guy, uint256 wad) external returns (bool);\\n\\n function balanceOf(address) external view returns (uint256);\\n\\n function decimals() external view returns (uint8);\\n\\n function deposit() external payable;\\n\\n function name() external view returns (string memory);\\n\\n function symbol() external view returns (string memory);\\n\\n function totalSupply() external view returns (uint256);\\n\\n function transfer(address dst, uint256 wad) external returns (bool);\\n\\n function transferFrom(\\n address src,\\n address dst,\\n uint256 wad\\n ) external returns (bool);\\n\\n function withdraw(uint256 wad) external;\\n}\\n\",\"keccak256\":\"0x05b7dce6c24d3cd4e48b5c6346d86e5e40ecc3291bcdf3f3ef091c98fc826519\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/FeeAccumulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Governable } from \\\"../../governance/Governable.sol\\\";\\n\\n/**\\n * @title Fee Accumulator for Native Staking SSV Strategy\\n * @notice Receives execution rewards which includes tx fees and\\n * MEV rewards like tx priority and tx ordering.\\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\\n * @author Origin Protocol Inc\\n */\\ncontract FeeAccumulator is Governable {\\n /// @notice The address of the Native Staking Strategy\\n address public immutable STRATEGY;\\n\\n /**\\n * @param _strategy Address of the Native Staking Strategy\\n */\\n constructor(address _strategy) {\\n STRATEGY = _strategy;\\n }\\n\\n /**\\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\\n */\\n function collect() external returns (uint256 eth) {\\n require(msg.sender == STRATEGY, \\\"Caller is not the Strategy\\\");\\n\\n eth = address(this).balance;\\n if (eth > 0) {\\n // Send the ETH to the Native Staking Strategy\\n Address.sendValue(payable(STRATEGY), eth);\\n }\\n }\\n\\n /**\\n * @dev Accept ETH\\n */\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0xb8fda3b87dc5d6f8aee4bf1d015a585211e5b5a319dfa4b0f4770e3f5a2d5939\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nimport { InitializableAbstractStrategy } from \\\"../../utils/InitializableAbstractStrategy.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { FeeAccumulator } from \\\"./FeeAccumulator.sol\\\";\\nimport { ValidatorAccountant } from \\\"./ValidatorAccountant.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/// @title Native Staking SSV Strategy\\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\\n/// @author Origin Protocol Inc\\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\\n/// required since the rewards (reward token) is also in ETH.\\n///\\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\\n/// immediately wraps ETH to WETH and sends it to the Vault.\\n///\\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\\n/// - as a result of already accounted for consensus rewards\\n/// - as a result of not yet accounted for consensus rewards\\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\\n///\\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\\n/// interval and not immediately.\\ncontract NativeStakingSSVStrategy is\\n ValidatorAccountant,\\n InitializableAbstractStrategy\\n{\\n using SafeERC20 for IERC20;\\n\\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\\n address public immutable SSV_TOKEN_ADDRESS;\\n /// @notice Fee collector address\\n /// @dev this address will receive Execution layer rewards - These are rewards earned for\\n /// executing transactions on the Ethereum network as part of block proposals. They include\\n /// priority fees (fees paid by users for their transactions to be included) and MEV rewards\\n /// (rewards for arranging transactions in a way that benefits the validator).\\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\\n\\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\\n /// of WETH that has already been accounted for.\\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\\n /// deposit events.\\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\\n /// be staked.\\n uint256 public depositedWethAccountedFor;\\n\\n // For future use\\n uint256[49] private __gap;\\n\\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _ssvToken Address of the Erc20 SSV Token contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n constructor(\\n BaseStrategyConfig memory _baseConfig,\\n address _wethAddress,\\n address _ssvToken,\\n address _ssvNetwork,\\n uint256 _maxValidators,\\n address _feeAccumulator,\\n address _beaconChainDepositContract\\n )\\n InitializableAbstractStrategy(_baseConfig)\\n ValidatorAccountant(\\n _wethAddress,\\n _baseConfig.vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {\\n SSV_TOKEN_ADDRESS = _ssvToken;\\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\\n }\\n\\n /// @notice initialize function, to set up initial internal state\\n /// @param _rewardTokenAddresses Address of reward token for platform\\n /// @param _assets Addresses of initial supported assets\\n /// @param _pTokens Platform Token corresponding addresses\\n function initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) external onlyGovernor initializer {\\n InitializableAbstractStrategy._initialize(\\n _rewardTokenAddresses,\\n _assets,\\n _pTokens\\n );\\n }\\n\\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\\n /// Will revert if the strategy is paused for accounting.\\n function _collectRewardTokens() internal override whenNotPaused {\\n // collect ETH from execution rewards from the fee accumulator\\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\\n .collect();\\n\\n // total ETH rewards to be harvested = execution rewards + consensus rewards\\n uint256 ethRewards = executionRewards + consensusRewards;\\n\\n require(\\n address(this).balance >= ethRewards,\\n \\\"insufficient eth balance\\\"\\n );\\n\\n if (ethRewards > 0) {\\n // reset the counter keeping track of beacon chain consensus rewards\\n consensusRewards = 0;\\n\\n // Convert ETH rewards to WETH\\n IWETH9(WETH_TOKEN_ADDRESS).deposit{ value: ethRewards }();\\n\\n emit RewardTokenCollected(\\n harvesterAddress,\\n WETH_TOKEN_ADDRESS,\\n ethRewards\\n );\\n IERC20(WETH_TOKEN_ADDRESS).safeTransfer(\\n harvesterAddress,\\n ethRewards\\n );\\n }\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just checks the asset is WETH and emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _asset Address of asset to deposit. Has to be WETH.\\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\\n function deposit(address _asset, uint256 _amount)\\n external\\n override\\n onlyVault\\n nonReentrant\\n {\\n require(_asset == WETH_TOKEN_ADDRESS, \\\"Unsupported asset\\\");\\n depositedWethAccountedFor += _amount;\\n _deposit(_asset, _amount);\\n }\\n\\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\\n /// @param _asset Address of WETH\\n /// @param _amount Amount of WETH to deposit\\n function _deposit(address _asset, uint256 _amount) internal {\\n require(_amount > 0, \\\"Must deposit something\\\");\\n /*\\n * We could do a check here that would revert when \\\"_amount % 32 ether != 0\\\". With the idea of\\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\\n * of 32ETH have been staked.\\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\\n *\\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\\n */\\n emit Deposit(_asset, address(0), _amount);\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function depositAll() external override onlyVault nonReentrant {\\n uint256 wethBalance = IERC20(WETH_TOKEN_ADDRESS).balanceOf(\\n address(this)\\n );\\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\\n\\n if (newWeth > 0) {\\n depositedWethAccountedFor = wethBalance;\\n\\n _deposit(WETH_TOKEN_ADDRESS, newWeth);\\n }\\n }\\n\\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That\\n /// can happen when:\\n /// - the deposit was not a multiple of 32 WETH\\n /// - someone sent WETH directly to this contract\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _recipient Address to receive withdrawn assets\\n /// @param _asset WETH to withdraw\\n /// @param _amount Amount of WETH to withdraw\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external override onlyVault nonReentrant {\\n _withdraw(_recipient, _asset, _amount);\\n }\\n\\n function _withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) internal {\\n require(_amount > 0, \\\"Must withdraw something\\\");\\n require(_recipient != address(0), \\\"Must specify recipient\\\");\\n\\n emit Withdrawal(_asset, address(0), _amount);\\n IERC20(_asset).safeTransfer(_recipient, _amount);\\n }\\n\\n /// @notice transfer all WETH deposits back to the vault.\\n /// This does not withdraw from the validators. That has to be done separately with the\\n /// `exitSsvValidator` and `removeSsvValidator` operations.\\n /// This does not withdraw any execution rewards from the FeeAccumulator or\\n /// consensus rewards in this strategy.\\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\\n uint256 wethBalance = IERC20(WETH_TOKEN_ADDRESS).balanceOf(\\n address(this)\\n );\\n if (wethBalance > 0) {\\n _withdraw(vaultAddress, WETH_TOKEN_ADDRESS, wethBalance);\\n }\\n }\\n\\n function _abstractSetPToken(address _asset, address) internal override {}\\n\\n /// @notice Returns the total value of (W)ETH that is staked to the validators\\n /// and WETH deposits that are still to be staked.\\n /// This does not include ETH from consensus rewards sitting in this strategy\\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\\n /// @param _asset Address of weth asset\\n /// @return balance Total value of (W)ETH\\n function checkBalance(address _asset)\\n external\\n view\\n override\\n returns (uint256 balance)\\n {\\n require(_asset == WETH_TOKEN_ADDRESS, \\\"Unsupported asset\\\");\\n\\n balance =\\n // add the ETH that has been staked in validators\\n activeDepositedValidators *\\n 32 ether +\\n // add the WETH in the strategy from deposits that are still to be staked\\n IERC20(WETH_TOKEN_ADDRESS).balanceOf(address(this));\\n }\\n\\n function pause() external onlyStrategist {\\n _pause();\\n }\\n\\n /// @notice Returns bool indicating whether asset is supported by strategy.\\n /// @param _asset The address of the asset token.\\n function supportsAsset(address _asset) public view override returns (bool) {\\n return _asset == WETH_TOKEN_ADDRESS;\\n }\\n\\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\\n function safeApproveAllTokens() external override {\\n /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits\\n IERC20(SSV_TOKEN_ADDRESS).approve(\\n SSV_NETWORK_ADDRESS,\\n type(uint256).max\\n );\\n }\\n\\n /**\\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\\n * unwrapping WETH just before staking it to the validator\\n * @dev don't want to receive donations from anyone else as this will\\n * mess with the accounting of the consensus rewards and validator full withdrawals\\n */\\n receive() external payable {\\n require(\\n msg.sender == FEE_ACCUMULATOR_ADDRESS ||\\n msg.sender == WETH_TOKEN_ADDRESS,\\n \\\"eth not from allowed contracts\\\"\\n );\\n }\\n\\n function _wethWithdrawnToVault(uint256 _amount) internal override {\\n emit Withdrawal(WETH_TOKEN_ADDRESS, address(0), _amount);\\n }\\n\\n function _wethWithdrawnAndStaked(uint256 _amount) internal override {\\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\\n * depositedWethAccountedFor is smaller than the _amount.\\n *\\n * The reason this is required is that a malicious actor could sent WETH direclty\\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\\n * be deducted so much that it would be negative.\\n */\\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\\n depositedWethAccountedFor -= deductAmount;\\n }\\n}\\n\",\"keccak256\":\"0x34c14896bd8b1ef61672511da04db41f7bc141225a8d1c7bae87bba94feb86da\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorAccountant.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { ValidatorRegistrator } from \\\"./ValidatorRegistrator.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\n\\n/// @title Validator Accountant\\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\\n/// Full withdrawals are from exited validators.\\n/// @author Origin Protocol Inc\\nabstract contract ValidatorAccountant is ValidatorRegistrator {\\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\\n /// @notice The maximum amount of ETH that can be staked by a validator\\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\\n uint256 public constant MAX_STAKE = 32 ether;\\n\\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\\n uint256 public consensusRewards;\\n\\n /// @notice start of fuse interval\\n uint256 public fuseIntervalStart;\\n /// @notice end of fuse interval\\n uint256 public fuseIntervalEnd;\\n /// @notice last block number manuallyFixAccounting has been called\\n uint256 public lastFixAccountingBlockNumber;\\n\\n uint256[49] private __gap;\\n\\n event FuseIntervalUpdated(uint256 start, uint256 end);\\n event AccountingFullyWithdrawnValidator(\\n uint256 noOfValidators,\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingValidatorSlashed(\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingConsensusRewards(uint256 amount);\\n\\n event AccountingManuallyFixed(\\n int256 validatorsDelta,\\n int256 consensusRewardsDelta,\\n uint256 wethToVault\\n );\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n )\\n ValidatorRegistrator(\\n _wethAddress,\\n _vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {}\\n\\n /// @notice set fuse interval values\\n function setFuseInterval(\\n uint256 _fuseIntervalStart,\\n uint256 _fuseIntervalEnd\\n ) external onlyGovernor {\\n require(\\n _fuseIntervalStart < _fuseIntervalEnd &&\\n _fuseIntervalEnd < 32 ether &&\\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\\n \\\"incorrect fuse interval\\\"\\n );\\n\\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\\n\\n fuseIntervalStart = _fuseIntervalStart;\\n fuseIntervalEnd = _fuseIntervalEnd;\\n }\\n\\n /* solhint-disable max-line-length */\\n /// This notion page offers a good explanation of how the accounting functions\\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\\n /// the accounting function will treat that as a validator slashing.\\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\\n /// accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\\n /// for now.\\n /// @return accountingValid true if accounting was successful, false if fuse is blown\\n /* solhint-enable max-line-length */\\n function doAccounting()\\n external\\n onlyRegistrator\\n whenNotPaused\\n returns (bool accountingValid)\\n {\\n // pause the accounting on failure\\n accountingValid = _doAccounting(true);\\n }\\n\\n // slither-disable-start reentrancy-eth\\n function _doAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n if (address(this).balance < consensusRewards) {\\n return _failAccounting(pauseOnFail);\\n }\\n\\n // Calculate all the new ETH that has been swept to the contract since the last accounting\\n uint256 newSweptETH = address(this).balance - consensusRewards;\\n accountingValid = true;\\n\\n // send the ETH that is from fully withdrawn validators to the Vault\\n if (newSweptETH >= MAX_STAKE) {\\n uint256 fullyWithdrawnValidators;\\n // safe since MAX_STAKE is hardcoded to 32ETH\\n unchecked {\\n // explicitly cast to uint256 as we want to round to a whole number of validators\\n fullyWithdrawnValidators = uint256(newSweptETH / MAX_STAKE);\\n }\\n activeDepositedValidators -= fullyWithdrawnValidators;\\n\\n uint256 wethToVault = MAX_STAKE * fullyWithdrawnValidators;\\n IWETH9(WETH_TOKEN_ADDRESS).deposit{ value: wethToVault }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH_TOKEN_ADDRESS).transfer(VAULT_ADDRESS, wethToVault);\\n _wethWithdrawnToVault(wethToVault);\\n\\n emit AccountingFullyWithdrawnValidator(\\n fullyWithdrawnValidators,\\n activeDepositedValidators,\\n wethToVault\\n );\\n }\\n\\n uint256 ethRemaining = address(this).balance - consensusRewards;\\n // should be less than a whole validator stake\\n require(ethRemaining < 32 ether, \\\"unexpected accounting\\\");\\n\\n // If no Beacon chain consensus rewards swept\\n if (ethRemaining == 0) {\\n // do nothing\\n return accountingValid;\\n }\\n // Beacon chain consensus rewards swept (partial validator withdrawals)\\n else if (ethRemaining < fuseIntervalStart) {\\n // solhint-disable-next-line reentrancy\\n consensusRewards += ethRemaining;\\n emit AccountingConsensusRewards(ethRemaining);\\n }\\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\\n else if (ethRemaining > fuseIntervalEnd) {\\n IWETH9(WETH_TOKEN_ADDRESS).deposit{ value: ethRemaining }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH_TOKEN_ADDRESS).transfer(VAULT_ADDRESS, ethRemaining);\\n activeDepositedValidators -= 1;\\n\\n _wethWithdrawnToVault(ethRemaining);\\n\\n emit AccountingValidatorSlashed(\\n activeDepositedValidators,\\n ethRemaining\\n );\\n }\\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\\n else {\\n return _failAccounting(pauseOnFail);\\n }\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @dev pause any further accounting if required and return false\\n function _failAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n // pause if not already\\n if (pauseOnFail) {\\n _pause();\\n }\\n // fail the accounting\\n accountingValid = false;\\n }\\n\\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\\n /// to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval\\n /// we need to reduce the amount of active deposited validators and immediately send WETH\\n /// to the vault, so it doesn't interfere with further accounting.\\n function manuallyFixAccounting(\\n int256 _validatorsDelta,\\n int256 _consensusRewardsDelta,\\n uint256 _ethToVaultAmount\\n ) external onlyStrategist whenPaused {\\n require(\\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\\n block.number,\\n \\\"manuallyFixAccounting called too soon\\\"\\n );\\n require(\\n _validatorsDelta >= -3 &&\\n _validatorsDelta <= 3 &&\\n // new value must be positive\\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\\n \\\"invalid validatorsDelta\\\"\\n );\\n require(\\n _consensusRewardsDelta >= -332 ether &&\\n _consensusRewardsDelta <= 332 ether &&\\n // new value must be positive\\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\\n \\\"invalid consensusRewardsDelta\\\"\\n );\\n require(_ethToVaultAmount <= 32 ether * 3, \\\"invalid wethToVaultAmount\\\");\\n\\n emit AccountingManuallyFixed(\\n _validatorsDelta,\\n _consensusRewardsDelta,\\n _ethToVaultAmount\\n );\\n\\n activeDepositedValidators = uint256(\\n int256(activeDepositedValidators) + _validatorsDelta\\n );\\n consensusRewards = uint256(\\n int256(consensusRewards) + _consensusRewardsDelta\\n );\\n lastFixAccountingBlockNumber = block.number;\\n if (_ethToVaultAmount > 0) {\\n IWETH9(WETH_TOKEN_ADDRESS).deposit{ value: _ethToVaultAmount }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH_TOKEN_ADDRESS).transfer(\\n VAULT_ADDRESS,\\n _ethToVaultAmount\\n );\\n _wethWithdrawnToVault(_ethToVaultAmount);\\n }\\n\\n // rerun the accounting to see if it has now been fixed.\\n // Do not pause the accounting on failure as it is already paused\\n require(_doAccounting(false), \\\"fuse still blown\\\");\\n\\n // unpause since doAccounting was successful\\n _unpause();\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev allows for NativeStakingSSVStrategy contract to emit Withdrawal event\\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xd4822fde6975d6163bcb73e50a1b2a7437b11fdaa9c85cc36a794a6fc5fc0209\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorRegistrator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Governable } from \\\"../../governance/Governable.sol\\\";\\nimport { IDepositContract } from \\\"../../interfaces/IDepositContract.sol\\\";\\nimport { IVault } from \\\"../../interfaces/IVault.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { ISSVNetwork, Cluster } from \\\"../../interfaces/ISSVNetwork.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/**\\n * @title Registrator of the validators\\n * @notice This contract implements all the required functionality to register, exit and remove validators.\\n * @author Origin Protocol Inc\\n */\\nabstract contract ValidatorRegistrator is Governable, Pausable {\\n /// @notice The address of the Wrapped ETH (WETH) token contract\\n address public immutable WETH_TOKEN_ADDRESS;\\n /// @notice The address of the beacon chain deposit contract\\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\\n /// @notice The address of the SSV Network contract used to interface with\\n address public immutable SSV_NETWORK_ADDRESS;\\n /// @notice Address of the OETH Vault proxy contract\\n address public immutable VAULT_ADDRESS;\\n /// @notice Maximum number of validators that can be registered in this strategy\\n uint256 public immutable MAX_VALIDATORS;\\n\\n /// @notice Address of the registrator - allowed to register, exit and remove validators\\n address public validatorRegistrator;\\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\\n /// to a validator happens this number increases, when a validator exit is detected this number\\n /// decreases.\\n uint256 public activeDepositedValidators;\\n /// @notice State of the validators keccak256(pubKey) => state\\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\\n address public stakingMonitor;\\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\\n /// and the governor needs to approve further staking\\n uint256 public stakeETHThreshold;\\n /// @notice Amount of ETH that can has been staked since the last governor approval.\\n uint256 public stakeETHTally;\\n // For future use\\n uint256[47] private __gap;\\n\\n enum VALIDATOR_STATE {\\n NON_REGISTERED, // validator is not registered on the SSV network\\n REGISTERED, // validator is registered on the SSV network\\n STAKED, // validator has funds staked\\n EXITING, // exit message has been posted and validator is in the process of exiting\\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\\n }\\n\\n event RegistratorChanged(address indexed newAddress);\\n event StakingMonitorChanged(address indexed newAddress);\\n event ETHStaked(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint256 amount,\\n bytes withdrawal_credentials\\n );\\n event SSVValidatorRegistered(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitInitiated(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitCompleted(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event StakeETHThresholdChanged(uint256 amount);\\n event StakeETHTallyReset();\\n\\n /// @dev Throws if called by any account other than the Registrator\\n modifier onlyRegistrator() {\\n require(\\n msg.sender == validatorRegistrator,\\n \\\"Caller is not the Registrator\\\"\\n );\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Staking monitor\\n modifier onlyStakingMonitor() {\\n require(msg.sender == stakingMonitor, \\\"Caller is not the Monitor\\\");\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Strategist\\n modifier onlyStrategist() {\\n require(\\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\\n \\\"Caller is not the Strategist\\\"\\n );\\n _;\\n }\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n ) {\\n WETH_TOKEN_ADDRESS = _wethAddress;\\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\\n SSV_NETWORK_ADDRESS = _ssvNetwork;\\n VAULT_ADDRESS = _vaultAddress;\\n MAX_VALIDATORS = _maxValidators;\\n }\\n\\n /// @notice Set the address of the registrator which can register, exit and remove validators\\n function setRegistrator(address _address) external onlyGovernor {\\n emit RegistratorChanged(_address);\\n validatorRegistrator = _address;\\n }\\n\\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\\n function setStakingMonitor(address _address) external onlyGovernor {\\n emit StakingMonitorChanged(_address);\\n stakingMonitor = _address;\\n }\\n\\n /// @notice Set the amount of ETH that can be staked before staking monitor\\n // needs to a approve further staking by resetting the stake ETH tally\\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\\n emit StakeETHThresholdChanged(_amount);\\n stakeETHThreshold = _amount;\\n }\\n\\n /// @notice Reset the stakeETHTally\\n function resetStakeETHTally() external onlyStakingMonitor {\\n emit StakeETHTallyReset();\\n stakeETHTally = 0;\\n }\\n\\n /// @notice Stakes WETH to the node validators\\n /// @param validators A list of validator data needed to stake.\\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\\n /// Only the registrator can call this function.\\n // slither-disable-start reentrancy-eth\\n function stakeEth(ValidatorStakeData[] calldata validators)\\n external\\n onlyRegistrator\\n whenNotPaused\\n {\\n uint256 requiredETH = validators.length * 32 ether;\\n\\n // Check there is enough WETH from the deposits sitting in this strategy contract\\n require(\\n requiredETH <= IWETH9(WETH_TOKEN_ADDRESS).balanceOf(address(this)),\\n \\\"insufficient WETH\\\"\\n );\\n require(\\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\\n \\\"Max validators reached\\\"\\n );\\n\\n require(\\n stakeETHTally + requiredETH <= stakeETHThreshold,\\n \\\"Staking ETH over threshold\\\"\\n );\\n stakeETHTally += requiredETH;\\n\\n // Convert required ETH from WETH\\n IWETH9(WETH_TOKEN_ADDRESS).withdraw(requiredETH);\\n _wethWithdrawnAndStaked(requiredETH);\\n\\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\\n * can sweep funds to.\\n * bytes11(0) to fill up the required zeros\\n * remaining bytes20 are for the address\\n */\\n bytes memory withdrawal_credentials = abi.encodePacked(\\n bytes1(0x01),\\n bytes11(0),\\n address(this)\\n );\\n\\n uint256 validatorsLength = validators.length;\\n // For each validator\\n for (uint256 i = 0; i < validatorsLength; ) {\\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n\\n require(\\n currentState == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not registered\\\"\\n );\\n\\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\\n value: 32 ether\\n }(\\n validators[i].pubkey,\\n withdrawal_credentials,\\n validators[i].signature,\\n validators[i].depositDataRoot\\n );\\n\\n emit ETHStaked(\\n pubKeyHash,\\n validators[i].pubkey,\\n 32 ether,\\n withdrawal_credentials\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\\n\\n unchecked {\\n ++i;\\n }\\n }\\n // save gas by changing this storage variable only once rather each time in the loop.\\n activeDepositedValidators += validatorsLength;\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @notice Registers a new validator in the SSV Cluster.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param sharesData The validator shares data\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function registerSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n bytes calldata sharesData,\\n uint256 ssvAmount,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n require(\\n validatorsStates[pubKeyHash] == VALIDATOR_STATE.NON_REGISTERED,\\n \\\"Validator already registered\\\"\\n );\\n ISSVNetwork(SSV_NETWORK_ADDRESS).registerValidator(\\n publicKey,\\n operatorIds,\\n sharesData,\\n ssvAmount,\\n cluster\\n );\\n emit SSVValidatorRegistered(pubKeyHash, publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Exit a validator from the Beacon chain.\\n /// The staked ETH will eventually swept to this native staking strategy.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n // slither-disable-start reentrancy-no-eth\\n function exitSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(currentState == VALIDATOR_STATE.STAKED, \\\"Validator not staked\\\");\\n\\n ISSVNetwork(SSV_NETWORK_ADDRESS).exitValidator(publicKey, operatorIds);\\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Remove a validator from the SSV Cluster.\\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function removeSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.EXITING,\\n \\\"Validator not exiting\\\"\\n );\\n\\n ISSVNetwork(SSV_NETWORK_ADDRESS).removeValidator(\\n publicKey,\\n operatorIds,\\n cluster\\n );\\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\\n /// uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service\\n /// that tries to top up SSV tokens.\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n function depositSSV(\\n uint64[] memory operatorIds,\\n uint256 ssvAmount,\\n Cluster memory cluster\\n ) external onlyStrategist {\\n ISSVNetwork(SSV_NETWORK_ADDRESS).deposit(\\n address(this),\\n operatorIds,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev allows for NativeStakingSSVStrategy contract know how much WETH had been staked\\n function _wethWithdrawnAndStaked(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0x987cbb442eff12384cc61eb162845912c488169d690173c8dd7f672283900ae6\",\"license\":\"MIT\"},\"contracts/token/OUSD.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Token Contract\\n * @dev ERC20 compatible contract for OUSD\\n * @dev Implements an elastic supply\\n * @author Origin Protocol Inc\\n */\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { InitializableERC20Detailed } from \\\"../utils/InitializableERC20Detailed.sol\\\";\\nimport { StableMath } from \\\"../utils/StableMath.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\n\\n/**\\n * NOTE that this is an ERC20 token but the invariant that the sum of\\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\\n * rebasing design. Any integrations with OUSD should be aware.\\n */\\n\\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\\n using SafeMath for uint256;\\n using StableMath for uint256;\\n\\n event TotalSupplyUpdatedHighres(\\n uint256 totalSupply,\\n uint256 rebasingCredits,\\n uint256 rebasingCreditsPerToken\\n );\\n event AccountRebasingEnabled(address account);\\n event AccountRebasingDisabled(address account);\\n\\n enum RebaseOptions {\\n NotSet,\\n OptOut,\\n OptIn\\n }\\n\\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\\n uint256 public _totalSupply;\\n mapping(address => mapping(address => uint256)) private _allowances;\\n address public vaultAddress = address(0);\\n mapping(address => uint256) private _creditBalances;\\n uint256 private _rebasingCredits;\\n uint256 private _rebasingCreditsPerToken;\\n // Frozen address/credits are non rebasing (value is held in contracts which\\n // do not receive yield unless they explicitly opt in)\\n uint256 public nonRebasingSupply;\\n mapping(address => uint256) public nonRebasingCreditsPerToken;\\n mapping(address => RebaseOptions) public rebaseState;\\n mapping(address => uint256) public isUpgraded;\\n\\n uint256 private constant RESOLUTION_INCREASE = 1e9;\\n\\n function initialize(\\n string calldata _nameArg,\\n string calldata _symbolArg,\\n address _vaultAddress,\\n uint256 _initialCreditsPerToken\\n ) external onlyGovernor initializer {\\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\\n _rebasingCreditsPerToken = _initialCreditsPerToken;\\n vaultAddress = _vaultAddress;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault contract\\n */\\n modifier onlyVault() {\\n require(vaultAddress == msg.sender, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @return The total supply of OUSD.\\n */\\n function totalSupply() public view override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @return Low resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerToken() public view returns (uint256) {\\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return Low resolution total number of rebasing credits\\n */\\n function rebasingCredits() public view returns (uint256) {\\n return _rebasingCredits / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return High resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\\n return _rebasingCreditsPerToken;\\n }\\n\\n /**\\n * @return High resolution total number of rebasing credits\\n */\\n function rebasingCreditsHighres() public view returns (uint256) {\\n return _rebasingCredits;\\n }\\n\\n /**\\n * @dev Gets the balance of the specified address.\\n * @param _account Address to query the balance of.\\n * @return A uint256 representing the amount of base units owned by the\\n * specified address.\\n */\\n function balanceOf(address _account)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n if (_creditBalances[_account] == 0) return 0;\\n return\\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @dev Backwards compatible with old low res credits per token.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256) Credit balance and credits per token of the\\n * address\\n */\\n function creditsBalanceOf(address _account)\\n public\\n view\\n returns (uint256, uint256)\\n {\\n uint256 cpt = _creditsPerToken(_account);\\n if (cpt == 1e27) {\\n // For a period before the resolution upgrade, we created all new\\n // contract accounts at high resolution. Since they are not changing\\n // as a result of this upgrade, we will return their true values\\n return (_creditBalances[_account], cpt);\\n } else {\\n return (\\n _creditBalances[_account] / RESOLUTION_INCREASE,\\n cpt / RESOLUTION_INCREASE\\n );\\n }\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\\n * address, and isUpgraded\\n */\\n function creditsBalanceOfHighres(address _account)\\n public\\n view\\n returns (\\n uint256,\\n uint256,\\n bool\\n )\\n {\\n return (\\n _creditBalances[_account],\\n _creditsPerToken(_account),\\n isUpgraded[_account] == 1\\n );\\n }\\n\\n /**\\n * @dev Transfer tokens to a specified address.\\n * @param _to the address to transfer to.\\n * @param _value the amount to be transferred.\\n * @return true on success.\\n */\\n function transfer(address _to, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(\\n _value <= balanceOf(msg.sender),\\n \\\"Transfer greater than balance\\\"\\n );\\n\\n _executeTransfer(msg.sender, _to, _value);\\n\\n emit Transfer(msg.sender, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Transfer tokens from one address to another.\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value The amount of tokens to be transferred.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _value\\n ) public override returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(_value <= balanceOf(_from), \\\"Transfer greater than balance\\\");\\n\\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\\n _value\\n );\\n\\n _executeTransfer(_from, _to, _value);\\n\\n emit Transfer(_from, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Update the count of non rebasing credits in response to a transfer\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value Amount of OUSD to transfer\\n */\\n function _executeTransfer(\\n address _from,\\n address _to,\\n uint256 _value\\n ) internal {\\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\\n\\n // Credits deducted and credited might be different due to the\\n // differing creditsPerToken used by each account\\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\\n\\n _creditBalances[_from] = _creditBalances[_from].sub(\\n creditsDeducted,\\n \\\"Transfer amount exceeds balance\\\"\\n );\\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\\n\\n if (isNonRebasingTo && !isNonRebasingFrom) {\\n // Transfer to non-rebasing account from rebasing account, credits\\n // are removed from the non rebasing tally\\n nonRebasingSupply = nonRebasingSupply.add(_value);\\n // Update rebasingCredits by subtracting the deducted amount\\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\\n // Transfer to rebasing account from non-rebasing account\\n // Decreasing non-rebasing credits by the amount that was sent\\n nonRebasingSupply = nonRebasingSupply.sub(_value);\\n // Update rebasingCredits by adding the credited amount\\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\\n }\\n }\\n\\n /**\\n * @dev Function to check the amount of tokens that _owner has allowed to\\n * `_spender`.\\n * @param _owner The address which owns the funds.\\n * @param _spender The address which will spend the funds.\\n * @return The number of tokens still available for the _spender.\\n */\\n function allowance(address _owner, address _spender)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev Approve the passed address to spend the specified amount of tokens\\n * on behalf of msg.sender. This method is included for ERC20\\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\\n * used instead.\\n *\\n * Changing an allowance with this method brings the risk that someone\\n * may transfer both the old and the new allowance - if they are both\\n * greater than zero - if a transfer transaction is mined before the\\n * later approve() call is mined.\\n * @param _spender The address which will spend the funds.\\n * @param _value The amount of tokens to be spent.\\n */\\n function approve(address _spender, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _value;\\n emit Approval(msg.sender, _spender, _value);\\n return true;\\n }\\n\\n /**\\n * @dev Increase the amount of tokens that an owner has allowed to\\n * `_spender`.\\n * This method should be used instead of approve() to avoid the double\\n * approval vulnerability described above.\\n * @param _spender The address which will spend the funds.\\n * @param _addedValue The amount of tokens to increase the allowance by.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue)\\n public\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\\n .add(_addedValue);\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Decrease the amount of tokens that an owner has allowed to\\n `_spender`.\\n * @param _spender The address which will spend the funds.\\n * @param _subtractedValue The amount of tokens to decrease the allowance\\n * by.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\\n public\\n returns (bool)\\n {\\n uint256 oldValue = _allowances[msg.sender][_spender];\\n if (_subtractedValue >= oldValue) {\\n _allowances[msg.sender][_spender] = 0;\\n } else {\\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\\n }\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Mints new tokens, increasing totalSupply.\\n */\\n function mint(address _account, uint256 _amount) external onlyVault {\\n _mint(_account, _amount);\\n }\\n\\n /**\\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Mint to the zero address\\\");\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\\n\\n // If the account is non rebasing and doesn't have a set creditsPerToken\\n // then set it i.e. this is a mint from a fresh contract\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.add(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.add(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.add(_amount);\\n\\n require(_totalSupply < MAX_SUPPLY, \\\"Max supply\\\");\\n\\n emit Transfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Burns tokens, decreasing totalSupply.\\n */\\n function burn(address account, uint256 amount) external onlyVault {\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Burn from the zero address\\\");\\n if (_amount == 0) {\\n return;\\n }\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n uint256 currentCredits = _creditBalances[_account];\\n\\n // Remove the credits, burning rounding errors\\n if (\\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\\n ) {\\n // Handle dust from rounding\\n _creditBalances[_account] = 0;\\n } else if (currentCredits > creditAmount) {\\n _creditBalances[_account] = _creditBalances[_account].sub(\\n creditAmount\\n );\\n } else {\\n revert(\\\"Remove exceeds balance\\\");\\n }\\n\\n // Remove from the credit tallies and non-rebasing supply\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.sub(_amount);\\n\\n emit Transfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Get the credits per token for an account. Returns a fixed amount\\n * if the account is non-rebasing.\\n * @param _account Address of the account.\\n */\\n function _creditsPerToken(address _account)\\n internal\\n view\\n returns (uint256)\\n {\\n if (nonRebasingCreditsPerToken[_account] != 0) {\\n return nonRebasingCreditsPerToken[_account];\\n } else {\\n return _rebasingCreditsPerToken;\\n }\\n }\\n\\n /**\\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\\n * Also, ensure contracts are non-rebasing if they have not opted in.\\n * @param _account Address of the account.\\n */\\n function _isNonRebasingAccount(address _account) internal returns (bool) {\\n bool isContract = Address.isContract(_account);\\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\\n _ensureRebasingMigration(_account);\\n }\\n return nonRebasingCreditsPerToken[_account] > 0;\\n }\\n\\n /**\\n * @dev Ensures internal account for rebasing and non-rebasing credits and\\n * supply is updated following deployment of frozen yield change.\\n */\\n function _ensureRebasingMigration(address _account) internal {\\n if (nonRebasingCreditsPerToken[_account] == 0) {\\n emit AccountRebasingDisabled(_account);\\n if (_creditBalances[_account] == 0) {\\n // Since there is no existing balance, we can directly set to\\n // high resolution, and do not have to do any other bookkeeping\\n nonRebasingCreditsPerToken[_account] = 1e27;\\n } else {\\n // Migrate an existing account:\\n\\n // Set fixed credits per token for this account\\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\\n // Update non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\\n // Update credit tallies\\n _rebasingCredits = _rebasingCredits.sub(\\n _creditBalances[_account]\\n );\\n }\\n }\\n }\\n\\n /**\\n * @notice Enable rebasing for an account.\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n * @param _account Address of the account.\\n */\\n function governanceRebaseOptIn(address _account)\\n public\\n nonReentrant\\n onlyGovernor\\n {\\n _rebaseOptIn(_account);\\n }\\n\\n /**\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n */\\n function rebaseOptIn() public nonReentrant {\\n _rebaseOptIn(msg.sender);\\n }\\n\\n function _rebaseOptIn(address _account) internal {\\n require(_isNonRebasingAccount(_account), \\\"Account has not opted out\\\");\\n\\n // Convert balance into the same amount at the current exchange rate\\n uint256 newCreditBalance = _creditBalances[_account]\\n .mul(_rebasingCreditsPerToken)\\n .div(_creditsPerToken(_account));\\n\\n // Decreasing non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\\n\\n _creditBalances[_account] = newCreditBalance;\\n\\n // Increase rebasing credits, totalSupply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\\n\\n rebaseState[_account] = RebaseOptions.OptIn;\\n\\n // Delete any fixed credits per token\\n delete nonRebasingCreditsPerToken[_account];\\n emit AccountRebasingEnabled(_account);\\n }\\n\\n /**\\n * @dev Explicitly mark that an address is non-rebasing.\\n */\\n function rebaseOptOut() public nonReentrant {\\n require(!_isNonRebasingAccount(msg.sender), \\\"Account has not opted in\\\");\\n\\n // Increase non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\\n // Set fixed credits per token\\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\\n\\n // Decrease rebasing credits, total supply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\\n\\n // Mark explicitly opted out of rebasing\\n rebaseState[msg.sender] = RebaseOptions.OptOut;\\n emit AccountRebasingDisabled(msg.sender);\\n }\\n\\n /**\\n * @dev Modify the supply without minting new tokens. This uses a change in\\n * the exchange rate between \\\"credits\\\" and OUSD tokens to change balances.\\n * @param _newTotalSupply New total supply of OUSD.\\n */\\n function changeSupply(uint256 _newTotalSupply)\\n external\\n onlyVault\\n nonReentrant\\n {\\n require(_totalSupply > 0, \\\"Cannot increase 0 supply\\\");\\n\\n if (_totalSupply == _newTotalSupply) {\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n return;\\n }\\n\\n _totalSupply = _newTotalSupply > MAX_SUPPLY\\n ? MAX_SUPPLY\\n : _newTotalSupply;\\n\\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\\n _totalSupply.sub(nonRebasingSupply)\\n );\\n\\n require(_rebasingCreditsPerToken > 0, \\\"Invalid change in supply\\\");\\n\\n _totalSupply = _rebasingCredits\\n .divPrecisely(_rebasingCreditsPerToken)\\n .add(nonRebasingSupply);\\n\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n }\\n}\\n\",\"keccak256\":\"0x2dc66b1ba02716d64eb47dd9117fda62650d8b57669e6c351437e0ad29ad5f19\",\"license\":\"MIT\"},\"contracts/utils/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IBasicToken } from \\\"../interfaces/IBasicToken.sol\\\";\\n\\nlibrary Helpers {\\n /**\\n * @notice Fetch the `symbol()` from an ERC20 token\\n * @dev Grabs the `symbol()` from a contract\\n * @param _token Address of the ERC20 token\\n * @return string Symbol of the ERC20 token\\n */\\n function getSymbol(address _token) internal view returns (string memory) {\\n string memory symbol = IBasicToken(_token).symbol();\\n return symbol;\\n }\\n\\n /**\\n * @notice Fetch the `decimals()` from an ERC20 token\\n * @dev Grabs the `decimals()` from a contract and fails if\\n * the decimal value does not live within a certain range\\n * @param _token Address of the ERC20 token\\n * @return uint256 Decimals of the ERC20 token\\n */\\n function getDecimals(address _token) internal view returns (uint256) {\\n uint256 decimals = IBasicToken(_token).decimals();\\n require(\\n decimals >= 4 && decimals <= 18,\\n \\\"Token must have sufficient decimal places\\\"\\n );\\n\\n return decimals;\\n }\\n}\\n\",\"keccak256\":\"0x108b7a69e0140da0072ca18f90a03a3340574400f81aa6076cd2cccdf13699c2\",\"license\":\"MIT\"},\"contracts/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract any contracts that need to initialize state after deployment.\\n * @author Origin Protocol Inc\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(\\n initializing || !initialized,\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n\\n bool isTopLevelCall = !initializing;\\n if (isTopLevelCall) {\\n initializing = true;\\n initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n initializing = false;\\n }\\n }\\n\\n uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0xaadbcc138114afed4af4f353c2ced2916e6ee14be91434789187f192caf0d786\",\"license\":\"MIT\"},\"contracts/utils/InitializableAbstractStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract for vault strategies.\\n * @author Origin Protocol Inc\\n */\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { IVault } from \\\"../interfaces/IVault.sol\\\";\\n\\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event PTokenAdded(address indexed _asset, address _pToken);\\n event PTokenRemoved(address indexed _asset, address _pToken);\\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\\n event RewardTokenCollected(\\n address recipient,\\n address rewardToken,\\n uint256 amount\\n );\\n event RewardTokenAddressesUpdated(\\n address[] _oldAddresses,\\n address[] _newAddresses\\n );\\n event HarvesterAddressesUpdated(\\n address _oldHarvesterAddress,\\n address _newHarvesterAddress\\n );\\n\\n /// @notice Address of the underlying platform\\n address public immutable platformAddress;\\n /// @notice Address of the OToken vault\\n address public immutable vaultAddress;\\n\\n /// @dev Replaced with an immutable variable\\n // slither-disable-next-line constable-states\\n address private _deprecated_platformAddress;\\n\\n /// @dev Replaced with an immutable\\n // slither-disable-next-line constable-states\\n address private _deprecated_vaultAddress;\\n\\n /// @notice asset => pToken (Platform Specific Token Address)\\n mapping(address => address) public assetToPToken;\\n\\n /// @notice Full list of all assets supported by the strategy\\n address[] internal assetsMapped;\\n\\n // Deprecated: Reward token address\\n // slither-disable-next-line constable-states\\n address private _deprecated_rewardTokenAddress;\\n\\n // Deprecated: now resides in Harvester's rewardTokenConfigs\\n // slither-disable-next-line constable-states\\n uint256 private _deprecated_rewardLiquidationThreshold;\\n\\n /// @notice Address of the Harvester contract allowed to collect reward tokens\\n address public harvesterAddress;\\n\\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\\n address[] public rewardTokenAddresses;\\n\\n /* Reserved for future expansion. Used to be 100 storage slots\\n * and has decreased to accommodate:\\n * - harvesterAddress\\n * - rewardTokenAddresses\\n */\\n int256[98] private _reserved;\\n\\n struct BaseStrategyConfig {\\n address platformAddress; // Address of the underlying platform\\n address vaultAddress; // Address of the OToken's Vault\\n }\\n\\n /**\\n * @param _config The platform and OToken vault addresses\\n */\\n constructor(BaseStrategyConfig memory _config) {\\n platformAddress = _config.platformAddress;\\n vaultAddress = _config.vaultAddress;\\n }\\n\\n /**\\n * @dev Internal initialize function, to set up initial internal state\\n * @param _rewardTokenAddresses Address of reward token for platform\\n * @param _assets Addresses of initial supported assets\\n * @param _pTokens Platform Token corresponding addresses\\n */\\n function _initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) internal {\\n rewardTokenAddresses = _rewardTokenAddresses;\\n\\n uint256 assetCount = _assets.length;\\n require(assetCount == _pTokens.length, \\\"Invalid input arrays\\\");\\n for (uint256 i = 0; i < assetCount; ++i) {\\n _setPTokenAddress(_assets[i], _pTokens[i]);\\n }\\n }\\n\\n /**\\n * @notice Collect accumulated reward token and send to Vault.\\n */\\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\\n _collectRewardTokens();\\n }\\n\\n /**\\n * @dev Default implementation that transfers reward tokens to the Harvester\\n * Implementing strategies need to add custom logic to collect the rewards.\\n */\\n function _collectRewardTokens() internal virtual {\\n uint256 rewardTokenCount = rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\\n uint256 balance = rewardToken.balanceOf(address(this));\\n if (balance > 0) {\\n emit RewardTokenCollected(\\n harvesterAddress,\\n address(rewardToken),\\n balance\\n );\\n rewardToken.safeTransfer(harvesterAddress, balance);\\n }\\n }\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault.\\n */\\n modifier onlyVault() {\\n require(msg.sender == vaultAddress, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Harvester.\\n */\\n modifier onlyHarvester() {\\n require(msg.sender == harvesterAddress, \\\"Caller is not the Harvester\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault or Governor.\\n */\\n modifier onlyVaultOrGovernor() {\\n require(\\n msg.sender == vaultAddress || msg.sender == governor(),\\n \\\"Caller is not the Vault or Governor\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\\n */\\n modifier onlyVaultOrGovernorOrStrategist() {\\n require(\\n msg.sender == vaultAddress ||\\n msg.sender == governor() ||\\n msg.sender == IVault(vaultAddress).strategistAddr(),\\n \\\"Caller is not the Vault, Governor, or Strategist\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\\n * @param _rewardTokenAddresses Array of reward token addresses\\n */\\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\\n external\\n onlyGovernor\\n {\\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n require(\\n _rewardTokenAddresses[i] != address(0),\\n \\\"Can not set an empty address as a reward token\\\"\\n );\\n }\\n\\n emit RewardTokenAddressesUpdated(\\n rewardTokenAddresses,\\n _rewardTokenAddresses\\n );\\n rewardTokenAddresses = _rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Get the reward token addresses.\\n * @return address[] the reward token addresses.\\n */\\n function getRewardTokenAddresses()\\n external\\n view\\n returns (address[] memory)\\n {\\n return rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * This method can only be called by the system Governor\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function setPTokenAddress(address _asset, address _pToken)\\n external\\n virtual\\n onlyGovernor\\n {\\n _setPTokenAddress(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Remove a supported asset by passing its index.\\n * This method can only be called by the system Governor\\n * @param _assetIndex Index of the asset to be removed\\n */\\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\\n require(_assetIndex < assetsMapped.length, \\\"Invalid index\\\");\\n address asset = assetsMapped[_assetIndex];\\n address pToken = assetToPToken[asset];\\n\\n if (_assetIndex < assetsMapped.length - 1) {\\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\\n }\\n assetsMapped.pop();\\n assetToPToken[asset] = address(0);\\n\\n emit PTokenRemoved(asset, pToken);\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * Add to internal mappings and execute the platform specific,\\n * abstract method `_abstractSetPToken`\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function _setPTokenAddress(address _asset, address _pToken) internal {\\n require(assetToPToken[_asset] == address(0), \\\"pToken already set\\\");\\n require(\\n _asset != address(0) && _pToken != address(0),\\n \\\"Invalid addresses\\\"\\n );\\n\\n assetToPToken[_asset] = _pToken;\\n assetsMapped.push(_asset);\\n\\n emit PTokenAdded(_asset, _pToken);\\n\\n _abstractSetPToken(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\\n * strategy contracts, i.e. mistaken sends.\\n * @param _asset Address for the asset\\n * @param _amount Amount of the asset to transfer\\n */\\n function transferToken(address _asset, uint256 _amount)\\n public\\n onlyGovernor\\n {\\n require(!supportsAsset(_asset), \\\"Cannot transfer supported asset\\\");\\n IERC20(_asset).safeTransfer(governor(), _amount);\\n }\\n\\n /**\\n * @notice Set the Harvester contract that can collect rewards.\\n * @param _harvesterAddress Address of the harvester contract.\\n */\\n function setHarvesterAddress(address _harvesterAddress)\\n external\\n onlyGovernor\\n {\\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\\n harvesterAddress = _harvesterAddress;\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address _pToken)\\n internal\\n virtual;\\n\\n function safeApproveAllTokens() external virtual;\\n\\n /**\\n * @notice Deposit an amount of assets into the platform\\n * @param _asset Address for the asset\\n * @param _amount Units of asset to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external virtual;\\n\\n /**\\n * @notice Deposit all supported assets in this strategy contract to the platform\\n */\\n function depositAll() external virtual;\\n\\n /**\\n * @notice Withdraw an `amount` of assets from the platform and\\n * send to the `_recipient`.\\n * @param _recipient Address to which the asset should be sent\\n * @param _asset Address of the asset\\n * @param _amount Units of asset to withdraw\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external virtual;\\n\\n /**\\n * @notice Withdraw all supported assets from platform and\\n * sends to the OToken's Vault.\\n */\\n function withdrawAll() external virtual;\\n\\n /**\\n * @notice Get the total asset value held in the platform.\\n * This includes any interest that was generated since depositing.\\n * @param _asset Address of the asset\\n * @return balance Total value of the asset in the platform\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n virtual\\n returns (uint256 balance);\\n\\n /**\\n * @notice Check if an asset is supported.\\n * @param _asset Address of the asset\\n * @return bool Whether asset is supported\\n */\\n function supportsAsset(address _asset) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x5e17bb3db9f9e1014b7c5c836547f8fa81e02af7568c0bb8f2a2e0e7c2192db4\",\"license\":\"MIT\"},\"contracts/utils/InitializableERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/**\\n * @dev Optional functions from the ERC20 standard.\\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\\n * @author Origin Protocol Inc\\n */\\nabstract contract InitializableERC20Detailed is IERC20 {\\n // Storage gap to skip storage from prior to OUSD reset\\n uint256[100] private _____gap;\\n\\n string private _name;\\n string private _symbol;\\n uint8 private _decimals;\\n\\n /**\\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\\n * these values are immutable: they can only be set once during\\n * construction.\\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\\n */\\n function _initialize(\\n string memory nameArg,\\n string memory symbolArg,\\n uint8 decimalsArg\\n ) internal {\\n _name = nameArg;\\n _symbol = symbolArg;\\n _decimals = decimalsArg;\\n }\\n\\n /**\\n * @notice Returns the name of the token.\\n */\\n function name() public view returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @notice Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @notice Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view returns (uint8) {\\n return _decimals;\\n }\\n}\\n\",\"keccak256\":\"0xe35ac2d813a30d845a3b52bba72588d7e936c2b3f3373d15568c14db46aeed60\",\"license\":\"MIT\"},\"contracts/utils/StableMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n// Based on StableMath from Stability Labs Pty. Ltd.\\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\\n\\nlibrary StableMath {\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Scaling unit for use in specific calculations,\\n * where 1 * 10**18, or 1e18 represents a unit '1'\\n */\\n uint256 private constant FULL_SCALE = 1e18;\\n\\n /***************************************\\n Helpers\\n ****************************************/\\n\\n /**\\n * @dev Adjust the scale of an integer\\n * @param to Decimals to scale to\\n * @param from Decimals to scale from\\n */\\n function scaleBy(\\n uint256 x,\\n uint256 to,\\n uint256 from\\n ) internal pure returns (uint256) {\\n if (to > from) {\\n x = x.mul(10**(to - from));\\n } else if (to < from) {\\n // slither-disable-next-line divide-before-multiply\\n x = x.div(10**(from - to));\\n }\\n return x;\\n }\\n\\n /***************************************\\n Precise Arithmetic\\n ****************************************/\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\\n return mulTruncateScale(x, y, FULL_SCALE);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @param scale Scale unit\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncateScale(\\n uint256 x,\\n uint256 y,\\n uint256 scale\\n ) internal pure returns (uint256) {\\n // e.g. assume scale = fullScale\\n // z = 10e18 * 9e17 = 9e36\\n uint256 z = x.mul(y);\\n // return 9e36 / 1e18 = 9e18\\n return z.div(scale);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit, rounded up to the closest base unit.\\n */\\n function mulTruncateCeil(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e17 * 17268172638 = 138145381104e17\\n uint256 scaled = x.mul(y);\\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\\n return ceil.div(FULL_SCALE);\\n }\\n\\n /**\\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\\n * @param x Left hand input to division\\n * @param y Right hand input to division\\n * @return Result after multiplying the left operand by the scale, and\\n * executing the division on the right hand input.\\n */\\n function divPrecisely(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e18 * 1e18 = 8e36\\n uint256 z = x.mul(FULL_SCALE);\\n // e.g. 8e36 / 10e18 = 8e17\\n return z.div(y);\\n }\\n}\\n\",\"keccak256\":\"0x1eb49f6f79045d9e0a8e1dced8e01d9e559e5fac554dcbb53e43140b601b04e7\",\"license\":\"MIT\"},\"contracts/vault/VaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OToken VaultStorage contract\\n * @notice The VaultStorage contract defines the storage for the Vault contracts\\n * @author Origin Protocol Inc\\n */\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { IStrategy } from \\\"../interfaces/IStrategy.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { OUSD } from \\\"../token/OUSD.sol\\\";\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport \\\"../utils/Helpers.sol\\\";\\n\\ncontract VaultStorage is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event AssetSupported(address _asset);\\n event AssetRemoved(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Assets supported by the Vault, i.e. Stablecoins\\n enum UnitConversion {\\n DECIMALS,\\n GETEXCHANGERATE\\n }\\n // Changed to fit into a single storage slot so the decimals needs to be recached\\n struct Asset {\\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\\n // redeeming or checking balance of assets.\\n bool isSupported;\\n UnitConversion unitConversion;\\n uint8 decimals;\\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\\n // For example 40 == 0.4% slippage\\n uint16 allowedOracleSlippageBps;\\n }\\n\\n /// @dev mapping of supported vault assets to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Asset) internal assets;\\n /// @dev list of all assets supported by the vault.\\n // slither-disable-next-line uninitialized-state\\n address[] internal allAssets;\\n\\n // Strategies approved for use by the Vault\\n struct Strategy {\\n bool isSupported;\\n uint256 _deprecated; // Deprecated storage slot\\n }\\n /// @dev mapping of strategy contracts to their configiration\\n mapping(address => Strategy) internal strategies;\\n /// @dev list of all vault strategies\\n address[] internal allStrategies;\\n\\n /// @notice Address of the Oracle price provider contract\\n // slither-disable-next-line uninitialized-state\\n address public priceProvider;\\n /// @notice pause rebasing if true\\n bool public rebasePaused = false;\\n /// @notice pause operations that change the OToken supply.\\n /// eg mint, redeem, allocate, mint/burn for strategy\\n bool public capitalPaused = true;\\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\\n uint256 public redeemFeeBps;\\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\\n uint256 public vaultBuffer;\\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\\n uint256 public autoAllocateThreshold;\\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\\n uint256 public rebaseThreshold;\\n\\n /// @dev Address of the OToken token. eg OUSD or OETH.\\n // slither-disable-next-line uninitialized-state\\n OUSD internal oUSD;\\n\\n //keccak256(\\\"OUSD.vault.governor.admin.impl\\\");\\n bytes32 constant adminImplPosition =\\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\\n\\n // Address of the contract responsible for post rebase syncs with AMMs\\n address private _deprecated_rebaseHooksAddr = address(0);\\n\\n // Deprecated: Address of Uniswap\\n // slither-disable-next-line constable-states\\n address private _deprecated_uniswapAddr = address(0);\\n\\n /// @notice Address of the Strategist\\n address public strategistAddr = address(0);\\n\\n /// @notice Mapping of asset address to the Strategy that they should automatically\\n // be allocated to\\n // slither-disable-next-line uninitialized-state\\n mapping(address => address) public assetDefaultStrategies;\\n\\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\\n // slither-disable-next-line uninitialized-state\\n uint256 public maxSupplyDiff;\\n\\n /// @notice Trustee contract that can collect a percentage of yield\\n address public trusteeAddress;\\n\\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\\n uint256 public trusteeFeeBps;\\n\\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\\n address[] private _deprecated_swapTokens;\\n\\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\\n\\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\\n address public ousdMetaStrategy = address(0);\\n\\n /// @notice How much OTokens are currently minted by the strategy\\n int256 public netOusdMintedForStrategy = 0;\\n\\n /// @notice How much net total OTokens are allowed to be minted by all strategies\\n uint256 public netOusdMintForStrategyThreshold = 0;\\n\\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\\n\\n /// @notice Collateral swap configuration.\\n /// @dev is packed into a single storage slot to save gas.\\n struct SwapConfig {\\n // Contract that swaps the vault's collateral assets\\n address swapper;\\n // Max allowed percentage the total value can drop below the total supply in basis points.\\n // For example 100 == 1%\\n uint16 allowedUndervalueBps;\\n }\\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\\n\\n // For future use\\n uint256[50] private __gap;\\n\\n /**\\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\\n * @param newImpl address of the implementation\\n */\\n function setAdminImpl(address newImpl) external onlyGovernor {\\n require(\\n Address.isContract(newImpl),\\n \\\"new implementation is not a contract\\\"\\n );\\n bytes32 position = adminImplPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newImpl)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcbdb87104749e20c8411bc2acbfa0b7d48e876e3f4e1c46c9a7b00fcdb9722d9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6101a06040523480156200001257600080fd5b506040516200523638038062005236833981016040819052620000359162000144565b86868860200151838787848484848462000055336200011460201b60201c565b60008051602062005216833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36033805460ff191690556001600160601b0319606095861b811660805292851b831660a05290841b821660c05291831b811660e052610100919091528751821b811661012052602090970151811b8716610140529a8b1b86166101605250505050509190941b1661018052506200022b9350505050565b6000805160206200521683398151915255565b80516001600160a01b03811681146200013f57600080fd5b919050565b60008060008060008060008789036101008112156200016257600080fd5b60408112156200017157600080fd5b50604080519081016001600160401b0381118282101715620001a357634e487b7160e01b600052604160045260246000fd5b604052620001b18962000127565b8152620001c160208a0162000127565b60208201529650620001d66040890162000127565b9550620001e66060890162000127565b9450620001f66080890162000127565b935060a088015192506200020d60c0890162000127565b91506200021d60e0890162000127565b905092959891949750929550565b60805160601c60a05160601c60c05160601c60e05160601c610100516101205160601c6101405160601c6101605160601c6101805160601c614e35620003e16000396000818161039501528181610b33015261330701526000818161068b015261278a01526000818161053f01528181610f4701528181611bfb01528181611d7401528181612b430152612d9401526000610aff01526000818161074b01526114f901526000818161087a01528181610d0f01528181611b2901528181611dc401528181612188015281816138f30152613b4d015260008181610bbd01528181610de501528181611a2f0152818161275a015281816129000152612cbe015260008181610a5401526117740152600081816103c7015281816105e90152818161096b01528181610c7601528181610fbc01528181611200015281816112880152818161142f015281816115f701528181611ce501528181611d9501528181612102015281816121b701528181612e1f01528181612ec70152818161340c0152818161349101528181613505015281816137a20152818161386d0152818161392201528181613ac70152613b7c0152614e356000f3fe6080604052600436106103855760003560e01c8063853828b6116101d1578063c7af335211610102578063dbe55e56116100a0578063e75292391161006f578063e752923914610b80578063ee7afe2d14610b96578063f1188e4014610bab578063f6ca71b014610bdf57600080fd5b8063dbe55e5614610aed578063dd505df614610b21578063de34d71314610b55578063de5f626814610b6b57600080fd5b8063d059f6ef116100dc578063d059f6ef14610a76578063d38bfff414610a8d578063d9caed1214610aad578063d9f00ec714610acd57600080fd5b8063c7af335214610a10578063c98517c514610a25578063cceab75014610a4257600080fd5b8063a3b81e731161016f578063ab12edf511610149578063ab12edf51461099b578063ad1728cb146109bb578063bb1b918d146109d0578063c2e1e3f4146109f057600080fd5b8063a3b81e7314610919578063a4f98af414610939578063aa388af61461094e57600080fd5b80639092c31c116101ab5780639092c31c146108685780639136616a1461089c57806396d538bb146108bc5780639da0e462146108dc57600080fd5b8063853828b61461080e57806387bae867146108235780638d7c0e461461084857600080fd5b80635d36b190116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107ad5780637b8962f7146107cd578063842f5c46146107e35780638456cb59146107f957600080fd5b80636ef3879514610719578063714897df1461073957806371a735f31461076d5780637260f8261461078d57600080fd5b8063630923831161029057806363092383146106ad57806366e3667e146106c357806367c7066c146106d95780636e811d38146106f957600080fd5b80635d36b190146106445780635f515226146106595780636093d3801461067957600080fd5b8063435356d1116103235780635205c380116102fd5780635205c380146105b7578063579a7e1a146105d75780635a063f631461060b5780635c975abb1461062057600080fd5b8063435356d11461056157806347e7ef2414610581578063484be812146105a157600080fd5b80631072cbea1161035f5780631072cbea146104c957806322495dc8146104e95780633c86495914610509578063430bf08a1461052d57600080fd5b80630c340a24146104415780630ed57b3a146104735780630fc3b4c41461049357600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f657468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b5061043a61048e3660046141d8565b610c1e565b34801561049f57600080fd5b506104566104ae36600461419e565b609f602052600090815260409020546001600160a01b031681565b3480156104d557600080fd5b5061043a6104e4366004614252565b610c50565b3480156104f557600080fd5b5061043a610504366004614346565b610d0d565b34801561051557600080fd5b5061051f60695481565b60405190815260200161046a565b34801561053957600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561056d57600080fd5b5061043a61057c3660046142bf565b610e57565b34801561058d57600080fd5b5061043a61059c366004614252565b610f3c565b3480156105ad57600080fd5b5061051f606a5481565b3480156105c357600080fd5b5061043a6105d236600461441c565b61105b565b3480156105e357600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561061757600080fd5b5061043a6110b7565b34801561062c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561065057600080fd5b5061043a611156565b34801561066557600080fd5b5061051f61067436600461419e565b6111fc565b34801561068557600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156106b957600080fd5b5061051f611c2081565b3480156106cf57600080fd5b5061051f60345481565b3480156106e557600080fd5b5060a354610456906001600160a01b031681565b34801561070557600080fd5b5061043a61071436600461419e565b611330565b34801561072557600080fd5b5061043a61073436600461427e565b6113b0565b34801561074557600080fd5b5061051f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077957600080fd5b5061043a610788366004614554565b61193b565b34801561079957600080fd5b50603654610456906001600160a01b031681565b3480156107b957600080fd5b506104566107c836600461441c565b611afd565b3480156107d957600080fd5b5061051f60375481565b3480156107ef57600080fd5b5061051f60685481565b34801561080557600080fd5b5061043a611b27565b34801561081a57600080fd5b5061043a611bf0565b34801561082f57600080fd5b506033546104569061010090046001600160a01b031681565b34801561085457600080fd5b5061043a6108633660046145d5565b611dc2565b34801561087457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a857600080fd5b5061043a6108b736600461441c565b612297565b3480156108c857600080fd5b5061043a6108d736600461427e565b612462565b3480156108e857600080fd5b5061090c6108f736600461441c565b60356020526000908152604090205460ff1681565b60405161046a9190614a40565b34801561092557600080fd5b5061043a61093436600461419e565b612582565b34801561094557600080fd5b506106346125fc565b34801561095a57600080fd5b5061063461096936600461419e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109a757600080fd5b5061043a6109b636600461461a565b61265b565b3480156109c757600080fd5b5061043a612743565b3480156109dc57600080fd5b5061043a6109eb3660046144a0565b612809565b3480156109fc57600080fd5b5061043a610a0b36600461419e565b6129d6565b348015610a1c57600080fd5b50610634612a63565b348015610a3157600080fd5b5061051f6801bc16d674ec80000081565b348015610a4e57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a8257600080fd5b5061051f6101075481565b348015610a9957600080fd5b5061043a610aa836600461419e565b612a94565b348015610ab957600080fd5b5061043a610ac8366004614211565b612b38565b348015610ad957600080fd5b5061043a610ae8366004614435565b612bcb565b348015610af957600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b5061051f60385481565b348015610b7757600080fd5b5061043a612d89565b348015610b8c57600080fd5b5061051f606b5481565b348015610ba257600080fd5b5061043a612ef6565b348015610bb757600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610beb57600080fd5b50610bf4612f80565b60405161046a9190614816565b6000610c19600080516020614de08339815191525490565b905090565b610c26612a63565b610c425760405162461bcd60e51b815260040161043190614ab2565b610c4c8282612fe2565b5050565b610c58612a63565b610c745760405162461bcd60e51b815260040161043190614ab2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b0384169083613141565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e91906141bb565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614b72565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e20903090879087908790600401614766565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612a63565b610e7b5760405162461bcd60e51b815260040161043190614ab2565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613193565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614a7b565b600080516020614dc083398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614b4a565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461102f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b6044820152606401610431565b8261010760008282546110429190614c99565b909155506110529050848461324e565b50600190555050565b611063612a63565b61107f5760405162461bcd60e51b815260040161043190614ab2565b6040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a1603755565b60a3546001600160a01b031633146111115760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614dc0833981519152805460028114156111435760405162461bcd60e51b815260040161043190614b4a565b6002825561114f6132e0565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146111f15760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b6111fa3361352e565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146112735760405162461bcd60e51b8152602060048201526011602482015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b6044820152606401610431565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156112d257600080fd5b505afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a9190614601565b603454611320906801bc16d674ec800000614cb1565b61132a9190614c99565b92915050565b611338612a63565b6113545760405162461bcd60e51b815260040161043190614ab2565b6040516001600160a01b038216907f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a2603380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60335461010090046001600160a01b031633146113df5760405162461bcd60e51b815260040161043190614b13565b60335460ff16156114025760405162461bcd60e51b815260040161043190614ae9565b6000611417826801bc16d674ec800000614cb1565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b19190614601565b8111156114f45760405162461bcd60e51b81526020600482015260116024820152700d2dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f000000000000000000000000000000000000000000000000000000000000000090611524908490614c99565b111561156b5760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b6037548160385461157c9190614c99565b11156115ca5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546115dc9190614c99565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561164357600080fd5b505af1158015611657573d6000803e3d6000fd5b50505050611664816135ef565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c830152910160408051601f1981840301815291905290508260005b8181101561191c5760008686838181106116c7576116c7614d70565b90506020028101906116d99190614bef565b6116e39080614ba9565b6040516116f192919061473a565b604080519182900390912060008181526035602052919091205490915060ff16600181600481111561172557611725614d44565b146117725760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a878181106117bd576117bd614d70565b90506020028101906117cf9190614bef565b6117d99080614ba9565b898d8d8a8181106117ec576117ec614d70565b90506020028101906117fe9190614bef565b61180c906020810190614ba9565b8f8f8c81811061181e5761181e614d70565b90506020028101906118309190614bef565b604001356040518863ffffffff1660e01b8152600401611855969594939291906149c5565b6000604051808303818588803b15801561186e57600080fd5b505af1158015611882573d6000803e3d6000fd5b5050505050817fd44c8fde6d369f70d395b6cdee4641886d11e3a72cb537696ca04134881692ed8989868181106118bb576118bb614d70565b90506020028101906118cd9190614bef565b6118d79080614ba9565b6801bc16d674ec800000896040516118f29493929190614a14565b60405180910390a2506000908152603560205260409020805460ff191660021790556001016116ab565b50806034600082825461192f9190614c99565b90915550505050505050565b60335461010090046001600160a01b0316331461196a5760405162461bcd60e51b815260040161043190614b13565b60335460ff161561198d5760405162461bcd60e51b815260040161043190614ae9565b6000858560405161199f92919061473a565b604080519182900390912060008181526035602052919091205490915060ff1660038160048111156119d3576119d3614d44565b14611a185760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611a6c908a908a908a908a908a90600401614984565b600060405180830381600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b50505050817f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc288888888604051611ad494939291906148fb565b60405180910390a2506000908152603560205260409020805460ff191660041790555050505050565b60a48181548110611b0d57600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8057600080fd5b505afa158015611b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb891906141bb565b6001600160a01b0316336001600160a01b031614611be85760405162461bcd60e51b815260040161043190614b72565b6111fa61361c565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611c3f5750611c2a610c01565b6001600160a01b0316336001600160a01b0316145b611c975760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614dc083398151915280546002811415611cc95760405162461bcd60e51b815260040161043190614b4a565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611d2f57600080fd5b505afa158015611d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d679190614601565b90508015611dba57611dba7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083613691565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1b57600080fd5b505afa158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5391906141bb565b6001600160a01b0316336001600160a01b031614611e835760405162461bcd60e51b815260040161043190614b72565b60335460ff16611ecc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b43611c20606b54611edd9190614c99565b10611f385760405162461bcd60e51b815260206004820152602560248201527f6d616e75616c6c794669784163636f756e74696e672063616c6c656420746f6f6044820152641039b7b7b760d91b6064820152608401610431565b6002198312158015611f4b575060038313155b8015611f655750600083603454611f629190614c58565b12155b611fb15760405162461bcd60e51b815260206004820152601760248201527f696e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff198212158015611fd457506811ff6cf0fd15b000008213155b8015611fee5750600082606854611feb9190614c58565b12155b61203a5760405162461bcd60e51b815260206004820152601d60248201527f696e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008111156120935760405162461bcd60e51b815260206004820152601960248201527f696e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b60408051848152602081018490529081018290527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a1826034546120e29190614c58565b6034556068546120f3908390614c58565b60685543606b558015612241577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561215b57600080fd5b505af115801561216f573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b1580156121ff57600080fd5b505af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906143ff565b5061224181613789565b61224b60006137f1565b61228a5760405162461bcd60e51b815260206004820152601060248201526f333ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b612292613c70565b505050565b61229f612a63565b6122bb5760405162461bcd60e51b815260040161043190614ab2565b60a05481106122fc5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a0828154811061231157612311614d70565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061234e90600190614cd0565b8310156123d05760a0805461236590600190614cd0565b8154811061237557612375614d70565b60009182526020909120015460a080546001600160a01b0390921691859081106123a1576123a1614d70565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a08054806123e1576123e1614d5a565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c910160405180910390a2505050565b61246a612a63565b6124865760405162461bcd60e51b815260040161043190614ab2565b8060005b818110156125395760008484838181106124a6576124a6614d70565b90506020020160208101906124bb919061419e565b6001600160a01b031614156125295760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b61253281614d13565b905061248a565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161256e93929190614863565b60405180910390a1610f3660a48484613ef7565b61258a612a63565b6125a65760405162461bcd60e51b815260040161043190614ab2565b6040516001600160a01b038216907f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a2603680546001600160a01b0319166001600160a01b0392909216919091179055565b60335460009061010090046001600160a01b0316331461262e5760405162461bcd60e51b815260040161043190614b13565b60335460ff16156126515760405162461bcd60e51b815260040161043190614ae9565b610c1960016137f1565b612663612a63565b61267f5760405162461bcd60e51b815260040161043190614ab2565b808210801561269657506801bc16d674ec80000081105b80156126b35750673782dace9d9000006126b08383614cd0565b10155b6126ff5760405162461bcd60e51b815260206004820152601760248201527f696e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b60408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a910160405180910390a1606991909155606a55565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b1580156127ce57600080fd5b505af11580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906143ff565b50565b60335461010090046001600160a01b031633146128385760405162461bcd60e51b815260040161043190614b13565b60335460ff161561285b5760405162461bcd60e51b815260040161043190614ae9565b6000888860405161286d92919061473a565b60405190819003902090506000808281526035602052604090205460ff16600481111561289c5761289c614d44565b146128e95760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6040516301ba3ee760e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906306e8fb9c90612943908c908c908c908c908c908c908c908c90600401614922565b600060405180830381600087803b15801561295d57600080fd5b505af1158015612971573d6000803e3d6000fd5b50505050807facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238a8a8a8a6040516129ab94939291906148fb565b60405180910390a26000908152603560205260409020805460ff191660011790555050505050505050565b6129de612a63565b6129fa5760405162461bcd60e51b815260040161043190614ab2565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a7b600080516020614de08339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612a9c612a63565b612ab85760405162461bcd60e51b815260040161043190614ab2565b612ae0817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612b00600080516020614de08339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b805760405162461bcd60e51b815260040161043190614a7b565b600080516020614dc083398151915280546002811415612bb25760405162461bcd60e51b815260040161043190614b4a565b60028255612bc1858585613691565b5060019055505050565b60335461010090046001600160a01b03163314612bfa5760405162461bcd60e51b815260040161043190614b13565b60335460ff1615612c1d5760405162461bcd60e51b815260040161043190614ae9565b60008484604051612c2f92919061473a565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612c6357612c63614d44565b14612ca75760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612cf99089908990899089906004016148fb565b600060405180830381600087803b158015612d1357600080fd5b505af1158015612d27573d6000803e3d6000fd5b50505050817f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d87878787604051612d6194939291906148fb565b60405180910390a2506000908152603560205260409020805460ff1916600317905550505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612dd15760405162461bcd60e51b815260040161043190614a7b565b600080516020614dc083398151915280546002811415612e035760405162461bcd60e51b815260040161043190614b4a565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612e6957600080fd5b505afa158015612e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea19190614601565b905060006101075482612eb49190614cd0565b90508015612eec57610107829055612eec7f00000000000000000000000000000000000000000000000000000000000000008261324e565b5050600182555050565b6036546001600160a01b03163314612f505760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b6040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f11090600090a16000603855565b606060a4805480602002602001604051908101604052809291908181526020018280548015612fd857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612fba575b5050505050905090565b6001600160a01b038281166000908152609f6020526040902054161561303f5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b0382161580159061305f57506001600160a01b03811615155b61309f5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612292908490613cea565b82516131a69060a4906020860190613f5a565b508151815181146131f05760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156132475761323784828151811061321057613210614d70565b602002602001015184838151811061322a5761322a614d70565b6020026020010151612fe2565b61324081614d13565b90506131f3565b5050505050565b600081116132975760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156133035760405162461bcd60e51b815260040161043190614ae9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561336057600080fd5b505af1158015613374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133989190614601565b90506000606854826133aa9190614c99565b9050804710156133fc5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561346557600080fd5b505af1158015613479573d6000803e3d6000fd5b505060a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018590527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c72353935060600191506134ec9050565b60405180910390a160a354610c4c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683613141565b6001600160a01b0381166135845760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b03166135a4600080516020614de08339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a361280681600080516020614de083398151915255565b60006135fe8261010754613dbc565b90508061010760008282546136139190614cd0565b90915550505050565b60335460ff161561363f5760405162461bcd60e51b815260040161043190614ae9565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586136743390565b6040516001600160a01b03909116815260200160405180910390a1565b600081116136e15760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166137305760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a26122926001600160a01b0383168483613141565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156138065761132a82613dd4565b6000606854476138169190614cd0565b9050600191506801bc16d674ec80000081106139f35760006801bc16d674ec80000082049050806034600082825461384e9190614cd0565b9091555060009050613869826801bc16d674ec800000614cb1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138c657600080fd5b505af11580156138da573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561396a57600080fd5b505af115801561397e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a291906143ff565b506139ac81613789565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613a039190614cd0565b90506801bc16d674ec8000008110613a555760405162461bcd60e51b8152602060048201526015602482015274756e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613a61575050919050565b606954811015613abb578060686000828254613a7d9190614c99565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613c69565b606a54811115613c58577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b2057600080fd5b505af1158015613b34573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613bc457600080fd5b505af1158015613bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfc91906143ff565b50600160346000828254613c109190614cd0565b90915550613c1f905081613789565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613aae565b613c6184613dd4565b949350505050565b5050919050565b60335460ff16613cb95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613674565b6000613d3f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613dec9092919063ffffffff16565b8051909150156122925780806020019051810190613d5d91906143ff565b6122925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613dcb5781613dcd565b825b9392505050565b60008115613de457613de461361c565b506000919050565b6060613c61848460008585843b613e455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613e61919061474a565b60006040518083038185875af1925050503d8060008114613e9e576040519150601f19603f3d011682016040523d82523d6000602084013e613ea3565b606091505b5091509150613eb3828286613ebe565b979650505050505050565b60608315613ecd575081613dcd565b825115613edd5782518084602001fd5b8160405162461bcd60e51b81526004016104319190614a68565b828054828255906000526020600020908101928215613f4a579160200282015b82811115613f4a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613f17565b50613f56929150613faf565b5090565b828054828255906000526020600020908101928215613f4a579160200282015b82811115613f4a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613f7a565b5b80821115613f565760008155600101613fb0565b60008083601f840112613fd657600080fd5b5081356001600160401b03811115613fed57600080fd5b6020830191508360208260051b850101111561400857600080fd5b9250929050565b600082601f83011261402057600080fd5b8135602061403561403083614c35565b614c05565b80838252828201915082860187848660051b890101111561405557600080fd5b60005b8581101561407d57813561406b81614d9c565b84529284019290840190600101614058565b5090979650505050505050565b60008083601f84011261409c57600080fd5b5081356001600160401b038111156140b357600080fd5b60208301915083602082850101111561400857600080fd5b600060a082840312156140dd57600080fd5b50919050565b600060a082840312156140f557600080fd5b60405160a081018181106001600160401b038211171561411757614117614d86565b6040529050806141268361416e565b815261413460208401614187565b602082015261414560408401614187565b6040820152606083013561415881614db1565b6060820152608092830135920191909152919050565b803563ffffffff8116811461418257600080fd5b919050565b80356001600160401b038116811461418257600080fd5b6000602082840312156141b057600080fd5b8135613dcd81614d9c565b6000602082840312156141cd57600080fd5b8151613dcd81614d9c565b600080604083850312156141eb57600080fd5b82356141f681614d9c565b9150602083013561420681614d9c565b809150509250929050565b60008060006060848603121561422657600080fd5b833561423181614d9c565b9250602084013561424181614d9c565b929592945050506040919091013590565b6000806040838503121561426557600080fd5b823561427081614d9c565b946020939093013593505050565b6000806020838503121561429157600080fd5b82356001600160401b038111156142a757600080fd5b6142b385828601613fc4565b90969095509350505050565b6000806000606084860312156142d457600080fd5b83356001600160401b03808211156142eb57600080fd5b6142f78783880161400f565b9450602086013591508082111561430d57600080fd5b6143198783880161400f565b9350604086013591508082111561432f57600080fd5b5061433c8682870161400f565b9150509250925092565b600080600060e0848603121561435b57600080fd5b83356001600160401b0381111561437157600080fd5b8401601f8101861361438257600080fd5b8035602061439261403083614c35565b8083825282820191508285018a848660051b88010111156143b257600080fd5b600095505b848610156143dc576143c881614187565b8352600195909501949183019183016143b7565b5096505086013593506143f69150869050604086016140e3565b90509250925092565b60006020828403121561441157600080fd5b8151613dcd81614db1565b60006020828403121561442e57600080fd5b5035919050565b6000806000806040858703121561444b57600080fd5b84356001600160401b038082111561446257600080fd5b61446e8883890161408a565b9096509450602087013591508082111561448757600080fd5b5061449487828801613fc4565b95989497509550505050565b600080600080600080600080610120898b0312156144bd57600080fd5b88356001600160401b03808211156144d457600080fd5b6144e08c838d0161408a565b909a50985060208b01359150808211156144f957600080fd5b6145058c838d01613fc4565b909850965060408b013591508082111561451e57600080fd5b5061452b8b828c0161408a565b909550935050606089013591506145458a60808b016140cb565b90509295985092959890939650565b600080600080600060e0868803121561456c57600080fd5b85356001600160401b038082111561458357600080fd5b61458f89838a0161408a565b909750955060208801359150808211156145a857600080fd5b506145b588828901613fc4565b90945092506145c9905087604088016140cb565b90509295509295909350565b6000806000606084860312156145ea57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561461357600080fd5b5051919050565b6000806040838503121561462d57600080fd5b50508035926020909101359150565b8183526000602080850194508260005b85811015614678576001600160401b0361466583614187565b168752958201959082019060010161464c565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526146c4816020860160208601614ce7565b601f01601f19169290920160200192915050565b63ffffffff6146e68261416e565b1682526146f560208201614187565b6001600160401b0380821660208501528061471260408501614187565b1660408501525050606081013561472881614db1565b15156060830152608090810135910152565b8183823760009101908152919050565b6000825161475c818460208701614ce7565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156147b95783516001600160401b031685529382019392820192600101614794565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b818110156148575783516001600160a01b031683529284019291840191600101614832565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b828110156148ad5781546001600160a01b031684529284019260019182019101614888565b505050838103828501528481528590820160005b868110156148ef5782356148d481614d9c565b6001600160a01b0316825291830191908301906001016148c1565b50979650505050505050565b60408152600061490f604083018688614683565b8281036020840152613eb381858761463c565b60006101208083526149378184018b8d614683565b9050828103602084015261494c81898b61463c565b90508281036040840152614961818789614683565b91505083606083015261497760808301846146d8565b9998505050505050505050565b60e08152600061499860e083018789614683565b82810360208401526149ab81868861463c565b9150506149bb60408301846146d8565b9695505050505050565b6080815260006149d960808301888a614683565b82810360208401526149eb81886146ac565b90508281036040840152614a00818688614683565b915050826060830152979650505050505050565b606081526000614a28606083018688614683565b8460208401528281036040840152613eb381856146ac565b6020810160058310614a6257634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613dcd60208301846146ac565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614bc057600080fd5b8301803591506001600160401b03821115614bda57600080fd5b60200191503681900382131561400857600080fd5b60008235605e1983360301811261475c57600080fd5b604051601f8201601f191681016001600160401b0381118282101715614c2d57614c2d614d86565b604052919050565b60006001600160401b03821115614c4e57614c4e614d86565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614c7a57614c7a614d2e565b600160ff1b8390038412811615614c9357614c93614d2e565b50500190565b60008219821115614cac57614cac614d2e565b500190565b6000816000190483118215151615614ccb57614ccb614d2e565b500290565b600082821015614ce257614ce2614d2e565b500390565b60005b83811015614d02578181015183820152602001614cea565b83811115610f365750506000910152565b6000600019821415614d2757614d27614d2e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461280657600080fd5b801515811461280657600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122022c067cacd1532e922314924802c9c6549951b66ed82fb2629890bc62b7b120a64736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", - "deployedBytecode": "0x6080604052600436106103855760003560e01c8063853828b6116101d1578063c7af335211610102578063dbe55e56116100a0578063e75292391161006f578063e752923914610b80578063ee7afe2d14610b96578063f1188e4014610bab578063f6ca71b014610bdf57600080fd5b8063dbe55e5614610aed578063dd505df614610b21578063de34d71314610b55578063de5f626814610b6b57600080fd5b8063d059f6ef116100dc578063d059f6ef14610a76578063d38bfff414610a8d578063d9caed1214610aad578063d9f00ec714610acd57600080fd5b8063c7af335214610a10578063c98517c514610a25578063cceab75014610a4257600080fd5b8063a3b81e731161016f578063ab12edf511610149578063ab12edf51461099b578063ad1728cb146109bb578063bb1b918d146109d0578063c2e1e3f4146109f057600080fd5b8063a3b81e7314610919578063a4f98af414610939578063aa388af61461094e57600080fd5b80639092c31c116101ab5780639092c31c146108685780639136616a1461089c57806396d538bb146108bc5780639da0e462146108dc57600080fd5b8063853828b61461080e57806387bae867146108235780638d7c0e461461084857600080fd5b80635d36b190116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107ad5780637b8962f7146107cd578063842f5c46146107e35780638456cb59146107f957600080fd5b80636ef3879514610719578063714897df1461073957806371a735f31461076d5780637260f8261461078d57600080fd5b8063630923831161029057806363092383146106ad57806366e3667e146106c357806367c7066c146106d95780636e811d38146106f957600080fd5b80635d36b190146106445780635f515226146106595780636093d3801461067957600080fd5b8063435356d1116103235780635205c380116102fd5780635205c380146105b7578063579a7e1a146105d75780635a063f631461060b5780635c975abb1461062057600080fd5b8063435356d11461056157806347e7ef2414610581578063484be812146105a157600080fd5b80631072cbea1161035f5780631072cbea146104c957806322495dc8146104e95780633c86495914610509578063430bf08a1461052d57600080fd5b80630c340a24146104415780630ed57b3a146104735780630fc3b4c41461049357600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f657468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b5061043a61048e3660046141d8565b610c1e565b34801561049f57600080fd5b506104566104ae36600461419e565b609f602052600090815260409020546001600160a01b031681565b3480156104d557600080fd5b5061043a6104e4366004614252565b610c50565b3480156104f557600080fd5b5061043a610504366004614346565b610d0d565b34801561051557600080fd5b5061051f60695481565b60405190815260200161046a565b34801561053957600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561056d57600080fd5b5061043a61057c3660046142bf565b610e57565b34801561058d57600080fd5b5061043a61059c366004614252565b610f3c565b3480156105ad57600080fd5b5061051f606a5481565b3480156105c357600080fd5b5061043a6105d236600461441c565b61105b565b3480156105e357600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561061757600080fd5b5061043a6110b7565b34801561062c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561065057600080fd5b5061043a611156565b34801561066557600080fd5b5061051f61067436600461419e565b6111fc565b34801561068557600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156106b957600080fd5b5061051f611c2081565b3480156106cf57600080fd5b5061051f60345481565b3480156106e557600080fd5b5060a354610456906001600160a01b031681565b34801561070557600080fd5b5061043a61071436600461419e565b611330565b34801561072557600080fd5b5061043a61073436600461427e565b6113b0565b34801561074557600080fd5b5061051f7f000000000000000000000000000000000000000000000000000000000000000081565b34801561077957600080fd5b5061043a610788366004614554565b61193b565b34801561079957600080fd5b50603654610456906001600160a01b031681565b3480156107b957600080fd5b506104566107c836600461441c565b611afd565b3480156107d957600080fd5b5061051f60375481565b3480156107ef57600080fd5b5061051f60685481565b34801561080557600080fd5b5061043a611b27565b34801561081a57600080fd5b5061043a611bf0565b34801561082f57600080fd5b506033546104569061010090046001600160a01b031681565b34801561085457600080fd5b5061043a6108633660046145d5565b611dc2565b34801561087457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108a857600080fd5b5061043a6108b736600461441c565b612297565b3480156108c857600080fd5b5061043a6108d736600461427e565b612462565b3480156108e857600080fd5b5061090c6108f736600461441c565b60356020526000908152604090205460ff1681565b60405161046a9190614a40565b34801561092557600080fd5b5061043a61093436600461419e565b612582565b34801561094557600080fd5b506106346125fc565b34801561095a57600080fd5b5061063461096936600461419e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109a757600080fd5b5061043a6109b636600461461a565b61265b565b3480156109c757600080fd5b5061043a612743565b3480156109dc57600080fd5b5061043a6109eb3660046144a0565b612809565b3480156109fc57600080fd5b5061043a610a0b36600461419e565b6129d6565b348015610a1c57600080fd5b50610634612a63565b348015610a3157600080fd5b5061051f6801bc16d674ec80000081565b348015610a4e57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a8257600080fd5b5061051f6101075481565b348015610a9957600080fd5b5061043a610aa836600461419e565b612a94565b348015610ab957600080fd5b5061043a610ac8366004614211565b612b38565b348015610ad957600080fd5b5061043a610ae8366004614435565b612bcb565b348015610af957600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b5061051f60385481565b348015610b7757600080fd5b5061043a612d89565b348015610b8c57600080fd5b5061051f606b5481565b348015610ba257600080fd5b5061043a612ef6565b348015610bb757600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610beb57600080fd5b50610bf4612f80565b60405161046a9190614816565b6000610c19600080516020614de08339815191525490565b905090565b610c26612a63565b610c425760405162461bcd60e51b815260040161043190614ab2565b610c4c8282612fe2565b5050565b610c58612a63565b610c745760405162461bcd60e51b815260040161043190614ab2565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b0384169083613141565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e91906141bb565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614b72565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e20903090879087908790600401614766565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612a63565b610e7b5760405162461bcd60e51b815260040161043190614ab2565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613193565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614a7b565b600080516020614dc083398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614b4a565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461102f5760405162461bcd60e51b8152602060048201526011602482015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b6044820152606401610431565b8261010760008282546110429190614c99565b909155506110529050848461324e565b50600190555050565b611063612a63565b61107f5760405162461bcd60e51b815260040161043190614ab2565b6040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a1603755565b60a3546001600160a01b031633146111115760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614dc0833981519152805460028114156111435760405162461bcd60e51b815260040161043190614b4a565b6002825561114f6132e0565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146111f15760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b6111fa3361352e565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146112735760405162461bcd60e51b8152602060048201526011602482015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b6044820152606401610431565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156112d257600080fd5b505afa1580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a9190614601565b603454611320906801bc16d674ec800000614cb1565b61132a9190614c99565b92915050565b611338612a63565b6113545760405162461bcd60e51b815260040161043190614ab2565b6040516001600160a01b038216907f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a2603380546001600160a01b0390921661010002610100600160a81b0319909216919091179055565b60335461010090046001600160a01b031633146113df5760405162461bcd60e51b815260040161043190614b13565b60335460ff16156114025760405162461bcd60e51b815260040161043190614ae9565b6000611417826801bc16d674ec800000614cb1565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561147957600080fd5b505afa15801561148d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114b19190614601565b8111156114f45760405162461bcd60e51b81526020600482015260116024820152700d2dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f000000000000000000000000000000000000000000000000000000000000000090611524908490614c99565b111561156b5760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b6037548160385461157c9190614c99565b11156115ca5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546115dc9190614c99565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561164357600080fd5b505af1158015611657573d6000803e3d6000fd5b50505050611664816135ef565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c830152910160408051601f1981840301815291905290508260005b8181101561191c5760008686838181106116c7576116c7614d70565b90506020028101906116d99190614bef565b6116e39080614ba9565b6040516116f192919061473a565b604080519182900390912060008181526035602052919091205490915060ff16600181600481111561172557611725614d44565b146117725760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a878181106117bd576117bd614d70565b90506020028101906117cf9190614bef565b6117d99080614ba9565b898d8d8a8181106117ec576117ec614d70565b90506020028101906117fe9190614bef565b61180c906020810190614ba9565b8f8f8c81811061181e5761181e614d70565b90506020028101906118309190614bef565b604001356040518863ffffffff1660e01b8152600401611855969594939291906149c5565b6000604051808303818588803b15801561186e57600080fd5b505af1158015611882573d6000803e3d6000fd5b5050505050817fd44c8fde6d369f70d395b6cdee4641886d11e3a72cb537696ca04134881692ed8989868181106118bb576118bb614d70565b90506020028101906118cd9190614bef565b6118d79080614ba9565b6801bc16d674ec800000896040516118f29493929190614a14565b60405180910390a2506000908152603560205260409020805460ff191660021790556001016116ab565b50806034600082825461192f9190614c99565b90915550505050505050565b60335461010090046001600160a01b0316331461196a5760405162461bcd60e51b815260040161043190614b13565b60335460ff161561198d5760405162461bcd60e51b815260040161043190614ae9565b6000858560405161199f92919061473a565b604080519182900390912060008181526035602052919091205490915060ff1660038160048111156119d3576119d3614d44565b14611a185760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611a6c908a908a908a908a908a90600401614984565b600060405180830381600087803b158015611a8657600080fd5b505af1158015611a9a573d6000803e3d6000fd5b50505050817f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc288888888604051611ad494939291906148fb565b60405180910390a2506000908152603560205260409020805460ff191660041790555050505050565b60a48181548110611b0d57600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b8057600080fd5b505afa158015611b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb891906141bb565b6001600160a01b0316336001600160a01b031614611be85760405162461bcd60e51b815260040161043190614b72565b6111fa61361c565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611c3f5750611c2a610c01565b6001600160a01b0316336001600160a01b0316145b611c975760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614dc083398151915280546002811415611cc95760405162461bcd60e51b815260040161043190614b4a565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611d2f57600080fd5b505afa158015611d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d679190614601565b90508015611dba57611dba7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083613691565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e1b57600080fd5b505afa158015611e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e5391906141bb565b6001600160a01b0316336001600160a01b031614611e835760405162461bcd60e51b815260040161043190614b72565b60335460ff16611ecc5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b43611c20606b54611edd9190614c99565b10611f385760405162461bcd60e51b815260206004820152602560248201527f6d616e75616c6c794669784163636f756e74696e672063616c6c656420746f6f6044820152641039b7b7b760d91b6064820152608401610431565b6002198312158015611f4b575060038313155b8015611f655750600083603454611f629190614c58565b12155b611fb15760405162461bcd60e51b815260206004820152601760248201527f696e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff198212158015611fd457506811ff6cf0fd15b000008213155b8015611fee5750600082606854611feb9190614c58565b12155b61203a5760405162461bcd60e51b815260206004820152601d60248201527f696e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008111156120935760405162461bcd60e51b815260206004820152601960248201527f696e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b60408051848152602081018490529081018290527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a1826034546120e29190614c58565b6034556068546120f3908390614c58565b60685543606b558015612241577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561215b57600080fd5b505af115801561216f573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b1580156121ff57600080fd5b505af1158015612213573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061223791906143ff565b5061224181613789565b61224b60006137f1565b61228a5760405162461bcd60e51b815260206004820152601060248201526f333ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b612292613c70565b505050565b61229f612a63565b6122bb5760405162461bcd60e51b815260040161043190614ab2565b60a05481106122fc5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a0828154811061231157612311614d70565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061234e90600190614cd0565b8310156123d05760a0805461236590600190614cd0565b8154811061237557612375614d70565b60009182526020909120015460a080546001600160a01b0390921691859081106123a1576123a1614d70565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a08054806123e1576123e1614d5a565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c910160405180910390a2505050565b61246a612a63565b6124865760405162461bcd60e51b815260040161043190614ab2565b8060005b818110156125395760008484838181106124a6576124a6614d70565b90506020020160208101906124bb919061419e565b6001600160a01b031614156125295760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b61253281614d13565b905061248a565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161256e93929190614863565b60405180910390a1610f3660a48484613ef7565b61258a612a63565b6125a65760405162461bcd60e51b815260040161043190614ab2565b6040516001600160a01b038216907f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a2603680546001600160a01b0319166001600160a01b0392909216919091179055565b60335460009061010090046001600160a01b0316331461262e5760405162461bcd60e51b815260040161043190614b13565b60335460ff16156126515760405162461bcd60e51b815260040161043190614ae9565b610c1960016137f1565b612663612a63565b61267f5760405162461bcd60e51b815260040161043190614ab2565b808210801561269657506801bc16d674ec80000081105b80156126b35750673782dace9d9000006126b08383614cd0565b10155b6126ff5760405162461bcd60e51b815260206004820152601760248201527f696e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b60408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a910160405180910390a1606991909155606a55565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b1580156127ce57600080fd5b505af11580156127e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061280691906143ff565b50565b60335461010090046001600160a01b031633146128385760405162461bcd60e51b815260040161043190614b13565b60335460ff161561285b5760405162461bcd60e51b815260040161043190614ae9565b6000888860405161286d92919061473a565b60405190819003902090506000808281526035602052604090205460ff16600481111561289c5761289c614d44565b146128e95760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6040516301ba3ee760e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906306e8fb9c90612943908c908c908c908c908c908c908c908c90600401614922565b600060405180830381600087803b15801561295d57600080fd5b505af1158015612971573d6000803e3d6000fd5b50505050807facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238a8a8a8a6040516129ab94939291906148fb565b60405180910390a26000908152603560205260409020805460ff191660011790555050505050505050565b6129de612a63565b6129fa5760405162461bcd60e51b815260040161043190614ab2565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612a7b600080516020614de08339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612a9c612a63565b612ab85760405162461bcd60e51b815260040161043190614ab2565b612ae0817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612b00600080516020614de08339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612b805760405162461bcd60e51b815260040161043190614a7b565b600080516020614dc083398151915280546002811415612bb25760405162461bcd60e51b815260040161043190614b4a565b60028255612bc1858585613691565b5060019055505050565b60335461010090046001600160a01b03163314612bfa5760405162461bcd60e51b815260040161043190614b13565b60335460ff1615612c1d5760405162461bcd60e51b815260040161043190614ae9565b60008484604051612c2f92919061473a565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612c6357612c63614d44565b14612ca75760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612cf99089908990899089906004016148fb565b600060405180830381600087803b158015612d1357600080fd5b505af1158015612d27573d6000803e3d6000fd5b50505050817f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d87878787604051612d6194939291906148fb565b60405180910390a2506000908152603560205260409020805460ff1916600317905550505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612dd15760405162461bcd60e51b815260040161043190614a7b565b600080516020614dc083398151915280546002811415612e035760405162461bcd60e51b815260040161043190614b4a565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612e6957600080fd5b505afa158015612e7d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea19190614601565b905060006101075482612eb49190614cd0565b90508015612eec57610107829055612eec7f00000000000000000000000000000000000000000000000000000000000000008261324e565b5050600182555050565b6036546001600160a01b03163314612f505760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b6040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f11090600090a16000603855565b606060a4805480602002602001604051908101604052809291908181526020018280548015612fd857602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311612fba575b5050505050905090565b6001600160a01b038281166000908152609f6020526040902054161561303f5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b0382161580159061305f57506001600160a01b03811615155b61309f5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612292908490613cea565b82516131a69060a4906020860190613f5a565b508151815181146131f05760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156132475761323784828151811061321057613210614d70565b602002602001015184838151811061322a5761322a614d70565b6020026020010151612fe2565b61324081614d13565b90506131f3565b5050505050565b600081116132975760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156133035760405162461bcd60e51b815260040161043190614ae9565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561336057600080fd5b505af1158015613374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133989190614601565b90506000606854826133aa9190614c99565b9050804710156133fc5760405162461bcd60e51b815260206004820152601860248201527f696e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561346557600080fd5b505af1158015613479573d6000803e3d6000fd5b505060a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018590527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c72353935060600191506134ec9050565b60405180910390a160a354610c4c906001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116911683613141565b6001600160a01b0381166135845760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b03166135a4600080516020614de08339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a361280681600080516020614de083398151915255565b60006135fe8261010754613dbc565b90508061010760008282546136139190614cd0565b90915550505050565b60335460ff161561363f5760405162461bcd60e51b815260040161043190614ae9565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586136743390565b6040516001600160a01b03909116815260200160405180910390a1565b600081116136e15760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166137305760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a26122926001600160a01b0383168483613141565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156138065761132a82613dd4565b6000606854476138169190614cd0565b9050600191506801bc16d674ec80000081106139f35760006801bc16d674ec80000082049050806034600082825461384e9190614cd0565b9091555060009050613869826801bc16d674ec800000614cb1565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156138c657600080fd5b505af11580156138da573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561396a57600080fd5b505af115801561397e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139a291906143ff565b506139ac81613789565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613a039190614cd0565b90506801bc16d674ec8000008110613a555760405162461bcd60e51b8152602060048201526015602482015274756e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613a61575050919050565b606954811015613abb578060686000828254613a7d9190614c99565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613c69565b606a54811115613c58577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613b2057600080fd5b505af1158015613b34573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613bc457600080fd5b505af1158015613bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bfc91906143ff565b50600160346000828254613c109190614cd0565b90915550613c1f905081613789565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613aae565b613c6184613dd4565b949350505050565b5050919050565b60335460ff16613cb95760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa33613674565b6000613d3f826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613dec9092919063ffffffff16565b8051909150156122925780806020019051810190613d5d91906143ff565b6122925760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613dcb5781613dcd565b825b9392505050565b60008115613de457613de461361c565b506000919050565b6060613c61848460008585843b613e455760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613e61919061474a565b60006040518083038185875af1925050503d8060008114613e9e576040519150601f19603f3d011682016040523d82523d6000602084013e613ea3565b606091505b5091509150613eb3828286613ebe565b979650505050505050565b60608315613ecd575081613dcd565b825115613edd5782518084602001fd5b8160405162461bcd60e51b81526004016104319190614a68565b828054828255906000526020600020908101928215613f4a579160200282015b82811115613f4a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613f17565b50613f56929150613faf565b5090565b828054828255906000526020600020908101928215613f4a579160200282015b82811115613f4a57825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190613f7a565b5b80821115613f565760008155600101613fb0565b60008083601f840112613fd657600080fd5b5081356001600160401b03811115613fed57600080fd5b6020830191508360208260051b850101111561400857600080fd5b9250929050565b600082601f83011261402057600080fd5b8135602061403561403083614c35565b614c05565b80838252828201915082860187848660051b890101111561405557600080fd5b60005b8581101561407d57813561406b81614d9c565b84529284019290840190600101614058565b5090979650505050505050565b60008083601f84011261409c57600080fd5b5081356001600160401b038111156140b357600080fd5b60208301915083602082850101111561400857600080fd5b600060a082840312156140dd57600080fd5b50919050565b600060a082840312156140f557600080fd5b60405160a081018181106001600160401b038211171561411757614117614d86565b6040529050806141268361416e565b815261413460208401614187565b602082015261414560408401614187565b6040820152606083013561415881614db1565b6060820152608092830135920191909152919050565b803563ffffffff8116811461418257600080fd5b919050565b80356001600160401b038116811461418257600080fd5b6000602082840312156141b057600080fd5b8135613dcd81614d9c565b6000602082840312156141cd57600080fd5b8151613dcd81614d9c565b600080604083850312156141eb57600080fd5b82356141f681614d9c565b9150602083013561420681614d9c565b809150509250929050565b60008060006060848603121561422657600080fd5b833561423181614d9c565b9250602084013561424181614d9c565b929592945050506040919091013590565b6000806040838503121561426557600080fd5b823561427081614d9c565b946020939093013593505050565b6000806020838503121561429157600080fd5b82356001600160401b038111156142a757600080fd5b6142b385828601613fc4565b90969095509350505050565b6000806000606084860312156142d457600080fd5b83356001600160401b03808211156142eb57600080fd5b6142f78783880161400f565b9450602086013591508082111561430d57600080fd5b6143198783880161400f565b9350604086013591508082111561432f57600080fd5b5061433c8682870161400f565b9150509250925092565b600080600060e0848603121561435b57600080fd5b83356001600160401b0381111561437157600080fd5b8401601f8101861361438257600080fd5b8035602061439261403083614c35565b8083825282820191508285018a848660051b88010111156143b257600080fd5b600095505b848610156143dc576143c881614187565b8352600195909501949183019183016143b7565b5096505086013593506143f69150869050604086016140e3565b90509250925092565b60006020828403121561441157600080fd5b8151613dcd81614db1565b60006020828403121561442e57600080fd5b5035919050565b6000806000806040858703121561444b57600080fd5b84356001600160401b038082111561446257600080fd5b61446e8883890161408a565b9096509450602087013591508082111561448757600080fd5b5061449487828801613fc4565b95989497509550505050565b600080600080600080600080610120898b0312156144bd57600080fd5b88356001600160401b03808211156144d457600080fd5b6144e08c838d0161408a565b909a50985060208b01359150808211156144f957600080fd5b6145058c838d01613fc4565b909850965060408b013591508082111561451e57600080fd5b5061452b8b828c0161408a565b909550935050606089013591506145458a60808b016140cb565b90509295985092959890939650565b600080600080600060e0868803121561456c57600080fd5b85356001600160401b038082111561458357600080fd5b61458f89838a0161408a565b909750955060208801359150808211156145a857600080fd5b506145b588828901613fc4565b90945092506145c9905087604088016140cb565b90509295509295909350565b6000806000606084860312156145ea57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561461357600080fd5b5051919050565b6000806040838503121561462d57600080fd5b50508035926020909101359150565b8183526000602080850194508260005b85811015614678576001600160401b0361466583614187565b168752958201959082019060010161464c565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526146c4816020860160208601614ce7565b601f01601f19169290920160200192915050565b63ffffffff6146e68261416e565b1682526146f560208201614187565b6001600160401b0380821660208501528061471260408501614187565b1660408501525050606081013561472881614db1565b15156060830152608090810135910152565b8183823760009101908152919050565b6000825161475c818460208701614ce7565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156147b95783516001600160401b031685529382019392820192600101614794565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b818110156148575783516001600160a01b031683529284019291840191600101614832565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b828110156148ad5781546001600160a01b031684529284019260019182019101614888565b505050838103828501528481528590820160005b868110156148ef5782356148d481614d9c565b6001600160a01b0316825291830191908301906001016148c1565b50979650505050505050565b60408152600061490f604083018688614683565b8281036020840152613eb381858761463c565b60006101208083526149378184018b8d614683565b9050828103602084015261494c81898b61463c565b90508281036040840152614961818789614683565b91505083606083015261497760808301846146d8565b9998505050505050505050565b60e08152600061499860e083018789614683565b82810360208401526149ab81868861463c565b9150506149bb60408301846146d8565b9695505050505050565b6080815260006149d960808301888a614683565b82810360208401526149eb81886146ac565b90508281036040840152614a00818688614683565b915050826060830152979650505050505050565b606081526000614a28606083018688614683565b8460208401528281036040840152613eb381856146ac565b6020810160058310614a6257634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613dcd60208301846146ac565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614bc057600080fd5b8301803591506001600160401b03821115614bda57600080fd5b60200191503681900382131561400857600080fd5b60008235605e1983360301811261475c57600080fd5b604051601f8201601f191681016001600160401b0381118282101715614c2d57614c2d614d86565b604052919050565b60006001600160401b03821115614c4e57614c4e614d86565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614c7a57614c7a614d2e565b600160ff1b8390038412811615614c9357614c93614d2e565b50500190565b60008219821115614cac57614cac614d2e565b500190565b6000816000190483118215151615614ccb57614ccb614d2e565b500290565b600082821015614ce257614ce2614d2e565b500390565b60005b83811015614d02578181015183820152602001614cea565b83811115610f365750506000910152565b6000600019821415614d2757614d27614d2e565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461280657600080fd5b801515811461280657600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122022c067cacd1532e922314924802c9c6549951b66ed82fb2629890bc62b7b120a64736f6c63430008070033", + "numDeployments": 8, + "solcInputHash": "ba8695eb2e88fba4c41fb618e06db1be", + "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"platformAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAddress\",\"type\":\"address\"}],\"internalType\":\"struct InitializableAbstractStrategy.BaseStrategyConfig\",\"name\":\"_baseConfig\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_wethAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvNetwork\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxValidators\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_feeAccumulator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_beaconChainDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AccountingConsensusRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"noOfValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingFullyWithdrawnValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"validatorsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"consensusRewardsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingManuallyFixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"FuseIntervalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldHarvesterAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newHarvesterAddress\",\"type\":\"address\"}],\"name\":\"HarvesterAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"RegistratorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_oldAddresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_newAddresses\",\"type\":\"address[]\"}],\"name\":\"RewardTokenAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardTokenCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StakeETHTallyReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeETHThresholdChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"StakingMonitorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BEACON_CHAIN_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_ACCUMULATOR_ADDRESS\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_STAKE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_VALIDATORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FIX_ACCOUNTING_CADENCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_NETWORK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeDepositedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetToPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"checkBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectRewardTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"consensusRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"depositSSV\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositedWethAccountedFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"doAccounting\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"accountingValid\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"harvesterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_pTokens\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFixAccountingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_validatorsDelta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_consensusRewardsDelta\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_ethToVaultAmount\",\"type\":\"uint256\"}],\"name\":\"manuallyFixAccounting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"publicKeys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sharesData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerSsvValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_assetIndex\",\"type\":\"uint256\"}],\"name\":\"removePToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetStakeETHTally\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeApproveAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalEnd\",\"type\":\"uint256\"}],\"name\":\"setFuseInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_harvesterAddress\",\"type\":\"address\"}],\"name\":\"setHarvesterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"setPTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setRegistrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"setRewardTokenAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setStakeETHThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStakingMonitor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHTally\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ValidatorStakeData[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"stakeEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingMonitor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"supportsAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRegistrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"validatorsStates\",\"outputs\":[{\"internalType\":\"enum ValidatorRegistrator.VALIDATOR_STATE\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Origin Protocol Inc\",\"details\":\"This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that is on the contract across multiple blocks (and not just transitory within a transaction) is considered an asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is required since the rewards (reward token) is also in ETH. To simplify the accounting of WETH there is another difference in behavior compared to the other strategies. To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant immediately wraps ETH to WETH and sends it to the Vault. On the other hand any ETH on the contract (across multiple blocks) is there either: - as a result of already accounted for consensus rewards - as a result of not yet accounted for consensus rewards - as a results of not yet accounted for full validator withdrawals (or validator slashes) Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time interval and not immediately.\",\"kind\":\"dev\",\"methods\":{\"checkBalance(address)\":{\"params\":{\"_asset\":\"Address of weth asset\"},\"returns\":{\"balance\":\" Total value of (W)ETH\"}},\"constructor\":{\"params\":{\"_baseConfig\":\"Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI, and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\",\"_beaconChainDepositContract\":\"Address of the beacon chain deposit contract\",\"_feeAccumulator\":\"Address of the fee accumulator receiving execution layer validator rewards\",\"_maxValidators\":\"Maximum number of validators that can be registered in the strategy\",\"_ssvNetwork\":\"Address of the SSV Network contract\",\"_ssvToken\":\"Address of the Erc20 SSV Token contract\",\"_wethAddress\":\"Address of the Erc20 WETH Token contract\"}},\"deposit(address,uint256)\":{\"params\":{\"_amount\":\"Amount of assets that were transferred to the strategy by the vault.\",\"_asset\":\"Address of asset to deposit. Has to be WETH.\"}},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"details\":\"A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds. uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service that tries to top up SSV tokens.\",\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"doAccounting()\":{\"details\":\"This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it for now.\",\"returns\":{\"accountingValid\":\"true if accounting was successful, false if fuse is blown\"}},\"exitSsvValidator(bytes,uint64[])\":{\"params\":{\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"getRewardTokenAddresses()\":{\"returns\":{\"_0\":\"address[] the reward token addresses.\"}},\"initialize(address[],address[],address[])\":{\"params\":{\"_assets\":\"Addresses of initial supported assets\",\"_pTokens\":\"Platform Token corresponding addresses\",\"_rewardTokenAddresses\":\"Address of reward token for platform\"}},\"manuallyFixAccounting(int256,int256,uint256)\":{\"details\":\"There is a case when a validator(s) gets slashed so much that the eth swept from the beacon chain enters the fuse area and there are no consensus rewards on the contract to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval we need to reduce the amount of active deposited validators and immediately send WETH to the vault, so it doesn't interfere with further accounting.\",\"params\":{\"_consensusRewardsDelta\":\"adjust the accounted for consensus rewards up or down\",\"_ethToVaultAmount\":\"the amount of ETH that gets wrapped into WETH and sent to the Vault\",\"_validatorsDelta\":\"adjust the active validators by up to plus three or minus three\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKeys\":\"The public keys of the validators\",\"sharesData\":\"The shares data for each validator\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"removePToken(uint256)\":{\"params\":{\"_assetIndex\":\"Index of the asset to be removed\"}},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"setHarvesterAddress(address)\":{\"params\":{\"_harvesterAddress\":\"Address of the harvester contract.\"}},\"setPTokenAddress(address,address)\":{\"params\":{\"_asset\":\"Address for the asset\",\"_pToken\":\"Address for the corresponding platform token\"}},\"setRewardTokenAddresses(address[])\":{\"params\":{\"_rewardTokenAddresses\":\"Array of reward token addresses\"}},\"stakeEth((bytes,bytes,bytes32)[])\":{\"params\":{\"validators\":\"A list of validator data needed to stake. The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot. Only the registrator can call this function.\"}},\"supportsAsset(address)\":{\"params\":{\"_asset\":\"The address of the asset token.\"}},\"transferGovernance(address)\":{\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"transferToken(address,uint256)\":{\"params\":{\"_amount\":\"Amount of the asset to transfer\",\"_asset\":\"Address for the asset\"}},\"withdraw(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount of WETH to withdraw\",\"_asset\":\"WETH to withdraw\",\"_recipient\":\"Address to receive withdrawn assets\"}}},\"stateVariables\":{\"FEE_ACCUMULATOR_ADDRESS\":{\"details\":\"this address will receive Execution layer rewards - These are rewards earned for executing transactions on the Ethereum network as part of block proposals. They include priority fees (fees paid by users for their transactions to be included) and MEV rewards (rewards for arranging transactions in a way that benefits the validator).\"},\"depositedWethAccountedFor\":{\"details\":\"This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately deposit it to an underlying platform. Rather a special privilege account stakes it to the validators. For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track of WETH that has already been accounted for. This value represents the amount of WETH balance of this contract that has already been accounted for by the deposit events. It is important to note that this variable is not concerned with WETH that is a result of full/partial withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to be staked.\"}},\"title\":\"Native Staking SSV Strategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BEACON_CHAIN_DEPOSIT_CONTRACT()\":{\"notice\":\"The address of the beacon chain deposit contract\"},\"FEE_ACCUMULATOR_ADDRESS()\":{\"notice\":\"Fee collector address\"},\"FULL_STAKE()\":{\"notice\":\"The maximum amount of ETH that can be staked by a validator\"},\"MAX_VALIDATORS()\":{\"notice\":\"Maximum number of validators that can be registered in this strategy\"},\"MIN_FIX_ACCOUNTING_CADENCE()\":{\"notice\":\"The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\"},\"SSV_NETWORK()\":{\"notice\":\"The address of the SSV Network contract used to interface with\"},\"SSV_TOKEN()\":{\"notice\":\"SSV ERC20 token that serves as a payment for operating SSV validators\"},\"VAULT_ADDRESS()\":{\"notice\":\"Address of the OETH Vault proxy contract\"},\"WETH()\":{\"notice\":\"The address of the Wrapped ETH (WETH) token contract\"},\"activeDepositedValidators()\":{\"notice\":\"The number of validators that have 32 (!) ETH actively deposited. When a new deposit to a validator happens this number increases, when a validator exit is detected this number decreases.\"},\"assetToPToken(address)\":{\"notice\":\"asset => pToken (Platform Specific Token Address)\"},\"checkBalance(address)\":{\"notice\":\"Returns the total value of (W)ETH that is staked to the validators and WETH deposits that are still to be staked. This does not include ETH from consensus rewards sitting in this strategy or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested and sent to the Dripper so will eventually be sent to the Vault as WETH.\"},\"claimGovernance()\":{\"notice\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"collectRewardTokens()\":{\"notice\":\"Collect accumulated reward token and send to Vault.\"},\"consensusRewards()\":{\"notice\":\"Keeps track of the total consensus rewards swept from the beacon chain\"},\"deposit(address,uint256)\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just checks the asset is WETH and emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositAll()\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\"},\"doAccounting()\":{\"notice\":\"This notion page offers a good explanation of how the accounting functions https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart, the accounting function will treat that ETH as Beacon chain consensus rewards. On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32, the accounting function will treat that as a validator slashing.Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\"},\"exitSsvValidator(bytes,uint64[])\":{\"notice\":\"Exit a validator from the Beacon chain. The staked ETH will eventually swept to this native staking strategy. Only the registrator can call this function.\"},\"fuseIntervalEnd()\":{\"notice\":\"end of fuse interval\"},\"fuseIntervalStart()\":{\"notice\":\"start of fuse interval\"},\"getRewardTokenAddresses()\":{\"notice\":\"Get the reward token addresses.\"},\"governor()\":{\"notice\":\"Returns the address of the current Governor.\"},\"harvesterAddress()\":{\"notice\":\"Address of the Harvester contract allowed to collect reward tokens\"},\"initialize(address[],address[],address[])\":{\"notice\":\"initialize function, to set up initial internal state\"},\"isGovernor()\":{\"notice\":\"Returns true if the caller is the current Governor.\"},\"lastFixAccountingBlockNumber()\":{\"notice\":\"last block number manuallyFixAccounting has been called\"},\"manuallyFixAccounting(int256,int256,uint256)\":{\"notice\":\"Allow the Strategist to fix the accounting of this strategy and unpause.\"},\"platformAddress()\":{\"notice\":\"Address of the underlying platform\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Registers a new validator in the SSV Cluster. Only the registrator can call this function.\"},\"removePToken(uint256)\":{\"notice\":\"Remove a supported asset by passing its index. This method can only be called by the system Governor\"},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Remove a validator from the SSV Cluster. Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain. If removed before the validator has exited the beacon chain will result in the validator being slashed. Only the registrator can call this function.\"},\"resetStakeETHTally()\":{\"notice\":\"Reset the stakeETHTally\"},\"rewardTokenAddresses(uint256)\":{\"notice\":\"Address of the reward tokens. eg CRV, BAL, CVX, AURA\"},\"safeApproveAllTokens()\":{\"notice\":\"Approves the SSV Network contract to transfer SSV tokens for deposits\"},\"setFuseInterval(uint256,uint256)\":{\"notice\":\"set fuse interval values\"},\"setHarvesterAddress(address)\":{\"notice\":\"Set the Harvester contract that can collect rewards.\"},\"setPTokenAddress(address,address)\":{\"notice\":\"Provide support for asset by passing its pToken address. This method can only be called by the system Governor\"},\"setRegistrator(address)\":{\"notice\":\"Set the address of the registrator which can register, exit and remove validators\"},\"setRewardTokenAddresses(address[])\":{\"notice\":\"Set the reward token addresses. Any old addresses will be overwritten.\"},\"setStakeETHThreshold(uint256)\":{\"notice\":\"Set the amount of ETH that can be staked before staking monitor\"},\"setStakingMonitor(address)\":{\"notice\":\"Set the address of the staking monitor that is allowed to reset stakeETHTally\"},\"stakeETHTally()\":{\"notice\":\"Amount of ETH that can has been staked since the last governor approval.\"},\"stakeETHThreshold()\":{\"notice\":\"Amount of ETH that can be staked before staking on the contract is suspended and the governor needs to approve further staking\"},\"stakeEth((bytes,bytes,bytes32)[])\":{\"notice\":\"Stakes WETH to the node validators\"},\"stakingMonitor()\":{\"notice\":\"The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\"},\"supportsAsset(address)\":{\"notice\":\"Returns bool indicating whether asset is supported by strategy.\"},\"transferGovernance(address)\":{\"notice\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\"},\"transferToken(address,uint256)\":{\"notice\":\"Transfer token to governor. Intended for recovering tokens stuck in strategy contracts, i.e. mistaken sends.\"},\"validatorRegistrator()\":{\"notice\":\"Address of the registrator - allowed to register, exit and remove validators\"},\"validatorsStates(bytes32)\":{\"notice\":\"State of the validators keccak256(pubKey) => state\"},\"vaultAddress()\":{\"notice\":\"Address of the OToken vault\"},\"withdraw(address,address,uint256)\":{\"notice\":\"Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - after mints if the strategy is the default - time between depositToStrategy and stakeEth - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure.\"},\"withdrawAll()\":{\"notice\":\"transfer all WETH deposits back to the vault. This does not withdraw from the validators. That has to be done separately with the `exitSsvValidator` and `removeSsvValidator` operations. This does not withdraw any execution rewards from the FeeAccumulator or consensus rewards in this strategy. Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn. ETH from full validator withdrawals is sent to the Vault using `doAccounting`. Will NOT revert if the strategy is paused from an accounting failure.\"}},\"notice\":\"Strategy to deploy funds into DVT validators powered by the SSV Network\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":\"NativeStakingSSVStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused(), \\\"Pausable: paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n require(paused(), \\\"Pausable: not paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a >= b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a / b + (a % b == 0 ? 0 : 1);\\n }\\n}\\n\",\"keccak256\":\"0xfaad496c1c944b6259b7dc70b4865eb1775d6402bc0c81b38a0b24d9f525ae37\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @notice Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @notice Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0xb7133d6ce7a9e673ff79fcedb3fd41ae6e58e251f94915bb65731abe524270b4\",\"license\":\"MIT\"},\"contracts/interfaces/IBasicToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IBasicToken {\\n function symbol() external view returns (string memory);\\n\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xa562062698aa12572123b36dfd2072f1a39e44fed2031cc19c2c9fd522f96ec2\",\"license\":\"MIT\"},\"contracts/interfaces/IDepositContract.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDepositContract {\\n /// @notice A processed deposit event.\\n event DepositEvent(\\n bytes pubkey,\\n bytes withdrawal_credentials,\\n bytes amount,\\n bytes signature,\\n bytes index\\n );\\n\\n /// @notice Submit a Phase 0 DepositData object.\\n /// @param pubkey A BLS12-381 public key.\\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\\n /// @param signature A BLS12-381 signature.\\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\\n /// Used as a protection against malformed input.\\n function deposit(\\n bytes calldata pubkey,\\n bytes calldata withdrawal_credentials,\\n bytes calldata signature,\\n bytes32 deposit_data_root\\n ) external payable;\\n\\n /// @notice Query the current deposit root hash.\\n /// @return The deposit root hash.\\n function get_deposit_root() external view returns (bytes32);\\n\\n /// @notice Query the current deposit count.\\n /// @return The deposit count encoded as a little endian 64-bit number.\\n function get_deposit_count() external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x598f90bdbc854250bbd5991426bfb43367207e64e33109c41aa8b54323fd8d8e\",\"license\":\"MIT\"},\"contracts/interfaces/ISSVNetwork.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct Cluster {\\n uint32 validatorCount;\\n uint64 networkFeeIndex;\\n uint64 index;\\n bool active;\\n uint256 balance;\\n}\\n\\ninterface ISSVNetwork {\\n /**********/\\n /* Errors */\\n /**********/\\n\\n error CallerNotOwner(); // 0x5cd83192\\n error CallerNotWhitelisted(); // 0x8c6e5d71\\n error FeeTooLow(); // 0x732f9413\\n error FeeExceedsIncreaseLimit(); // 0x958065d9\\n error NoFeeDeclared(); // 0x1d226c30\\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\\n error OperatorDoesNotExist(); // 0x961e3e8c\\n error InsufficientBalance(); // 0xf4d678b8\\n error ValidatorDoesNotExist(); // 0xe51315d2\\n error ClusterNotLiquidatable(); // 0x60300a8d\\n error InvalidPublicKeyLength(); // 0x637297a4\\n error InvalidOperatorIdsLength(); // 0x38186224\\n error ClusterAlreadyEnabled(); // 0x3babafd2\\n error ClusterIsLiquidated(); // 0x95a0cf33\\n error ClusterDoesNotExists(); // 0x185e2b16\\n error IncorrectClusterState(); // 0x12e04c87\\n error UnsortedOperatorsList(); // 0xdd020e25\\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\\n error ExceedValidatorLimit(); // 0x6df5ab76\\n error TokenTransferFailed(); // 0x045c4b02\\n error SameFeeChangeNotAllowed(); // 0xc81272f8\\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\\n error NotAuthorized(); // 0xea8e4eb5\\n error OperatorsListNotUnique(); // 0xa5a1ff5d\\n error OperatorAlreadyExists(); // 0x289c9494\\n error TargetModuleDoesNotExist(); // 0x8f9195fb\\n error MaxValueExceeded(); // 0x91aa3017\\n error FeeTooHigh(); // 0xcd4e6167\\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\\n error EmptyPublicKeysList(); // df83e679\\n\\n // legacy errors\\n error ValidatorAlreadyExists(); // 0x8d09a73e\\n error IncorrectValidatorState(); // 0x2feda3c1\\n\\n event AdminChanged(address previousAdmin, address newAdmin);\\n event BeaconUpgraded(address indexed beacon);\\n event ClusterDeposited(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event ClusterLiquidated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterReactivated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterWithdrawn(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event DeclareOperatorFeePeriodUpdated(uint64 value);\\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\\n event FeeRecipientAddressUpdated(\\n address indexed owner,\\n address recipientAddress\\n );\\n event Initialized(uint8 version);\\n event LiquidationThresholdPeriodUpdated(uint64 value);\\n event MinimumLiquidationCollateralUpdated(uint256 value);\\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\\n event OperatorAdded(\\n uint64 indexed operatorId,\\n address indexed owner,\\n bytes publicKey,\\n uint256 fee\\n );\\n event OperatorFeeDeclarationCancelled(\\n address indexed owner,\\n uint64 indexed operatorId\\n );\\n event OperatorFeeDeclared(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeExecuted(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\\n event OperatorMaximumFeeUpdated(uint64 maxFee);\\n event OperatorRemoved(uint64 indexed operatorId);\\n event OperatorWhitelistUpdated(\\n uint64 indexed operatorId,\\n address whitelisted\\n );\\n event OperatorWithdrawn(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 value\\n );\\n event OwnershipTransferStarted(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event OwnershipTransferred(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event Upgraded(address indexed implementation);\\n event ValidatorAdded(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n bytes shares,\\n Cluster cluster\\n );\\n event ValidatorExited(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey\\n );\\n event ValidatorRemoved(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n Cluster cluster\\n );\\n\\n fallback() external;\\n\\n function acceptOwnership() external;\\n\\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\\n\\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function deposit(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function executeOperatorFee(uint64 operatorId) external;\\n\\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\\n external;\\n\\n function bulkExitValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds\\n ) external;\\n\\n function getVersion() external pure returns (string memory version);\\n\\n function initialize(\\n address token_,\\n address ssvOperators_,\\n address ssvClusters_,\\n address ssvDAO_,\\n address ssvViews_,\\n uint64 minimumBlocksBeforeLiquidation_,\\n uint256 minimumLiquidationCollateral_,\\n uint32 validatorsPerOperatorLimit_,\\n uint64 declareOperatorFeePeriod_,\\n uint64 executeOperatorFeePeriod_,\\n uint64 operatorMaxFeeIncrease_\\n ) external;\\n\\n function liquidate(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function owner() external view returns (address);\\n\\n function pendingOwner() external view returns (address);\\n\\n function proxiableUUID() external view returns (bytes32);\\n\\n function reactivate(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function registerOperator(bytes memory publicKey, uint256 fee)\\n external\\n returns (uint64 id);\\n\\n function registerValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n bytes memory sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRegisterValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function removeOperator(uint64 operatorId) external;\\n\\n function removeValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRemoveValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function renounceOwnership() external;\\n\\n function setFeeRecipientAddress(address recipientAddress) external;\\n\\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\\n external;\\n\\n function transferOwnership(address newOwner) external;\\n\\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\\n\\n function updateMaximumOperatorFee(uint64 maxFee) external;\\n\\n function updateMinimumLiquidationCollateral(uint256 amount) external;\\n\\n function updateModule(uint8 moduleId, address moduleAddress) external;\\n\\n function updateNetworkFee(uint256 fee) external;\\n\\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\\n\\n function upgradeTo(address newImplementation) external;\\n\\n function upgradeToAndCall(address newImplementation, bytes memory data)\\n external\\n payable;\\n\\n function withdraw(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\\n\\n function withdrawNetworkEarnings(uint256 amount) external;\\n\\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\\n external;\\n}\\n\",\"keccak256\":\"0xbd86cb74702aebc5b53c8fc738a2e3ad1b410583460617be84b22ce922af12a7\",\"license\":\"MIT\"},\"contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\\n */\\ninterface IStrategy {\\n /**\\n * @dev Deposit the given asset to platform\\n * @param _asset asset address\\n * @param _amount Amount to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external;\\n\\n /**\\n * @dev Deposit the entire balance of all supported assets in the Strategy\\n * to the platform\\n */\\n function depositAll() external;\\n\\n /**\\n * @dev Withdraw given asset from Lending platform\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external;\\n\\n /**\\n * @dev Liquidate all assets in strategy and return them to Vault.\\n */\\n function withdrawAll() external;\\n\\n /**\\n * @dev Returns the current balance of the given asset.\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n returns (uint256 balance);\\n\\n /**\\n * @dev Returns bool indicating whether strategy supports asset.\\n */\\n function supportsAsset(address _asset) external view returns (bool);\\n\\n /**\\n * @dev Collect reward tokens from the Strategy.\\n */\\n function collectRewardTokens() external;\\n\\n /**\\n * @dev The address array of the reward tokens for the Strategy.\\n */\\n function getRewardTokenAddresses() external view returns (address[] memory);\\n}\\n\",\"keccak256\":\"0xb291e409a9b95527f9ed19cd6bff8eeb9921a21c1f5194a48c0bb9ce6613959a\",\"license\":\"MIT\"},\"contracts/interfaces/IVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { VaultStorage } from \\\"../vault/VaultStorage.sol\\\";\\n\\ninterface IVault {\\n event AssetSupported(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Governable.sol\\n function transferGovernance(address _newGovernor) external;\\n\\n function claimGovernance() external;\\n\\n function governor() external view returns (address);\\n\\n // VaultAdmin.sol\\n function setPriceProvider(address _priceProvider) external;\\n\\n function priceProvider() external view returns (address);\\n\\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\\n\\n function redeemFeeBps() external view returns (uint256);\\n\\n function setVaultBuffer(uint256 _vaultBuffer) external;\\n\\n function vaultBuffer() external view returns (uint256);\\n\\n function setAutoAllocateThreshold(uint256 _threshold) external;\\n\\n function autoAllocateThreshold() external view returns (uint256);\\n\\n function setRebaseThreshold(uint256 _threshold) external;\\n\\n function rebaseThreshold() external view returns (uint256);\\n\\n function setStrategistAddr(address _address) external;\\n\\n function strategistAddr() external view returns (address);\\n\\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\\n\\n function maxSupplyDiff() external view returns (uint256);\\n\\n function setTrusteeAddress(address _address) external;\\n\\n function trusteeAddress() external view returns (address);\\n\\n function setTrusteeFeeBps(uint256 _basis) external;\\n\\n function trusteeFeeBps() external view returns (uint256);\\n\\n function ousdMetaStrategy() external view returns (address);\\n\\n function setSwapper(address _swapperAddr) external;\\n\\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\\n\\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\\n external;\\n\\n function supportAsset(address _asset, uint8 _supportsAsset) external;\\n\\n function approveStrategy(address _addr) external;\\n\\n function removeStrategy(address _addr) external;\\n\\n function setAssetDefaultStrategy(address _asset, address _strategy)\\n external;\\n\\n function assetDefaultStrategies(address _asset)\\n external\\n view\\n returns (address);\\n\\n function pauseRebase() external;\\n\\n function unpauseRebase() external;\\n\\n function rebasePaused() external view returns (bool);\\n\\n function pauseCapital() external;\\n\\n function unpauseCapital() external;\\n\\n function capitalPaused() external view returns (bool);\\n\\n function transferToken(address _asset, uint256 _amount) external;\\n\\n function priceUnitMint(address asset) external view returns (uint256);\\n\\n function priceUnitRedeem(address asset) external view returns (uint256);\\n\\n function withdrawAllFromStrategy(address _strategyAddr) external;\\n\\n function withdrawAllFromStrategies() external;\\n\\n function withdrawFromStrategy(\\n address _strategyFromAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n function depositToStrategy(\\n address _strategyToAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n // VaultCore.sol\\n function mint(\\n address _asset,\\n uint256 _amount,\\n uint256 _minimumOusdAmount\\n ) external;\\n\\n function mintForStrategy(uint256 _amount) external;\\n\\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\\n\\n function burnForStrategy(uint256 _amount) external;\\n\\n function redeemAll(uint256 _minimumUnitAmount) external;\\n\\n function allocate() external;\\n\\n function rebase() external;\\n\\n function swapCollateral(\\n address fromAsset,\\n address toAsset,\\n uint256 fromAssetAmount,\\n uint256 minToAssetAmount,\\n bytes calldata data\\n ) external returns (uint256 toAssetAmount);\\n\\n function totalValue() external view returns (uint256 value);\\n\\n function checkBalance(address _asset) external view returns (uint256);\\n\\n function calculateRedeemOutputs(uint256 _amount)\\n external\\n view\\n returns (uint256[] memory);\\n\\n function getAssetCount() external view returns (uint256);\\n\\n function getAssetConfig(address _asset)\\n external\\n view\\n returns (VaultStorage.Asset memory config);\\n\\n function getAllAssets() external view returns (address[] memory);\\n\\n function getStrategyCount() external view returns (uint256);\\n\\n function swapper() external view returns (address);\\n\\n function allowedSwapUndervalue() external view returns (uint256);\\n\\n function getAllStrategies() external view returns (address[] memory);\\n\\n function isSupportedAsset(address _asset) external view returns (bool);\\n\\n function netOusdMintForStrategyThreshold() external view returns (uint256);\\n\\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\\n\\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\\n\\n function netOusdMintedForStrategy() external view returns (int256);\\n\\n function weth() external view returns (address);\\n\\n function cacheWETHAssetIndex() external;\\n\\n function wethAssetIndex() external view returns (uint256);\\n\\n function initialize(address, address) external;\\n\\n function setAdminImpl(address) external;\\n\\n function removeAsset(address _asset) external;\\n}\\n\",\"keccak256\":\"0xa03ba17b6224bec26290794760fc807e017260406037b4f812970701888e72c8\",\"license\":\"MIT\"},\"contracts/interfaces/IWETH9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IWETH9 {\\n event Approval(address indexed src, address indexed guy, uint256 wad);\\n event Deposit(address indexed dst, uint256 wad);\\n event Transfer(address indexed src, address indexed dst, uint256 wad);\\n event Withdrawal(address indexed src, uint256 wad);\\n\\n function allowance(address, address) external view returns (uint256);\\n\\n function approve(address guy, uint256 wad) external returns (bool);\\n\\n function balanceOf(address) external view returns (uint256);\\n\\n function decimals() external view returns (uint8);\\n\\n function deposit() external payable;\\n\\n function name() external view returns (string memory);\\n\\n function symbol() external view returns (string memory);\\n\\n function totalSupply() external view returns (uint256);\\n\\n function transfer(address dst, uint256 wad) external returns (bool);\\n\\n function transferFrom(\\n address src,\\n address dst,\\n uint256 wad\\n ) external returns (bool);\\n\\n function withdraw(uint256 wad) external;\\n}\\n\",\"keccak256\":\"0x05b7dce6c24d3cd4e48b5c6346d86e5e40ecc3291bcdf3f3ef091c98fc826519\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/FeeAccumulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title Fee Accumulator for Native Staking SSV Strategy\\n * @notice Receives execution rewards which includes tx fees and\\n * MEV rewards like tx priority and tx ordering.\\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\\n * @author Origin Protocol Inc\\n */\\ncontract FeeAccumulator {\\n /// @notice The address of the Native Staking Strategy\\n address public immutable STRATEGY;\\n\\n /**\\n * @param _strategy Address of the Native Staking Strategy\\n */\\n constructor(address _strategy) {\\n STRATEGY = _strategy;\\n }\\n\\n /**\\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\\n */\\n function collect() external returns (uint256 eth) {\\n require(msg.sender == STRATEGY, \\\"Caller is not the Strategy\\\");\\n\\n eth = address(this).balance;\\n if (eth > 0) {\\n // Send the ETH to the Native Staking Strategy\\n Address.sendValue(payable(STRATEGY), eth);\\n }\\n }\\n\\n /**\\n * @dev Accept ETH\\n */\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x0771b89ae16550f8975d96791110015296d424a6805034b0f44f7df6ba840420\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nimport { InitializableAbstractStrategy } from \\\"../../utils/InitializableAbstractStrategy.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { FeeAccumulator } from \\\"./FeeAccumulator.sol\\\";\\nimport { ValidatorAccountant } from \\\"./ValidatorAccountant.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/// @title Native Staking SSV Strategy\\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\\n/// @author Origin Protocol Inc\\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\\n/// required since the rewards (reward token) is also in ETH.\\n///\\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\\n/// immediately wraps ETH to WETH and sends it to the Vault.\\n///\\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\\n/// - as a result of already accounted for consensus rewards\\n/// - as a result of not yet accounted for consensus rewards\\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\\n///\\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\\n/// interval and not immediately.\\ncontract NativeStakingSSVStrategy is\\n ValidatorAccountant,\\n InitializableAbstractStrategy\\n{\\n using SafeERC20 for IERC20;\\n\\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\\n address public immutable SSV_TOKEN;\\n /// @notice Fee collector address\\n /// @dev this address will receive Execution layer rewards - These are rewards earned for\\n /// executing transactions on the Ethereum network as part of block proposals. They include\\n /// priority fees (fees paid by users for their transactions to be included) and MEV rewards\\n /// (rewards for arranging transactions in a way that benefits the validator).\\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\\n\\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\\n /// of WETH that has already been accounted for.\\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\\n /// deposit events.\\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\\n /// be staked.\\n uint256 public depositedWethAccountedFor;\\n\\n // For future use\\n uint256[49] private __gap;\\n\\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _ssvToken Address of the Erc20 SSV Token contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n constructor(\\n BaseStrategyConfig memory _baseConfig,\\n address _wethAddress,\\n address _ssvToken,\\n address _ssvNetwork,\\n uint256 _maxValidators,\\n address _feeAccumulator,\\n address _beaconChainDepositContract\\n )\\n InitializableAbstractStrategy(_baseConfig)\\n ValidatorAccountant(\\n _wethAddress,\\n _baseConfig.vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {\\n SSV_TOKEN = _ssvToken;\\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\\n }\\n\\n /// @notice initialize function, to set up initial internal state\\n /// @param _rewardTokenAddresses Address of reward token for platform\\n /// @param _assets Addresses of initial supported assets\\n /// @param _pTokens Platform Token corresponding addresses\\n function initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) external onlyGovernor initializer {\\n InitializableAbstractStrategy._initialize(\\n _rewardTokenAddresses,\\n _assets,\\n _pTokens\\n );\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just checks the asset is WETH and emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _asset Address of asset to deposit. Has to be WETH.\\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\\n function deposit(address _asset, uint256 _amount)\\n external\\n override\\n onlyVault\\n nonReentrant\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n depositedWethAccountedFor += _amount;\\n _deposit(_asset, _amount);\\n }\\n\\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\\n /// @param _asset Address of WETH\\n /// @param _amount Amount of WETH to deposit\\n function _deposit(address _asset, uint256 _amount) internal {\\n require(_amount > 0, \\\"Must deposit something\\\");\\n /*\\n * We could do a check here that would revert when \\\"_amount % 32 ether != 0\\\". With the idea of\\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\\n * of 32ETH have been staked.\\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\\n *\\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\\n */\\n emit Deposit(_asset, address(0), _amount);\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function depositAll() external override onlyVault nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\\n\\n if (newWeth > 0) {\\n depositedWethAccountedFor = wethBalance;\\n\\n _deposit(WETH, newWeth);\\n }\\n }\\n\\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\\n /// That can happen when:\\n /// - after mints if the strategy is the default\\n /// - time between depositToStrategy and stakeEth\\n /// - the deposit was not a multiple of 32 WETH\\n /// - someone sent WETH directly to this contract\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _recipient Address to receive withdrawn assets\\n /// @param _asset WETH to withdraw\\n /// @param _amount Amount of WETH to withdraw\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external override onlyVault nonReentrant {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n _withdraw(_recipient, _asset, _amount);\\n }\\n\\n function _withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) internal {\\n require(_amount > 0, \\\"Must withdraw something\\\");\\n require(_recipient != address(0), \\\"Must specify recipient\\\");\\n\\n _wethWithdrawn(_amount);\\n\\n IERC20(_asset).safeTransfer(_recipient, _amount);\\n emit Withdrawal(_asset, address(0), _amount);\\n }\\n\\n /// @notice transfer all WETH deposits back to the vault.\\n /// This does not withdraw from the validators. That has to be done separately with the\\n /// `exitSsvValidator` and `removeSsvValidator` operations.\\n /// This does not withdraw any execution rewards from the FeeAccumulator or\\n /// consensus rewards in this strategy.\\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n if (wethBalance > 0) {\\n _withdraw(vaultAddress, WETH, wethBalance);\\n }\\n }\\n\\n /// @notice Returns the total value of (W)ETH that is staked to the validators\\n /// and WETH deposits that are still to be staked.\\n /// This does not include ETH from consensus rewards sitting in this strategy\\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\\n /// @param _asset Address of weth asset\\n /// @return balance Total value of (W)ETH\\n function checkBalance(address _asset)\\n external\\n view\\n override\\n returns (uint256 balance)\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n\\n balance =\\n // add the ETH that has been staked in validators\\n activeDepositedValidators *\\n FULL_STAKE +\\n // add the WETH in the strategy from deposits that are still to be staked\\n IERC20(WETH).balanceOf(address(this));\\n }\\n\\n function pause() external onlyStrategist {\\n _pause();\\n }\\n\\n /// @notice Returns bool indicating whether asset is supported by strategy.\\n /// @param _asset The address of the asset token.\\n function supportsAsset(address _asset) public view override returns (bool) {\\n return _asset == WETH;\\n }\\n\\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\\n function safeApproveAllTokens() external override {\\n /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits\\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\\n }\\n\\n /**\\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\\n * unwrapping WETH just before staking it to the validator\\n * @dev don't want to receive donations from anyone else as this will\\n * mess with the accounting of the consensus rewards and validator full withdrawals\\n */\\n receive() external payable {\\n require(\\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\\n \\\"Eth not from allowed contracts\\\"\\n );\\n }\\n\\n /***************************************\\n Internal functions\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address) internal override {}\\n\\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\\n /// Will revert if the strategy is paused for accounting.\\n function _collectRewardTokens() internal override whenNotPaused {\\n // collect ETH from execution rewards from the fee accumulator\\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\\n .collect();\\n\\n // total ETH rewards to be harvested = execution rewards + consensus rewards\\n uint256 ethRewards = executionRewards + consensusRewards;\\n\\n require(\\n address(this).balance >= ethRewards,\\n \\\"Insufficient eth balance\\\"\\n );\\n\\n if (ethRewards > 0) {\\n // reset the counter keeping track of beacon chain consensus rewards\\n consensusRewards = 0;\\n\\n // Convert ETH rewards to WETH\\n IWETH9(WETH).deposit{ value: ethRewards }();\\n\\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\\n }\\n }\\n\\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\\n function _wethWithdrawnToVault(uint256 _amount) internal override {\\n emit Withdrawal(WETH, address(0), _amount);\\n }\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal override {\\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\\n * depositedWethAccountedFor is smaller than the _amount.\\n *\\n * The reason this is required is that a malicious actor could sent WETH directly\\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\\n * be deducted so much that it would be negative.\\n */\\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\\n depositedWethAccountedFor -= deductAmount;\\n }\\n}\\n\",\"keccak256\":\"0xd8c9e9fcf4f44909a7f9a04ec58ca6134ac0a3fe0ac4f59c970116c028bcc2d3\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorAccountant.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { ValidatorRegistrator } from \\\"./ValidatorRegistrator.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\n\\n/// @title Validator Accountant\\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\\n/// Full withdrawals are from exited validators.\\n/// @author Origin Protocol Inc\\nabstract contract ValidatorAccountant is ValidatorRegistrator {\\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\\n\\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\\n uint256 public consensusRewards;\\n\\n /// @notice start of fuse interval\\n uint256 public fuseIntervalStart;\\n /// @notice end of fuse interval\\n uint256 public fuseIntervalEnd;\\n /// @notice last block number manuallyFixAccounting has been called\\n uint256 public lastFixAccountingBlockNumber;\\n\\n uint256[49] private __gap;\\n\\n event FuseIntervalUpdated(uint256 start, uint256 end);\\n event AccountingFullyWithdrawnValidator(\\n uint256 noOfValidators,\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingValidatorSlashed(\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingConsensusRewards(uint256 amount);\\n\\n event AccountingManuallyFixed(\\n int256 validatorsDelta,\\n int256 consensusRewardsDelta,\\n uint256 wethToVault\\n );\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n )\\n ValidatorRegistrator(\\n _wethAddress,\\n _vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {}\\n\\n /// @notice set fuse interval values\\n function setFuseInterval(\\n uint256 _fuseIntervalStart,\\n uint256 _fuseIntervalEnd\\n ) external onlyGovernor {\\n require(\\n _fuseIntervalStart < _fuseIntervalEnd &&\\n _fuseIntervalEnd < 32 ether &&\\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\\n \\\"Incorrect fuse interval\\\"\\n );\\n\\n fuseIntervalStart = _fuseIntervalStart;\\n fuseIntervalEnd = _fuseIntervalEnd;\\n\\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\\n }\\n\\n /* solhint-disable max-line-length */\\n /// This notion page offers a good explanation of how the accounting functions\\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\\n /// the accounting function will treat that as a validator slashing.\\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\\n /// accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\\n /// for now.\\n /// @return accountingValid true if accounting was successful, false if fuse is blown\\n /* solhint-enable max-line-length */\\n function doAccounting()\\n external\\n onlyRegistrator\\n whenNotPaused\\n returns (bool accountingValid)\\n {\\n // pause the accounting on failure\\n accountingValid = _doAccounting(true);\\n }\\n\\n // slither-disable-start reentrancy-eth\\n function _doAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n if (address(this).balance < consensusRewards) {\\n return _failAccounting(pauseOnFail);\\n }\\n\\n // Calculate all the new ETH that has been swept to the contract since the last accounting\\n uint256 newSweptETH = address(this).balance - consensusRewards;\\n accountingValid = true;\\n\\n // send the ETH that is from fully withdrawn validators to the Vault\\n if (newSweptETH >= FULL_STAKE) {\\n uint256 fullyWithdrawnValidators;\\n // explicitly cast to uint256 as we want to round to a whole number of validators\\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\\n activeDepositedValidators -= fullyWithdrawnValidators;\\n\\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\\n IWETH9(WETH).deposit{ value: wethToVault }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\\n _wethWithdrawnToVault(wethToVault);\\n\\n emit AccountingFullyWithdrawnValidator(\\n fullyWithdrawnValidators,\\n activeDepositedValidators,\\n wethToVault\\n );\\n }\\n\\n uint256 ethRemaining = address(this).balance - consensusRewards;\\n // should be less than a whole validator stake\\n require(ethRemaining < FULL_STAKE, \\\"Unexpected accounting\\\");\\n\\n // If no Beacon chain consensus rewards swept\\n if (ethRemaining == 0) {\\n // do nothing\\n return accountingValid;\\n } else if (ethRemaining < fuseIntervalStart) {\\n // Beacon chain consensus rewards swept (partial validator withdrawals)\\n // solhint-disable-next-line reentrancy\\n consensusRewards += ethRemaining;\\n emit AccountingConsensusRewards(ethRemaining);\\n } else if (ethRemaining > fuseIntervalEnd) {\\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\\n IWETH9(WETH).deposit{ value: ethRemaining }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\\n activeDepositedValidators -= 1;\\n\\n _wethWithdrawnToVault(ethRemaining);\\n\\n emit AccountingValidatorSlashed(\\n activeDepositedValidators,\\n ethRemaining\\n );\\n }\\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\\n else {\\n return _failAccounting(pauseOnFail);\\n }\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @dev pause any further accounting if required and return false\\n function _failAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n // pause if not already\\n if (pauseOnFail) {\\n _pause();\\n }\\n // fail the accounting\\n accountingValid = false;\\n }\\n\\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\\n /// to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval\\n /// we need to reduce the amount of active deposited validators and immediately send WETH\\n /// to the vault, so it doesn't interfere with further accounting.\\n function manuallyFixAccounting(\\n int256 _validatorsDelta,\\n int256 _consensusRewardsDelta,\\n uint256 _ethToVaultAmount\\n ) external onlyStrategist whenPaused {\\n require(\\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\\n block.number,\\n \\\"Fix accounting called too soon\\\"\\n );\\n require(\\n _validatorsDelta >= -3 &&\\n _validatorsDelta <= 3 &&\\n // new value must be positive\\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\\n \\\"Invalid validatorsDelta\\\"\\n );\\n require(\\n _consensusRewardsDelta >= -332 ether &&\\n _consensusRewardsDelta <= 332 ether &&\\n // new value must be positive\\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\\n \\\"Invalid consensusRewardsDelta\\\"\\n );\\n require(_ethToVaultAmount <= 32 ether * 3, \\\"Invalid wethToVaultAmount\\\");\\n\\n activeDepositedValidators = uint256(\\n int256(activeDepositedValidators) + _validatorsDelta\\n );\\n consensusRewards = uint256(\\n int256(consensusRewards) + _consensusRewardsDelta\\n );\\n lastFixAccountingBlockNumber = block.number;\\n if (_ethToVaultAmount > 0) {\\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\\n _wethWithdrawnToVault(_ethToVaultAmount);\\n }\\n\\n emit AccountingManuallyFixed(\\n _validatorsDelta,\\n _consensusRewardsDelta,\\n _ethToVaultAmount\\n );\\n\\n // rerun the accounting to see if it has now been fixed.\\n // Do not pause the accounting on failure as it is already paused\\n require(_doAccounting(false), \\\"Fuse still blown\\\");\\n\\n // unpause since doAccounting was successful\\n _unpause();\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xb2d5b80af020aa886d5c246a7050c0a3a5714d9113ba9ee0e7f90bc36c755c6e\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorRegistrator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Governable } from \\\"../../governance/Governable.sol\\\";\\nimport { IDepositContract } from \\\"../../interfaces/IDepositContract.sol\\\";\\nimport { IVault } from \\\"../../interfaces/IVault.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { ISSVNetwork, Cluster } from \\\"../../interfaces/ISSVNetwork.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/**\\n * @title Registrator of the validators\\n * @notice This contract implements all the required functionality to register, exit and remove validators.\\n * @author Origin Protocol Inc\\n */\\nabstract contract ValidatorRegistrator is Governable, Pausable {\\n /// @notice The maximum amount of ETH that can be staked by a validator\\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\\n uint256 public constant FULL_STAKE = 32 ether;\\n\\n /// @notice The address of the Wrapped ETH (WETH) token contract\\n address public immutable WETH;\\n /// @notice The address of the beacon chain deposit contract\\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\\n /// @notice The address of the SSV Network contract used to interface with\\n address public immutable SSV_NETWORK;\\n /// @notice Address of the OETH Vault proxy contract\\n address public immutable VAULT_ADDRESS;\\n /// @notice Maximum number of validators that can be registered in this strategy\\n uint256 public immutable MAX_VALIDATORS;\\n\\n /// @notice Address of the registrator - allowed to register, exit and remove validators\\n address public validatorRegistrator;\\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\\n /// to a validator happens this number increases, when a validator exit is detected this number\\n /// decreases.\\n uint256 public activeDepositedValidators;\\n /// @notice State of the validators keccak256(pubKey) => state\\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\\n address public stakingMonitor;\\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\\n /// and the governor needs to approve further staking\\n uint256 public stakeETHThreshold;\\n /// @notice Amount of ETH that can has been staked since the last governor approval.\\n uint256 public stakeETHTally;\\n // For future use\\n uint256[47] private __gap;\\n\\n enum VALIDATOR_STATE {\\n NON_REGISTERED, // validator is not registered on the SSV network\\n REGISTERED, // validator is registered on the SSV network\\n STAKED, // validator has funds staked\\n EXITING, // exit message has been posted and validator is in the process of exiting\\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\\n }\\n\\n event RegistratorChanged(address indexed newAddress);\\n event StakingMonitorChanged(address indexed newAddress);\\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\\n event SSVValidatorRegistered(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitInitiated(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitCompleted(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event StakeETHThresholdChanged(uint256 amount);\\n event StakeETHTallyReset();\\n\\n /// @dev Throws if called by any account other than the Registrator\\n modifier onlyRegistrator() {\\n require(\\n msg.sender == validatorRegistrator,\\n \\\"Caller is not the Registrator\\\"\\n );\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Staking monitor\\n modifier onlyStakingMonitor() {\\n require(msg.sender == stakingMonitor, \\\"Caller is not the Monitor\\\");\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Strategist\\n modifier onlyStrategist() {\\n require(\\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\\n \\\"Caller is not the Strategist\\\"\\n );\\n _;\\n }\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n ) {\\n WETH = _wethAddress;\\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\\n SSV_NETWORK = _ssvNetwork;\\n VAULT_ADDRESS = _vaultAddress;\\n MAX_VALIDATORS = _maxValidators;\\n }\\n\\n /// @notice Set the address of the registrator which can register, exit and remove validators\\n function setRegistrator(address _address) external onlyGovernor {\\n validatorRegistrator = _address;\\n emit RegistratorChanged(_address);\\n }\\n\\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\\n function setStakingMonitor(address _address) external onlyGovernor {\\n stakingMonitor = _address;\\n emit StakingMonitorChanged(_address);\\n }\\n\\n /// @notice Set the amount of ETH that can be staked before staking monitor\\n // needs to a approve further staking by resetting the stake ETH tally\\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\\n stakeETHThreshold = _amount;\\n emit StakeETHThresholdChanged(_amount);\\n }\\n\\n /// @notice Reset the stakeETHTally\\n function resetStakeETHTally() external onlyStakingMonitor {\\n stakeETHTally = 0;\\n emit StakeETHTallyReset();\\n }\\n\\n /// @notice Stakes WETH to the node validators\\n /// @param validators A list of validator data needed to stake.\\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\\n /// Only the registrator can call this function.\\n // slither-disable-start reentrancy-eth\\n function stakeEth(ValidatorStakeData[] calldata validators)\\n external\\n onlyRegistrator\\n whenNotPaused\\n {\\n uint256 requiredETH = validators.length * FULL_STAKE;\\n\\n // Check there is enough WETH from the deposits sitting in this strategy contract\\n require(\\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\\n \\\"Insufficient WETH\\\"\\n );\\n require(\\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\\n \\\"Max validators reached\\\"\\n );\\n\\n require(\\n stakeETHTally + requiredETH <= stakeETHThreshold,\\n \\\"Staking ETH over threshold\\\"\\n );\\n stakeETHTally += requiredETH;\\n\\n // Convert required ETH from WETH\\n IWETH9(WETH).withdraw(requiredETH);\\n _wethWithdrawn(requiredETH);\\n\\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\\n * can sweep funds to.\\n * bytes11(0) to fill up the required zeros\\n * remaining bytes20 are for the address\\n */\\n bytes memory withdrawalCredentials = abi.encodePacked(\\n bytes1(0x01),\\n bytes11(0),\\n address(this)\\n );\\n\\n // For each validator\\n for (uint256 i = 0; i < validators.length; ++i) {\\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n\\n require(\\n currentState == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not registered\\\"\\n );\\n\\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\\n value: FULL_STAKE\\n }(\\n validators[i].pubkey,\\n withdrawalCredentials,\\n validators[i].signature,\\n validators[i].depositDataRoot\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\\n\\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\\n }\\n // save gas by changing this storage variable only once rather each time in the loop.\\n activeDepositedValidators += validators.length;\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @notice Registers a new validator in the SSV Cluster.\\n /// Only the registrator can call this function.\\n /// @param publicKeys The public keys of the validators\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param sharesData The shares data for each validator\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function registerSsvValidators(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 ssvAmount,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n require(\\n publicKeys.length == sharesData.length,\\n \\\"Pubkey sharesData mismatch\\\"\\n );\\n // Check each public key has not already been used\\n bytes32 pubKeyHash;\\n VALIDATOR_STATE currentState;\\n for (uint256 i = 0; i < publicKeys.length; ++i) {\\n pubKeyHash = keccak256(publicKeys[i]);\\n currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.NON_REGISTERED,\\n \\\"Validator already registered\\\"\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\\n\\n emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds);\\n }\\n\\n ISSVNetwork(SSV_NETWORK).bulkRegisterValidator(\\n publicKeys,\\n operatorIds,\\n sharesData,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Exit a validator from the Beacon chain.\\n /// The staked ETH will eventually swept to this native staking strategy.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n // slither-disable-start reentrancy-no-eth\\n function exitSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(currentState == VALIDATOR_STATE.STAKED, \\\"Validator not staked\\\");\\n\\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\\n\\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Remove a validator from the SSV Cluster.\\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function removeSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.EXITING,\\n \\\"Validator not exiting\\\"\\n );\\n\\n ISSVNetwork(SSV_NETWORK).removeValidator(\\n publicKey,\\n operatorIds,\\n cluster\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\\n\\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\\n /// uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service\\n /// that tries to top up SSV tokens.\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n function depositSSV(\\n uint64[] memory operatorIds,\\n uint256 ssvAmount,\\n Cluster memory cluster\\n ) external onlyStrategist {\\n ISSVNetwork(SSV_NETWORK).deposit(\\n address(this),\\n operatorIds,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xedd689cb5b5e3b1ebb3d19536a3625428b37f813e79070b327e684842aaf6f4d\",\"license\":\"MIT\"},\"contracts/token/OUSD.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Token Contract\\n * @dev ERC20 compatible contract for OUSD\\n * @dev Implements an elastic supply\\n * @author Origin Protocol Inc\\n */\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { InitializableERC20Detailed } from \\\"../utils/InitializableERC20Detailed.sol\\\";\\nimport { StableMath } from \\\"../utils/StableMath.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\n\\n/**\\n * NOTE that this is an ERC20 token but the invariant that the sum of\\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\\n * rebasing design. Any integrations with OUSD should be aware.\\n */\\n\\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\\n using SafeMath for uint256;\\n using StableMath for uint256;\\n\\n event TotalSupplyUpdatedHighres(\\n uint256 totalSupply,\\n uint256 rebasingCredits,\\n uint256 rebasingCreditsPerToken\\n );\\n event AccountRebasingEnabled(address account);\\n event AccountRebasingDisabled(address account);\\n\\n enum RebaseOptions {\\n NotSet,\\n OptOut,\\n OptIn\\n }\\n\\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\\n uint256 public _totalSupply;\\n mapping(address => mapping(address => uint256)) private _allowances;\\n address public vaultAddress = address(0);\\n mapping(address => uint256) private _creditBalances;\\n uint256 private _rebasingCredits;\\n uint256 private _rebasingCreditsPerToken;\\n // Frozen address/credits are non rebasing (value is held in contracts which\\n // do not receive yield unless they explicitly opt in)\\n uint256 public nonRebasingSupply;\\n mapping(address => uint256) public nonRebasingCreditsPerToken;\\n mapping(address => RebaseOptions) public rebaseState;\\n mapping(address => uint256) public isUpgraded;\\n\\n uint256 private constant RESOLUTION_INCREASE = 1e9;\\n\\n function initialize(\\n string calldata _nameArg,\\n string calldata _symbolArg,\\n address _vaultAddress,\\n uint256 _initialCreditsPerToken\\n ) external onlyGovernor initializer {\\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\\n _rebasingCreditsPerToken = _initialCreditsPerToken;\\n vaultAddress = _vaultAddress;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault contract\\n */\\n modifier onlyVault() {\\n require(vaultAddress == msg.sender, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @return The total supply of OUSD.\\n */\\n function totalSupply() public view override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @return Low resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerToken() public view returns (uint256) {\\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return Low resolution total number of rebasing credits\\n */\\n function rebasingCredits() public view returns (uint256) {\\n return _rebasingCredits / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return High resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\\n return _rebasingCreditsPerToken;\\n }\\n\\n /**\\n * @return High resolution total number of rebasing credits\\n */\\n function rebasingCreditsHighres() public view returns (uint256) {\\n return _rebasingCredits;\\n }\\n\\n /**\\n * @dev Gets the balance of the specified address.\\n * @param _account Address to query the balance of.\\n * @return A uint256 representing the amount of base units owned by the\\n * specified address.\\n */\\n function balanceOf(address _account)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n if (_creditBalances[_account] == 0) return 0;\\n return\\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @dev Backwards compatible with old low res credits per token.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256) Credit balance and credits per token of the\\n * address\\n */\\n function creditsBalanceOf(address _account)\\n public\\n view\\n returns (uint256, uint256)\\n {\\n uint256 cpt = _creditsPerToken(_account);\\n if (cpt == 1e27) {\\n // For a period before the resolution upgrade, we created all new\\n // contract accounts at high resolution. Since they are not changing\\n // as a result of this upgrade, we will return their true values\\n return (_creditBalances[_account], cpt);\\n } else {\\n return (\\n _creditBalances[_account] / RESOLUTION_INCREASE,\\n cpt / RESOLUTION_INCREASE\\n );\\n }\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\\n * address, and isUpgraded\\n */\\n function creditsBalanceOfHighres(address _account)\\n public\\n view\\n returns (\\n uint256,\\n uint256,\\n bool\\n )\\n {\\n return (\\n _creditBalances[_account],\\n _creditsPerToken(_account),\\n isUpgraded[_account] == 1\\n );\\n }\\n\\n /**\\n * @dev Transfer tokens to a specified address.\\n * @param _to the address to transfer to.\\n * @param _value the amount to be transferred.\\n * @return true on success.\\n */\\n function transfer(address _to, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(\\n _value <= balanceOf(msg.sender),\\n \\\"Transfer greater than balance\\\"\\n );\\n\\n _executeTransfer(msg.sender, _to, _value);\\n\\n emit Transfer(msg.sender, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Transfer tokens from one address to another.\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value The amount of tokens to be transferred.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _value\\n ) public override returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(_value <= balanceOf(_from), \\\"Transfer greater than balance\\\");\\n\\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\\n _value\\n );\\n\\n _executeTransfer(_from, _to, _value);\\n\\n emit Transfer(_from, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Update the count of non rebasing credits in response to a transfer\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value Amount of OUSD to transfer\\n */\\n function _executeTransfer(\\n address _from,\\n address _to,\\n uint256 _value\\n ) internal {\\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\\n\\n // Credits deducted and credited might be different due to the\\n // differing creditsPerToken used by each account\\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\\n\\n _creditBalances[_from] = _creditBalances[_from].sub(\\n creditsDeducted,\\n \\\"Transfer amount exceeds balance\\\"\\n );\\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\\n\\n if (isNonRebasingTo && !isNonRebasingFrom) {\\n // Transfer to non-rebasing account from rebasing account, credits\\n // are removed from the non rebasing tally\\n nonRebasingSupply = nonRebasingSupply.add(_value);\\n // Update rebasingCredits by subtracting the deducted amount\\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\\n // Transfer to rebasing account from non-rebasing account\\n // Decreasing non-rebasing credits by the amount that was sent\\n nonRebasingSupply = nonRebasingSupply.sub(_value);\\n // Update rebasingCredits by adding the credited amount\\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\\n }\\n }\\n\\n /**\\n * @dev Function to check the amount of tokens that _owner has allowed to\\n * `_spender`.\\n * @param _owner The address which owns the funds.\\n * @param _spender The address which will spend the funds.\\n * @return The number of tokens still available for the _spender.\\n */\\n function allowance(address _owner, address _spender)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev Approve the passed address to spend the specified amount of tokens\\n * on behalf of msg.sender. This method is included for ERC20\\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\\n * used instead.\\n *\\n * Changing an allowance with this method brings the risk that someone\\n * may transfer both the old and the new allowance - if they are both\\n * greater than zero - if a transfer transaction is mined before the\\n * later approve() call is mined.\\n * @param _spender The address which will spend the funds.\\n * @param _value The amount of tokens to be spent.\\n */\\n function approve(address _spender, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _value;\\n emit Approval(msg.sender, _spender, _value);\\n return true;\\n }\\n\\n /**\\n * @dev Increase the amount of tokens that an owner has allowed to\\n * `_spender`.\\n * This method should be used instead of approve() to avoid the double\\n * approval vulnerability described above.\\n * @param _spender The address which will spend the funds.\\n * @param _addedValue The amount of tokens to increase the allowance by.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue)\\n public\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\\n .add(_addedValue);\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Decrease the amount of tokens that an owner has allowed to\\n `_spender`.\\n * @param _spender The address which will spend the funds.\\n * @param _subtractedValue The amount of tokens to decrease the allowance\\n * by.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\\n public\\n returns (bool)\\n {\\n uint256 oldValue = _allowances[msg.sender][_spender];\\n if (_subtractedValue >= oldValue) {\\n _allowances[msg.sender][_spender] = 0;\\n } else {\\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\\n }\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Mints new tokens, increasing totalSupply.\\n */\\n function mint(address _account, uint256 _amount) external onlyVault {\\n _mint(_account, _amount);\\n }\\n\\n /**\\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Mint to the zero address\\\");\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\\n\\n // If the account is non rebasing and doesn't have a set creditsPerToken\\n // then set it i.e. this is a mint from a fresh contract\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.add(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.add(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.add(_amount);\\n\\n require(_totalSupply < MAX_SUPPLY, \\\"Max supply\\\");\\n\\n emit Transfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Burns tokens, decreasing totalSupply.\\n */\\n function burn(address account, uint256 amount) external onlyVault {\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Burn from the zero address\\\");\\n if (_amount == 0) {\\n return;\\n }\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n uint256 currentCredits = _creditBalances[_account];\\n\\n // Remove the credits, burning rounding errors\\n if (\\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\\n ) {\\n // Handle dust from rounding\\n _creditBalances[_account] = 0;\\n } else if (currentCredits > creditAmount) {\\n _creditBalances[_account] = _creditBalances[_account].sub(\\n creditAmount\\n );\\n } else {\\n revert(\\\"Remove exceeds balance\\\");\\n }\\n\\n // Remove from the credit tallies and non-rebasing supply\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.sub(_amount);\\n\\n emit Transfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Get the credits per token for an account. Returns a fixed amount\\n * if the account is non-rebasing.\\n * @param _account Address of the account.\\n */\\n function _creditsPerToken(address _account)\\n internal\\n view\\n returns (uint256)\\n {\\n if (nonRebasingCreditsPerToken[_account] != 0) {\\n return nonRebasingCreditsPerToken[_account];\\n } else {\\n return _rebasingCreditsPerToken;\\n }\\n }\\n\\n /**\\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\\n * Also, ensure contracts are non-rebasing if they have not opted in.\\n * @param _account Address of the account.\\n */\\n function _isNonRebasingAccount(address _account) internal returns (bool) {\\n bool isContract = Address.isContract(_account);\\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\\n _ensureRebasingMigration(_account);\\n }\\n return nonRebasingCreditsPerToken[_account] > 0;\\n }\\n\\n /**\\n * @dev Ensures internal account for rebasing and non-rebasing credits and\\n * supply is updated following deployment of frozen yield change.\\n */\\n function _ensureRebasingMigration(address _account) internal {\\n if (nonRebasingCreditsPerToken[_account] == 0) {\\n emit AccountRebasingDisabled(_account);\\n if (_creditBalances[_account] == 0) {\\n // Since there is no existing balance, we can directly set to\\n // high resolution, and do not have to do any other bookkeeping\\n nonRebasingCreditsPerToken[_account] = 1e27;\\n } else {\\n // Migrate an existing account:\\n\\n // Set fixed credits per token for this account\\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\\n // Update non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\\n // Update credit tallies\\n _rebasingCredits = _rebasingCredits.sub(\\n _creditBalances[_account]\\n );\\n }\\n }\\n }\\n\\n /**\\n * @notice Enable rebasing for an account.\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n * @param _account Address of the account.\\n */\\n function governanceRebaseOptIn(address _account)\\n public\\n nonReentrant\\n onlyGovernor\\n {\\n _rebaseOptIn(_account);\\n }\\n\\n /**\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n */\\n function rebaseOptIn() public nonReentrant {\\n _rebaseOptIn(msg.sender);\\n }\\n\\n function _rebaseOptIn(address _account) internal {\\n require(_isNonRebasingAccount(_account), \\\"Account has not opted out\\\");\\n\\n // Convert balance into the same amount at the current exchange rate\\n uint256 newCreditBalance = _creditBalances[_account]\\n .mul(_rebasingCreditsPerToken)\\n .div(_creditsPerToken(_account));\\n\\n // Decreasing non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\\n\\n _creditBalances[_account] = newCreditBalance;\\n\\n // Increase rebasing credits, totalSupply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\\n\\n rebaseState[_account] = RebaseOptions.OptIn;\\n\\n // Delete any fixed credits per token\\n delete nonRebasingCreditsPerToken[_account];\\n emit AccountRebasingEnabled(_account);\\n }\\n\\n /**\\n * @dev Explicitly mark that an address is non-rebasing.\\n */\\n function rebaseOptOut() public nonReentrant {\\n require(!_isNonRebasingAccount(msg.sender), \\\"Account has not opted in\\\");\\n\\n // Increase non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\\n // Set fixed credits per token\\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\\n\\n // Decrease rebasing credits, total supply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\\n\\n // Mark explicitly opted out of rebasing\\n rebaseState[msg.sender] = RebaseOptions.OptOut;\\n emit AccountRebasingDisabled(msg.sender);\\n }\\n\\n /**\\n * @dev Modify the supply without minting new tokens. This uses a change in\\n * the exchange rate between \\\"credits\\\" and OUSD tokens to change balances.\\n * @param _newTotalSupply New total supply of OUSD.\\n */\\n function changeSupply(uint256 _newTotalSupply)\\n external\\n onlyVault\\n nonReentrant\\n {\\n require(_totalSupply > 0, \\\"Cannot increase 0 supply\\\");\\n\\n if (_totalSupply == _newTotalSupply) {\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n return;\\n }\\n\\n _totalSupply = _newTotalSupply > MAX_SUPPLY\\n ? MAX_SUPPLY\\n : _newTotalSupply;\\n\\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\\n _totalSupply.sub(nonRebasingSupply)\\n );\\n\\n require(_rebasingCreditsPerToken > 0, \\\"Invalid change in supply\\\");\\n\\n _totalSupply = _rebasingCredits\\n .divPrecisely(_rebasingCreditsPerToken)\\n .add(nonRebasingSupply);\\n\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n }\\n}\\n\",\"keccak256\":\"0x2dc66b1ba02716d64eb47dd9117fda62650d8b57669e6c351437e0ad29ad5f19\",\"license\":\"MIT\"},\"contracts/utils/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IBasicToken } from \\\"../interfaces/IBasicToken.sol\\\";\\n\\nlibrary Helpers {\\n /**\\n * @notice Fetch the `symbol()` from an ERC20 token\\n * @dev Grabs the `symbol()` from a contract\\n * @param _token Address of the ERC20 token\\n * @return string Symbol of the ERC20 token\\n */\\n function getSymbol(address _token) internal view returns (string memory) {\\n string memory symbol = IBasicToken(_token).symbol();\\n return symbol;\\n }\\n\\n /**\\n * @notice Fetch the `decimals()` from an ERC20 token\\n * @dev Grabs the `decimals()` from a contract and fails if\\n * the decimal value does not live within a certain range\\n * @param _token Address of the ERC20 token\\n * @return uint256 Decimals of the ERC20 token\\n */\\n function getDecimals(address _token) internal view returns (uint256) {\\n uint256 decimals = IBasicToken(_token).decimals();\\n require(\\n decimals >= 4 && decimals <= 18,\\n \\\"Token must have sufficient decimal places\\\"\\n );\\n\\n return decimals;\\n }\\n}\\n\",\"keccak256\":\"0x108b7a69e0140da0072ca18f90a03a3340574400f81aa6076cd2cccdf13699c2\",\"license\":\"MIT\"},\"contracts/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract any contracts that need to initialize state after deployment.\\n * @author Origin Protocol Inc\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(\\n initializing || !initialized,\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n\\n bool isTopLevelCall = !initializing;\\n if (isTopLevelCall) {\\n initializing = true;\\n initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n initializing = false;\\n }\\n }\\n\\n uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0xaadbcc138114afed4af4f353c2ced2916e6ee14be91434789187f192caf0d786\",\"license\":\"MIT\"},\"contracts/utils/InitializableAbstractStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract for vault strategies.\\n * @author Origin Protocol Inc\\n */\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { IVault } from \\\"../interfaces/IVault.sol\\\";\\n\\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event PTokenAdded(address indexed _asset, address _pToken);\\n event PTokenRemoved(address indexed _asset, address _pToken);\\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\\n event RewardTokenCollected(\\n address recipient,\\n address rewardToken,\\n uint256 amount\\n );\\n event RewardTokenAddressesUpdated(\\n address[] _oldAddresses,\\n address[] _newAddresses\\n );\\n event HarvesterAddressesUpdated(\\n address _oldHarvesterAddress,\\n address _newHarvesterAddress\\n );\\n\\n /// @notice Address of the underlying platform\\n address public immutable platformAddress;\\n /// @notice Address of the OToken vault\\n address public immutable vaultAddress;\\n\\n /// @dev Replaced with an immutable variable\\n // slither-disable-next-line constable-states\\n address private _deprecated_platformAddress;\\n\\n /// @dev Replaced with an immutable\\n // slither-disable-next-line constable-states\\n address private _deprecated_vaultAddress;\\n\\n /// @notice asset => pToken (Platform Specific Token Address)\\n mapping(address => address) public assetToPToken;\\n\\n /// @notice Full list of all assets supported by the strategy\\n address[] internal assetsMapped;\\n\\n // Deprecated: Reward token address\\n // slither-disable-next-line constable-states\\n address private _deprecated_rewardTokenAddress;\\n\\n // Deprecated: now resides in Harvester's rewardTokenConfigs\\n // slither-disable-next-line constable-states\\n uint256 private _deprecated_rewardLiquidationThreshold;\\n\\n /// @notice Address of the Harvester contract allowed to collect reward tokens\\n address public harvesterAddress;\\n\\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\\n address[] public rewardTokenAddresses;\\n\\n /* Reserved for future expansion. Used to be 100 storage slots\\n * and has decreased to accommodate:\\n * - harvesterAddress\\n * - rewardTokenAddresses\\n */\\n int256[98] private _reserved;\\n\\n struct BaseStrategyConfig {\\n address platformAddress; // Address of the underlying platform\\n address vaultAddress; // Address of the OToken's Vault\\n }\\n\\n /**\\n * @param _config The platform and OToken vault addresses\\n */\\n constructor(BaseStrategyConfig memory _config) {\\n platformAddress = _config.platformAddress;\\n vaultAddress = _config.vaultAddress;\\n }\\n\\n /**\\n * @dev Internal initialize function, to set up initial internal state\\n * @param _rewardTokenAddresses Address of reward token for platform\\n * @param _assets Addresses of initial supported assets\\n * @param _pTokens Platform Token corresponding addresses\\n */\\n function _initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) internal {\\n rewardTokenAddresses = _rewardTokenAddresses;\\n\\n uint256 assetCount = _assets.length;\\n require(assetCount == _pTokens.length, \\\"Invalid input arrays\\\");\\n for (uint256 i = 0; i < assetCount; ++i) {\\n _setPTokenAddress(_assets[i], _pTokens[i]);\\n }\\n }\\n\\n /**\\n * @notice Collect accumulated reward token and send to Vault.\\n */\\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\\n _collectRewardTokens();\\n }\\n\\n /**\\n * @dev Default implementation that transfers reward tokens to the Harvester\\n * Implementing strategies need to add custom logic to collect the rewards.\\n */\\n function _collectRewardTokens() internal virtual {\\n uint256 rewardTokenCount = rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\\n uint256 balance = rewardToken.balanceOf(address(this));\\n if (balance > 0) {\\n emit RewardTokenCollected(\\n harvesterAddress,\\n address(rewardToken),\\n balance\\n );\\n rewardToken.safeTransfer(harvesterAddress, balance);\\n }\\n }\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault.\\n */\\n modifier onlyVault() {\\n require(msg.sender == vaultAddress, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Harvester.\\n */\\n modifier onlyHarvester() {\\n require(msg.sender == harvesterAddress, \\\"Caller is not the Harvester\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault or Governor.\\n */\\n modifier onlyVaultOrGovernor() {\\n require(\\n msg.sender == vaultAddress || msg.sender == governor(),\\n \\\"Caller is not the Vault or Governor\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\\n */\\n modifier onlyVaultOrGovernorOrStrategist() {\\n require(\\n msg.sender == vaultAddress ||\\n msg.sender == governor() ||\\n msg.sender == IVault(vaultAddress).strategistAddr(),\\n \\\"Caller is not the Vault, Governor, or Strategist\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\\n * @param _rewardTokenAddresses Array of reward token addresses\\n */\\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\\n external\\n onlyGovernor\\n {\\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n require(\\n _rewardTokenAddresses[i] != address(0),\\n \\\"Can not set an empty address as a reward token\\\"\\n );\\n }\\n\\n emit RewardTokenAddressesUpdated(\\n rewardTokenAddresses,\\n _rewardTokenAddresses\\n );\\n rewardTokenAddresses = _rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Get the reward token addresses.\\n * @return address[] the reward token addresses.\\n */\\n function getRewardTokenAddresses()\\n external\\n view\\n returns (address[] memory)\\n {\\n return rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * This method can only be called by the system Governor\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function setPTokenAddress(address _asset, address _pToken)\\n external\\n virtual\\n onlyGovernor\\n {\\n _setPTokenAddress(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Remove a supported asset by passing its index.\\n * This method can only be called by the system Governor\\n * @param _assetIndex Index of the asset to be removed\\n */\\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\\n require(_assetIndex < assetsMapped.length, \\\"Invalid index\\\");\\n address asset = assetsMapped[_assetIndex];\\n address pToken = assetToPToken[asset];\\n\\n if (_assetIndex < assetsMapped.length - 1) {\\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\\n }\\n assetsMapped.pop();\\n assetToPToken[asset] = address(0);\\n\\n emit PTokenRemoved(asset, pToken);\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * Add to internal mappings and execute the platform specific,\\n * abstract method `_abstractSetPToken`\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function _setPTokenAddress(address _asset, address _pToken) internal {\\n require(assetToPToken[_asset] == address(0), \\\"pToken already set\\\");\\n require(\\n _asset != address(0) && _pToken != address(0),\\n \\\"Invalid addresses\\\"\\n );\\n\\n assetToPToken[_asset] = _pToken;\\n assetsMapped.push(_asset);\\n\\n emit PTokenAdded(_asset, _pToken);\\n\\n _abstractSetPToken(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\\n * strategy contracts, i.e. mistaken sends.\\n * @param _asset Address for the asset\\n * @param _amount Amount of the asset to transfer\\n */\\n function transferToken(address _asset, uint256 _amount)\\n public\\n onlyGovernor\\n {\\n require(!supportsAsset(_asset), \\\"Cannot transfer supported asset\\\");\\n IERC20(_asset).safeTransfer(governor(), _amount);\\n }\\n\\n /**\\n * @notice Set the Harvester contract that can collect rewards.\\n * @param _harvesterAddress Address of the harvester contract.\\n */\\n function setHarvesterAddress(address _harvesterAddress)\\n external\\n onlyGovernor\\n {\\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\\n harvesterAddress = _harvesterAddress;\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address _pToken)\\n internal\\n virtual;\\n\\n function safeApproveAllTokens() external virtual;\\n\\n /**\\n * @notice Deposit an amount of assets into the platform\\n * @param _asset Address for the asset\\n * @param _amount Units of asset to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external virtual;\\n\\n /**\\n * @notice Deposit all supported assets in this strategy contract to the platform\\n */\\n function depositAll() external virtual;\\n\\n /**\\n * @notice Withdraw an `amount` of assets from the platform and\\n * send to the `_recipient`.\\n * @param _recipient Address to which the asset should be sent\\n * @param _asset Address of the asset\\n * @param _amount Units of asset to withdraw\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external virtual;\\n\\n /**\\n * @notice Withdraw all supported assets from platform and\\n * sends to the OToken's Vault.\\n */\\n function withdrawAll() external virtual;\\n\\n /**\\n * @notice Get the total asset value held in the platform.\\n * This includes any interest that was generated since depositing.\\n * @param _asset Address of the asset\\n * @return balance Total value of the asset in the platform\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n virtual\\n returns (uint256 balance);\\n\\n /**\\n * @notice Check if an asset is supported.\\n * @param _asset Address of the asset\\n * @return bool Whether asset is supported\\n */\\n function supportsAsset(address _asset) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x5e17bb3db9f9e1014b7c5c836547f8fa81e02af7568c0bb8f2a2e0e7c2192db4\",\"license\":\"MIT\"},\"contracts/utils/InitializableERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/**\\n * @dev Optional functions from the ERC20 standard.\\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\\n * @author Origin Protocol Inc\\n */\\nabstract contract InitializableERC20Detailed is IERC20 {\\n // Storage gap to skip storage from prior to OUSD reset\\n uint256[100] private _____gap;\\n\\n string private _name;\\n string private _symbol;\\n uint8 private _decimals;\\n\\n /**\\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\\n * these values are immutable: they can only be set once during\\n * construction.\\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\\n */\\n function _initialize(\\n string memory nameArg,\\n string memory symbolArg,\\n uint8 decimalsArg\\n ) internal {\\n _name = nameArg;\\n _symbol = symbolArg;\\n _decimals = decimalsArg;\\n }\\n\\n /**\\n * @notice Returns the name of the token.\\n */\\n function name() public view returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @notice Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @notice Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view returns (uint8) {\\n return _decimals;\\n }\\n}\\n\",\"keccak256\":\"0xe35ac2d813a30d845a3b52bba72588d7e936c2b3f3373d15568c14db46aeed60\",\"license\":\"MIT\"},\"contracts/utils/StableMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n// Based on StableMath from Stability Labs Pty. Ltd.\\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\\n\\nlibrary StableMath {\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Scaling unit for use in specific calculations,\\n * where 1 * 10**18, or 1e18 represents a unit '1'\\n */\\n uint256 private constant FULL_SCALE = 1e18;\\n\\n /***************************************\\n Helpers\\n ****************************************/\\n\\n /**\\n * @dev Adjust the scale of an integer\\n * @param to Decimals to scale to\\n * @param from Decimals to scale from\\n */\\n function scaleBy(\\n uint256 x,\\n uint256 to,\\n uint256 from\\n ) internal pure returns (uint256) {\\n if (to > from) {\\n x = x.mul(10**(to - from));\\n } else if (to < from) {\\n // slither-disable-next-line divide-before-multiply\\n x = x.div(10**(from - to));\\n }\\n return x;\\n }\\n\\n /***************************************\\n Precise Arithmetic\\n ****************************************/\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\\n return mulTruncateScale(x, y, FULL_SCALE);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @param scale Scale unit\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncateScale(\\n uint256 x,\\n uint256 y,\\n uint256 scale\\n ) internal pure returns (uint256) {\\n // e.g. assume scale = fullScale\\n // z = 10e18 * 9e17 = 9e36\\n uint256 z = x.mul(y);\\n // return 9e36 / 1e18 = 9e18\\n return z.div(scale);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit, rounded up to the closest base unit.\\n */\\n function mulTruncateCeil(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e17 * 17268172638 = 138145381104e17\\n uint256 scaled = x.mul(y);\\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\\n return ceil.div(FULL_SCALE);\\n }\\n\\n /**\\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\\n * @param x Left hand input to division\\n * @param y Right hand input to division\\n * @return Result after multiplying the left operand by the scale, and\\n * executing the division on the right hand input.\\n */\\n function divPrecisely(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e18 * 1e18 = 8e36\\n uint256 z = x.mul(FULL_SCALE);\\n // e.g. 8e36 / 10e18 = 8e17\\n return z.div(y);\\n }\\n}\\n\",\"keccak256\":\"0x1eb49f6f79045d9e0a8e1dced8e01d9e559e5fac554dcbb53e43140b601b04e7\",\"license\":\"MIT\"},\"contracts/vault/VaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OToken VaultStorage contract\\n * @notice The VaultStorage contract defines the storage for the Vault contracts\\n * @author Origin Protocol Inc\\n */\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { IStrategy } from \\\"../interfaces/IStrategy.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { OUSD } from \\\"../token/OUSD.sol\\\";\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport \\\"../utils/Helpers.sol\\\";\\n\\ncontract VaultStorage is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event AssetSupported(address _asset);\\n event AssetRemoved(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Assets supported by the Vault, i.e. Stablecoins\\n enum UnitConversion {\\n DECIMALS,\\n GETEXCHANGERATE\\n }\\n // Changed to fit into a single storage slot so the decimals needs to be recached\\n struct Asset {\\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\\n // redeeming or checking balance of assets.\\n bool isSupported;\\n UnitConversion unitConversion;\\n uint8 decimals;\\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\\n // For example 40 == 0.4% slippage\\n uint16 allowedOracleSlippageBps;\\n }\\n\\n /// @dev mapping of supported vault assets to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Asset) internal assets;\\n /// @dev list of all assets supported by the vault.\\n // slither-disable-next-line uninitialized-state\\n address[] internal allAssets;\\n\\n // Strategies approved for use by the Vault\\n struct Strategy {\\n bool isSupported;\\n uint256 _deprecated; // Deprecated storage slot\\n }\\n /// @dev mapping of strategy contracts to their configiration\\n mapping(address => Strategy) internal strategies;\\n /// @dev list of all vault strategies\\n address[] internal allStrategies;\\n\\n /// @notice Address of the Oracle price provider contract\\n // slither-disable-next-line uninitialized-state\\n address public priceProvider;\\n /// @notice pause rebasing if true\\n bool public rebasePaused = false;\\n /// @notice pause operations that change the OToken supply.\\n /// eg mint, redeem, allocate, mint/burn for strategy\\n bool public capitalPaused = true;\\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\\n uint256 public redeemFeeBps;\\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\\n uint256 public vaultBuffer;\\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\\n uint256 public autoAllocateThreshold;\\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\\n uint256 public rebaseThreshold;\\n\\n /// @dev Address of the OToken token. eg OUSD or OETH.\\n // slither-disable-next-line uninitialized-state\\n OUSD internal oUSD;\\n\\n //keccak256(\\\"OUSD.vault.governor.admin.impl\\\");\\n bytes32 constant adminImplPosition =\\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\\n\\n // Address of the contract responsible for post rebase syncs with AMMs\\n address private _deprecated_rebaseHooksAddr = address(0);\\n\\n // Deprecated: Address of Uniswap\\n // slither-disable-next-line constable-states\\n address private _deprecated_uniswapAddr = address(0);\\n\\n /// @notice Address of the Strategist\\n address public strategistAddr = address(0);\\n\\n /// @notice Mapping of asset address to the Strategy that they should automatically\\n // be allocated to\\n // slither-disable-next-line uninitialized-state\\n mapping(address => address) public assetDefaultStrategies;\\n\\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\\n // slither-disable-next-line uninitialized-state\\n uint256 public maxSupplyDiff;\\n\\n /// @notice Trustee contract that can collect a percentage of yield\\n address public trusteeAddress;\\n\\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\\n uint256 public trusteeFeeBps;\\n\\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\\n address[] private _deprecated_swapTokens;\\n\\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\\n\\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\\n address public ousdMetaStrategy = address(0);\\n\\n /// @notice How much OTokens are currently minted by the strategy\\n int256 public netOusdMintedForStrategy = 0;\\n\\n /// @notice How much net total OTokens are allowed to be minted by all strategies\\n uint256 public netOusdMintForStrategyThreshold = 0;\\n\\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\\n\\n /// @notice Collateral swap configuration.\\n /// @dev is packed into a single storage slot to save gas.\\n struct SwapConfig {\\n // Contract that swaps the vault's collateral assets\\n address swapper;\\n // Max allowed percentage the total value can drop below the total supply in basis points.\\n // For example 100 == 1%\\n uint16 allowedUndervalueBps;\\n }\\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\\n\\n // For future use\\n uint256[50] private __gap;\\n\\n /**\\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\\n * @param newImpl address of the implementation\\n */\\n function setAdminImpl(address newImpl) external onlyGovernor {\\n require(\\n Address.isContract(newImpl),\\n \\\"new implementation is not a contract\\\"\\n );\\n bytes32 position = adminImplPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newImpl)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcbdb87104749e20c8411bc2acbfa0b7d48e876e3f4e1c46c9a7b00fcdb9722d9\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6101a06040523480156200001257600080fd5b50604051620053c9380380620053c9833981016040819052620000359162000144565b86868860200151838787848484848462000055336200011460201b60201c565b600080516020620053a9833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36033805460ff191690556001600160601b0319606095861b811660805292851b831660a05290841b821660c05291831b811660e052610100919091528751821b811661012052602090970151811b8716610140529a8b1b86166101605250505050509190941b1661018052506200022b9350505050565b600080516020620053a983398151915255565b80516001600160a01b03811681146200013f57600080fd5b919050565b60008060008060008060008789036101008112156200016257600080fd5b60408112156200017157600080fd5b50604080519081016001600160401b0381118282101715620001a357634e487b7160e01b600052604160045260246000fd5b604052620001b18962000127565b8152620001c160208a0162000127565b60208201529650620001d66040890162000127565b9550620001e66060890162000127565b9450620001f66080890162000127565b935060a088015192506200020d60c0890162000127565b91506200021d60e0890162000127565b905092959891949750929550565b60805160601c60a05160601c60c05160601c60e05160601c610100516101205160601c6101405160601c6101605160601c6101805160601c614fc1620003e86000396000818161039501528181610b6701526133ba01526000818161048501526129b601526000818161057301528181610f4701528181611e3c01528181611fb501528181612ba20152612e4701526000610b33015260008181610737015261172e01526000818161086601528181610d0f01528181611d6a015281816120050152818161237a015281816139aa0152613c040152600081816108ba01528181610de50152818161129801528181611c6d015281816129860152612d6e015260008181610a8801526119a70152600081816103c70152818161098b01528181610a0201528181610c7601528181610fbc01528181611462015281816114c6015281816116640152818161182c01528181611f2601528181611fd6015281816122f4015281816123a901528181612c1701528181612ed201528181612f7a015281816134bf01528181613540015281816135820152818161385201528181613924015281816139d901528181613b7e0152613c330152614fc16000f3fe6080604052600436106103855760003560e01c8063853828b6116101d1578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063b16b7d0b14610a24578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b80639da0e4621161016f578063aa388af611610149578063aa388af61461096e578063ab12edf5146109bb578063ad1728cb146109db578063ad5c4648146109f057600080fd5b80639da0e462146108fc578063a3b81e7314610939578063a4f98af41461095957600080fd5b80639092c31c116101ab5780639092c31c146108545780639136616a1461088857806391649751146108a857806396d538bb146108dc57600080fd5b8063853828b6146107fa57806387bae8671461080f5780638d7c0e461461083457600080fd5b80635c975abb116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107995780637b8962f7146107b9578063842f5c46146107cf5780638456cb59146107e557600080fd5b80636ef3879514610705578063714897df1461072557806371a735f3146107595780637260f8261461077957600080fd5b80636309238311610290578063630923831461069957806366e3667e146106af57806367c7066c146106c55780636e811d38146106e557600080fd5b80635c975abb146106405780635d36b190146106645780635f5152261461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb57806359b80c0a1461060b5780635a063f631461062b57600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c236600461428f565b610c1e565b3480156104d357600080fd5b506104566104e2366004614255565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a610518366004614309565b610c50565b34801561052957600080fd5b5061043a6105383660046144b1565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614376565b610e57565b3480156105c157600080fd5b5061043a6105d0366004614309565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a610606366004614587565b611037565b34801561061757600080fd5b5061043a6106263660046143fd565b611096565b34801561063757600080fd5b5061043a611319565b34801561064c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561067057600080fd5b5061043a6113b8565b34801561068557600080fd5b50610553610694366004614255565b61145e565b3480156106a557600080fd5b50610553611c2081565b3480156106bb57600080fd5b5061055360345481565b3480156106d157600080fd5b5060a354610456906001600160a01b031681565b3480156106f157600080fd5b5061043a610700366004614255565b61156f565b34801561071157600080fd5b5061043a610720366004614335565b6115e5565b34801561073157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561076557600080fd5b5061043a61077436600461460b565b611b79565b34801561078557600080fd5b50603654610456906001600160a01b031681565b3480156107a557600080fd5b506104566107b4366004614587565b611d3e565b3480156107c557600080fd5b5061055360375481565b3480156107db57600080fd5b5061055360685481565b3480156107f157600080fd5b5061043a611d68565b34801561080657600080fd5b5061043a611e31565b34801561081b57600080fd5b506033546104569061010090046001600160a01b031681565b34801561084057600080fd5b5061043a61084f36600461468c565b612003565b34801561086057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b5061043a6108a3366004614587565b6124ca565b3480156108b457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e857600080fd5b5061043a6108f7366004614335565b612696565b34801561090857600080fd5b5061092c610917366004614587565b60356020526000908152604090205460ff1681565b60405161046a9190614b7f565b34801561094557600080fd5b5061043a610954366004614255565b6127b6565b34801561096557600080fd5b50610654612824565b34801561097a57600080fd5b50610654610989366004614255565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109c757600080fd5b5061043a6109d63660046146d1565b612883565b3480156109e757600080fd5b5061043a61296f565b3480156109fc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a3057600080fd5b506105536801bc16d674ec80000081565b348015610a4d57600080fd5b5061043a610a5c366004614255565b612a35565b348015610a6d57600080fd5b50610654612ac2565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614255565b612af3565b348015610aed57600080fd5b5061043a610afc3660046142c8565b612b97565b348015610b0d57600080fd5b5061043a610b1c3660046145a0565b612c7b565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612e3c565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a612fa9565b348015610beb57600080fd5b50610bf4613033565b60405161046a919061495d565b6000610c19600080516020614f6c8339815191525490565b905090565b610c26612ac2565b610c425760405162461bcd60e51b815260040161043190614bf1565b610c4c8282613095565b5050565b610c58612ac2565b610c745760405162461bcd60e51b815260040161043190614bf1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b03841690836131f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190614272565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614cdc565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e209030908790879087906004016148ad565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612ac2565b610e7b5760405162461bcd60e51b815260040161043190614bf1565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613246565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614bba565b600080516020614f4c83398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614cb4565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614c28565b82610107600082825461101e9190614e03565b9091555061102e90508484613301565b50600190555050565b61103f612ac2565b61105b5760405162461bcd60e51b815260040161043190614bf1565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146110c55760405162461bcd60e51b815260040161043190614c7d565b60335460ff16156110e85760405162461bcd60e51b815260040161043190614c53565b8683146111375760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d617463680000000000006044820152606401610431565b60008060005b89811015611280578a8a8281811061115757611157614efc565b90506020028101906111699190614d13565b604051611177929190614881565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156111aa576111aa614ed0565b146111f75760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061124457611244614efc565b90506020028101906112569190614d13565b8c8c6040516112689493929190614aa4565b60405180910390a261127981614e9f565b905061113d565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906112db908d908d908d908d908d908d908d908d90600401614a42565b600060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b031633146113735760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614f4c833981519152805460028114156113a55760405162461bcd60e51b815260040161043190614cb4565b600282556113b1613393565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146114535760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b61145c336135d8565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146114b15760405162461bcd60e51b815260040161043190614c28565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154891906146b8565b6801bc16d674ec80000060345461155f9190614e3d565b6115699190614e03565b92915050565b611577612ac2565b6115935760405162461bcd60e51b815260040161043190614bf1565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146116145760405162461bcd60e51b815260040161043190614c7d565b60335460ff16156116375760405162461bcd60e51b815260040161043190614c53565b600061164c6801bc16d674ec80000083614e3d565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156116ae57600080fd5b505afa1580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e691906146b8565b8111156117295760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f000000000000000000000000000000000000000000000000000000000000000090611759908490614e03565b11156117a05760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546117b19190614e03565b11156117ff5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546118119190614e03565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561187857600080fd5b505af115801561188c573d6000803e3d6000fd5b5050505061189981613699565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b83811015611b585760008585838181106118fa576118fa614efc565b905060200281019061190c9190614d59565b6119169080614d13565b604051611924929190614881565b604080519182900390912060008181526035602052919091205490915060ff16600181600481111561195857611958614ed0565b146119a55760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008989878181106119f0576119f0614efc565b9050602002810190611a029190614d59565b611a0c9080614d13565b888c8c8a818110611a1f57611a1f614efc565b9050602002810190611a319190614d59565b611a3f906020810190614d13565b8e8e8c818110611a5157611a51614efc565b9050602002810190611a639190614d59565b604001356040518863ffffffff1660e01b8152600401611a8896959493929190614b0c565b6000604051808303818588803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b5050506000848152603560205260409020805460ff19166002179055508290507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f888886818110611b0857611b08614efc565b9050602002810190611b1a9190614d59565b611b249080614d13565b6801bc16d674ec800000604051611b3d93929190614b5b565b60405180910390a2505080611b5190614e9f565b90506118de565b508383905060346000828254611b6e9190614e03565b909155505050505050565b60335461010090046001600160a01b03163314611ba85760405162461bcd60e51b815260040161043190614c7d565b60335460ff1615611bcb5760405162461bcd60e51b815260040161043190614c53565b60008585604051611bdd929190614881565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611c1157611c11614ed0565b14611c565760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611caa908a908a908a908a908a90600401614acb565b600060405180830381600087803b158015611cc457600080fd5b505af1158015611cd8573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611d2d908a908a908a908a90614aa4565b60405180910390a250505050505050565b60a48181548110611d4e57600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df99190614272565b6001600160a01b0316336001600160a01b031614611e295760405162461bcd60e51b815260040161043190614cdc565b61145c6136c6565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611e805750611e6b610c01565b6001600160a01b0316336001600160a01b0316145b611ed85760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614f4c83398151915280546002811415611f0a5760405162461bcd60e51b815260040161043190614cb4565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611f7057600080fd5b505afa158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa891906146b8565b90508015611ffb57611ffb7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008361373b565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120949190614272565b6001600160a01b0316336001600160a01b0316146120c45760405162461bcd60e51b815260040161043190614cdc565b60335460ff1661210d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b43611c20606b5461211e9190614e03565b1061216b5760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b600219831215801561217e575060038313155b801561219857506000836034546121959190614dc2565b12155b6121e45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff19821215801561220757506811ff6cf0fd15b000008213155b8015612221575060008260685461221e9190614dc2565b12155b61226d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008111156122c65760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b826034546122d49190614dc2565b6034556068546122e5908390614dc2565b60685543606b558015612433577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612429919061456a565b5061243381613839565b60408051848152602081018490529081018290527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a161247e60006138a1565b6124bd5760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b6124c5613d27565b505050565b6124d2612ac2565b6124ee5760405162461bcd60e51b815260040161043190614bf1565b60a054811061252f5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a0828154811061254457612544614efc565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061258190600190614e5c565b8310156126035760a0805461259890600190614e5c565b815481106125a8576125a8614efc565b60009182526020909120015460a080546001600160a01b0390921691859081106125d4576125d4614efc565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a080548061261457612614614ee6565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61269e612ac2565b6126ba5760405162461bcd60e51b815260040161043190614bf1565b8060005b8181101561276d5760008484838181106126da576126da614efc565b90506020020160208101906126ef9190614255565b6001600160a01b0316141561275d5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b61276681614e9f565b90506126be565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a484846040516127a2939291906149aa565b60405180910390a1610f3660a48484613fae565b6127be612ac2565b6127da5760405162461bcd60e51b815260040161043190614bf1565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146128565760405162461bcd60e51b815260040161043190614c7d565b60335460ff16156128795760405162461bcd60e51b815260040161043190614c53565b610c1960016138a1565b61288b612ac2565b6128a75760405162461bcd60e51b815260040161043190614bf1565b80821080156128be57506801bc16d674ec80000081105b80156128db5750673782dace9d9000006128d88383614e5c565b10155b6129275760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b1580156129fa57600080fd5b505af1158015612a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a32919061456a565b50565b612a3d612ac2565b612a595760405162461bcd60e51b815260040161043190614bf1565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612ada600080516020614f6c8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612afb612ac2565b612b175760405162461bcd60e51b815260040161043190614bf1565b612b3f817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612b5f600080516020614f6c8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612bdf5760405162461bcd60e51b815260040161043190614bba565b600080516020614f4c83398151915280546002811415612c115760405162461bcd60e51b815260040161043190614cb4565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612c665760405162461bcd60e51b815260040161043190614c28565b612c7185858561373b565b5060019055505050565b60335461010090046001600160a01b03163314612caa5760405162461bcd60e51b815260040161043190614c7d565b60335460ff1615612ccd5760405162461bcd60e51b815260040161043190614c53565b60008484604051612cdf929190614881565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612d1357612d13614ed0565b14612d575760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612da9908990899089908990600401614aa4565b600060405180830381600087803b158015612dc357600080fd5b505af1158015612dd7573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612e2c908990899089908990614aa4565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612e845760405162461bcd60e51b815260040161043190614bba565b600080516020614f4c83398151915280546002811415612eb65760405162461bcd60e51b815260040161043190614cb4565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612f1c57600080fd5b505afa158015612f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5491906146b8565b905060006101075482612f679190614e5c565b90508015612f9f57610107829055612f9f7f000000000000000000000000000000000000000000000000000000000000000082613301565b5050600182555050565b6036546001600160a01b031633146130035760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561308b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161306d575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156130f25760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b0382161580159061311257506001600160a01b03811615155b6131525760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124c5908490613da1565b82516132599060a4906020860190614011565b508151815181146132a35760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156132fa576132ea8482815181106132c3576132c3614efc565b60200260200101518483815181106132dd576132dd614efc565b6020026020010151613095565b6132f381614e9f565b90506132a6565b5050505050565b6000811161334a5760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156133b65760405162461bcd60e51b815260040161043190614c53565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561341357600080fd5b505af1158015613427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344b91906146b8565b905060006068548261345d9190614e03565b9050804710156134af5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351857600080fd5b505af115801561352c573d6000803e3d6000fd5b505060a35461356c93506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836131f4565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612963565b6001600160a01b03811661362e5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b031661364e600080516020614f6c8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612a3281600080516020614f6c83398151915255565b60006136a88261010754613e73565b90508061010760008282546136bd9190614e5c565b90915550505050565b60335460ff16156136e95760405162461bcd60e51b815260040161043190614c53565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861371e3390565b6040516001600160a01b03909116815260200160405180910390a1565b6000811161378b5760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166137da5760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6137e381613699565b6137f76001600160a01b03831684836131f4565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989101612689565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156138b65761156982613e8b565b6000606854476138c69190614e5c565b9050600191506801bc16d674ec8000008110613aaa5760006138f16801bc16d674ec80000083614e1b565b905080603460008282546139059190614e5c565b9091555060009050613920826801bc16d674ec800000614e3d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397d57600080fd5b505af1158015613991573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613a2157600080fd5b505af1158015613a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a59919061456a565b50613a6381613839565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613aba9190614e5c565b90506801bc16d674ec8000008110613b0c5760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613b18575050919050565b606954811015613b72578060686000828254613b349190614e03565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613d20565b606a54811115613d0f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bd757600080fd5b505af1158015613beb573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613c7b57600080fd5b505af1158015613c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb3919061456a565b50600160346000828254613cc79190614e5c565b90915550613cd6905081613839565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613b65565b613d1884613e8b565b949350505050565b5050919050565b60335460ff16613d705760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361371e565b6000613df6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ea39092919063ffffffff16565b8051909150156124c55780806020019051810190613e14919061456a565b6124c55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613e825781613e84565b825b9392505050565b60008115613e9b57613e9b6136c6565b506000919050565b6060613d18848460008585843b613efc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613f189190614891565b60006040518083038185875af1925050503d8060008114613f55576040519150601f19603f3d011682016040523d82523d6000602084013e613f5a565b606091505b5091509150613f6a828286613f75565b979650505050505050565b60608315613f84575081613e84565b825115613f945782518084602001fd5b8160405162461bcd60e51b81526004016104319190614ba7565b828054828255906000526020600020908101928215614001579160200282015b828111156140015781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613fce565b5061400d929150614066565b5090565b828054828255906000526020600020908101928215614001579160200282015b8281111561400157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614031565b5b8082111561400d5760008155600101614067565b60008083601f84011261408d57600080fd5b5081356001600160401b038111156140a457600080fd5b6020830191508360208260051b85010111156140bf57600080fd5b9250929050565b600082601f8301126140d757600080fd5b813560206140ec6140e783614d9f565b614d6f565b80838252828201915082860187848660051b890101111561410c57600080fd5b60005b8581101561413457813561412281614f28565b8452928401929084019060010161410f565b5090979650505050505050565b60008083601f84011261415357600080fd5b5081356001600160401b0381111561416a57600080fd5b6020830191508360208285010111156140bf57600080fd5b600060a0828403121561419457600080fd5b50919050565b600060a082840312156141ac57600080fd5b60405160a081018181106001600160401b03821117156141ce576141ce614f12565b6040529050806141dd83614225565b81526141eb6020840161423e565b60208201526141fc6040840161423e565b6040820152606083013561420f81614f3d565b6060820152608092830135920191909152919050565b803563ffffffff8116811461423957600080fd5b919050565b80356001600160401b038116811461423957600080fd5b60006020828403121561426757600080fd5b8135613e8481614f28565b60006020828403121561428457600080fd5b8151613e8481614f28565b600080604083850312156142a257600080fd5b82356142ad81614f28565b915060208301356142bd81614f28565b809150509250929050565b6000806000606084860312156142dd57600080fd5b83356142e881614f28565b925060208401356142f881614f28565b929592945050506040919091013590565b6000806040838503121561431c57600080fd5b823561432781614f28565b946020939093013593505050565b6000806020838503121561434857600080fd5b82356001600160401b0381111561435e57600080fd5b61436a8582860161407b565b90969095509350505050565b60008060006060848603121561438b57600080fd5b83356001600160401b03808211156143a257600080fd5b6143ae878388016140c6565b945060208601359150808211156143c457600080fd5b6143d0878388016140c6565b935060408601359150808211156143e657600080fd5b506143f3868287016140c6565b9150509250925092565b600080600080600080600080610120898b03121561441a57600080fd5b88356001600160401b038082111561443157600080fd5b61443d8c838d0161407b565b909a50985060208b013591508082111561445657600080fd5b6144628c838d0161407b565b909850965060408b013591508082111561447b57600080fd5b506144888b828c0161407b565b909550935050606089013591506144a28a60808b01614182565b90509295985092959890939650565b600080600060e084860312156144c657600080fd5b83356001600160401b038111156144dc57600080fd5b8401601f810186136144ed57600080fd5b803560206144fd6140e783614d9f565b8083825282820191508285018a848660051b880101111561451d57600080fd5b600095505b84861015614547576145338161423e565b835260019590950194918301918301614522565b50965050860135935061456191508690506040860161419a565b90509250925092565b60006020828403121561457c57600080fd5b8151613e8481614f3d565b60006020828403121561459957600080fd5b5035919050565b600080600080604085870312156145b657600080fd5b84356001600160401b03808211156145cd57600080fd5b6145d988838901614141565b909650945060208701359150808211156145f257600080fd5b506145ff8782880161407b565b95989497509550505050565b600080600080600060e0868803121561462357600080fd5b85356001600160401b038082111561463a57600080fd5b61464689838a01614141565b9097509550602088013591508082111561465f57600080fd5b5061466c8882890161407b565b909450925061468090508760408801614182565b90509295509295909350565b6000806000606084860312156146a157600080fd5b505081359360208301359350604090920135919050565b6000602082840312156146ca57600080fd5b5051919050565b600080604083850312156146e457600080fd5b50508035926020909101359150565b81835260006020808501808196508560051b810191508460005b878110156147765782840389528135601e1988360301811261472e57600080fd5b870180356001600160401b0381111561474657600080fd5b80360389131561475557600080fd5b61476286828985016147ca565b9a87019a955050509084019060010161470d565b5091979650505050505050565b8183526000602080850194508260005b858110156147bf576001600160401b036147ac8361423e565b1687529582019590820190600101614793565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000815180845261480b816020860160208601614e73565b601f01601f19169290920160200192915050565b63ffffffff61482d82614225565b16825261483c6020820161423e565b6001600160401b038082166020850152806148596040850161423e565b1660408501525050606081013561486f81614f3d565b15156060830152608090810135910152565b8183823760009101908152919050565b600082516148a3818460208701614e73565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156149005783516001600160401b0316855293820193928201926001016148db565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561499e5783516001600160a01b031683529284019291840191600101614979565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b828110156149f45781546001600160a01b0316845292840192600191820191016149cf565b505050838103828501528481528590820160005b86811015614a36578235614a1b81614f28565b6001600160a01b031682529183019190830190600101614a08565b50979650505050505050565b6000610120808352614a578184018b8d6146f3565b90508281036020840152614a6c81898b614783565b90508281036040840152614a818187896146f3565b915050836060830152614a97608083018461481f565b9998505050505050505050565b604081526000614ab86040830186886147ca565b8281036020840152613f6a818587614783565b60e081526000614adf60e0830187896147ca565b8281036020840152614af2818688614783565b915050614b02604083018461481f565b9695505050505050565b608081526000614b2060808301888a6147ca565b8281036020840152614b3281886147f3565b90508281036040840152614b478186886147ca565b915050826060830152979650505050505050565b604081526000614b6f6040830185876147ca565b9050826020830152949350505050565b6020810160058310614ba157634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613e8460208301846147f3565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614d2a57600080fd5b8301803591506001600160401b03821115614d4457600080fd5b6020019150368190038213156140bf57600080fd5b60008235605e198336030181126148a357600080fd5b604051601f8201601f191681016001600160401b0381118282101715614d9757614d97614f12565b604052919050565b60006001600160401b03821115614db857614db8614f12565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614de457614de4614eba565b600160ff1b8390038412811615614dfd57614dfd614eba565b50500190565b60008219821115614e1657614e16614eba565b500190565b600082614e3857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e5757614e57614eba565b500290565b600082821015614e6e57614e6e614eba565b500390565b60005b83811015614e8e578181015183820152602001614e76565b83811115610f365750506000910152565b6000600019821415614eb357614eb3614eba565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612a3257600080fd5b8015158114612a3257600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122081dc5948932312d30524de7cc17ade49499ba445ca428ae66bc08f7400de889b64736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", + "deployedBytecode": "0x6080604052600436106103855760003560e01c8063853828b6116101d1578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063b16b7d0b14610a24578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b80639da0e4621161016f578063aa388af611610149578063aa388af61461096e578063ab12edf5146109bb578063ad1728cb146109db578063ad5c4648146109f057600080fd5b80639da0e462146108fc578063a3b81e7314610939578063a4f98af41461095957600080fd5b80639092c31c116101ab5780639092c31c146108545780639136616a1461088857806391649751146108a857806396d538bb146108dc57600080fd5b8063853828b6146107fa57806387bae8671461080f5780638d7c0e461461083457600080fd5b80635c975abb116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107995780637b8962f7146107b9578063842f5c46146107cf5780638456cb59146107e557600080fd5b80636ef3879514610705578063714897df1461072557806371a735f3146107595780637260f8261461077957600080fd5b80636309238311610290578063630923831461069957806366e3667e146106af57806367c7066c146106c55780636e811d38146106e557600080fd5b80635c975abb146106405780635d36b190146106645780635f5152261461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb57806359b80c0a1461060b5780635a063f631461062b57600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c236600461428f565b610c1e565b3480156104d357600080fd5b506104566104e2366004614255565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a610518366004614309565b610c50565b34801561052957600080fd5b5061043a6105383660046144b1565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614376565b610e57565b3480156105c157600080fd5b5061043a6105d0366004614309565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a610606366004614587565b611037565b34801561061757600080fd5b5061043a6106263660046143fd565b611096565b34801561063757600080fd5b5061043a611319565b34801561064c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561067057600080fd5b5061043a6113b8565b34801561068557600080fd5b50610553610694366004614255565b61145e565b3480156106a557600080fd5b50610553611c2081565b3480156106bb57600080fd5b5061055360345481565b3480156106d157600080fd5b5060a354610456906001600160a01b031681565b3480156106f157600080fd5b5061043a610700366004614255565b61156f565b34801561071157600080fd5b5061043a610720366004614335565b6115e5565b34801561073157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561076557600080fd5b5061043a61077436600461460b565b611b79565b34801561078557600080fd5b50603654610456906001600160a01b031681565b3480156107a557600080fd5b506104566107b4366004614587565b611d3e565b3480156107c557600080fd5b5061055360375481565b3480156107db57600080fd5b5061055360685481565b3480156107f157600080fd5b5061043a611d68565b34801561080657600080fd5b5061043a611e31565b34801561081b57600080fd5b506033546104569061010090046001600160a01b031681565b34801561084057600080fd5b5061043a61084f36600461468c565b612003565b34801561086057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b5061043a6108a3366004614587565b6124ca565b3480156108b457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e857600080fd5b5061043a6108f7366004614335565b612696565b34801561090857600080fd5b5061092c610917366004614587565b60356020526000908152604090205460ff1681565b60405161046a9190614b7f565b34801561094557600080fd5b5061043a610954366004614255565b6127b6565b34801561096557600080fd5b50610654612824565b34801561097a57600080fd5b50610654610989366004614255565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109c757600080fd5b5061043a6109d63660046146d1565b612883565b3480156109e757600080fd5b5061043a61296f565b3480156109fc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a3057600080fd5b506105536801bc16d674ec80000081565b348015610a4d57600080fd5b5061043a610a5c366004614255565b612a35565b348015610a6d57600080fd5b50610654612ac2565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614255565b612af3565b348015610aed57600080fd5b5061043a610afc3660046142c8565b612b97565b348015610b0d57600080fd5b5061043a610b1c3660046145a0565b612c7b565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612e3c565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a612fa9565b348015610beb57600080fd5b50610bf4613033565b60405161046a919061495d565b6000610c19600080516020614f6c8339815191525490565b905090565b610c26612ac2565b610c425760405162461bcd60e51b815260040161043190614bf1565b610c4c8282613095565b5050565b610c58612ac2565b610c745760405162461bcd60e51b815260040161043190614bf1565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b03841690836131f4565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190614272565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614cdc565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e209030908790879087906004016148ad565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612ac2565b610e7b5760405162461bcd60e51b815260040161043190614bf1565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613246565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614bba565b600080516020614f4c83398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614cb4565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614c28565b82610107600082825461101e9190614e03565b9091555061102e90508484613301565b50600190555050565b61103f612ac2565b61105b5760405162461bcd60e51b815260040161043190614bf1565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146110c55760405162461bcd60e51b815260040161043190614c7d565b60335460ff16156110e85760405162461bcd60e51b815260040161043190614c53565b8683146111375760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d617463680000000000006044820152606401610431565b60008060005b89811015611280578a8a8281811061115757611157614efc565b90506020028101906111699190614d13565b604051611177929190614881565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156111aa576111aa614ed0565b146111f75760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061124457611244614efc565b90506020028101906112569190614d13565b8c8c6040516112689493929190614aa4565b60405180910390a261127981614e9f565b905061113d565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906112db908d908d908d908d908d908d908d908d90600401614a42565b600060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b031633146113735760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614f4c833981519152805460028114156113a55760405162461bcd60e51b815260040161043190614cb4565b600282556113b1613393565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146114535760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b61145c336135d8565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146114b15760405162461bcd60e51b815260040161043190614c28565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061154891906146b8565b6801bc16d674ec80000060345461155f9190614e3d565b6115699190614e03565b92915050565b611577612ac2565b6115935760405162461bcd60e51b815260040161043190614bf1565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146116145760405162461bcd60e51b815260040161043190614c7d565b60335460ff16156116375760405162461bcd60e51b815260040161043190614c53565b600061164c6801bc16d674ec80000083614e3d565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156116ae57600080fd5b505afa1580156116c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e691906146b8565b8111156117295760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f000000000000000000000000000000000000000000000000000000000000000090611759908490614e03565b11156117a05760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546117b19190614e03565b11156117ff5760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546118119190614e03565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561187857600080fd5b505af115801561188c573d6000803e3d6000fd5b5050505061189981613699565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b83811015611b585760008585838181106118fa576118fa614efc565b905060200281019061190c9190614d59565b6119169080614d13565b604051611924929190614881565b604080519182900390912060008181526035602052919091205490915060ff16600181600481111561195857611958614ed0565b146119a55760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008989878181106119f0576119f0614efc565b9050602002810190611a029190614d59565b611a0c9080614d13565b888c8c8a818110611a1f57611a1f614efc565b9050602002810190611a319190614d59565b611a3f906020810190614d13565b8e8e8c818110611a5157611a51614efc565b9050602002810190611a639190614d59565b604001356040518863ffffffff1660e01b8152600401611a8896959493929190614b0c565b6000604051808303818588803b158015611aa157600080fd5b505af1158015611ab5573d6000803e3d6000fd5b5050506000848152603560205260409020805460ff19166002179055508290507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f888886818110611b0857611b08614efc565b9050602002810190611b1a9190614d59565b611b249080614d13565b6801bc16d674ec800000604051611b3d93929190614b5b565b60405180910390a2505080611b5190614e9f565b90506118de565b508383905060346000828254611b6e9190614e03565b909155505050505050565b60335461010090046001600160a01b03163314611ba85760405162461bcd60e51b815260040161043190614c7d565b60335460ff1615611bcb5760405162461bcd60e51b815260040161043190614c53565b60008585604051611bdd929190614881565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611c1157611c11614ed0565b14611c565760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611caa908a908a908a908a908a90600401614acb565b600060405180830381600087803b158015611cc457600080fd5b505af1158015611cd8573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611d2d908a908a908a908a90614aa4565b60405180910390a250505050505050565b60a48181548110611d4e57600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611dc157600080fd5b505afa158015611dd5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df99190614272565b6001600160a01b0316336001600160a01b031614611e295760405162461bcd60e51b815260040161043190614cdc565b61145c6136c6565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611e805750611e6b610c01565b6001600160a01b0316336001600160a01b0316145b611ed85760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614f4c83398151915280546002811415611f0a5760405162461bcd60e51b815260040161043190614cb4565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611f7057600080fd5b505afa158015611f84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fa891906146b8565b90508015611ffb57611ffb7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000008361373b565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561205c57600080fd5b505afa158015612070573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120949190614272565b6001600160a01b0316336001600160a01b0316146120c45760405162461bcd60e51b815260040161043190614cdc565b60335460ff1661210d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b43611c20606b5461211e9190614e03565b1061216b5760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b600219831215801561217e575060038313155b801561219857506000836034546121959190614dc2565b12155b6121e45760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff19821215801561220757506811ff6cf0fd15b000008213155b8015612221575060008260685461221e9190614dc2565b12155b61226d5760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008111156122c65760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b826034546122d49190614dc2565b6034556068546122e5908390614dc2565b60685543606b558015612433577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561234d57600080fd5b505af1158015612361573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b1580156123f157600080fd5b505af1158015612405573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612429919061456a565b5061243381613839565b60408051848152602081018490529081018290527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a161247e60006138a1565b6124bd5760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b6124c5613d27565b505050565b6124d2612ac2565b6124ee5760405162461bcd60e51b815260040161043190614bf1565b60a054811061252f5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a0828154811061254457612544614efc565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061258190600190614e5c565b8310156126035760a0805461259890600190614e5c565b815481106125a8576125a8614efc565b60009182526020909120015460a080546001600160a01b0390921691859081106125d4576125d4614efc565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a080548061261457612614614ee6565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61269e612ac2565b6126ba5760405162461bcd60e51b815260040161043190614bf1565b8060005b8181101561276d5760008484838181106126da576126da614efc565b90506020020160208101906126ef9190614255565b6001600160a01b0316141561275d5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b61276681614e9f565b90506126be565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a484846040516127a2939291906149aa565b60405180910390a1610f3660a48484613fae565b6127be612ac2565b6127da5760405162461bcd60e51b815260040161043190614bf1565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146128565760405162461bcd60e51b815260040161043190614c7d565b60335460ff16156128795760405162461bcd60e51b815260040161043190614c53565b610c1960016138a1565b61288b612ac2565b6128a75760405162461bcd60e51b815260040161043190614bf1565b80821080156128be57506801bc16d674ec80000081105b80156128db5750673782dace9d9000006128d88383614e5c565b10155b6129275760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b1580156129fa57600080fd5b505af1158015612a0e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a32919061456a565b50565b612a3d612ac2565b612a595760405162461bcd60e51b815260040161043190614bf1565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612ada600080516020614f6c8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612afb612ac2565b612b175760405162461bcd60e51b815260040161043190614bf1565b612b3f817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612b5f600080516020614f6c8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612bdf5760405162461bcd60e51b815260040161043190614bba565b600080516020614f4c83398151915280546002811415612c115760405162461bcd60e51b815260040161043190614cb4565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612c665760405162461bcd60e51b815260040161043190614c28565b612c7185858561373b565b5060019055505050565b60335461010090046001600160a01b03163314612caa5760405162461bcd60e51b815260040161043190614c7d565b60335460ff1615612ccd5760405162461bcd60e51b815260040161043190614c53565b60008484604051612cdf929190614881565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612d1357612d13614ed0565b14612d575760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612da9908990899089908990600401614aa4565b600060405180830381600087803b158015612dc357600080fd5b505af1158015612dd7573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612e2c908990899089908990614aa4565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612e845760405162461bcd60e51b815260040161043190614bba565b600080516020614f4c83398151915280546002811415612eb65760405162461bcd60e51b815260040161043190614cb4565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612f1c57600080fd5b505afa158015612f30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f5491906146b8565b905060006101075482612f679190614e5c565b90508015612f9f57610107829055612f9f7f000000000000000000000000000000000000000000000000000000000000000082613301565b5050600182555050565b6036546001600160a01b031633146130035760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561308b57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161306d575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156130f25760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b0382161580159061311257506001600160a01b03811615155b6131525760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526124c5908490613da1565b82516132599060a4906020860190614011565b508151815181146132a35760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156132fa576132ea8482815181106132c3576132c3614efc565b60200260200101518483815181106132dd576132dd614efc565b6020026020010151613095565b6132f381614e9f565b90506132a6565b5050505050565b6000811161334a5760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156133b65760405162461bcd60e51b815260040161043190614c53565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561341357600080fd5b505af1158015613427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344b91906146b8565b905060006068548261345d9190614e03565b9050804710156134af5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351857600080fd5b505af115801561352c573d6000803e3d6000fd5b505060a35461356c93506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836131f4565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612963565b6001600160a01b03811661362e5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b031661364e600080516020614f6c8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612a3281600080516020614f6c83398151915255565b60006136a88261010754613e73565b90508061010760008282546136bd9190614e5c565b90915550505050565b60335460ff16156136e95760405162461bcd60e51b815260040161043190614c53565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861371e3390565b6040516001600160a01b03909116815260200160405180910390a1565b6000811161378b5760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166137da5760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6137e381613699565b6137f76001600160a01b03831684836131f4565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989101612689565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156138b65761156982613e8b565b6000606854476138c69190614e5c565b9050600191506801bc16d674ec8000008110613aaa5760006138f16801bc16d674ec80000083614e1b565b905080603460008282546139059190614e5c565b9091555060009050613920826801bc16d674ec800000614e3d565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397d57600080fd5b505af1158015613991573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613a2157600080fd5b505af1158015613a35573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a59919061456a565b50613a6381613839565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613aba9190614e5c565b90506801bc16d674ec8000008110613b0c5760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613b18575050919050565b606954811015613b72578060686000828254613b349190614e03565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613d20565b606a54811115613d0f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bd757600080fd5b505af1158015613beb573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613c7b57600080fd5b505af1158015613c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb3919061456a565b50600160346000828254613cc79190614e5c565b90915550613cd6905081613839565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613b65565b613d1884613e8b565b949350505050565b5050919050565b60335460ff16613d705760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361371e565b6000613df6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ea39092919063ffffffff16565b8051909150156124c55780806020019051810190613e14919061456a565b6124c55760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613e825781613e84565b825b9392505050565b60008115613e9b57613e9b6136c6565b506000919050565b6060613d18848460008585843b613efc5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613f189190614891565b60006040518083038185875af1925050503d8060008114613f55576040519150601f19603f3d011682016040523d82523d6000602084013e613f5a565b606091505b5091509150613f6a828286613f75565b979650505050505050565b60608315613f84575081613e84565b825115613f945782518084602001fd5b8160405162461bcd60e51b81526004016104319190614ba7565b828054828255906000526020600020908101928215614001579160200282015b828111156140015781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613fce565b5061400d929150614066565b5090565b828054828255906000526020600020908101928215614001579160200282015b8281111561400157825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190614031565b5b8082111561400d5760008155600101614067565b60008083601f84011261408d57600080fd5b5081356001600160401b038111156140a457600080fd5b6020830191508360208260051b85010111156140bf57600080fd5b9250929050565b600082601f8301126140d757600080fd5b813560206140ec6140e783614d9f565b614d6f565b80838252828201915082860187848660051b890101111561410c57600080fd5b60005b8581101561413457813561412281614f28565b8452928401929084019060010161410f565b5090979650505050505050565b60008083601f84011261415357600080fd5b5081356001600160401b0381111561416a57600080fd5b6020830191508360208285010111156140bf57600080fd5b600060a0828403121561419457600080fd5b50919050565b600060a082840312156141ac57600080fd5b60405160a081018181106001600160401b03821117156141ce576141ce614f12565b6040529050806141dd83614225565b81526141eb6020840161423e565b60208201526141fc6040840161423e565b6040820152606083013561420f81614f3d565b6060820152608092830135920191909152919050565b803563ffffffff8116811461423957600080fd5b919050565b80356001600160401b038116811461423957600080fd5b60006020828403121561426757600080fd5b8135613e8481614f28565b60006020828403121561428457600080fd5b8151613e8481614f28565b600080604083850312156142a257600080fd5b82356142ad81614f28565b915060208301356142bd81614f28565b809150509250929050565b6000806000606084860312156142dd57600080fd5b83356142e881614f28565b925060208401356142f881614f28565b929592945050506040919091013590565b6000806040838503121561431c57600080fd5b823561432781614f28565b946020939093013593505050565b6000806020838503121561434857600080fd5b82356001600160401b0381111561435e57600080fd5b61436a8582860161407b565b90969095509350505050565b60008060006060848603121561438b57600080fd5b83356001600160401b03808211156143a257600080fd5b6143ae878388016140c6565b945060208601359150808211156143c457600080fd5b6143d0878388016140c6565b935060408601359150808211156143e657600080fd5b506143f3868287016140c6565b9150509250925092565b600080600080600080600080610120898b03121561441a57600080fd5b88356001600160401b038082111561443157600080fd5b61443d8c838d0161407b565b909a50985060208b013591508082111561445657600080fd5b6144628c838d0161407b565b909850965060408b013591508082111561447b57600080fd5b506144888b828c0161407b565b909550935050606089013591506144a28a60808b01614182565b90509295985092959890939650565b600080600060e084860312156144c657600080fd5b83356001600160401b038111156144dc57600080fd5b8401601f810186136144ed57600080fd5b803560206144fd6140e783614d9f565b8083825282820191508285018a848660051b880101111561451d57600080fd5b600095505b84861015614547576145338161423e565b835260019590950194918301918301614522565b50965050860135935061456191508690506040860161419a565b90509250925092565b60006020828403121561457c57600080fd5b8151613e8481614f3d565b60006020828403121561459957600080fd5b5035919050565b600080600080604085870312156145b657600080fd5b84356001600160401b03808211156145cd57600080fd5b6145d988838901614141565b909650945060208701359150808211156145f257600080fd5b506145ff8782880161407b565b95989497509550505050565b600080600080600060e0868803121561462357600080fd5b85356001600160401b038082111561463a57600080fd5b61464689838a01614141565b9097509550602088013591508082111561465f57600080fd5b5061466c8882890161407b565b909450925061468090508760408801614182565b90509295509295909350565b6000806000606084860312156146a157600080fd5b505081359360208301359350604090920135919050565b6000602082840312156146ca57600080fd5b5051919050565b600080604083850312156146e457600080fd5b50508035926020909101359150565b81835260006020808501808196508560051b810191508460005b878110156147765782840389528135601e1988360301811261472e57600080fd5b870180356001600160401b0381111561474657600080fd5b80360389131561475557600080fd5b61476286828985016147ca565b9a87019a955050509084019060010161470d565b5091979650505050505050565b8183526000602080850194508260005b858110156147bf576001600160401b036147ac8361423e565b1687529582019590820190600101614793565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6000815180845261480b816020860160208601614e73565b601f01601f19169290920160200192915050565b63ffffffff61482d82614225565b16825261483c6020820161423e565b6001600160401b038082166020850152806148596040850161423e565b1660408501525050606081013561486f81614f3d565b15156060830152608090810135910152565b8183823760009101908152919050565b600082516148a3818460208701614e73565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156149005783516001600160401b0316855293820193928201926001016148db565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561499e5783516001600160a01b031683529284019291840191600101614979565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b828110156149f45781546001600160a01b0316845292840192600191820191016149cf565b505050838103828501528481528590820160005b86811015614a36578235614a1b81614f28565b6001600160a01b031682529183019190830190600101614a08565b50979650505050505050565b6000610120808352614a578184018b8d6146f3565b90508281036020840152614a6c81898b614783565b90508281036040840152614a818187896146f3565b915050836060830152614a97608083018461481f565b9998505050505050505050565b604081526000614ab86040830186886147ca565b8281036020840152613f6a818587614783565b60e081526000614adf60e0830187896147ca565b8281036020840152614af2818688614783565b915050614b02604083018461481f565b9695505050505050565b608081526000614b2060808301888a6147ca565b8281036020840152614b3281886147f3565b90508281036040840152614b478186886147ca565b915050826060830152979650505050505050565b604081526000614b6f6040830185876147ca565b9050826020830152949350505050565b6020810160058310614ba157634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613e8460208301846147f3565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614d2a57600080fd5b8301803591506001600160401b03821115614d4457600080fd5b6020019150368190038213156140bf57600080fd5b60008235605e198336030181126148a357600080fd5b604051601f8201601f191681016001600160401b0381118282101715614d9757614d97614f12565b604052919050565b60006001600160401b03821115614db857614db8614f12565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614de457614de4614eba565b600160ff1b8390038412811615614dfd57614dfd614eba565b50500190565b60008219821115614e1657614e16614eba565b500190565b600082614e3857634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614e5757614e57614eba565b500290565b600082821015614e6e57614e6e614eba565b500390565b60005b83811015614e8e578181015183820152602001614e76565b83811115610f365750506000910152565b6000600019821415614eb357614eb3614eba565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612a3257600080fd5b8015158114612a3257600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa264697066735822122081dc5948932312d30524de7cc17ade49499ba445ca428ae66bc08f7400de889b64736f6c63430008070033", "libraries": {}, "devdoc": { "author": "Origin Protocol Inc", @@ -1583,12 +1577,12 @@ "paused()": { "details": "Returns true if the contract is paused, and false otherwise." }, - "registerSsvValidator(bytes,uint64[],bytes,uint256,(uint32,uint64,uint64,bool,uint256))": { + "registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))": { "params": { "cluster": "The SSV cluster details including the validator count and SSV balance", "operatorIds": "The operator IDs of the SSV Cluster", - "publicKey": "The public key of the validator", - "sharesData": "The validator shares data", + "publicKeys": "The public keys of the validators", + "sharesData": "The shares data for each validator", "ssvAmount": "The amount of SSV tokens to be deposited to the SSV cluster" } }, @@ -1669,7 +1663,7 @@ "FEE_ACCUMULATOR_ADDRESS()": { "notice": "Fee collector address" }, - "MAX_STAKE()": { + "FULL_STAKE()": { "notice": "The maximum amount of ETH that can be staked by a validator" }, "MAX_VALIDATORS()": { @@ -1678,16 +1672,16 @@ "MIN_FIX_ACCOUNTING_CADENCE()": { "notice": "The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting" }, - "SSV_NETWORK_ADDRESS()": { + "SSV_NETWORK()": { "notice": "The address of the SSV Network contract used to interface with" }, - "SSV_TOKEN_ADDRESS()": { + "SSV_TOKEN()": { "notice": "SSV ERC20 token that serves as a payment for operating SSV validators" }, "VAULT_ADDRESS()": { "notice": "Address of the OETH Vault proxy contract" }, - "WETH_TOKEN_ADDRESS()": { + "WETH()": { "notice": "The address of the Wrapped ETH (WETH) token contract" }, "activeDepositedValidators()": { @@ -1753,7 +1747,7 @@ "platformAddress()": { "notice": "Address of the underlying platform" }, - "registerSsvValidator(bytes,uint64[],bytes,uint256,(uint32,uint64,uint64,bool,uint256))": { + "registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))": { "notice": "Registers a new validator in the SSV Cluster. Only the registrator can call this function." }, "removePToken(uint256)": { @@ -1823,7 +1817,7 @@ "notice": "Address of the OToken vault" }, "withdraw(address,address,uint256)": { - "notice": "Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure." + "notice": "Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - after mints if the strategy is the default - time between depositToStrategy and stakeEth - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure." }, "withdrawAll()": { "notice": "transfer all WETH deposits back to the vault. This does not withdraw from the validators. That has to be done separately with the `exitSsvValidator` and `removeSsvValidator` operations. This does not withdraw any execution rewards from the FeeAccumulator or consensus rewards in this strategy. Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn. ETH from full validator withdrawals is sent to the Vault using `doAccounting`. Will NOT revert if the strategy is paused from an accounting failure." @@ -1835,7 +1829,7 @@ "storageLayout": { "storage": [ { - "astId": 5605, + "astId": 5683, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "initialized", "offset": 0, @@ -1843,7 +1837,7 @@ "type": "t_bool" }, { - "astId": 5608, + "astId": 5686, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "initializing", "offset": 1, @@ -1851,7 +1845,7 @@ "type": "t_bool" }, { - "astId": 5648, + "astId": 5726, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "______gap", "offset": 0, @@ -1867,7 +1861,7 @@ "type": "t_bool" }, { - "astId": 3714, + "astId": 3760, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "validatorRegistrator", "offset": 1, @@ -1875,7 +1869,7 @@ "type": "t_address" }, { - "astId": 3717, + "astId": 3763, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "activeDepositedValidators", "offset": 0, @@ -1883,15 +1877,15 @@ "type": "t_uint256" }, { - "astId": 3723, + "astId": 3769, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "validatorsStates", "offset": 0, "slot": "53", - "type": "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3742)" + "type": "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3788)" }, { - "astId": 3726, + "astId": 3772, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakingMonitor", "offset": 0, @@ -1899,7 +1893,7 @@ "type": "t_address" }, { - "astId": 3729, + "astId": 3775, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakeETHThreshold", "offset": 0, @@ -1907,7 +1901,7 @@ "type": "t_uint256" }, { - "astId": 3732, + "astId": 3778, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakeETHTally", "offset": 0, @@ -1915,7 +1909,7 @@ "type": "t_uint256" }, { - "astId": 3736, + "astId": 3782, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -1923,7 +1917,7 @@ "type": "t_array(t_uint256)47_storage" }, { - "astId": 3207, + "astId": 3250, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "consensusRewards", "offset": 0, @@ -1931,7 +1925,7 @@ "type": "t_uint256" }, { - "astId": 3210, + "astId": 3253, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "fuseIntervalStart", "offset": 0, @@ -1939,7 +1933,7 @@ "type": "t_uint256" }, { - "astId": 3213, + "astId": 3256, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "fuseIntervalEnd", "offset": 0, @@ -1947,7 +1941,7 @@ "type": "t_uint256" }, { - "astId": 3216, + "astId": 3259, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "lastFixAccountingBlockNumber", "offset": 0, @@ -1955,7 +1949,7 @@ "type": "t_uint256" }, { - "astId": 3220, + "astId": 3263, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -1963,7 +1957,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 5728, + "astId": 5806, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_platformAddress", "offset": 0, @@ -1971,7 +1965,7 @@ "type": "t_address" }, { - "astId": 5731, + "astId": 5809, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_vaultAddress", "offset": 0, @@ -1979,7 +1973,7 @@ "type": "t_address" }, { - "astId": 5736, + "astId": 5814, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "assetToPToken", "offset": 0, @@ -1987,7 +1981,7 @@ "type": "t_mapping(t_address,t_address)" }, { - "astId": 5740, + "astId": 5818, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "assetsMapped", "offset": 0, @@ -1995,7 +1989,7 @@ "type": "t_array(t_address)dyn_storage" }, { - "astId": 5742, + "astId": 5820, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_rewardTokenAddress", "offset": 0, @@ -2003,7 +1997,7 @@ "type": "t_address" }, { - "astId": 5744, + "astId": 5822, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_rewardLiquidationThreshold", "offset": 0, @@ -2011,7 +2005,7 @@ "type": "t_uint256" }, { - "astId": 5747, + "astId": 5825, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "harvesterAddress", "offset": 0, @@ -2019,7 +2013,7 @@ "type": "t_address" }, { - "astId": 5751, + "astId": 5829, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "rewardTokenAddresses", "offset": 0, @@ -2027,7 +2021,7 @@ "type": "t_array(t_address)dyn_storage" }, { - "astId": 5755, + "astId": 5833, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_reserved", "offset": 0, @@ -2035,7 +2029,7 @@ "type": "t_array(t_int256)98_storage" }, { - "astId": 2718, + "astId": 2752, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "depositedWethAccountedFor", "offset": 0, @@ -2043,7 +2037,7 @@ "type": "t_uint256" }, { - "astId": 2722, + "astId": 2756, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -2097,7 +2091,7 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_enum(VALIDATOR_STATE)3742": { + "t_enum(VALIDATOR_STATE)3788": { "encoding": "inplace", "label": "enum ValidatorRegistrator.VALIDATOR_STATE", "numberOfBytes": "1" @@ -2114,12 +2108,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3742)": { + "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3788)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => enum ValidatorRegistrator.VALIDATOR_STATE)", "numberOfBytes": "32", - "value": "t_enum(VALIDATOR_STATE)3742" + "value": "t_enum(VALIDATOR_STATE)3788" }, "t_uint256": { "encoding": "inplace", diff --git a/contracts/deployments/holesky/solcInputs/ba8695eb2e88fba4c41fb618e06db1be.json b/contracts/deployments/holesky/solcInputs/ba8695eb2e88fba4c41fb618e06db1be.json new file mode 100644 index 0000000000..544902b5ac --- /dev/null +++ b/contracts/deployments/holesky/solcInputs/ba8695eb2e88fba4c41fb618e06db1be.json @@ -0,0 +1,107 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts/security/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor() {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\nimport \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n function safeTransfer(\n IERC20 token,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n }\n\n function safeTransferFrom(\n IERC20 token,\n address from,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n }\n\n /**\n * @dev Deprecated. This function has issues similar to the ones found in\n * {IERC20-approve}, and its usage is discouraged.\n *\n * Whenever possible, use {safeIncreaseAllowance} and\n * {safeDecreaseAllowance} instead.\n */\n function safeApprove(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n // safeApprove should only be called when setting an initial allowance,\n // or when resetting it to zero. To increase and decrease it, use\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n require(\n (value == 0) || (token.allowance(address(this), spender) == 0),\n \"SafeERC20: approve from non-zero to non-zero allowance\"\n );\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n }\n\n function safeIncreaseAllowance(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n uint256 newAllowance = token.allowance(address(this), spender) + value;\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n\n function safeDecreaseAllowance(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n unchecked {\n uint256 oldAllowance = token.allowance(address(this), spender);\n require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n uint256 newAllowance = oldAllowance - value;\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n if (returndata.length > 0) {\n // Return data is optional\n require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n assembly {\n size := extcodesize(account)\n }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a >= b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a / b + (a % b == 0 ? 0 : 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\n\npragma solidity ^0.8.0;\n\n// CAUTION\n// This version of SafeMath should only be used with Solidity 0.8 or later,\n// because it relies on the compiler's built in overflow checks.\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations.\n *\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\n * now has built in overflow checking.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n return a + b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n return a * b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator.\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b <= a, errorMessage);\n return a - b;\n }\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a / b;\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a % b;\n }\n }\n}\n" + }, + "contracts/governance/Governable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\n * from owner to governor and renounce methods removed. Does not use\n * Context.sol like Ownable.sol does for simplification.\n * @author Origin Protocol Inc\n */\ncontract Governable {\n // Storage position of the owner and pendingOwner of the contract\n // keccak256(\"OUSD.governor\");\n bytes32 private constant governorPosition =\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\n\n // keccak256(\"OUSD.pending.governor\");\n bytes32 private constant pendingGovernorPosition =\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\n\n // keccak256(\"OUSD.reentry.status\");\n bytes32 private constant reentryStatusPosition =\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\n\n // See OpenZeppelin ReentrancyGuard implementation\n uint256 constant _NOT_ENTERED = 1;\n uint256 constant _ENTERED = 2;\n\n event PendingGovernorshipTransfer(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n\n event GovernorshipTransferred(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n\n /**\n * @dev Initializes the contract setting the deployer as the initial Governor.\n */\n constructor() {\n _setGovernor(msg.sender);\n emit GovernorshipTransferred(address(0), _governor());\n }\n\n /**\n * @notice Returns the address of the current Governor.\n */\n function governor() public view returns (address) {\n return _governor();\n }\n\n /**\n * @dev Returns the address of the current Governor.\n */\n function _governor() internal view returns (address governorOut) {\n bytes32 position = governorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n governorOut := sload(position)\n }\n }\n\n /**\n * @dev Returns the address of the pending Governor.\n */\n function _pendingGovernor()\n internal\n view\n returns (address pendingGovernor)\n {\n bytes32 position = pendingGovernorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n pendingGovernor := sload(position)\n }\n }\n\n /**\n * @dev Throws if called by any account other than the Governor.\n */\n modifier onlyGovernor() {\n require(isGovernor(), \"Caller is not the Governor\");\n _;\n }\n\n /**\n * @notice Returns true if the caller is the current Governor.\n */\n function isGovernor() public view returns (bool) {\n return msg.sender == _governor();\n }\n\n function _setGovernor(address newGovernor) internal {\n bytes32 position = governorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newGovernor)\n }\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n bytes32 position = reentryStatusPosition;\n uint256 _reentry_status;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n _reentry_status := sload(position)\n }\n\n // On the first call to nonReentrant, _notEntered will be true\n require(_reentry_status != _ENTERED, \"Reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, _ENTERED)\n }\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, _NOT_ENTERED)\n }\n }\n\n function _setPendingGovernor(address newGovernor) internal {\n bytes32 position = pendingGovernorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newGovernor)\n }\n }\n\n /**\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\n * Can only be called by the current Governor. Must be claimed for this to complete\n * @param _newGovernor Address of the new Governor\n */\n function transferGovernance(address _newGovernor) external onlyGovernor {\n _setPendingGovernor(_newGovernor);\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\n }\n\n /**\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\n * Can only be called by the new Governor.\n */\n function claimGovernance() external {\n require(\n msg.sender == _pendingGovernor(),\n \"Only the pending Governor can complete the claim\"\n );\n _changeGovernor(msg.sender);\n }\n\n /**\n * @dev Change Governance of the contract to a new account (`newGovernor`).\n * @param _newGovernor Address of the new Governor\n */\n function _changeGovernor(address _newGovernor) internal {\n require(_newGovernor != address(0), \"New Governor is address(0)\");\n emit GovernorshipTransferred(_governor(), _newGovernor);\n _setGovernor(_newGovernor);\n }\n}\n" + }, + "contracts/interfaces/IBasicToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IBasicToken {\n function symbol() external view returns (string memory);\n\n function decimals() external view returns (uint8);\n}\n" + }, + "contracts/interfaces/IDepositContract.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDepositContract {\n /// @notice A processed deposit event.\n event DepositEvent(\n bytes pubkey,\n bytes withdrawal_credentials,\n bytes amount,\n bytes signature,\n bytes index\n );\n\n /// @notice Submit a Phase 0 DepositData object.\n /// @param pubkey A BLS12-381 public key.\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\n /// @param signature A BLS12-381 signature.\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\n /// Used as a protection against malformed input.\n function deposit(\n bytes calldata pubkey,\n bytes calldata withdrawal_credentials,\n bytes calldata signature,\n bytes32 deposit_data_root\n ) external payable;\n\n /// @notice Query the current deposit root hash.\n /// @return The deposit root hash.\n function get_deposit_root() external view returns (bytes32);\n\n /// @notice Query the current deposit count.\n /// @return The deposit count encoded as a little endian 64-bit number.\n function get_deposit_count() external view returns (bytes memory);\n}\n" + }, + "contracts/interfaces/ISSVNetwork.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nstruct Cluster {\n uint32 validatorCount;\n uint64 networkFeeIndex;\n uint64 index;\n bool active;\n uint256 balance;\n}\n\ninterface ISSVNetwork {\n /**********/\n /* Errors */\n /**********/\n\n error CallerNotOwner(); // 0x5cd83192\n error CallerNotWhitelisted(); // 0x8c6e5d71\n error FeeTooLow(); // 0x732f9413\n error FeeExceedsIncreaseLimit(); // 0x958065d9\n error NoFeeDeclared(); // 0x1d226c30\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\n error OperatorDoesNotExist(); // 0x961e3e8c\n error InsufficientBalance(); // 0xf4d678b8\n error ValidatorDoesNotExist(); // 0xe51315d2\n error ClusterNotLiquidatable(); // 0x60300a8d\n error InvalidPublicKeyLength(); // 0x637297a4\n error InvalidOperatorIdsLength(); // 0x38186224\n error ClusterAlreadyEnabled(); // 0x3babafd2\n error ClusterIsLiquidated(); // 0x95a0cf33\n error ClusterDoesNotExists(); // 0x185e2b16\n error IncorrectClusterState(); // 0x12e04c87\n error UnsortedOperatorsList(); // 0xdd020e25\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\n error ExceedValidatorLimit(); // 0x6df5ab76\n error TokenTransferFailed(); // 0x045c4b02\n error SameFeeChangeNotAllowed(); // 0xc81272f8\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\n error NotAuthorized(); // 0xea8e4eb5\n error OperatorsListNotUnique(); // 0xa5a1ff5d\n error OperatorAlreadyExists(); // 0x289c9494\n error TargetModuleDoesNotExist(); // 0x8f9195fb\n error MaxValueExceeded(); // 0x91aa3017\n error FeeTooHigh(); // 0xcd4e6167\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\n error EmptyPublicKeysList(); // df83e679\n\n // legacy errors\n error ValidatorAlreadyExists(); // 0x8d09a73e\n error IncorrectValidatorState(); // 0x2feda3c1\n\n event AdminChanged(address previousAdmin, address newAdmin);\n event BeaconUpgraded(address indexed beacon);\n event ClusterDeposited(\n address indexed owner,\n uint64[] operatorIds,\n uint256 value,\n Cluster cluster\n );\n event ClusterLiquidated(\n address indexed owner,\n uint64[] operatorIds,\n Cluster cluster\n );\n event ClusterReactivated(\n address indexed owner,\n uint64[] operatorIds,\n Cluster cluster\n );\n event ClusterWithdrawn(\n address indexed owner,\n uint64[] operatorIds,\n uint256 value,\n Cluster cluster\n );\n event DeclareOperatorFeePeriodUpdated(uint64 value);\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\n event FeeRecipientAddressUpdated(\n address indexed owner,\n address recipientAddress\n );\n event Initialized(uint8 version);\n event LiquidationThresholdPeriodUpdated(uint64 value);\n event MinimumLiquidationCollateralUpdated(uint256 value);\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\n event OperatorAdded(\n uint64 indexed operatorId,\n address indexed owner,\n bytes publicKey,\n uint256 fee\n );\n event OperatorFeeDeclarationCancelled(\n address indexed owner,\n uint64 indexed operatorId\n );\n event OperatorFeeDeclared(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 blockNumber,\n uint256 fee\n );\n event OperatorFeeExecuted(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 blockNumber,\n uint256 fee\n );\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\n event OperatorMaximumFeeUpdated(uint64 maxFee);\n event OperatorRemoved(uint64 indexed operatorId);\n event OperatorWhitelistUpdated(\n uint64 indexed operatorId,\n address whitelisted\n );\n event OperatorWithdrawn(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 value\n );\n event OwnershipTransferStarted(\n address indexed previousOwner,\n address indexed newOwner\n );\n event OwnershipTransferred(\n address indexed previousOwner,\n address indexed newOwner\n );\n event Upgraded(address indexed implementation);\n event ValidatorAdded(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey,\n bytes shares,\n Cluster cluster\n );\n event ValidatorExited(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey\n );\n event ValidatorRemoved(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey,\n Cluster cluster\n );\n\n fallback() external;\n\n function acceptOwnership() external;\n\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\n\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\n\n function deposit(\n address clusterOwner,\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function executeOperatorFee(uint64 operatorId) external;\n\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\n external;\n\n function bulkExitValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds\n ) external;\n\n function getVersion() external pure returns (string memory version);\n\n function initialize(\n address token_,\n address ssvOperators_,\n address ssvClusters_,\n address ssvDAO_,\n address ssvViews_,\n uint64 minimumBlocksBeforeLiquidation_,\n uint256 minimumLiquidationCollateral_,\n uint32 validatorsPerOperatorLimit_,\n uint64 declareOperatorFeePeriod_,\n uint64 executeOperatorFeePeriod_,\n uint64 operatorMaxFeeIncrease_\n ) external;\n\n function liquidate(\n address clusterOwner,\n uint64[] memory operatorIds,\n Cluster memory cluster\n ) external;\n\n function owner() external view returns (address);\n\n function pendingOwner() external view returns (address);\n\n function proxiableUUID() external view returns (bytes32);\n\n function reactivate(\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\n\n function registerOperator(bytes memory publicKey, uint256 fee)\n external\n returns (uint64 id);\n\n function registerValidator(\n bytes memory publicKey,\n uint64[] memory operatorIds,\n bytes memory sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function bulkRegisterValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function removeOperator(uint64 operatorId) external;\n\n function removeValidator(\n bytes memory publicKey,\n uint64[] memory operatorIds,\n Cluster memory cluster\n ) external;\n\n function bulkRemoveValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n Cluster memory cluster\n ) external;\n\n function renounceOwnership() external;\n\n function setFeeRecipientAddress(address recipientAddress) external;\n\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\n external;\n\n function transferOwnership(address newOwner) external;\n\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\n\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\n\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\n\n function updateMaximumOperatorFee(uint64 maxFee) external;\n\n function updateMinimumLiquidationCollateral(uint256 amount) external;\n\n function updateModule(uint8 moduleId, address moduleAddress) external;\n\n function updateNetworkFee(uint256 fee) external;\n\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\n\n function upgradeTo(address newImplementation) external;\n\n function upgradeToAndCall(address newImplementation, bytes memory data)\n external\n payable;\n\n function withdraw(\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\n\n function withdrawNetworkEarnings(uint256 amount) external;\n\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\n external;\n}\n" + }, + "contracts/interfaces/IStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\n */\ninterface IStrategy {\n /**\n * @dev Deposit the given asset to platform\n * @param _asset asset address\n * @param _amount Amount to deposit\n */\n function deposit(address _asset, uint256 _amount) external;\n\n /**\n * @dev Deposit the entire balance of all supported assets in the Strategy\n * to the platform\n */\n function depositAll() external;\n\n /**\n * @dev Withdraw given asset from Lending platform\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external;\n\n /**\n * @dev Liquidate all assets in strategy and return them to Vault.\n */\n function withdrawAll() external;\n\n /**\n * @dev Returns the current balance of the given asset.\n */\n function checkBalance(address _asset)\n external\n view\n returns (uint256 balance);\n\n /**\n * @dev Returns bool indicating whether strategy supports asset.\n */\n function supportsAsset(address _asset) external view returns (bool);\n\n /**\n * @dev Collect reward tokens from the Strategy.\n */\n function collectRewardTokens() external;\n\n /**\n * @dev The address array of the reward tokens for the Strategy.\n */\n function getRewardTokenAddresses() external view returns (address[] memory);\n}\n" + }, + "contracts/interfaces/IVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { VaultStorage } from \"../vault/VaultStorage.sol\";\n\ninterface IVault {\n event AssetSupported(address _asset);\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\n event StrategyApproved(address _addr);\n event StrategyRemoved(address _addr);\n event Mint(address _addr, uint256 _value);\n event Redeem(address _addr, uint256 _value);\n event CapitalPaused();\n event CapitalUnpaused();\n event RebasePaused();\n event RebaseUnpaused();\n event VaultBufferUpdated(uint256 _vaultBuffer);\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\n event PriceProviderUpdated(address _priceProvider);\n event AllocateThresholdUpdated(uint256 _threshold);\n event RebaseThresholdUpdated(uint256 _threshold);\n event StrategistUpdated(address _address);\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\n event TrusteeFeeBpsChanged(uint256 _basis);\n event TrusteeAddressChanged(address _address);\n event SwapperChanged(address _address);\n event SwapAllowedUndervalueChanged(uint256 _basis);\n event SwapSlippageChanged(address _asset, uint256 _basis);\n event Swapped(\n address indexed _fromAsset,\n address indexed _toAsset,\n uint256 _fromAssetAmount,\n uint256 _toAssetAmount\n );\n\n // Governable.sol\n function transferGovernance(address _newGovernor) external;\n\n function claimGovernance() external;\n\n function governor() external view returns (address);\n\n // VaultAdmin.sol\n function setPriceProvider(address _priceProvider) external;\n\n function priceProvider() external view returns (address);\n\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\n\n function redeemFeeBps() external view returns (uint256);\n\n function setVaultBuffer(uint256 _vaultBuffer) external;\n\n function vaultBuffer() external view returns (uint256);\n\n function setAutoAllocateThreshold(uint256 _threshold) external;\n\n function autoAllocateThreshold() external view returns (uint256);\n\n function setRebaseThreshold(uint256 _threshold) external;\n\n function rebaseThreshold() external view returns (uint256);\n\n function setStrategistAddr(address _address) external;\n\n function strategistAddr() external view returns (address);\n\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\n\n function maxSupplyDiff() external view returns (uint256);\n\n function setTrusteeAddress(address _address) external;\n\n function trusteeAddress() external view returns (address);\n\n function setTrusteeFeeBps(uint256 _basis) external;\n\n function trusteeFeeBps() external view returns (uint256);\n\n function ousdMetaStrategy() external view returns (address);\n\n function setSwapper(address _swapperAddr) external;\n\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\n\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\n external;\n\n function supportAsset(address _asset, uint8 _supportsAsset) external;\n\n function approveStrategy(address _addr) external;\n\n function removeStrategy(address _addr) external;\n\n function setAssetDefaultStrategy(address _asset, address _strategy)\n external;\n\n function assetDefaultStrategies(address _asset)\n external\n view\n returns (address);\n\n function pauseRebase() external;\n\n function unpauseRebase() external;\n\n function rebasePaused() external view returns (bool);\n\n function pauseCapital() external;\n\n function unpauseCapital() external;\n\n function capitalPaused() external view returns (bool);\n\n function transferToken(address _asset, uint256 _amount) external;\n\n function priceUnitMint(address asset) external view returns (uint256);\n\n function priceUnitRedeem(address asset) external view returns (uint256);\n\n function withdrawAllFromStrategy(address _strategyAddr) external;\n\n function withdrawAllFromStrategies() external;\n\n function withdrawFromStrategy(\n address _strategyFromAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external;\n\n function depositToStrategy(\n address _strategyToAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external;\n\n // VaultCore.sol\n function mint(\n address _asset,\n uint256 _amount,\n uint256 _minimumOusdAmount\n ) external;\n\n function mintForStrategy(uint256 _amount) external;\n\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\n\n function burnForStrategy(uint256 _amount) external;\n\n function redeemAll(uint256 _minimumUnitAmount) external;\n\n function allocate() external;\n\n function rebase() external;\n\n function swapCollateral(\n address fromAsset,\n address toAsset,\n uint256 fromAssetAmount,\n uint256 minToAssetAmount,\n bytes calldata data\n ) external returns (uint256 toAssetAmount);\n\n function totalValue() external view returns (uint256 value);\n\n function checkBalance(address _asset) external view returns (uint256);\n\n function calculateRedeemOutputs(uint256 _amount)\n external\n view\n returns (uint256[] memory);\n\n function getAssetCount() external view returns (uint256);\n\n function getAssetConfig(address _asset)\n external\n view\n returns (VaultStorage.Asset memory config);\n\n function getAllAssets() external view returns (address[] memory);\n\n function getStrategyCount() external view returns (uint256);\n\n function swapper() external view returns (address);\n\n function allowedSwapUndervalue() external view returns (uint256);\n\n function getAllStrategies() external view returns (address[] memory);\n\n function isSupportedAsset(address _asset) external view returns (bool);\n\n function netOusdMintForStrategyThreshold() external view returns (uint256);\n\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\n\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\n\n function netOusdMintedForStrategy() external view returns (int256);\n\n function weth() external view returns (address);\n\n function cacheWETHAssetIndex() external;\n\n function wethAssetIndex() external view returns (uint256);\n\n function initialize(address, address) external;\n\n function setAdminImpl(address) external;\n\n function removeAsset(address _asset) external;\n}\n" + }, + "contracts/interfaces/IWETH9.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IWETH9 {\n event Approval(address indexed src, address indexed guy, uint256 wad);\n event Deposit(address indexed dst, uint256 wad);\n event Transfer(address indexed src, address indexed dst, uint256 wad);\n event Withdrawal(address indexed src, uint256 wad);\n\n function allowance(address, address) external view returns (uint256);\n\n function approve(address guy, uint256 wad) external returns (bool);\n\n function balanceOf(address) external view returns (uint256);\n\n function decimals() external view returns (uint8);\n\n function deposit() external payable;\n\n function name() external view returns (string memory);\n\n function symbol() external view returns (string memory);\n\n function totalSupply() external view returns (uint256);\n\n function transfer(address dst, uint256 wad) external returns (bool);\n\n function transferFrom(\n address src,\n address dst,\n uint256 wad\n ) external returns (bool);\n\n function withdraw(uint256 wad) external;\n}\n" + }, + "contracts/strategies/NativeStaking/FeeAccumulator.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\n/**\n * @title Fee Accumulator for Native Staking SSV Strategy\n * @notice Receives execution rewards which includes tx fees and\n * MEV rewards like tx priority and tx ordering.\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\n * @author Origin Protocol Inc\n */\ncontract FeeAccumulator {\n /// @notice The address of the Native Staking Strategy\n address public immutable STRATEGY;\n\n /**\n * @param _strategy Address of the Native Staking Strategy\n */\n constructor(address _strategy) {\n STRATEGY = _strategy;\n }\n\n /**\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\n */\n function collect() external returns (uint256 eth) {\n require(msg.sender == STRATEGY, \"Caller is not the Strategy\");\n\n eth = address(this).balance;\n if (eth > 0) {\n // Send the ETH to the Native Staking Strategy\n Address.sendValue(payable(STRATEGY), eth);\n }\n }\n\n /**\n * @dev Accept ETH\n */\n receive() external payable {}\n}\n" + }, + "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/math/Math.sol\";\n\nimport { InitializableAbstractStrategy } from \"../../utils/InitializableAbstractStrategy.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\nimport { FeeAccumulator } from \"./FeeAccumulator.sol\";\nimport { ValidatorAccountant } from \"./ValidatorAccountant.sol\";\n\nstruct ValidatorStakeData {\n bytes pubkey;\n bytes signature;\n bytes32 depositDataRoot;\n}\n\n/// @title Native Staking SSV Strategy\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\n/// @author Origin Protocol Inc\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\n/// required since the rewards (reward token) is also in ETH.\n///\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\n/// immediately wraps ETH to WETH and sends it to the Vault.\n///\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\n/// - as a result of already accounted for consensus rewards\n/// - as a result of not yet accounted for consensus rewards\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\n///\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\n/// interval and not immediately.\ncontract NativeStakingSSVStrategy is\n ValidatorAccountant,\n InitializableAbstractStrategy\n{\n using SafeERC20 for IERC20;\n\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\n address public immutable SSV_TOKEN;\n /// @notice Fee collector address\n /// @dev this address will receive Execution layer rewards - These are rewards earned for\n /// executing transactions on the Ethereum network as part of block proposals. They include\n /// priority fees (fees paid by users for their transactions to be included) and MEV rewards\n /// (rewards for arranging transactions in a way that benefits the validator).\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\n\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\n /// of WETH that has already been accounted for.\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\n /// deposit events.\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\n /// be staked.\n uint256 public depositedWethAccountedFor;\n\n // For future use\n uint256[49] private __gap;\n\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _ssvToken Address of the Erc20 SSV Token contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n constructor(\n BaseStrategyConfig memory _baseConfig,\n address _wethAddress,\n address _ssvToken,\n address _ssvNetwork,\n uint256 _maxValidators,\n address _feeAccumulator,\n address _beaconChainDepositContract\n )\n InitializableAbstractStrategy(_baseConfig)\n ValidatorAccountant(\n _wethAddress,\n _baseConfig.vaultAddress,\n _beaconChainDepositContract,\n _ssvNetwork,\n _maxValidators\n )\n {\n SSV_TOKEN = _ssvToken;\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\n }\n\n /// @notice initialize function, to set up initial internal state\n /// @param _rewardTokenAddresses Address of reward token for platform\n /// @param _assets Addresses of initial supported assets\n /// @param _pTokens Platform Token corresponding addresses\n function initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n }\n\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\n /// It just checks the asset is WETH and emits the Deposit event.\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n /// @param _asset Address of asset to deposit. Has to be WETH.\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n require(_asset == WETH, \"Unsupported asset\");\n depositedWethAccountedFor += _amount;\n _deposit(_asset, _amount);\n }\n\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\n /// @param _asset Address of WETH\n /// @param _amount Amount of WETH to deposit\n function _deposit(address _asset, uint256 _amount) internal {\n require(_amount > 0, \"Must deposit something\");\n /*\n * We could do a check here that would revert when \"_amount % 32 ether != 0\". With the idea of\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\n * of 32ETH have been staked.\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\n *\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\n */\n emit Deposit(_asset, address(0), _amount);\n }\n\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\n /// It just emits the Deposit event.\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n function depositAll() external override onlyVault nonReentrant {\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\n\n if (newWeth > 0) {\n depositedWethAccountedFor = wethBalance;\n\n _deposit(WETH, newWeth);\n }\n }\n\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\n /// That can happen when:\n /// - after mints if the strategy is the default\n /// - time between depositToStrategy and stakeEth\n /// - the deposit was not a multiple of 32 WETH\n /// - someone sent WETH directly to this contract\n /// Will NOT revert if the strategy is paused from an accounting failure.\n /// @param _recipient Address to receive withdrawn assets\n /// @param _asset WETH to withdraw\n /// @param _amount Amount of WETH to withdraw\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n require(_asset == WETH, \"Unsupported asset\");\n _withdraw(_recipient, _asset, _amount);\n }\n\n function _withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) internal {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n\n _wethWithdrawn(_amount);\n\n IERC20(_asset).safeTransfer(_recipient, _amount);\n emit Withdrawal(_asset, address(0), _amount);\n }\n\n /// @notice transfer all WETH deposits back to the vault.\n /// This does not withdraw from the validators. That has to be done separately with the\n /// `exitSsvValidator` and `removeSsvValidator` operations.\n /// This does not withdraw any execution rewards from the FeeAccumulator or\n /// consensus rewards in this strategy.\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\n if (wethBalance > 0) {\n _withdraw(vaultAddress, WETH, wethBalance);\n }\n }\n\n /// @notice Returns the total value of (W)ETH that is staked to the validators\n /// and WETH deposits that are still to be staked.\n /// This does not include ETH from consensus rewards sitting in this strategy\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\n /// @param _asset Address of weth asset\n /// @return balance Total value of (W)ETH\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n require(_asset == WETH, \"Unsupported asset\");\n\n balance =\n // add the ETH that has been staked in validators\n activeDepositedValidators *\n FULL_STAKE +\n // add the WETH in the strategy from deposits that are still to be staked\n IERC20(WETH).balanceOf(address(this));\n }\n\n function pause() external onlyStrategist {\n _pause();\n }\n\n /// @notice Returns bool indicating whether asset is supported by strategy.\n /// @param _asset The address of the asset token.\n function supportsAsset(address _asset) public view override returns (bool) {\n return _asset == WETH;\n }\n\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\n function safeApproveAllTokens() external override {\n /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\n }\n\n /**\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\n * unwrapping WETH just before staking it to the validator\n * @dev don't want to receive donations from anyone else as this will\n * mess with the accounting of the consensus rewards and validator full withdrawals\n */\n receive() external payable {\n require(\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\n \"Eth not from allowed contracts\"\n );\n }\n\n /***************************************\n Internal functions\n ****************************************/\n\n function _abstractSetPToken(address _asset, address) internal override {}\n\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\n /// Will revert if the strategy is paused for accounting.\n function _collectRewardTokens() internal override whenNotPaused {\n // collect ETH from execution rewards from the fee accumulator\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\n .collect();\n\n // total ETH rewards to be harvested = execution rewards + consensus rewards\n uint256 ethRewards = executionRewards + consensusRewards;\n\n require(\n address(this).balance >= ethRewards,\n \"Insufficient eth balance\"\n );\n\n if (ethRewards > 0) {\n // reset the counter keeping track of beacon chain consensus rewards\n consensusRewards = 0;\n\n // Convert ETH rewards to WETH\n IWETH9(WETH).deposit{ value: ethRewards }();\n\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\n }\n }\n\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\n function _wethWithdrawnToVault(uint256 _amount) internal override {\n emit Withdrawal(WETH, address(0), _amount);\n }\n\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\n /// the strategy knows how much WETH it has on deposit.\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\n function _wethWithdrawn(uint256 _amount) internal override {\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\n * depositedWethAccountedFor is smaller than the _amount.\n *\n * The reason this is required is that a malicious actor could sent WETH directly\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\n * be deducted so much that it would be negative.\n */\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\n depositedWethAccountedFor -= deductAmount;\n }\n}\n" + }, + "contracts/strategies/NativeStaking/ValidatorAccountant.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ValidatorRegistrator } from \"./ValidatorRegistrator.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\n\n/// @title Validator Accountant\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\n/// Full withdrawals are from exited validators.\n/// @author Origin Protocol Inc\nabstract contract ValidatorAccountant is ValidatorRegistrator {\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\n\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\n uint256 public consensusRewards;\n\n /// @notice start of fuse interval\n uint256 public fuseIntervalStart;\n /// @notice end of fuse interval\n uint256 public fuseIntervalEnd;\n /// @notice last block number manuallyFixAccounting has been called\n uint256 public lastFixAccountingBlockNumber;\n\n uint256[49] private __gap;\n\n event FuseIntervalUpdated(uint256 start, uint256 end);\n event AccountingFullyWithdrawnValidator(\n uint256 noOfValidators,\n uint256 remainingValidators,\n uint256 wethSentToVault\n );\n event AccountingValidatorSlashed(\n uint256 remainingValidators,\n uint256 wethSentToVault\n );\n event AccountingConsensusRewards(uint256 amount);\n\n event AccountingManuallyFixed(\n int256 validatorsDelta,\n int256 consensusRewardsDelta,\n uint256 wethToVault\n );\n\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _vaultAddress Address of the Vault\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n constructor(\n address _wethAddress,\n address _vaultAddress,\n address _beaconChainDepositContract,\n address _ssvNetwork,\n uint256 _maxValidators\n )\n ValidatorRegistrator(\n _wethAddress,\n _vaultAddress,\n _beaconChainDepositContract,\n _ssvNetwork,\n _maxValidators\n )\n {}\n\n /// @notice set fuse interval values\n function setFuseInterval(\n uint256 _fuseIntervalStart,\n uint256 _fuseIntervalEnd\n ) external onlyGovernor {\n require(\n _fuseIntervalStart < _fuseIntervalEnd &&\n _fuseIntervalEnd < 32 ether &&\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\n \"Incorrect fuse interval\"\n );\n\n fuseIntervalStart = _fuseIntervalStart;\n fuseIntervalEnd = _fuseIntervalEnd;\n\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\n }\n\n /* solhint-disable max-line-length */\n /// This notion page offers a good explanation of how the accounting functions\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\n /// the accounting function will treat that as a validator slashing.\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\n /// accounting is valid and fuse isn't \"blown\". Returns false when fuse is blown.\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\n /// for now.\n /// @return accountingValid true if accounting was successful, false if fuse is blown\n /* solhint-enable max-line-length */\n function doAccounting()\n external\n onlyRegistrator\n whenNotPaused\n returns (bool accountingValid)\n {\n // pause the accounting on failure\n accountingValid = _doAccounting(true);\n }\n\n // slither-disable-start reentrancy-eth\n function _doAccounting(bool pauseOnFail)\n internal\n returns (bool accountingValid)\n {\n if (address(this).balance < consensusRewards) {\n return _failAccounting(pauseOnFail);\n }\n\n // Calculate all the new ETH that has been swept to the contract since the last accounting\n uint256 newSweptETH = address(this).balance - consensusRewards;\n accountingValid = true;\n\n // send the ETH that is from fully withdrawn validators to the Vault\n if (newSweptETH >= FULL_STAKE) {\n uint256 fullyWithdrawnValidators;\n // explicitly cast to uint256 as we want to round to a whole number of validators\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\n activeDepositedValidators -= fullyWithdrawnValidators;\n\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\n IWETH9(WETH).deposit{ value: wethToVault }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\n _wethWithdrawnToVault(wethToVault);\n\n emit AccountingFullyWithdrawnValidator(\n fullyWithdrawnValidators,\n activeDepositedValidators,\n wethToVault\n );\n }\n\n uint256 ethRemaining = address(this).balance - consensusRewards;\n // should be less than a whole validator stake\n require(ethRemaining < FULL_STAKE, \"Unexpected accounting\");\n\n // If no Beacon chain consensus rewards swept\n if (ethRemaining == 0) {\n // do nothing\n return accountingValid;\n } else if (ethRemaining < fuseIntervalStart) {\n // Beacon chain consensus rewards swept (partial validator withdrawals)\n // solhint-disable-next-line reentrancy\n consensusRewards += ethRemaining;\n emit AccountingConsensusRewards(ethRemaining);\n } else if (ethRemaining > fuseIntervalEnd) {\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\n IWETH9(WETH).deposit{ value: ethRemaining }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\n activeDepositedValidators -= 1;\n\n _wethWithdrawnToVault(ethRemaining);\n\n emit AccountingValidatorSlashed(\n activeDepositedValidators,\n ethRemaining\n );\n }\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\n else {\n return _failAccounting(pauseOnFail);\n }\n }\n\n // slither-disable-end reentrancy-eth\n\n /// @dev pause any further accounting if required and return false\n function _failAccounting(bool pauseOnFail)\n internal\n returns (bool accountingValid)\n {\n // pause if not already\n if (pauseOnFail) {\n _pause();\n }\n // fail the accounting\n accountingValid = false;\n }\n\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\n /// to \"dip into\"/use. To increase the amount of unaccounted ETH over the fuse end interval\n /// we need to reduce the amount of active deposited validators and immediately send WETH\n /// to the vault, so it doesn't interfere with further accounting.\n function manuallyFixAccounting(\n int256 _validatorsDelta,\n int256 _consensusRewardsDelta,\n uint256 _ethToVaultAmount\n ) external onlyStrategist whenPaused {\n require(\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\n block.number,\n \"Fix accounting called too soon\"\n );\n require(\n _validatorsDelta >= -3 &&\n _validatorsDelta <= 3 &&\n // new value must be positive\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\n \"Invalid validatorsDelta\"\n );\n require(\n _consensusRewardsDelta >= -332 ether &&\n _consensusRewardsDelta <= 332 ether &&\n // new value must be positive\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\n \"Invalid consensusRewardsDelta\"\n );\n require(_ethToVaultAmount <= 32 ether * 3, \"Invalid wethToVaultAmount\");\n\n activeDepositedValidators = uint256(\n int256(activeDepositedValidators) + _validatorsDelta\n );\n consensusRewards = uint256(\n int256(consensusRewards) + _consensusRewardsDelta\n );\n lastFixAccountingBlockNumber = block.number;\n if (_ethToVaultAmount > 0) {\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\n _wethWithdrawnToVault(_ethToVaultAmount);\n }\n\n emit AccountingManuallyFixed(\n _validatorsDelta,\n _consensusRewardsDelta,\n _ethToVaultAmount\n );\n\n // rerun the accounting to see if it has now been fixed.\n // Do not pause the accounting on failure as it is already paused\n require(_doAccounting(false), \"Fuse still blown\");\n\n // unpause since doAccounting was successful\n _unpause();\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\n}\n" + }, + "contracts/strategies/NativeStaking/ValidatorRegistrator.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Pausable } from \"@openzeppelin/contracts/security/Pausable.sol\";\nimport { Governable } from \"../../governance/Governable.sol\";\nimport { IDepositContract } from \"../../interfaces/IDepositContract.sol\";\nimport { IVault } from \"../../interfaces/IVault.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\nimport { ISSVNetwork, Cluster } from \"../../interfaces/ISSVNetwork.sol\";\n\nstruct ValidatorStakeData {\n bytes pubkey;\n bytes signature;\n bytes32 depositDataRoot;\n}\n\n/**\n * @title Registrator of the validators\n * @notice This contract implements all the required functionality to register, exit and remove validators.\n * @author Origin Protocol Inc\n */\nabstract contract ValidatorRegistrator is Governable, Pausable {\n /// @notice The maximum amount of ETH that can be staked by a validator\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\n uint256 public constant FULL_STAKE = 32 ether;\n\n /// @notice The address of the Wrapped ETH (WETH) token contract\n address public immutable WETH;\n /// @notice The address of the beacon chain deposit contract\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\n /// @notice The address of the SSV Network contract used to interface with\n address public immutable SSV_NETWORK;\n /// @notice Address of the OETH Vault proxy contract\n address public immutable VAULT_ADDRESS;\n /// @notice Maximum number of validators that can be registered in this strategy\n uint256 public immutable MAX_VALIDATORS;\n\n /// @notice Address of the registrator - allowed to register, exit and remove validators\n address public validatorRegistrator;\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\n /// to a validator happens this number increases, when a validator exit is detected this number\n /// decreases.\n uint256 public activeDepositedValidators;\n /// @notice State of the validators keccak256(pubKey) => state\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\n address public stakingMonitor;\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\n /// and the governor needs to approve further staking\n uint256 public stakeETHThreshold;\n /// @notice Amount of ETH that can has been staked since the last governor approval.\n uint256 public stakeETHTally;\n // For future use\n uint256[47] private __gap;\n\n enum VALIDATOR_STATE {\n NON_REGISTERED, // validator is not registered on the SSV network\n REGISTERED, // validator is registered on the SSV network\n STAKED, // validator has funds staked\n EXITING, // exit message has been posted and validator is in the process of exiting\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\n }\n\n event RegistratorChanged(address indexed newAddress);\n event StakingMonitorChanged(address indexed newAddress);\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\n event SSVValidatorRegistered(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event SSVValidatorExitInitiated(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event SSVValidatorExitCompleted(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event StakeETHThresholdChanged(uint256 amount);\n event StakeETHTallyReset();\n\n /// @dev Throws if called by any account other than the Registrator\n modifier onlyRegistrator() {\n require(\n msg.sender == validatorRegistrator,\n \"Caller is not the Registrator\"\n );\n _;\n }\n\n /// @dev Throws if called by any account other than the Staking monitor\n modifier onlyStakingMonitor() {\n require(msg.sender == stakingMonitor, \"Caller is not the Monitor\");\n _;\n }\n\n /// @dev Throws if called by any account other than the Strategist\n modifier onlyStrategist() {\n require(\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\n \"Caller is not the Strategist\"\n );\n _;\n }\n\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _vaultAddress Address of the Vault\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n constructor(\n address _wethAddress,\n address _vaultAddress,\n address _beaconChainDepositContract,\n address _ssvNetwork,\n uint256 _maxValidators\n ) {\n WETH = _wethAddress;\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\n SSV_NETWORK = _ssvNetwork;\n VAULT_ADDRESS = _vaultAddress;\n MAX_VALIDATORS = _maxValidators;\n }\n\n /// @notice Set the address of the registrator which can register, exit and remove validators\n function setRegistrator(address _address) external onlyGovernor {\n validatorRegistrator = _address;\n emit RegistratorChanged(_address);\n }\n\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\n function setStakingMonitor(address _address) external onlyGovernor {\n stakingMonitor = _address;\n emit StakingMonitorChanged(_address);\n }\n\n /// @notice Set the amount of ETH that can be staked before staking monitor\n // needs to a approve further staking by resetting the stake ETH tally\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\n stakeETHThreshold = _amount;\n emit StakeETHThresholdChanged(_amount);\n }\n\n /// @notice Reset the stakeETHTally\n function resetStakeETHTally() external onlyStakingMonitor {\n stakeETHTally = 0;\n emit StakeETHTallyReset();\n }\n\n /// @notice Stakes WETH to the node validators\n /// @param validators A list of validator data needed to stake.\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\n /// Only the registrator can call this function.\n // slither-disable-start reentrancy-eth\n function stakeEth(ValidatorStakeData[] calldata validators)\n external\n onlyRegistrator\n whenNotPaused\n {\n uint256 requiredETH = validators.length * FULL_STAKE;\n\n // Check there is enough WETH from the deposits sitting in this strategy contract\n require(\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\n \"Insufficient WETH\"\n );\n require(\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\n \"Max validators reached\"\n );\n\n require(\n stakeETHTally + requiredETH <= stakeETHThreshold,\n \"Staking ETH over threshold\"\n );\n stakeETHTally += requiredETH;\n\n // Convert required ETH from WETH\n IWETH9(WETH).withdraw(requiredETH);\n _wethWithdrawn(requiredETH);\n\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\n * can sweep funds to.\n * bytes11(0) to fill up the required zeros\n * remaining bytes20 are for the address\n */\n bytes memory withdrawalCredentials = abi.encodePacked(\n bytes1(0x01),\n bytes11(0),\n address(this)\n );\n\n // For each validator\n for (uint256 i = 0; i < validators.length; ++i) {\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\n\n require(\n currentState == VALIDATOR_STATE.REGISTERED,\n \"Validator not registered\"\n );\n\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\n value: FULL_STAKE\n }(\n validators[i].pubkey,\n withdrawalCredentials,\n validators[i].signature,\n validators[i].depositDataRoot\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\n\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\n }\n // save gas by changing this storage variable only once rather each time in the loop.\n activeDepositedValidators += validators.length;\n }\n\n // slither-disable-end reentrancy-eth\n\n /// @notice Registers a new validator in the SSV Cluster.\n /// Only the registrator can call this function.\n /// @param publicKeys The public keys of the validators\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param sharesData The shares data for each validator\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n // slither-disable-start reentrancy-no-eth\n function registerSsvValidators(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 ssvAmount,\n Cluster calldata cluster\n ) external onlyRegistrator whenNotPaused {\n require(\n publicKeys.length == sharesData.length,\n \"Pubkey sharesData mismatch\"\n );\n // Check each public key has not already been used\n bytes32 pubKeyHash;\n VALIDATOR_STATE currentState;\n for (uint256 i = 0; i < publicKeys.length; ++i) {\n pubKeyHash = keccak256(publicKeys[i]);\n currentState = validatorsStates[pubKeyHash];\n require(\n currentState == VALIDATOR_STATE.NON_REGISTERED,\n \"Validator already registered\"\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\n\n emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds);\n }\n\n ISSVNetwork(SSV_NETWORK).bulkRegisterValidator(\n publicKeys,\n operatorIds,\n sharesData,\n ssvAmount,\n cluster\n );\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Exit a validator from the Beacon chain.\n /// The staked ETH will eventually swept to this native staking strategy.\n /// Only the registrator can call this function.\n /// @param publicKey The public key of the validator\n /// @param operatorIds The operator IDs of the SSV Cluster\n // slither-disable-start reentrancy-no-eth\n function exitSsvValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds\n ) external onlyRegistrator whenNotPaused {\n bytes32 pubKeyHash = keccak256(publicKey);\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\n require(currentState == VALIDATOR_STATE.STAKED, \"Validator not staked\");\n\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\n\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Remove a validator from the SSV Cluster.\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\n /// Only the registrator can call this function.\n /// @param publicKey The public key of the validator\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n // slither-disable-start reentrancy-no-eth\n function removeSsvValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds,\n Cluster calldata cluster\n ) external onlyRegistrator whenNotPaused {\n bytes32 pubKeyHash = keccak256(publicKey);\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\n require(\n currentState == VALIDATOR_STATE.EXITING,\n \"Validator not exiting\"\n );\n\n ISSVNetwork(SSV_NETWORK).removeValidator(\n publicKey,\n operatorIds,\n cluster\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\n\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\n /// uses \"onlyStrategist\" modifier so continuous front-running can't DOS our maintenance service\n /// that tries to top up SSV tokens.\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n function depositSSV(\n uint64[] memory operatorIds,\n uint256 ssvAmount,\n Cluster memory cluster\n ) external onlyStrategist {\n ISSVNetwork(SSV_NETWORK).deposit(\n address(this),\n operatorIds,\n ssvAmount,\n cluster\n );\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\n /// the strategy knows how much WETH it has on deposit.\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\n function _wethWithdrawn(uint256 _amount) internal virtual;\n}\n" + }, + "contracts/token/OUSD.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD Token Contract\n * @dev ERC20 compatible contract for OUSD\n * @dev Implements an elastic supply\n * @author Origin Protocol Inc\n */\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { InitializableERC20Detailed } from \"../utils/InitializableERC20Detailed.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\n\n/**\n * NOTE that this is an ERC20 token but the invariant that the sum of\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\n * rebasing design. Any integrations with OUSD should be aware.\n */\n\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\n using SafeMath for uint256;\n using StableMath for uint256;\n\n event TotalSupplyUpdatedHighres(\n uint256 totalSupply,\n uint256 rebasingCredits,\n uint256 rebasingCreditsPerToken\n );\n event AccountRebasingEnabled(address account);\n event AccountRebasingDisabled(address account);\n\n enum RebaseOptions {\n NotSet,\n OptOut,\n OptIn\n }\n\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\n uint256 public _totalSupply;\n mapping(address => mapping(address => uint256)) private _allowances;\n address public vaultAddress = address(0);\n mapping(address => uint256) private _creditBalances;\n uint256 private _rebasingCredits;\n uint256 private _rebasingCreditsPerToken;\n // Frozen address/credits are non rebasing (value is held in contracts which\n // do not receive yield unless they explicitly opt in)\n uint256 public nonRebasingSupply;\n mapping(address => uint256) public nonRebasingCreditsPerToken;\n mapping(address => RebaseOptions) public rebaseState;\n mapping(address => uint256) public isUpgraded;\n\n uint256 private constant RESOLUTION_INCREASE = 1e9;\n\n function initialize(\n string calldata _nameArg,\n string calldata _symbolArg,\n address _vaultAddress,\n uint256 _initialCreditsPerToken\n ) external onlyGovernor initializer {\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\n _rebasingCreditsPerToken = _initialCreditsPerToken;\n vaultAddress = _vaultAddress;\n }\n\n /**\n * @dev Verifies that the caller is the Vault contract\n */\n modifier onlyVault() {\n require(vaultAddress == msg.sender, \"Caller is not the Vault\");\n _;\n }\n\n /**\n * @return The total supply of OUSD.\n */\n function totalSupply() public view override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @return Low resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerToken() public view returns (uint256) {\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\n }\n\n /**\n * @return Low resolution total number of rebasing credits\n */\n function rebasingCredits() public view returns (uint256) {\n return _rebasingCredits / RESOLUTION_INCREASE;\n }\n\n /**\n * @return High resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\n return _rebasingCreditsPerToken;\n }\n\n /**\n * @return High resolution total number of rebasing credits\n */\n function rebasingCreditsHighres() public view returns (uint256) {\n return _rebasingCredits;\n }\n\n /**\n * @dev Gets the balance of the specified address.\n * @param _account Address to query the balance of.\n * @return A uint256 representing the amount of base units owned by the\n * specified address.\n */\n function balanceOf(address _account)\n public\n view\n override\n returns (uint256)\n {\n if (_creditBalances[_account] == 0) return 0;\n return\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\n }\n\n /**\n * @dev Gets the credits balance of the specified address.\n * @dev Backwards compatible with old low res credits per token.\n * @param _account The address to query the balance of.\n * @return (uint256, uint256) Credit balance and credits per token of the\n * address\n */\n function creditsBalanceOf(address _account)\n public\n view\n returns (uint256, uint256)\n {\n uint256 cpt = _creditsPerToken(_account);\n if (cpt == 1e27) {\n // For a period before the resolution upgrade, we created all new\n // contract accounts at high resolution. Since they are not changing\n // as a result of this upgrade, we will return their true values\n return (_creditBalances[_account], cpt);\n } else {\n return (\n _creditBalances[_account] / RESOLUTION_INCREASE,\n cpt / RESOLUTION_INCREASE\n );\n }\n }\n\n /**\n * @dev Gets the credits balance of the specified address.\n * @param _account The address to query the balance of.\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\n * address, and isUpgraded\n */\n function creditsBalanceOfHighres(address _account)\n public\n view\n returns (\n uint256,\n uint256,\n bool\n )\n {\n return (\n _creditBalances[_account],\n _creditsPerToken(_account),\n isUpgraded[_account] == 1\n );\n }\n\n /**\n * @dev Transfer tokens to a specified address.\n * @param _to the address to transfer to.\n * @param _value the amount to be transferred.\n * @return true on success.\n */\n function transfer(address _to, uint256 _value)\n public\n override\n returns (bool)\n {\n require(_to != address(0), \"Transfer to zero address\");\n require(\n _value <= balanceOf(msg.sender),\n \"Transfer greater than balance\"\n );\n\n _executeTransfer(msg.sender, _to, _value);\n\n emit Transfer(msg.sender, _to, _value);\n\n return true;\n }\n\n /**\n * @dev Transfer tokens from one address to another.\n * @param _from The address you want to send tokens from.\n * @param _to The address you want to transfer to.\n * @param _value The amount of tokens to be transferred.\n */\n function transferFrom(\n address _from,\n address _to,\n uint256 _value\n ) public override returns (bool) {\n require(_to != address(0), \"Transfer to zero address\");\n require(_value <= balanceOf(_from), \"Transfer greater than balance\");\n\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\n _value\n );\n\n _executeTransfer(_from, _to, _value);\n\n emit Transfer(_from, _to, _value);\n\n return true;\n }\n\n /**\n * @dev Update the count of non rebasing credits in response to a transfer\n * @param _from The address you want to send tokens from.\n * @param _to The address you want to transfer to.\n * @param _value Amount of OUSD to transfer\n */\n function _executeTransfer(\n address _from,\n address _to,\n uint256 _value\n ) internal {\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\n\n // Credits deducted and credited might be different due to the\n // differing creditsPerToken used by each account\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\n\n _creditBalances[_from] = _creditBalances[_from].sub(\n creditsDeducted,\n \"Transfer amount exceeds balance\"\n );\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\n\n if (isNonRebasingTo && !isNonRebasingFrom) {\n // Transfer to non-rebasing account from rebasing account, credits\n // are removed from the non rebasing tally\n nonRebasingSupply = nonRebasingSupply.add(_value);\n // Update rebasingCredits by subtracting the deducted amount\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\n // Transfer to rebasing account from non-rebasing account\n // Decreasing non-rebasing credits by the amount that was sent\n nonRebasingSupply = nonRebasingSupply.sub(_value);\n // Update rebasingCredits by adding the credited amount\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\n }\n }\n\n /**\n * @dev Function to check the amount of tokens that _owner has allowed to\n * `_spender`.\n * @param _owner The address which owns the funds.\n * @param _spender The address which will spend the funds.\n * @return The number of tokens still available for the _spender.\n */\n function allowance(address _owner, address _spender)\n public\n view\n override\n returns (uint256)\n {\n return _allowances[_owner][_spender];\n }\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens\n * on behalf of msg.sender. This method is included for ERC20\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\n * used instead.\n *\n * Changing an allowance with this method brings the risk that someone\n * may transfer both the old and the new allowance - if they are both\n * greater than zero - if a transfer transaction is mined before the\n * later approve() call is mined.\n * @param _spender The address which will spend the funds.\n * @param _value The amount of tokens to be spent.\n */\n function approve(address _spender, uint256 _value)\n public\n override\n returns (bool)\n {\n _allowances[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n }\n\n /**\n * @dev Increase the amount of tokens that an owner has allowed to\n * `_spender`.\n * This method should be used instead of approve() to avoid the double\n * approval vulnerability described above.\n * @param _spender The address which will spend the funds.\n * @param _addedValue The amount of tokens to increase the allowance by.\n */\n function increaseAllowance(address _spender, uint256 _addedValue)\n public\n returns (bool)\n {\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\n .add(_addedValue);\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\n return true;\n }\n\n /**\n * @dev Decrease the amount of tokens that an owner has allowed to\n `_spender`.\n * @param _spender The address which will spend the funds.\n * @param _subtractedValue The amount of tokens to decrease the allowance\n * by.\n */\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\n public\n returns (bool)\n {\n uint256 oldValue = _allowances[msg.sender][_spender];\n if (_subtractedValue >= oldValue) {\n _allowances[msg.sender][_spender] = 0;\n } else {\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\n }\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\n return true;\n }\n\n /**\n * @dev Mints new tokens, increasing totalSupply.\n */\n function mint(address _account, uint256 _amount) external onlyVault {\n _mint(_account, _amount);\n }\n\n /**\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address _account, uint256 _amount) internal nonReentrant {\n require(_account != address(0), \"Mint to the zero address\");\n\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\n\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\n\n // If the account is non rebasing and doesn't have a set creditsPerToken\n // then set it i.e. this is a mint from a fresh contract\n if (isNonRebasingAccount) {\n nonRebasingSupply = nonRebasingSupply.add(_amount);\n } else {\n _rebasingCredits = _rebasingCredits.add(creditAmount);\n }\n\n _totalSupply = _totalSupply.add(_amount);\n\n require(_totalSupply < MAX_SUPPLY, \"Max supply\");\n\n emit Transfer(address(0), _account, _amount);\n }\n\n /**\n * @dev Burns tokens, decreasing totalSupply.\n */\n function burn(address account, uint256 amount) external onlyVault {\n _burn(account, amount);\n }\n\n /**\n * @dev Destroys `_amount` tokens from `_account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements\n *\n * - `_account` cannot be the zero address.\n * - `_account` must have at least `_amount` tokens.\n */\n function _burn(address _account, uint256 _amount) internal nonReentrant {\n require(_account != address(0), \"Burn from the zero address\");\n if (_amount == 0) {\n return;\n }\n\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\n uint256 currentCredits = _creditBalances[_account];\n\n // Remove the credits, burning rounding errors\n if (\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\n ) {\n // Handle dust from rounding\n _creditBalances[_account] = 0;\n } else if (currentCredits > creditAmount) {\n _creditBalances[_account] = _creditBalances[_account].sub(\n creditAmount\n );\n } else {\n revert(\"Remove exceeds balance\");\n }\n\n // Remove from the credit tallies and non-rebasing supply\n if (isNonRebasingAccount) {\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\n } else {\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\n }\n\n _totalSupply = _totalSupply.sub(_amount);\n\n emit Transfer(_account, address(0), _amount);\n }\n\n /**\n * @dev Get the credits per token for an account. Returns a fixed amount\n * if the account is non-rebasing.\n * @param _account Address of the account.\n */\n function _creditsPerToken(address _account)\n internal\n view\n returns (uint256)\n {\n if (nonRebasingCreditsPerToken[_account] != 0) {\n return nonRebasingCreditsPerToken[_account];\n } else {\n return _rebasingCreditsPerToken;\n }\n }\n\n /**\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\n * Also, ensure contracts are non-rebasing if they have not opted in.\n * @param _account Address of the account.\n */\n function _isNonRebasingAccount(address _account) internal returns (bool) {\n bool isContract = Address.isContract(_account);\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\n _ensureRebasingMigration(_account);\n }\n return nonRebasingCreditsPerToken[_account] > 0;\n }\n\n /**\n * @dev Ensures internal account for rebasing and non-rebasing credits and\n * supply is updated following deployment of frozen yield change.\n */\n function _ensureRebasingMigration(address _account) internal {\n if (nonRebasingCreditsPerToken[_account] == 0) {\n emit AccountRebasingDisabled(_account);\n if (_creditBalances[_account] == 0) {\n // Since there is no existing balance, we can directly set to\n // high resolution, and do not have to do any other bookkeeping\n nonRebasingCreditsPerToken[_account] = 1e27;\n } else {\n // Migrate an existing account:\n\n // Set fixed credits per token for this account\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\n // Update non rebasing supply\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\n // Update credit tallies\n _rebasingCredits = _rebasingCredits.sub(\n _creditBalances[_account]\n );\n }\n }\n }\n\n /**\n * @notice Enable rebasing for an account.\n * @dev Add a contract address to the non-rebasing exception list. The\n * address's balance will be part of rebases and the account will be exposed\n * to upside and downside.\n * @param _account Address of the account.\n */\n function governanceRebaseOptIn(address _account)\n public\n nonReentrant\n onlyGovernor\n {\n _rebaseOptIn(_account);\n }\n\n /**\n * @dev Add a contract address to the non-rebasing exception list. The\n * address's balance will be part of rebases and the account will be exposed\n * to upside and downside.\n */\n function rebaseOptIn() public nonReentrant {\n _rebaseOptIn(msg.sender);\n }\n\n function _rebaseOptIn(address _account) internal {\n require(_isNonRebasingAccount(_account), \"Account has not opted out\");\n\n // Convert balance into the same amount at the current exchange rate\n uint256 newCreditBalance = _creditBalances[_account]\n .mul(_rebasingCreditsPerToken)\n .div(_creditsPerToken(_account));\n\n // Decreasing non rebasing supply\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\n\n _creditBalances[_account] = newCreditBalance;\n\n // Increase rebasing credits, totalSupply remains unchanged so no\n // adjustment necessary\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\n\n rebaseState[_account] = RebaseOptions.OptIn;\n\n // Delete any fixed credits per token\n delete nonRebasingCreditsPerToken[_account];\n emit AccountRebasingEnabled(_account);\n }\n\n /**\n * @dev Explicitly mark that an address is non-rebasing.\n */\n function rebaseOptOut() public nonReentrant {\n require(!_isNonRebasingAccount(msg.sender), \"Account has not opted in\");\n\n // Increase non rebasing supply\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\n // Set fixed credits per token\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\n\n // Decrease rebasing credits, total supply remains unchanged so no\n // adjustment necessary\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\n\n // Mark explicitly opted out of rebasing\n rebaseState[msg.sender] = RebaseOptions.OptOut;\n emit AccountRebasingDisabled(msg.sender);\n }\n\n /**\n * @dev Modify the supply without minting new tokens. This uses a change in\n * the exchange rate between \"credits\" and OUSD tokens to change balances.\n * @param _newTotalSupply New total supply of OUSD.\n */\n function changeSupply(uint256 _newTotalSupply)\n external\n onlyVault\n nonReentrant\n {\n require(_totalSupply > 0, \"Cannot increase 0 supply\");\n\n if (_totalSupply == _newTotalSupply) {\n emit TotalSupplyUpdatedHighres(\n _totalSupply,\n _rebasingCredits,\n _rebasingCreditsPerToken\n );\n return;\n }\n\n _totalSupply = _newTotalSupply > MAX_SUPPLY\n ? MAX_SUPPLY\n : _newTotalSupply;\n\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\n _totalSupply.sub(nonRebasingSupply)\n );\n\n require(_rebasingCreditsPerToken > 0, \"Invalid change in supply\");\n\n _totalSupply = _rebasingCredits\n .divPrecisely(_rebasingCreditsPerToken)\n .add(nonRebasingSupply);\n\n emit TotalSupplyUpdatedHighres(\n _totalSupply,\n _rebasingCredits,\n _rebasingCreditsPerToken\n );\n }\n}\n" + }, + "contracts/utils/Helpers.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IBasicToken } from \"../interfaces/IBasicToken.sol\";\n\nlibrary Helpers {\n /**\n * @notice Fetch the `symbol()` from an ERC20 token\n * @dev Grabs the `symbol()` from a contract\n * @param _token Address of the ERC20 token\n * @return string Symbol of the ERC20 token\n */\n function getSymbol(address _token) internal view returns (string memory) {\n string memory symbol = IBasicToken(_token).symbol();\n return symbol;\n }\n\n /**\n * @notice Fetch the `decimals()` from an ERC20 token\n * @dev Grabs the `decimals()` from a contract and fails if\n * the decimal value does not live within a certain range\n * @param _token Address of the ERC20 token\n * @return uint256 Decimals of the ERC20 token\n */\n function getDecimals(address _token) internal view returns (uint256) {\n uint256 decimals = IBasicToken(_token).decimals();\n require(\n decimals >= 4 && decimals <= 18,\n \"Token must have sufficient decimal places\"\n );\n\n return decimals;\n }\n}\n" + }, + "contracts/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base contract any contracts that need to initialize state after deployment.\n * @author Origin Protocol Inc\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(\n initializing || !initialized,\n \"Initializable: contract is already initialized\"\n );\n\n bool isTopLevelCall = !initializing;\n if (isTopLevelCall) {\n initializing = true;\n initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n initializing = false;\n }\n }\n\n uint256[50] private ______gap;\n}\n" + }, + "contracts/utils/InitializableAbstractStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base contract for vault strategies.\n * @author Origin Protocol Inc\n */\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\n using SafeERC20 for IERC20;\n\n event PTokenAdded(address indexed _asset, address _pToken);\n event PTokenRemoved(address indexed _asset, address _pToken);\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\n event RewardTokenCollected(\n address recipient,\n address rewardToken,\n uint256 amount\n );\n event RewardTokenAddressesUpdated(\n address[] _oldAddresses,\n address[] _newAddresses\n );\n event HarvesterAddressesUpdated(\n address _oldHarvesterAddress,\n address _newHarvesterAddress\n );\n\n /// @notice Address of the underlying platform\n address public immutable platformAddress;\n /// @notice Address of the OToken vault\n address public immutable vaultAddress;\n\n /// @dev Replaced with an immutable variable\n // slither-disable-next-line constable-states\n address private _deprecated_platformAddress;\n\n /// @dev Replaced with an immutable\n // slither-disable-next-line constable-states\n address private _deprecated_vaultAddress;\n\n /// @notice asset => pToken (Platform Specific Token Address)\n mapping(address => address) public assetToPToken;\n\n /// @notice Full list of all assets supported by the strategy\n address[] internal assetsMapped;\n\n // Deprecated: Reward token address\n // slither-disable-next-line constable-states\n address private _deprecated_rewardTokenAddress;\n\n // Deprecated: now resides in Harvester's rewardTokenConfigs\n // slither-disable-next-line constable-states\n uint256 private _deprecated_rewardLiquidationThreshold;\n\n /// @notice Address of the Harvester contract allowed to collect reward tokens\n address public harvesterAddress;\n\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\n address[] public rewardTokenAddresses;\n\n /* Reserved for future expansion. Used to be 100 storage slots\n * and has decreased to accommodate:\n * - harvesterAddress\n * - rewardTokenAddresses\n */\n int256[98] private _reserved;\n\n struct BaseStrategyConfig {\n address platformAddress; // Address of the underlying platform\n address vaultAddress; // Address of the OToken's Vault\n }\n\n /**\n * @param _config The platform and OToken vault addresses\n */\n constructor(BaseStrategyConfig memory _config) {\n platformAddress = _config.platformAddress;\n vaultAddress = _config.vaultAddress;\n }\n\n /**\n * @dev Internal initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function _initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) internal {\n rewardTokenAddresses = _rewardTokenAddresses;\n\n uint256 assetCount = _assets.length;\n require(assetCount == _pTokens.length, \"Invalid input arrays\");\n for (uint256 i = 0; i < assetCount; ++i) {\n _setPTokenAddress(_assets[i], _pTokens[i]);\n }\n }\n\n /**\n * @notice Collect accumulated reward token and send to Vault.\n */\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\n _collectRewardTokens();\n }\n\n /**\n * @dev Default implementation that transfers reward tokens to the Harvester\n * Implementing strategies need to add custom logic to collect the rewards.\n */\n function _collectRewardTokens() internal virtual {\n uint256 rewardTokenCount = rewardTokenAddresses.length;\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\n uint256 balance = rewardToken.balanceOf(address(this));\n if (balance > 0) {\n emit RewardTokenCollected(\n harvesterAddress,\n address(rewardToken),\n balance\n );\n rewardToken.safeTransfer(harvesterAddress, balance);\n }\n }\n }\n\n /**\n * @dev Verifies that the caller is the Vault.\n */\n modifier onlyVault() {\n require(msg.sender == vaultAddress, \"Caller is not the Vault\");\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Harvester.\n */\n modifier onlyHarvester() {\n require(msg.sender == harvesterAddress, \"Caller is not the Harvester\");\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Vault or Governor.\n */\n modifier onlyVaultOrGovernor() {\n require(\n msg.sender == vaultAddress || msg.sender == governor(),\n \"Caller is not the Vault or Governor\"\n );\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\n */\n modifier onlyVaultOrGovernorOrStrategist() {\n require(\n msg.sender == vaultAddress ||\n msg.sender == governor() ||\n msg.sender == IVault(vaultAddress).strategistAddr(),\n \"Caller is not the Vault, Governor, or Strategist\"\n );\n _;\n }\n\n /**\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\n * @param _rewardTokenAddresses Array of reward token addresses\n */\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\n external\n onlyGovernor\n {\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\n require(\n _rewardTokenAddresses[i] != address(0),\n \"Can not set an empty address as a reward token\"\n );\n }\n\n emit RewardTokenAddressesUpdated(\n rewardTokenAddresses,\n _rewardTokenAddresses\n );\n rewardTokenAddresses = _rewardTokenAddresses;\n }\n\n /**\n * @notice Get the reward token addresses.\n * @return address[] the reward token addresses.\n */\n function getRewardTokenAddresses()\n external\n view\n returns (address[] memory)\n {\n return rewardTokenAddresses;\n }\n\n /**\n * @notice Provide support for asset by passing its pToken address.\n * This method can only be called by the system Governor\n * @param _asset Address for the asset\n * @param _pToken Address for the corresponding platform token\n */\n function setPTokenAddress(address _asset, address _pToken)\n external\n virtual\n onlyGovernor\n {\n _setPTokenAddress(_asset, _pToken);\n }\n\n /**\n * @notice Remove a supported asset by passing its index.\n * This method can only be called by the system Governor\n * @param _assetIndex Index of the asset to be removed\n */\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\n require(_assetIndex < assetsMapped.length, \"Invalid index\");\n address asset = assetsMapped[_assetIndex];\n address pToken = assetToPToken[asset];\n\n if (_assetIndex < assetsMapped.length - 1) {\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\n }\n assetsMapped.pop();\n assetToPToken[asset] = address(0);\n\n emit PTokenRemoved(asset, pToken);\n }\n\n /**\n * @notice Provide support for asset by passing its pToken address.\n * Add to internal mappings and execute the platform specific,\n * abstract method `_abstractSetPToken`\n * @param _asset Address for the asset\n * @param _pToken Address for the corresponding platform token\n */\n function _setPTokenAddress(address _asset, address _pToken) internal {\n require(assetToPToken[_asset] == address(0), \"pToken already set\");\n require(\n _asset != address(0) && _pToken != address(0),\n \"Invalid addresses\"\n );\n\n assetToPToken[_asset] = _pToken;\n assetsMapped.push(_asset);\n\n emit PTokenAdded(_asset, _pToken);\n\n _abstractSetPToken(_asset, _pToken);\n }\n\n /**\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\n * strategy contracts, i.e. mistaken sends.\n * @param _asset Address for the asset\n * @param _amount Amount of the asset to transfer\n */\n function transferToken(address _asset, uint256 _amount)\n public\n onlyGovernor\n {\n require(!supportsAsset(_asset), \"Cannot transfer supported asset\");\n IERC20(_asset).safeTransfer(governor(), _amount);\n }\n\n /**\n * @notice Set the Harvester contract that can collect rewards.\n * @param _harvesterAddress Address of the harvester contract.\n */\n function setHarvesterAddress(address _harvesterAddress)\n external\n onlyGovernor\n {\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\n harvesterAddress = _harvesterAddress;\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n function _abstractSetPToken(address _asset, address _pToken)\n internal\n virtual;\n\n function safeApproveAllTokens() external virtual;\n\n /**\n * @notice Deposit an amount of assets into the platform\n * @param _asset Address for the asset\n * @param _amount Units of asset to deposit\n */\n function deposit(address _asset, uint256 _amount) external virtual;\n\n /**\n * @notice Deposit all supported assets in this strategy contract to the platform\n */\n function depositAll() external virtual;\n\n /**\n * @notice Withdraw an `amount` of assets from the platform and\n * send to the `_recipient`.\n * @param _recipient Address to which the asset should be sent\n * @param _asset Address of the asset\n * @param _amount Units of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external virtual;\n\n /**\n * @notice Withdraw all supported assets from platform and\n * sends to the OToken's Vault.\n */\n function withdrawAll() external virtual;\n\n /**\n * @notice Get the total asset value held in the platform.\n * This includes any interest that was generated since depositing.\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n virtual\n returns (uint256 balance);\n\n /**\n * @notice Check if an asset is supported.\n * @param _asset Address of the asset\n * @return bool Whether asset is supported\n */\n function supportsAsset(address _asset) public view virtual returns (bool);\n}\n" + }, + "contracts/utils/InitializableERC20Detailed.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/**\n * @dev Optional functions from the ERC20 standard.\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\n * @author Origin Protocol Inc\n */\nabstract contract InitializableERC20Detailed is IERC20 {\n // Storage gap to skip storage from prior to OUSD reset\n uint256[100] private _____gap;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\n * these values are immutable: they can only be set once during\n * construction.\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\n */\n function _initialize(\n string memory nameArg,\n string memory symbolArg,\n uint8 decimalsArg\n ) internal {\n _name = nameArg;\n _symbol = symbolArg;\n _decimals = decimalsArg;\n }\n\n /**\n * @notice Returns the name of the token.\n */\n function name() public view returns (string memory) {\n return _name;\n }\n\n /**\n * @notice Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view returns (string memory) {\n return _symbol;\n }\n\n /**\n * @notice Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view returns (uint8) {\n return _decimals;\n }\n}\n" + }, + "contracts/utils/StableMath.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\n// Based on StableMath from Stability Labs Pty. Ltd.\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\n\nlibrary StableMath {\n using SafeMath for uint256;\n\n /**\n * @dev Scaling unit for use in specific calculations,\n * where 1 * 10**18, or 1e18 represents a unit '1'\n */\n uint256 private constant FULL_SCALE = 1e18;\n\n /***************************************\n Helpers\n ****************************************/\n\n /**\n * @dev Adjust the scale of an integer\n * @param to Decimals to scale to\n * @param from Decimals to scale from\n */\n function scaleBy(\n uint256 x,\n uint256 to,\n uint256 from\n ) internal pure returns (uint256) {\n if (to > from) {\n x = x.mul(10**(to - from));\n } else if (to < from) {\n // slither-disable-next-line divide-before-multiply\n x = x.div(10**(from - to));\n }\n return x;\n }\n\n /***************************************\n Precise Arithmetic\n ****************************************/\n\n /**\n * @dev Multiplies two precise units, and then truncates by the full scale\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit\n */\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\n return mulTruncateScale(x, y, FULL_SCALE);\n }\n\n /**\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @param scale Scale unit\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit\n */\n function mulTruncateScale(\n uint256 x,\n uint256 y,\n uint256 scale\n ) internal pure returns (uint256) {\n // e.g. assume scale = fullScale\n // z = 10e18 * 9e17 = 9e36\n uint256 z = x.mul(y);\n // return 9e36 / 1e18 = 9e18\n return z.div(scale);\n }\n\n /**\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit, rounded up to the closest base unit.\n */\n function mulTruncateCeil(uint256 x, uint256 y)\n internal\n pure\n returns (uint256)\n {\n // e.g. 8e17 * 17268172638 = 138145381104e17\n uint256 scaled = x.mul(y);\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\n return ceil.div(FULL_SCALE);\n }\n\n /**\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\n * @param x Left hand input to division\n * @param y Right hand input to division\n * @return Result after multiplying the left operand by the scale, and\n * executing the division on the right hand input.\n */\n function divPrecisely(uint256 x, uint256 y)\n internal\n pure\n returns (uint256)\n {\n // e.g. 8e18 * 1e18 = 8e36\n uint256 z = x.mul(FULL_SCALE);\n // e.g. 8e36 / 10e18 = 8e17\n return z.div(y);\n }\n}\n" + }, + "contracts/vault/VaultStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OToken VaultStorage contract\n * @notice The VaultStorage contract defines the storage for the Vault contracts\n * @author Origin Protocol Inc\n */\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { IStrategy } from \"../interfaces/IStrategy.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { OUSD } from \"../token/OUSD.sol\";\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport \"../utils/Helpers.sol\";\n\ncontract VaultStorage is Initializable, Governable {\n using SafeERC20 for IERC20;\n\n event AssetSupported(address _asset);\n event AssetRemoved(address _asset);\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\n event StrategyApproved(address _addr);\n event StrategyRemoved(address _addr);\n event Mint(address _addr, uint256 _value);\n event Redeem(address _addr, uint256 _value);\n event CapitalPaused();\n event CapitalUnpaused();\n event RebasePaused();\n event RebaseUnpaused();\n event VaultBufferUpdated(uint256 _vaultBuffer);\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\n event PriceProviderUpdated(address _priceProvider);\n event AllocateThresholdUpdated(uint256 _threshold);\n event RebaseThresholdUpdated(uint256 _threshold);\n event StrategistUpdated(address _address);\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\n event TrusteeFeeBpsChanged(uint256 _basis);\n event TrusteeAddressChanged(address _address);\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\n event SwapperChanged(address _address);\n event SwapAllowedUndervalueChanged(uint256 _basis);\n event SwapSlippageChanged(address _asset, uint256 _basis);\n event Swapped(\n address indexed _fromAsset,\n address indexed _toAsset,\n uint256 _fromAssetAmount,\n uint256 _toAssetAmount\n );\n\n // Assets supported by the Vault, i.e. Stablecoins\n enum UnitConversion {\n DECIMALS,\n GETEXCHANGERATE\n }\n // Changed to fit into a single storage slot so the decimals needs to be recached\n struct Asset {\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\n // redeeming or checking balance of assets.\n bool isSupported;\n UnitConversion unitConversion;\n uint8 decimals;\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\n // For example 40 == 0.4% slippage\n uint16 allowedOracleSlippageBps;\n }\n\n /// @dev mapping of supported vault assets to their configuration\n // slither-disable-next-line uninitialized-state\n mapping(address => Asset) internal assets;\n /// @dev list of all assets supported by the vault.\n // slither-disable-next-line uninitialized-state\n address[] internal allAssets;\n\n // Strategies approved for use by the Vault\n struct Strategy {\n bool isSupported;\n uint256 _deprecated; // Deprecated storage slot\n }\n /// @dev mapping of strategy contracts to their configiration\n mapping(address => Strategy) internal strategies;\n /// @dev list of all vault strategies\n address[] internal allStrategies;\n\n /// @notice Address of the Oracle price provider contract\n // slither-disable-next-line uninitialized-state\n address public priceProvider;\n /// @notice pause rebasing if true\n bool public rebasePaused = false;\n /// @notice pause operations that change the OToken supply.\n /// eg mint, redeem, allocate, mint/burn for strategy\n bool public capitalPaused = true;\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\n uint256 public redeemFeeBps;\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\n uint256 public vaultBuffer;\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\n uint256 public autoAllocateThreshold;\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\n uint256 public rebaseThreshold;\n\n /// @dev Address of the OToken token. eg OUSD or OETH.\n // slither-disable-next-line uninitialized-state\n OUSD internal oUSD;\n\n //keccak256(\"OUSD.vault.governor.admin.impl\");\n bytes32 constant adminImplPosition =\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\n\n // Address of the contract responsible for post rebase syncs with AMMs\n address private _deprecated_rebaseHooksAddr = address(0);\n\n // Deprecated: Address of Uniswap\n // slither-disable-next-line constable-states\n address private _deprecated_uniswapAddr = address(0);\n\n /// @notice Address of the Strategist\n address public strategistAddr = address(0);\n\n /// @notice Mapping of asset address to the Strategy that they should automatically\n // be allocated to\n // slither-disable-next-line uninitialized-state\n mapping(address => address) public assetDefaultStrategies;\n\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\n // slither-disable-next-line uninitialized-state\n uint256 public maxSupplyDiff;\n\n /// @notice Trustee contract that can collect a percentage of yield\n address public trusteeAddress;\n\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\n uint256 public trusteeFeeBps;\n\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\n address[] private _deprecated_swapTokens;\n\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\n\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\n address public ousdMetaStrategy = address(0);\n\n /// @notice How much OTokens are currently minted by the strategy\n int256 public netOusdMintedForStrategy = 0;\n\n /// @notice How much net total OTokens are allowed to be minted by all strategies\n uint256 public netOusdMintForStrategyThreshold = 0;\n\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\n\n /// @notice Collateral swap configuration.\n /// @dev is packed into a single storage slot to save gas.\n struct SwapConfig {\n // Contract that swaps the vault's collateral assets\n address swapper;\n // Max allowed percentage the total value can drop below the total supply in basis points.\n // For example 100 == 1%\n uint16 allowedUndervalueBps;\n }\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\n\n // For future use\n uint256[50] private __gap;\n\n /**\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\n * @param newImpl address of the implementation\n */\n function setAdminImpl(address newImpl) external onlyGovernor {\n require(\n Address.isContract(newImpl),\n \"new implementation is not a contract\"\n );\n bytes32 position = adminImplPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newImpl)\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file From fa71a2c46c86b0e7f441da80f4bc611b5fcca780 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 7 Jun 2024 01:11:44 +1000 Subject: [PATCH 05/12] Changes to bulk register validators --- contracts/tasks/validator.js | 69 +++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index 9653ed470d..51338889e2 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -122,7 +122,11 @@ const registerValidators = async ({ currentState = undefined; } - if (!(await stakingContractHas32ETH(nativeStakingStrategy, WETH))) { + const validatorsCount = await validatorsThatCanBeStaked( + nativeStakingStrategy, + WETH + ); + if (validatorsCount == 0) { console.log( `Native staking contract doesn't have enough WETH available to stake. Does depositToStrategy or resetStakeETHTally need to be called?` ); @@ -144,7 +148,8 @@ const registerValidators = async ({ p2p_base_url, nativeStakingStrategy.address, // SSV owner address & withdrawal address feeAccumulatorAddress, // execution layer fee recipient - validatorSpawnOperationalPeriodInDays + validatorSpawnOperationalPeriodInDays, + validatorsCount ); currentState = await getState(store); } @@ -232,8 +237,12 @@ const stakeValidators = async ({ } } - if (!(await stakingContractHas32ETH(nativeStakingStrategy, WETH))) { - console.log(`Native staking contract doesn't have enough ETH, exiting`); + const validatorsCount = await validatorsThatCanBeStaked( + nativeStakingStrategy, + WETH + ); + if (validatorsCount === 0) { + `Native staking contract doesn't have enough WETH available to stake. Does depositToStrategy or resetStakeETHTally need to be called?`; return; } @@ -254,8 +263,8 @@ const stakeValidators = async ({ ); currentState = await getState(store); - // Check the validator has not already been staked - const hashedPubkey = keccak256(currentState.metadata.pubkey); + // Check the first validator has not already been staked + const hashedPubkey = keccak256(currentState.metadata.pubkeys[0]); const status = await nativeStakingStrategy.validatorsStates( hashedPubkey ); @@ -263,7 +272,8 @@ const stakeValidators = async ({ console.log( `Validator with pubkey ${currentState.metadata.pubkey} not in REGISTERED state. Current state: ${validatorStateEnum[status]}` ); - await clearState(currentState.uuid, store); + // await clearState(currentState.uuid, store); + // TODO just remove the validator that has already been staked from the metadata break; } } @@ -435,7 +445,7 @@ const stakingContractPaused = async (nativeStakingStrategy) => { return paused; }; -const stakingContractHas32ETH = async (nativeStakingStrategy, WETH) => { +const validatorsThatCanBeStaked = async (nativeStakingStrategy, WETH) => { const address = nativeStakingStrategy.address; const wethBalance = await WETH.balanceOf(address); log( @@ -463,7 +473,10 @@ const stakingContractHas32ETH = async (nativeStakingStrategy, WETH) => { )} WETH available to stake` ); - return availableETH.gte(parseEther("32")); + const validatorCountBN = availableETH.div(parseEther("32")); + const validatorCount = parseInt(validatorCountBN.toString()); + log(`Native Staking Strategy can stake to ${validatorCount} validators`); + return validatorCount; }; /* Make a GET or POST request to P2P API @@ -515,15 +528,17 @@ const createValidatorRequest = async ( p2p_base_url, nativeStakingStrategy, feeAccumulatorAddress, - validatorSpawnOperationalPeriodInDays + validatorSpawnOperationalPeriodInDays, + validatorsCount ) => { const uuid = uuidv4(); + log(`validatorsCount: ${validatorsCount}`); await p2pRequest( `https://${p2p_base_url}/api/v1/eth/staking/ssv/request/create`, p2p_api_key, "POST", { - validatorsCount: 1, + validatorsCount, id: uuid, withdrawalAddress: nativeStakingStrategy, feeRecipientAddress: feeAccumulatorAddress, @@ -616,9 +631,9 @@ const broadcastRegisterValidator = async ( // the publicKey and sharesData params are not encoded correctly by P2P so we will ignore them const [, operatorIds, , amount, cluster] = registerTransactionParams; // get publicKey and sharesData state storage - const publicKey = metadata.pubkey; - if (!publicKey) { - throw Error(`pubkey not found in metadata: ${metadata}`); + const publicKeys = metadata.pubkeys; + if (!publicKeys) { + throw Error(`pubkeys not found in metadata: ${metadata}`); } const { sharesData } = metadata; if (!sharesData) { @@ -626,7 +641,7 @@ const broadcastRegisterValidator = async ( } log(`About to register validator with:`); - log(`publicKey: ${publicKey}`); + log(`publicKeys: ${publicKeys}`); log(`operatorIds: ${operatorIds}`); log(`sharesData: ${sharesData}`); log(`amount: ${amount}`); @@ -636,9 +651,9 @@ const broadcastRegisterValidator = async ( const tx = await nativeStakingStrategy .connect(signer) .registerSsvValidators( - [publicKey], + publicKeys, operatorIds, - [sharesData], + sharesData, amount, cluster ); @@ -690,17 +705,21 @@ const confirmValidatorRegistered = async ( } else { log(`Validators requested with uuid ${uuid} are ready`); - const pubkey = response.result.encryptedShares[0].publicKey; const registerValidatorData = response.result.validatorRegistrationTxs[0].data; - const sharesData = response.result.encryptedShares[0].sharesData; + const sharesData = []; + const pubkeys = []; + for (let i = 0; i < response.result.encryptedShares.length; i++) { + pubkeys[i] = response.result.encryptedShares[i].publicKey; + sharesData[i] = response.result.encryptedShares[i].sharesData; + } await updateState(uuid, nextState, store, { - pubkey, + pubkeys, registerValidatorData, sharesData, }); - log(`Public key: ${pubkey}`); - log(`sharesData: ${sharesData}`); + log(`Public key: ${pubkeys}`); + log(`registerValidatorData: ${registerValidatorData}`); return true; } }; @@ -736,12 +755,12 @@ const getDepositData = async ( } else if (response.result?.status === "validator-ready") { log(`Deposit data with request uuid ${uuid} is ready`); - const depositData = response.result.depositData[0]; + const depositData = response.result.depositData; await updateState(uuid, nextState, store, { depositData, }); - log(`signature: ${depositData.signature}`); - log(`depositDataRoot: ${depositData.depositDataRoot}`); + log(`signature 0: ${depositData[0].signature}`); + log(`depositDataRoot 0: ${depositData[0].depositDataRoot}`); return true; } else { log(`Error getting deposit data with uuid ${uuid}: ${response.error}`); From bdb88acdec35c5684d00dc0cf88f10aaeb292bbf Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 7 Jun 2024 13:55:26 +1000 Subject: [PATCH 06/12] Fixed stakeValidators --- contracts/tasks/validator.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index 51338889e2..95b687ae80 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -270,7 +270,7 @@ const stakeValidators = async ({ ); if (validatorStateEnum[status] !== "REGISTERED") { console.log( - `Validator with pubkey ${currentState.metadata.pubkey} not in REGISTERED state. Current state: ${validatorStateEnum[status]}` + `Validator with pubkey ${currentState.metadata.pubkeys[0]} not in REGISTERED state. Current state: ${validatorStateEnum[status]}` ); // await clearState(currentState.uuid, store); // TODO just remove the validator that has already been staked from the metadata @@ -296,7 +296,7 @@ const stakeValidators = async ({ "deposit_transaction_broadcast", // next state signer, nativeStakingStrategy, - currentState.metadata.pubkey, + currentState.metadata.pubkeys, currentState.metadata.depositData ); currentState = await getState(store); @@ -581,22 +581,22 @@ const depositEth = async ( nextState, signer, nativeStakingStrategy, - pubkey, + pubkeys, depositData ) => { - const { signature, depositDataRoot } = depositData; + // const { signature, depositDataRoot } = depositData; try { log(`About to stake ETH with:`); - log(`pubkey: ${pubkey}`); - log(`signature: ${signature}`); - log(`depositDataRoot: ${depositDataRoot}`); - const tx = await nativeStakingStrategy.connect(signer).stakeEth([ - { - pubkey, - signature, - depositDataRoot, - }, - ]); + + const validatorsStakeData = depositData.map((d, i) => ({ + pubkey: pubkeys[i], + signature: d.signature, + depositDataRoot: d.depositDataRoot, + })); + log(`validators stake data: ${validatorsStakeData}`); + const tx = await nativeStakingStrategy + .connect(signer) + .stakeEth(validatorsStakeData); log(`Transaction to stake ETH has been broadcast with hash: ${tx.hash}`); From 5a78ef1e55baf17e91248019def05df66505209f Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 7 Jun 2024 21:01:55 +1000 Subject: [PATCH 07/12] Added snapStaking hardhat task --- contracts/tasks/tasks.js | 22 +++++++++ contracts/tasks/validator.js | 87 +++++++++++++++++++++++++++++++++++- 2 files changed, 108 insertions(+), 1 deletion(-) diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 436ddf7b80..5b36ce111e 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -82,6 +82,7 @@ const { setStakeETHThreshold, fixAccounting, pauseStaking, + snapStaking, } = require("./validator"); const { harvestAndSwap } = require("./harvest"); @@ -1170,6 +1171,27 @@ task("pauseStaking").setAction(async (_, __, runSuper) => { return runSuper(); }); +subtask( + "snapStaking", + "Takes a snapshot of the key Native Staking Strategy data at a block" +) + .addOptionalParam( + "block", + "Block number. (default: latest)", + undefined, + types.int + ) + .addOptionalParam( + "admin", + "Include addresses of admin accounts", + true, + types.boolean + ) + .setAction(snapStaking); +task("snapStaking").setAction(async (_, __, runSuper) => { + return runSuper(); +}); + // Encryption subtask("genECDHKey", "Generate Elliptic-curve Diffie–Hellman (ECDH) key pair") diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index 95b687ae80..db4f286133 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -6,6 +6,7 @@ const { KeyValueStoreClient, } = require("@openzeppelin/defender-kvstore-client"); +const { getBlock } = require("./block"); const { getClusterInfo } = require("../utils/ssv"); const addresses = require("../utils/addresses"); const { resolveContract } = require("../utils/resolvers"); @@ -232,7 +233,9 @@ const stakeValidators = async ({ log("currentState", currentState); if (!currentState) { - console.log(`Failed to get state from local storage`); + console.log( + `There are no registered validators in local storage. Have you run registerValidators?` + ); return; } } @@ -899,6 +902,87 @@ async function pauseStaking() { await logTxDetails(tx, "pause"); } +async function snapStaking({ block, admin }) { + const blockTag = getBlock(block); + + const strategy = await resolveContract( + "NativeStakingSSVStrategyProxy", + "NativeStakingSSVStrategy" + ); + + const feeAccumulator = await resolveContract( + "NativeStakingFeeAccumulatorProxy", + "FeeAccumulator" + ); + const vault = await resolveContract("OETHVaultProxy", "IVault"); + + const { chainId } = await ethers.provider.getNetwork(); + + const wethAddress = addresses[networkMap[chainId]].WETH; + const weth = await ethers.getContractAt("IERC20", wethAddress); + const ssvAddress = addresses[networkMap[chainId]].SSV; + const ssv = await ethers.getContractAt("IERC20", ssvAddress); + + const checkBalance = await strategy.checkBalance(wethAddress, { blockTag }); + const wethStrategyBalance = await weth.balanceOf(strategy.address, { + blockTag, + }); + const ssvStrategyBalance = await ssv.balanceOf(strategy.address, { + blockTag, + }); + const ethStrategyBalance = await ethers.provider.getBalance(strategy.address); + const ethFeeAccumulatorBalance = await ethers.provider.getBalance( + feeAccumulator.address + ); + + console.log( + `Active validators : ${await strategy.activeDepositedValidators({ + blockTag, + })}` + ); + console.log( + `Strategy balance : ${formatUnits( + checkBalance + )} ether, ${checkBalance} wei` + ); + console.log( + `Strategy ETH : ${formatUnits( + ethStrategyBalance + )} ether, ${ethStrategyBalance} wei` + ); + console.log( + `Fee accumulator ETH : ${formatUnits( + ethFeeAccumulatorBalance + )} ether, ${ethFeeAccumulatorBalance} wei` + ); + console.log( + `Deposited WETH : ${await strategy.depositedWethAccountedFor({ + blockTag, + })}` + ); + console.log(`Strategy WETH : ${formatUnits(wethStrategyBalance)}`); + console.log(`Strategy SSV : ${formatUnits(ssvStrategyBalance)}`); + + const stakeETHThreshold = await strategy.stakeETHThreshold({ blockTag }); + const stakeETHTally = await strategy.stakeETHTally({ blockTag }); + + console.log(`Stake ETH Tally : ${formatUnits(stakeETHTally)}`); + console.log(`Stake ETH Threshold : ${formatUnits(stakeETHThreshold)}`); + + if (admin) { + console.log( + `Staking monitor : ${await strategy.stakingMonitor()}` + ); + console.log( + `Validator registrator : ${await strategy.validatorRegistrator()}` + ); + console.log(`Governor : ${await strategy.governor()}`); + console.log(`Strategist : ${await vault.strategistAddr()}`); + console.log(`Native staking strategy : ${strategy.address}`); + console.log(`Fee accumulator : ${feeAccumulator.address}`); + } +} + module.exports = { validatorOperationsConfig, registerValidators, @@ -910,4 +994,5 @@ module.exports = { setStakeETHThreshold, fixAccounting, pauseStaking, + snapStaking, }; From 939089b3c7aa11a866bcc30aac1d5f92557f2b6f Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 7 Jun 2024 21:59:00 +1000 Subject: [PATCH 08/12] Add optional validators to registerValidators Hardhat task --- contracts/tasks/tasks.js | 8 +++++++- contracts/tasks/validator.js | 12 ++++++++++-- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/contracts/tasks/tasks.js b/contracts/tasks/tasks.js index 5b36ce111e..9d6c0f7827 100644 --- a/contracts/tasks/tasks.js +++ b/contracts/tasks/tasks.js @@ -1032,7 +1032,13 @@ subtask( .addOptionalParam( "days", "SSV Cluster operational time in days", - 40, + 2, + types.int + ) + .addOptionalParam( + "validators", + "The number of validators to register. defaults to the max that can be registered", + undefined, types.int ) .addOptionalParam("clear", "Clear storage", false, types.boolean) diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index db4f286133..15afa37032 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -78,6 +78,7 @@ const validatorOperationsConfig = async (taskArgs) => { validatorSpawnOperationalPeriodInDays: taskArgs.days, clear: taskArgs.clear, uuid: taskArgs.uuid, + validators: taskArgs.validators, }; }; @@ -114,6 +115,7 @@ const registerValidators = async ({ WETH, validatorSpawnOperationalPeriodInDays, clear, + validators, }) => { let currentState = await getState(store); log("currentState", currentState); @@ -125,12 +127,18 @@ const registerValidators = async ({ const validatorsCount = await validatorsThatCanBeStaked( nativeStakingStrategy, - WETH + WETH, + validators ); - if (validatorsCount == 0) { + if (validatorsCount == 0 || validatorsCount < validators) { console.log( `Native staking contract doesn't have enough WETH available to stake. Does depositToStrategy or resetStakeETHTally need to be called?` ); + if (validators) { + console.log( + `Requested to spawn ${validators} validators but only ${validatorsCount} can be spawned.` + ); + } return; } From 4f37b961f18db3bf0ce5a0b504c19e5a34968aea Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 7 Jun 2024 22:30:39 +1000 Subject: [PATCH 09/12] stakeValidators validator logic moved --- contracts/tasks/validator.js | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index 15afa37032..e086e7e5df 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -235,6 +235,11 @@ const stakeValidators = async ({ p2p_base_url, uuid, }) => { + if (await stakingContractPaused(nativeStakingStrategy)) { + console.log(`Native staking contract is paused... exiting`); + return; + } + let currentState; if (!uuid) { currentState = await getState(store); @@ -248,20 +253,6 @@ const stakeValidators = async ({ } } - const validatorsCount = await validatorsThatCanBeStaked( - nativeStakingStrategy, - WETH - ); - if (validatorsCount === 0) { - `Native staking contract doesn't have enough WETH available to stake. Does depositToStrategy or resetStakeETHTally need to be called?`; - return; - } - - if (await stakingContractPaused(nativeStakingStrategy)) { - console.log(`Native staking contract is paused... exiting`); - return; - } - const executeOperateLoop = async () => { while (true) { if (!currentState) { @@ -301,6 +292,16 @@ const stakeValidators = async ({ } if (currentState.state === "deposit_data_got") { + const ethForValidators = await validatorsThatCanBeStaked( + nativeStakingStrategy, + WETH + ); + const validatorsInState = currentState.metadata.pubkeys.length; + if (ethForValidators < validatorsInState) { + `Native staking contract only has enough WETH to stake to ${ethForValidators} validators, not ${validatorsInState}. Does depositToStrategy or resetStakeETHTally need to be called?`; + return; + } + await depositEth( store, currentState.uuid, From 740d6e346b579db0700eb3790fa8b58acd7fe021 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Fri, 7 Jun 2024 22:51:13 +1000 Subject: [PATCH 10/12] fixes to registerValidators --- contracts/tasks/validator.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/contracts/tasks/validator.js b/contracts/tasks/validator.js index e086e7e5df..87ecfc1c18 100644 --- a/contracts/tasks/validator.js +++ b/contracts/tasks/validator.js @@ -78,7 +78,7 @@ const validatorOperationsConfig = async (taskArgs) => { validatorSpawnOperationalPeriodInDays: taskArgs.days, clear: taskArgs.clear, uuid: taskArgs.uuid, - validators: taskArgs.validators, + requestedValidators: taskArgs.validators, }; }; @@ -115,7 +115,7 @@ const registerValidators = async ({ WETH, validatorSpawnOperationalPeriodInDays, clear, - validators, + requestedValidators, }) => { let currentState = await getState(store); log("currentState", currentState); @@ -125,22 +125,25 @@ const registerValidators = async ({ currentState = undefined; } - const validatorsCount = await validatorsThatCanBeStaked( + const validatorsForEth = await validatorsThatCanBeStaked( nativeStakingStrategy, - WETH, - validators + WETH ); - if (validatorsCount == 0 || validatorsCount < validators) { + if (validatorsForEth == 0 || validatorsForEth < requestedValidators) { console.log( `Native staking contract doesn't have enough WETH available to stake. Does depositToStrategy or resetStakeETHTally need to be called?` ); - if (validators) { + if (requestedValidators) { console.log( - `Requested to spawn ${validators} validators but only ${validatorsCount} can be spawned.` + `Requested to spawn ${requestedValidators} validators but only ${validatorsForEth} can be spawned.` ); } return; } + const validatorsCount = + validatorsForEth < requestedValidators + ? validatorsForEth + : requestedValidators; if (await stakingContractPaused(nativeStakingStrategy)) { console.log(`Native staking contract is paused... exiting`); @@ -292,13 +295,13 @@ const stakeValidators = async ({ } if (currentState.state === "deposit_data_got") { - const ethForValidators = await validatorsThatCanBeStaked( + const validatorsForEth = await validatorsThatCanBeStaked( nativeStakingStrategy, WETH ); const validatorsInState = currentState.metadata.pubkeys.length; - if (ethForValidators < validatorsInState) { - `Native staking contract only has enough WETH to stake to ${ethForValidators} validators, not ${validatorsInState}. Does depositToStrategy or resetStakeETHTally need to be called?`; + if (validatorsForEth < validatorsInState) { + `Native staking contract only has enough WETH to stake to ${validatorsForEth} validators, not ${validatorsInState}. Does depositToStrategy or resetStakeETHTally need to be called?`; return; } From a2391f08c6b417b1db9cfcea0951bed062c47e8a Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Sat, 8 Jun 2024 10:13:08 +1000 Subject: [PATCH 11/12] Saved Gnosis Safe file into contracts folder for now --- contracts/utils/deploy.js | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/contracts/utils/deploy.js b/contracts/utils/deploy.js index d3a814ca05..f2d2610c5f 100644 --- a/contracts/utils/deploy.js +++ b/contracts/utils/deploy.js @@ -957,11 +957,7 @@ function buildAndWriteGnosisJson(targets, calldata, safeAddress) { })), }; - const fileName = path.join( - __dirname, - "../build", - Date.now().toString() + "-gov-tx.json" - ); + const fileName = path.join(__dirname, Date.now().toString() + "-gov-tx.json"); fs.writeFileSync(fileName, JSON.stringify(json, undefined, 2)); From de84d771d17fb18a43ba69ff8cae67a4121b6f43 Mon Sep 17 00:00:00 2001 From: Nicholas Addison Date: Sat, 8 Jun 2024 10:44:47 +1000 Subject: [PATCH 12/12] New deployment to Holesky with multi validator registrations --- .../deploy/holesky/014_upgrade_strategy.js | 17 +++ .../deployments/holesky/.migrations.json | 3 +- .../holesky/NativeStakingSSVStrategy.json | 102 ++++++++-------- .../f9cd4fae6f07aaea4914817197ab80c9.json | 110 ++++++++++++++++++ 4 files changed, 180 insertions(+), 52 deletions(-) create mode 100644 contracts/deploy/holesky/014_upgrade_strategy.js create mode 100644 contracts/deployments/holesky/solcInputs/f9cd4fae6f07aaea4914817197ab80c9.json diff --git a/contracts/deploy/holesky/014_upgrade_strategy.js b/contracts/deploy/holesky/014_upgrade_strategy.js new file mode 100644 index 0000000000..62034de231 --- /dev/null +++ b/contracts/deploy/holesky/014_upgrade_strategy.js @@ -0,0 +1,17 @@ +const { upgradeNativeStakingSSVStrategy } = require("../deployActions"); + +const mainExport = async () => { + console.log("Running 014 deployment on Holesky..."); + + await upgradeNativeStakingSSVStrategy(); + + console.log("Running 014 deployment done"); + return true; +}; + +mainExport.id = "014_upgrade_strategy"; +mainExport.tags = []; +mainExport.dependencies = []; +mainExport.skip = () => false; + +module.exports = mainExport; diff --git a/contracts/deployments/holesky/.migrations.json b/contracts/deployments/holesky/.migrations.json index dc3b6d522c..69ffd70ede 100644 --- a/contracts/deployments/holesky/.migrations.json +++ b/contracts/deployments/holesky/.migrations.json @@ -11,5 +11,6 @@ "010_upgrade_strategy": 1716890877, "011_upgrade_strategy": 1717309951, "012_upgrade_strategy": 1717477122, - "013_upgrade_strategy": 1717803989 + "013_upgrade_strategy": 1717803989, + "014_upgrade_strategy": 1717806940 } \ No newline at end of file diff --git a/contracts/deployments/holesky/NativeStakingSSVStrategy.json b/contracts/deployments/holesky/NativeStakingSSVStrategy.json index 15ca54d8ac..369f0c111c 100644 --- a/contracts/deployments/holesky/NativeStakingSSVStrategy.json +++ b/contracts/deployments/holesky/NativeStakingSSVStrategy.json @@ -1,5 +1,5 @@ { - "address": "0x17EA08E1eFf8d66820f5eD0C00bb97fDe0Ef76bC", + "address": "0xD4b12B70d256d1a6781d0eB167E545CF88CF678d", "abi": [ { "inputs": [ @@ -1455,34 +1455,34 @@ "type": "receive" } ], - "transactionHash": "0x204a30d58d1aadc3c008b1859447e816d6a6de7add62430c70932a98f342ffe0", + "transactionHash": "0xe260eefb4ca8c5a69d765122a5a2c0c1976189e8983d3e916cb116939c9fa429", "receipt": { "to": null, "from": "0x1b94CA50D3Ad9f8368851F8526132272d1a5028C", - "contractAddress": "0x17EA08E1eFf8d66820f5eD0C00bb97fDe0Ef76bC", - "transactionIndex": 22, - "gasUsed": "4456981", - "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000008000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000020000000000000000000800000000000000000000000000000000000004000000000000002000000000000000000040000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", - "blockHash": "0x776a676588599bb7ed620c95215334c4baaf1dd1827a15ef2db248cadaf1d067", - "transactionHash": "0x204a30d58d1aadc3c008b1859447e816d6a6de7add62430c70932a98f342ffe0", + "contractAddress": "0xD4b12B70d256d1a6781d0eB167E545CF88CF678d", + "transactionIndex": 30, + "gasUsed": "4525786", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000000000080000000000000000000000000000020000000000000000000800000000000000000000000000000000000004000000000000002000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000100000000000000", + "blockHash": "0xb805d62d31f3808d750ab49e0663ef8f6e7ebe0d220c443fa5f9ad047d6f2d85", + "transactionHash": "0xe260eefb4ca8c5a69d765122a5a2c0c1976189e8983d3e916cb116939c9fa429", "logs": [ { - "transactionIndex": 22, - "blockNumber": 1692387, - "transactionHash": "0x204a30d58d1aadc3c008b1859447e816d6a6de7add62430c70932a98f342ffe0", - "address": "0x17EA08E1eFf8d66820f5eD0C00bb97fDe0Ef76bC", + "transactionIndex": 30, + "blockNumber": 1692609, + "transactionHash": "0xe260eefb4ca8c5a69d765122a5a2c0c1976189e8983d3e916cb116939c9fa429", + "address": "0xD4b12B70d256d1a6781d0eB167E545CF88CF678d", "topics": [ "0xc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a", "0x0000000000000000000000000000000000000000000000000000000000000000", "0x0000000000000000000000001b94ca50d3ad9f8368851f8526132272d1a5028c" ], "data": "0x", - "logIndex": 87, - "blockHash": "0x776a676588599bb7ed620c95215334c4baaf1dd1827a15ef2db248cadaf1d067" + "logIndex": 49, + "blockHash": "0xb805d62d31f3808d750ab49e0663ef8f6e7ebe0d220c443fa5f9ad047d6f2d85" } ], - "blockNumber": 1692387, - "cumulativeGasUsed": "7669543", + "blockNumber": 1692609, + "cumulativeGasUsed": "9878653", "status": 1, "byzantium": true }, @@ -1498,11 +1498,11 @@ "0x65a289f4BF934c964C942eFF6E6F83b6481BE550", "0x4242424242424242424242424242424242424242" ], - "numDeployments": 8, - "solcInputHash": "3ef4f39030702c6cc1ada700a3e09cc3", - "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"platformAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAddress\",\"type\":\"address\"}],\"internalType\":\"struct InitializableAbstractStrategy.BaseStrategyConfig\",\"name\":\"_baseConfig\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_wethAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvNetwork\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxValidators\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_feeAccumulator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_beaconChainDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AccountingConsensusRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"noOfValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingFullyWithdrawnValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"validatorsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"consensusRewardsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingManuallyFixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"FuseIntervalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldHarvesterAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newHarvesterAddress\",\"type\":\"address\"}],\"name\":\"HarvesterAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"RegistratorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_oldAddresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_newAddresses\",\"type\":\"address[]\"}],\"name\":\"RewardTokenAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardTokenCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StakeETHTallyReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeETHThresholdChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"StakingMonitorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BEACON_CHAIN_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_ACCUMULATOR_ADDRESS\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_STAKE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_VALIDATORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FIX_ACCOUNTING_CADENCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_NETWORK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeDepositedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetToPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"checkBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectRewardTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"consensusRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"depositSSV\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositedWethAccountedFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"doAccounting\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"accountingValid\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"harvesterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_pTokens\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFixAccountingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_validatorsDelta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_consensusRewardsDelta\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_ethToVaultAmount\",\"type\":\"uint256\"}],\"name\":\"manuallyFixAccounting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes\",\"name\":\"sharesData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_assetIndex\",\"type\":\"uint256\"}],\"name\":\"removePToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetStakeETHTally\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeApproveAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalEnd\",\"type\":\"uint256\"}],\"name\":\"setFuseInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_harvesterAddress\",\"type\":\"address\"}],\"name\":\"setHarvesterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"setPTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setRegistrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"setRewardTokenAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setStakeETHThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStakingMonitor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHTally\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ValidatorStakeData[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"stakeEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingMonitor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"supportsAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRegistrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"validatorsStates\",\"outputs\":[{\"internalType\":\"enum ValidatorRegistrator.VALIDATOR_STATE\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Origin Protocol Inc\",\"details\":\"This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that is on the contract across multiple blocks (and not just transitory within a transaction) is considered an asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is required since the rewards (reward token) is also in ETH. To simplify the accounting of WETH there is another difference in behavior compared to the other strategies. To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant immediately wraps ETH to WETH and sends it to the Vault. On the other hand any ETH on the contract (across multiple blocks) is there either: - as a result of already accounted for consensus rewards - as a result of not yet accounted for consensus rewards - as a results of not yet accounted for full validator withdrawals (or validator slashes) Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time interval and not immediately.\",\"kind\":\"dev\",\"methods\":{\"checkBalance(address)\":{\"params\":{\"_asset\":\"Address of weth asset\"},\"returns\":{\"balance\":\" Total value of (W)ETH\"}},\"constructor\":{\"params\":{\"_baseConfig\":\"Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI, and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\",\"_beaconChainDepositContract\":\"Address of the beacon chain deposit contract\",\"_feeAccumulator\":\"Address of the fee accumulator receiving execution layer validator rewards\",\"_maxValidators\":\"Maximum number of validators that can be registered in the strategy\",\"_ssvNetwork\":\"Address of the SSV Network contract\",\"_ssvToken\":\"Address of the Erc20 SSV Token contract\",\"_wethAddress\":\"Address of the Erc20 WETH Token contract\"}},\"deposit(address,uint256)\":{\"params\":{\"_amount\":\"Amount of assets that were transferred to the strategy by the vault.\",\"_asset\":\"Address of asset to deposit. Has to be WETH.\"}},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"details\":\"A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds. uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service that tries to top up SSV tokens.\",\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"doAccounting()\":{\"details\":\"This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it for now.\",\"returns\":{\"accountingValid\":\"true if accounting was successful, false if fuse is blown\"}},\"exitSsvValidator(bytes,uint64[])\":{\"params\":{\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"getRewardTokenAddresses()\":{\"returns\":{\"_0\":\"address[] the reward token addresses.\"}},\"initialize(address[],address[],address[])\":{\"params\":{\"_assets\":\"Addresses of initial supported assets\",\"_pTokens\":\"Platform Token corresponding addresses\",\"_rewardTokenAddresses\":\"Address of reward token for platform\"}},\"manuallyFixAccounting(int256,int256,uint256)\":{\"details\":\"There is a case when a validator(s) gets slashed so much that the eth swept from the beacon chain enters the fuse area and there are no consensus rewards on the contract to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval we need to reduce the amount of active deposited validators and immediately send WETH to the vault, so it doesn't interfere with further accounting.\",\"params\":{\"_consensusRewardsDelta\":\"adjust the accounted for consensus rewards up or down\",\"_ethToVaultAmount\":\"the amount of ETH that gets wrapped into WETH and sent to the Vault\",\"_validatorsDelta\":\"adjust the active validators by up to plus three or minus three\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"registerSsvValidator(bytes,uint64[],bytes,uint256,(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\",\"sharesData\":\"The validator shares data\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"removePToken(uint256)\":{\"params\":{\"_assetIndex\":\"Index of the asset to be removed\"}},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"setHarvesterAddress(address)\":{\"params\":{\"_harvesterAddress\":\"Address of the harvester contract.\"}},\"setPTokenAddress(address,address)\":{\"params\":{\"_asset\":\"Address for the asset\",\"_pToken\":\"Address for the corresponding platform token\"}},\"setRewardTokenAddresses(address[])\":{\"params\":{\"_rewardTokenAddresses\":\"Array of reward token addresses\"}},\"stakeEth((bytes,bytes,bytes32)[])\":{\"params\":{\"validators\":\"A list of validator data needed to stake. The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot. Only the registrator can call this function.\"}},\"supportsAsset(address)\":{\"params\":{\"_asset\":\"The address of the asset token.\"}},\"transferGovernance(address)\":{\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"transferToken(address,uint256)\":{\"params\":{\"_amount\":\"Amount of the asset to transfer\",\"_asset\":\"Address for the asset\"}},\"withdraw(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount of WETH to withdraw\",\"_asset\":\"WETH to withdraw\",\"_recipient\":\"Address to receive withdrawn assets\"}}},\"stateVariables\":{\"FEE_ACCUMULATOR_ADDRESS\":{\"details\":\"this address will receive Execution layer rewards - These are rewards earned for executing transactions on the Ethereum network as part of block proposals. They include priority fees (fees paid by users for their transactions to be included) and MEV rewards (rewards for arranging transactions in a way that benefits the validator).\"},\"depositedWethAccountedFor\":{\"details\":\"This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately deposit it to an underlying platform. Rather a special privilege account stakes it to the validators. For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track of WETH that has already been accounted for. This value represents the amount of WETH balance of this contract that has already been accounted for by the deposit events. It is important to note that this variable is not concerned with WETH that is a result of full/partial withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to be staked.\"}},\"title\":\"Native Staking SSV Strategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BEACON_CHAIN_DEPOSIT_CONTRACT()\":{\"notice\":\"The address of the beacon chain deposit contract\"},\"FEE_ACCUMULATOR_ADDRESS()\":{\"notice\":\"Fee collector address\"},\"FULL_STAKE()\":{\"notice\":\"The maximum amount of ETH that can be staked by a validator\"},\"MAX_VALIDATORS()\":{\"notice\":\"Maximum number of validators that can be registered in this strategy\"},\"MIN_FIX_ACCOUNTING_CADENCE()\":{\"notice\":\"The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\"},\"SSV_NETWORK()\":{\"notice\":\"The address of the SSV Network contract used to interface with\"},\"SSV_TOKEN()\":{\"notice\":\"SSV ERC20 token that serves as a payment for operating SSV validators\"},\"VAULT_ADDRESS()\":{\"notice\":\"Address of the OETH Vault proxy contract\"},\"WETH()\":{\"notice\":\"The address of the Wrapped ETH (WETH) token contract\"},\"activeDepositedValidators()\":{\"notice\":\"The number of validators that have 32 (!) ETH actively deposited. When a new deposit to a validator happens this number increases, when a validator exit is detected this number decreases.\"},\"assetToPToken(address)\":{\"notice\":\"asset => pToken (Platform Specific Token Address)\"},\"checkBalance(address)\":{\"notice\":\"Returns the total value of (W)ETH that is staked to the validators and WETH deposits that are still to be staked. This does not include ETH from consensus rewards sitting in this strategy or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested and sent to the Dripper so will eventually be sent to the Vault as WETH.\"},\"claimGovernance()\":{\"notice\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"collectRewardTokens()\":{\"notice\":\"Collect accumulated reward token and send to Vault.\"},\"consensusRewards()\":{\"notice\":\"Keeps track of the total consensus rewards swept from the beacon chain\"},\"deposit(address,uint256)\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just checks the asset is WETH and emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositAll()\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\"},\"doAccounting()\":{\"notice\":\"This notion page offers a good explanation of how the accounting functions https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart, the accounting function will treat that ETH as Beacon chain consensus rewards. On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32, the accounting function will treat that as a validator slashing.Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\"},\"exitSsvValidator(bytes,uint64[])\":{\"notice\":\"Exit a validator from the Beacon chain. The staked ETH will eventually swept to this native staking strategy. Only the registrator can call this function.\"},\"fuseIntervalEnd()\":{\"notice\":\"end of fuse interval\"},\"fuseIntervalStart()\":{\"notice\":\"start of fuse interval\"},\"getRewardTokenAddresses()\":{\"notice\":\"Get the reward token addresses.\"},\"governor()\":{\"notice\":\"Returns the address of the current Governor.\"},\"harvesterAddress()\":{\"notice\":\"Address of the Harvester contract allowed to collect reward tokens\"},\"initialize(address[],address[],address[])\":{\"notice\":\"initialize function, to set up initial internal state\"},\"isGovernor()\":{\"notice\":\"Returns true if the caller is the current Governor.\"},\"lastFixAccountingBlockNumber()\":{\"notice\":\"last block number manuallyFixAccounting has been called\"},\"manuallyFixAccounting(int256,int256,uint256)\":{\"notice\":\"Allow the Strategist to fix the accounting of this strategy and unpause.\"},\"platformAddress()\":{\"notice\":\"Address of the underlying platform\"},\"registerSsvValidator(bytes,uint64[],bytes,uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Registers a new validator in the SSV Cluster. Only the registrator can call this function.\"},\"removePToken(uint256)\":{\"notice\":\"Remove a supported asset by passing its index. This method can only be called by the system Governor\"},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Remove a validator from the SSV Cluster. Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain. If removed before the validator has exited the beacon chain will result in the validator being slashed. Only the registrator can call this function.\"},\"resetStakeETHTally()\":{\"notice\":\"Reset the stakeETHTally\"},\"rewardTokenAddresses(uint256)\":{\"notice\":\"Address of the reward tokens. eg CRV, BAL, CVX, AURA\"},\"safeApproveAllTokens()\":{\"notice\":\"Approves the SSV Network contract to transfer SSV tokens for deposits\"},\"setFuseInterval(uint256,uint256)\":{\"notice\":\"set fuse interval values\"},\"setHarvesterAddress(address)\":{\"notice\":\"Set the Harvester contract that can collect rewards.\"},\"setPTokenAddress(address,address)\":{\"notice\":\"Provide support for asset by passing its pToken address. This method can only be called by the system Governor\"},\"setRegistrator(address)\":{\"notice\":\"Set the address of the registrator which can register, exit and remove validators\"},\"setRewardTokenAddresses(address[])\":{\"notice\":\"Set the reward token addresses. Any old addresses will be overwritten.\"},\"setStakeETHThreshold(uint256)\":{\"notice\":\"Set the amount of ETH that can be staked before staking monitor\"},\"setStakingMonitor(address)\":{\"notice\":\"Set the address of the staking monitor that is allowed to reset stakeETHTally\"},\"stakeETHTally()\":{\"notice\":\"Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`. This can not go above `stakeETHThreshold`.\"},\"stakeETHThreshold()\":{\"notice\":\"Amount of ETH that can be staked before staking on the contract is suspended and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\"},\"stakeEth((bytes,bytes,bytes32)[])\":{\"notice\":\"Stakes WETH to the node validators\"},\"stakingMonitor()\":{\"notice\":\"The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\"},\"supportsAsset(address)\":{\"notice\":\"Returns bool indicating whether asset is supported by strategy.\"},\"transferGovernance(address)\":{\"notice\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\"},\"transferToken(address,uint256)\":{\"notice\":\"Transfer token to governor. Intended for recovering tokens stuck in strategy contracts, i.e. mistaken sends.\"},\"validatorRegistrator()\":{\"notice\":\"Address of the registrator - allowed to register, exit and remove validators\"},\"validatorsStates(bytes32)\":{\"notice\":\"State of the validators keccak256(pubKey) => state\"},\"vaultAddress()\":{\"notice\":\"Address of the OToken vault\"},\"withdraw(address,address,uint256)\":{\"notice\":\"Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - after mints if the strategy is the default - time between depositToStrategy and stakeEth - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure.\"},\"withdrawAll()\":{\"notice\":\"transfer all WETH deposits back to the vault. This does not withdraw from the validators. That has to be done separately with the `exitSsvValidator` and `removeSsvValidator` operations. This does not withdraw any execution rewards from the FeeAccumulator or consensus rewards in this strategy. Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn. ETH from full validator withdrawals is sent to the Vault using `doAccounting`. Will NOT revert if the strategy is paused from an accounting failure.\"}},\"notice\":\"Strategy to deploy funds into DVT validators powered by the SSV Network\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":\"NativeStakingSSVStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused(), \\\"Pausable: paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n require(paused(), \\\"Pausable: not paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a >= b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a / b + (a % b == 0 ? 0 : 1);\\n }\\n}\\n\",\"keccak256\":\"0xfaad496c1c944b6259b7dc70b4865eb1775d6402bc0c81b38a0b24d9f525ae37\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @notice Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @notice Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0xb7133d6ce7a9e673ff79fcedb3fd41ae6e58e251f94915bb65731abe524270b4\",\"license\":\"MIT\"},\"contracts/interfaces/IBasicToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IBasicToken {\\n function symbol() external view returns (string memory);\\n\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xa562062698aa12572123b36dfd2072f1a39e44fed2031cc19c2c9fd522f96ec2\",\"license\":\"MIT\"},\"contracts/interfaces/IDepositContract.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDepositContract {\\n /// @notice A processed deposit event.\\n event DepositEvent(\\n bytes pubkey,\\n bytes withdrawal_credentials,\\n bytes amount,\\n bytes signature,\\n bytes index\\n );\\n\\n /// @notice Submit a Phase 0 DepositData object.\\n /// @param pubkey A BLS12-381 public key.\\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\\n /// @param signature A BLS12-381 signature.\\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\\n /// Used as a protection against malformed input.\\n function deposit(\\n bytes calldata pubkey,\\n bytes calldata withdrawal_credentials,\\n bytes calldata signature,\\n bytes32 deposit_data_root\\n ) external payable;\\n\\n /// @notice Query the current deposit root hash.\\n /// @return The deposit root hash.\\n function get_deposit_root() external view returns (bytes32);\\n\\n /// @notice Query the current deposit count.\\n /// @return The deposit count encoded as a little endian 64-bit number.\\n function get_deposit_count() external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x598f90bdbc854250bbd5991426bfb43367207e64e33109c41aa8b54323fd8d8e\",\"license\":\"MIT\"},\"contracts/interfaces/ISSVNetwork.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct Cluster {\\n uint32 validatorCount;\\n uint64 networkFeeIndex;\\n uint64 index;\\n bool active;\\n uint256 balance;\\n}\\n\\ninterface ISSVNetwork {\\n /**********/\\n /* Errors */\\n /**********/\\n\\n error CallerNotOwner(); // 0x5cd83192\\n error CallerNotWhitelisted(); // 0x8c6e5d71\\n error FeeTooLow(); // 0x732f9413\\n error FeeExceedsIncreaseLimit(); // 0x958065d9\\n error NoFeeDeclared(); // 0x1d226c30\\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\\n error OperatorDoesNotExist(); // 0x961e3e8c\\n error InsufficientBalance(); // 0xf4d678b8\\n error ValidatorDoesNotExist(); // 0xe51315d2\\n error ClusterNotLiquidatable(); // 0x60300a8d\\n error InvalidPublicKeyLength(); // 0x637297a4\\n error InvalidOperatorIdsLength(); // 0x38186224\\n error ClusterAlreadyEnabled(); // 0x3babafd2\\n error ClusterIsLiquidated(); // 0x95a0cf33\\n error ClusterDoesNotExists(); // 0x185e2b16\\n error IncorrectClusterState(); // 0x12e04c87\\n error UnsortedOperatorsList(); // 0xdd020e25\\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\\n error ExceedValidatorLimit(); // 0x6df5ab76\\n error TokenTransferFailed(); // 0x045c4b02\\n error SameFeeChangeNotAllowed(); // 0xc81272f8\\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\\n error NotAuthorized(); // 0xea8e4eb5\\n error OperatorsListNotUnique(); // 0xa5a1ff5d\\n error OperatorAlreadyExists(); // 0x289c9494\\n error TargetModuleDoesNotExist(); // 0x8f9195fb\\n error MaxValueExceeded(); // 0x91aa3017\\n error FeeTooHigh(); // 0xcd4e6167\\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\\n error EmptyPublicKeysList(); // df83e679\\n\\n // legacy errors\\n error ValidatorAlreadyExists(); // 0x8d09a73e\\n error IncorrectValidatorState(); // 0x2feda3c1\\n\\n event AdminChanged(address previousAdmin, address newAdmin);\\n event BeaconUpgraded(address indexed beacon);\\n event ClusterDeposited(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event ClusterLiquidated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterReactivated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterWithdrawn(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event DeclareOperatorFeePeriodUpdated(uint64 value);\\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\\n event FeeRecipientAddressUpdated(\\n address indexed owner,\\n address recipientAddress\\n );\\n event Initialized(uint8 version);\\n event LiquidationThresholdPeriodUpdated(uint64 value);\\n event MinimumLiquidationCollateralUpdated(uint256 value);\\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\\n event OperatorAdded(\\n uint64 indexed operatorId,\\n address indexed owner,\\n bytes publicKey,\\n uint256 fee\\n );\\n event OperatorFeeDeclarationCancelled(\\n address indexed owner,\\n uint64 indexed operatorId\\n );\\n event OperatorFeeDeclared(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeExecuted(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\\n event OperatorMaximumFeeUpdated(uint64 maxFee);\\n event OperatorRemoved(uint64 indexed operatorId);\\n event OperatorWhitelistUpdated(\\n uint64 indexed operatorId,\\n address whitelisted\\n );\\n event OperatorWithdrawn(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 value\\n );\\n event OwnershipTransferStarted(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event OwnershipTransferred(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event Upgraded(address indexed implementation);\\n event ValidatorAdded(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n bytes shares,\\n Cluster cluster\\n );\\n event ValidatorExited(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey\\n );\\n event ValidatorRemoved(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n Cluster cluster\\n );\\n\\n fallback() external;\\n\\n function acceptOwnership() external;\\n\\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\\n\\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function deposit(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function executeOperatorFee(uint64 operatorId) external;\\n\\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\\n external;\\n\\n function getVersion() external pure returns (string memory version);\\n\\n function initialize(\\n address token_,\\n address ssvOperators_,\\n address ssvClusters_,\\n address ssvDAO_,\\n address ssvViews_,\\n uint64 minimumBlocksBeforeLiquidation_,\\n uint256 minimumLiquidationCollateral_,\\n uint32 validatorsPerOperatorLimit_,\\n uint64 declareOperatorFeePeriod_,\\n uint64 executeOperatorFeePeriod_,\\n uint64 operatorMaxFeeIncrease_\\n ) external;\\n\\n function liquidate(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function owner() external view returns (address);\\n\\n function pendingOwner() external view returns (address);\\n\\n function proxiableUUID() external view returns (bytes32);\\n\\n function reactivate(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function registerOperator(bytes memory publicKey, uint256 fee)\\n external\\n returns (uint64 id);\\n\\n function registerValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n bytes memory sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function removeOperator(uint64 operatorId) external;\\n\\n function removeValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function renounceOwnership() external;\\n\\n function setFeeRecipientAddress(address recipientAddress) external;\\n\\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\\n external;\\n\\n function transferOwnership(address newOwner) external;\\n\\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\\n\\n function updateMaximumOperatorFee(uint64 maxFee) external;\\n\\n function updateMinimumLiquidationCollateral(uint256 amount) external;\\n\\n function updateModule(uint8 moduleId, address moduleAddress) external;\\n\\n function updateNetworkFee(uint256 fee) external;\\n\\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\\n\\n function upgradeTo(address newImplementation) external;\\n\\n function upgradeToAndCall(address newImplementation, bytes memory data)\\n external\\n payable;\\n\\n function withdraw(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\\n\\n function withdrawNetworkEarnings(uint256 amount) external;\\n\\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\\n external;\\n}\\n\",\"keccak256\":\"0xbef02bd5257e61dec0a6be4b1531064a7fdfeb4043885443a1902fb5d1b23e1b\",\"license\":\"MIT\"},\"contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\\n */\\ninterface IStrategy {\\n /**\\n * @dev Deposit the given asset to platform\\n * @param _asset asset address\\n * @param _amount Amount to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external;\\n\\n /**\\n * @dev Deposit the entire balance of all supported assets in the Strategy\\n * to the platform\\n */\\n function depositAll() external;\\n\\n /**\\n * @dev Withdraw given asset from Lending platform\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external;\\n\\n /**\\n * @dev Liquidate all assets in strategy and return them to Vault.\\n */\\n function withdrawAll() external;\\n\\n /**\\n * @dev Returns the current balance of the given asset.\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n returns (uint256 balance);\\n\\n /**\\n * @dev Returns bool indicating whether strategy supports asset.\\n */\\n function supportsAsset(address _asset) external view returns (bool);\\n\\n /**\\n * @dev Collect reward tokens from the Strategy.\\n */\\n function collectRewardTokens() external;\\n\\n /**\\n * @dev The address array of the reward tokens for the Strategy.\\n */\\n function getRewardTokenAddresses() external view returns (address[] memory);\\n}\\n\",\"keccak256\":\"0xb291e409a9b95527f9ed19cd6bff8eeb9921a21c1f5194a48c0bb9ce6613959a\",\"license\":\"MIT\"},\"contracts/interfaces/IVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { VaultStorage } from \\\"../vault/VaultStorage.sol\\\";\\n\\ninterface IVault {\\n event AssetSupported(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Governable.sol\\n function transferGovernance(address _newGovernor) external;\\n\\n function claimGovernance() external;\\n\\n function governor() external view returns (address);\\n\\n // VaultAdmin.sol\\n function setPriceProvider(address _priceProvider) external;\\n\\n function priceProvider() external view returns (address);\\n\\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\\n\\n function redeemFeeBps() external view returns (uint256);\\n\\n function setVaultBuffer(uint256 _vaultBuffer) external;\\n\\n function vaultBuffer() external view returns (uint256);\\n\\n function setAutoAllocateThreshold(uint256 _threshold) external;\\n\\n function autoAllocateThreshold() external view returns (uint256);\\n\\n function setRebaseThreshold(uint256 _threshold) external;\\n\\n function rebaseThreshold() external view returns (uint256);\\n\\n function setStrategistAddr(address _address) external;\\n\\n function strategistAddr() external view returns (address);\\n\\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\\n\\n function maxSupplyDiff() external view returns (uint256);\\n\\n function setTrusteeAddress(address _address) external;\\n\\n function trusteeAddress() external view returns (address);\\n\\n function setTrusteeFeeBps(uint256 _basis) external;\\n\\n function trusteeFeeBps() external view returns (uint256);\\n\\n function ousdMetaStrategy() external view returns (address);\\n\\n function setSwapper(address _swapperAddr) external;\\n\\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\\n\\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\\n external;\\n\\n function supportAsset(address _asset, uint8 _supportsAsset) external;\\n\\n function approveStrategy(address _addr) external;\\n\\n function removeStrategy(address _addr) external;\\n\\n function setAssetDefaultStrategy(address _asset, address _strategy)\\n external;\\n\\n function assetDefaultStrategies(address _asset)\\n external\\n view\\n returns (address);\\n\\n function pauseRebase() external;\\n\\n function unpauseRebase() external;\\n\\n function rebasePaused() external view returns (bool);\\n\\n function pauseCapital() external;\\n\\n function unpauseCapital() external;\\n\\n function capitalPaused() external view returns (bool);\\n\\n function transferToken(address _asset, uint256 _amount) external;\\n\\n function priceUnitMint(address asset) external view returns (uint256);\\n\\n function priceUnitRedeem(address asset) external view returns (uint256);\\n\\n function withdrawAllFromStrategy(address _strategyAddr) external;\\n\\n function withdrawAllFromStrategies() external;\\n\\n function withdrawFromStrategy(\\n address _strategyFromAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n function depositToStrategy(\\n address _strategyToAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n // VaultCore.sol\\n function mint(\\n address _asset,\\n uint256 _amount,\\n uint256 _minimumOusdAmount\\n ) external;\\n\\n function mintForStrategy(uint256 _amount) external;\\n\\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\\n\\n function burnForStrategy(uint256 _amount) external;\\n\\n function redeemAll(uint256 _minimumUnitAmount) external;\\n\\n function allocate() external;\\n\\n function rebase() external;\\n\\n function swapCollateral(\\n address fromAsset,\\n address toAsset,\\n uint256 fromAssetAmount,\\n uint256 minToAssetAmount,\\n bytes calldata data\\n ) external returns (uint256 toAssetAmount);\\n\\n function totalValue() external view returns (uint256 value);\\n\\n function checkBalance(address _asset) external view returns (uint256);\\n\\n function calculateRedeemOutputs(uint256 _amount)\\n external\\n view\\n returns (uint256[] memory);\\n\\n function getAssetCount() external view returns (uint256);\\n\\n function getAssetConfig(address _asset)\\n external\\n view\\n returns (VaultStorage.Asset memory config);\\n\\n function getAllAssets() external view returns (address[] memory);\\n\\n function getStrategyCount() external view returns (uint256);\\n\\n function swapper() external view returns (address);\\n\\n function allowedSwapUndervalue() external view returns (uint256);\\n\\n function getAllStrategies() external view returns (address[] memory);\\n\\n function isSupportedAsset(address _asset) external view returns (bool);\\n\\n function netOusdMintForStrategyThreshold() external view returns (uint256);\\n\\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\\n\\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\\n\\n function netOusdMintedForStrategy() external view returns (int256);\\n\\n function weth() external view returns (address);\\n\\n function cacheWETHAssetIndex() external;\\n\\n function wethAssetIndex() external view returns (uint256);\\n\\n function initialize(address, address) external;\\n\\n function setAdminImpl(address) external;\\n\\n function removeAsset(address _asset) external;\\n}\\n\",\"keccak256\":\"0xa03ba17b6224bec26290794760fc807e017260406037b4f812970701888e72c8\",\"license\":\"MIT\"},\"contracts/interfaces/IWETH9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IWETH9 {\\n event Approval(address indexed src, address indexed guy, uint256 wad);\\n event Deposit(address indexed dst, uint256 wad);\\n event Transfer(address indexed src, address indexed dst, uint256 wad);\\n event Withdrawal(address indexed src, uint256 wad);\\n\\n function allowance(address, address) external view returns (uint256);\\n\\n function approve(address guy, uint256 wad) external returns (bool);\\n\\n function balanceOf(address) external view returns (uint256);\\n\\n function decimals() external view returns (uint8);\\n\\n function deposit() external payable;\\n\\n function name() external view returns (string memory);\\n\\n function symbol() external view returns (string memory);\\n\\n function totalSupply() external view returns (uint256);\\n\\n function transfer(address dst, uint256 wad) external returns (bool);\\n\\n function transferFrom(\\n address src,\\n address dst,\\n uint256 wad\\n ) external returns (bool);\\n\\n function withdraw(uint256 wad) external;\\n}\\n\",\"keccak256\":\"0x05b7dce6c24d3cd4e48b5c6346d86e5e40ecc3291bcdf3f3ef091c98fc826519\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/FeeAccumulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title Fee Accumulator for Native Staking SSV Strategy\\n * @notice Receives execution rewards which includes tx fees and\\n * MEV rewards like tx priority and tx ordering.\\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\\n * @author Origin Protocol Inc\\n */\\ncontract FeeAccumulator {\\n /// @notice The address of the Native Staking Strategy\\n address public immutable STRATEGY;\\n\\n event ExecutionRewardsCollected(address indexed strategy, uint256 amount);\\n\\n /**\\n * @param _strategy Address of the Native Staking Strategy\\n */\\n constructor(address _strategy) {\\n STRATEGY = _strategy;\\n }\\n\\n /**\\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\\n */\\n function collect() external returns (uint256 eth) {\\n require(msg.sender == STRATEGY, \\\"Caller is not the Strategy\\\");\\n\\n eth = address(this).balance;\\n if (eth > 0) {\\n // Send the ETH to the Native Staking Strategy\\n Address.sendValue(payable(STRATEGY), eth);\\n\\n emit ExecutionRewardsCollected(STRATEGY, eth);\\n }\\n }\\n\\n /**\\n * @dev Accept ETH\\n */\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x55ac966612d9e9d48678162b4ddc7aef53807644697206470def52887782d7f4\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nimport { InitializableAbstractStrategy } from \\\"../../utils/InitializableAbstractStrategy.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { FeeAccumulator } from \\\"./FeeAccumulator.sol\\\";\\nimport { ValidatorAccountant } from \\\"./ValidatorAccountant.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/// @title Native Staking SSV Strategy\\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\\n/// @author Origin Protocol Inc\\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\\n/// required since the rewards (reward token) is also in ETH.\\n///\\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\\n/// immediately wraps ETH to WETH and sends it to the Vault.\\n///\\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\\n/// - as a result of already accounted for consensus rewards\\n/// - as a result of not yet accounted for consensus rewards\\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\\n///\\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\\n/// interval and not immediately.\\ncontract NativeStakingSSVStrategy is\\n ValidatorAccountant,\\n InitializableAbstractStrategy\\n{\\n using SafeERC20 for IERC20;\\n\\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\\n address public immutable SSV_TOKEN;\\n /// @notice Fee collector address\\n /// @dev this address will receive Execution layer rewards - These are rewards earned for\\n /// executing transactions on the Ethereum network as part of block proposals. They include\\n /// priority fees (fees paid by users for their transactions to be included) and MEV rewards\\n /// (rewards for arranging transactions in a way that benefits the validator).\\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\\n\\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\\n /// of WETH that has already been accounted for.\\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\\n /// deposit events.\\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\\n /// be staked.\\n uint256 public depositedWethAccountedFor;\\n\\n // For future use\\n uint256[49] private __gap;\\n\\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _ssvToken Address of the Erc20 SSV Token contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n constructor(\\n BaseStrategyConfig memory _baseConfig,\\n address _wethAddress,\\n address _ssvToken,\\n address _ssvNetwork,\\n uint256 _maxValidators,\\n address _feeAccumulator,\\n address _beaconChainDepositContract\\n )\\n InitializableAbstractStrategy(_baseConfig)\\n ValidatorAccountant(\\n _wethAddress,\\n _baseConfig.vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {\\n SSV_TOKEN = _ssvToken;\\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\\n }\\n\\n /// @notice initialize function, to set up initial internal state\\n /// @param _rewardTokenAddresses Address of reward token for platform\\n /// @param _assets Addresses of initial supported assets\\n /// @param _pTokens Platform Token corresponding addresses\\n function initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) external onlyGovernor initializer {\\n InitializableAbstractStrategy._initialize(\\n _rewardTokenAddresses,\\n _assets,\\n _pTokens\\n );\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just checks the asset is WETH and emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _asset Address of asset to deposit. Has to be WETH.\\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\\n function deposit(address _asset, uint256 _amount)\\n external\\n override\\n onlyVault\\n nonReentrant\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n depositedWethAccountedFor += _amount;\\n _deposit(_asset, _amount);\\n }\\n\\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\\n /// @param _asset Address of WETH\\n /// @param _amount Amount of WETH to deposit\\n function _deposit(address _asset, uint256 _amount) internal {\\n require(_amount > 0, \\\"Must deposit something\\\");\\n /*\\n * We could do a check here that would revert when \\\"_amount % 32 ether != 0\\\". With the idea of\\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\\n * of 32ETH have been staked.\\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\\n *\\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\\n */\\n emit Deposit(_asset, address(0), _amount);\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function depositAll() external override onlyVault nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\\n\\n if (newWeth > 0) {\\n depositedWethAccountedFor = wethBalance;\\n\\n _deposit(WETH, newWeth);\\n }\\n }\\n\\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\\n /// That can happen when:\\n /// - after mints if the strategy is the default\\n /// - time between depositToStrategy and stakeEth\\n /// - the deposit was not a multiple of 32 WETH\\n /// - someone sent WETH directly to this contract\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _recipient Address to receive withdrawn assets\\n /// @param _asset WETH to withdraw\\n /// @param _amount Amount of WETH to withdraw\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external override onlyVault nonReentrant {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n _withdraw(_recipient, _asset, _amount);\\n }\\n\\n function _withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) internal {\\n require(_amount > 0, \\\"Must withdraw something\\\");\\n require(_recipient != address(0), \\\"Must specify recipient\\\");\\n\\n _wethWithdrawn(_amount);\\n\\n IERC20(_asset).safeTransfer(_recipient, _amount);\\n emit Withdrawal(_asset, address(0), _amount);\\n }\\n\\n /// @notice transfer all WETH deposits back to the vault.\\n /// This does not withdraw from the validators. That has to be done separately with the\\n /// `exitSsvValidator` and `removeSsvValidator` operations.\\n /// This does not withdraw any execution rewards from the FeeAccumulator or\\n /// consensus rewards in this strategy.\\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n if (wethBalance > 0) {\\n _withdraw(vaultAddress, WETH, wethBalance);\\n }\\n }\\n\\n /// @notice Returns the total value of (W)ETH that is staked to the validators\\n /// and WETH deposits that are still to be staked.\\n /// This does not include ETH from consensus rewards sitting in this strategy\\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\\n /// @param _asset Address of weth asset\\n /// @return balance Total value of (W)ETH\\n function checkBalance(address _asset)\\n external\\n view\\n override\\n returns (uint256 balance)\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n\\n balance =\\n // add the ETH that has been staked in validators\\n activeDepositedValidators *\\n FULL_STAKE +\\n // add the WETH in the strategy from deposits that are still to be staked\\n IERC20(WETH).balanceOf(address(this));\\n }\\n\\n function pause() external onlyStrategist {\\n _pause();\\n }\\n\\n /// @notice Returns bool indicating whether asset is supported by strategy.\\n /// @param _asset The address of the asset token.\\n function supportsAsset(address _asset) public view override returns (bool) {\\n return _asset == WETH;\\n }\\n\\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\\n function safeApproveAllTokens() external override {\\n /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits\\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\\n }\\n\\n /**\\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\\n * unwrapping WETH just before staking it to the validator\\n * @dev don't want to receive donations from anyone else as this will\\n * mess with the accounting of the consensus rewards and validator full withdrawals\\n */\\n receive() external payable {\\n require(\\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\\n \\\"Eth not from allowed contracts\\\"\\n );\\n }\\n\\n /***************************************\\n Internal functions\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address) internal override {}\\n\\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\\n /// Will revert if the strategy is paused for accounting.\\n function _collectRewardTokens() internal override whenNotPaused {\\n // collect ETH from execution rewards from the fee accumulator\\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\\n .collect();\\n\\n // total ETH rewards to be harvested = execution rewards + consensus rewards\\n uint256 ethRewards = executionRewards + consensusRewards;\\n\\n require(\\n address(this).balance >= ethRewards,\\n \\\"Insufficient eth balance\\\"\\n );\\n\\n if (ethRewards > 0) {\\n // reset the counter keeping track of beacon chain consensus rewards\\n consensusRewards = 0;\\n\\n // Convert ETH rewards to WETH\\n IWETH9(WETH).deposit{ value: ethRewards }();\\n\\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\\n }\\n }\\n\\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\\n function _wethWithdrawnToVault(uint256 _amount) internal override {\\n emit Withdrawal(WETH, address(0), _amount);\\n }\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal override {\\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\\n * depositedWethAccountedFor is smaller than the _amount.\\n *\\n * The reason this is required is that a malicious actor could sent WETH directly\\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\\n * be deducted so much that it would be negative.\\n */\\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\\n depositedWethAccountedFor -= deductAmount;\\n }\\n}\\n\",\"keccak256\":\"0xd8c9e9fcf4f44909a7f9a04ec58ca6134ac0a3fe0ac4f59c970116c028bcc2d3\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorAccountant.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { ValidatorRegistrator } from \\\"./ValidatorRegistrator.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\n\\n/// @title Validator Accountant\\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\\n/// Full withdrawals are from exited validators.\\n/// @author Origin Protocol Inc\\nabstract contract ValidatorAccountant is ValidatorRegistrator {\\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\\n\\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\\n uint256 public consensusRewards;\\n\\n /// @notice start of fuse interval\\n uint256 public fuseIntervalStart;\\n /// @notice end of fuse interval\\n uint256 public fuseIntervalEnd;\\n /// @notice last block number manuallyFixAccounting has been called\\n uint256 public lastFixAccountingBlockNumber;\\n\\n uint256[49] private __gap;\\n\\n event FuseIntervalUpdated(uint256 start, uint256 end);\\n event AccountingFullyWithdrawnValidator(\\n uint256 noOfValidators,\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingValidatorSlashed(\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingConsensusRewards(uint256 amount);\\n\\n event AccountingManuallyFixed(\\n int256 validatorsDelta,\\n int256 consensusRewardsDelta,\\n uint256 wethToVault\\n );\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n )\\n ValidatorRegistrator(\\n _wethAddress,\\n _vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {}\\n\\n /// @notice set fuse interval values\\n function setFuseInterval(\\n uint256 _fuseIntervalStart,\\n uint256 _fuseIntervalEnd\\n ) external onlyGovernor {\\n require(\\n _fuseIntervalStart < _fuseIntervalEnd &&\\n _fuseIntervalEnd < 32 ether &&\\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\\n \\\"Incorrect fuse interval\\\"\\n );\\n\\n fuseIntervalStart = _fuseIntervalStart;\\n fuseIntervalEnd = _fuseIntervalEnd;\\n\\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\\n }\\n\\n /* solhint-disable max-line-length */\\n /// This notion page offers a good explanation of how the accounting functions\\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\\n /// the accounting function will treat that as a validator slashing.\\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\\n /// accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\\n /// for now.\\n /// @return accountingValid true if accounting was successful, false if fuse is blown\\n /* solhint-enable max-line-length */\\n function doAccounting()\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n returns (bool accountingValid)\\n {\\n // pause the accounting on failure\\n accountingValid = _doAccounting(true);\\n }\\n\\n // slither-disable-start reentrancy-eth\\n function _doAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n if (address(this).balance < consensusRewards) {\\n return _failAccounting(pauseOnFail);\\n }\\n\\n // Calculate all the new ETH that has been swept to the contract since the last accounting\\n uint256 newSweptETH = address(this).balance - consensusRewards;\\n accountingValid = true;\\n\\n // send the ETH that is from fully withdrawn validators to the Vault\\n if (newSweptETH >= FULL_STAKE) {\\n uint256 fullyWithdrawnValidators;\\n // explicitly cast to uint256 as we want to round to a whole number of validators\\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\\n activeDepositedValidators -= fullyWithdrawnValidators;\\n\\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\\n IWETH9(WETH).deposit{ value: wethToVault }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\\n _wethWithdrawnToVault(wethToVault);\\n\\n emit AccountingFullyWithdrawnValidator(\\n fullyWithdrawnValidators,\\n activeDepositedValidators,\\n wethToVault\\n );\\n }\\n\\n uint256 ethRemaining = address(this).balance - consensusRewards;\\n // should be less than a whole validator stake\\n require(ethRemaining < FULL_STAKE, \\\"Unexpected accounting\\\");\\n\\n // If no Beacon chain consensus rewards swept\\n if (ethRemaining == 0) {\\n // do nothing\\n return accountingValid;\\n } else if (ethRemaining < fuseIntervalStart) {\\n // Beacon chain consensus rewards swept (partial validator withdrawals)\\n // solhint-disable-next-line reentrancy\\n consensusRewards += ethRemaining;\\n emit AccountingConsensusRewards(ethRemaining);\\n } else if (ethRemaining > fuseIntervalEnd) {\\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\\n IWETH9(WETH).deposit{ value: ethRemaining }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\\n activeDepositedValidators -= 1;\\n\\n _wethWithdrawnToVault(ethRemaining);\\n\\n emit AccountingValidatorSlashed(\\n activeDepositedValidators,\\n ethRemaining\\n );\\n }\\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\\n else {\\n return _failAccounting(pauseOnFail);\\n }\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @dev pause any further accounting if required and return false\\n function _failAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n // pause if not already\\n if (pauseOnFail) {\\n _pause();\\n }\\n // fail the accounting\\n accountingValid = false;\\n }\\n\\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\\n /// to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval\\n /// we need to reduce the amount of active deposited validators and immediately send WETH\\n /// to the vault, so it doesn't interfere with further accounting.\\n function manuallyFixAccounting(\\n int256 _validatorsDelta,\\n int256 _consensusRewardsDelta,\\n uint256 _ethToVaultAmount\\n ) external onlyStrategist whenPaused nonReentrant {\\n require(\\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\\n block.number,\\n \\\"Fix accounting called too soon\\\"\\n );\\n require(\\n _validatorsDelta >= -3 &&\\n _validatorsDelta <= 3 &&\\n // new value must be positive\\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\\n \\\"Invalid validatorsDelta\\\"\\n );\\n require(\\n _consensusRewardsDelta >= -332 ether &&\\n _consensusRewardsDelta <= 332 ether &&\\n // new value must be positive\\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\\n \\\"Invalid consensusRewardsDelta\\\"\\n );\\n require(_ethToVaultAmount <= 32 ether * 3, \\\"Invalid wethToVaultAmount\\\");\\n\\n activeDepositedValidators = uint256(\\n int256(activeDepositedValidators) + _validatorsDelta\\n );\\n consensusRewards = uint256(\\n int256(consensusRewards) + _consensusRewardsDelta\\n );\\n lastFixAccountingBlockNumber = block.number;\\n if (_ethToVaultAmount > 0) {\\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\\n _wethWithdrawnToVault(_ethToVaultAmount);\\n }\\n\\n emit AccountingManuallyFixed(\\n _validatorsDelta,\\n _consensusRewardsDelta,\\n _ethToVaultAmount\\n );\\n\\n // rerun the accounting to see if it has now been fixed.\\n // Do not pause the accounting on failure as it is already paused\\n require(_doAccounting(false), \\\"Fuse still blown\\\");\\n\\n // unpause since doAccounting was successful\\n _unpause();\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xeeb0a7154b30156331f790d50ae82ce56be4c6589080a3bdd53fb6cf4815ec56\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorRegistrator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Governable } from \\\"../../governance/Governable.sol\\\";\\nimport { IDepositContract } from \\\"../../interfaces/IDepositContract.sol\\\";\\nimport { IVault } from \\\"../../interfaces/IVault.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { ISSVNetwork, Cluster } from \\\"../../interfaces/ISSVNetwork.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/**\\n * @title Registrator of the validators\\n * @notice This contract implements all the required functionality to register, exit and remove validators.\\n * @author Origin Protocol Inc\\n */\\nabstract contract ValidatorRegistrator is Governable, Pausable {\\n /// @notice The maximum amount of ETH that can be staked by a validator\\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\\n uint256 public constant FULL_STAKE = 32 ether;\\n\\n /// @notice The address of the Wrapped ETH (WETH) token contract\\n address public immutable WETH;\\n /// @notice The address of the beacon chain deposit contract\\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\\n /// @notice The address of the SSV Network contract used to interface with\\n address public immutable SSV_NETWORK;\\n /// @notice Address of the OETH Vault proxy contract\\n address public immutable VAULT_ADDRESS;\\n /// @notice Maximum number of validators that can be registered in this strategy\\n uint256 public immutable MAX_VALIDATORS;\\n\\n /// @notice Address of the registrator - allowed to register, exit and remove validators\\n address public validatorRegistrator;\\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\\n /// to a validator happens this number increases, when a validator exit is detected this number\\n /// decreases.\\n uint256 public activeDepositedValidators;\\n /// @notice State of the validators keccak256(pubKey) => state\\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\\n address public stakingMonitor;\\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\\n /// and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\\n uint256 public stakeETHThreshold;\\n /// @notice Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`.\\n /// This can not go above `stakeETHThreshold`.\\n uint256 public stakeETHTally;\\n // For future use\\n uint256[47] private __gap;\\n\\n enum VALIDATOR_STATE {\\n NON_REGISTERED, // validator is not registered on the SSV network\\n REGISTERED, // validator is registered on the SSV network\\n STAKED, // validator has funds staked\\n EXITING, // exit message has been posted and validator is in the process of exiting\\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\\n }\\n\\n event RegistratorChanged(address indexed newAddress);\\n event StakingMonitorChanged(address indexed newAddress);\\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\\n event SSVValidatorRegistered(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitInitiated(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitCompleted(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event StakeETHThresholdChanged(uint256 amount);\\n event StakeETHTallyReset();\\n\\n /// @dev Throws if called by any account other than the Registrator\\n modifier onlyRegistrator() {\\n require(\\n msg.sender == validatorRegistrator,\\n \\\"Caller is not the Registrator\\\"\\n );\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Staking monitor\\n modifier onlyStakingMonitor() {\\n require(msg.sender == stakingMonitor, \\\"Caller is not the Monitor\\\");\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Strategist\\n modifier onlyStrategist() {\\n require(\\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\\n \\\"Caller is not the Strategist\\\"\\n );\\n _;\\n }\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n ) {\\n WETH = _wethAddress;\\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\\n SSV_NETWORK = _ssvNetwork;\\n VAULT_ADDRESS = _vaultAddress;\\n MAX_VALIDATORS = _maxValidators;\\n }\\n\\n /// @notice Set the address of the registrator which can register, exit and remove validators\\n function setRegistrator(address _address) external onlyGovernor {\\n validatorRegistrator = _address;\\n emit RegistratorChanged(_address);\\n }\\n\\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\\n function setStakingMonitor(address _address) external onlyGovernor {\\n stakingMonitor = _address;\\n emit StakingMonitorChanged(_address);\\n }\\n\\n /// @notice Set the amount of ETH that can be staked before staking monitor\\n // needs to a approve further staking by resetting the stake ETH tally\\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\\n stakeETHThreshold = _amount;\\n emit StakeETHThresholdChanged(_amount);\\n }\\n\\n /// @notice Reset the stakeETHTally\\n function resetStakeETHTally() external onlyStakingMonitor {\\n stakeETHTally = 0;\\n emit StakeETHTallyReset();\\n }\\n\\n /// @notice Stakes WETH to the node validators\\n /// @param validators A list of validator data needed to stake.\\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\\n /// Only the registrator can call this function.\\n // slither-disable-start reentrancy-eth\\n function stakeEth(ValidatorStakeData[] calldata validators)\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n {\\n uint256 requiredETH = validators.length * FULL_STAKE;\\n\\n // Check there is enough WETH from the deposits sitting in this strategy contract\\n require(\\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\\n \\\"Insufficient WETH\\\"\\n );\\n require(\\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\\n \\\"Max validators reached\\\"\\n );\\n\\n require(\\n stakeETHTally + requiredETH <= stakeETHThreshold,\\n \\\"Staking ETH over threshold\\\"\\n );\\n stakeETHTally += requiredETH;\\n\\n // Convert required ETH from WETH\\n IWETH9(WETH).withdraw(requiredETH);\\n _wethWithdrawn(requiredETH);\\n\\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\\n * can sweep funds to.\\n * bytes11(0) to fill up the required zeros\\n * remaining bytes20 are for the address\\n */\\n bytes memory withdrawalCredentials = abi.encodePacked(\\n bytes1(0x01),\\n bytes11(0),\\n address(this)\\n );\\n\\n // For each validator\\n for (uint256 i = 0; i < validators.length; ++i) {\\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\\n\\n require(\\n validatorsStates[pubKeyHash] == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not registered\\\"\\n );\\n\\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\\n value: FULL_STAKE\\n }(\\n validators[i].pubkey,\\n withdrawalCredentials,\\n validators[i].signature,\\n validators[i].depositDataRoot\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\\n\\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\\n }\\n // save gas by changing this storage variable only once rather each time in the loop.\\n activeDepositedValidators += validators.length;\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @notice Registers a new validator in the SSV Cluster.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param sharesData The validator shares data\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function registerSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n bytes calldata sharesData,\\n uint256 ssvAmount,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.NON_REGISTERED,\\n \\\"Validator already registered\\\"\\n );\\n ISSVNetwork(SSV_NETWORK).registerValidator(\\n publicKey,\\n operatorIds,\\n sharesData,\\n ssvAmount,\\n cluster\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\\n\\n emit SSVValidatorRegistered(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Exit a validator from the Beacon chain.\\n /// The staked ETH will eventually swept to this native staking strategy.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n // slither-disable-start reentrancy-no-eth\\n function exitSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(currentState == VALIDATOR_STATE.STAKED, \\\"Validator not staked\\\");\\n\\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\\n\\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Remove a validator from the SSV Cluster.\\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function removeSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.EXITING,\\n \\\"Validator not exiting\\\"\\n );\\n\\n ISSVNetwork(SSV_NETWORK).removeValidator(\\n publicKey,\\n operatorIds,\\n cluster\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\\n\\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\\n /// uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service\\n /// that tries to top up SSV tokens.\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n function depositSSV(\\n uint64[] memory operatorIds,\\n uint256 ssvAmount,\\n Cluster memory cluster\\n ) external onlyStrategist {\\n ISSVNetwork(SSV_NETWORK).deposit(\\n address(this),\\n operatorIds,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xb8aaa548c59a06aeb5742bc9ed0a44f2221a56104ab39a7e558b8fcda5e5a6b6\",\"license\":\"MIT\"},\"contracts/token/OUSD.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Token Contract\\n * @dev ERC20 compatible contract for OUSD\\n * @dev Implements an elastic supply\\n * @author Origin Protocol Inc\\n */\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { InitializableERC20Detailed } from \\\"../utils/InitializableERC20Detailed.sol\\\";\\nimport { StableMath } from \\\"../utils/StableMath.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\n\\n/**\\n * NOTE that this is an ERC20 token but the invariant that the sum of\\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\\n * rebasing design. Any integrations with OUSD should be aware.\\n */\\n\\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\\n using SafeMath for uint256;\\n using StableMath for uint256;\\n\\n event TotalSupplyUpdatedHighres(\\n uint256 totalSupply,\\n uint256 rebasingCredits,\\n uint256 rebasingCreditsPerToken\\n );\\n event AccountRebasingEnabled(address account);\\n event AccountRebasingDisabled(address account);\\n\\n enum RebaseOptions {\\n NotSet,\\n OptOut,\\n OptIn\\n }\\n\\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\\n uint256 public _totalSupply;\\n mapping(address => mapping(address => uint256)) private _allowances;\\n address public vaultAddress = address(0);\\n mapping(address => uint256) private _creditBalances;\\n uint256 private _rebasingCredits;\\n uint256 private _rebasingCreditsPerToken;\\n // Frozen address/credits are non rebasing (value is held in contracts which\\n // do not receive yield unless they explicitly opt in)\\n uint256 public nonRebasingSupply;\\n mapping(address => uint256) public nonRebasingCreditsPerToken;\\n mapping(address => RebaseOptions) public rebaseState;\\n mapping(address => uint256) public isUpgraded;\\n\\n uint256 private constant RESOLUTION_INCREASE = 1e9;\\n\\n function initialize(\\n string calldata _nameArg,\\n string calldata _symbolArg,\\n address _vaultAddress,\\n uint256 _initialCreditsPerToken\\n ) external onlyGovernor initializer {\\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\\n _rebasingCreditsPerToken = _initialCreditsPerToken;\\n vaultAddress = _vaultAddress;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault contract\\n */\\n modifier onlyVault() {\\n require(vaultAddress == msg.sender, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @return The total supply of OUSD.\\n */\\n function totalSupply() public view override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @return Low resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerToken() public view returns (uint256) {\\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return Low resolution total number of rebasing credits\\n */\\n function rebasingCredits() public view returns (uint256) {\\n return _rebasingCredits / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return High resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\\n return _rebasingCreditsPerToken;\\n }\\n\\n /**\\n * @return High resolution total number of rebasing credits\\n */\\n function rebasingCreditsHighres() public view returns (uint256) {\\n return _rebasingCredits;\\n }\\n\\n /**\\n * @dev Gets the balance of the specified address.\\n * @param _account Address to query the balance of.\\n * @return A uint256 representing the amount of base units owned by the\\n * specified address.\\n */\\n function balanceOf(address _account)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n if (_creditBalances[_account] == 0) return 0;\\n return\\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @dev Backwards compatible with old low res credits per token.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256) Credit balance and credits per token of the\\n * address\\n */\\n function creditsBalanceOf(address _account)\\n public\\n view\\n returns (uint256, uint256)\\n {\\n uint256 cpt = _creditsPerToken(_account);\\n if (cpt == 1e27) {\\n // For a period before the resolution upgrade, we created all new\\n // contract accounts at high resolution. Since they are not changing\\n // as a result of this upgrade, we will return their true values\\n return (_creditBalances[_account], cpt);\\n } else {\\n return (\\n _creditBalances[_account] / RESOLUTION_INCREASE,\\n cpt / RESOLUTION_INCREASE\\n );\\n }\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\\n * address, and isUpgraded\\n */\\n function creditsBalanceOfHighres(address _account)\\n public\\n view\\n returns (\\n uint256,\\n uint256,\\n bool\\n )\\n {\\n return (\\n _creditBalances[_account],\\n _creditsPerToken(_account),\\n isUpgraded[_account] == 1\\n );\\n }\\n\\n /**\\n * @dev Transfer tokens to a specified address.\\n * @param _to the address to transfer to.\\n * @param _value the amount to be transferred.\\n * @return true on success.\\n */\\n function transfer(address _to, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(\\n _value <= balanceOf(msg.sender),\\n \\\"Transfer greater than balance\\\"\\n );\\n\\n _executeTransfer(msg.sender, _to, _value);\\n\\n emit Transfer(msg.sender, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Transfer tokens from one address to another.\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value The amount of tokens to be transferred.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _value\\n ) public override returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(_value <= balanceOf(_from), \\\"Transfer greater than balance\\\");\\n\\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\\n _value\\n );\\n\\n _executeTransfer(_from, _to, _value);\\n\\n emit Transfer(_from, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Update the count of non rebasing credits in response to a transfer\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value Amount of OUSD to transfer\\n */\\n function _executeTransfer(\\n address _from,\\n address _to,\\n uint256 _value\\n ) internal {\\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\\n\\n // Credits deducted and credited might be different due to the\\n // differing creditsPerToken used by each account\\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\\n\\n _creditBalances[_from] = _creditBalances[_from].sub(\\n creditsDeducted,\\n \\\"Transfer amount exceeds balance\\\"\\n );\\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\\n\\n if (isNonRebasingTo && !isNonRebasingFrom) {\\n // Transfer to non-rebasing account from rebasing account, credits\\n // are removed from the non rebasing tally\\n nonRebasingSupply = nonRebasingSupply.add(_value);\\n // Update rebasingCredits by subtracting the deducted amount\\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\\n // Transfer to rebasing account from non-rebasing account\\n // Decreasing non-rebasing credits by the amount that was sent\\n nonRebasingSupply = nonRebasingSupply.sub(_value);\\n // Update rebasingCredits by adding the credited amount\\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\\n }\\n }\\n\\n /**\\n * @dev Function to check the amount of tokens that _owner has allowed to\\n * `_spender`.\\n * @param _owner The address which owns the funds.\\n * @param _spender The address which will spend the funds.\\n * @return The number of tokens still available for the _spender.\\n */\\n function allowance(address _owner, address _spender)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev Approve the passed address to spend the specified amount of tokens\\n * on behalf of msg.sender. This method is included for ERC20\\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\\n * used instead.\\n *\\n * Changing an allowance with this method brings the risk that someone\\n * may transfer both the old and the new allowance - if they are both\\n * greater than zero - if a transfer transaction is mined before the\\n * later approve() call is mined.\\n * @param _spender The address which will spend the funds.\\n * @param _value The amount of tokens to be spent.\\n */\\n function approve(address _spender, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _value;\\n emit Approval(msg.sender, _spender, _value);\\n return true;\\n }\\n\\n /**\\n * @dev Increase the amount of tokens that an owner has allowed to\\n * `_spender`.\\n * This method should be used instead of approve() to avoid the double\\n * approval vulnerability described above.\\n * @param _spender The address which will spend the funds.\\n * @param _addedValue The amount of tokens to increase the allowance by.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue)\\n public\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\\n .add(_addedValue);\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Decrease the amount of tokens that an owner has allowed to\\n `_spender`.\\n * @param _spender The address which will spend the funds.\\n * @param _subtractedValue The amount of tokens to decrease the allowance\\n * by.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\\n public\\n returns (bool)\\n {\\n uint256 oldValue = _allowances[msg.sender][_spender];\\n if (_subtractedValue >= oldValue) {\\n _allowances[msg.sender][_spender] = 0;\\n } else {\\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\\n }\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Mints new tokens, increasing totalSupply.\\n */\\n function mint(address _account, uint256 _amount) external onlyVault {\\n _mint(_account, _amount);\\n }\\n\\n /**\\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Mint to the zero address\\\");\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\\n\\n // If the account is non rebasing and doesn't have a set creditsPerToken\\n // then set it i.e. this is a mint from a fresh contract\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.add(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.add(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.add(_amount);\\n\\n require(_totalSupply < MAX_SUPPLY, \\\"Max supply\\\");\\n\\n emit Transfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Burns tokens, decreasing totalSupply.\\n */\\n function burn(address account, uint256 amount) external onlyVault {\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Burn from the zero address\\\");\\n if (_amount == 0) {\\n return;\\n }\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n uint256 currentCredits = _creditBalances[_account];\\n\\n // Remove the credits, burning rounding errors\\n if (\\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\\n ) {\\n // Handle dust from rounding\\n _creditBalances[_account] = 0;\\n } else if (currentCredits > creditAmount) {\\n _creditBalances[_account] = _creditBalances[_account].sub(\\n creditAmount\\n );\\n } else {\\n revert(\\\"Remove exceeds balance\\\");\\n }\\n\\n // Remove from the credit tallies and non-rebasing supply\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.sub(_amount);\\n\\n emit Transfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Get the credits per token for an account. Returns a fixed amount\\n * if the account is non-rebasing.\\n * @param _account Address of the account.\\n */\\n function _creditsPerToken(address _account)\\n internal\\n view\\n returns (uint256)\\n {\\n if (nonRebasingCreditsPerToken[_account] != 0) {\\n return nonRebasingCreditsPerToken[_account];\\n } else {\\n return _rebasingCreditsPerToken;\\n }\\n }\\n\\n /**\\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\\n * Also, ensure contracts are non-rebasing if they have not opted in.\\n * @param _account Address of the account.\\n */\\n function _isNonRebasingAccount(address _account) internal returns (bool) {\\n bool isContract = Address.isContract(_account);\\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\\n _ensureRebasingMigration(_account);\\n }\\n return nonRebasingCreditsPerToken[_account] > 0;\\n }\\n\\n /**\\n * @dev Ensures internal account for rebasing and non-rebasing credits and\\n * supply is updated following deployment of frozen yield change.\\n */\\n function _ensureRebasingMigration(address _account) internal {\\n if (nonRebasingCreditsPerToken[_account] == 0) {\\n emit AccountRebasingDisabled(_account);\\n if (_creditBalances[_account] == 0) {\\n // Since there is no existing balance, we can directly set to\\n // high resolution, and do not have to do any other bookkeeping\\n nonRebasingCreditsPerToken[_account] = 1e27;\\n } else {\\n // Migrate an existing account:\\n\\n // Set fixed credits per token for this account\\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\\n // Update non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\\n // Update credit tallies\\n _rebasingCredits = _rebasingCredits.sub(\\n _creditBalances[_account]\\n );\\n }\\n }\\n }\\n\\n /**\\n * @notice Enable rebasing for an account.\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n * @param _account Address of the account.\\n */\\n function governanceRebaseOptIn(address _account)\\n public\\n nonReentrant\\n onlyGovernor\\n {\\n _rebaseOptIn(_account);\\n }\\n\\n /**\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n */\\n function rebaseOptIn() public nonReentrant {\\n _rebaseOptIn(msg.sender);\\n }\\n\\n function _rebaseOptIn(address _account) internal {\\n require(_isNonRebasingAccount(_account), \\\"Account has not opted out\\\");\\n\\n // Convert balance into the same amount at the current exchange rate\\n uint256 newCreditBalance = _creditBalances[_account]\\n .mul(_rebasingCreditsPerToken)\\n .div(_creditsPerToken(_account));\\n\\n // Decreasing non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\\n\\n _creditBalances[_account] = newCreditBalance;\\n\\n // Increase rebasing credits, totalSupply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\\n\\n rebaseState[_account] = RebaseOptions.OptIn;\\n\\n // Delete any fixed credits per token\\n delete nonRebasingCreditsPerToken[_account];\\n emit AccountRebasingEnabled(_account);\\n }\\n\\n /**\\n * @dev Explicitly mark that an address is non-rebasing.\\n */\\n function rebaseOptOut() public nonReentrant {\\n require(!_isNonRebasingAccount(msg.sender), \\\"Account has not opted in\\\");\\n\\n // Increase non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\\n // Set fixed credits per token\\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\\n\\n // Decrease rebasing credits, total supply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\\n\\n // Mark explicitly opted out of rebasing\\n rebaseState[msg.sender] = RebaseOptions.OptOut;\\n emit AccountRebasingDisabled(msg.sender);\\n }\\n\\n /**\\n * @dev Modify the supply without minting new tokens. This uses a change in\\n * the exchange rate between \\\"credits\\\" and OUSD tokens to change balances.\\n * @param _newTotalSupply New total supply of OUSD.\\n */\\n function changeSupply(uint256 _newTotalSupply)\\n external\\n onlyVault\\n nonReentrant\\n {\\n require(_totalSupply > 0, \\\"Cannot increase 0 supply\\\");\\n\\n if (_totalSupply == _newTotalSupply) {\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n return;\\n }\\n\\n _totalSupply = _newTotalSupply > MAX_SUPPLY\\n ? MAX_SUPPLY\\n : _newTotalSupply;\\n\\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\\n _totalSupply.sub(nonRebasingSupply)\\n );\\n\\n require(_rebasingCreditsPerToken > 0, \\\"Invalid change in supply\\\");\\n\\n _totalSupply = _rebasingCredits\\n .divPrecisely(_rebasingCreditsPerToken)\\n .add(nonRebasingSupply);\\n\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n }\\n}\\n\",\"keccak256\":\"0x2dc66b1ba02716d64eb47dd9117fda62650d8b57669e6c351437e0ad29ad5f19\",\"license\":\"MIT\"},\"contracts/utils/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IBasicToken } from \\\"../interfaces/IBasicToken.sol\\\";\\n\\nlibrary Helpers {\\n /**\\n * @notice Fetch the `symbol()` from an ERC20 token\\n * @dev Grabs the `symbol()` from a contract\\n * @param _token Address of the ERC20 token\\n * @return string Symbol of the ERC20 token\\n */\\n function getSymbol(address _token) internal view returns (string memory) {\\n string memory symbol = IBasicToken(_token).symbol();\\n return symbol;\\n }\\n\\n /**\\n * @notice Fetch the `decimals()` from an ERC20 token\\n * @dev Grabs the `decimals()` from a contract and fails if\\n * the decimal value does not live within a certain range\\n * @param _token Address of the ERC20 token\\n * @return uint256 Decimals of the ERC20 token\\n */\\n function getDecimals(address _token) internal view returns (uint256) {\\n uint256 decimals = IBasicToken(_token).decimals();\\n require(\\n decimals >= 4 && decimals <= 18,\\n \\\"Token must have sufficient decimal places\\\"\\n );\\n\\n return decimals;\\n }\\n}\\n\",\"keccak256\":\"0x108b7a69e0140da0072ca18f90a03a3340574400f81aa6076cd2cccdf13699c2\",\"license\":\"MIT\"},\"contracts/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract any contracts that need to initialize state after deployment.\\n * @author Origin Protocol Inc\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(\\n initializing || !initialized,\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n\\n bool isTopLevelCall = !initializing;\\n if (isTopLevelCall) {\\n initializing = true;\\n initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n initializing = false;\\n }\\n }\\n\\n uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0xaadbcc138114afed4af4f353c2ced2916e6ee14be91434789187f192caf0d786\",\"license\":\"MIT\"},\"contracts/utils/InitializableAbstractStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract for vault strategies.\\n * @author Origin Protocol Inc\\n */\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { IVault } from \\\"../interfaces/IVault.sol\\\";\\n\\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event PTokenAdded(address indexed _asset, address _pToken);\\n event PTokenRemoved(address indexed _asset, address _pToken);\\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\\n event RewardTokenCollected(\\n address recipient,\\n address rewardToken,\\n uint256 amount\\n );\\n event RewardTokenAddressesUpdated(\\n address[] _oldAddresses,\\n address[] _newAddresses\\n );\\n event HarvesterAddressesUpdated(\\n address _oldHarvesterAddress,\\n address _newHarvesterAddress\\n );\\n\\n /// @notice Address of the underlying platform\\n address public immutable platformAddress;\\n /// @notice Address of the OToken vault\\n address public immutable vaultAddress;\\n\\n /// @dev Replaced with an immutable variable\\n // slither-disable-next-line constable-states\\n address private _deprecated_platformAddress;\\n\\n /// @dev Replaced with an immutable\\n // slither-disable-next-line constable-states\\n address private _deprecated_vaultAddress;\\n\\n /// @notice asset => pToken (Platform Specific Token Address)\\n mapping(address => address) public assetToPToken;\\n\\n /// @notice Full list of all assets supported by the strategy\\n address[] internal assetsMapped;\\n\\n // Deprecated: Reward token address\\n // slither-disable-next-line constable-states\\n address private _deprecated_rewardTokenAddress;\\n\\n // Deprecated: now resides in Harvester's rewardTokenConfigs\\n // slither-disable-next-line constable-states\\n uint256 private _deprecated_rewardLiquidationThreshold;\\n\\n /// @notice Address of the Harvester contract allowed to collect reward tokens\\n address public harvesterAddress;\\n\\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\\n address[] public rewardTokenAddresses;\\n\\n /* Reserved for future expansion. Used to be 100 storage slots\\n * and has decreased to accommodate:\\n * - harvesterAddress\\n * - rewardTokenAddresses\\n */\\n int256[98] private _reserved;\\n\\n struct BaseStrategyConfig {\\n address platformAddress; // Address of the underlying platform\\n address vaultAddress; // Address of the OToken's Vault\\n }\\n\\n /**\\n * @param _config The platform and OToken vault addresses\\n */\\n constructor(BaseStrategyConfig memory _config) {\\n platformAddress = _config.platformAddress;\\n vaultAddress = _config.vaultAddress;\\n }\\n\\n /**\\n * @dev Internal initialize function, to set up initial internal state\\n * @param _rewardTokenAddresses Address of reward token for platform\\n * @param _assets Addresses of initial supported assets\\n * @param _pTokens Platform Token corresponding addresses\\n */\\n function _initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) internal {\\n rewardTokenAddresses = _rewardTokenAddresses;\\n\\n uint256 assetCount = _assets.length;\\n require(assetCount == _pTokens.length, \\\"Invalid input arrays\\\");\\n for (uint256 i = 0; i < assetCount; ++i) {\\n _setPTokenAddress(_assets[i], _pTokens[i]);\\n }\\n }\\n\\n /**\\n * @notice Collect accumulated reward token and send to Vault.\\n */\\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\\n _collectRewardTokens();\\n }\\n\\n /**\\n * @dev Default implementation that transfers reward tokens to the Harvester\\n * Implementing strategies need to add custom logic to collect the rewards.\\n */\\n function _collectRewardTokens() internal virtual {\\n uint256 rewardTokenCount = rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\\n uint256 balance = rewardToken.balanceOf(address(this));\\n if (balance > 0) {\\n emit RewardTokenCollected(\\n harvesterAddress,\\n address(rewardToken),\\n balance\\n );\\n rewardToken.safeTransfer(harvesterAddress, balance);\\n }\\n }\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault.\\n */\\n modifier onlyVault() {\\n require(msg.sender == vaultAddress, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Harvester.\\n */\\n modifier onlyHarvester() {\\n require(msg.sender == harvesterAddress, \\\"Caller is not the Harvester\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault or Governor.\\n */\\n modifier onlyVaultOrGovernor() {\\n require(\\n msg.sender == vaultAddress || msg.sender == governor(),\\n \\\"Caller is not the Vault or Governor\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\\n */\\n modifier onlyVaultOrGovernorOrStrategist() {\\n require(\\n msg.sender == vaultAddress ||\\n msg.sender == governor() ||\\n msg.sender == IVault(vaultAddress).strategistAddr(),\\n \\\"Caller is not the Vault, Governor, or Strategist\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\\n * @param _rewardTokenAddresses Array of reward token addresses\\n */\\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\\n external\\n onlyGovernor\\n {\\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n require(\\n _rewardTokenAddresses[i] != address(0),\\n \\\"Can not set an empty address as a reward token\\\"\\n );\\n }\\n\\n emit RewardTokenAddressesUpdated(\\n rewardTokenAddresses,\\n _rewardTokenAddresses\\n );\\n rewardTokenAddresses = _rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Get the reward token addresses.\\n * @return address[] the reward token addresses.\\n */\\n function getRewardTokenAddresses()\\n external\\n view\\n returns (address[] memory)\\n {\\n return rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * This method can only be called by the system Governor\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function setPTokenAddress(address _asset, address _pToken)\\n external\\n virtual\\n onlyGovernor\\n {\\n _setPTokenAddress(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Remove a supported asset by passing its index.\\n * This method can only be called by the system Governor\\n * @param _assetIndex Index of the asset to be removed\\n */\\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\\n require(_assetIndex < assetsMapped.length, \\\"Invalid index\\\");\\n address asset = assetsMapped[_assetIndex];\\n address pToken = assetToPToken[asset];\\n\\n if (_assetIndex < assetsMapped.length - 1) {\\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\\n }\\n assetsMapped.pop();\\n assetToPToken[asset] = address(0);\\n\\n emit PTokenRemoved(asset, pToken);\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * Add to internal mappings and execute the platform specific,\\n * abstract method `_abstractSetPToken`\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function _setPTokenAddress(address _asset, address _pToken) internal {\\n require(assetToPToken[_asset] == address(0), \\\"pToken already set\\\");\\n require(\\n _asset != address(0) && _pToken != address(0),\\n \\\"Invalid addresses\\\"\\n );\\n\\n assetToPToken[_asset] = _pToken;\\n assetsMapped.push(_asset);\\n\\n emit PTokenAdded(_asset, _pToken);\\n\\n _abstractSetPToken(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\\n * strategy contracts, i.e. mistaken sends.\\n * @param _asset Address for the asset\\n * @param _amount Amount of the asset to transfer\\n */\\n function transferToken(address _asset, uint256 _amount)\\n public\\n onlyGovernor\\n {\\n require(!supportsAsset(_asset), \\\"Cannot transfer supported asset\\\");\\n IERC20(_asset).safeTransfer(governor(), _amount);\\n }\\n\\n /**\\n * @notice Set the Harvester contract that can collect rewards.\\n * @param _harvesterAddress Address of the harvester contract.\\n */\\n function setHarvesterAddress(address _harvesterAddress)\\n external\\n onlyGovernor\\n {\\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\\n harvesterAddress = _harvesterAddress;\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address _pToken)\\n internal\\n virtual;\\n\\n function safeApproveAllTokens() external virtual;\\n\\n /**\\n * @notice Deposit an amount of assets into the platform\\n * @param _asset Address for the asset\\n * @param _amount Units of asset to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external virtual;\\n\\n /**\\n * @notice Deposit all supported assets in this strategy contract to the platform\\n */\\n function depositAll() external virtual;\\n\\n /**\\n * @notice Withdraw an `amount` of assets from the platform and\\n * send to the `_recipient`.\\n * @param _recipient Address to which the asset should be sent\\n * @param _asset Address of the asset\\n * @param _amount Units of asset to withdraw\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external virtual;\\n\\n /**\\n * @notice Withdraw all supported assets from platform and\\n * sends to the OToken's Vault.\\n */\\n function withdrawAll() external virtual;\\n\\n /**\\n * @notice Get the total asset value held in the platform.\\n * This includes any interest that was generated since depositing.\\n * @param _asset Address of the asset\\n * @return balance Total value of the asset in the platform\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n virtual\\n returns (uint256 balance);\\n\\n /**\\n * @notice Check if an asset is supported.\\n * @param _asset Address of the asset\\n * @return bool Whether asset is supported\\n */\\n function supportsAsset(address _asset) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x5e17bb3db9f9e1014b7c5c836547f8fa81e02af7568c0bb8f2a2e0e7c2192db4\",\"license\":\"MIT\"},\"contracts/utils/InitializableERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/**\\n * @dev Optional functions from the ERC20 standard.\\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\\n * @author Origin Protocol Inc\\n */\\nabstract contract InitializableERC20Detailed is IERC20 {\\n // Storage gap to skip storage from prior to OUSD reset\\n uint256[100] private _____gap;\\n\\n string private _name;\\n string private _symbol;\\n uint8 private _decimals;\\n\\n /**\\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\\n * these values are immutable: they can only be set once during\\n * construction.\\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\\n */\\n function _initialize(\\n string memory nameArg,\\n string memory symbolArg,\\n uint8 decimalsArg\\n ) internal {\\n _name = nameArg;\\n _symbol = symbolArg;\\n _decimals = decimalsArg;\\n }\\n\\n /**\\n * @notice Returns the name of the token.\\n */\\n function name() public view returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @notice Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @notice Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view returns (uint8) {\\n return _decimals;\\n }\\n}\\n\",\"keccak256\":\"0xe35ac2d813a30d845a3b52bba72588d7e936c2b3f3373d15568c14db46aeed60\",\"license\":\"MIT\"},\"contracts/utils/StableMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n// Based on StableMath from Stability Labs Pty. Ltd.\\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\\n\\nlibrary StableMath {\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Scaling unit for use in specific calculations,\\n * where 1 * 10**18, or 1e18 represents a unit '1'\\n */\\n uint256 private constant FULL_SCALE = 1e18;\\n\\n /***************************************\\n Helpers\\n ****************************************/\\n\\n /**\\n * @dev Adjust the scale of an integer\\n * @param to Decimals to scale to\\n * @param from Decimals to scale from\\n */\\n function scaleBy(\\n uint256 x,\\n uint256 to,\\n uint256 from\\n ) internal pure returns (uint256) {\\n if (to > from) {\\n x = x.mul(10**(to - from));\\n } else if (to < from) {\\n // slither-disable-next-line divide-before-multiply\\n x = x.div(10**(from - to));\\n }\\n return x;\\n }\\n\\n /***************************************\\n Precise Arithmetic\\n ****************************************/\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\\n return mulTruncateScale(x, y, FULL_SCALE);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @param scale Scale unit\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncateScale(\\n uint256 x,\\n uint256 y,\\n uint256 scale\\n ) internal pure returns (uint256) {\\n // e.g. assume scale = fullScale\\n // z = 10e18 * 9e17 = 9e36\\n uint256 z = x.mul(y);\\n // return 9e36 / 1e18 = 9e18\\n return z.div(scale);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit, rounded up to the closest base unit.\\n */\\n function mulTruncateCeil(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e17 * 17268172638 = 138145381104e17\\n uint256 scaled = x.mul(y);\\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\\n return ceil.div(FULL_SCALE);\\n }\\n\\n /**\\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\\n * @param x Left hand input to division\\n * @param y Right hand input to division\\n * @return Result after multiplying the left operand by the scale, and\\n * executing the division on the right hand input.\\n */\\n function divPrecisely(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e18 * 1e18 = 8e36\\n uint256 z = x.mul(FULL_SCALE);\\n // e.g. 8e36 / 10e18 = 8e17\\n return z.div(y);\\n }\\n}\\n\",\"keccak256\":\"0x1eb49f6f79045d9e0a8e1dced8e01d9e559e5fac554dcbb53e43140b601b04e7\",\"license\":\"MIT\"},\"contracts/vault/VaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OToken VaultStorage contract\\n * @notice The VaultStorage contract defines the storage for the Vault contracts\\n * @author Origin Protocol Inc\\n */\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { IStrategy } from \\\"../interfaces/IStrategy.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { OUSD } from \\\"../token/OUSD.sol\\\";\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport \\\"../utils/Helpers.sol\\\";\\n\\ncontract VaultStorage is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event AssetSupported(address _asset);\\n event AssetRemoved(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Assets supported by the Vault, i.e. Stablecoins\\n enum UnitConversion {\\n DECIMALS,\\n GETEXCHANGERATE\\n }\\n // Changed to fit into a single storage slot so the decimals needs to be recached\\n struct Asset {\\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\\n // redeeming or checking balance of assets.\\n bool isSupported;\\n UnitConversion unitConversion;\\n uint8 decimals;\\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\\n // For example 40 == 0.4% slippage\\n uint16 allowedOracleSlippageBps;\\n }\\n\\n /// @dev mapping of supported vault assets to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Asset) internal assets;\\n /// @dev list of all assets supported by the vault.\\n // slither-disable-next-line uninitialized-state\\n address[] internal allAssets;\\n\\n // Strategies approved for use by the Vault\\n struct Strategy {\\n bool isSupported;\\n uint256 _deprecated; // Deprecated storage slot\\n }\\n /// @dev mapping of strategy contracts to their configiration\\n mapping(address => Strategy) internal strategies;\\n /// @dev list of all vault strategies\\n address[] internal allStrategies;\\n\\n /// @notice Address of the Oracle price provider contract\\n // slither-disable-next-line uninitialized-state\\n address public priceProvider;\\n /// @notice pause rebasing if true\\n bool public rebasePaused = false;\\n /// @notice pause operations that change the OToken supply.\\n /// eg mint, redeem, allocate, mint/burn for strategy\\n bool public capitalPaused = true;\\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\\n uint256 public redeemFeeBps;\\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\\n uint256 public vaultBuffer;\\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\\n uint256 public autoAllocateThreshold;\\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\\n uint256 public rebaseThreshold;\\n\\n /// @dev Address of the OToken token. eg OUSD or OETH.\\n // slither-disable-next-line uninitialized-state\\n OUSD internal oUSD;\\n\\n //keccak256(\\\"OUSD.vault.governor.admin.impl\\\");\\n bytes32 constant adminImplPosition =\\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\\n\\n // Address of the contract responsible for post rebase syncs with AMMs\\n address private _deprecated_rebaseHooksAddr = address(0);\\n\\n // Deprecated: Address of Uniswap\\n // slither-disable-next-line constable-states\\n address private _deprecated_uniswapAddr = address(0);\\n\\n /// @notice Address of the Strategist\\n address public strategistAddr = address(0);\\n\\n /// @notice Mapping of asset address to the Strategy that they should automatically\\n // be allocated to\\n // slither-disable-next-line uninitialized-state\\n mapping(address => address) public assetDefaultStrategies;\\n\\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\\n // slither-disable-next-line uninitialized-state\\n uint256 public maxSupplyDiff;\\n\\n /// @notice Trustee contract that can collect a percentage of yield\\n address public trusteeAddress;\\n\\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\\n uint256 public trusteeFeeBps;\\n\\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\\n address[] private _deprecated_swapTokens;\\n\\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\\n\\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\\n address public ousdMetaStrategy = address(0);\\n\\n /// @notice How much OTokens are currently minted by the strategy\\n int256 public netOusdMintedForStrategy = 0;\\n\\n /// @notice How much net total OTokens are allowed to be minted by all strategies\\n uint256 public netOusdMintForStrategyThreshold = 0;\\n\\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\\n\\n /// @notice Collateral swap configuration.\\n /// @dev is packed into a single storage slot to save gas.\\n struct SwapConfig {\\n // Contract that swaps the vault's collateral assets\\n address swapper;\\n // Max allowed percentage the total value can drop below the total supply in basis points.\\n // For example 100 == 1%\\n uint16 allowedUndervalueBps;\\n }\\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\\n\\n // For future use\\n uint256[50] private __gap;\\n\\n /**\\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\\n * @param newImpl address of the implementation\\n */\\n function setAdminImpl(address newImpl) external onlyGovernor {\\n require(\\n Address.isContract(newImpl),\\n \\\"new implementation is not a contract\\\"\\n );\\n bytes32 position = adminImplPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newImpl)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcbdb87104749e20c8411bc2acbfa0b7d48e876e3f4e1c46c9a7b00fcdb9722d9\",\"license\":\"MIT\"}},\"version\":1}", - "bytecode": "0x6101a06040523480156200001257600080fd5b506040516200533738038062005337833981016040819052620000359162000144565b86868860200151838787848484848462000055336200011460201b60201c565b60008051602062005317833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36033805460ff191690556001600160601b0319606095861b811660805292851b831660a05290841b821660c05291831b811660e052610100919091528751821b811661012052602090970151811b8716610140529a8b1b86166101605250505050509190941b1661018052506200022b9350505050565b6000805160206200531783398151915255565b80516001600160a01b03811681146200013f57600080fd5b919050565b60008060008060008060008789036101008112156200016257600080fd5b60408112156200017157600080fd5b50604080519081016001600160401b0381118282101715620001a357634e487b7160e01b600052604160045260246000fd5b604052620001b18962000127565b8152620001c160208a0162000127565b60208201529650620001d66040890162000127565b9550620001e66060890162000127565b9450620001f66080890162000127565b935060a088015192506200020d60c0890162000127565b91506200021d60e0890162000127565b905092959891949750929550565b60805160601c60a05160601c60c05160601c60e05160601c610100516101205160601c6101405160601c6101605160601c6101805160601c614f2f620003e86000396000818161039501528181610b6701526133b801526000818161048501526127e501526000818161057301528181610f4701528181611bef01528181611d6801528181612ba50152612e4001526000610b3301526000818161071701526114e101526000818161084601528181610d0f01528181611b1d01528181611db801528181612163015281816139a80152613c0201526000818161089a01528181610de501528181611a20015281816127b50152818161295e0152612d67015260008181610a8801526117560152600081816103c70152818161096b015281816109e201528181610c7601528181610fbc015281816111df0152818161124301528181611417015281816115df01528181611cd901528181611d89015281816120dd0152818161219201528181612c1a01528181612ecb01528181612f73015281816134bd0152818161353e015281816135800152818161385001528181613922015281816139d701528181613b7c0152613c310152614f2f6000f3fe6080604052600436106103855760003560e01c806387bae867116101d1578063bb1b918d11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063bb1b918d14610a21578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b8063a3b81e731161016f578063ab12edf511610149578063ab12edf51461099b578063ad1728cb146109bb578063ad5c4648146109d0578063b16b7d0b14610a0457600080fd5b8063a3b81e7314610919578063a4f98af414610939578063aa388af61461094e57600080fd5b80639136616a116101ab5780639136616a14610868578063916497511461088857806396d538bb146108bc5780639da0e462146108dc57600080fd5b806387bae867146107ef5780638d7c0e46146108145780639092c31c1461083457600080fd5b80635d36b190116102b6578063714897df116102545780637b8962f7116102235780637b8962f714610799578063842f5c46146107af5780638456cb59146107c5578063853828b6146107da57600080fd5b8063714897df1461070557806371a735f3146107395780637260f826146107595780637b2d9b2c1461077957600080fd5b806366e3667e1161029057806366e3667e1461068f57806367c7066c146106a55780636e811d38146106c55780636ef38795146106e557600080fd5b80635d36b190146106445780635f51522614610659578063630923831461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb5780635a063f631461060b5780635c975abb1461062057600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c236600461428d565b610c1e565b3480156104d357600080fd5b506104566104e2366004614253565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a610518366004614307565b610c50565b34801561052957600080fd5b5061043a6105383660046143fb565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614374565b610e57565b3480156105c157600080fd5b5061043a6105d0366004614307565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a6106063660046144d1565b611037565b34801561061757600080fd5b5061043a611096565b34801561062c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561065057600080fd5b5061043a611135565b34801561066557600080fd5b50610553610674366004614253565b6111db565b34801561068557600080fd5b50610553611c2081565b34801561069b57600080fd5b5061055360345481565b3480156106b157600080fd5b5060a354610456906001600160a01b031681565b3480156106d157600080fd5b5061043a6106e0366004614253565b6112ec565b3480156106f157600080fd5b5061043a610700366004614333565b611362565b34801561071157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561074557600080fd5b5061043a610754366004614609565b61192c565b34801561076557600080fd5b50603654610456906001600160a01b031681565b34801561078557600080fd5b506104566107943660046144d1565b611af1565b3480156107a557600080fd5b5061055360375481565b3480156107bb57600080fd5b5061055360685481565b3480156107d157600080fd5b5061043a611b1b565b3480156107e657600080fd5b5061043a611be4565b3480156107fb57600080fd5b506033546104569061010090046001600160a01b031681565b34801561082057600080fd5b5061043a61082f36600461468a565b611db6565b34801561084057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561087457600080fd5b5061043a6108833660046144d1565b6122b8565b34801561089457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c857600080fd5b5061043a6108d7366004614333565b612484565b3480156108e857600080fd5b5061090c6108f73660046144d1565b60356020526000908152604090205460ff1681565b60405161046a9190614aed565b34801561092557600080fd5b5061043a610934366004614253565b6125a4565b34801561094557600080fd5b50610634612612565b34801561095a57600080fd5b50610634610969366004614253565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109a757600080fd5b5061043a6109b63660046146cf565b6126b2565b3480156109c757600080fd5b5061043a61279e565b3480156109dc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1057600080fd5b506105536801bc16d674ec80000081565b348015610a2d57600080fd5b5061043a610a3c366004614555565b612864565b348015610a4d57600080fd5b5061043a610a5c366004614253565b612a38565b348015610a6d57600080fd5b50610634612ac5565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614253565b612af6565b348015610aed57600080fd5b5061043a610afc3660046142c6565b612b9a565b348015610b0d57600080fd5b5061043a610b1c3660046144ea565b612c74565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612e35565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a612fa2565b348015610beb57600080fd5b50610bf461302c565b60405161046a91906148cb565b6000610c19600080516020614eda8339815191525490565b905090565b610c26612ac5565b610c425760405162461bcd60e51b815260040161043190614b5f565b610c4c828261308e565b5050565b610c58612ac5565b610c745760405162461bcd60e51b815260040161043190614b5f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b03841690836131ed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190614270565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614c4a565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e2090309087908790879060040161481b565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612ac5565b610e7b5760405162461bcd60e51b815260040161043190614b5f565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613244565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614b28565b600080516020614eba83398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614c22565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614b96565b82610107600082825461101e9190614d71565b9091555061102e905084846132ff565b50600190555050565b61103f612ac5565b61105b5760405162461bcd60e51b815260040161043190614b5f565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60a3546001600160a01b031633146110f05760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614eba833981519152805460028114156111225760405162461bcd60e51b815260040161043190614c22565b6002825561112e613391565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146111d05760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b6111d9336135d6565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461122e5760405162461bcd60e51b815260040161043190614b96565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561128d57600080fd5b505afa1580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c591906146b6565b6801bc16d674ec8000006034546112dc9190614dab565b6112e69190614d71565b92915050565b6112f4612ac5565b6113105760405162461bcd60e51b815260040161043190614b5f565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146113915760405162461bcd60e51b815260040161043190614beb565b60335460ff16156113b45760405162461bcd60e51b815260040161043190614bc1565b600080516020614eba833981519152805460028114156113e65760405162461bcd60e51b815260040161043190614c22565b6002825560006113ff6801bc16d674ec80000085614dab565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149991906146b6565b8111156114dc5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f00000000000000000000000000000000000000000000000000000000000000009061150c908690614d71565b11156115535760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546115649190614d71565b11156115b25760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546115c49190614d71565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561162b57600080fd5b505af115801561163f573d6000803e3d6000fd5b5050505061164c81613697565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b858110156119055760008787838181106116ad576116ad614e6a565b90506020028101906116bf9190614cc7565b6116c99080614c81565b6040516116d79291906147ef565b6040519081900390209050600160008281526035602052604090205460ff16600481111561170757611707614e3e565b146117545760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a8681811061179f5761179f614e6a565b90506020028101906117b19190614cc7565b6117bb9080614c81565b878d8d898181106117ce576117ce614e6a565b90506020028101906117e09190614cc7565b6117ee906020810190614c81565b8f8f8b81811061180057611800614e6a565b90506020028101906118129190614cc7565b604001356040518863ffffffff1660e01b815260040161183796959493929190614a7a565b6000604051808303818588803b15801561185057600080fd5b505af1158015611864573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f8989858181106118b7576118b7614e6a565b90506020028101906118c99190614cc7565b6118d39080614c81565b6801bc16d674ec8000006040516118ec93929190614ac9565b60405180910390a2506118fe81614e0d565b9050611691565b50858590506034600082825461191b9190614d71565b909155505060019093555050505050565b60335461010090046001600160a01b0316331461195b5760405162461bcd60e51b815260040161043190614beb565b60335460ff161561197e5760405162461bcd60e51b815260040161043190614bc1565b600085856040516119909291906147ef565b604080519182900390912060008181526035602052919091205490915060ff1660038160048111156119c4576119c4614e3e565b14611a095760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611a5d908a908a908a908a908a90600401614a39565b600060405180830381600087803b158015611a7757600080fd5b505af1158015611a8b573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611ae0908a908a908a908a906149b0565b60405180910390a250505050505050565b60a48181548110611b0157600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7457600080fd5b505afa158015611b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bac9190614270565b6001600160a01b0316336001600160a01b031614611bdc5760405162461bcd60e51b815260040161043190614c4a565b6111d96136c4565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611c335750611c1e610c01565b6001600160a01b0316336001600160a01b0316145b611c8b5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614eba83398151915280546002811415611cbd5760405162461bcd60e51b815260040161043190614c22565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611d2357600080fd5b505afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b91906146b6565b90508015611dae57611dae7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083613739565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e0f57600080fd5b505afa158015611e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e479190614270565b6001600160a01b0316336001600160a01b031614611e775760405162461bcd60e51b815260040161043190614c4a565b60335460ff16611ec05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b600080516020614eba83398151915280546002811415611ef25760405162461bcd60e51b815260040161043190614c22565b6002825543611c20606b54611f079190614d71565b10611f545760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b6002198512158015611f67575060038513155b8015611f815750600085603454611f7e9190614d30565b12155b611fcd5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff198412158015611ff057506811ff6cf0fd15b000008413155b801561200a57506000846068546120079190614d30565b12155b6120565760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008311156120af5760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b846034546120bd9190614d30565b6034556068546120ce908590614d30565b60685543606b55821561221c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561213657600080fd5b505af115801561214a573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b1580156121da57600080fd5b505af11580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221291906144b4565b5061221c83613837565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a1612267600061389f565b6122a65760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b6122ae613d25565b5060019055505050565b6122c0612ac5565b6122dc5760405162461bcd60e51b815260040161043190614b5f565b60a054811061231d5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a0828154811061233257612332614e6a565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061236f90600190614dca565b8310156123f15760a0805461238690600190614dca565b8154811061239657612396614e6a565b60009182526020909120015460a080546001600160a01b0390921691859081106123c2576123c2614e6a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a080548061240257612402614e54565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61248c612ac5565b6124a85760405162461bcd60e51b815260040161043190614b5f565b8060005b8181101561255b5760008484838181106124c8576124c8614e6a565b90506020020160208101906124dd9190614253565b6001600160a01b0316141561254b5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b61255481614e0d565b90506124ac565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161259093929190614918565b60405180910390a1610f3660a48484613fac565b6125ac612ac5565b6125c85760405162461bcd60e51b815260040161043190614b5f565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146126445760405162461bcd60e51b815260040161043190614beb565b60335460ff16156126675760405162461bcd60e51b815260040161043190614bc1565b600080516020614eba833981519152805460028114156126995760405162461bcd60e51b815260040161043190614c22565b600282556126a7600161389f565b925060018255505090565b6126ba612ac5565b6126d65760405162461bcd60e51b815260040161043190614b5f565b80821080156126ed57506801bc16d674ec80000081105b801561270a5750673782dace9d9000006127078383614dca565b10155b6127565760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286191906144b4565b50565b60335461010090046001600160a01b031633146128935760405162461bcd60e51b815260040161043190614beb565b60335460ff16156128b65760405162461bcd60e51b815260040161043190614bc1565b600088886040516128c89291906147ef565b6040805191829003909120600081815260356020529182205490925060ff16908160048111156128fa576128fa614e3e565b146129475760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6040516301ba3ee760e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906306e8fb9c906129a1908d908d908d908d908d908d908d908d906004016149d7565b600060405180830381600087803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166001179055518391507facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea042390612a24908d908d908d908d906149b0565b60405180910390a250505050505050505050565b612a40612ac5565b612a5c5760405162461bcd60e51b815260040161043190614b5f565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612add600080516020614eda8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612afe612ac5565b612b1a5760405162461bcd60e51b815260040161043190614b5f565b612b42817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612b62600080516020614eda8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612be25760405162461bcd60e51b815260040161043190614b28565b600080516020614eba83398151915280546002811415612c145760405162461bcd60e51b815260040161043190614c22565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612c695760405162461bcd60e51b815260040161043190614b96565b6122ae858585613739565b60335461010090046001600160a01b03163314612ca35760405162461bcd60e51b815260040161043190614beb565b60335460ff1615612cc65760405162461bcd60e51b815260040161043190614bc1565b60008484604051612cd89291906147ef565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612d0c57612d0c614e3e565b14612d505760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612da29089908990899089906004016149b0565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612e259089908990899089906149b0565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612e7d5760405162461bcd60e51b815260040161043190614b28565b600080516020614eba83398151915280546002811415612eaf5760405162461bcd60e51b815260040161043190614c22565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4d91906146b6565b905060006101075482612f609190614dca565b90508015612f9857610107829055612f987f0000000000000000000000000000000000000000000000000000000000000000826132ff565b5050600182555050565b6036546001600160a01b03163314612ffc5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561308457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613066575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156130eb5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b0382161580159061310b57506001600160a01b03811615155b61314b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261323f908490613d9f565b505050565b82516132579060a490602086019061400f565b508151815181146132a15760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156132f8576132e88482815181106132c1576132c1614e6a565b60200260200101518483815181106132db576132db614e6a565b602002602001015161308e565b6132f181614e0d565b90506132a4565b5050505050565b600081116133485760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156133b45760405162461bcd60e51b815260040161043190614bc1565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561341157600080fd5b505af1158015613425573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344991906146b6565b905060006068548261345b9190614d71565b9050804710156134ad5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351657600080fd5b505af115801561352a573d6000803e3d6000fd5b505060a35461356a93506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836131ed565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612792565b6001600160a01b03811661362c5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b031661364c600080516020614eda8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a361286181600080516020614eda83398151915255565b60006136a68261010754613e71565b90508061010760008282546136bb9190614dca565b90915550505050565b60335460ff16156136e75760405162461bcd60e51b815260040161043190614bc1565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861371c3390565b6040516001600160a01b03909116815260200160405180910390a1565b600081116137895760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166137d85760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6137e181613697565b6137f56001600160a01b03831684836131ed565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989101612477565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156138b4576112e682613e89565b6000606854476138c49190614dca565b9050600191506801bc16d674ec8000008110613aa85760006138ef6801bc16d674ec80000083614d89565b905080603460008282546139039190614dca565b909155506000905061391e826801bc16d674ec800000614dab565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397b57600080fd5b505af115801561398f573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5791906144b4565b50613a6181613837565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613ab89190614dca565b90506801bc16d674ec8000008110613b0a5760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613b16575050919050565b606954811015613b70578060686000828254613b329190614d71565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613d1e565b606a54811115613d0d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bd557600080fd5b505af1158015613be9573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613c7957600080fd5b505af1158015613c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb191906144b4565b50600160346000828254613cc59190614dca565b90915550613cd4905081613837565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613b63565b613d1684613e89565b949350505050565b5050919050565b60335460ff16613d6e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361371c565b6000613df4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ea19092919063ffffffff16565b80519091501561323f5780806020019051810190613e1291906144b4565b61323f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613e805781613e82565b825b9392505050565b60008115613e9957613e996136c4565b506000919050565b6060613d16848460008585843b613efa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613f1691906147ff565b60006040518083038185875af1925050503d8060008114613f53576040519150601f19603f3d011682016040523d82523d6000602084013e613f58565b606091505b5091509150613f68828286613f73565b979650505050505050565b60608315613f82575081613e82565b825115613f925782518084602001fd5b8160405162461bcd60e51b81526004016104319190614b15565b828054828255906000526020600020908101928215613fff579160200282015b82811115613fff5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613fcc565b5061400b929150614064565b5090565b828054828255906000526020600020908101928215613fff579160200282015b82811115613fff57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061402f565b5b8082111561400b5760008155600101614065565b60008083601f84011261408b57600080fd5b5081356001600160401b038111156140a257600080fd5b6020830191508360208260051b85010111156140bd57600080fd5b9250929050565b600082601f8301126140d557600080fd5b813560206140ea6140e583614d0d565b614cdd565b80838252828201915082860187848660051b890101111561410a57600080fd5b60005b8581101561413257813561412081614e96565b8452928401929084019060010161410d565b5090979650505050505050565b60008083601f84011261415157600080fd5b5081356001600160401b0381111561416857600080fd5b6020830191508360208285010111156140bd57600080fd5b600060a0828403121561419257600080fd5b50919050565b600060a082840312156141aa57600080fd5b60405160a081018181106001600160401b03821117156141cc576141cc614e80565b6040529050806141db83614223565b81526141e96020840161423c565b60208201526141fa6040840161423c565b6040820152606083013561420d81614eab565b6060820152608092830135920191909152919050565b803563ffffffff8116811461423757600080fd5b919050565b80356001600160401b038116811461423757600080fd5b60006020828403121561426557600080fd5b8135613e8281614e96565b60006020828403121561428257600080fd5b8151613e8281614e96565b600080604083850312156142a057600080fd5b82356142ab81614e96565b915060208301356142bb81614e96565b809150509250929050565b6000806000606084860312156142db57600080fd5b83356142e681614e96565b925060208401356142f681614e96565b929592945050506040919091013590565b6000806040838503121561431a57600080fd5b823561432581614e96565b946020939093013593505050565b6000806020838503121561434657600080fd5b82356001600160401b0381111561435c57600080fd5b61436885828601614079565b90969095509350505050565b60008060006060848603121561438957600080fd5b83356001600160401b03808211156143a057600080fd5b6143ac878388016140c4565b945060208601359150808211156143c257600080fd5b6143ce878388016140c4565b935060408601359150808211156143e457600080fd5b506143f1868287016140c4565b9150509250925092565b600080600060e0848603121561441057600080fd5b83356001600160401b0381111561442657600080fd5b8401601f8101861361443757600080fd5b803560206144476140e583614d0d565b8083825282820191508285018a848660051b880101111561446757600080fd5b600095505b848610156144915761447d8161423c565b83526001959095019491830191830161446c565b5096505086013593506144ab915086905060408601614198565b90509250925092565b6000602082840312156144c657600080fd5b8151613e8281614eab565b6000602082840312156144e357600080fd5b5035919050565b6000806000806040858703121561450057600080fd5b84356001600160401b038082111561451757600080fd5b6145238883890161413f565b9096509450602087013591508082111561453c57600080fd5b5061454987828801614079565b95989497509550505050565b600080600080600080600080610120898b03121561457257600080fd5b88356001600160401b038082111561458957600080fd5b6145958c838d0161413f565b909a50985060208b01359150808211156145ae57600080fd5b6145ba8c838d01614079565b909850965060408b01359150808211156145d357600080fd5b506145e08b828c0161413f565b909550935050606089013591506145fa8a60808b01614180565b90509295985092959890939650565b600080600080600060e0868803121561462157600080fd5b85356001600160401b038082111561463857600080fd5b61464489838a0161413f565b9097509550602088013591508082111561465d57600080fd5b5061466a88828901614079565b909450925061467e90508760408801614180565b90509295509295909350565b60008060006060848603121561469f57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156146c857600080fd5b5051919050565b600080604083850312156146e257600080fd5b50508035926020909101359150565b8183526000602080850194508260005b8581101561472d576001600160401b0361471a8361423c565b1687529582019590820190600101614701565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614779816020860160208601614de1565b601f01601f19169290920160200192915050565b63ffffffff61479b82614223565b1682526147aa6020820161423c565b6001600160401b038082166020850152806147c76040850161423c565b166040850152505060608101356147dd81614eab565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614811818460208701614de1565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b8181101561486e5783516001600160401b031685529382019392820192600101614849565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561490c5783516001600160a01b0316835292840192918401916001016148e7565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b828110156149625781546001600160a01b03168452928401926001918201910161493d565b505050838103828501528481528590820160005b868110156149a457823561498981614e96565b6001600160a01b031682529183019190830190600101614976565b50979650505050505050565b6040815260006149c4604083018688614738565b8281036020840152613f688185876146f1565b60006101208083526149ec8184018b8d614738565b90508281036020840152614a0181898b6146f1565b90508281036040840152614a16818789614738565b915050836060830152614a2c608083018461478d565b9998505050505050505050565b60e081526000614a4d60e083018789614738565b8281036020840152614a608186886146f1565b915050614a70604083018461478d565b9695505050505050565b608081526000614a8e60808301888a614738565b8281036020840152614aa08188614761565b90508281036040840152614ab5818688614738565b915050826060830152979650505050505050565b604081526000614add604083018587614738565b9050826020830152949350505050565b6020810160058310614b0f57634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613e826020830184614761565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614c9857600080fd5b8301803591506001600160401b03821115614cb257600080fd5b6020019150368190038213156140bd57600080fd5b60008235605e1983360301811261481157600080fd5b604051601f8201601f191681016001600160401b0381118282101715614d0557614d05614e80565b604052919050565b60006001600160401b03821115614d2657614d26614e80565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614d5257614d52614e28565b600160ff1b8390038412811615614d6b57614d6b614e28565b50500190565b60008219821115614d8457614d84614e28565b500190565b600082614da657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614dc557614dc5614e28565b500290565b600082821015614ddc57614ddc614e28565b500390565b60005b83811015614dfc578181015183820152602001614de4565b83811115610f365750506000910152565b6000600019821415614e2157614e21614e28565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461286157600080fd5b801515811461286157600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa2646970667358221220d36a99c34f8ae7ea8248bf64125462568e5549d9c3b20d6d99212d104dd407eb64736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", - "deployedBytecode": "0x6080604052600436106103855760003560e01c806387bae867116101d1578063bb1b918d11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063bb1b918d14610a21578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b8063a3b81e731161016f578063ab12edf511610149578063ab12edf51461099b578063ad1728cb146109bb578063ad5c4648146109d0578063b16b7d0b14610a0457600080fd5b8063a3b81e7314610919578063a4f98af414610939578063aa388af61461094e57600080fd5b80639136616a116101ab5780639136616a14610868578063916497511461088857806396d538bb146108bc5780639da0e462146108dc57600080fd5b806387bae867146107ef5780638d7c0e46146108145780639092c31c1461083457600080fd5b80635d36b190116102b6578063714897df116102545780637b8962f7116102235780637b8962f714610799578063842f5c46146107af5780638456cb59146107c5578063853828b6146107da57600080fd5b8063714897df1461070557806371a735f3146107395780637260f826146107595780637b2d9b2c1461077957600080fd5b806366e3667e1161029057806366e3667e1461068f57806367c7066c146106a55780636e811d38146106c55780636ef38795146106e557600080fd5b80635d36b190146106445780635f51522614610659578063630923831461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb5780635a063f631461060b5780635c975abb1461062057600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c236600461428d565b610c1e565b3480156104d357600080fd5b506104566104e2366004614253565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a610518366004614307565b610c50565b34801561052957600080fd5b5061043a6105383660046143fb565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614374565b610e57565b3480156105c157600080fd5b5061043a6105d0366004614307565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a6106063660046144d1565b611037565b34801561061757600080fd5b5061043a611096565b34801561062c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561065057600080fd5b5061043a611135565b34801561066557600080fd5b50610553610674366004614253565b6111db565b34801561068557600080fd5b50610553611c2081565b34801561069b57600080fd5b5061055360345481565b3480156106b157600080fd5b5060a354610456906001600160a01b031681565b3480156106d157600080fd5b5061043a6106e0366004614253565b6112ec565b3480156106f157600080fd5b5061043a610700366004614333565b611362565b34801561071157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561074557600080fd5b5061043a610754366004614609565b61192c565b34801561076557600080fd5b50603654610456906001600160a01b031681565b34801561078557600080fd5b506104566107943660046144d1565b611af1565b3480156107a557600080fd5b5061055360375481565b3480156107bb57600080fd5b5061055360685481565b3480156107d157600080fd5b5061043a611b1b565b3480156107e657600080fd5b5061043a611be4565b3480156107fb57600080fd5b506033546104569061010090046001600160a01b031681565b34801561082057600080fd5b5061043a61082f36600461468a565b611db6565b34801561084057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561087457600080fd5b5061043a6108833660046144d1565b6122b8565b34801561089457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108c857600080fd5b5061043a6108d7366004614333565b612484565b3480156108e857600080fd5b5061090c6108f73660046144d1565b60356020526000908152604090205460ff1681565b60405161046a9190614aed565b34801561092557600080fd5b5061043a610934366004614253565b6125a4565b34801561094557600080fd5b50610634612612565b34801561095a57600080fd5b50610634610969366004614253565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109a757600080fd5b5061043a6109b63660046146cf565b6126b2565b3480156109c757600080fd5b5061043a61279e565b3480156109dc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a1057600080fd5b506105536801bc16d674ec80000081565b348015610a2d57600080fd5b5061043a610a3c366004614555565b612864565b348015610a4d57600080fd5b5061043a610a5c366004614253565b612a38565b348015610a6d57600080fd5b50610634612ac5565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614253565b612af6565b348015610aed57600080fd5b5061043a610afc3660046142c6565b612b9a565b348015610b0d57600080fd5b5061043a610b1c3660046144ea565b612c74565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612e35565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a612fa2565b348015610beb57600080fd5b50610bf461302c565b60405161046a91906148cb565b6000610c19600080516020614eda8339815191525490565b905090565b610c26612ac5565b610c425760405162461bcd60e51b815260040161043190614b5f565b610c4c828261308e565b5050565b610c58612ac5565b610c745760405162461bcd60e51b815260040161043190614b5f565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b03841690836131ed565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e9190614270565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614c4a565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e2090309087908790879060040161481b565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612ac5565b610e7b5760405162461bcd60e51b815260040161043190614b5f565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f24848484613244565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614b28565b600080516020614eba83398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614c22565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614b96565b82610107600082825461101e9190614d71565b9091555061102e905084846132ff565b50600190555050565b61103f612ac5565b61105b5760405162461bcd60e51b815260040161043190614b5f565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60a3546001600160a01b031633146110f05760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614eba833981519152805460028114156111225760405162461bcd60e51b815260040161043190614c22565b6002825561112e613391565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146111d05760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b6111d9336135d6565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161461122e5760405162461bcd60e51b815260040161043190614b96565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561128d57600080fd5b505afa1580156112a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112c591906146b6565b6801bc16d674ec8000006034546112dc9190614dab565b6112e69190614d71565b92915050565b6112f4612ac5565b6113105760405162461bcd60e51b815260040161043190614b5f565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146113915760405162461bcd60e51b815260040161043190614beb565b60335460ff16156113b45760405162461bcd60e51b815260040161043190614bc1565b600080516020614eba833981519152805460028114156113e65760405162461bcd60e51b815260040161043190614c22565b6002825560006113ff6801bc16d674ec80000085614dab565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561146157600080fd5b505afa158015611475573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149991906146b6565b8111156114dc5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f00000000000000000000000000000000000000000000000000000000000000009061150c908690614d71565b11156115535760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546115649190614d71565b11156115b25760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546115c49190614d71565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b15801561162b57600080fd5b505af115801561163f573d6000803e3d6000fd5b5050505061164c81613697565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b858110156119055760008787838181106116ad576116ad614e6a565b90506020028101906116bf9190614cc7565b6116c99080614c81565b6040516116d79291906147ef565b6040519081900390209050600160008281526035602052604090205460ff16600481111561170757611707614e3e565b146117545760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a8681811061179f5761179f614e6a565b90506020028101906117b19190614cc7565b6117bb9080614c81565b878d8d898181106117ce576117ce614e6a565b90506020028101906117e09190614cc7565b6117ee906020810190614c81565b8f8f8b81811061180057611800614e6a565b90506020028101906118129190614cc7565b604001356040518863ffffffff1660e01b815260040161183796959493929190614a7a565b6000604051808303818588803b15801561185057600080fd5b505af1158015611864573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f8989858181106118b7576118b7614e6a565b90506020028101906118c99190614cc7565b6118d39080614c81565b6801bc16d674ec8000006040516118ec93929190614ac9565b60405180910390a2506118fe81614e0d565b9050611691565b50858590506034600082825461191b9190614d71565b909155505060019093555050505050565b60335461010090046001600160a01b0316331461195b5760405162461bcd60e51b815260040161043190614beb565b60335460ff161561197e5760405162461bcd60e51b815260040161043190614bc1565b600085856040516119909291906147ef565b604080519182900390912060008181526035602052919091205490915060ff1660038160048111156119c4576119c4614e3e565b14611a095760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611a5d908a908a908a908a908a90600401614a39565b600060405180830381600087803b158015611a7757600080fd5b505af1158015611a8b573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611ae0908a908a908a908a906149b0565b60405180910390a250505050505050565b60a48181548110611b0157600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611b7457600080fd5b505afa158015611b88573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bac9190614270565b6001600160a01b0316336001600160a01b031614611bdc5760405162461bcd60e51b815260040161043190614c4a565b6111d96136c4565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611c335750611c1e610c01565b6001600160a01b0316336001600160a01b0316145b611c8b5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614eba83398151915280546002811415611cbd5760405162461bcd60e51b815260040161043190614c22565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611d2357600080fd5b505afa158015611d37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d5b91906146b6565b90508015611dae57611dae7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083613739565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611e0f57600080fd5b505afa158015611e23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e479190614270565b6001600160a01b0316336001600160a01b031614611e775760405162461bcd60e51b815260040161043190614c4a565b60335460ff16611ec05760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b600080516020614eba83398151915280546002811415611ef25760405162461bcd60e51b815260040161043190614c22565b6002825543611c20606b54611f079190614d71565b10611f545760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b6002198512158015611f67575060038513155b8015611f815750600085603454611f7e9190614d30565b12155b611fcd5760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff198412158015611ff057506811ff6cf0fd15b000008413155b801561200a57506000846068546120079190614d30565b12155b6120565760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008311156120af5760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b846034546120bd9190614d30565b6034556068546120ce908590614d30565b60685543606b55821561221c577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b15801561213657600080fd5b505af115801561214a573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b1580156121da57600080fd5b505af11580156121ee573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221291906144b4565b5061221c83613837565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a1612267600061389f565b6122a65760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b6122ae613d25565b5060019055505050565b6122c0612ac5565b6122dc5760405162461bcd60e51b815260040161043190614b5f565b60a054811061231d5760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a0828154811061233257612332614e6a565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a0549193509091169061236f90600190614dca565b8310156123f15760a0805461238690600190614dca565b8154811061239657612396614e6a565b60009182526020909120015460a080546001600160a01b0390921691859081106123c2576123c2614e6a565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a080548061240257612402614e54565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61248c612ac5565b6124a85760405162461bcd60e51b815260040161043190614b5f565b8060005b8181101561255b5760008484838181106124c8576124c8614e6a565b90506020020160208101906124dd9190614253565b6001600160a01b0316141561254b5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b61255481614e0d565b90506124ac565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161259093929190614918565b60405180910390a1610f3660a48484613fac565b6125ac612ac5565b6125c85760405162461bcd60e51b815260040161043190614b5f565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146126445760405162461bcd60e51b815260040161043190614beb565b60335460ff16156126675760405162461bcd60e51b815260040161043190614bc1565b600080516020614eba833981519152805460028114156126995760405162461bcd60e51b815260040161043190614c22565b600282556126a7600161389f565b925060018255505090565b6126ba612ac5565b6126d65760405162461bcd60e51b815260040161043190614b5f565b80821080156126ed57506801bc16d674ec80000081105b801561270a5750673782dace9d9000006127078383614dca565b10155b6127565760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b15801561282957600080fd5b505af115801561283d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061286191906144b4565b50565b60335461010090046001600160a01b031633146128935760405162461bcd60e51b815260040161043190614beb565b60335460ff16156128b65760405162461bcd60e51b815260040161043190614bc1565b600088886040516128c89291906147ef565b6040805191829003909120600081815260356020529182205490925060ff16908160048111156128fa576128fa614e3e565b146129475760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6040516301ba3ee760e21b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906306e8fb9c906129a1908d908d908d908d908d908d908d908d906004016149d7565b600060405180830381600087803b1580156129bb57600080fd5b505af11580156129cf573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166001179055518391507facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea042390612a24908d908d908d908d906149b0565b60405180910390a250505050505050505050565b612a40612ac5565b612a5c5760405162461bcd60e51b815260040161043190614b5f565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612add600080516020614eda8339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612afe612ac5565b612b1a5760405162461bcd60e51b815260040161043190614b5f565b612b42817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612b62600080516020614eda8339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612be25760405162461bcd60e51b815260040161043190614b28565b600080516020614eba83398151915280546002811415612c145760405162461bcd60e51b815260040161043190614c22565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612c695760405162461bcd60e51b815260040161043190614b96565b6122ae858585613739565b60335461010090046001600160a01b03163314612ca35760405162461bcd60e51b815260040161043190614beb565b60335460ff1615612cc65760405162461bcd60e51b815260040161043190614bc1565b60008484604051612cd89291906147ef565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612d0c57612d0c614e3e565b14612d505760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612da29089908990899089906004016149b0565b600060405180830381600087803b158015612dbc57600080fd5b505af1158015612dd0573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612e259089908990899089906149b0565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612e7d5760405162461bcd60e51b815260040161043190614b28565b600080516020614eba83398151915280546002811415612eaf5760405162461bcd60e51b815260040161043190614c22565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612f1557600080fd5b505afa158015612f29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f4d91906146b6565b905060006101075482612f609190614dca565b90508015612f9857610107829055612f987f0000000000000000000000000000000000000000000000000000000000000000826132ff565b5050600182555050565b6036546001600160a01b03163314612ffc5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561308457602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613066575b5050505050905090565b6001600160a01b038281166000908152609f602052604090205416156130eb5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b0382161580159061310b57506001600160a01b03811615155b61314b5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905261323f908490613d9f565b505050565b82516132579060a490602086019061400f565b508151815181146132a15760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156132f8576132e88482815181106132c1576132c1614e6a565b60200260200101518483815181106132db576132db614e6a565b602002602001015161308e565b6132f181614e0d565b90506132a4565b5050505050565b600081116133485760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156133b45760405162461bcd60e51b815260040161043190614bc1565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b15801561341157600080fd5b505af1158015613425573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061344991906146b6565b905060006068548261345b9190614d71565b9050804710156134ad5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561351657600080fd5b505af115801561352a573d6000803e3d6000fd5b505060a35461356a93506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081169350169050836131ed565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612792565b6001600160a01b03811661362c5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b031661364c600080516020614eda8339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a361286181600080516020614eda83398151915255565b60006136a68261010754613e71565b90508061010760008282546136bb9190614dca565b90915550505050565b60335460ff16156136e75760405162461bcd60e51b815260040161043190614bc1565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25861371c3390565b6040516001600160a01b03909116815260200160405180910390a1565b600081116137895760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166137d85760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b6137e181613697565b6137f56001600160a01b03831684836131ed565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b63989101612477565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156138b4576112e682613e89565b6000606854476138c49190614dca565b9050600191506801bc16d674ec8000008110613aa85760006138ef6801bc16d674ec80000083614d89565b905080603460008282546139039190614dca565b909155506000905061391e826801bc16d674ec800000614dab565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b15801561397b57600080fd5b505af115801561398f573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613a1f57600080fd5b505af1158015613a33573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5791906144b4565b50613a6181613837565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613ab89190614dca565b90506801bc16d674ec8000008110613b0a5760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613b16575050919050565b606954811015613b70578060686000828254613b329190614d71565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613d1e565b606a54811115613d0d577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613bd557600080fd5b505af1158015613be9573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613c7957600080fd5b505af1158015613c8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613cb191906144b4565b50600160346000828254613cc59190614dca565b90915550613cd4905081613837565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613b63565b613d1684613e89565b949350505050565b5050919050565b60335460ff16613d6e5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa3361371c565b6000613df4826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613ea19092919063ffffffff16565b80519091501561323f5780806020019051810190613e1291906144b4565b61323f5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613e805781613e82565b825b9392505050565b60008115613e9957613e996136c4565b506000919050565b6060613d16848460008585843b613efa5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613f1691906147ff565b60006040518083038185875af1925050503d8060008114613f53576040519150601f19603f3d011682016040523d82523d6000602084013e613f58565b606091505b5091509150613f68828286613f73565b979650505050505050565b60608315613f82575081613e82565b825115613f925782518084602001fd5b8160405162461bcd60e51b81526004016104319190614b15565b828054828255906000526020600020908101928215613fff579160200282015b82811115613fff5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190613fcc565b5061400b929150614064565b5090565b828054828255906000526020600020908101928215613fff579160200282015b82811115613fff57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061402f565b5b8082111561400b5760008155600101614065565b60008083601f84011261408b57600080fd5b5081356001600160401b038111156140a257600080fd5b6020830191508360208260051b85010111156140bd57600080fd5b9250929050565b600082601f8301126140d557600080fd5b813560206140ea6140e583614d0d565b614cdd565b80838252828201915082860187848660051b890101111561410a57600080fd5b60005b8581101561413257813561412081614e96565b8452928401929084019060010161410d565b5090979650505050505050565b60008083601f84011261415157600080fd5b5081356001600160401b0381111561416857600080fd5b6020830191508360208285010111156140bd57600080fd5b600060a0828403121561419257600080fd5b50919050565b600060a082840312156141aa57600080fd5b60405160a081018181106001600160401b03821117156141cc576141cc614e80565b6040529050806141db83614223565b81526141e96020840161423c565b60208201526141fa6040840161423c565b6040820152606083013561420d81614eab565b6060820152608092830135920191909152919050565b803563ffffffff8116811461423757600080fd5b919050565b80356001600160401b038116811461423757600080fd5b60006020828403121561426557600080fd5b8135613e8281614e96565b60006020828403121561428257600080fd5b8151613e8281614e96565b600080604083850312156142a057600080fd5b82356142ab81614e96565b915060208301356142bb81614e96565b809150509250929050565b6000806000606084860312156142db57600080fd5b83356142e681614e96565b925060208401356142f681614e96565b929592945050506040919091013590565b6000806040838503121561431a57600080fd5b823561432581614e96565b946020939093013593505050565b6000806020838503121561434657600080fd5b82356001600160401b0381111561435c57600080fd5b61436885828601614079565b90969095509350505050565b60008060006060848603121561438957600080fd5b83356001600160401b03808211156143a057600080fd5b6143ac878388016140c4565b945060208601359150808211156143c257600080fd5b6143ce878388016140c4565b935060408601359150808211156143e457600080fd5b506143f1868287016140c4565b9150509250925092565b600080600060e0848603121561441057600080fd5b83356001600160401b0381111561442657600080fd5b8401601f8101861361443757600080fd5b803560206144476140e583614d0d565b8083825282820191508285018a848660051b880101111561446757600080fd5b600095505b848610156144915761447d8161423c565b83526001959095019491830191830161446c565b5096505086013593506144ab915086905060408601614198565b90509250925092565b6000602082840312156144c657600080fd5b8151613e8281614eab565b6000602082840312156144e357600080fd5b5035919050565b6000806000806040858703121561450057600080fd5b84356001600160401b038082111561451757600080fd5b6145238883890161413f565b9096509450602087013591508082111561453c57600080fd5b5061454987828801614079565b95989497509550505050565b600080600080600080600080610120898b03121561457257600080fd5b88356001600160401b038082111561458957600080fd5b6145958c838d0161413f565b909a50985060208b01359150808211156145ae57600080fd5b6145ba8c838d01614079565b909850965060408b01359150808211156145d357600080fd5b506145e08b828c0161413f565b909550935050606089013591506145fa8a60808b01614180565b90509295985092959890939650565b600080600080600060e0868803121561462157600080fd5b85356001600160401b038082111561463857600080fd5b61464489838a0161413f565b9097509550602088013591508082111561465d57600080fd5b5061466a88828901614079565b909450925061467e90508760408801614180565b90509295509295909350565b60008060006060848603121561469f57600080fd5b505081359360208301359350604090920135919050565b6000602082840312156146c857600080fd5b5051919050565b600080604083850312156146e257600080fd5b50508035926020909101359150565b8183526000602080850194508260005b8581101561472d576001600160401b0361471a8361423c565b1687529582019590820190600101614701565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60008151808452614779816020860160208601614de1565b601f01601f19169290920160200192915050565b63ffffffff61479b82614223565b1682526147aa6020820161423c565b6001600160401b038082166020850152806147c76040850161423c565b166040850152505060608101356147dd81614eab565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614811818460208701614de1565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b8181101561486e5783516001600160401b031685529382019392820192600101614849565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b8181101561490c5783516001600160a01b0316835292840192918401916001016148e7565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b828110156149625781546001600160a01b03168452928401926001918201910161493d565b505050838103828501528481528590820160005b868110156149a457823561498981614e96565b6001600160a01b031682529183019190830190600101614976565b50979650505050505050565b6040815260006149c4604083018688614738565b8281036020840152613f688185876146f1565b60006101208083526149ec8184018b8d614738565b90508281036020840152614a0181898b6146f1565b90508281036040840152614a16818789614738565b915050836060830152614a2c608083018461478d565b9998505050505050505050565b60e081526000614a4d60e083018789614738565b8281036020840152614a608186886146f1565b915050614a70604083018461478d565b9695505050505050565b608081526000614a8e60808301888a614738565b8281036020840152614aa08188614761565b90508281036040840152614ab5818688614738565b915050826060830152979650505050505050565b604081526000614add604083018587614738565b9050826020830152949350505050565b6020810160058310614b0f57634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613e826020830184614761565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614c9857600080fd5b8301803591506001600160401b03821115614cb257600080fd5b6020019150368190038213156140bd57600080fd5b60008235605e1983360301811261481157600080fd5b604051601f8201601f191681016001600160401b0381118282101715614d0557614d05614e80565b604052919050565b60006001600160401b03821115614d2657614d26614e80565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614d5257614d52614e28565b600160ff1b8390038412811615614d6b57614d6b614e28565b50500190565b60008219821115614d8457614d84614e28565b500190565b600082614da657634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614dc557614dc5614e28565b500290565b600082821015614ddc57614ddc614e28565b500390565b60005b83811015614dfc578181015183820152602001614de4565b83811115610f365750506000910152565b6000600019821415614e2157614e21614e28565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b038116811461286157600080fd5b801515811461286157600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa2646970667358221220d36a99c34f8ae7ea8248bf64125462568e5549d9c3b20d6d99212d104dd407eb64736f6c63430008070033", + "numDeployments": 9, + "solcInputHash": "f9cd4fae6f07aaea4914817197ab80c9", + "metadata": "{\"compiler\":{\"version\":\"0.8.7+commit.e28d00a7\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"platformAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"vaultAddress\",\"type\":\"address\"}],\"internalType\":\"struct InitializableAbstractStrategy.BaseStrategyConfig\",\"name\":\"_baseConfig\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"_wethAddress\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvToken\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_ssvNetwork\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_maxValidators\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_feeAccumulator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_beaconChainDepositContract\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"AccountingConsensusRewards\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"noOfValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingFullyWithdrawnValidator\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"validatorsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"consensusRewardsDelta\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingManuallyFixed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"remainingValidators\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"wethSentToVault\",\"type\":\"uint256\"}],\"name\":\"AccountingValidatorSlashed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"ETHStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"start\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"end\",\"type\":\"uint256\"}],\"name\":\"FuseIntervalUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"GovernorshipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_oldHarvesterAddress\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_newHarvesterAddress\",\"type\":\"address\"}],\"name\":\"HarvesterAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"PTokenRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousGovernor\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newGovernor\",\"type\":\"address\"}],\"name\":\"PendingGovernorshipTransfer\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"RegistratorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_oldAddresses\",\"type\":\"address[]\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"_newAddresses\",\"type\":\"address[]\"}],\"name\":\"RewardTokenAddressesUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"rewardToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"RewardTokenCollected\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitCompleted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorExitInitiated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"pubKeyHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"pubKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"SSVValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[],\"name\":\"StakeETHTallyReset\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"StakeETHThresholdChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newAddress\",\"type\":\"address\"}],\"name\":\"StakingMonitorChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"BEACON_CHAIN_DEPOSIT_CONTRACT\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FEE_ACCUMULATOR_ADDRESS\",\"outputs\":[{\"internalType\":\"address payable\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"FULL_STAKE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MAX_VALIDATORS\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"MIN_FIX_ACCOUNTING_CADENCE\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_NETWORK\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"SSV_TOKEN\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"VAULT_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WETH\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeDepositedValidators\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"assetToPToken\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"checkBalance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"claimGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"collectRewardTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"consensusRewards\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"depositSSV\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"depositedWethAccountedFor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"doAccounting\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"accountingValid\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalEnd\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"fuseIntervalStart\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"governor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"harvesterAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_assets\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"_pTokens\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"isGovernor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastFixAccountingBlockNumber\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"int256\",\"name\":\"_validatorsDelta\",\"type\":\"int256\"},{\"internalType\":\"int256\",\"name\":\"_consensusRewardsDelta\",\"type\":\"int256\"},{\"internalType\":\"uint256\",\"name\":\"_ethToVaultAmount\",\"type\":\"uint256\"}],\"name\":\"manuallyFixAccounting\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"platformAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"publicKeys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sharesData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"ssvAmount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerSsvValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_assetIndex\",\"type\":\"uint256\"}],\"name\":\"removePToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"struct Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeSsvValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resetStakeETHTally\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"rewardTokenAddresses\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"safeApproveAllTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalStart\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_fuseIntervalEnd\",\"type\":\"uint256\"}],\"name\":\"setFuseInterval\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_harvesterAddress\",\"type\":\"address\"}],\"name\":\"setHarvesterAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_pToken\",\"type\":\"address\"}],\"name\":\"setPTokenAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setRegistrator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"_rewardTokenAddresses\",\"type\":\"address[]\"}],\"name\":\"setRewardTokenAddresses\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"setStakeETHThreshold\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_address\",\"type\":\"address\"}],\"name\":\"setStakingMonitor\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHTally\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakeETHThreshold\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"pubkey\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"signature\",\"type\":\"bytes\"},{\"internalType\":\"bytes32\",\"name\":\"depositDataRoot\",\"type\":\"bytes32\"}],\"internalType\":\"struct ValidatorStakeData[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"name\":\"stakeEth\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingMonitor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"}],\"name\":\"supportsAsset\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_newGovernor\",\"type\":\"address\"}],\"name\":\"transferGovernance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"transferToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"validatorRegistrator\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"validatorsStates\",\"outputs\":[{\"internalType\":\"enum ValidatorRegistrator.VALIDATOR_STATE\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"vaultAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_recipient\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_asset\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"withdrawAll\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"author\":\"Origin Protocol Inc\",\"details\":\"This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that is on the contract across multiple blocks (and not just transitory within a transaction) is considered an asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is required since the rewards (reward token) is also in ETH. To simplify the accounting of WETH there is another difference in behavior compared to the other strategies. To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant immediately wraps ETH to WETH and sends it to the Vault. On the other hand any ETH on the contract (across multiple blocks) is there either: - as a result of already accounted for consensus rewards - as a result of not yet accounted for consensus rewards - as a results of not yet accounted for full validator withdrawals (or validator slashes) Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time interval and not immediately.\",\"kind\":\"dev\",\"methods\":{\"checkBalance(address)\":{\"params\":{\"_asset\":\"Address of weth asset\"},\"returns\":{\"balance\":\" Total value of (W)ETH\"}},\"constructor\":{\"params\":{\"_baseConfig\":\"Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI, and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\",\"_beaconChainDepositContract\":\"Address of the beacon chain deposit contract\",\"_feeAccumulator\":\"Address of the fee accumulator receiving execution layer validator rewards\",\"_maxValidators\":\"Maximum number of validators that can be registered in the strategy\",\"_ssvNetwork\":\"Address of the SSV Network contract\",\"_ssvToken\":\"Address of the Erc20 SSV Token contract\",\"_wethAddress\":\"Address of the Erc20 WETH Token contract\"}},\"deposit(address,uint256)\":{\"params\":{\"_amount\":\"Amount of assets that were transferred to the strategy by the vault.\",\"_asset\":\"Address of asset to deposit. Has to be WETH.\"}},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"details\":\"A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds. uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service that tries to top up SSV tokens.\",\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"doAccounting()\":{\"details\":\"This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it for now.\",\"returns\":{\"accountingValid\":\"true if accounting was successful, false if fuse is blown\"}},\"exitSsvValidator(bytes,uint64[])\":{\"params\":{\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"getRewardTokenAddresses()\":{\"returns\":{\"_0\":\"address[] the reward token addresses.\"}},\"initialize(address[],address[],address[])\":{\"params\":{\"_assets\":\"Addresses of initial supported assets\",\"_pTokens\":\"Platform Token corresponding addresses\",\"_rewardTokenAddresses\":\"Address of reward token for platform\"}},\"manuallyFixAccounting(int256,int256,uint256)\":{\"details\":\"There is a case when a validator(s) gets slashed so much that the eth swept from the beacon chain enters the fuse area and there are no consensus rewards on the contract to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval we need to reduce the amount of active deposited validators and immediately send WETH to the vault, so it doesn't interfere with further accounting.\",\"params\":{\"_consensusRewardsDelta\":\"adjust the accounted for consensus rewards up or down\",\"_ethToVaultAmount\":\"the amount of ETH that gets wrapped into WETH and sent to the Vault\",\"_validatorsDelta\":\"adjust the active validators by up to plus three or minus three\"}},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKeys\":\"The public keys of the validators\",\"sharesData\":\"The shares data for each validator\",\"ssvAmount\":\"The amount of SSV tokens to be deposited to the SSV cluster\"}},\"removePToken(uint256)\":{\"params\":{\"_assetIndex\":\"Index of the asset to be removed\"}},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"params\":{\"cluster\":\"The SSV cluster details including the validator count and SSV balance\",\"operatorIds\":\"The operator IDs of the SSV Cluster\",\"publicKey\":\"The public key of the validator\"}},\"setHarvesterAddress(address)\":{\"params\":{\"_harvesterAddress\":\"Address of the harvester contract.\"}},\"setPTokenAddress(address,address)\":{\"params\":{\"_asset\":\"Address for the asset\",\"_pToken\":\"Address for the corresponding platform token\"}},\"setRewardTokenAddresses(address[])\":{\"params\":{\"_rewardTokenAddresses\":\"Array of reward token addresses\"}},\"stakeEth((bytes,bytes,bytes32)[])\":{\"params\":{\"validators\":\"A list of validator data needed to stake. The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot. Only the registrator can call this function.\"}},\"supportsAsset(address)\":{\"params\":{\"_asset\":\"The address of the asset token.\"}},\"transferGovernance(address)\":{\"params\":{\"_newGovernor\":\"Address of the new Governor\"}},\"transferToken(address,uint256)\":{\"params\":{\"_amount\":\"Amount of the asset to transfer\",\"_asset\":\"Address for the asset\"}},\"withdraw(address,address,uint256)\":{\"params\":{\"_amount\":\"Amount of WETH to withdraw\",\"_asset\":\"WETH to withdraw\",\"_recipient\":\"Address to receive withdrawn assets\"}}},\"stateVariables\":{\"FEE_ACCUMULATOR_ADDRESS\":{\"details\":\"this address will receive Execution layer rewards - These are rewards earned for executing transactions on the Ethereum network as part of block proposals. They include priority fees (fees paid by users for their transactions to be included) and MEV rewards (rewards for arranging transactions in a way that benefits the validator).\"},\"depositedWethAccountedFor\":{\"details\":\"This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately deposit it to an underlying platform. Rather a special privilege account stakes it to the validators. For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track of WETH that has already been accounted for. This value represents the amount of WETH balance of this contract that has already been accounted for by the deposit events. It is important to note that this variable is not concerned with WETH that is a result of full/partial withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to be staked.\"}},\"title\":\"Native Staking SSV Strategy\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"BEACON_CHAIN_DEPOSIT_CONTRACT()\":{\"notice\":\"The address of the beacon chain deposit contract\"},\"FEE_ACCUMULATOR_ADDRESS()\":{\"notice\":\"Fee collector address\"},\"FULL_STAKE()\":{\"notice\":\"The maximum amount of ETH that can be staked by a validator\"},\"MAX_VALIDATORS()\":{\"notice\":\"Maximum number of validators that can be registered in this strategy\"},\"MIN_FIX_ACCOUNTING_CADENCE()\":{\"notice\":\"The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\"},\"SSV_NETWORK()\":{\"notice\":\"The address of the SSV Network contract used to interface with\"},\"SSV_TOKEN()\":{\"notice\":\"SSV ERC20 token that serves as a payment for operating SSV validators\"},\"VAULT_ADDRESS()\":{\"notice\":\"Address of the OETH Vault proxy contract\"},\"WETH()\":{\"notice\":\"The address of the Wrapped ETH (WETH) token contract\"},\"activeDepositedValidators()\":{\"notice\":\"The number of validators that have 32 (!) ETH actively deposited. When a new deposit to a validator happens this number increases, when a validator exit is detected this number decreases.\"},\"assetToPToken(address)\":{\"notice\":\"asset => pToken (Platform Specific Token Address)\"},\"checkBalance(address)\":{\"notice\":\"Returns the total value of (W)ETH that is staked to the validators and WETH deposits that are still to be staked. This does not include ETH from consensus rewards sitting in this strategy or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested and sent to the Dripper so will eventually be sent to the Vault as WETH.\"},\"claimGovernance()\":{\"notice\":\"Claim Governance of the contract to a new account (`newGovernor`). Can only be called by the new Governor.\"},\"collectRewardTokens()\":{\"notice\":\"Collect accumulated reward token and send to Vault.\"},\"consensusRewards()\":{\"notice\":\"Keeps track of the total consensus rewards swept from the beacon chain\"},\"deposit(address,uint256)\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just checks the asset is WETH and emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositAll()\":{\"notice\":\"Unlike other strategies, this does not deposit assets into the underlying platform. It just emits the Deposit event. To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used. Will NOT revert if the strategy is paused from an accounting failure.\"},\"depositSSV(uint64[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\"},\"doAccounting()\":{\"notice\":\"This notion page offers a good explanation of how the accounting functions https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart, the accounting function will treat that ETH as Beacon chain consensus rewards. On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32, the accounting function will treat that as a validator slashing.Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\"},\"exitSsvValidator(bytes,uint64[])\":{\"notice\":\"Exit a validator from the Beacon chain. The staked ETH will eventually swept to this native staking strategy. Only the registrator can call this function.\"},\"fuseIntervalEnd()\":{\"notice\":\"end of fuse interval\"},\"fuseIntervalStart()\":{\"notice\":\"start of fuse interval\"},\"getRewardTokenAddresses()\":{\"notice\":\"Get the reward token addresses.\"},\"governor()\":{\"notice\":\"Returns the address of the current Governor.\"},\"harvesterAddress()\":{\"notice\":\"Address of the Harvester contract allowed to collect reward tokens\"},\"initialize(address[],address[],address[])\":{\"notice\":\"initialize function, to set up initial internal state\"},\"isGovernor()\":{\"notice\":\"Returns true if the caller is the current Governor.\"},\"lastFixAccountingBlockNumber()\":{\"notice\":\"last block number manuallyFixAccounting has been called\"},\"manuallyFixAccounting(int256,int256,uint256)\":{\"notice\":\"Allow the Strategist to fix the accounting of this strategy and unpause.\"},\"platformAddress()\":{\"notice\":\"Address of the underlying platform\"},\"registerSsvValidators(bytes[],uint64[],bytes[],uint256,(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Registers a new validator in the SSV Cluster. Only the registrator can call this function.\"},\"removePToken(uint256)\":{\"notice\":\"Remove a supported asset by passing its index. This method can only be called by the system Governor\"},\"removeSsvValidator(bytes,uint64[],(uint32,uint64,uint64,bool,uint256))\":{\"notice\":\"Remove a validator from the SSV Cluster. Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain. If removed before the validator has exited the beacon chain will result in the validator being slashed. Only the registrator can call this function.\"},\"resetStakeETHTally()\":{\"notice\":\"Reset the stakeETHTally\"},\"rewardTokenAddresses(uint256)\":{\"notice\":\"Address of the reward tokens. eg CRV, BAL, CVX, AURA\"},\"safeApproveAllTokens()\":{\"notice\":\"Approves the SSV Network contract to transfer SSV tokens for deposits\"},\"setFuseInterval(uint256,uint256)\":{\"notice\":\"set fuse interval values\"},\"setHarvesterAddress(address)\":{\"notice\":\"Set the Harvester contract that can collect rewards.\"},\"setPTokenAddress(address,address)\":{\"notice\":\"Provide support for asset by passing its pToken address. This method can only be called by the system Governor\"},\"setRegistrator(address)\":{\"notice\":\"Set the address of the registrator which can register, exit and remove validators\"},\"setRewardTokenAddresses(address[])\":{\"notice\":\"Set the reward token addresses. Any old addresses will be overwritten.\"},\"setStakeETHThreshold(uint256)\":{\"notice\":\"Set the amount of ETH that can be staked before staking monitor\"},\"setStakingMonitor(address)\":{\"notice\":\"Set the address of the staking monitor that is allowed to reset stakeETHTally\"},\"stakeETHTally()\":{\"notice\":\"Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`. This can not go above `stakeETHThreshold`.\"},\"stakeETHThreshold()\":{\"notice\":\"Amount of ETH that can be staked before staking on the contract is suspended and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\"},\"stakeEth((bytes,bytes,bytes32)[])\":{\"notice\":\"Stakes WETH to the node validators\"},\"stakingMonitor()\":{\"notice\":\"The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\"},\"supportsAsset(address)\":{\"notice\":\"Returns bool indicating whether asset is supported by strategy.\"},\"transferGovernance(address)\":{\"notice\":\"Transfers Governance of the contract to a new account (`newGovernor`). Can only be called by the current Governor. Must be claimed for this to complete\"},\"transferToken(address,uint256)\":{\"notice\":\"Transfer token to governor. Intended for recovering tokens stuck in strategy contracts, i.e. mistaken sends.\"},\"validatorRegistrator()\":{\"notice\":\"Address of the registrator - allowed to register, exit and remove validators\"},\"validatorsStates(bytes32)\":{\"notice\":\"State of the validators keccak256(pubKey) => state\"},\"vaultAddress()\":{\"notice\":\"Address of the OToken vault\"},\"withdraw(address,address,uint256)\":{\"notice\":\"Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract. That can happen when: - after mints if the strategy is the default - time between depositToStrategy and stakeEth - the deposit was not a multiple of 32 WETH - someone sent WETH directly to this contract Will NOT revert if the strategy is paused from an accounting failure.\"},\"withdrawAll()\":{\"notice\":\"transfer all WETH deposits back to the vault. This does not withdraw from the validators. That has to be done separately with the `exitSsvValidator` and `removeSsvValidator` operations. This does not withdraw any execution rewards from the FeeAccumulator or consensus rewards in this strategy. Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn. ETH from full validator withdrawals is sent to the Vault using `doAccounting`. Will NOT revert if the strategy is paused from an accounting failure.\"}},\"notice\":\"Strategy to deploy funds into DVT validators powered by the SSV Network\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":\"NativeStakingSSVStrategy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"@openzeppelin/contracts/security/Pausable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which allows children to implement an emergency stop\\n * mechanism that can be triggered by an authorized account.\\n *\\n * This module is used through inheritance. It will make available the\\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\\n * the functions of your contract. Note that they will not be pausable by\\n * simply including this module, only once the modifiers are put in place.\\n */\\nabstract contract Pausable is Context {\\n /**\\n * @dev Emitted when the pause is triggered by `account`.\\n */\\n event Paused(address account);\\n\\n /**\\n * @dev Emitted when the pause is lifted by `account`.\\n */\\n event Unpaused(address account);\\n\\n bool private _paused;\\n\\n /**\\n * @dev Initializes the contract in unpaused state.\\n */\\n constructor() {\\n _paused = false;\\n }\\n\\n /**\\n * @dev Returns true if the contract is paused, and false otherwise.\\n */\\n function paused() public view virtual returns (bool) {\\n return _paused;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is not paused.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n modifier whenNotPaused() {\\n require(!paused(), \\\"Pausable: paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Modifier to make a function callable only when the contract is paused.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n modifier whenPaused() {\\n require(paused(), \\\"Pausable: not paused\\\");\\n _;\\n }\\n\\n /**\\n * @dev Triggers stopped state.\\n *\\n * Requirements:\\n *\\n * - The contract must not be paused.\\n */\\n function _pause() internal virtual whenNotPaused {\\n _paused = true;\\n emit Paused(_msgSender());\\n }\\n\\n /**\\n * @dev Returns to normal state.\\n *\\n * Requirements:\\n *\\n * - The contract must be paused.\\n */\\n function _unpause() internal virtual whenPaused {\\n _paused = false;\\n emit Unpaused(_msgSender());\\n }\\n}\\n\",\"keccak256\":\"0xe68ed7fb8766ed1e888291f881e36b616037f852b37d96877045319ad298ba87\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Interface of the ERC20 standard as defined in the EIP.\\n */\\ninterface IERC20 {\\n /**\\n * @dev Returns the amount of tokens in existence.\\n */\\n function totalSupply() external view returns (uint256);\\n\\n /**\\n * @dev Returns the amount of tokens owned by `account`.\\n */\\n function balanceOf(address account) external view returns (uint256);\\n\\n /**\\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transfer(address recipient, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Returns the remaining number of tokens that `spender` will be\\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\\n * zero by default.\\n *\\n * This value changes when {approve} or {transferFrom} are called.\\n */\\n function allowance(address owner, address spender) external view returns (uint256);\\n\\n /**\\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\\n * that someone may use both the old and the new allowance by unfortunate\\n * transaction ordering. One possible solution to mitigate this race\\n * condition is to first reduce the spender's allowance to 0 and set the\\n * desired value afterwards:\\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\\n *\\n * Emits an {Approval} event.\\n */\\n function approve(address spender, uint256 amount) external returns (bool);\\n\\n /**\\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\\n * allowance mechanism. `amount` is then deducted from the caller's\\n * allowance.\\n *\\n * Returns a boolean value indicating whether the operation succeeded.\\n *\\n * Emits a {Transfer} event.\\n */\\n function transferFrom(\\n address sender,\\n address recipient,\\n uint256 amount\\n ) external returns (bool);\\n\\n /**\\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\\n * another (`to`).\\n *\\n * Note that `value` may be zero.\\n */\\n event Transfer(address indexed from, address indexed to, uint256 value);\\n\\n /**\\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\\n * a call to {approve}. `value` is the new allowance.\\n */\\n event Approval(address indexed owner, address indexed spender, uint256 value);\\n}\\n\",\"keccak256\":\"0x61437cb513a887a1bbad006e7b1c8b414478427d33de47c5600af3c748f108da\",\"license\":\"MIT\"},\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../IERC20.sol\\\";\\nimport \\\"../../../utils/Address.sol\\\";\\n\\n/**\\n * @title SafeERC20\\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\\n * contract returns false). Tokens that return no value (and instead revert or\\n * throw on failure) are also supported, non-reverting calls are assumed to be\\n * successful.\\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\\n */\\nlibrary SafeERC20 {\\n using Address for address;\\n\\n function safeTransfer(\\n IERC20 token,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\\n }\\n\\n function safeTransferFrom(\\n IERC20 token,\\n address from,\\n address to,\\n uint256 value\\n ) internal {\\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\\n }\\n\\n /**\\n * @dev Deprecated. This function has issues similar to the ones found in\\n * {IERC20-approve}, and its usage is discouraged.\\n *\\n * Whenever possible, use {safeIncreaseAllowance} and\\n * {safeDecreaseAllowance} instead.\\n */\\n function safeApprove(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n // safeApprove should only be called when setting an initial allowance,\\n // or when resetting it to zero. To increase and decrease it, use\\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\\n require(\\n (value == 0) || (token.allowance(address(this), spender) == 0),\\n \\\"SafeERC20: approve from non-zero to non-zero allowance\\\"\\n );\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\\n }\\n\\n function safeIncreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n uint256 newAllowance = token.allowance(address(this), spender) + value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n\\n function safeDecreaseAllowance(\\n IERC20 token,\\n address spender,\\n uint256 value\\n ) internal {\\n unchecked {\\n uint256 oldAllowance = token.allowance(address(this), spender);\\n require(oldAllowance >= value, \\\"SafeERC20: decreased allowance below zero\\\");\\n uint256 newAllowance = oldAllowance - value;\\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\\n }\\n }\\n\\n /**\\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\\n * on the return value: the return value is optional (but if data is returned, it must not be false).\\n * @param token The token targeted by the call.\\n * @param data The call data (encoded using abi.encode or one of its variants).\\n */\\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\\n // the target address contains contract code and also asserts for success in the low-level call.\\n\\n bytes memory returndata = address(token).functionCall(data, \\\"SafeERC20: low-level call failed\\\");\\n if (returndata.length > 0) {\\n // Return data is optional\\n require(abi.decode(returndata, (bool)), \\\"SafeERC20: ERC20 operation did not succeed\\\");\\n }\\n }\\n}\\n\",\"keccak256\":\"0xc3d946432c0ddbb1f846a0d3985be71299df331b91d06732152117f62f0be2b5\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize, which returns 0 for contracts in\\n // construction, since the code is only stored at the end of the\\n // constructor execution.\\n\\n uint256 size;\\n assembly {\\n size := extcodesize(account)\\n }\\n return size > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x51b758a8815ecc9596c66c37d56b1d33883a444631a3f916b9fe65cb863ef7c4\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/Math.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Standard math utilities missing in the Solidity language.\\n */\\nlibrary Math {\\n /**\\n * @dev Returns the largest of two numbers.\\n */\\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a >= b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the smallest of two numbers.\\n */\\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a < b ? a : b;\\n }\\n\\n /**\\n * @dev Returns the average of two numbers. The result is rounded towards\\n * zero.\\n */\\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b) / 2 can overflow.\\n return (a & b) + (a ^ b) / 2;\\n }\\n\\n /**\\n * @dev Returns the ceiling of the division of two numbers.\\n *\\n * This differs from standard division with `/` in that it rounds up instead\\n * of rounding down.\\n */\\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\\n // (a + b - 1) / b can overflow on addition, so we distribute.\\n return a / b + (a % b == 0 ? 0 : 1);\\n }\\n}\\n\",\"keccak256\":\"0xfaad496c1c944b6259b7dc70b4865eb1775d6402bc0c81b38a0b24d9f525ae37\",\"license\":\"MIT\"},\"@openzeppelin/contracts/utils/math/SafeMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\\n\\npragma solidity ^0.8.0;\\n\\n// CAUTION\\n// This version of SafeMath should only be used with Solidity 0.8 or later,\\n// because it relies on the compiler's built in overflow checks.\\n\\n/**\\n * @dev Wrappers over Solidity's arithmetic operations.\\n *\\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\\n * now has built in overflow checking.\\n */\\nlibrary SafeMath {\\n /**\\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n uint256 c = a + b;\\n if (c < a) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b > a) return (false, 0);\\n return (true, a - b);\\n }\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\\n // benefit is lost if 'b' is also tested.\\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\\n if (a == 0) return (true, 0);\\n uint256 c = a * b;\\n if (c / a != b) return (false, 0);\\n return (true, c);\\n }\\n }\\n\\n /**\\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a / b);\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\\n *\\n * _Available since v3.4._\\n */\\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\\n unchecked {\\n if (b == 0) return (false, 0);\\n return (true, a % b);\\n }\\n }\\n\\n /**\\n * @dev Returns the addition of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `+` operator.\\n *\\n * Requirements:\\n *\\n * - Addition cannot overflow.\\n */\\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a + b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting on\\n * overflow (when the result is negative).\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a - b;\\n }\\n\\n /**\\n * @dev Returns the multiplication of two unsigned integers, reverting on\\n * overflow.\\n *\\n * Counterpart to Solidity's `*` operator.\\n *\\n * Requirements:\\n *\\n * - Multiplication cannot overflow.\\n */\\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a * b;\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator.\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a / b;\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting when dividing by zero.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\\n return a % b;\\n }\\n\\n /**\\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\\n * overflow (when the result is negative).\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {trySub}.\\n *\\n * Counterpart to Solidity's `-` operator.\\n *\\n * Requirements:\\n *\\n * - Subtraction cannot overflow.\\n */\\n function sub(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b <= a, errorMessage);\\n return a - b;\\n }\\n }\\n\\n /**\\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\\n * division by zero. The result is rounded towards zero.\\n *\\n * Counterpart to Solidity's `/` operator. Note: this function uses a\\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\\n * uses an invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function div(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a / b;\\n }\\n }\\n\\n /**\\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\\n * reverting with custom message when dividing by zero.\\n *\\n * CAUTION: This function is deprecated because it requires allocating memory for the error\\n * message unnecessarily. For custom revert reasons use {tryMod}.\\n *\\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\\n * opcode (which leaves remaining gas untouched) while Solidity uses an\\n * invalid opcode to revert (consuming all remaining gas).\\n *\\n * Requirements:\\n *\\n * - The divisor cannot be zero.\\n */\\n function mod(\\n uint256 a,\\n uint256 b,\\n string memory errorMessage\\n ) internal pure returns (uint256) {\\n unchecked {\\n require(b > 0, errorMessage);\\n return a % b;\\n }\\n }\\n}\\n\",\"keccak256\":\"0xa2f576be637946f767aa56601c26d717f48a0aff44f82e46f13807eea1009a21\",\"license\":\"MIT\"},\"contracts/governance/Governable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\\n * from owner to governor and renounce methods removed. Does not use\\n * Context.sol like Ownable.sol does for simplification.\\n * @author Origin Protocol Inc\\n */\\ncontract Governable {\\n // Storage position of the owner and pendingOwner of the contract\\n // keccak256(\\\"OUSD.governor\\\");\\n bytes32 private constant governorPosition =\\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\\n\\n // keccak256(\\\"OUSD.pending.governor\\\");\\n bytes32 private constant pendingGovernorPosition =\\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\\n\\n // keccak256(\\\"OUSD.reentry.status\\\");\\n bytes32 private constant reentryStatusPosition =\\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\\n\\n // See OpenZeppelin ReentrancyGuard implementation\\n uint256 constant _NOT_ENTERED = 1;\\n uint256 constant _ENTERED = 2;\\n\\n event PendingGovernorshipTransfer(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n event GovernorshipTransferred(\\n address indexed previousGovernor,\\n address indexed newGovernor\\n );\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial Governor.\\n */\\n constructor() {\\n _setGovernor(msg.sender);\\n emit GovernorshipTransferred(address(0), _governor());\\n }\\n\\n /**\\n * @notice Returns the address of the current Governor.\\n */\\n function governor() public view returns (address) {\\n return _governor();\\n }\\n\\n /**\\n * @dev Returns the address of the current Governor.\\n */\\n function _governor() internal view returns (address governorOut) {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n governorOut := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Returns the address of the pending Governor.\\n */\\n function _pendingGovernor()\\n internal\\n view\\n returns (address pendingGovernor)\\n {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n pendingGovernor := sload(position)\\n }\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the Governor.\\n */\\n modifier onlyGovernor() {\\n require(isGovernor(), \\\"Caller is not the Governor\\\");\\n _;\\n }\\n\\n /**\\n * @notice Returns true if the caller is the current Governor.\\n */\\n function isGovernor() public view returns (bool) {\\n return msg.sender == _governor();\\n }\\n\\n function _setGovernor(address newGovernor) internal {\\n bytes32 position = governorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @dev Prevents a contract from calling itself, directly or indirectly.\\n * Calling a `nonReentrant` function from another `nonReentrant`\\n * function is not supported. It is possible to prevent this from happening\\n * by making the `nonReentrant` function external, and make it call a\\n * `private` function that does the actual work.\\n */\\n modifier nonReentrant() {\\n bytes32 position = reentryStatusPosition;\\n uint256 _reentry_status;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n _reentry_status := sload(position)\\n }\\n\\n // On the first call to nonReentrant, _notEntered will be true\\n require(_reentry_status != _ENTERED, \\\"Reentrant call\\\");\\n\\n // Any calls to nonReentrant after this point will fail\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _ENTERED)\\n }\\n\\n _;\\n\\n // By storing the original value once again, a refund is triggered (see\\n // https://eips.ethereum.org/EIPS/eip-2200)\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, _NOT_ENTERED)\\n }\\n }\\n\\n function _setPendingGovernor(address newGovernor) internal {\\n bytes32 position = pendingGovernorPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newGovernor)\\n }\\n }\\n\\n /**\\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the current Governor. Must be claimed for this to complete\\n * @param _newGovernor Address of the new Governor\\n */\\n function transferGovernance(address _newGovernor) external onlyGovernor {\\n _setPendingGovernor(_newGovernor);\\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\\n }\\n\\n /**\\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\\n * Can only be called by the new Governor.\\n */\\n function claimGovernance() external {\\n require(\\n msg.sender == _pendingGovernor(),\\n \\\"Only the pending Governor can complete the claim\\\"\\n );\\n _changeGovernor(msg.sender);\\n }\\n\\n /**\\n * @dev Change Governance of the contract to a new account (`newGovernor`).\\n * @param _newGovernor Address of the new Governor\\n */\\n function _changeGovernor(address _newGovernor) internal {\\n require(_newGovernor != address(0), \\\"New Governor is address(0)\\\");\\n emit GovernorshipTransferred(_governor(), _newGovernor);\\n _setGovernor(_newGovernor);\\n }\\n}\\n\",\"keccak256\":\"0xb7133d6ce7a9e673ff79fcedb3fd41ae6e58e251f94915bb65731abe524270b4\",\"license\":\"MIT\"},\"contracts/interfaces/IBasicToken.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IBasicToken {\\n function symbol() external view returns (string memory);\\n\\n function decimals() external view returns (uint8);\\n}\\n\",\"keccak256\":\"0xa562062698aa12572123b36dfd2072f1a39e44fed2031cc19c2c9fd522f96ec2\",\"license\":\"MIT\"},\"contracts/interfaces/IDepositContract.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IDepositContract {\\n /// @notice A processed deposit event.\\n event DepositEvent(\\n bytes pubkey,\\n bytes withdrawal_credentials,\\n bytes amount,\\n bytes signature,\\n bytes index\\n );\\n\\n /// @notice Submit a Phase 0 DepositData object.\\n /// @param pubkey A BLS12-381 public key.\\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\\n /// @param signature A BLS12-381 signature.\\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\\n /// Used as a protection against malformed input.\\n function deposit(\\n bytes calldata pubkey,\\n bytes calldata withdrawal_credentials,\\n bytes calldata signature,\\n bytes32 deposit_data_root\\n ) external payable;\\n\\n /// @notice Query the current deposit root hash.\\n /// @return The deposit root hash.\\n function get_deposit_root() external view returns (bytes32);\\n\\n /// @notice Query the current deposit count.\\n /// @return The deposit count encoded as a little endian 64-bit number.\\n function get_deposit_count() external view returns (bytes memory);\\n}\\n\",\"keccak256\":\"0x598f90bdbc854250bbd5991426bfb43367207e64e33109c41aa8b54323fd8d8e\",\"license\":\"MIT\"},\"contracts/interfaces/ISSVNetwork.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nstruct Cluster {\\n uint32 validatorCount;\\n uint64 networkFeeIndex;\\n uint64 index;\\n bool active;\\n uint256 balance;\\n}\\n\\ninterface ISSVNetwork {\\n /**********/\\n /* Errors */\\n /**********/\\n\\n error CallerNotOwner(); // 0x5cd83192\\n error CallerNotWhitelisted(); // 0x8c6e5d71\\n error FeeTooLow(); // 0x732f9413\\n error FeeExceedsIncreaseLimit(); // 0x958065d9\\n error NoFeeDeclared(); // 0x1d226c30\\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\\n error OperatorDoesNotExist(); // 0x961e3e8c\\n error InsufficientBalance(); // 0xf4d678b8\\n error ValidatorDoesNotExist(); // 0xe51315d2\\n error ClusterNotLiquidatable(); // 0x60300a8d\\n error InvalidPublicKeyLength(); // 0x637297a4\\n error InvalidOperatorIdsLength(); // 0x38186224\\n error ClusterAlreadyEnabled(); // 0x3babafd2\\n error ClusterIsLiquidated(); // 0x95a0cf33\\n error ClusterDoesNotExists(); // 0x185e2b16\\n error IncorrectClusterState(); // 0x12e04c87\\n error UnsortedOperatorsList(); // 0xdd020e25\\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\\n error ExceedValidatorLimit(); // 0x6df5ab76\\n error TokenTransferFailed(); // 0x045c4b02\\n error SameFeeChangeNotAllowed(); // 0xc81272f8\\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\\n error NotAuthorized(); // 0xea8e4eb5\\n error OperatorsListNotUnique(); // 0xa5a1ff5d\\n error OperatorAlreadyExists(); // 0x289c9494\\n error TargetModuleDoesNotExist(); // 0x8f9195fb\\n error MaxValueExceeded(); // 0x91aa3017\\n error FeeTooHigh(); // 0xcd4e6167\\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\\n error EmptyPublicKeysList(); // df83e679\\n\\n // legacy errors\\n error ValidatorAlreadyExists(); // 0x8d09a73e\\n error IncorrectValidatorState(); // 0x2feda3c1\\n\\n event AdminChanged(address previousAdmin, address newAdmin);\\n event BeaconUpgraded(address indexed beacon);\\n event ClusterDeposited(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event ClusterLiquidated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterReactivated(\\n address indexed owner,\\n uint64[] operatorIds,\\n Cluster cluster\\n );\\n event ClusterWithdrawn(\\n address indexed owner,\\n uint64[] operatorIds,\\n uint256 value,\\n Cluster cluster\\n );\\n event DeclareOperatorFeePeriodUpdated(uint64 value);\\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\\n event FeeRecipientAddressUpdated(\\n address indexed owner,\\n address recipientAddress\\n );\\n event Initialized(uint8 version);\\n event LiquidationThresholdPeriodUpdated(uint64 value);\\n event MinimumLiquidationCollateralUpdated(uint256 value);\\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\\n event OperatorAdded(\\n uint64 indexed operatorId,\\n address indexed owner,\\n bytes publicKey,\\n uint256 fee\\n );\\n event OperatorFeeDeclarationCancelled(\\n address indexed owner,\\n uint64 indexed operatorId\\n );\\n event OperatorFeeDeclared(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeExecuted(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 blockNumber,\\n uint256 fee\\n );\\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\\n event OperatorMaximumFeeUpdated(uint64 maxFee);\\n event OperatorRemoved(uint64 indexed operatorId);\\n event OperatorWhitelistUpdated(\\n uint64 indexed operatorId,\\n address whitelisted\\n );\\n event OperatorWithdrawn(\\n address indexed owner,\\n uint64 indexed operatorId,\\n uint256 value\\n );\\n event OwnershipTransferStarted(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event OwnershipTransferred(\\n address indexed previousOwner,\\n address indexed newOwner\\n );\\n event Upgraded(address indexed implementation);\\n event ValidatorAdded(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n bytes shares,\\n Cluster cluster\\n );\\n event ValidatorExited(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey\\n );\\n event ValidatorRemoved(\\n address indexed owner,\\n uint64[] operatorIds,\\n bytes publicKey,\\n Cluster cluster\\n );\\n\\n fallback() external;\\n\\n function acceptOwnership() external;\\n\\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\\n\\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function deposit(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function executeOperatorFee(uint64 operatorId) external;\\n\\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\\n external;\\n\\n function bulkExitValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds\\n ) external;\\n\\n function getVersion() external pure returns (string memory version);\\n\\n function initialize(\\n address token_,\\n address ssvOperators_,\\n address ssvClusters_,\\n address ssvDAO_,\\n address ssvViews_,\\n uint64 minimumBlocksBeforeLiquidation_,\\n uint256 minimumLiquidationCollateral_,\\n uint32 validatorsPerOperatorLimit_,\\n uint64 declareOperatorFeePeriod_,\\n uint64 executeOperatorFeePeriod_,\\n uint64 operatorMaxFeeIncrease_\\n ) external;\\n\\n function liquidate(\\n address clusterOwner,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function owner() external view returns (address);\\n\\n function pendingOwner() external view returns (address);\\n\\n function proxiableUUID() external view returns (bytes32);\\n\\n function reactivate(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\\n\\n function registerOperator(bytes memory publicKey, uint256 fee)\\n external\\n returns (uint64 id);\\n\\n function registerValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n bytes memory sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRegisterValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function removeOperator(uint64 operatorId) external;\\n\\n function removeValidator(\\n bytes memory publicKey,\\n uint64[] memory operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function bulkRemoveValidator(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n Cluster memory cluster\\n ) external;\\n\\n function renounceOwnership() external;\\n\\n function setFeeRecipientAddress(address recipientAddress) external;\\n\\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\\n external;\\n\\n function transferOwnership(address newOwner) external;\\n\\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\\n\\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\\n\\n function updateMaximumOperatorFee(uint64 maxFee) external;\\n\\n function updateMinimumLiquidationCollateral(uint256 amount) external;\\n\\n function updateModule(uint8 moduleId, address moduleAddress) external;\\n\\n function updateNetworkFee(uint256 fee) external;\\n\\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\\n\\n function upgradeTo(address newImplementation) external;\\n\\n function upgradeToAndCall(address newImplementation, bytes memory data)\\n external\\n payable;\\n\\n function withdraw(\\n uint64[] memory operatorIds,\\n uint256 amount,\\n Cluster memory cluster\\n ) external;\\n\\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\\n\\n function withdrawNetworkEarnings(uint256 amount) external;\\n\\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\\n external;\\n}\\n\",\"keccak256\":\"0xbd86cb74702aebc5b53c8fc738a2e3ad1b410583460617be84b22ce922af12a7\",\"license\":\"MIT\"},\"contracts/interfaces/IStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\\n */\\ninterface IStrategy {\\n /**\\n * @dev Deposit the given asset to platform\\n * @param _asset asset address\\n * @param _amount Amount to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external;\\n\\n /**\\n * @dev Deposit the entire balance of all supported assets in the Strategy\\n * to the platform\\n */\\n function depositAll() external;\\n\\n /**\\n * @dev Withdraw given asset from Lending platform\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external;\\n\\n /**\\n * @dev Liquidate all assets in strategy and return them to Vault.\\n */\\n function withdrawAll() external;\\n\\n /**\\n * @dev Returns the current balance of the given asset.\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n returns (uint256 balance);\\n\\n /**\\n * @dev Returns bool indicating whether strategy supports asset.\\n */\\n function supportsAsset(address _asset) external view returns (bool);\\n\\n /**\\n * @dev Collect reward tokens from the Strategy.\\n */\\n function collectRewardTokens() external;\\n\\n /**\\n * @dev The address array of the reward tokens for the Strategy.\\n */\\n function getRewardTokenAddresses() external view returns (address[] memory);\\n}\\n\",\"keccak256\":\"0xb291e409a9b95527f9ed19cd6bff8eeb9921a21c1f5194a48c0bb9ce6613959a\",\"license\":\"MIT\"},\"contracts/interfaces/IVault.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { VaultStorage } from \\\"../vault/VaultStorage.sol\\\";\\n\\ninterface IVault {\\n event AssetSupported(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Governable.sol\\n function transferGovernance(address _newGovernor) external;\\n\\n function claimGovernance() external;\\n\\n function governor() external view returns (address);\\n\\n // VaultAdmin.sol\\n function setPriceProvider(address _priceProvider) external;\\n\\n function priceProvider() external view returns (address);\\n\\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\\n\\n function redeemFeeBps() external view returns (uint256);\\n\\n function setVaultBuffer(uint256 _vaultBuffer) external;\\n\\n function vaultBuffer() external view returns (uint256);\\n\\n function setAutoAllocateThreshold(uint256 _threshold) external;\\n\\n function autoAllocateThreshold() external view returns (uint256);\\n\\n function setRebaseThreshold(uint256 _threshold) external;\\n\\n function rebaseThreshold() external view returns (uint256);\\n\\n function setStrategistAddr(address _address) external;\\n\\n function strategistAddr() external view returns (address);\\n\\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\\n\\n function maxSupplyDiff() external view returns (uint256);\\n\\n function setTrusteeAddress(address _address) external;\\n\\n function trusteeAddress() external view returns (address);\\n\\n function setTrusteeFeeBps(uint256 _basis) external;\\n\\n function trusteeFeeBps() external view returns (uint256);\\n\\n function ousdMetaStrategy() external view returns (address);\\n\\n function setSwapper(address _swapperAddr) external;\\n\\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\\n\\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\\n external;\\n\\n function supportAsset(address _asset, uint8 _supportsAsset) external;\\n\\n function approveStrategy(address _addr) external;\\n\\n function removeStrategy(address _addr) external;\\n\\n function setAssetDefaultStrategy(address _asset, address _strategy)\\n external;\\n\\n function assetDefaultStrategies(address _asset)\\n external\\n view\\n returns (address);\\n\\n function pauseRebase() external;\\n\\n function unpauseRebase() external;\\n\\n function rebasePaused() external view returns (bool);\\n\\n function pauseCapital() external;\\n\\n function unpauseCapital() external;\\n\\n function capitalPaused() external view returns (bool);\\n\\n function transferToken(address _asset, uint256 _amount) external;\\n\\n function priceUnitMint(address asset) external view returns (uint256);\\n\\n function priceUnitRedeem(address asset) external view returns (uint256);\\n\\n function withdrawAllFromStrategy(address _strategyAddr) external;\\n\\n function withdrawAllFromStrategies() external;\\n\\n function withdrawFromStrategy(\\n address _strategyFromAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n function depositToStrategy(\\n address _strategyToAddress,\\n address[] calldata _assets,\\n uint256[] calldata _amounts\\n ) external;\\n\\n // VaultCore.sol\\n function mint(\\n address _asset,\\n uint256 _amount,\\n uint256 _minimumOusdAmount\\n ) external;\\n\\n function mintForStrategy(uint256 _amount) external;\\n\\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\\n\\n function burnForStrategy(uint256 _amount) external;\\n\\n function redeemAll(uint256 _minimumUnitAmount) external;\\n\\n function allocate() external;\\n\\n function rebase() external;\\n\\n function swapCollateral(\\n address fromAsset,\\n address toAsset,\\n uint256 fromAssetAmount,\\n uint256 minToAssetAmount,\\n bytes calldata data\\n ) external returns (uint256 toAssetAmount);\\n\\n function totalValue() external view returns (uint256 value);\\n\\n function checkBalance(address _asset) external view returns (uint256);\\n\\n function calculateRedeemOutputs(uint256 _amount)\\n external\\n view\\n returns (uint256[] memory);\\n\\n function getAssetCount() external view returns (uint256);\\n\\n function getAssetConfig(address _asset)\\n external\\n view\\n returns (VaultStorage.Asset memory config);\\n\\n function getAllAssets() external view returns (address[] memory);\\n\\n function getStrategyCount() external view returns (uint256);\\n\\n function swapper() external view returns (address);\\n\\n function allowedSwapUndervalue() external view returns (uint256);\\n\\n function getAllStrategies() external view returns (address[] memory);\\n\\n function isSupportedAsset(address _asset) external view returns (bool);\\n\\n function netOusdMintForStrategyThreshold() external view returns (uint256);\\n\\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\\n\\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\\n\\n function netOusdMintedForStrategy() external view returns (int256);\\n\\n function weth() external view returns (address);\\n\\n function cacheWETHAssetIndex() external;\\n\\n function wethAssetIndex() external view returns (uint256);\\n\\n function initialize(address, address) external;\\n\\n function setAdminImpl(address) external;\\n\\n function removeAsset(address _asset) external;\\n}\\n\",\"keccak256\":\"0xa03ba17b6224bec26290794760fc807e017260406037b4f812970701888e72c8\",\"license\":\"MIT\"},\"contracts/interfaces/IWETH9.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\ninterface IWETH9 {\\n event Approval(address indexed src, address indexed guy, uint256 wad);\\n event Deposit(address indexed dst, uint256 wad);\\n event Transfer(address indexed src, address indexed dst, uint256 wad);\\n event Withdrawal(address indexed src, uint256 wad);\\n\\n function allowance(address, address) external view returns (uint256);\\n\\n function approve(address guy, uint256 wad) external returns (bool);\\n\\n function balanceOf(address) external view returns (uint256);\\n\\n function decimals() external view returns (uint8);\\n\\n function deposit() external payable;\\n\\n function name() external view returns (string memory);\\n\\n function symbol() external view returns (string memory);\\n\\n function totalSupply() external view returns (uint256);\\n\\n function transfer(address dst, uint256 wad) external returns (bool);\\n\\n function transferFrom(\\n address src,\\n address dst,\\n uint256 wad\\n ) external returns (bool);\\n\\n function withdraw(uint256 wad) external;\\n}\\n\",\"keccak256\":\"0x05b7dce6c24d3cd4e48b5c6346d86e5e40ecc3291bcdf3f3ef091c98fc826519\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/FeeAccumulator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\n/**\\n * @title Fee Accumulator for Native Staking SSV Strategy\\n * @notice Receives execution rewards which includes tx fees and\\n * MEV rewards like tx priority and tx ordering.\\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\\n * @author Origin Protocol Inc\\n */\\ncontract FeeAccumulator {\\n /// @notice The address of the Native Staking Strategy\\n address public immutable STRATEGY;\\n\\n event ExecutionRewardsCollected(address indexed strategy, uint256 amount);\\n\\n /**\\n * @param _strategy Address of the Native Staking Strategy\\n */\\n constructor(address _strategy) {\\n STRATEGY = _strategy;\\n }\\n\\n /**\\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\\n */\\n function collect() external returns (uint256 eth) {\\n require(msg.sender == STRATEGY, \\\"Caller is not the Strategy\\\");\\n\\n eth = address(this).balance;\\n if (eth > 0) {\\n // Send the ETH to the Native Staking Strategy\\n Address.sendValue(payable(STRATEGY), eth);\\n\\n emit ExecutionRewardsCollected(STRATEGY, eth);\\n }\\n }\\n\\n /**\\n * @dev Accept ETH\\n */\\n receive() external payable {}\\n}\\n\",\"keccak256\":\"0x55ac966612d9e9d48678162b4ddc7aef53807644697206470def52887782d7f4\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport \\\"@openzeppelin/contracts/utils/math/Math.sol\\\";\\n\\nimport { InitializableAbstractStrategy } from \\\"../../utils/InitializableAbstractStrategy.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { FeeAccumulator } from \\\"./FeeAccumulator.sol\\\";\\nimport { ValidatorAccountant } from \\\"./ValidatorAccountant.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/// @title Native Staking SSV Strategy\\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\\n/// @author Origin Protocol Inc\\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\\n/// required since the rewards (reward token) is also in ETH.\\n///\\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\\n/// immediately wraps ETH to WETH and sends it to the Vault.\\n///\\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\\n/// - as a result of already accounted for consensus rewards\\n/// - as a result of not yet accounted for consensus rewards\\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\\n///\\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\\n/// interval and not immediately.\\ncontract NativeStakingSSVStrategy is\\n ValidatorAccountant,\\n InitializableAbstractStrategy\\n{\\n using SafeERC20 for IERC20;\\n\\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\\n address public immutable SSV_TOKEN;\\n /// @notice Fee collector address\\n /// @dev this address will receive Execution layer rewards - These are rewards earned for\\n /// executing transactions on the Ethereum network as part of block proposals. They include\\n /// priority fees (fees paid by users for their transactions to be included) and MEV rewards\\n /// (rewards for arranging transactions in a way that benefits the validator).\\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\\n\\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\\n /// of WETH that has already been accounted for.\\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\\n /// deposit events.\\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\\n /// be staked.\\n uint256 public depositedWethAccountedFor;\\n\\n // For future use\\n uint256[49] private __gap;\\n\\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _ssvToken Address of the Erc20 SSV Token contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n constructor(\\n BaseStrategyConfig memory _baseConfig,\\n address _wethAddress,\\n address _ssvToken,\\n address _ssvNetwork,\\n uint256 _maxValidators,\\n address _feeAccumulator,\\n address _beaconChainDepositContract\\n )\\n InitializableAbstractStrategy(_baseConfig)\\n ValidatorAccountant(\\n _wethAddress,\\n _baseConfig.vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {\\n SSV_TOKEN = _ssvToken;\\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\\n }\\n\\n /// @notice initialize function, to set up initial internal state\\n /// @param _rewardTokenAddresses Address of reward token for platform\\n /// @param _assets Addresses of initial supported assets\\n /// @param _pTokens Platform Token corresponding addresses\\n function initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) external onlyGovernor initializer {\\n InitializableAbstractStrategy._initialize(\\n _rewardTokenAddresses,\\n _assets,\\n _pTokens\\n );\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just checks the asset is WETH and emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _asset Address of asset to deposit. Has to be WETH.\\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\\n function deposit(address _asset, uint256 _amount)\\n external\\n override\\n onlyVault\\n nonReentrant\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n depositedWethAccountedFor += _amount;\\n _deposit(_asset, _amount);\\n }\\n\\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\\n /// @param _asset Address of WETH\\n /// @param _amount Amount of WETH to deposit\\n function _deposit(address _asset, uint256 _amount) internal {\\n require(_amount > 0, \\\"Must deposit something\\\");\\n /*\\n * We could do a check here that would revert when \\\"_amount % 32 ether != 0\\\". With the idea of\\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\\n * of 32ETH have been staked.\\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\\n *\\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\\n */\\n emit Deposit(_asset, address(0), _amount);\\n }\\n\\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\\n /// It just emits the Deposit event.\\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function depositAll() external override onlyVault nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\\n\\n if (newWeth > 0) {\\n depositedWethAccountedFor = wethBalance;\\n\\n _deposit(WETH, newWeth);\\n }\\n }\\n\\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\\n /// That can happen when:\\n /// - after mints if the strategy is the default\\n /// - time between depositToStrategy and stakeEth\\n /// - the deposit was not a multiple of 32 WETH\\n /// - someone sent WETH directly to this contract\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n /// @param _recipient Address to receive withdrawn assets\\n /// @param _asset WETH to withdraw\\n /// @param _amount Amount of WETH to withdraw\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external override onlyVault nonReentrant {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n _withdraw(_recipient, _asset, _amount);\\n }\\n\\n function _withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) internal {\\n require(_amount > 0, \\\"Must withdraw something\\\");\\n require(_recipient != address(0), \\\"Must specify recipient\\\");\\n\\n _wethWithdrawn(_amount);\\n\\n IERC20(_asset).safeTransfer(_recipient, _amount);\\n emit Withdrawal(_asset, address(0), _amount);\\n }\\n\\n /// @notice transfer all WETH deposits back to the vault.\\n /// This does not withdraw from the validators. That has to be done separately with the\\n /// `exitSsvValidator` and `removeSsvValidator` operations.\\n /// This does not withdraw any execution rewards from the FeeAccumulator or\\n /// consensus rewards in this strategy.\\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\\n /// Will NOT revert if the strategy is paused from an accounting failure.\\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\\n if (wethBalance > 0) {\\n _withdraw(vaultAddress, WETH, wethBalance);\\n }\\n }\\n\\n /// @notice Returns the total value of (W)ETH that is staked to the validators\\n /// and WETH deposits that are still to be staked.\\n /// This does not include ETH from consensus rewards sitting in this strategy\\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\\n /// @param _asset Address of weth asset\\n /// @return balance Total value of (W)ETH\\n function checkBalance(address _asset)\\n external\\n view\\n override\\n returns (uint256 balance)\\n {\\n require(_asset == WETH, \\\"Unsupported asset\\\");\\n\\n balance =\\n // add the ETH that has been staked in validators\\n activeDepositedValidators *\\n FULL_STAKE +\\n // add the WETH in the strategy from deposits that are still to be staked\\n IERC20(WETH).balanceOf(address(this));\\n }\\n\\n function pause() external onlyStrategist {\\n _pause();\\n }\\n\\n /// @notice Returns bool indicating whether asset is supported by strategy.\\n /// @param _asset The address of the asset token.\\n function supportsAsset(address _asset) public view override returns (bool) {\\n return _asset == WETH;\\n }\\n\\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\\n function safeApproveAllTokens() external override {\\n /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits\\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\\n }\\n\\n /**\\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\\n * unwrapping WETH just before staking it to the validator\\n * @dev don't want to receive donations from anyone else as this will\\n * mess with the accounting of the consensus rewards and validator full withdrawals\\n */\\n receive() external payable {\\n require(\\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\\n \\\"Eth not from allowed contracts\\\"\\n );\\n }\\n\\n /***************************************\\n Internal functions\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address) internal override {}\\n\\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\\n /// Will revert if the strategy is paused for accounting.\\n function _collectRewardTokens() internal override whenNotPaused {\\n // collect ETH from execution rewards from the fee accumulator\\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\\n .collect();\\n\\n // total ETH rewards to be harvested = execution rewards + consensus rewards\\n uint256 ethRewards = executionRewards + consensusRewards;\\n\\n require(\\n address(this).balance >= ethRewards,\\n \\\"Insufficient eth balance\\\"\\n );\\n\\n if (ethRewards > 0) {\\n // reset the counter keeping track of beacon chain consensus rewards\\n consensusRewards = 0;\\n\\n // Convert ETH rewards to WETH\\n IWETH9(WETH).deposit{ value: ethRewards }();\\n\\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\\n }\\n }\\n\\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\\n function _wethWithdrawnToVault(uint256 _amount) internal override {\\n emit Withdrawal(WETH, address(0), _amount);\\n }\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal override {\\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\\n * depositedWethAccountedFor is smaller than the _amount.\\n *\\n * The reason this is required is that a malicious actor could sent WETH directly\\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\\n * be deducted so much that it would be negative.\\n */\\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\\n depositedWethAccountedFor -= deductAmount;\\n }\\n}\\n\",\"keccak256\":\"0xd8c9e9fcf4f44909a7f9a04ec58ca6134ac0a3fe0ac4f59c970116c028bcc2d3\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorAccountant.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { ValidatorRegistrator } from \\\"./ValidatorRegistrator.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\n\\n/// @title Validator Accountant\\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\\n/// Full withdrawals are from exited validators.\\n/// @author Origin Protocol Inc\\nabstract contract ValidatorAccountant is ValidatorRegistrator {\\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\\n\\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\\n uint256 public consensusRewards;\\n\\n /// @notice start of fuse interval\\n uint256 public fuseIntervalStart;\\n /// @notice end of fuse interval\\n uint256 public fuseIntervalEnd;\\n /// @notice last block number manuallyFixAccounting has been called\\n uint256 public lastFixAccountingBlockNumber;\\n\\n uint256[49] private __gap;\\n\\n event FuseIntervalUpdated(uint256 start, uint256 end);\\n event AccountingFullyWithdrawnValidator(\\n uint256 noOfValidators,\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingValidatorSlashed(\\n uint256 remainingValidators,\\n uint256 wethSentToVault\\n );\\n event AccountingConsensusRewards(uint256 amount);\\n\\n event AccountingManuallyFixed(\\n int256 validatorsDelta,\\n int256 consensusRewardsDelta,\\n uint256 wethToVault\\n );\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n )\\n ValidatorRegistrator(\\n _wethAddress,\\n _vaultAddress,\\n _beaconChainDepositContract,\\n _ssvNetwork,\\n _maxValidators\\n )\\n {}\\n\\n /// @notice set fuse interval values\\n function setFuseInterval(\\n uint256 _fuseIntervalStart,\\n uint256 _fuseIntervalEnd\\n ) external onlyGovernor {\\n require(\\n _fuseIntervalStart < _fuseIntervalEnd &&\\n _fuseIntervalEnd < 32 ether &&\\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\\n \\\"Incorrect fuse interval\\\"\\n );\\n\\n fuseIntervalStart = _fuseIntervalStart;\\n fuseIntervalEnd = _fuseIntervalEnd;\\n\\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\\n }\\n\\n /* solhint-disable max-line-length */\\n /// This notion page offers a good explanation of how the accounting functions\\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\\n /// the accounting function will treat that as a validator slashing.\\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\\n /// accounting is valid and fuse isn't \\\"blown\\\". Returns false when fuse is blown.\\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\\n /// for now.\\n /// @return accountingValid true if accounting was successful, false if fuse is blown\\n /* solhint-enable max-line-length */\\n function doAccounting()\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n returns (bool accountingValid)\\n {\\n // pause the accounting on failure\\n accountingValid = _doAccounting(true);\\n }\\n\\n // slither-disable-start reentrancy-eth\\n function _doAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n if (address(this).balance < consensusRewards) {\\n return _failAccounting(pauseOnFail);\\n }\\n\\n // Calculate all the new ETH that has been swept to the contract since the last accounting\\n uint256 newSweptETH = address(this).balance - consensusRewards;\\n accountingValid = true;\\n\\n // send the ETH that is from fully withdrawn validators to the Vault\\n if (newSweptETH >= FULL_STAKE) {\\n uint256 fullyWithdrawnValidators;\\n // explicitly cast to uint256 as we want to round to a whole number of validators\\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\\n activeDepositedValidators -= fullyWithdrawnValidators;\\n\\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\\n IWETH9(WETH).deposit{ value: wethToVault }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\\n _wethWithdrawnToVault(wethToVault);\\n\\n emit AccountingFullyWithdrawnValidator(\\n fullyWithdrawnValidators,\\n activeDepositedValidators,\\n wethToVault\\n );\\n }\\n\\n uint256 ethRemaining = address(this).balance - consensusRewards;\\n // should be less than a whole validator stake\\n require(ethRemaining < FULL_STAKE, \\\"Unexpected accounting\\\");\\n\\n // If no Beacon chain consensus rewards swept\\n if (ethRemaining == 0) {\\n // do nothing\\n return accountingValid;\\n } else if (ethRemaining < fuseIntervalStart) {\\n // Beacon chain consensus rewards swept (partial validator withdrawals)\\n // solhint-disable-next-line reentrancy\\n consensusRewards += ethRemaining;\\n emit AccountingConsensusRewards(ethRemaining);\\n } else if (ethRemaining > fuseIntervalEnd) {\\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\\n IWETH9(WETH).deposit{ value: ethRemaining }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\\n activeDepositedValidators -= 1;\\n\\n _wethWithdrawnToVault(ethRemaining);\\n\\n emit AccountingValidatorSlashed(\\n activeDepositedValidators,\\n ethRemaining\\n );\\n }\\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\\n else {\\n return _failAccounting(pauseOnFail);\\n }\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @dev pause any further accounting if required and return false\\n function _failAccounting(bool pauseOnFail)\\n internal\\n returns (bool accountingValid)\\n {\\n // pause if not already\\n if (pauseOnFail) {\\n _pause();\\n }\\n // fail the accounting\\n accountingValid = false;\\n }\\n\\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\\n /// to \\\"dip into\\\"/use. To increase the amount of unaccounted ETH over the fuse end interval\\n /// we need to reduce the amount of active deposited validators and immediately send WETH\\n /// to the vault, so it doesn't interfere with further accounting.\\n function manuallyFixAccounting(\\n int256 _validatorsDelta,\\n int256 _consensusRewardsDelta,\\n uint256 _ethToVaultAmount\\n ) external onlyStrategist whenPaused nonReentrant {\\n require(\\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\\n block.number,\\n \\\"Fix accounting called too soon\\\"\\n );\\n require(\\n _validatorsDelta >= -3 &&\\n _validatorsDelta <= 3 &&\\n // new value must be positive\\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\\n \\\"Invalid validatorsDelta\\\"\\n );\\n require(\\n _consensusRewardsDelta >= -332 ether &&\\n _consensusRewardsDelta <= 332 ether &&\\n // new value must be positive\\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\\n \\\"Invalid consensusRewardsDelta\\\"\\n );\\n require(_ethToVaultAmount <= 32 ether * 3, \\\"Invalid wethToVaultAmount\\\");\\n\\n activeDepositedValidators = uint256(\\n int256(activeDepositedValidators) + _validatorsDelta\\n );\\n consensusRewards = uint256(\\n int256(consensusRewards) + _consensusRewardsDelta\\n );\\n lastFixAccountingBlockNumber = block.number;\\n if (_ethToVaultAmount > 0) {\\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\\n // slither-disable-next-line unchecked-transfer\\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\\n _wethWithdrawnToVault(_ethToVaultAmount);\\n }\\n\\n emit AccountingManuallyFixed(\\n _validatorsDelta,\\n _consensusRewardsDelta,\\n _ethToVaultAmount\\n );\\n\\n // rerun the accounting to see if it has now been fixed.\\n // Do not pause the accounting on failure as it is already paused\\n require(_doAccounting(false), \\\"Fuse still blown\\\");\\n\\n // unpause since doAccounting was successful\\n _unpause();\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0xeeb0a7154b30156331f790d50ae82ce56be4c6589080a3bdd53fb6cf4815ec56\",\"license\":\"MIT\"},\"contracts/strategies/NativeStaking/ValidatorRegistrator.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { Pausable } from \\\"@openzeppelin/contracts/security/Pausable.sol\\\";\\nimport { Governable } from \\\"../../governance/Governable.sol\\\";\\nimport { IDepositContract } from \\\"../../interfaces/IDepositContract.sol\\\";\\nimport { IVault } from \\\"../../interfaces/IVault.sol\\\";\\nimport { IWETH9 } from \\\"../../interfaces/IWETH9.sol\\\";\\nimport { ISSVNetwork, Cluster } from \\\"../../interfaces/ISSVNetwork.sol\\\";\\n\\nstruct ValidatorStakeData {\\n bytes pubkey;\\n bytes signature;\\n bytes32 depositDataRoot;\\n}\\n\\n/**\\n * @title Registrator of the validators\\n * @notice This contract implements all the required functionality to register, exit and remove validators.\\n * @author Origin Protocol Inc\\n */\\nabstract contract ValidatorRegistrator is Governable, Pausable {\\n /// @notice The maximum amount of ETH that can be staked by a validator\\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\\n uint256 public constant FULL_STAKE = 32 ether;\\n\\n /// @notice The address of the Wrapped ETH (WETH) token contract\\n address public immutable WETH;\\n /// @notice The address of the beacon chain deposit contract\\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\\n /// @notice The address of the SSV Network contract used to interface with\\n address public immutable SSV_NETWORK;\\n /// @notice Address of the OETH Vault proxy contract\\n address public immutable VAULT_ADDRESS;\\n /// @notice Maximum number of validators that can be registered in this strategy\\n uint256 public immutable MAX_VALIDATORS;\\n\\n /// @notice Address of the registrator - allowed to register, exit and remove validators\\n address public validatorRegistrator;\\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\\n /// to a validator happens this number increases, when a validator exit is detected this number\\n /// decreases.\\n uint256 public activeDepositedValidators;\\n /// @notice State of the validators keccak256(pubKey) => state\\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\\n address public stakingMonitor;\\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\\n /// and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\\n uint256 public stakeETHThreshold;\\n /// @notice Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`.\\n /// This can not go above `stakeETHThreshold`.\\n uint256 public stakeETHTally;\\n // For future use\\n uint256[47] private __gap;\\n\\n enum VALIDATOR_STATE {\\n NON_REGISTERED, // validator is not registered on the SSV network\\n REGISTERED, // validator is registered on the SSV network\\n STAKED, // validator has funds staked\\n EXITING, // exit message has been posted and validator is in the process of exiting\\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\\n }\\n\\n event RegistratorChanged(address indexed newAddress);\\n event StakingMonitorChanged(address indexed newAddress);\\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\\n event SSVValidatorRegistered(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitInitiated(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event SSVValidatorExitCompleted(\\n bytes32 indexed pubKeyHash,\\n bytes pubKey,\\n uint64[] operatorIds\\n );\\n event StakeETHThresholdChanged(uint256 amount);\\n event StakeETHTallyReset();\\n\\n /// @dev Throws if called by any account other than the Registrator\\n modifier onlyRegistrator() {\\n require(\\n msg.sender == validatorRegistrator,\\n \\\"Caller is not the Registrator\\\"\\n );\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Staking monitor\\n modifier onlyStakingMonitor() {\\n require(msg.sender == stakingMonitor, \\\"Caller is not the Monitor\\\");\\n _;\\n }\\n\\n /// @dev Throws if called by any account other than the Strategist\\n modifier onlyStrategist() {\\n require(\\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\\n \\\"Caller is not the Strategist\\\"\\n );\\n _;\\n }\\n\\n /// @param _wethAddress Address of the Erc20 WETH Token contract\\n /// @param _vaultAddress Address of the Vault\\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\\n /// @param _ssvNetwork Address of the SSV Network contract\\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\\n constructor(\\n address _wethAddress,\\n address _vaultAddress,\\n address _beaconChainDepositContract,\\n address _ssvNetwork,\\n uint256 _maxValidators\\n ) {\\n WETH = _wethAddress;\\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\\n SSV_NETWORK = _ssvNetwork;\\n VAULT_ADDRESS = _vaultAddress;\\n MAX_VALIDATORS = _maxValidators;\\n }\\n\\n /// @notice Set the address of the registrator which can register, exit and remove validators\\n function setRegistrator(address _address) external onlyGovernor {\\n validatorRegistrator = _address;\\n emit RegistratorChanged(_address);\\n }\\n\\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\\n function setStakingMonitor(address _address) external onlyGovernor {\\n stakingMonitor = _address;\\n emit StakingMonitorChanged(_address);\\n }\\n\\n /// @notice Set the amount of ETH that can be staked before staking monitor\\n // needs to a approve further staking by resetting the stake ETH tally\\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\\n stakeETHThreshold = _amount;\\n emit StakeETHThresholdChanged(_amount);\\n }\\n\\n /// @notice Reset the stakeETHTally\\n function resetStakeETHTally() external onlyStakingMonitor {\\n stakeETHTally = 0;\\n emit StakeETHTallyReset();\\n }\\n\\n /// @notice Stakes WETH to the node validators\\n /// @param validators A list of validator data needed to stake.\\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\\n /// Only the registrator can call this function.\\n // slither-disable-start reentrancy-eth\\n function stakeEth(ValidatorStakeData[] calldata validators)\\n external\\n onlyRegistrator\\n whenNotPaused\\n nonReentrant\\n {\\n uint256 requiredETH = validators.length * FULL_STAKE;\\n\\n // Check there is enough WETH from the deposits sitting in this strategy contract\\n require(\\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\\n \\\"Insufficient WETH\\\"\\n );\\n require(\\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\\n \\\"Max validators reached\\\"\\n );\\n\\n require(\\n stakeETHTally + requiredETH <= stakeETHThreshold,\\n \\\"Staking ETH over threshold\\\"\\n );\\n stakeETHTally += requiredETH;\\n\\n // Convert required ETH from WETH\\n IWETH9(WETH).withdraw(requiredETH);\\n _wethWithdrawn(requiredETH);\\n\\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\\n * can sweep funds to.\\n * bytes11(0) to fill up the required zeros\\n * remaining bytes20 are for the address\\n */\\n bytes memory withdrawalCredentials = abi.encodePacked(\\n bytes1(0x01),\\n bytes11(0),\\n address(this)\\n );\\n\\n // For each validator\\n for (uint256 i = 0; i < validators.length; ++i) {\\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\\n\\n require(\\n validatorsStates[pubKeyHash] == VALIDATOR_STATE.REGISTERED,\\n \\\"Validator not registered\\\"\\n );\\n\\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\\n value: FULL_STAKE\\n }(\\n validators[i].pubkey,\\n withdrawalCredentials,\\n validators[i].signature,\\n validators[i].depositDataRoot\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\\n\\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\\n }\\n // save gas by changing this storage variable only once rather each time in the loop.\\n activeDepositedValidators += validators.length;\\n }\\n\\n // slither-disable-end reentrancy-eth\\n\\n /// @notice Registers a new validator in the SSV Cluster.\\n /// Only the registrator can call this function.\\n /// @param publicKeys The public keys of the validators\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param sharesData The shares data for each validator\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function registerSsvValidators(\\n bytes[] calldata publicKeys,\\n uint64[] calldata operatorIds,\\n bytes[] calldata sharesData,\\n uint256 ssvAmount,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n require(\\n publicKeys.length == sharesData.length,\\n \\\"Pubkey sharesData mismatch\\\"\\n );\\n // Check each public key has not already been used\\n bytes32 pubKeyHash;\\n VALIDATOR_STATE currentState;\\n for (uint256 i = 0; i < publicKeys.length; ++i) {\\n pubKeyHash = keccak256(publicKeys[i]);\\n currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.NON_REGISTERED,\\n \\\"Validator already registered\\\"\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\\n\\n emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds);\\n }\\n\\n ISSVNetwork(SSV_NETWORK).bulkRegisterValidator(\\n publicKeys,\\n operatorIds,\\n sharesData,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Exit a validator from the Beacon chain.\\n /// The staked ETH will eventually swept to this native staking strategy.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n // slither-disable-start reentrancy-no-eth\\n function exitSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(currentState == VALIDATOR_STATE.STAKED, \\\"Validator not staked\\\");\\n\\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\\n\\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Remove a validator from the SSV Cluster.\\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\\n /// Only the registrator can call this function.\\n /// @param publicKey The public key of the validator\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n // slither-disable-start reentrancy-no-eth\\n function removeSsvValidator(\\n bytes calldata publicKey,\\n uint64[] calldata operatorIds,\\n Cluster calldata cluster\\n ) external onlyRegistrator whenNotPaused {\\n bytes32 pubKeyHash = keccak256(publicKey);\\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\\n require(\\n currentState == VALIDATOR_STATE.EXITING,\\n \\\"Validator not exiting\\\"\\n );\\n\\n ISSVNetwork(SSV_NETWORK).removeValidator(\\n publicKey,\\n operatorIds,\\n cluster\\n );\\n\\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\\n\\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\\n }\\n\\n // slither-disable-end reentrancy-no-eth\\n\\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\\n /// uses \\\"onlyStrategist\\\" modifier so continuous front-running can't DOS our maintenance service\\n /// that tries to top up SSV tokens.\\n /// @param operatorIds The operator IDs of the SSV Cluster\\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\\n /// @param cluster The SSV cluster details including the validator count and SSV balance\\n function depositSSV(\\n uint64[] memory operatorIds,\\n uint256 ssvAmount,\\n Cluster memory cluster\\n ) external onlyStrategist {\\n ISSVNetwork(SSV_NETWORK).deposit(\\n address(this),\\n operatorIds,\\n ssvAmount,\\n cluster\\n );\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\\n /// the strategy knows how much WETH it has on deposit.\\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\\n function _wethWithdrawn(uint256 _amount) internal virtual;\\n}\\n\",\"keccak256\":\"0x1c61ef99bfa366f04cfc11f330cf96e0cf976e3d563a921994ff4b6f3d0bc3b2\",\"license\":\"MIT\"},\"contracts/token/OUSD.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OUSD Token Contract\\n * @dev ERC20 compatible contract for OUSD\\n * @dev Implements an elastic supply\\n * @author Origin Protocol Inc\\n */\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { InitializableERC20Detailed } from \\\"../utils/InitializableERC20Detailed.sol\\\";\\nimport { StableMath } from \\\"../utils/StableMath.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\n\\n/**\\n * NOTE that this is an ERC20 token but the invariant that the sum of\\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\\n * rebasing design. Any integrations with OUSD should be aware.\\n */\\n\\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\\n using SafeMath for uint256;\\n using StableMath for uint256;\\n\\n event TotalSupplyUpdatedHighres(\\n uint256 totalSupply,\\n uint256 rebasingCredits,\\n uint256 rebasingCreditsPerToken\\n );\\n event AccountRebasingEnabled(address account);\\n event AccountRebasingDisabled(address account);\\n\\n enum RebaseOptions {\\n NotSet,\\n OptOut,\\n OptIn\\n }\\n\\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\\n uint256 public _totalSupply;\\n mapping(address => mapping(address => uint256)) private _allowances;\\n address public vaultAddress = address(0);\\n mapping(address => uint256) private _creditBalances;\\n uint256 private _rebasingCredits;\\n uint256 private _rebasingCreditsPerToken;\\n // Frozen address/credits are non rebasing (value is held in contracts which\\n // do not receive yield unless they explicitly opt in)\\n uint256 public nonRebasingSupply;\\n mapping(address => uint256) public nonRebasingCreditsPerToken;\\n mapping(address => RebaseOptions) public rebaseState;\\n mapping(address => uint256) public isUpgraded;\\n\\n uint256 private constant RESOLUTION_INCREASE = 1e9;\\n\\n function initialize(\\n string calldata _nameArg,\\n string calldata _symbolArg,\\n address _vaultAddress,\\n uint256 _initialCreditsPerToken\\n ) external onlyGovernor initializer {\\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\\n _rebasingCreditsPerToken = _initialCreditsPerToken;\\n vaultAddress = _vaultAddress;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault contract\\n */\\n modifier onlyVault() {\\n require(vaultAddress == msg.sender, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @return The total supply of OUSD.\\n */\\n function totalSupply() public view override returns (uint256) {\\n return _totalSupply;\\n }\\n\\n /**\\n * @return Low resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerToken() public view returns (uint256) {\\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return Low resolution total number of rebasing credits\\n */\\n function rebasingCredits() public view returns (uint256) {\\n return _rebasingCredits / RESOLUTION_INCREASE;\\n }\\n\\n /**\\n * @return High resolution rebasingCreditsPerToken\\n */\\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\\n return _rebasingCreditsPerToken;\\n }\\n\\n /**\\n * @return High resolution total number of rebasing credits\\n */\\n function rebasingCreditsHighres() public view returns (uint256) {\\n return _rebasingCredits;\\n }\\n\\n /**\\n * @dev Gets the balance of the specified address.\\n * @param _account Address to query the balance of.\\n * @return A uint256 representing the amount of base units owned by the\\n * specified address.\\n */\\n function balanceOf(address _account)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n if (_creditBalances[_account] == 0) return 0;\\n return\\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @dev Backwards compatible with old low res credits per token.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256) Credit balance and credits per token of the\\n * address\\n */\\n function creditsBalanceOf(address _account)\\n public\\n view\\n returns (uint256, uint256)\\n {\\n uint256 cpt = _creditsPerToken(_account);\\n if (cpt == 1e27) {\\n // For a period before the resolution upgrade, we created all new\\n // contract accounts at high resolution. Since they are not changing\\n // as a result of this upgrade, we will return their true values\\n return (_creditBalances[_account], cpt);\\n } else {\\n return (\\n _creditBalances[_account] / RESOLUTION_INCREASE,\\n cpt / RESOLUTION_INCREASE\\n );\\n }\\n }\\n\\n /**\\n * @dev Gets the credits balance of the specified address.\\n * @param _account The address to query the balance of.\\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\\n * address, and isUpgraded\\n */\\n function creditsBalanceOfHighres(address _account)\\n public\\n view\\n returns (\\n uint256,\\n uint256,\\n bool\\n )\\n {\\n return (\\n _creditBalances[_account],\\n _creditsPerToken(_account),\\n isUpgraded[_account] == 1\\n );\\n }\\n\\n /**\\n * @dev Transfer tokens to a specified address.\\n * @param _to the address to transfer to.\\n * @param _value the amount to be transferred.\\n * @return true on success.\\n */\\n function transfer(address _to, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(\\n _value <= balanceOf(msg.sender),\\n \\\"Transfer greater than balance\\\"\\n );\\n\\n _executeTransfer(msg.sender, _to, _value);\\n\\n emit Transfer(msg.sender, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Transfer tokens from one address to another.\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value The amount of tokens to be transferred.\\n */\\n function transferFrom(\\n address _from,\\n address _to,\\n uint256 _value\\n ) public override returns (bool) {\\n require(_to != address(0), \\\"Transfer to zero address\\\");\\n require(_value <= balanceOf(_from), \\\"Transfer greater than balance\\\");\\n\\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\\n _value\\n );\\n\\n _executeTransfer(_from, _to, _value);\\n\\n emit Transfer(_from, _to, _value);\\n\\n return true;\\n }\\n\\n /**\\n * @dev Update the count of non rebasing credits in response to a transfer\\n * @param _from The address you want to send tokens from.\\n * @param _to The address you want to transfer to.\\n * @param _value Amount of OUSD to transfer\\n */\\n function _executeTransfer(\\n address _from,\\n address _to,\\n uint256 _value\\n ) internal {\\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\\n\\n // Credits deducted and credited might be different due to the\\n // differing creditsPerToken used by each account\\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\\n\\n _creditBalances[_from] = _creditBalances[_from].sub(\\n creditsDeducted,\\n \\\"Transfer amount exceeds balance\\\"\\n );\\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\\n\\n if (isNonRebasingTo && !isNonRebasingFrom) {\\n // Transfer to non-rebasing account from rebasing account, credits\\n // are removed from the non rebasing tally\\n nonRebasingSupply = nonRebasingSupply.add(_value);\\n // Update rebasingCredits by subtracting the deducted amount\\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\\n // Transfer to rebasing account from non-rebasing account\\n // Decreasing non-rebasing credits by the amount that was sent\\n nonRebasingSupply = nonRebasingSupply.sub(_value);\\n // Update rebasingCredits by adding the credited amount\\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\\n }\\n }\\n\\n /**\\n * @dev Function to check the amount of tokens that _owner has allowed to\\n * `_spender`.\\n * @param _owner The address which owns the funds.\\n * @param _spender The address which will spend the funds.\\n * @return The number of tokens still available for the _spender.\\n */\\n function allowance(address _owner, address _spender)\\n public\\n view\\n override\\n returns (uint256)\\n {\\n return _allowances[_owner][_spender];\\n }\\n\\n /**\\n * @dev Approve the passed address to spend the specified amount of tokens\\n * on behalf of msg.sender. This method is included for ERC20\\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\\n * used instead.\\n *\\n * Changing an allowance with this method brings the risk that someone\\n * may transfer both the old and the new allowance - if they are both\\n * greater than zero - if a transfer transaction is mined before the\\n * later approve() call is mined.\\n * @param _spender The address which will spend the funds.\\n * @param _value The amount of tokens to be spent.\\n */\\n function approve(address _spender, uint256 _value)\\n public\\n override\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _value;\\n emit Approval(msg.sender, _spender, _value);\\n return true;\\n }\\n\\n /**\\n * @dev Increase the amount of tokens that an owner has allowed to\\n * `_spender`.\\n * This method should be used instead of approve() to avoid the double\\n * approval vulnerability described above.\\n * @param _spender The address which will spend the funds.\\n * @param _addedValue The amount of tokens to increase the allowance by.\\n */\\n function increaseAllowance(address _spender, uint256 _addedValue)\\n public\\n returns (bool)\\n {\\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\\n .add(_addedValue);\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Decrease the amount of tokens that an owner has allowed to\\n `_spender`.\\n * @param _spender The address which will spend the funds.\\n * @param _subtractedValue The amount of tokens to decrease the allowance\\n * by.\\n */\\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\\n public\\n returns (bool)\\n {\\n uint256 oldValue = _allowances[msg.sender][_spender];\\n if (_subtractedValue >= oldValue) {\\n _allowances[msg.sender][_spender] = 0;\\n } else {\\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\\n }\\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\\n return true;\\n }\\n\\n /**\\n * @dev Mints new tokens, increasing totalSupply.\\n */\\n function mint(address _account, uint256 _amount) external onlyVault {\\n _mint(_account, _amount);\\n }\\n\\n /**\\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\\n * the total supply.\\n *\\n * Emits a {Transfer} event with `from` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `to` cannot be the zero address.\\n */\\n function _mint(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Mint to the zero address\\\");\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\\n\\n // If the account is non rebasing and doesn't have a set creditsPerToken\\n // then set it i.e. this is a mint from a fresh contract\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.add(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.add(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.add(_amount);\\n\\n require(_totalSupply < MAX_SUPPLY, \\\"Max supply\\\");\\n\\n emit Transfer(address(0), _account, _amount);\\n }\\n\\n /**\\n * @dev Burns tokens, decreasing totalSupply.\\n */\\n function burn(address account, uint256 amount) external onlyVault {\\n _burn(account, amount);\\n }\\n\\n /**\\n * @dev Destroys `_amount` tokens from `_account`, reducing the\\n * total supply.\\n *\\n * Emits a {Transfer} event with `to` set to the zero address.\\n *\\n * Requirements\\n *\\n * - `_account` cannot be the zero address.\\n * - `_account` must have at least `_amount` tokens.\\n */\\n function _burn(address _account, uint256 _amount) internal nonReentrant {\\n require(_account != address(0), \\\"Burn from the zero address\\\");\\n if (_amount == 0) {\\n return;\\n }\\n\\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\\n uint256 currentCredits = _creditBalances[_account];\\n\\n // Remove the credits, burning rounding errors\\n if (\\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\\n ) {\\n // Handle dust from rounding\\n _creditBalances[_account] = 0;\\n } else if (currentCredits > creditAmount) {\\n _creditBalances[_account] = _creditBalances[_account].sub(\\n creditAmount\\n );\\n } else {\\n revert(\\\"Remove exceeds balance\\\");\\n }\\n\\n // Remove from the credit tallies and non-rebasing supply\\n if (isNonRebasingAccount) {\\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\\n } else {\\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\\n }\\n\\n _totalSupply = _totalSupply.sub(_amount);\\n\\n emit Transfer(_account, address(0), _amount);\\n }\\n\\n /**\\n * @dev Get the credits per token for an account. Returns a fixed amount\\n * if the account is non-rebasing.\\n * @param _account Address of the account.\\n */\\n function _creditsPerToken(address _account)\\n internal\\n view\\n returns (uint256)\\n {\\n if (nonRebasingCreditsPerToken[_account] != 0) {\\n return nonRebasingCreditsPerToken[_account];\\n } else {\\n return _rebasingCreditsPerToken;\\n }\\n }\\n\\n /**\\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\\n * Also, ensure contracts are non-rebasing if they have not opted in.\\n * @param _account Address of the account.\\n */\\n function _isNonRebasingAccount(address _account) internal returns (bool) {\\n bool isContract = Address.isContract(_account);\\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\\n _ensureRebasingMigration(_account);\\n }\\n return nonRebasingCreditsPerToken[_account] > 0;\\n }\\n\\n /**\\n * @dev Ensures internal account for rebasing and non-rebasing credits and\\n * supply is updated following deployment of frozen yield change.\\n */\\n function _ensureRebasingMigration(address _account) internal {\\n if (nonRebasingCreditsPerToken[_account] == 0) {\\n emit AccountRebasingDisabled(_account);\\n if (_creditBalances[_account] == 0) {\\n // Since there is no existing balance, we can directly set to\\n // high resolution, and do not have to do any other bookkeeping\\n nonRebasingCreditsPerToken[_account] = 1e27;\\n } else {\\n // Migrate an existing account:\\n\\n // Set fixed credits per token for this account\\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\\n // Update non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\\n // Update credit tallies\\n _rebasingCredits = _rebasingCredits.sub(\\n _creditBalances[_account]\\n );\\n }\\n }\\n }\\n\\n /**\\n * @notice Enable rebasing for an account.\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n * @param _account Address of the account.\\n */\\n function governanceRebaseOptIn(address _account)\\n public\\n nonReentrant\\n onlyGovernor\\n {\\n _rebaseOptIn(_account);\\n }\\n\\n /**\\n * @dev Add a contract address to the non-rebasing exception list. The\\n * address's balance will be part of rebases and the account will be exposed\\n * to upside and downside.\\n */\\n function rebaseOptIn() public nonReentrant {\\n _rebaseOptIn(msg.sender);\\n }\\n\\n function _rebaseOptIn(address _account) internal {\\n require(_isNonRebasingAccount(_account), \\\"Account has not opted out\\\");\\n\\n // Convert balance into the same amount at the current exchange rate\\n uint256 newCreditBalance = _creditBalances[_account]\\n .mul(_rebasingCreditsPerToken)\\n .div(_creditsPerToken(_account));\\n\\n // Decreasing non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\\n\\n _creditBalances[_account] = newCreditBalance;\\n\\n // Increase rebasing credits, totalSupply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\\n\\n rebaseState[_account] = RebaseOptions.OptIn;\\n\\n // Delete any fixed credits per token\\n delete nonRebasingCreditsPerToken[_account];\\n emit AccountRebasingEnabled(_account);\\n }\\n\\n /**\\n * @dev Explicitly mark that an address is non-rebasing.\\n */\\n function rebaseOptOut() public nonReentrant {\\n require(!_isNonRebasingAccount(msg.sender), \\\"Account has not opted in\\\");\\n\\n // Increase non rebasing supply\\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\\n // Set fixed credits per token\\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\\n\\n // Decrease rebasing credits, total supply remains unchanged so no\\n // adjustment necessary\\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\\n\\n // Mark explicitly opted out of rebasing\\n rebaseState[msg.sender] = RebaseOptions.OptOut;\\n emit AccountRebasingDisabled(msg.sender);\\n }\\n\\n /**\\n * @dev Modify the supply without minting new tokens. This uses a change in\\n * the exchange rate between \\\"credits\\\" and OUSD tokens to change balances.\\n * @param _newTotalSupply New total supply of OUSD.\\n */\\n function changeSupply(uint256 _newTotalSupply)\\n external\\n onlyVault\\n nonReentrant\\n {\\n require(_totalSupply > 0, \\\"Cannot increase 0 supply\\\");\\n\\n if (_totalSupply == _newTotalSupply) {\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n return;\\n }\\n\\n _totalSupply = _newTotalSupply > MAX_SUPPLY\\n ? MAX_SUPPLY\\n : _newTotalSupply;\\n\\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\\n _totalSupply.sub(nonRebasingSupply)\\n );\\n\\n require(_rebasingCreditsPerToken > 0, \\\"Invalid change in supply\\\");\\n\\n _totalSupply = _rebasingCredits\\n .divPrecisely(_rebasingCreditsPerToken)\\n .add(nonRebasingSupply);\\n\\n emit TotalSupplyUpdatedHighres(\\n _totalSupply,\\n _rebasingCredits,\\n _rebasingCreditsPerToken\\n );\\n }\\n}\\n\",\"keccak256\":\"0x2dc66b1ba02716d64eb47dd9117fda62650d8b57669e6c351437e0ad29ad5f19\",\"license\":\"MIT\"},\"contracts/utils/Helpers.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IBasicToken } from \\\"../interfaces/IBasicToken.sol\\\";\\n\\nlibrary Helpers {\\n /**\\n * @notice Fetch the `symbol()` from an ERC20 token\\n * @dev Grabs the `symbol()` from a contract\\n * @param _token Address of the ERC20 token\\n * @return string Symbol of the ERC20 token\\n */\\n function getSymbol(address _token) internal view returns (string memory) {\\n string memory symbol = IBasicToken(_token).symbol();\\n return symbol;\\n }\\n\\n /**\\n * @notice Fetch the `decimals()` from an ERC20 token\\n * @dev Grabs the `decimals()` from a contract and fails if\\n * the decimal value does not live within a certain range\\n * @param _token Address of the ERC20 token\\n * @return uint256 Decimals of the ERC20 token\\n */\\n function getDecimals(address _token) internal view returns (uint256) {\\n uint256 decimals = IBasicToken(_token).decimals();\\n require(\\n decimals >= 4 && decimals <= 18,\\n \\\"Token must have sufficient decimal places\\\"\\n );\\n\\n return decimals;\\n }\\n}\\n\",\"keccak256\":\"0x108b7a69e0140da0072ca18f90a03a3340574400f81aa6076cd2cccdf13699c2\",\"license\":\"MIT\"},\"contracts/utils/Initializable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract any contracts that need to initialize state after deployment.\\n * @author Origin Protocol Inc\\n */\\nabstract contract Initializable {\\n /**\\n * @dev Indicates that the contract has been initialized.\\n */\\n bool private initialized;\\n\\n /**\\n * @dev Indicates that the contract is in the process of being initialized.\\n */\\n bool private initializing;\\n\\n /**\\n * @dev Modifier to protect an initializer function from being invoked twice.\\n */\\n modifier initializer() {\\n require(\\n initializing || !initialized,\\n \\\"Initializable: contract is already initialized\\\"\\n );\\n\\n bool isTopLevelCall = !initializing;\\n if (isTopLevelCall) {\\n initializing = true;\\n initialized = true;\\n }\\n\\n _;\\n\\n if (isTopLevelCall) {\\n initializing = false;\\n }\\n }\\n\\n uint256[50] private ______gap;\\n}\\n\",\"keccak256\":\"0xaadbcc138114afed4af4f353c2ced2916e6ee14be91434789187f192caf0d786\",\"license\":\"MIT\"},\"contracts/utils/InitializableAbstractStrategy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title Base contract for vault strategies.\\n * @author Origin Protocol Inc\\n */\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\n\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { IVault } from \\\"../interfaces/IVault.sol\\\";\\n\\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event PTokenAdded(address indexed _asset, address _pToken);\\n event PTokenRemoved(address indexed _asset, address _pToken);\\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\\n event RewardTokenCollected(\\n address recipient,\\n address rewardToken,\\n uint256 amount\\n );\\n event RewardTokenAddressesUpdated(\\n address[] _oldAddresses,\\n address[] _newAddresses\\n );\\n event HarvesterAddressesUpdated(\\n address _oldHarvesterAddress,\\n address _newHarvesterAddress\\n );\\n\\n /// @notice Address of the underlying platform\\n address public immutable platformAddress;\\n /// @notice Address of the OToken vault\\n address public immutable vaultAddress;\\n\\n /// @dev Replaced with an immutable variable\\n // slither-disable-next-line constable-states\\n address private _deprecated_platformAddress;\\n\\n /// @dev Replaced with an immutable\\n // slither-disable-next-line constable-states\\n address private _deprecated_vaultAddress;\\n\\n /// @notice asset => pToken (Platform Specific Token Address)\\n mapping(address => address) public assetToPToken;\\n\\n /// @notice Full list of all assets supported by the strategy\\n address[] internal assetsMapped;\\n\\n // Deprecated: Reward token address\\n // slither-disable-next-line constable-states\\n address private _deprecated_rewardTokenAddress;\\n\\n // Deprecated: now resides in Harvester's rewardTokenConfigs\\n // slither-disable-next-line constable-states\\n uint256 private _deprecated_rewardLiquidationThreshold;\\n\\n /// @notice Address of the Harvester contract allowed to collect reward tokens\\n address public harvesterAddress;\\n\\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\\n address[] public rewardTokenAddresses;\\n\\n /* Reserved for future expansion. Used to be 100 storage slots\\n * and has decreased to accommodate:\\n * - harvesterAddress\\n * - rewardTokenAddresses\\n */\\n int256[98] private _reserved;\\n\\n struct BaseStrategyConfig {\\n address platformAddress; // Address of the underlying platform\\n address vaultAddress; // Address of the OToken's Vault\\n }\\n\\n /**\\n * @param _config The platform and OToken vault addresses\\n */\\n constructor(BaseStrategyConfig memory _config) {\\n platformAddress = _config.platformAddress;\\n vaultAddress = _config.vaultAddress;\\n }\\n\\n /**\\n * @dev Internal initialize function, to set up initial internal state\\n * @param _rewardTokenAddresses Address of reward token for platform\\n * @param _assets Addresses of initial supported assets\\n * @param _pTokens Platform Token corresponding addresses\\n */\\n function _initialize(\\n address[] memory _rewardTokenAddresses,\\n address[] memory _assets,\\n address[] memory _pTokens\\n ) internal {\\n rewardTokenAddresses = _rewardTokenAddresses;\\n\\n uint256 assetCount = _assets.length;\\n require(assetCount == _pTokens.length, \\\"Invalid input arrays\\\");\\n for (uint256 i = 0; i < assetCount; ++i) {\\n _setPTokenAddress(_assets[i], _pTokens[i]);\\n }\\n }\\n\\n /**\\n * @notice Collect accumulated reward token and send to Vault.\\n */\\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\\n _collectRewardTokens();\\n }\\n\\n /**\\n * @dev Default implementation that transfers reward tokens to the Harvester\\n * Implementing strategies need to add custom logic to collect the rewards.\\n */\\n function _collectRewardTokens() internal virtual {\\n uint256 rewardTokenCount = rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\\n uint256 balance = rewardToken.balanceOf(address(this));\\n if (balance > 0) {\\n emit RewardTokenCollected(\\n harvesterAddress,\\n address(rewardToken),\\n balance\\n );\\n rewardToken.safeTransfer(harvesterAddress, balance);\\n }\\n }\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault.\\n */\\n modifier onlyVault() {\\n require(msg.sender == vaultAddress, \\\"Caller is not the Vault\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Harvester.\\n */\\n modifier onlyHarvester() {\\n require(msg.sender == harvesterAddress, \\\"Caller is not the Harvester\\\");\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault or Governor.\\n */\\n modifier onlyVaultOrGovernor() {\\n require(\\n msg.sender == vaultAddress || msg.sender == governor(),\\n \\\"Caller is not the Vault or Governor\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\\n */\\n modifier onlyVaultOrGovernorOrStrategist() {\\n require(\\n msg.sender == vaultAddress ||\\n msg.sender == governor() ||\\n msg.sender == IVault(vaultAddress).strategistAddr(),\\n \\\"Caller is not the Vault, Governor, or Strategist\\\"\\n );\\n _;\\n }\\n\\n /**\\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\\n * @param _rewardTokenAddresses Array of reward token addresses\\n */\\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\\n external\\n onlyGovernor\\n {\\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\\n require(\\n _rewardTokenAddresses[i] != address(0),\\n \\\"Can not set an empty address as a reward token\\\"\\n );\\n }\\n\\n emit RewardTokenAddressesUpdated(\\n rewardTokenAddresses,\\n _rewardTokenAddresses\\n );\\n rewardTokenAddresses = _rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Get the reward token addresses.\\n * @return address[] the reward token addresses.\\n */\\n function getRewardTokenAddresses()\\n external\\n view\\n returns (address[] memory)\\n {\\n return rewardTokenAddresses;\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * This method can only be called by the system Governor\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function setPTokenAddress(address _asset, address _pToken)\\n external\\n virtual\\n onlyGovernor\\n {\\n _setPTokenAddress(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Remove a supported asset by passing its index.\\n * This method can only be called by the system Governor\\n * @param _assetIndex Index of the asset to be removed\\n */\\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\\n require(_assetIndex < assetsMapped.length, \\\"Invalid index\\\");\\n address asset = assetsMapped[_assetIndex];\\n address pToken = assetToPToken[asset];\\n\\n if (_assetIndex < assetsMapped.length - 1) {\\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\\n }\\n assetsMapped.pop();\\n assetToPToken[asset] = address(0);\\n\\n emit PTokenRemoved(asset, pToken);\\n }\\n\\n /**\\n * @notice Provide support for asset by passing its pToken address.\\n * Add to internal mappings and execute the platform specific,\\n * abstract method `_abstractSetPToken`\\n * @param _asset Address for the asset\\n * @param _pToken Address for the corresponding platform token\\n */\\n function _setPTokenAddress(address _asset, address _pToken) internal {\\n require(assetToPToken[_asset] == address(0), \\\"pToken already set\\\");\\n require(\\n _asset != address(0) && _pToken != address(0),\\n \\\"Invalid addresses\\\"\\n );\\n\\n assetToPToken[_asset] = _pToken;\\n assetsMapped.push(_asset);\\n\\n emit PTokenAdded(_asset, _pToken);\\n\\n _abstractSetPToken(_asset, _pToken);\\n }\\n\\n /**\\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\\n * strategy contracts, i.e. mistaken sends.\\n * @param _asset Address for the asset\\n * @param _amount Amount of the asset to transfer\\n */\\n function transferToken(address _asset, uint256 _amount)\\n public\\n onlyGovernor\\n {\\n require(!supportsAsset(_asset), \\\"Cannot transfer supported asset\\\");\\n IERC20(_asset).safeTransfer(governor(), _amount);\\n }\\n\\n /**\\n * @notice Set the Harvester contract that can collect rewards.\\n * @param _harvesterAddress Address of the harvester contract.\\n */\\n function setHarvesterAddress(address _harvesterAddress)\\n external\\n onlyGovernor\\n {\\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\\n harvesterAddress = _harvesterAddress;\\n }\\n\\n /***************************************\\n Abstract\\n ****************************************/\\n\\n function _abstractSetPToken(address _asset, address _pToken)\\n internal\\n virtual;\\n\\n function safeApproveAllTokens() external virtual;\\n\\n /**\\n * @notice Deposit an amount of assets into the platform\\n * @param _asset Address for the asset\\n * @param _amount Units of asset to deposit\\n */\\n function deposit(address _asset, uint256 _amount) external virtual;\\n\\n /**\\n * @notice Deposit all supported assets in this strategy contract to the platform\\n */\\n function depositAll() external virtual;\\n\\n /**\\n * @notice Withdraw an `amount` of assets from the platform and\\n * send to the `_recipient`.\\n * @param _recipient Address to which the asset should be sent\\n * @param _asset Address of the asset\\n * @param _amount Units of asset to withdraw\\n */\\n function withdraw(\\n address _recipient,\\n address _asset,\\n uint256 _amount\\n ) external virtual;\\n\\n /**\\n * @notice Withdraw all supported assets from platform and\\n * sends to the OToken's Vault.\\n */\\n function withdrawAll() external virtual;\\n\\n /**\\n * @notice Get the total asset value held in the platform.\\n * This includes any interest that was generated since depositing.\\n * @param _asset Address of the asset\\n * @return balance Total value of the asset in the platform\\n */\\n function checkBalance(address _asset)\\n external\\n view\\n virtual\\n returns (uint256 balance);\\n\\n /**\\n * @notice Check if an asset is supported.\\n * @param _asset Address of the asset\\n * @return bool Whether asset is supported\\n */\\n function supportsAsset(address _asset) public view virtual returns (bool);\\n}\\n\",\"keccak256\":\"0x5e17bb3db9f9e1014b7c5c836547f8fa81e02af7568c0bb8f2a2e0e7c2192db4\",\"license\":\"MIT\"},\"contracts/utils/InitializableERC20Detailed.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\n\\n/**\\n * @dev Optional functions from the ERC20 standard.\\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\\n * @author Origin Protocol Inc\\n */\\nabstract contract InitializableERC20Detailed is IERC20 {\\n // Storage gap to skip storage from prior to OUSD reset\\n uint256[100] private _____gap;\\n\\n string private _name;\\n string private _symbol;\\n uint8 private _decimals;\\n\\n /**\\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\\n * these values are immutable: they can only be set once during\\n * construction.\\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\\n */\\n function _initialize(\\n string memory nameArg,\\n string memory symbolArg,\\n uint8 decimalsArg\\n ) internal {\\n _name = nameArg;\\n _symbol = symbolArg;\\n _decimals = decimalsArg;\\n }\\n\\n /**\\n * @notice Returns the name of the token.\\n */\\n function name() public view returns (string memory) {\\n return _name;\\n }\\n\\n /**\\n * @notice Returns the symbol of the token, usually a shorter version of the\\n * name.\\n */\\n function symbol() public view returns (string memory) {\\n return _symbol;\\n }\\n\\n /**\\n * @notice Returns the number of decimals used to get its user representation.\\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\\n *\\n * Tokens usually opt for a value of 18, imitating the relationship between\\n * Ether and Wei.\\n *\\n * NOTE: This information is only used for _display_ purposes: it in\\n * no way affects any of the arithmetic of the contract, including\\n * {IERC20-balanceOf} and {IERC20-transfer}.\\n */\\n function decimals() public view returns (uint8) {\\n return _decimals;\\n }\\n}\\n\",\"keccak256\":\"0xe35ac2d813a30d845a3b52bba72588d7e936c2b3f3373d15568c14db46aeed60\",\"license\":\"MIT\"},\"contracts/utils/StableMath.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\nimport { SafeMath } from \\\"@openzeppelin/contracts/utils/math/SafeMath.sol\\\";\\n\\n// Based on StableMath from Stability Labs Pty. Ltd.\\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\\n\\nlibrary StableMath {\\n using SafeMath for uint256;\\n\\n /**\\n * @dev Scaling unit for use in specific calculations,\\n * where 1 * 10**18, or 1e18 represents a unit '1'\\n */\\n uint256 private constant FULL_SCALE = 1e18;\\n\\n /***************************************\\n Helpers\\n ****************************************/\\n\\n /**\\n * @dev Adjust the scale of an integer\\n * @param to Decimals to scale to\\n * @param from Decimals to scale from\\n */\\n function scaleBy(\\n uint256 x,\\n uint256 to,\\n uint256 from\\n ) internal pure returns (uint256) {\\n if (to > from) {\\n x = x.mul(10**(to - from));\\n } else if (to < from) {\\n // slither-disable-next-line divide-before-multiply\\n x = x.div(10**(from - to));\\n }\\n return x;\\n }\\n\\n /***************************************\\n Precise Arithmetic\\n ****************************************/\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\\n return mulTruncateScale(x, y, FULL_SCALE);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @param scale Scale unit\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit\\n */\\n function mulTruncateScale(\\n uint256 x,\\n uint256 y,\\n uint256 scale\\n ) internal pure returns (uint256) {\\n // e.g. assume scale = fullScale\\n // z = 10e18 * 9e17 = 9e36\\n uint256 z = x.mul(y);\\n // return 9e36 / 1e18 = 9e18\\n return z.div(scale);\\n }\\n\\n /**\\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\\n * @param x Left hand input to multiplication\\n * @param y Right hand input to multiplication\\n * @return Result after multiplying the two inputs and then dividing by the shared\\n * scale unit, rounded up to the closest base unit.\\n */\\n function mulTruncateCeil(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e17 * 17268172638 = 138145381104e17\\n uint256 scaled = x.mul(y);\\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\\n return ceil.div(FULL_SCALE);\\n }\\n\\n /**\\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\\n * @param x Left hand input to division\\n * @param y Right hand input to division\\n * @return Result after multiplying the left operand by the scale, and\\n * executing the division on the right hand input.\\n */\\n function divPrecisely(uint256 x, uint256 y)\\n internal\\n pure\\n returns (uint256)\\n {\\n // e.g. 8e18 * 1e18 = 8e36\\n uint256 z = x.mul(FULL_SCALE);\\n // e.g. 8e36 / 10e18 = 8e17\\n return z.div(y);\\n }\\n}\\n\",\"keccak256\":\"0x1eb49f6f79045d9e0a8e1dced8e01d9e559e5fac554dcbb53e43140b601b04e7\",\"license\":\"MIT\"},\"contracts/vault/VaultStorage.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\npragma solidity ^0.8.0;\\n\\n/**\\n * @title OToken VaultStorage contract\\n * @notice The VaultStorage contract defines the storage for the Vault contracts\\n * @author Origin Protocol Inc\\n */\\n\\nimport { IERC20 } from \\\"@openzeppelin/contracts/token/ERC20/IERC20.sol\\\";\\nimport { SafeERC20 } from \\\"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\\\";\\nimport { Address } from \\\"@openzeppelin/contracts/utils/Address.sol\\\";\\n\\nimport { IStrategy } from \\\"../interfaces/IStrategy.sol\\\";\\nimport { Governable } from \\\"../governance/Governable.sol\\\";\\nimport { OUSD } from \\\"../token/OUSD.sol\\\";\\nimport { Initializable } from \\\"../utils/Initializable.sol\\\";\\nimport \\\"../utils/Helpers.sol\\\";\\n\\ncontract VaultStorage is Initializable, Governable {\\n using SafeERC20 for IERC20;\\n\\n event AssetSupported(address _asset);\\n event AssetRemoved(address _asset);\\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\\n event StrategyApproved(address _addr);\\n event StrategyRemoved(address _addr);\\n event Mint(address _addr, uint256 _value);\\n event Redeem(address _addr, uint256 _value);\\n event CapitalPaused();\\n event CapitalUnpaused();\\n event RebasePaused();\\n event RebaseUnpaused();\\n event VaultBufferUpdated(uint256 _vaultBuffer);\\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\\n event PriceProviderUpdated(address _priceProvider);\\n event AllocateThresholdUpdated(uint256 _threshold);\\n event RebaseThresholdUpdated(uint256 _threshold);\\n event StrategistUpdated(address _address);\\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\\n event TrusteeFeeBpsChanged(uint256 _basis);\\n event TrusteeAddressChanged(address _address);\\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\\n event SwapperChanged(address _address);\\n event SwapAllowedUndervalueChanged(uint256 _basis);\\n event SwapSlippageChanged(address _asset, uint256 _basis);\\n event Swapped(\\n address indexed _fromAsset,\\n address indexed _toAsset,\\n uint256 _fromAssetAmount,\\n uint256 _toAssetAmount\\n );\\n\\n // Assets supported by the Vault, i.e. Stablecoins\\n enum UnitConversion {\\n DECIMALS,\\n GETEXCHANGERATE\\n }\\n // Changed to fit into a single storage slot so the decimals needs to be recached\\n struct Asset {\\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\\n // redeeming or checking balance of assets.\\n bool isSupported;\\n UnitConversion unitConversion;\\n uint8 decimals;\\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\\n // For example 40 == 0.4% slippage\\n uint16 allowedOracleSlippageBps;\\n }\\n\\n /// @dev mapping of supported vault assets to their configuration\\n // slither-disable-next-line uninitialized-state\\n mapping(address => Asset) internal assets;\\n /// @dev list of all assets supported by the vault.\\n // slither-disable-next-line uninitialized-state\\n address[] internal allAssets;\\n\\n // Strategies approved for use by the Vault\\n struct Strategy {\\n bool isSupported;\\n uint256 _deprecated; // Deprecated storage slot\\n }\\n /// @dev mapping of strategy contracts to their configiration\\n mapping(address => Strategy) internal strategies;\\n /// @dev list of all vault strategies\\n address[] internal allStrategies;\\n\\n /// @notice Address of the Oracle price provider contract\\n // slither-disable-next-line uninitialized-state\\n address public priceProvider;\\n /// @notice pause rebasing if true\\n bool public rebasePaused = false;\\n /// @notice pause operations that change the OToken supply.\\n /// eg mint, redeem, allocate, mint/burn for strategy\\n bool public capitalPaused = true;\\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\\n uint256 public redeemFeeBps;\\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\\n uint256 public vaultBuffer;\\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\\n uint256 public autoAllocateThreshold;\\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\\n uint256 public rebaseThreshold;\\n\\n /// @dev Address of the OToken token. eg OUSD or OETH.\\n // slither-disable-next-line uninitialized-state\\n OUSD internal oUSD;\\n\\n //keccak256(\\\"OUSD.vault.governor.admin.impl\\\");\\n bytes32 constant adminImplPosition =\\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\\n\\n // Address of the contract responsible for post rebase syncs with AMMs\\n address private _deprecated_rebaseHooksAddr = address(0);\\n\\n // Deprecated: Address of Uniswap\\n // slither-disable-next-line constable-states\\n address private _deprecated_uniswapAddr = address(0);\\n\\n /// @notice Address of the Strategist\\n address public strategistAddr = address(0);\\n\\n /// @notice Mapping of asset address to the Strategy that they should automatically\\n // be allocated to\\n // slither-disable-next-line uninitialized-state\\n mapping(address => address) public assetDefaultStrategies;\\n\\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\\n // slither-disable-next-line uninitialized-state\\n uint256 public maxSupplyDiff;\\n\\n /// @notice Trustee contract that can collect a percentage of yield\\n address public trusteeAddress;\\n\\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\\n uint256 public trusteeFeeBps;\\n\\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\\n address[] private _deprecated_swapTokens;\\n\\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\\n\\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\\n address public ousdMetaStrategy = address(0);\\n\\n /// @notice How much OTokens are currently minted by the strategy\\n int256 public netOusdMintedForStrategy = 0;\\n\\n /// @notice How much net total OTokens are allowed to be minted by all strategies\\n uint256 public netOusdMintForStrategyThreshold = 0;\\n\\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\\n\\n /// @notice Collateral swap configuration.\\n /// @dev is packed into a single storage slot to save gas.\\n struct SwapConfig {\\n // Contract that swaps the vault's collateral assets\\n address swapper;\\n // Max allowed percentage the total value can drop below the total supply in basis points.\\n // For example 100 == 1%\\n uint16 allowedUndervalueBps;\\n }\\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\\n\\n // For future use\\n uint256[50] private __gap;\\n\\n /**\\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\\n * @param newImpl address of the implementation\\n */\\n function setAdminImpl(address newImpl) external onlyGovernor {\\n require(\\n Address.isContract(newImpl),\\n \\\"new implementation is not a contract\\\"\\n );\\n bytes32 position = adminImplPosition;\\n // solhint-disable-next-line no-inline-assembly\\n assembly {\\n sstore(position, newImpl)\\n }\\n }\\n}\\n\",\"keccak256\":\"0xcbdb87104749e20c8411bc2acbfa0b7d48e876e3f4e1c46c9a7b00fcdb9722d9\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6101a06040523480156200001257600080fd5b506040516200547638038062005476833981016040819052620000359162000144565b86868860200151838787848484848462000055336200011460201b60201c565b60008051602062005456833981519152546040516001600160a01b03909116906000907fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a908290a36033805460ff191690556001600160601b0319606095861b811660805292851b831660a05290841b821660c05291831b811660e052610100919091528751821b811661012052602090970151811b8716610140529a8b1b86166101605250505050509190941b1661018052506200022b9350505050565b6000805160206200545683398151915255565b80516001600160a01b03811681146200013f57600080fd5b919050565b60008060008060008060008789036101008112156200016257600080fd5b60408112156200017157600080fd5b50604080519081016001600160401b0381118282101715620001a357634e487b7160e01b600052604160045260246000fd5b604052620001b18962000127565b8152620001c160208a0162000127565b60208201529650620001d66040890162000127565b9550620001e66060890162000127565b9450620001f66080890162000127565b935060a088015192506200020d60c0890162000127565b91506200021d60e0890162000127565b905092959891949750929550565b60805160601c60a05160601c60c05160601c60e05160601c610100516101205160601c6101405160601c6101605160601c6101805160601c61506e620003e86000396000818161039501528181610b6701526134670152600081816104850152612a6801526000818161057301528181610f4701528181611e7201528181611feb01528181612c540152612eef01526000610b33015260008181610737015261176401526000818161086601528181610d0f01528181611da00152818161203b015281816123e601528181613a570152613cb10152600081816108ba01528181610de50152818161129801528181611ca301528181612a380152612e16015260008181610a8801526119d90152600081816103c70152818161098b01528181610a0201528181610c7601528181610fbc01528181611462015281816114c60152818161169a0152818161186201528181611f5c0152818161200c015281816123600152818161241501528181612cc901528181612f7a015281816130220152818161356c015281816135ed0152818161362f015281816138ff015281816139d101528181613a8601528181613c2b0152613ce0015261506e6000f3fe6080604052600436106103855760003560e01c8063853828b6116101d1578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063b16b7d0b14610a24578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b80639da0e4621161016f578063aa388af611610149578063aa388af61461096e578063ab12edf5146109bb578063ad1728cb146109db578063ad5c4648146109f057600080fd5b80639da0e462146108fc578063a3b81e7314610939578063a4f98af41461095957600080fd5b80639092c31c116101ab5780639092c31c146108545780639136616a1461088857806391649751146108a857806396d538bb146108dc57600080fd5b8063853828b6146107fa57806387bae8671461080f5780638d7c0e461461083457600080fd5b80635c975abb116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107995780637b8962f7146107b9578063842f5c46146107cf5780638456cb59146107e557600080fd5b80636ef3879514610705578063714897df1461072557806371a735f3146107595780637260f8261461077957600080fd5b80636309238311610290578063630923831461069957806366e3667e146106af57806367c7066c146106c55780636e811d38146106e557600080fd5b80635c975abb146106405780635d36b190146106645780635f5152261461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb57806359b80c0a1461060b5780635a063f631461062b57600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c236600461433c565b610c1e565b3480156104d357600080fd5b506104566104e2366004614302565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a6105183660046143b6565b610c50565b34801561052957600080fd5b5061043a61053836600461455e565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614423565b610e57565b3480156105c157600080fd5b5061043a6105d03660046143b6565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a610606366004614634565b611037565b34801561061757600080fd5b5061043a6106263660046144aa565b611096565b34801561063757600080fd5b5061043a611319565b34801561064c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561067057600080fd5b5061043a6113b8565b34801561068557600080fd5b50610553610694366004614302565b61145e565b3480156106a557600080fd5b50610553611c2081565b3480156106bb57600080fd5b5061055360345481565b3480156106d157600080fd5b5060a354610456906001600160a01b031681565b3480156106f157600080fd5b5061043a610700366004614302565b61156f565b34801561071157600080fd5b5061043a6107203660046143e2565b6115e5565b34801561073157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561076557600080fd5b5061043a6107743660046146b8565b611baf565b34801561078557600080fd5b50603654610456906001600160a01b031681565b3480156107a557600080fd5b506104566107b4366004614634565b611d74565b3480156107c557600080fd5b5061055360375481565b3480156107db57600080fd5b5061055360685481565b3480156107f157600080fd5b5061043a611d9e565b34801561080657600080fd5b5061043a611e67565b34801561081b57600080fd5b506033546104569061010090046001600160a01b031681565b34801561084057600080fd5b5061043a61084f366004614739565b612039565b34801561086057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b5061043a6108a3366004614634565b61253b565b3480156108b457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e857600080fd5b5061043a6108f73660046143e2565b612707565b34801561090857600080fd5b5061092c610917366004614634565b60356020526000908152604090205460ff1681565b60405161046a9190614c2c565b34801561094557600080fd5b5061043a610954366004614302565b612827565b34801561096557600080fd5b50610654612895565b34801561097a57600080fd5b50610654610989366004614302565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109c757600080fd5b5061043a6109d636600461477e565b612935565b3480156109e757600080fd5b5061043a612a21565b3480156109fc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a3057600080fd5b506105536801bc16d674ec80000081565b348015610a4d57600080fd5b5061043a610a5c366004614302565b612ae7565b348015610a6d57600080fd5b50610654612b74565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614302565b612ba5565b348015610aed57600080fd5b5061043a610afc366004614375565b612c49565b348015610b0d57600080fd5b5061043a610b1c36600461464d565b612d23565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612ee4565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a613051565b348015610beb57600080fd5b50610bf46130db565b60405161046a9190614a0a565b6000610c196000805160206150198339815191525490565b905090565b610c26612b74565b610c425760405162461bcd60e51b815260040161043190614c9e565b610c4c828261313d565b5050565b610c58612b74565b610c745760405162461bcd60e51b815260040161043190614c9e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b038416908361329c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e919061431f565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614d89565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e2090309087908790879060040161495a565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612b74565b610e7b5760405162461bcd60e51b815260040161043190614c9e565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f248484846132f3565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614c67565b600080516020614ff983398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614d61565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614cd5565b82610107600082825461101e9190614eb0565b9091555061102e905084846133ae565b50600190555050565b61103f612b74565b61105b5760405162461bcd60e51b815260040161043190614c9e565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146110c55760405162461bcd60e51b815260040161043190614d2a565b60335460ff16156110e85760405162461bcd60e51b815260040161043190614d00565b8683146111375760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d617463680000000000006044820152606401610431565b60008060005b89811015611280578a8a8281811061115757611157614fa9565b90506020028101906111699190614dc0565b60405161117792919061492e565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156111aa576111aa614f7d565b146111f75760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061124457611244614fa9565b90506020028101906112569190614dc0565b8c8c6040516112689493929190614b51565b60405180910390a261127981614f4c565b905061113d565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906112db908d908d908d908d908d908d908d908d90600401614aef565b600060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b031633146113735760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614ff9833981519152805460028114156113a55760405162461bcd60e51b815260040161043190614d61565b600282556113b1613440565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146114535760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b61145c33613685565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146114b15760405162461bcd60e51b815260040161043190614cd5565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190614765565b6801bc16d674ec80000060345461155f9190614eea565b6115699190614eb0565b92915050565b611577612b74565b6115935760405162461bcd60e51b815260040161043190614c9e565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146116145760405162461bcd60e51b815260040161043190614d2a565b60335460ff16156116375760405162461bcd60e51b815260040161043190614d00565b600080516020614ff9833981519152805460028114156116695760405162461bcd60e51b815260040161043190614d61565b6002825560006116826801bc16d674ec80000085614eea565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156116e457600080fd5b505afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190614765565b81111561175f5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f00000000000000000000000000000000000000000000000000000000000000009061178f908690614eb0565b11156117d65760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546117e79190614eb0565b11156118355760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546118479190614eb0565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118ae57600080fd5b505af11580156118c2573d6000803e3d6000fd5b505050506118cf81613746565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b85811015611b8857600087878381811061193057611930614fa9565b90506020028101906119429190614e06565b61194c9080614dc0565b60405161195a92919061492e565b6040519081900390209050600160008281526035602052604090205460ff16600481111561198a5761198a614f7d565b146119d75760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a86818110611a2257611a22614fa9565b9050602002810190611a349190614e06565b611a3e9080614dc0565b878d8d89818110611a5157611a51614fa9565b9050602002810190611a639190614e06565b611a71906020810190614dc0565b8f8f8b818110611a8357611a83614fa9565b9050602002810190611a959190614e06565b604001356040518863ffffffff1660e01b8152600401611aba96959493929190614bb9565b6000604051808303818588803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f898985818110611b3a57611b3a614fa9565b9050602002810190611b4c9190614e06565b611b569080614dc0565b6801bc16d674ec800000604051611b6f93929190614c08565b60405180910390a250611b8181614f4c565b9050611914565b508585905060346000828254611b9e9190614eb0565b909155505060019093555050505050565b60335461010090046001600160a01b03163314611bde5760405162461bcd60e51b815260040161043190614d2a565b60335460ff1615611c015760405162461bcd60e51b815260040161043190614d00565b60008585604051611c1392919061492e565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611c4757611c47614f7d565b14611c8c5760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611ce0908a908a908a908a908a90600401614b78565b600060405180830381600087803b158015611cfa57600080fd5b505af1158015611d0e573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611d63908a908a908a908a90614b51565b60405180910390a250505050505050565b60a48181548110611d8457600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611df757600080fd5b505afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f919061431f565b6001600160a01b0316336001600160a01b031614611e5f5760405162461bcd60e51b815260040161043190614d89565b61145c613773565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611eb65750611ea1610c01565b6001600160a01b0316336001600160a01b0316145b611f0e5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614ff983398151915280546002811415611f405760405162461bcd60e51b815260040161043190614d61565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611fa657600080fd5b505afa158015611fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fde9190614765565b90508015612031576120317f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836137e8565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561209257600080fd5b505afa1580156120a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ca919061431f565b6001600160a01b0316336001600160a01b0316146120fa5760405162461bcd60e51b815260040161043190614d89565b60335460ff166121435760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b600080516020614ff9833981519152805460028114156121755760405162461bcd60e51b815260040161043190614d61565b6002825543611c20606b5461218a9190614eb0565b106121d75760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b60021985121580156121ea575060038513155b801561220457506000856034546122019190614e6f565b12155b6122505760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff19841215801561227357506811ff6cf0fd15b000008413155b801561228d575060008460685461228a9190614e6f565b12155b6122d95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008311156123325760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b846034546123409190614e6f565b603455606854612351908590614e6f565b60685543606b55821561249f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124959190614617565b5061249f836138e6565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a16124ea600061394e565b6125295760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b612531613dd4565b5060019055505050565b612543612b74565b61255f5760405162461bcd60e51b815260040161043190614c9e565b60a05481106125a05760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a082815481106125b5576125b5614fa9565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a054919350909116906125f290600190614f09565b8310156126745760a0805461260990600190614f09565b8154811061261957612619614fa9565b60009182526020909120015460a080546001600160a01b03909216918590811061264557612645614fa9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a080548061268557612685614f93565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61270f612b74565b61272b5760405162461bcd60e51b815260040161043190614c9e565b8060005b818110156127de57600084848381811061274b5761274b614fa9565b90506020020160208101906127609190614302565b6001600160a01b031614156127ce5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b6127d781614f4c565b905061272f565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161281393929190614a57565b60405180910390a1610f3660a4848461405b565b61282f612b74565b61284b5760405162461bcd60e51b815260040161043190614c9e565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146128c75760405162461bcd60e51b815260040161043190614d2a565b60335460ff16156128ea5760405162461bcd60e51b815260040161043190614d00565b600080516020614ff98339815191528054600281141561291c5760405162461bcd60e51b815260040161043190614d61565b6002825561292a600161394e565b925060018255505090565b61293d612b74565b6129595760405162461bcd60e51b815260040161043190614c9e565b808210801561297057506801bc16d674ec80000081105b801561298d5750673782dace9d90000061298a8383614f09565b10155b6129d95760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b158015612aac57600080fd5b505af1158015612ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae49190614617565b50565b612aef612b74565b612b0b5760405162461bcd60e51b815260040161043190614c9e565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612b8c6000805160206150198339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612bad612b74565b612bc95760405162461bcd60e51b815260040161043190614c9e565b612bf1817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612c116000805160206150198339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c915760405162461bcd60e51b815260040161043190614c67565b600080516020614ff983398151915280546002811415612cc35760405162461bcd60e51b815260040161043190614d61565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612d185760405162461bcd60e51b815260040161043190614cd5565b6125318585856137e8565b60335461010090046001600160a01b03163314612d525760405162461bcd60e51b815260040161043190614d2a565b60335460ff1615612d755760405162461bcd60e51b815260040161043190614d00565b60008484604051612d8792919061492e565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612dbb57612dbb614f7d565b14612dff5760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612e51908990899089908990600401614b51565b600060405180830381600087803b158015612e6b57600080fd5b505af1158015612e7f573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612ed4908990899089908990614b51565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f2c5760405162461bcd60e51b815260040161043190614c67565b600080516020614ff983398151915280546002811415612f5e5760405162461bcd60e51b815260040161043190614d61565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612fc457600080fd5b505afa158015612fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffc9190614765565b90506000610107548261300f9190614f09565b90508015613047576101078290556130477f0000000000000000000000000000000000000000000000000000000000000000826133ae565b5050600182555050565b6036546001600160a01b031633146130ab5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561313357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613115575b5050505050905090565b6001600160a01b038281166000908152609f6020526040902054161561319a5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b038216158015906131ba57506001600160a01b03811615155b6131fa5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526132ee908490613e4e565b505050565b82516133069060a49060208601906140be565b508151815181146133505760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156133a75761339784828151811061337057613370614fa9565b602002602001015184838151811061338a5761338a614fa9565b602002602001015161313d565b6133a081614f4c565b9050613353565b5050505050565b600081116133f75760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156134635760405162461bcd60e51b815260040161043190614d00565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156134c057600080fd5b505af11580156134d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f89190614765565b905060006068548261350a9190614eb0565b90508047101561355c5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156135c557600080fd5b505af11580156135d9573d6000803e3d6000fd5b505060a35461361993506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693501690508361329c565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612a15565b6001600160a01b0381166136db5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b03166136fb6000805160206150198339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612ae48160008051602061501983398151915255565b60006137558261010754613f20565b905080610107600082825461376a9190614f09565b90915550505050565b60335460ff16156137965760405162461bcd60e51b815260040161043190614d00565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586137cb3390565b6040516001600160a01b03909116815260200160405180910390a1565b600081116138385760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166138875760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b61389081613746565b6138a46001600160a01b038316848361329c565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b639891016126fa565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156139635761156982613f38565b6000606854476139739190614f09565b9050600191506801bc16d674ec8000008110613b5757600061399e6801bc16d674ec80000083614ec8565b905080603460008282546139b29190614f09565b90915550600090506139cd826801bc16d674ec800000614eea565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613a2a57600080fd5b505af1158015613a3e573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613ace57600080fd5b505af1158015613ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b069190614617565b50613b10816138e6565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613b679190614f09565b90506801bc16d674ec8000008110613bb95760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613bc5575050919050565b606954811015613c1f578060686000828254613be19190614eb0565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613dcd565b606a54811115613dbc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c8457600080fd5b505af1158015613c98573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613d2857600080fd5b505af1158015613d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d609190614617565b50600160346000828254613d749190614f09565b90915550613d839050816138e6565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613c12565b613dc584613f38565b949350505050565b5050919050565b60335460ff16613e1d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336137cb565b6000613ea3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f509092919063ffffffff16565b8051909150156132ee5780806020019051810190613ec19190614617565b6132ee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613f2f5781613f31565b825b9392505050565b60008115613f4857613f48613773565b506000919050565b6060613dc5848460008585843b613fa95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613fc5919061493e565b60006040518083038185875af1925050503d8060008114614002576040519150601f19603f3d011682016040523d82523d6000602084013e614007565b606091505b5091509150614017828286614022565b979650505050505050565b60608315614031575081613f31565b8251156140415782518084602001fd5b8160405162461bcd60e51b81526004016104319190614c54565b8280548282559060005260206000209081019282156140ae579160200282015b828111156140ae5781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061407b565b506140ba929150614113565b5090565b8280548282559060005260206000209081019282156140ae579160200282015b828111156140ae57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906140de565b5b808211156140ba5760008155600101614114565b60008083601f84011261413a57600080fd5b5081356001600160401b0381111561415157600080fd5b6020830191508360208260051b850101111561416c57600080fd5b9250929050565b600082601f83011261418457600080fd5b8135602061419961419483614e4c565b614e1c565b80838252828201915082860187848660051b89010111156141b957600080fd5b60005b858110156141e15781356141cf81614fd5565b845292840192908401906001016141bc565b5090979650505050505050565b60008083601f84011261420057600080fd5b5081356001600160401b0381111561421757600080fd5b60208301915083602082850101111561416c57600080fd5b600060a0828403121561424157600080fd5b50919050565b600060a0828403121561425957600080fd5b60405160a081018181106001600160401b038211171561427b5761427b614fbf565b60405290508061428a836142d2565b8152614298602084016142eb565b60208201526142a9604084016142eb565b604082015260608301356142bc81614fea565b6060820152608092830135920191909152919050565b803563ffffffff811681146142e657600080fd5b919050565b80356001600160401b03811681146142e657600080fd5b60006020828403121561431457600080fd5b8135613f3181614fd5565b60006020828403121561433157600080fd5b8151613f3181614fd5565b6000806040838503121561434f57600080fd5b823561435a81614fd5565b9150602083013561436a81614fd5565b809150509250929050565b60008060006060848603121561438a57600080fd5b833561439581614fd5565b925060208401356143a581614fd5565b929592945050506040919091013590565b600080604083850312156143c957600080fd5b82356143d481614fd5565b946020939093013593505050565b600080602083850312156143f557600080fd5b82356001600160401b0381111561440b57600080fd5b61441785828601614128565b90969095509350505050565b60008060006060848603121561443857600080fd5b83356001600160401b038082111561444f57600080fd5b61445b87838801614173565b9450602086013591508082111561447157600080fd5b61447d87838801614173565b9350604086013591508082111561449357600080fd5b506144a086828701614173565b9150509250925092565b600080600080600080600080610120898b0312156144c757600080fd5b88356001600160401b03808211156144de57600080fd5b6144ea8c838d01614128565b909a50985060208b013591508082111561450357600080fd5b61450f8c838d01614128565b909850965060408b013591508082111561452857600080fd5b506145358b828c01614128565b9095509350506060890135915061454f8a60808b0161422f565b90509295985092959890939650565b600080600060e0848603121561457357600080fd5b83356001600160401b0381111561458957600080fd5b8401601f8101861361459a57600080fd5b803560206145aa61419483614e4c565b8083825282820191508285018a848660051b88010111156145ca57600080fd5b600095505b848610156145f4576145e0816142eb565b8352600195909501949183019183016145cf565b50965050860135935061460e915086905060408601614247565b90509250925092565b60006020828403121561462957600080fd5b8151613f3181614fea565b60006020828403121561464657600080fd5b5035919050565b6000806000806040858703121561466357600080fd5b84356001600160401b038082111561467a57600080fd5b614686888389016141ee565b9096509450602087013591508082111561469f57600080fd5b506146ac87828801614128565b95989497509550505050565b600080600080600060e086880312156146d057600080fd5b85356001600160401b03808211156146e757600080fd5b6146f389838a016141ee565b9097509550602088013591508082111561470c57600080fd5b5061471988828901614128565b909450925061472d9050876040880161422f565b90509295509295909350565b60008060006060848603121561474e57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561477757600080fd5b5051919050565b6000806040838503121561479157600080fd5b50508035926020909101359150565b81835260006020808501808196508560051b810191508460005b878110156148235782840389528135601e198836030181126147db57600080fd5b870180356001600160401b038111156147f357600080fd5b80360389131561480257600080fd5b61480f8682898501614877565b9a87019a95505050908401906001016147ba565b5091979650505050505050565b8183526000602080850194508260005b8581101561486c576001600160401b03614859836142eb565b1687529582019590820190600101614840565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526148b8816020860160208601614f20565b601f01601f19169290920160200192915050565b63ffffffff6148da826142d2565b1682526148e9602082016142eb565b6001600160401b03808216602085015280614906604085016142eb565b1660408501525050606081013561491c81614fea565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614950818460208701614f20565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156149ad5783516001600160401b031685529382019392820192600101614988565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015614a4b5783516001600160a01b031683529284019291840191600101614a26565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614aa15781546001600160a01b031684529284019260019182019101614a7c565b505050838103828501528481528590820160005b86811015614ae3578235614ac881614fd5565b6001600160a01b031682529183019190830190600101614ab5565b50979650505050505050565b6000610120808352614b048184018b8d6147a0565b90508281036020840152614b1981898b614830565b90508281036040840152614b2e8187896147a0565b915050836060830152614b4460808301846148cc565b9998505050505050505050565b604081526000614b65604083018688614877565b8281036020840152614017818587614830565b60e081526000614b8c60e083018789614877565b8281036020840152614b9f818688614830565b915050614baf60408301846148cc565b9695505050505050565b608081526000614bcd60808301888a614877565b8281036020840152614bdf81886148a0565b90508281036040840152614bf4818688614877565b915050826060830152979650505050505050565b604081526000614c1c604083018587614877565b9050826020830152949350505050565b6020810160058310614c4e57634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613f3160208301846148a0565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614dd757600080fd5b8301803591506001600160401b03821115614df157600080fd5b60200191503681900382131561416c57600080fd5b60008235605e1983360301811261495057600080fd5b604051601f8201601f191681016001600160401b0381118282101715614e4457614e44614fbf565b604052919050565b60006001600160401b03821115614e6557614e65614fbf565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614e9157614e91614f67565b600160ff1b8390038412811615614eaa57614eaa614f67565b50500190565b60008219821115614ec357614ec3614f67565b500190565b600082614ee557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614f0457614f04614f67565b500290565b600082821015614f1b57614f1b614f67565b500390565b60005b83811015614f3b578181015183820152602001614f23565b83811115610f365750506000910152565b6000600019821415614f6057614f60614f67565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612ae457600080fd5b8015158114612ae457600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa26469706673582212202f5841dbddbb09e107c348cf20cd037b9b59d2055c278e204645d030783a5d5464736f6c634300080700337bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a", + "deployedBytecode": "0x6080604052600436106103855760003560e01c8063853828b6116101d1578063b16b7d0b11610102578063d9f00ec7116100a0578063de5f62681161006f578063de5f626814610b9f578063e752923914610bb4578063ee7afe2d14610bca578063f6ca71b014610bdf57600080fd5b8063d9f00ec714610b01578063dbe55e5614610b21578063dd505df614610b55578063de34d71314610b8957600080fd5b8063cceab750116100dc578063cceab75014610a76578063d059f6ef14610aaa578063d38bfff414610ac1578063d9caed1214610ae157600080fd5b8063b16b7d0b14610a24578063c2e1e3f414610a41578063c7af335214610a6157600080fd5b80639da0e4621161016f578063aa388af611610149578063aa388af61461096e578063ab12edf5146109bb578063ad1728cb146109db578063ad5c4648146109f057600080fd5b80639da0e462146108fc578063a3b81e7314610939578063a4f98af41461095957600080fd5b80639092c31c116101ab5780639092c31c146108545780639136616a1461088857806391649751146108a857806396d538bb146108dc57600080fd5b8063853828b6146107fa57806387bae8671461080f5780638d7c0e461461083457600080fd5b80635c975abb116102b65780636ef38795116102545780637b2d9b2c116102235780637b2d9b2c146107995780637b8962f7146107b9578063842f5c46146107cf5780638456cb59146107e557600080fd5b80636ef3879514610705578063714897df1461072557806371a735f3146107595780637260f8261461077957600080fd5b80636309238311610290578063630923831461069957806366e3667e146106af57806367c7066c146106c55780636e811d38146106e557600080fd5b80635c975abb146106405780635d36b190146106645780635f5152261461067957600080fd5b8063430bf08a11610323578063484be812116102fd578063484be812146105d55780635205c380146105eb57806359b80c0a1461060b5780635a063f631461062b57600080fd5b8063430bf08a14610561578063435356d11461059557806347e7ef24146105b557600080fd5b80630fc3b4c41161035f5780630fc3b4c4146104c75780631072cbea146104fd57806322495dc81461051d5780633c8649591461053d57600080fd5b80630c340a24146104415780630df1ecfd146104735780630ed57b3a146104a757600080fd5b3661043c57336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806103e95750336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016145b61043a5760405162461bcd60e51b815260206004820152601e60248201527f457468206e6f742066726f6d20616c6c6f77656420636f6e747261637473000060448201526064015b60405180910390fd5b005b600080fd5b34801561044d57600080fd5b50610456610c01565b6040516001600160a01b0390911681526020015b60405180910390f35b34801561047f57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156104b357600080fd5b5061043a6104c236600461433c565b610c1e565b3480156104d357600080fd5b506104566104e2366004614302565b609f602052600090815260409020546001600160a01b031681565b34801561050957600080fd5b5061043a6105183660046143b6565b610c50565b34801561052957600080fd5b5061043a61053836600461455e565b610d0d565b34801561054957600080fd5b5061055360695481565b60405190815260200161046a565b34801561056d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156105a157600080fd5b5061043a6105b0366004614423565b610e57565b3480156105c157600080fd5b5061043a6105d03660046143b6565b610f3c565b3480156105e157600080fd5b50610553606a5481565b3480156105f757600080fd5b5061043a610606366004614634565b611037565b34801561061757600080fd5b5061043a6106263660046144aa565b611096565b34801561063757600080fd5b5061043a611319565b34801561064c57600080fd5b5060335460ff165b604051901515815260200161046a565b34801561067057600080fd5b5061043a6113b8565b34801561068557600080fd5b50610553610694366004614302565b61145e565b3480156106a557600080fd5b50610553611c2081565b3480156106bb57600080fd5b5061055360345481565b3480156106d157600080fd5b5060a354610456906001600160a01b031681565b3480156106f157600080fd5b5061043a610700366004614302565b61156f565b34801561071157600080fd5b5061043a6107203660046143e2565b6115e5565b34801561073157600080fd5b506105537f000000000000000000000000000000000000000000000000000000000000000081565b34801561076557600080fd5b5061043a6107743660046146b8565b611baf565b34801561078557600080fd5b50603654610456906001600160a01b031681565b3480156107a557600080fd5b506104566107b4366004614634565b611d74565b3480156107c557600080fd5b5061055360375481565b3480156107db57600080fd5b5061055360685481565b3480156107f157600080fd5b5061043a611d9e565b34801561080657600080fd5b5061043a611e67565b34801561081b57600080fd5b506033546104569061010090046001600160a01b031681565b34801561084057600080fd5b5061043a61084f366004614739565b612039565b34801561086057600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b34801561089457600080fd5b5061043a6108a3366004614634565b61253b565b3480156108b457600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b3480156108e857600080fd5b5061043a6108f73660046143e2565b612707565b34801561090857600080fd5b5061092c610917366004614634565b60356020526000908152604090205460ff1681565b60405161046a9190614c2c565b34801561094557600080fd5b5061043a610954366004614302565b612827565b34801561096557600080fd5b50610654612895565b34801561097a57600080fd5b50610654610989366004614302565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0390811691161490565b3480156109c757600080fd5b5061043a6109d636600461477e565b612935565b3480156109e757600080fd5b5061043a612a21565b3480156109fc57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610a3057600080fd5b506105536801bc16d674ec80000081565b348015610a4d57600080fd5b5061043a610a5c366004614302565b612ae7565b348015610a6d57600080fd5b50610654612b74565b348015610a8257600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610ab657600080fd5b506105536101075481565b348015610acd57600080fd5b5061043a610adc366004614302565b612ba5565b348015610aed57600080fd5b5061043a610afc366004614375565b612c49565b348015610b0d57600080fd5b5061043a610b1c36600461464d565b612d23565b348015610b2d57600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b6157600080fd5b506104567f000000000000000000000000000000000000000000000000000000000000000081565b348015610b9557600080fd5b5061055360385481565b348015610bab57600080fd5b5061043a612ee4565b348015610bc057600080fd5b50610553606b5481565b348015610bd657600080fd5b5061043a613051565b348015610beb57600080fd5b50610bf46130db565b60405161046a9190614a0a565b6000610c196000805160206150198339815191525490565b905090565b610c26612b74565b610c425760405162461bcd60e51b815260040161043190614c9e565b610c4c828261313d565b5050565b610c58612b74565b610c745760405162461bcd60e51b815260040161043190614c9e565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b039081169083161415610cf15760405162461bcd60e51b815260206004820152601f60248201527f43616e6e6f74207472616e7366657220737570706f72746564206173736574006044820152606401610431565b610c4c610cfc610c01565b6001600160a01b038416908361329c565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d6657600080fd5b505afa158015610d7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d9e919061431f565b6001600160a01b0316336001600160a01b031614610dce5760405162461bcd60e51b815260040161043190614d89565b60405163bc26e7e560e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063bc26e7e590610e2090309087908790879060040161495a565b600060405180830381600087803b158015610e3a57600080fd5b505af1158015610e4e573d6000803e3d6000fd5b50505050505050565b610e5f612b74565b610e7b5760405162461bcd60e51b815260040161043190614c9e565b600054610100900460ff1680610e94575060005460ff16155b610ef75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610431565b600054610100900460ff16158015610f19576000805461ffff19166101011790555b610f248484846132f3565b8015610f36576000805461ff00191690555b50505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f845760405162461bcd60e51b815260040161043190614c67565b600080516020614ff983398151915280546002811415610fb65760405162461bcd60e51b815260040161043190614d61565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b03161461100b5760405162461bcd60e51b815260040161043190614cd5565b82610107600082825461101e9190614eb0565b9091555061102e905084846133ae565b50600190555050565b61103f612b74565b61105b5760405162461bcd60e51b815260040161043190614c9e565b60378190556040518181527fe26b067424903962f951f568e52ec9a3bbe1589526ea54a4e69ca6eaae1a4c779060200160405180910390a150565b60335461010090046001600160a01b031633146110c55760405162461bcd60e51b815260040161043190614d2a565b60335460ff16156110e85760405162461bcd60e51b815260040161043190614d00565b8683146111375760405162461bcd60e51b815260206004820152601a60248201527f5075626b65792073686172657344617461206d69736d617463680000000000006044820152606401610431565b60008060005b89811015611280578a8a8281811061115757611157614fa9565b90506020028101906111699190614dc0565b60405161117792919061492e565b6040805191829003909120600081815260356020529182205490945060ff1692508260048111156111aa576111aa614f7d565b146111f75760405162461bcd60e51b815260206004820152601c60248201527f56616c696461746f7220616c72656164792072656769737465726564000000006044820152606401610431565b6000838152603560205260409020805460ff19166001179055827facd38e900350661e325d592c959664c0000a306efb2004e7dc283f44e0ea04238c8c8481811061124457611244614fa9565b90506020028101906112569190614dc0565b8c8c6040516112689493929190614b51565b60405180910390a261127981614f4c565b905061113d565b506040516322f18bf560e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906322f18bf5906112db908d908d908d908d908d908d908d908d90600401614aef565b600060405180830381600087803b1580156112f557600080fd5b505af1158015611309573d6000803e3d6000fd5b5050505050505050505050505050565b60a3546001600160a01b031633146113735760405162461bcd60e51b815260206004820152601b60248201527f43616c6c6572206973206e6f74207468652048617276657374657200000000006044820152606401610431565b600080516020614ff9833981519152805460028114156113a55760405162461bcd60e51b815260040161043190614d61565b600282556113b1613440565b5060019055565b7f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db546001600160a01b0316336001600160a01b0316146114535760405162461bcd60e51b815260206004820152603060248201527f4f6e6c79207468652070656e64696e6720476f7665726e6f722063616e20636f60448201526f6d706c6574652074686520636c61696d60801b6064820152608401610431565b61145c33613685565b565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146114b15760405162461bcd60e51b815260040161043190614cd5565b6040516370a0823160e01b81523060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b15801561151057600080fd5b505afa158015611524573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115489190614765565b6801bc16d674ec80000060345461155f9190614eea565b6115699190614eb0565b92915050565b611577612b74565b6115935760405162461bcd60e51b815260040161043190614c9e565b60338054610100600160a81b0319166101006001600160a01b038416908102919091179091556040517f83f29c79feb71f8fba9d0fbc4ba5f0982a28b6b1e868b3fc50e6400d100bca0f90600090a250565b60335461010090046001600160a01b031633146116145760405162461bcd60e51b815260040161043190614d2a565b60335460ff16156116375760405162461bcd60e51b815260040161043190614d00565b600080516020614ff9833981519152805460028114156116695760405162461bcd60e51b815260040161043190614d61565b6002825560006116826801bc16d674ec80000085614eea565b6040516370a0823160e01b81523060048201529091507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b1580156116e457600080fd5b505afa1580156116f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061171c9190614765565b81111561175f5760405162461bcd60e51b8152602060048201526011602482015270092dce6eaccccd2c6d2cadce840ae8aa89607b1b6044820152606401610431565b6034547f00000000000000000000000000000000000000000000000000000000000000009061178f908690614eb0565b11156117d65760405162461bcd60e51b815260206004820152601660248201527513585e081d985b1a59185d1bdc9cc81c995858da195960521b6044820152606401610431565b603754816038546117e79190614eb0565b11156118355760405162461bcd60e51b815260206004820152601a60248201527f5374616b696e6720455448206f766572207468726573686f6c640000000000006044820152606401610431565b80603860008282546118479190614eb0565b9091555050604051632e1a7d4d60e01b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690632e1a7d4d90602401600060405180830381600087803b1580156118ae57600080fd5b505af11580156118c2573d6000803e3d6000fd5b505050506118cf81613746565b60408051600160f81b60208201526000602182018190526bffffffffffffffffffffffff193060601b16602c8301529101604051602081830303815290604052905060005b85811015611b8857600087878381811061193057611930614fa9565b90506020028101906119429190614e06565b61194c9080614dc0565b60405161195a92919061492e565b6040519081900390209050600160008281526035602052604090205460ff16600481111561198a5761198a614f7d565b146119d75760405162461bcd60e51b815260206004820152601860248201527f56616c696461746f72206e6f74207265676973746572656400000000000000006044820152606401610431565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663228951186801bc16d674ec8000008a8a86818110611a2257611a22614fa9565b9050602002810190611a349190614e06565b611a3e9080614dc0565b878d8d89818110611a5157611a51614fa9565b9050602002810190611a639190614e06565b611a71906020810190614dc0565b8f8f8b818110611a8357611a83614fa9565b9050602002810190611a959190614e06565b604001356040518863ffffffff1660e01b8152600401611aba96959493929190614bb9565b6000604051808303818588803b158015611ad357600080fd5b505af1158015611ae7573d6000803e3d6000fd5b5050506000838152603560205260409020805460ff19166002179055508190507f958934bb53d6b4dc911b6173e586864efbc8076684a31f752c53d5778340b37f898985818110611b3a57611b3a614fa9565b9050602002810190611b4c9190614e06565b611b569080614dc0565b6801bc16d674ec800000604051611b6f93929190614c08565b60405180910390a250611b8181614f4c565b9050611914565b508585905060346000828254611b9e9190614eb0565b909155505060019093555050505050565b60335461010090046001600160a01b03163314611bde5760405162461bcd60e51b815260040161043190614d2a565b60335460ff1615611c015760405162461bcd60e51b815260040161043190614d00565b60008585604051611c1392919061492e565b604080519182900390912060008181526035602052919091205490915060ff166003816004811115611c4757611c47614f7d565b14611c8c5760405162461bcd60e51b815260206004820152601560248201527456616c696461746f72206e6f742065786974696e6760581b6044820152606401610431565b6040516312b3fc1960e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906312b3fc1990611ce0908a908a908a908a908a90600401614b78565b600060405180830381600087803b158015611cfa57600080fd5b505af1158015611d0e573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166004179055518391507f6aecca20726a17c1b81989b2fd09dfdf636bae9e564d4066ca18df62dc1f3dc290611d63908a908a908a908a90614b51565b60405180910390a250505050505050565b60a48181548110611d8457600080fd5b6000918252602090912001546001600160a01b0316905081565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b158015611df757600080fd5b505afa158015611e0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e2f919061431f565b6001600160a01b0316336001600160a01b031614611e5f5760405162461bcd60e51b815260040161043190614d89565b61145c613773565b336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611eb65750611ea1610c01565b6001600160a01b0316336001600160a01b0316145b611f0e5760405162461bcd60e51b815260206004820152602360248201527f43616c6c6572206973206e6f7420746865205661756c74206f7220476f7665726044820152623737b960e91b6064820152608401610431565b600080516020614ff983398151915280546002811415611f405760405162461bcd60e51b815260040161043190614d61565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015611fa657600080fd5b505afa158015611fba573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fde9190614765565b90508015612031576120317f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000836137e8565b505060019055565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663570d8e1d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561209257600080fd5b505afa1580156120a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ca919061431f565b6001600160a01b0316336001600160a01b0316146120fa5760405162461bcd60e51b815260040161043190614d89565b60335460ff166121435760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b600080516020614ff9833981519152805460028114156121755760405162461bcd60e51b815260040161043190614d61565b6002825543611c20606b5461218a9190614eb0565b106121d75760405162461bcd60e51b815260206004820152601e60248201527f466978206163636f756e74696e672063616c6c656420746f6f20736f6f6e00006044820152606401610431565b60021985121580156121ea575060038513155b801561220457506000856034546122019190614e6f565b12155b6122505760405162461bcd60e51b815260206004820152601760248201527f496e76616c69642076616c696461746f727344656c74610000000000000000006044820152606401610431565b6811ff6cf0fd15afffff19841215801561227357506811ff6cf0fd15b000008413155b801561228d575060008460685461228a9190614e6f565b12155b6122d95760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420636f6e73656e7375735265776172647344656c74610000006044820152606401610431565b68053444835ec58000008311156123325760405162461bcd60e51b815260206004820152601960248201527f496e76616c69642077657468546f5661756c74416d6f756e74000000000000006044820152606401610431565b846034546123409190614e6f565b603455606854612351908590614e6f565b60685543606b55821561249f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0846040518263ffffffff1660e01b81526004016000604051808303818588803b1580156123b957600080fd5b505af11580156123cd573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018890527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b15801561245d57600080fd5b505af1158015612471573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124959190614617565b5061249f836138e6565b60408051868152602081018690529081018490527f80d022717ea022455c5886b8dd8a29c037570aae58aeb4d7b136d7a10ec2e4319060600160405180910390a16124ea600061394e565b6125295760405162461bcd60e51b815260206004820152601060248201526f233ab9b29039ba34b63610313637bbb760811b6044820152606401610431565b612531613dd4565b5060019055505050565b612543612b74565b61255f5760405162461bcd60e51b815260040161043190614c9e565b60a05481106125a05760405162461bcd60e51b815260206004820152600d60248201526c092dcecc2d8d2c840d2dcc8caf609b1b6044820152606401610431565b600060a082815481106125b5576125b5614fa9565b60009182526020808320909101546001600160a01b03908116808452609f90925260409092205460a054919350909116906125f290600190614f09565b8310156126745760a0805461260990600190614f09565b8154811061261957612619614fa9565b60009182526020909120015460a080546001600160a01b03909216918590811061264557612645614fa9565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055505b60a080548061268557612685614f93565b60008281526020808220600019908401810180546001600160a01b031990811690915593019093556001600160a01b03858116808352609f855260409283902080549094169093559051908416815290917f16b7600acff27e39a8a96056b3d533045298de927507f5c1d97e4accde60488c91015b60405180910390a2505050565b61270f612b74565b61272b5760405162461bcd60e51b815260040161043190614c9e565b8060005b818110156127de57600084848381811061274b5761274b614fa9565b90506020020160208101906127609190614302565b6001600160a01b031614156127ce5760405162461bcd60e51b815260206004820152602e60248201527f43616e206e6f742073657420616e20656d70747920616464726573732061732060448201526d30903932bbb0b932103a37b5b2b760911b6064820152608401610431565b6127d781614f4c565b905061272f565b507f04c0b9649497d316554306e53678d5f5f5dbc3a06f97dec13ff4cfe98b986bbc60a4848460405161281393929190614a57565b60405180910390a1610f3660a4848461405b565b61282f612b74565b61284b5760405162461bcd60e51b815260040161043190614c9e565b603680546001600160a01b0319166001600160a01b0383169081179091556040517f3329861a0008b3348767567d2405492b997abd79a088d0f2cef6b1a09a8e7ff790600090a250565b60335460009061010090046001600160a01b031633146128c75760405162461bcd60e51b815260040161043190614d2a565b60335460ff16156128ea5760405162461bcd60e51b815260040161043190614d00565b600080516020614ff98339815191528054600281141561291c5760405162461bcd60e51b815260040161043190614d61565b6002825561292a600161394e565b925060018255505090565b61293d612b74565b6129595760405162461bcd60e51b815260040161043190614c9e565b808210801561297057506801bc16d674ec80000081105b801561298d5750673782dace9d90000061298a8383614f09565b10155b6129d95760405162461bcd60e51b815260206004820152601760248201527f496e636f7272656374206675736520696e74657276616c0000000000000000006044820152606401610431565b6069829055606a81905560408051838152602081018390527fcb8d24e46eb3c402bf344ee60a6576cba9ef2f59ea1af3b311520704924e901a91015b60405180910390a15050565b60405163095ea7b360e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260001960248301527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b390604401602060405180830381600087803b158015612aac57600080fd5b505af1158015612ac0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae49190614617565b50565b612aef612b74565b612b0b5760405162461bcd60e51b815260040161043190614c9e565b60a354604080516001600160a01b03928316815291831660208301527fe48386b84419f4d36e0f96c10cc3510b6fb1a33795620c5098b22472bbe90796910160405180910390a160a380546001600160a01b0319166001600160a01b0392909216919091179055565b6000612b8c6000805160206150198339815191525490565b6001600160a01b0316336001600160a01b031614905090565b612bad612b74565b612bc95760405162461bcd60e51b815260040161043190614c9e565b612bf1817f44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db55565b806001600160a01b0316612c116000805160206150198339815191525490565b6001600160a01b03167fa39cc5eb22d0f34d8beaefee8a3f17cc229c1a1d1ef87a5ad47313487b1c4f0d60405160405180910390a350565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612c915760405162461bcd60e51b815260040161043190614c67565b600080516020614ff983398151915280546002811415612cc35760405162461bcd60e51b815260040161043190614d61565b600282557f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614612d185760405162461bcd60e51b815260040161043190614cd5565b6125318585856137e8565b60335461010090046001600160a01b03163314612d525760405162461bcd60e51b815260040161043190614d2a565b60335460ff1615612d755760405162461bcd60e51b815260040161043190614d00565b60008484604051612d8792919061492e565b604080519182900390912060008181526035602052919091205490915060ff166002816004811115612dbb57612dbb614f7d565b14612dff5760405162461bcd60e51b815260206004820152601460248201527315985b1a59185d1bdc881b9bdd081cdd185ad95960621b6044820152606401610431565b604051633877322b60e01b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690633877322b90612e51908990899089908990600401614b51565b600060405180830381600087803b158015612e6b57600080fd5b505af1158015612e7f573d6000803e3d6000fd5b50505060008381526035602052604090819020805460ff19166003179055518391507f8c2e15303eb94e531acc988c2a01d1193bdaaa15eda7f16dda85316ed463578d90612ed4908990899089908990614b51565b60405180910390a2505050505050565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614612f2c5760405162461bcd60e51b815260040161043190614c67565b600080516020614ff983398151915280546002811415612f5e5760405162461bcd60e51b815260040161043190614d61565b600282556040516370a0823160e01b81523060048201526000907f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906370a082319060240160206040518083038186803b158015612fc457600080fd5b505afa158015612fd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffc9190614765565b90506000610107548261300f9190614f09565b90508015613047576101078290556130477f0000000000000000000000000000000000000000000000000000000000000000826133ae565b5050600182555050565b6036546001600160a01b031633146130ab5760405162461bcd60e51b815260206004820152601960248201527f43616c6c6572206973206e6f7420746865204d6f6e69746f72000000000000006044820152606401610431565b600060388190556040517fe765a88a37047c5d793dce22b9ceb5a0f5039d276da139b4c7d29613f341f1109190a1565b606060a480548060200260200160405190810160405280929190818152602001828054801561313357602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613115575b5050505050905090565b6001600160a01b038281166000908152609f6020526040902054161561319a5760405162461bcd60e51b81526020600482015260126024820152711c151bdad95b88185b1c9958591e481cd95d60721b6044820152606401610431565b6001600160a01b038216158015906131ba57506001600160a01b03811615155b6131fa5760405162461bcd60e51b8152602060048201526011602482015270496e76616c69642061646472657373657360781b6044820152606401610431565b6001600160a01b038281166000818152609f6020908152604080832080549587166001600160a01b0319968716811790915560a0805460018101825594527f78fdc8d422c49ced035a9edf18d00d3c6a8d81df210f3e5e448e045e77b41e8890930180549095168417909455925190815290917fef6485b84315f9b1483beffa32aae9a0596890395e3d7521f1c5fbb51790e765910160405180910390a25050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b1790526132ee908490613e4e565b505050565b82516133069060a49060208601906140be565b508151815181146133505760405162461bcd60e51b8152602060048201526014602482015273496e76616c696420696e7075742061727261797360601b6044820152606401610431565b60005b818110156133a75761339784828151811061337057613370614fa9565b602002602001015184838151811061338a5761338a614fa9565b602002602001015161313d565b6133a081614f4c565b9050613353565b5050505050565b600081116133f75760405162461bcd60e51b81526020600482015260166024820152754d757374206465706f73697420736f6d657468696e6760501b6044820152606401610431565b6040805160008152602081018390526001600160a01b038416917f5548c837ab068cf56a2c2479df0882a4922fd203edb7517321831d95078c5f62910160405180910390a25050565b60335460ff16156134635760405162461bcd60e51b815260040161043190614d00565b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663e52253816040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156134c057600080fd5b505af11580156134d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134f89190614765565b905060006068548261350a9190614eb0565b90508047101561355c5760405162461bcd60e51b815260206004820152601860248201527f496e73756666696369656e74206574682062616c616e636500000000000000006044820152606401610431565b8015610c4c5760006068819055507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156135c557600080fd5b505af11580156135d9573d6000803e3d6000fd5b505060a35461361993506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000811693501690508361329c565b60a354604080516001600160a01b0392831681527f0000000000000000000000000000000000000000000000000000000000000000909216602083015281018290527ff6c07a063ed4e63808eb8da7112d46dbcd38de2b40a73dbcc9353c5a94c7235390606001612a15565b6001600160a01b0381166136db5760405162461bcd60e51b815260206004820152601a60248201527f4e657720476f7665726e6f7220697320616464726573732830290000000000006044820152606401610431565b806001600160a01b03166136fb6000805160206150198339815191525490565b6001600160a01b03167fc7c0c772add429241571afb3805861fb3cfa2af374534088b76cdb4325a87e9a60405160405180910390a3612ae48160008051602061501983398151915255565b60006137558261010754613f20565b905080610107600082825461376a9190614f09565b90915550505050565b60335460ff16156137965760405162461bcd60e51b815260040161043190614d00565b6033805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586137cb3390565b6040516001600160a01b03909116815260200160405180910390a1565b600081116138385760405162461bcd60e51b815260206004820152601760248201527f4d75737420776974686472617720736f6d657468696e670000000000000000006044820152606401610431565b6001600160a01b0383166138875760405162461bcd60e51b8152602060048201526016602482015275135d5cdd081cdc1958da599e481c9958da5c1a595b9d60521b6044820152606401610431565b61389081613746565b6138a46001600160a01b038316848361329c565b6040805160008152602081018390526001600160a01b038416917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b639891016126fa565b6040805160008152602081018390526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016917f2717ead6b9200dd235aad468c9809ea400fe33ac69b5bfaa6d3e90fc922b6398910160405180910390a250565b60006068544710156139635761156982613f38565b6000606854476139739190614f09565b9050600191506801bc16d674ec8000008110613b5757600061399e6801bc16d674ec80000083614ec8565b905080603460008282546139b29190614f09565b90915550600090506139cd826801bc16d674ec800000614eea565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613a2a57600080fd5b505af1158015613a3e573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613ace57600080fd5b505af1158015613ae2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b069190614617565b50613b10816138e6565b60345460408051848152602081019290925281018290527fbe7040030ff7b347853214bf49820c6d455fedf58f3815f85c7bc5216993682b9060600160405180910390a150505b600060685447613b679190614f09565b90506801bc16d674ec8000008110613bb95760405162461bcd60e51b8152602060048201526015602482015274556e6578706563746564206163636f756e74696e6760581b6044820152606401610431565b80613bc5575050919050565b606954811015613c1f578060686000828254613be19190614eb0565b90915550506040518181527f7a745a2c63a535068f52ceca27debd5297bbad5f7f37ec53d044a59d0362445d906020015b60405180910390a1613dcd565b606a54811115613dbc577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b158015613c8457600080fd5b505af1158015613c98573d6000803e3d6000fd5b505060405163a9059cbb60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018690527f000000000000000000000000000000000000000000000000000000000000000016935063a9059cbb92506044019050602060405180830381600087803b158015613d2857600080fd5b505af1158015613d3c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d609190614617565b50600160346000828254613d749190614f09565b90915550613d839050816138e6565b60345460408051918252602082018390527f6aa7e30787b26429ced603a7aba8b19c4b5d5bcf29a3257da953c8d53bcaa3a69101613c12565b613dc584613f38565b949350505050565b5050919050565b60335460ff16613e1d5760405162461bcd60e51b815260206004820152601460248201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b6044820152606401610431565b6033805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa336137cb565b6000613ea3826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613f509092919063ffffffff16565b8051909150156132ee5780806020019051810190613ec19190614617565b6132ee5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610431565b6000818310613f2f5781613f31565b825b9392505050565b60008115613f4857613f48613773565b506000919050565b6060613dc5848460008585843b613fa95760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610431565b600080866001600160a01b03168587604051613fc5919061493e565b60006040518083038185875af1925050503d8060008114614002576040519150601f19603f3d011682016040523d82523d6000602084013e614007565b606091505b5091509150614017828286614022565b979650505050505050565b60608315614031575081613f31565b8251156140415782518084602001fd5b8160405162461bcd60e51b81526004016104319190614c54565b8280548282559060005260206000209081019282156140ae579160200282015b828111156140ae5781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019061407b565b506140ba929150614113565b5090565b8280548282559060005260206000209081019282156140ae579160200282015b828111156140ae57825182546001600160a01b0319166001600160a01b039091161782556020909201916001909101906140de565b5b808211156140ba5760008155600101614114565b60008083601f84011261413a57600080fd5b5081356001600160401b0381111561415157600080fd5b6020830191508360208260051b850101111561416c57600080fd5b9250929050565b600082601f83011261418457600080fd5b8135602061419961419483614e4c565b614e1c565b80838252828201915082860187848660051b89010111156141b957600080fd5b60005b858110156141e15781356141cf81614fd5565b845292840192908401906001016141bc565b5090979650505050505050565b60008083601f84011261420057600080fd5b5081356001600160401b0381111561421757600080fd5b60208301915083602082850101111561416c57600080fd5b600060a0828403121561424157600080fd5b50919050565b600060a0828403121561425957600080fd5b60405160a081018181106001600160401b038211171561427b5761427b614fbf565b60405290508061428a836142d2565b8152614298602084016142eb565b60208201526142a9604084016142eb565b604082015260608301356142bc81614fea565b6060820152608092830135920191909152919050565b803563ffffffff811681146142e657600080fd5b919050565b80356001600160401b03811681146142e657600080fd5b60006020828403121561431457600080fd5b8135613f3181614fd5565b60006020828403121561433157600080fd5b8151613f3181614fd5565b6000806040838503121561434f57600080fd5b823561435a81614fd5565b9150602083013561436a81614fd5565b809150509250929050565b60008060006060848603121561438a57600080fd5b833561439581614fd5565b925060208401356143a581614fd5565b929592945050506040919091013590565b600080604083850312156143c957600080fd5b82356143d481614fd5565b946020939093013593505050565b600080602083850312156143f557600080fd5b82356001600160401b0381111561440b57600080fd5b61441785828601614128565b90969095509350505050565b60008060006060848603121561443857600080fd5b83356001600160401b038082111561444f57600080fd5b61445b87838801614173565b9450602086013591508082111561447157600080fd5b61447d87838801614173565b9350604086013591508082111561449357600080fd5b506144a086828701614173565b9150509250925092565b600080600080600080600080610120898b0312156144c757600080fd5b88356001600160401b03808211156144de57600080fd5b6144ea8c838d01614128565b909a50985060208b013591508082111561450357600080fd5b61450f8c838d01614128565b909850965060408b013591508082111561452857600080fd5b506145358b828c01614128565b9095509350506060890135915061454f8a60808b0161422f565b90509295985092959890939650565b600080600060e0848603121561457357600080fd5b83356001600160401b0381111561458957600080fd5b8401601f8101861361459a57600080fd5b803560206145aa61419483614e4c565b8083825282820191508285018a848660051b88010111156145ca57600080fd5b600095505b848610156145f4576145e0816142eb565b8352600195909501949183019183016145cf565b50965050860135935061460e915086905060408601614247565b90509250925092565b60006020828403121561462957600080fd5b8151613f3181614fea565b60006020828403121561464657600080fd5b5035919050565b6000806000806040858703121561466357600080fd5b84356001600160401b038082111561467a57600080fd5b614686888389016141ee565b9096509450602087013591508082111561469f57600080fd5b506146ac87828801614128565b95989497509550505050565b600080600080600060e086880312156146d057600080fd5b85356001600160401b03808211156146e757600080fd5b6146f389838a016141ee565b9097509550602088013591508082111561470c57600080fd5b5061471988828901614128565b909450925061472d9050876040880161422f565b90509295509295909350565b60008060006060848603121561474e57600080fd5b505081359360208301359350604090920135919050565b60006020828403121561477757600080fd5b5051919050565b6000806040838503121561479157600080fd5b50508035926020909101359150565b81835260006020808501808196508560051b810191508460005b878110156148235782840389528135601e198836030181126147db57600080fd5b870180356001600160401b038111156147f357600080fd5b80360389131561480257600080fd5b61480f8682898501614877565b9a87019a95505050908401906001016147ba565b5091979650505050505050565b8183526000602080850194508260005b8581101561486c576001600160401b03614859836142eb565b1687529582019590820190600101614840565b509495945050505050565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b600081518084526148b8816020860160208601614f20565b601f01601f19169290920160200192915050565b63ffffffff6148da826142d2565b1682526148e9602082016142eb565b6001600160401b03808216602085015280614906604085016142eb565b1660408501525050606081013561491c81614fea565b15156060830152608090810135910152565b8183823760009101908152919050565b60008251614950818460208701614f20565b9190910192915050565b6001600160a01b03851681526101006020808301829052855191830182905260009161012084019187810191845b818110156149ad5783516001600160401b031685529382019392820192600101614988565b505082935086604086015263ffffffff865116606086015280860151925050506001600160401b0380821660808501528060408601511660a085015250506060830151151560c0830152608083015160e083015295945050505050565b6020808252825182820181905260009190848201906040850190845b81811015614a4b5783516001600160a01b031683529284019291840191600101614a26565b50909695505050505050565b6000604082016040835280865480835260608501915087600052602092508260002060005b82811015614aa15781546001600160a01b031684529284019260019182019101614a7c565b505050838103828501528481528590820160005b86811015614ae3578235614ac881614fd5565b6001600160a01b031682529183019190830190600101614ab5565b50979650505050505050565b6000610120808352614b048184018b8d6147a0565b90508281036020840152614b1981898b614830565b90508281036040840152614b2e8187896147a0565b915050836060830152614b4460808301846148cc565b9998505050505050505050565b604081526000614b65604083018688614877565b8281036020840152614017818587614830565b60e081526000614b8c60e083018789614877565b8281036020840152614b9f818688614830565b915050614baf60408301846148cc565b9695505050505050565b608081526000614bcd60808301888a614877565b8281036020840152614bdf81886148a0565b90508281036040840152614bf4818688614877565b915050826060830152979650505050505050565b604081526000614c1c604083018587614877565b9050826020830152949350505050565b6020810160058310614c4e57634e487b7160e01b600052602160045260246000fd5b91905290565b602081526000613f3160208301846148a0565b60208082526017908201527f43616c6c6572206973206e6f7420746865205661756c74000000000000000000604082015260600190565b6020808252601a908201527f43616c6c6572206973206e6f742074686520476f7665726e6f72000000000000604082015260600190565b602080825260119082015270155b9cdd5c1c1bdc9d195908185cdcd95d607a1b604082015260600190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b6020808252601d908201527f43616c6c6572206973206e6f7420746865205265676973747261746f72000000604082015260600190565b6020808252600e908201526d1499595b9d1c985b9d0818d85b1b60921b604082015260600190565b6020808252601c908201527f43616c6c6572206973206e6f7420746865205374726174656769737400000000604082015260600190565b6000808335601e19843603018112614dd757600080fd5b8301803591506001600160401b03821115614df157600080fd5b60200191503681900382131561416c57600080fd5b60008235605e1983360301811261495057600080fd5b604051601f8201601f191681016001600160401b0381118282101715614e4457614e44614fbf565b604052919050565b60006001600160401b03821115614e6557614e65614fbf565b5060051b60200190565b600080821280156001600160ff1b0384900385131615614e9157614e91614f67565b600160ff1b8390038412811615614eaa57614eaa614f67565b50500190565b60008219821115614ec357614ec3614f67565b500190565b600082614ee557634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615614f0457614f04614f67565b500290565b600082821015614f1b57614f1b614f67565b500390565b60005b83811015614f3b578181015183820152602001614f23565b83811115610f365750506000910152565b6000600019821415614f6057614f60614f67565b5060010190565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b0381168114612ae457600080fd5b8015158114612ae457600080fdfe53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac45357bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4aa26469706673582212202f5841dbddbb09e107c348cf20cd037b9b59d2055c278e204645d030783a5d5464736f6c63430008070033", "libraries": {}, "devdoc": { "author": "Origin Protocol Inc", @@ -1829,7 +1829,7 @@ "storageLayout": { "storage": [ { - "astId": 5623, + "astId": 5769, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "initialized", "offset": 0, @@ -1837,7 +1837,7 @@ "type": "t_bool" }, { - "astId": 5626, + "astId": 5772, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "initializing", "offset": 1, @@ -1845,7 +1845,7 @@ "type": "t_bool" }, { - "astId": 5666, + "astId": 5812, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "______gap", "offset": 0, @@ -1861,7 +1861,7 @@ "type": "t_bool" }, { - "astId": 3737, + "astId": 3849, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "validatorRegistrator", "offset": 1, @@ -1869,7 +1869,7 @@ "type": "t_address" }, { - "astId": 3740, + "astId": 3852, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "activeDepositedValidators", "offset": 0, @@ -1877,15 +1877,15 @@ "type": "t_uint256" }, { - "astId": 3746, + "astId": 3858, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "validatorsStates", "offset": 0, "slot": "53", - "type": "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3765)" + "type": "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3877)" }, { - "astId": 3749, + "astId": 3861, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakingMonitor", "offset": 0, @@ -1893,7 +1893,7 @@ "type": "t_address" }, { - "astId": 3752, + "astId": 3864, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakeETHThreshold", "offset": 0, @@ -1901,7 +1901,7 @@ "type": "t_uint256" }, { - "astId": 3755, + "astId": 3867, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "stakeETHTally", "offset": 0, @@ -1909,7 +1909,7 @@ "type": "t_uint256" }, { - "astId": 3759, + "astId": 3871, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -1917,7 +1917,7 @@ "type": "t_array(t_uint256)47_storage" }, { - "astId": 3223, + "astId": 3335, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "consensusRewards", "offset": 0, @@ -1925,7 +1925,7 @@ "type": "t_uint256" }, { - "astId": 3226, + "astId": 3338, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "fuseIntervalStart", "offset": 0, @@ -1933,7 +1933,7 @@ "type": "t_uint256" }, { - "astId": 3229, + "astId": 3341, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "fuseIntervalEnd", "offset": 0, @@ -1941,7 +1941,7 @@ "type": "t_uint256" }, { - "astId": 3232, + "astId": 3344, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "lastFixAccountingBlockNumber", "offset": 0, @@ -1949,7 +1949,7 @@ "type": "t_uint256" }, { - "astId": 3236, + "astId": 3348, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -1957,7 +1957,7 @@ "type": "t_array(t_uint256)49_storage" }, { - "astId": 5746, + "astId": 5892, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_platformAddress", "offset": 0, @@ -1965,7 +1965,7 @@ "type": "t_address" }, { - "astId": 5749, + "astId": 5895, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_vaultAddress", "offset": 0, @@ -1973,7 +1973,7 @@ "type": "t_address" }, { - "astId": 5754, + "astId": 5900, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "assetToPToken", "offset": 0, @@ -1981,7 +1981,7 @@ "type": "t_mapping(t_address,t_address)" }, { - "astId": 5758, + "astId": 5904, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "assetsMapped", "offset": 0, @@ -1989,7 +1989,7 @@ "type": "t_array(t_address)dyn_storage" }, { - "astId": 5760, + "astId": 5906, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_rewardTokenAddress", "offset": 0, @@ -1997,7 +1997,7 @@ "type": "t_address" }, { - "astId": 5762, + "astId": 5908, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_deprecated_rewardLiquidationThreshold", "offset": 0, @@ -2005,7 +2005,7 @@ "type": "t_uint256" }, { - "astId": 5765, + "astId": 5911, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "harvesterAddress", "offset": 0, @@ -2013,7 +2013,7 @@ "type": "t_address" }, { - "astId": 5769, + "astId": 5915, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "rewardTokenAddresses", "offset": 0, @@ -2021,7 +2021,7 @@ "type": "t_array(t_address)dyn_storage" }, { - "astId": 5773, + "astId": 5919, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "_reserved", "offset": 0, @@ -2029,7 +2029,7 @@ "type": "t_array(t_int256)98_storage" }, { - "astId": 2725, + "astId": 2837, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "depositedWethAccountedFor", "offset": 0, @@ -2037,7 +2037,7 @@ "type": "t_uint256" }, { - "astId": 2729, + "astId": 2841, "contract": "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol:NativeStakingSSVStrategy", "label": "__gap", "offset": 0, @@ -2091,7 +2091,7 @@ "label": "bytes32", "numberOfBytes": "32" }, - "t_enum(VALIDATOR_STATE)3765": { + "t_enum(VALIDATOR_STATE)3877": { "encoding": "inplace", "label": "enum ValidatorRegistrator.VALIDATOR_STATE", "numberOfBytes": "1" @@ -2108,12 +2108,12 @@ "numberOfBytes": "32", "value": "t_address" }, - "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3765)": { + "t_mapping(t_bytes32,t_enum(VALIDATOR_STATE)3877)": { "encoding": "mapping", "key": "t_bytes32", "label": "mapping(bytes32 => enum ValidatorRegistrator.VALIDATOR_STATE)", "numberOfBytes": "32", - "value": "t_enum(VALIDATOR_STATE)3765" + "value": "t_enum(VALIDATOR_STATE)3877" }, "t_uint256": { "encoding": "inplace", diff --git a/contracts/deployments/holesky/solcInputs/f9cd4fae6f07aaea4914817197ab80c9.json b/contracts/deployments/holesky/solcInputs/f9cd4fae6f07aaea4914817197ab80c9.json new file mode 100644 index 0000000000..df8139dc18 --- /dev/null +++ b/contracts/deployments/holesky/solcInputs/f9cd4fae6f07aaea4914817197ab80c9.json @@ -0,0 +1,110 @@ +{ + "language": "Solidity", + "sources": { + "@openzeppelin/contracts/security/Pausable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (security/Pausable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which allows children to implement an emergency stop\n * mechanism that can be triggered by an authorized account.\n *\n * This module is used through inheritance. It will make available the\n * modifiers `whenNotPaused` and `whenPaused`, which can be applied to\n * the functions of your contract. Note that they will not be pausable by\n * simply including this module, only once the modifiers are put in place.\n */\nabstract contract Pausable is Context {\n /**\n * @dev Emitted when the pause is triggered by `account`.\n */\n event Paused(address account);\n\n /**\n * @dev Emitted when the pause is lifted by `account`.\n */\n event Unpaused(address account);\n\n bool private _paused;\n\n /**\n * @dev Initializes the contract in unpaused state.\n */\n constructor() {\n _paused = false;\n }\n\n /**\n * @dev Returns true if the contract is paused, and false otherwise.\n */\n function paused() public view virtual returns (bool) {\n return _paused;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is not paused.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n modifier whenNotPaused() {\n require(!paused(), \"Pausable: paused\");\n _;\n }\n\n /**\n * @dev Modifier to make a function callable only when the contract is paused.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n modifier whenPaused() {\n require(paused(), \"Pausable: not paused\");\n _;\n }\n\n /**\n * @dev Triggers stopped state.\n *\n * Requirements:\n *\n * - The contract must not be paused.\n */\n function _pause() internal virtual whenNotPaused {\n _paused = true;\n emit Paused(_msgSender());\n }\n\n /**\n * @dev Returns to normal state.\n *\n * Requirements:\n *\n * - The contract must be paused.\n */\n function _unpause() internal virtual whenPaused {\n _paused = false;\n emit Unpaused(_msgSender());\n }\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/IERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Interface of the ERC20 standard as defined in the EIP.\n */\ninterface IERC20 {\n /**\n * @dev Returns the amount of tokens in existence.\n */\n function totalSupply() external view returns (uint256);\n\n /**\n * @dev Returns the amount of tokens owned by `account`.\n */\n function balanceOf(address account) external view returns (uint256);\n\n /**\n * @dev Moves `amount` tokens from the caller's account to `recipient`.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transfer(address recipient, uint256 amount) external returns (bool);\n\n /**\n * @dev Returns the remaining number of tokens that `spender` will be\n * allowed to spend on behalf of `owner` through {transferFrom}. This is\n * zero by default.\n *\n * This value changes when {approve} or {transferFrom} are called.\n */\n function allowance(address owner, address spender) external view returns (uint256);\n\n /**\n * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * IMPORTANT: Beware that changing an allowance with this method brings the risk\n * that someone may use both the old and the new allowance by unfortunate\n * transaction ordering. One possible solution to mitigate this race\n * condition is to first reduce the spender's allowance to 0 and set the\n * desired value afterwards:\n * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729\n *\n * Emits an {Approval} event.\n */\n function approve(address spender, uint256 amount) external returns (bool);\n\n /**\n * @dev Moves `amount` tokens from `sender` to `recipient` using the\n * allowance mechanism. `amount` is then deducted from the caller's\n * allowance.\n *\n * Returns a boolean value indicating whether the operation succeeded.\n *\n * Emits a {Transfer} event.\n */\n function transferFrom(\n address sender,\n address recipient,\n uint256 amount\n ) external returns (bool);\n\n /**\n * @dev Emitted when `value` tokens are moved from one account (`from`) to\n * another (`to`).\n *\n * Note that `value` may be zero.\n */\n event Transfer(address indexed from, address indexed to, uint256 value);\n\n /**\n * @dev Emitted when the allowance of a `spender` for an `owner` is set by\n * a call to {approve}. `value` is the new allowance.\n */\n event Approval(address indexed owner, address indexed spender, uint256 value);\n}\n" + }, + "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (token/ERC20/utils/SafeERC20.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../IERC20.sol\";\nimport \"../../../utils/Address.sol\";\n\n/**\n * @title SafeERC20\n * @dev Wrappers around ERC20 operations that throw on failure (when the token\n * contract returns false). Tokens that return no value (and instead revert or\n * throw on failure) are also supported, non-reverting calls are assumed to be\n * successful.\n * To use this library you can add a `using SafeERC20 for IERC20;` statement to your contract,\n * which allows you to call the safe operations as `token.safeTransfer(...)`, etc.\n */\nlibrary SafeERC20 {\n using Address for address;\n\n function safeTransfer(\n IERC20 token,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));\n }\n\n function safeTransferFrom(\n IERC20 token,\n address from,\n address to,\n uint256 value\n ) internal {\n _callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));\n }\n\n /**\n * @dev Deprecated. This function has issues similar to the ones found in\n * {IERC20-approve}, and its usage is discouraged.\n *\n * Whenever possible, use {safeIncreaseAllowance} and\n * {safeDecreaseAllowance} instead.\n */\n function safeApprove(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n // safeApprove should only be called when setting an initial allowance,\n // or when resetting it to zero. To increase and decrease it, use\n // 'safeIncreaseAllowance' and 'safeDecreaseAllowance'\n require(\n (value == 0) || (token.allowance(address(this), spender) == 0),\n \"SafeERC20: approve from non-zero to non-zero allowance\"\n );\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));\n }\n\n function safeIncreaseAllowance(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n uint256 newAllowance = token.allowance(address(this), spender) + value;\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n\n function safeDecreaseAllowance(\n IERC20 token,\n address spender,\n uint256 value\n ) internal {\n unchecked {\n uint256 oldAllowance = token.allowance(address(this), spender);\n require(oldAllowance >= value, \"SafeERC20: decreased allowance below zero\");\n uint256 newAllowance = oldAllowance - value;\n _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));\n }\n }\n\n /**\n * @dev Imitates a Solidity high-level call (i.e. a regular function call to a contract), relaxing the requirement\n * on the return value: the return value is optional (but if data is returned, it must not be false).\n * @param token The token targeted by the call.\n * @param data The call data (encoded using abi.encode or one of its variants).\n */\n function _callOptionalReturn(IERC20 token, bytes memory data) private {\n // We need to perform a low level call here, to bypass Solidity's return data size checking mechanism, since\n // we're implementing it ourselves. We use {Address.functionCall} to perform this call, which verifies that\n // the target address contains contract code and also asserts for success in the low-level call.\n\n bytes memory returndata = address(token).functionCall(data, \"SafeERC20: low-level call failed\");\n if (returndata.length > 0) {\n // Return data is optional\n require(abi.decode(returndata, (bool)), \"SafeERC20: ERC20 operation did not succeed\");\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Address.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize, which returns 0 for contracts in\n // construction, since the code is only stored at the end of the\n // constructor execution.\n\n uint256 size;\n assembly {\n size := extcodesize(account)\n }\n return size > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "@openzeppelin/contracts/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/Math.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/Math.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Standard math utilities missing in the Solidity language.\n */\nlibrary Math {\n /**\n * @dev Returns the largest of two numbers.\n */\n function max(uint256 a, uint256 b) internal pure returns (uint256) {\n return a >= b ? a : b;\n }\n\n /**\n * @dev Returns the smallest of two numbers.\n */\n function min(uint256 a, uint256 b) internal pure returns (uint256) {\n return a < b ? a : b;\n }\n\n /**\n * @dev Returns the average of two numbers. The result is rounded towards\n * zero.\n */\n function average(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b) / 2 can overflow.\n return (a & b) + (a ^ b) / 2;\n }\n\n /**\n * @dev Returns the ceiling of the division of two numbers.\n *\n * This differs from standard division with `/` in that it rounds up instead\n * of rounding down.\n */\n function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {\n // (a + b - 1) / b can overflow on addition, so we distribute.\n return a / b + (a % b == 0 ? 0 : 1);\n }\n}\n" + }, + "@openzeppelin/contracts/utils/math/SafeMath.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol)\n\npragma solidity ^0.8.0;\n\n// CAUTION\n// This version of SafeMath should only be used with Solidity 0.8 or later,\n// because it relies on the compiler's built in overflow checks.\n\n/**\n * @dev Wrappers over Solidity's arithmetic operations.\n *\n * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler\n * now has built in overflow checking.\n */\nlibrary SafeMath {\n /**\n * @dev Returns the addition of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n uint256 c = a + b;\n if (c < a) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the substraction of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b > a) return (false, 0);\n return (true, a - b);\n }\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, with an overflow flag.\n *\n * _Available since v3.4._\n */\n function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n // Gas optimization: this is cheaper than requiring 'a' not being zero, but the\n // benefit is lost if 'b' is also tested.\n // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522\n if (a == 0) return (true, 0);\n uint256 c = a * b;\n if (c / a != b) return (false, 0);\n return (true, c);\n }\n }\n\n /**\n * @dev Returns the division of two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a / b);\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag.\n *\n * _Available since v3.4._\n */\n function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {\n unchecked {\n if (b == 0) return (false, 0);\n return (true, a % b);\n }\n }\n\n /**\n * @dev Returns the addition of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `+` operator.\n *\n * Requirements:\n *\n * - Addition cannot overflow.\n */\n function add(uint256 a, uint256 b) internal pure returns (uint256) {\n return a + b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting on\n * overflow (when the result is negative).\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(uint256 a, uint256 b) internal pure returns (uint256) {\n return a - b;\n }\n\n /**\n * @dev Returns the multiplication of two unsigned integers, reverting on\n * overflow.\n *\n * Counterpart to Solidity's `*` operator.\n *\n * Requirements:\n *\n * - Multiplication cannot overflow.\n */\n function mul(uint256 a, uint256 b) internal pure returns (uint256) {\n return a * b;\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator.\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(uint256 a, uint256 b) internal pure returns (uint256) {\n return a / b;\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting when dividing by zero.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(uint256 a, uint256 b) internal pure returns (uint256) {\n return a % b;\n }\n\n /**\n * @dev Returns the subtraction of two unsigned integers, reverting with custom message on\n * overflow (when the result is negative).\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {trySub}.\n *\n * Counterpart to Solidity's `-` operator.\n *\n * Requirements:\n *\n * - Subtraction cannot overflow.\n */\n function sub(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b <= a, errorMessage);\n return a - b;\n }\n }\n\n /**\n * @dev Returns the integer division of two unsigned integers, reverting with custom message on\n * division by zero. The result is rounded towards zero.\n *\n * Counterpart to Solidity's `/` operator. Note: this function uses a\n * `revert` opcode (which leaves remaining gas untouched) while Solidity\n * uses an invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function div(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a / b;\n }\n }\n\n /**\n * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),\n * reverting with custom message when dividing by zero.\n *\n * CAUTION: This function is deprecated because it requires allocating memory for the error\n * message unnecessarily. For custom revert reasons use {tryMod}.\n *\n * Counterpart to Solidity's `%` operator. This function uses a `revert`\n * opcode (which leaves remaining gas untouched) while Solidity uses an\n * invalid opcode to revert (consuming all remaining gas).\n *\n * Requirements:\n *\n * - The divisor cannot be zero.\n */\n function mod(\n uint256 a,\n uint256 b,\n string memory errorMessage\n ) internal pure returns (uint256) {\n unchecked {\n require(b > 0, errorMessage);\n return a % b;\n }\n }\n}\n" + }, + "contracts/governance/Governable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base for contracts that are managed by the Origin Protocol's Governor.\n * @dev Copy of the openzeppelin Ownable.sol contract with nomenclature change\n * from owner to governor and renounce methods removed. Does not use\n * Context.sol like Ownable.sol does for simplification.\n * @author Origin Protocol Inc\n */\ncontract Governable {\n // Storage position of the owner and pendingOwner of the contract\n // keccak256(\"OUSD.governor\");\n bytes32 private constant governorPosition =\n 0x7bea13895fa79d2831e0a9e28edede30099005a50d652d8957cf8a607ee6ca4a;\n\n // keccak256(\"OUSD.pending.governor\");\n bytes32 private constant pendingGovernorPosition =\n 0x44c4d30b2eaad5130ad70c3ba6972730566f3e6359ab83e800d905c61b1c51db;\n\n // keccak256(\"OUSD.reentry.status\");\n bytes32 private constant reentryStatusPosition =\n 0x53bf423e48ed90e97d02ab0ebab13b2a235a6bfbe9c321847d5c175333ac4535;\n\n // See OpenZeppelin ReentrancyGuard implementation\n uint256 constant _NOT_ENTERED = 1;\n uint256 constant _ENTERED = 2;\n\n event PendingGovernorshipTransfer(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n\n event GovernorshipTransferred(\n address indexed previousGovernor,\n address indexed newGovernor\n );\n\n /**\n * @dev Initializes the contract setting the deployer as the initial Governor.\n */\n constructor() {\n _setGovernor(msg.sender);\n emit GovernorshipTransferred(address(0), _governor());\n }\n\n /**\n * @notice Returns the address of the current Governor.\n */\n function governor() public view returns (address) {\n return _governor();\n }\n\n /**\n * @dev Returns the address of the current Governor.\n */\n function _governor() internal view returns (address governorOut) {\n bytes32 position = governorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n governorOut := sload(position)\n }\n }\n\n /**\n * @dev Returns the address of the pending Governor.\n */\n function _pendingGovernor()\n internal\n view\n returns (address pendingGovernor)\n {\n bytes32 position = pendingGovernorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n pendingGovernor := sload(position)\n }\n }\n\n /**\n * @dev Throws if called by any account other than the Governor.\n */\n modifier onlyGovernor() {\n require(isGovernor(), \"Caller is not the Governor\");\n _;\n }\n\n /**\n * @notice Returns true if the caller is the current Governor.\n */\n function isGovernor() public view returns (bool) {\n return msg.sender == _governor();\n }\n\n function _setGovernor(address newGovernor) internal {\n bytes32 position = governorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newGovernor)\n }\n }\n\n /**\n * @dev Prevents a contract from calling itself, directly or indirectly.\n * Calling a `nonReentrant` function from another `nonReentrant`\n * function is not supported. It is possible to prevent this from happening\n * by making the `nonReentrant` function external, and make it call a\n * `private` function that does the actual work.\n */\n modifier nonReentrant() {\n bytes32 position = reentryStatusPosition;\n uint256 _reentry_status;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n _reentry_status := sload(position)\n }\n\n // On the first call to nonReentrant, _notEntered will be true\n require(_reentry_status != _ENTERED, \"Reentrant call\");\n\n // Any calls to nonReentrant after this point will fail\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, _ENTERED)\n }\n\n _;\n\n // By storing the original value once again, a refund is triggered (see\n // https://eips.ethereum.org/EIPS/eip-2200)\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, _NOT_ENTERED)\n }\n }\n\n function _setPendingGovernor(address newGovernor) internal {\n bytes32 position = pendingGovernorPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newGovernor)\n }\n }\n\n /**\n * @notice Transfers Governance of the contract to a new account (`newGovernor`).\n * Can only be called by the current Governor. Must be claimed for this to complete\n * @param _newGovernor Address of the new Governor\n */\n function transferGovernance(address _newGovernor) external onlyGovernor {\n _setPendingGovernor(_newGovernor);\n emit PendingGovernorshipTransfer(_governor(), _newGovernor);\n }\n\n /**\n * @notice Claim Governance of the contract to a new account (`newGovernor`).\n * Can only be called by the new Governor.\n */\n function claimGovernance() external {\n require(\n msg.sender == _pendingGovernor(),\n \"Only the pending Governor can complete the claim\"\n );\n _changeGovernor(msg.sender);\n }\n\n /**\n * @dev Change Governance of the contract to a new account (`newGovernor`).\n * @param _newGovernor Address of the new Governor\n */\n function _changeGovernor(address _newGovernor) internal {\n require(_newGovernor != address(0), \"New Governor is address(0)\");\n emit GovernorshipTransferred(_governor(), _newGovernor);\n _setGovernor(_newGovernor);\n }\n}\n" + }, + "contracts/interfaces/IBasicToken.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IBasicToken {\n function symbol() external view returns (string memory);\n\n function decimals() external view returns (uint8);\n}\n" + }, + "contracts/interfaces/IDepositContract.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IDepositContract {\n /// @notice A processed deposit event.\n event DepositEvent(\n bytes pubkey,\n bytes withdrawal_credentials,\n bytes amount,\n bytes signature,\n bytes index\n );\n\n /// @notice Submit a Phase 0 DepositData object.\n /// @param pubkey A BLS12-381 public key.\n /// @param withdrawal_credentials Commitment to a public key for withdrawals.\n /// @param signature A BLS12-381 signature.\n /// @param deposit_data_root The SHA-256 hash of the SSZ-encoded DepositData object.\n /// Used as a protection against malformed input.\n function deposit(\n bytes calldata pubkey,\n bytes calldata withdrawal_credentials,\n bytes calldata signature,\n bytes32 deposit_data_root\n ) external payable;\n\n /// @notice Query the current deposit root hash.\n /// @return The deposit root hash.\n function get_deposit_root() external view returns (bytes32);\n\n /// @notice Query the current deposit count.\n /// @return The deposit count encoded as a little endian 64-bit number.\n function get_deposit_count() external view returns (bytes memory);\n}\n" + }, + "contracts/interfaces/ISSVNetwork.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nstruct Cluster {\n uint32 validatorCount;\n uint64 networkFeeIndex;\n uint64 index;\n bool active;\n uint256 balance;\n}\n\ninterface ISSVNetwork {\n /**********/\n /* Errors */\n /**********/\n\n error CallerNotOwner(); // 0x5cd83192\n error CallerNotWhitelisted(); // 0x8c6e5d71\n error FeeTooLow(); // 0x732f9413\n error FeeExceedsIncreaseLimit(); // 0x958065d9\n error NoFeeDeclared(); // 0x1d226c30\n error ApprovalNotWithinTimeframe(); // 0x97e4b518\n error OperatorDoesNotExist(); // 0x961e3e8c\n error InsufficientBalance(); // 0xf4d678b8\n error ValidatorDoesNotExist(); // 0xe51315d2\n error ClusterNotLiquidatable(); // 0x60300a8d\n error InvalidPublicKeyLength(); // 0x637297a4\n error InvalidOperatorIdsLength(); // 0x38186224\n error ClusterAlreadyEnabled(); // 0x3babafd2\n error ClusterIsLiquidated(); // 0x95a0cf33\n error ClusterDoesNotExists(); // 0x185e2b16\n error IncorrectClusterState(); // 0x12e04c87\n error UnsortedOperatorsList(); // 0xdd020e25\n error NewBlockPeriodIsBelowMinimum(); // 0x6e6c9cac\n error ExceedValidatorLimit(); // 0x6df5ab76\n error TokenTransferFailed(); // 0x045c4b02\n error SameFeeChangeNotAllowed(); // 0xc81272f8\n error FeeIncreaseNotAllowed(); // 0x410a2b6c\n error NotAuthorized(); // 0xea8e4eb5\n error OperatorsListNotUnique(); // 0xa5a1ff5d\n error OperatorAlreadyExists(); // 0x289c9494\n error TargetModuleDoesNotExist(); // 0x8f9195fb\n error MaxValueExceeded(); // 0x91aa3017\n error FeeTooHigh(); // 0xcd4e6167\n error PublicKeysSharesLengthMismatch(); // 0x9ad467b8\n error IncorrectValidatorStateWithData(bytes publicKey); // 0x89307938\n error ValidatorAlreadyExistsWithData(bytes publicKey); // 0x388e7999\n error EmptyPublicKeysList(); // df83e679\n\n // legacy errors\n error ValidatorAlreadyExists(); // 0x8d09a73e\n error IncorrectValidatorState(); // 0x2feda3c1\n\n event AdminChanged(address previousAdmin, address newAdmin);\n event BeaconUpgraded(address indexed beacon);\n event ClusterDeposited(\n address indexed owner,\n uint64[] operatorIds,\n uint256 value,\n Cluster cluster\n );\n event ClusterLiquidated(\n address indexed owner,\n uint64[] operatorIds,\n Cluster cluster\n );\n event ClusterReactivated(\n address indexed owner,\n uint64[] operatorIds,\n Cluster cluster\n );\n event ClusterWithdrawn(\n address indexed owner,\n uint64[] operatorIds,\n uint256 value,\n Cluster cluster\n );\n event DeclareOperatorFeePeriodUpdated(uint64 value);\n event ExecuteOperatorFeePeriodUpdated(uint64 value);\n event FeeRecipientAddressUpdated(\n address indexed owner,\n address recipientAddress\n );\n event Initialized(uint8 version);\n event LiquidationThresholdPeriodUpdated(uint64 value);\n event MinimumLiquidationCollateralUpdated(uint256 value);\n event NetworkEarningsWithdrawn(uint256 value, address recipient);\n event NetworkFeeUpdated(uint256 oldFee, uint256 newFee);\n event OperatorAdded(\n uint64 indexed operatorId,\n address indexed owner,\n bytes publicKey,\n uint256 fee\n );\n event OperatorFeeDeclarationCancelled(\n address indexed owner,\n uint64 indexed operatorId\n );\n event OperatorFeeDeclared(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 blockNumber,\n uint256 fee\n );\n event OperatorFeeExecuted(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 blockNumber,\n uint256 fee\n );\n event OperatorFeeIncreaseLimitUpdated(uint64 value);\n event OperatorMaximumFeeUpdated(uint64 maxFee);\n event OperatorRemoved(uint64 indexed operatorId);\n event OperatorWhitelistUpdated(\n uint64 indexed operatorId,\n address whitelisted\n );\n event OperatorWithdrawn(\n address indexed owner,\n uint64 indexed operatorId,\n uint256 value\n );\n event OwnershipTransferStarted(\n address indexed previousOwner,\n address indexed newOwner\n );\n event OwnershipTransferred(\n address indexed previousOwner,\n address indexed newOwner\n );\n event Upgraded(address indexed implementation);\n event ValidatorAdded(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey,\n bytes shares,\n Cluster cluster\n );\n event ValidatorExited(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey\n );\n event ValidatorRemoved(\n address indexed owner,\n uint64[] operatorIds,\n bytes publicKey,\n Cluster cluster\n );\n\n fallback() external;\n\n function acceptOwnership() external;\n\n function cancelDeclaredOperatorFee(uint64 operatorId) external;\n\n function declareOperatorFee(uint64 operatorId, uint256 fee) external;\n\n function deposit(\n address clusterOwner,\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function executeOperatorFee(uint64 operatorId) external;\n\n function exitValidator(bytes memory publicKey, uint64[] memory operatorIds)\n external;\n\n function bulkExitValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds\n ) external;\n\n function getVersion() external pure returns (string memory version);\n\n function initialize(\n address token_,\n address ssvOperators_,\n address ssvClusters_,\n address ssvDAO_,\n address ssvViews_,\n uint64 minimumBlocksBeforeLiquidation_,\n uint256 minimumLiquidationCollateral_,\n uint32 validatorsPerOperatorLimit_,\n uint64 declareOperatorFeePeriod_,\n uint64 executeOperatorFeePeriod_,\n uint64 operatorMaxFeeIncrease_\n ) external;\n\n function liquidate(\n address clusterOwner,\n uint64[] memory operatorIds,\n Cluster memory cluster\n ) external;\n\n function owner() external view returns (address);\n\n function pendingOwner() external view returns (address);\n\n function proxiableUUID() external view returns (bytes32);\n\n function reactivate(\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function reduceOperatorFee(uint64 operatorId, uint256 fee) external;\n\n function registerOperator(bytes memory publicKey, uint256 fee)\n external\n returns (uint64 id);\n\n function registerValidator(\n bytes memory publicKey,\n uint64[] memory operatorIds,\n bytes memory sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function bulkRegisterValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function removeOperator(uint64 operatorId) external;\n\n function removeValidator(\n bytes memory publicKey,\n uint64[] memory operatorIds,\n Cluster memory cluster\n ) external;\n\n function bulkRemoveValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n Cluster memory cluster\n ) external;\n\n function renounceOwnership() external;\n\n function setFeeRecipientAddress(address recipientAddress) external;\n\n function setOperatorWhitelist(uint64 operatorId, address whitelisted)\n external;\n\n function transferOwnership(address newOwner) external;\n\n function updateDeclareOperatorFeePeriod(uint64 timeInSeconds) external;\n\n function updateExecuteOperatorFeePeriod(uint64 timeInSeconds) external;\n\n function updateLiquidationThresholdPeriod(uint64 blocks) external;\n\n function updateMaximumOperatorFee(uint64 maxFee) external;\n\n function updateMinimumLiquidationCollateral(uint256 amount) external;\n\n function updateModule(uint8 moduleId, address moduleAddress) external;\n\n function updateNetworkFee(uint256 fee) external;\n\n function updateOperatorFeeIncreaseLimit(uint64 percentage) external;\n\n function upgradeTo(address newImplementation) external;\n\n function upgradeToAndCall(address newImplementation, bytes memory data)\n external\n payable;\n\n function withdraw(\n uint64[] memory operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external;\n\n function withdrawAllOperatorEarnings(uint64 operatorId) external;\n\n function withdrawNetworkEarnings(uint256 amount) external;\n\n function withdrawOperatorEarnings(uint64 operatorId, uint256 amount)\n external;\n}\n" + }, + "contracts/interfaces/IStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Platform interface to integrate with lending platform like Compound, AAVE etc.\n */\ninterface IStrategy {\n /**\n * @dev Deposit the given asset to platform\n * @param _asset asset address\n * @param _amount Amount to deposit\n */\n function deposit(address _asset, uint256 _amount) external;\n\n /**\n * @dev Deposit the entire balance of all supported assets in the Strategy\n * to the platform\n */\n function depositAll() external;\n\n /**\n * @dev Withdraw given asset from Lending platform\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external;\n\n /**\n * @dev Liquidate all assets in strategy and return them to Vault.\n */\n function withdrawAll() external;\n\n /**\n * @dev Returns the current balance of the given asset.\n */\n function checkBalance(address _asset)\n external\n view\n returns (uint256 balance);\n\n /**\n * @dev Returns bool indicating whether strategy supports asset.\n */\n function supportsAsset(address _asset) external view returns (bool);\n\n /**\n * @dev Collect reward tokens from the Strategy.\n */\n function collectRewardTokens() external;\n\n /**\n * @dev The address array of the reward tokens for the Strategy.\n */\n function getRewardTokenAddresses() external view returns (address[] memory);\n}\n" + }, + "contracts/interfaces/IVault.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { VaultStorage } from \"../vault/VaultStorage.sol\";\n\ninterface IVault {\n event AssetSupported(address _asset);\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\n event StrategyApproved(address _addr);\n event StrategyRemoved(address _addr);\n event Mint(address _addr, uint256 _value);\n event Redeem(address _addr, uint256 _value);\n event CapitalPaused();\n event CapitalUnpaused();\n event RebasePaused();\n event RebaseUnpaused();\n event VaultBufferUpdated(uint256 _vaultBuffer);\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\n event PriceProviderUpdated(address _priceProvider);\n event AllocateThresholdUpdated(uint256 _threshold);\n event RebaseThresholdUpdated(uint256 _threshold);\n event StrategistUpdated(address _address);\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\n event TrusteeFeeBpsChanged(uint256 _basis);\n event TrusteeAddressChanged(address _address);\n event SwapperChanged(address _address);\n event SwapAllowedUndervalueChanged(uint256 _basis);\n event SwapSlippageChanged(address _asset, uint256 _basis);\n event Swapped(\n address indexed _fromAsset,\n address indexed _toAsset,\n uint256 _fromAssetAmount,\n uint256 _toAssetAmount\n );\n\n // Governable.sol\n function transferGovernance(address _newGovernor) external;\n\n function claimGovernance() external;\n\n function governor() external view returns (address);\n\n // VaultAdmin.sol\n function setPriceProvider(address _priceProvider) external;\n\n function priceProvider() external view returns (address);\n\n function setRedeemFeeBps(uint256 _redeemFeeBps) external;\n\n function redeemFeeBps() external view returns (uint256);\n\n function setVaultBuffer(uint256 _vaultBuffer) external;\n\n function vaultBuffer() external view returns (uint256);\n\n function setAutoAllocateThreshold(uint256 _threshold) external;\n\n function autoAllocateThreshold() external view returns (uint256);\n\n function setRebaseThreshold(uint256 _threshold) external;\n\n function rebaseThreshold() external view returns (uint256);\n\n function setStrategistAddr(address _address) external;\n\n function strategistAddr() external view returns (address);\n\n function setMaxSupplyDiff(uint256 _maxSupplyDiff) external;\n\n function maxSupplyDiff() external view returns (uint256);\n\n function setTrusteeAddress(address _address) external;\n\n function trusteeAddress() external view returns (address);\n\n function setTrusteeFeeBps(uint256 _basis) external;\n\n function trusteeFeeBps() external view returns (uint256);\n\n function ousdMetaStrategy() external view returns (address);\n\n function setSwapper(address _swapperAddr) external;\n\n function setSwapAllowedUndervalue(uint16 _percentageBps) external;\n\n function setOracleSlippage(address _asset, uint16 _allowedOracleSlippageBps)\n external;\n\n function supportAsset(address _asset, uint8 _supportsAsset) external;\n\n function approveStrategy(address _addr) external;\n\n function removeStrategy(address _addr) external;\n\n function setAssetDefaultStrategy(address _asset, address _strategy)\n external;\n\n function assetDefaultStrategies(address _asset)\n external\n view\n returns (address);\n\n function pauseRebase() external;\n\n function unpauseRebase() external;\n\n function rebasePaused() external view returns (bool);\n\n function pauseCapital() external;\n\n function unpauseCapital() external;\n\n function capitalPaused() external view returns (bool);\n\n function transferToken(address _asset, uint256 _amount) external;\n\n function priceUnitMint(address asset) external view returns (uint256);\n\n function priceUnitRedeem(address asset) external view returns (uint256);\n\n function withdrawAllFromStrategy(address _strategyAddr) external;\n\n function withdrawAllFromStrategies() external;\n\n function withdrawFromStrategy(\n address _strategyFromAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external;\n\n function depositToStrategy(\n address _strategyToAddress,\n address[] calldata _assets,\n uint256[] calldata _amounts\n ) external;\n\n // VaultCore.sol\n function mint(\n address _asset,\n uint256 _amount,\n uint256 _minimumOusdAmount\n ) external;\n\n function mintForStrategy(uint256 _amount) external;\n\n function redeem(uint256 _amount, uint256 _minimumUnitAmount) external;\n\n function burnForStrategy(uint256 _amount) external;\n\n function redeemAll(uint256 _minimumUnitAmount) external;\n\n function allocate() external;\n\n function rebase() external;\n\n function swapCollateral(\n address fromAsset,\n address toAsset,\n uint256 fromAssetAmount,\n uint256 minToAssetAmount,\n bytes calldata data\n ) external returns (uint256 toAssetAmount);\n\n function totalValue() external view returns (uint256 value);\n\n function checkBalance(address _asset) external view returns (uint256);\n\n function calculateRedeemOutputs(uint256 _amount)\n external\n view\n returns (uint256[] memory);\n\n function getAssetCount() external view returns (uint256);\n\n function getAssetConfig(address _asset)\n external\n view\n returns (VaultStorage.Asset memory config);\n\n function getAllAssets() external view returns (address[] memory);\n\n function getStrategyCount() external view returns (uint256);\n\n function swapper() external view returns (address);\n\n function allowedSwapUndervalue() external view returns (uint256);\n\n function getAllStrategies() external view returns (address[] memory);\n\n function isSupportedAsset(address _asset) external view returns (bool);\n\n function netOusdMintForStrategyThreshold() external view returns (uint256);\n\n function setOusdMetaStrategy(address _ousdMetaStrategy) external;\n\n function setNetOusdMintForStrategyThreshold(uint256 _threshold) external;\n\n function netOusdMintedForStrategy() external view returns (int256);\n\n function weth() external view returns (address);\n\n function cacheWETHAssetIndex() external;\n\n function wethAssetIndex() external view returns (uint256);\n\n function initialize(address, address) external;\n\n function setAdminImpl(address) external;\n\n function removeAsset(address _asset) external;\n}\n" + }, + "contracts/interfaces/IWETH9.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\ninterface IWETH9 {\n event Approval(address indexed src, address indexed guy, uint256 wad);\n event Deposit(address indexed dst, uint256 wad);\n event Transfer(address indexed src, address indexed dst, uint256 wad);\n event Withdrawal(address indexed src, uint256 wad);\n\n function allowance(address, address) external view returns (uint256);\n\n function approve(address guy, uint256 wad) external returns (bool);\n\n function balanceOf(address) external view returns (uint256);\n\n function decimals() external view returns (uint8);\n\n function deposit() external payable;\n\n function name() external view returns (string memory);\n\n function symbol() external view returns (string memory);\n\n function totalSupply() external view returns (uint256);\n\n function transfer(address dst, uint256 wad) external returns (bool);\n\n function transferFrom(\n address src,\n address dst,\n uint256 wad\n ) external returns (bool);\n\n function withdraw(uint256 wad) external;\n}\n" + }, + "contracts/mocks/MockSSVNetwork.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Cluster } from \"./../interfaces/ISSVNetwork.sol\";\n\ncontract MockSSVNetwork {\n function registerValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds,\n bytes calldata sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external {}\n\n function bulkRegisterValidator(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 amount,\n Cluster memory cluster\n ) external {}\n\n function exitValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds\n ) external {}\n\n function removeValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds,\n Cluster memory cluster\n ) external {}\n\n function deposit(\n address clusterOwner,\n uint64[] calldata operatorIds,\n uint256 amount,\n Cluster memory cluster\n ) external {}\n}\n" + }, + "contracts/strategies/NativeStaking/FeeAccumulator.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\n/**\n * @title Fee Accumulator for Native Staking SSV Strategy\n * @notice Receives execution rewards which includes tx fees and\n * MEV rewards like tx priority and tx ordering.\n * It does NOT include swept ETH from beacon chain consensus rewards or full validator withdrawals.\n * @author Origin Protocol Inc\n */\ncontract FeeAccumulator {\n /// @notice The address of the Native Staking Strategy\n address public immutable STRATEGY;\n\n event ExecutionRewardsCollected(address indexed strategy, uint256 amount);\n\n /**\n * @param _strategy Address of the Native Staking Strategy\n */\n constructor(address _strategy) {\n STRATEGY = _strategy;\n }\n\n /**\n * @notice sends all ETH in this FeeAccumulator contract to the Native Staking Strategy.\n * @return eth The amount of execution rewards that were sent to the Native Staking Strategy\n */\n function collect() external returns (uint256 eth) {\n require(msg.sender == STRATEGY, \"Caller is not the Strategy\");\n\n eth = address(this).balance;\n if (eth > 0) {\n // Send the ETH to the Native Staking Strategy\n Address.sendValue(payable(STRATEGY), eth);\n\n emit ExecutionRewardsCollected(STRATEGY, eth);\n }\n }\n\n /**\n * @dev Accept ETH\n */\n receive() external payable {}\n}\n" + }, + "contracts/strategies/NativeStaking/NativeStakingSSVStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/utils/math/Math.sol\";\n\nimport { InitializableAbstractStrategy } from \"../../utils/InitializableAbstractStrategy.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\nimport { FeeAccumulator } from \"./FeeAccumulator.sol\";\nimport { ValidatorAccountant } from \"./ValidatorAccountant.sol\";\n\nstruct ValidatorStakeData {\n bytes pubkey;\n bytes signature;\n bytes32 depositDataRoot;\n}\n\n/// @title Native Staking SSV Strategy\n/// @notice Strategy to deploy funds into DVT validators powered by the SSV Network\n/// @author Origin Protocol Inc\n/// @dev This contract handles WETH and ETH and in some operations interchanges between the two. Any WETH that\n/// is on the contract across multiple blocks (and not just transitory within a transaction) is considered an\n/// asset. Meaning deposits increase the balance of the asset and withdrawal decrease it. As opposed to all\n/// our other strategies the WETH doesn't immediately get deposited into an underlying strategy and can be present\n/// across multiple blocks waiting to be unwrapped to ETH and staked to validators. This separation of WETH and ETH is\n/// required since the rewards (reward token) is also in ETH.\n///\n/// To simplify the accounting of WETH there is another difference in behavior compared to the other strategies.\n/// To withdraw WETH asset - exit message is posted to validators and the ETH hits this contract with multiple days\n/// delay. In order to simplify the WETH accounting upon detection of such an event the ValidatorAccountant\n/// immediately wraps ETH to WETH and sends it to the Vault.\n///\n/// On the other hand any ETH on the contract (across multiple blocks) is there either:\n/// - as a result of already accounted for consensus rewards\n/// - as a result of not yet accounted for consensus rewards\n/// - as a results of not yet accounted for full validator withdrawals (or validator slashes)\n///\n/// Even though the strategy assets and rewards are a very similar asset the consensus layer rewards and the\n/// execution layer rewards are considered rewards and those are dripped to the Vault over a configurable time\n/// interval and not immediately.\ncontract NativeStakingSSVStrategy is\n ValidatorAccountant,\n InitializableAbstractStrategy\n{\n using SafeERC20 for IERC20;\n\n /// @notice SSV ERC20 token that serves as a payment for operating SSV validators\n address public immutable SSV_TOKEN;\n /// @notice Fee collector address\n /// @dev this address will receive Execution layer rewards - These are rewards earned for\n /// executing transactions on the Ethereum network as part of block proposals. They include\n /// priority fees (fees paid by users for their transactions to be included) and MEV rewards\n /// (rewards for arranging transactions in a way that benefits the validator).\n address payable public immutable FEE_ACCUMULATOR_ADDRESS;\n\n /// @dev This contract receives WETH as the deposit asset, but unlike other strategies doesn't immediately\n /// deposit it to an underlying platform. Rather a special privilege account stakes it to the validators.\n /// For that reason calling WETH.balanceOf(this) in a deposit function can contain WETH that has just been\n /// deposited and also WETH that has previously been deposited. To keep a correct count we need to keep track\n /// of WETH that has already been accounted for.\n /// This value represents the amount of WETH balance of this contract that has already been accounted for by the\n /// deposit events.\n /// It is important to note that this variable is not concerned with WETH that is a result of full/partial\n /// withdrawal of the validators. It is strictly concerned with WETH that has been deposited and is waiting to\n /// be staked.\n uint256 public depositedWethAccountedFor;\n\n // For future use\n uint256[49] private __gap;\n\n /// @param _baseConfig Base strategy config with platformAddress (ERC-4626 Vault contract), eg sfrxETH or sDAI,\n /// and vaultAddress (OToken Vault contract), eg VaultProxy or OETHVaultProxy\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _ssvToken Address of the Erc20 SSV Token contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n /// @param _feeAccumulator Address of the fee accumulator receiving execution layer validator rewards\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n constructor(\n BaseStrategyConfig memory _baseConfig,\n address _wethAddress,\n address _ssvToken,\n address _ssvNetwork,\n uint256 _maxValidators,\n address _feeAccumulator,\n address _beaconChainDepositContract\n )\n InitializableAbstractStrategy(_baseConfig)\n ValidatorAccountant(\n _wethAddress,\n _baseConfig.vaultAddress,\n _beaconChainDepositContract,\n _ssvNetwork,\n _maxValidators\n )\n {\n SSV_TOKEN = _ssvToken;\n FEE_ACCUMULATOR_ADDRESS = payable(_feeAccumulator);\n }\n\n /// @notice initialize function, to set up initial internal state\n /// @param _rewardTokenAddresses Address of reward token for platform\n /// @param _assets Addresses of initial supported assets\n /// @param _pTokens Platform Token corresponding addresses\n function initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) external onlyGovernor initializer {\n InitializableAbstractStrategy._initialize(\n _rewardTokenAddresses,\n _assets,\n _pTokens\n );\n }\n\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\n /// It just checks the asset is WETH and emits the Deposit event.\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n /// @param _asset Address of asset to deposit. Has to be WETH.\n /// @param _amount Amount of assets that were transferred to the strategy by the vault.\n function deposit(address _asset, uint256 _amount)\n external\n override\n onlyVault\n nonReentrant\n {\n require(_asset == WETH, \"Unsupported asset\");\n depositedWethAccountedFor += _amount;\n _deposit(_asset, _amount);\n }\n\n /// @dev Deposit WETH to this strategy so it can later be staked into a validator.\n /// @param _asset Address of WETH\n /// @param _amount Amount of WETH to deposit\n function _deposit(address _asset, uint256 _amount) internal {\n require(_amount > 0, \"Must deposit something\");\n /*\n * We could do a check here that would revert when \"_amount % 32 ether != 0\". With the idea of\n * not allowing deposits that will result in WETH sitting on the strategy after all the possible batches\n * of 32ETH have been staked.\n * But someone could mess with our strategy by sending some WETH to it. And we might want to deposit just\n * enough WETH to add it up to 32 so it can be staked. For that reason the check is left out.\n *\n * WETH sitting on the strategy won't interfere with the accounting since accounting only operates on ETH.\n */\n emit Deposit(_asset, address(0), _amount);\n }\n\n /// @notice Unlike other strategies, this does not deposit assets into the underlying platform.\n /// It just emits the Deposit event.\n /// To deposit WETH into validators `registerSsvValidator` and `stakeEth` must be used.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n function depositAll() external override onlyVault nonReentrant {\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\n uint256 newWeth = wethBalance - depositedWethAccountedFor;\n\n if (newWeth > 0) {\n depositedWethAccountedFor = wethBalance;\n\n _deposit(WETH, newWeth);\n }\n }\n\n /// @notice Withdraw WETH from this contract. Used only if some WETH for is lingering on the contract.\n /// That can happen when:\n /// - after mints if the strategy is the default\n /// - time between depositToStrategy and stakeEth\n /// - the deposit was not a multiple of 32 WETH\n /// - someone sent WETH directly to this contract\n /// Will NOT revert if the strategy is paused from an accounting failure.\n /// @param _recipient Address to receive withdrawn assets\n /// @param _asset WETH to withdraw\n /// @param _amount Amount of WETH to withdraw\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external override onlyVault nonReentrant {\n require(_asset == WETH, \"Unsupported asset\");\n _withdraw(_recipient, _asset, _amount);\n }\n\n function _withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) internal {\n require(_amount > 0, \"Must withdraw something\");\n require(_recipient != address(0), \"Must specify recipient\");\n\n _wethWithdrawn(_amount);\n\n IERC20(_asset).safeTransfer(_recipient, _amount);\n emit Withdrawal(_asset, address(0), _amount);\n }\n\n /// @notice transfer all WETH deposits back to the vault.\n /// This does not withdraw from the validators. That has to be done separately with the\n /// `exitSsvValidator` and `removeSsvValidator` operations.\n /// This does not withdraw any execution rewards from the FeeAccumulator or\n /// consensus rewards in this strategy.\n /// Any ETH in this strategy that was swept from a full validator withdrawal will not be withdrawn.\n /// ETH from full validator withdrawals is sent to the Vault using `doAccounting`.\n /// Will NOT revert if the strategy is paused from an accounting failure.\n function withdrawAll() external override onlyVaultOrGovernor nonReentrant {\n uint256 wethBalance = IERC20(WETH).balanceOf(address(this));\n if (wethBalance > 0) {\n _withdraw(vaultAddress, WETH, wethBalance);\n }\n }\n\n /// @notice Returns the total value of (W)ETH that is staked to the validators\n /// and WETH deposits that are still to be staked.\n /// This does not include ETH from consensus rewards sitting in this strategy\n /// or ETH from MEV rewards in the FeeAccumulator. These rewards are harvested\n /// and sent to the Dripper so will eventually be sent to the Vault as WETH.\n /// @param _asset Address of weth asset\n /// @return balance Total value of (W)ETH\n function checkBalance(address _asset)\n external\n view\n override\n returns (uint256 balance)\n {\n require(_asset == WETH, \"Unsupported asset\");\n\n balance =\n // add the ETH that has been staked in validators\n activeDepositedValidators *\n FULL_STAKE +\n // add the WETH in the strategy from deposits that are still to be staked\n IERC20(WETH).balanceOf(address(this));\n }\n\n function pause() external onlyStrategist {\n _pause();\n }\n\n /// @notice Returns bool indicating whether asset is supported by strategy.\n /// @param _asset The address of the asset token.\n function supportsAsset(address _asset) public view override returns (bool) {\n return _asset == WETH;\n }\n\n /// @notice Approves the SSV Network contract to transfer SSV tokens for deposits\n function safeApproveAllTokens() external override {\n /// @dev Approves the SSV Network contract to transfer SSV tokens for deposits\n IERC20(SSV_TOKEN).approve(SSV_NETWORK, type(uint256).max);\n }\n\n /**\n * @notice Only accept ETH from the FeeAccumulator and the WETH contract - required when\n * unwrapping WETH just before staking it to the validator\n * @dev don't want to receive donations from anyone else as this will\n * mess with the accounting of the consensus rewards and validator full withdrawals\n */\n receive() external payable {\n require(\n msg.sender == FEE_ACCUMULATOR_ADDRESS || msg.sender == WETH,\n \"Eth not from allowed contracts\"\n );\n }\n\n /***************************************\n Internal functions\n ****************************************/\n\n function _abstractSetPToken(address _asset, address) internal override {}\n\n /// @dev Convert accumulated ETH to WETH and send to the Harvester.\n /// Will revert if the strategy is paused for accounting.\n function _collectRewardTokens() internal override whenNotPaused {\n // collect ETH from execution rewards from the fee accumulator\n uint256 executionRewards = FeeAccumulator(FEE_ACCUMULATOR_ADDRESS)\n .collect();\n\n // total ETH rewards to be harvested = execution rewards + consensus rewards\n uint256 ethRewards = executionRewards + consensusRewards;\n\n require(\n address(this).balance >= ethRewards,\n \"Insufficient eth balance\"\n );\n\n if (ethRewards > 0) {\n // reset the counter keeping track of beacon chain consensus rewards\n consensusRewards = 0;\n\n // Convert ETH rewards to WETH\n IWETH9(WETH).deposit{ value: ethRewards }();\n\n IERC20(WETH).safeTransfer(harvesterAddress, ethRewards);\n emit RewardTokenCollected(harvesterAddress, WETH, ethRewards);\n }\n }\n\n /// @dev emits Withdrawal event from NativeStakingSSVStrategy\n function _wethWithdrawnToVault(uint256 _amount) internal override {\n emit Withdrawal(WETH, address(0), _amount);\n }\n\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\n /// the strategy knows how much WETH it has on deposit.\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\n function _wethWithdrawn(uint256 _amount) internal override {\n /* In an ideal world we wouldn't need to reduce the deduction amount when the\n * depositedWethAccountedFor is smaller than the _amount.\n *\n * The reason this is required is that a malicious actor could sent WETH directly\n * to this contract and that would circumvent the increase of depositedWethAccountedFor\n * property. When the ETH would be staked the depositedWethAccountedFor amount could\n * be deducted so much that it would be negative.\n */\n uint256 deductAmount = Math.min(_amount, depositedWethAccountedFor);\n depositedWethAccountedFor -= deductAmount;\n }\n}\n" + }, + "contracts/strategies/NativeStaking/ValidatorAccountant.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { ValidatorRegistrator } from \"./ValidatorRegistrator.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\n\n/// @title Validator Accountant\n/// @notice Attributes the ETH swept from beacon chain validators to this strategy contract\n/// as either full or partial withdrawals. Partial withdrawals being consensus rewards.\n/// Full withdrawals are from exited validators.\n/// @author Origin Protocol Inc\nabstract contract ValidatorAccountant is ValidatorRegistrator {\n /// @notice The minimum amount of blocks that need to pass between two calls to manuallyFixAccounting\n uint256 public constant MIN_FIX_ACCOUNTING_CADENCE = 7200; // 1 day\n\n /// @notice Keeps track of the total consensus rewards swept from the beacon chain\n uint256 public consensusRewards;\n\n /// @notice start of fuse interval\n uint256 public fuseIntervalStart;\n /// @notice end of fuse interval\n uint256 public fuseIntervalEnd;\n /// @notice last block number manuallyFixAccounting has been called\n uint256 public lastFixAccountingBlockNumber;\n\n uint256[49] private __gap;\n\n event FuseIntervalUpdated(uint256 start, uint256 end);\n event AccountingFullyWithdrawnValidator(\n uint256 noOfValidators,\n uint256 remainingValidators,\n uint256 wethSentToVault\n );\n event AccountingValidatorSlashed(\n uint256 remainingValidators,\n uint256 wethSentToVault\n );\n event AccountingConsensusRewards(uint256 amount);\n\n event AccountingManuallyFixed(\n int256 validatorsDelta,\n int256 consensusRewardsDelta,\n uint256 wethToVault\n );\n\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _vaultAddress Address of the Vault\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n constructor(\n address _wethAddress,\n address _vaultAddress,\n address _beaconChainDepositContract,\n address _ssvNetwork,\n uint256 _maxValidators\n )\n ValidatorRegistrator(\n _wethAddress,\n _vaultAddress,\n _beaconChainDepositContract,\n _ssvNetwork,\n _maxValidators\n )\n {}\n\n /// @notice set fuse interval values\n function setFuseInterval(\n uint256 _fuseIntervalStart,\n uint256 _fuseIntervalEnd\n ) external onlyGovernor {\n require(\n _fuseIntervalStart < _fuseIntervalEnd &&\n _fuseIntervalEnd < 32 ether &&\n _fuseIntervalEnd - _fuseIntervalStart >= 4 ether,\n \"Incorrect fuse interval\"\n );\n\n fuseIntervalStart = _fuseIntervalStart;\n fuseIntervalEnd = _fuseIntervalEnd;\n\n emit FuseIntervalUpdated(_fuseIntervalStart, _fuseIntervalEnd);\n }\n\n /* solhint-disable max-line-length */\n /// This notion page offers a good explanation of how the accounting functions\n /// https://www.notion.so/originprotocol/Limited-simplified-native-staking-accounting-67a217c8420d40678eb943b9da0ee77d\n /// In short, after dividing by 32, if the ETH remaining on the contract falls between 0 and fuseIntervalStart,\n /// the accounting function will treat that ETH as Beacon chain consensus rewards.\n /// On the contrary, if after dividing by 32, the ETH remaining on the contract falls between fuseIntervalEnd and 32,\n /// the accounting function will treat that as a validator slashing.\n /// @notice Perform the accounting attributing beacon chain ETH to either full or partial withdrawals. Returns true when\n /// accounting is valid and fuse isn't \"blown\". Returns false when fuse is blown.\n /// @dev This function could in theory be permission-less but lets allow only the Registrator (Defender Action) to call it\n /// for now.\n /// @return accountingValid true if accounting was successful, false if fuse is blown\n /* solhint-enable max-line-length */\n function doAccounting()\n external\n onlyRegistrator\n whenNotPaused\n nonReentrant\n returns (bool accountingValid)\n {\n // pause the accounting on failure\n accountingValid = _doAccounting(true);\n }\n\n // slither-disable-start reentrancy-eth\n function _doAccounting(bool pauseOnFail)\n internal\n returns (bool accountingValid)\n {\n if (address(this).balance < consensusRewards) {\n return _failAccounting(pauseOnFail);\n }\n\n // Calculate all the new ETH that has been swept to the contract since the last accounting\n uint256 newSweptETH = address(this).balance - consensusRewards;\n accountingValid = true;\n\n // send the ETH that is from fully withdrawn validators to the Vault\n if (newSweptETH >= FULL_STAKE) {\n uint256 fullyWithdrawnValidators;\n // explicitly cast to uint256 as we want to round to a whole number of validators\n fullyWithdrawnValidators = uint256(newSweptETH / FULL_STAKE);\n activeDepositedValidators -= fullyWithdrawnValidators;\n\n uint256 wethToVault = FULL_STAKE * fullyWithdrawnValidators;\n IWETH9(WETH).deposit{ value: wethToVault }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, wethToVault);\n _wethWithdrawnToVault(wethToVault);\n\n emit AccountingFullyWithdrawnValidator(\n fullyWithdrawnValidators,\n activeDepositedValidators,\n wethToVault\n );\n }\n\n uint256 ethRemaining = address(this).balance - consensusRewards;\n // should be less than a whole validator stake\n require(ethRemaining < FULL_STAKE, \"Unexpected accounting\");\n\n // If no Beacon chain consensus rewards swept\n if (ethRemaining == 0) {\n // do nothing\n return accountingValid;\n } else if (ethRemaining < fuseIntervalStart) {\n // Beacon chain consensus rewards swept (partial validator withdrawals)\n // solhint-disable-next-line reentrancy\n consensusRewards += ethRemaining;\n emit AccountingConsensusRewards(ethRemaining);\n } else if (ethRemaining > fuseIntervalEnd) {\n // Beacon chain consensus rewards swept but also a slashed validator fully exited\n IWETH9(WETH).deposit{ value: ethRemaining }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, ethRemaining);\n activeDepositedValidators -= 1;\n\n _wethWithdrawnToVault(ethRemaining);\n\n emit AccountingValidatorSlashed(\n activeDepositedValidators,\n ethRemaining\n );\n }\n // Oh no... Fuse is blown. The Strategist needs to adjust the accounting values.\n else {\n return _failAccounting(pauseOnFail);\n }\n }\n\n // slither-disable-end reentrancy-eth\n\n /// @dev pause any further accounting if required and return false\n function _failAccounting(bool pauseOnFail)\n internal\n returns (bool accountingValid)\n {\n // pause if not already\n if (pauseOnFail) {\n _pause();\n }\n // fail the accounting\n accountingValid = false;\n }\n\n /// @notice Allow the Strategist to fix the accounting of this strategy and unpause.\n /// @param _validatorsDelta adjust the active validators by up to plus three or minus three\n /// @param _consensusRewardsDelta adjust the accounted for consensus rewards up or down\n /// @param _ethToVaultAmount the amount of ETH that gets wrapped into WETH and sent to the Vault\n /// @dev There is a case when a validator(s) gets slashed so much that the eth swept from\n /// the beacon chain enters the fuse area and there are no consensus rewards on the contract\n /// to \"dip into\"/use. To increase the amount of unaccounted ETH over the fuse end interval\n /// we need to reduce the amount of active deposited validators and immediately send WETH\n /// to the vault, so it doesn't interfere with further accounting.\n function manuallyFixAccounting(\n int256 _validatorsDelta,\n int256 _consensusRewardsDelta,\n uint256 _ethToVaultAmount\n ) external onlyStrategist whenPaused nonReentrant {\n require(\n lastFixAccountingBlockNumber + MIN_FIX_ACCOUNTING_CADENCE <\n block.number,\n \"Fix accounting called too soon\"\n );\n require(\n _validatorsDelta >= -3 &&\n _validatorsDelta <= 3 &&\n // new value must be positive\n int256(activeDepositedValidators) + _validatorsDelta >= 0,\n \"Invalid validatorsDelta\"\n );\n require(\n _consensusRewardsDelta >= -332 ether &&\n _consensusRewardsDelta <= 332 ether &&\n // new value must be positive\n int256(consensusRewards) + _consensusRewardsDelta >= 0,\n \"Invalid consensusRewardsDelta\"\n );\n require(_ethToVaultAmount <= 32 ether * 3, \"Invalid wethToVaultAmount\");\n\n activeDepositedValidators = uint256(\n int256(activeDepositedValidators) + _validatorsDelta\n );\n consensusRewards = uint256(\n int256(consensusRewards) + _consensusRewardsDelta\n );\n lastFixAccountingBlockNumber = block.number;\n if (_ethToVaultAmount > 0) {\n IWETH9(WETH).deposit{ value: _ethToVaultAmount }();\n // slither-disable-next-line unchecked-transfer\n IWETH9(WETH).transfer(VAULT_ADDRESS, _ethToVaultAmount);\n _wethWithdrawnToVault(_ethToVaultAmount);\n }\n\n emit AccountingManuallyFixed(\n _validatorsDelta,\n _consensusRewardsDelta,\n _ethToVaultAmount\n );\n\n // rerun the accounting to see if it has now been fixed.\n // Do not pause the accounting on failure as it is already paused\n require(_doAccounting(false), \"Fuse still blown\");\n\n // unpause since doAccounting was successful\n _unpause();\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n /// @dev allows for NativeStakingSSVStrategy contract to emit the Withdrawal event\n function _wethWithdrawnToVault(uint256 _amount) internal virtual;\n}\n" + }, + "contracts/strategies/NativeStaking/ValidatorRegistrator.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { Pausable } from \"@openzeppelin/contracts/security/Pausable.sol\";\nimport { Governable } from \"../../governance/Governable.sol\";\nimport { IDepositContract } from \"../../interfaces/IDepositContract.sol\";\nimport { IVault } from \"../../interfaces/IVault.sol\";\nimport { IWETH9 } from \"../../interfaces/IWETH9.sol\";\nimport { ISSVNetwork, Cluster } from \"../../interfaces/ISSVNetwork.sol\";\n\nstruct ValidatorStakeData {\n bytes pubkey;\n bytes signature;\n bytes32 depositDataRoot;\n}\n\n/**\n * @title Registrator of the validators\n * @notice This contract implements all the required functionality to register, exit and remove validators.\n * @author Origin Protocol Inc\n */\nabstract contract ValidatorRegistrator is Governable, Pausable {\n /// @notice The maximum amount of ETH that can be staked by a validator\n /// @dev this can change in the future with EIP-7251, Increase the MAX_EFFECTIVE_BALANCE\n uint256 public constant FULL_STAKE = 32 ether;\n\n /// @notice The address of the Wrapped ETH (WETH) token contract\n address public immutable WETH;\n /// @notice The address of the beacon chain deposit contract\n address public immutable BEACON_CHAIN_DEPOSIT_CONTRACT;\n /// @notice The address of the SSV Network contract used to interface with\n address public immutable SSV_NETWORK;\n /// @notice Address of the OETH Vault proxy contract\n address public immutable VAULT_ADDRESS;\n /// @notice Maximum number of validators that can be registered in this strategy\n uint256 public immutable MAX_VALIDATORS;\n\n /// @notice Address of the registrator - allowed to register, exit and remove validators\n address public validatorRegistrator;\n /// @notice The number of validators that have 32 (!) ETH actively deposited. When a new deposit\n /// to a validator happens this number increases, when a validator exit is detected this number\n /// decreases.\n uint256 public activeDepositedValidators;\n /// @notice State of the validators keccak256(pubKey) => state\n mapping(bytes32 => VALIDATOR_STATE) public validatorsStates;\n /// @notice The account that is allowed to modify stakeETHThreshold and reset stakeETHTally\n address public stakingMonitor;\n /// @notice Amount of ETH that can be staked before staking on the contract is suspended\n /// and the `stakingMonitor` needs to approve further staking by calling `resetStakeETHTally`\n uint256 public stakeETHThreshold;\n /// @notice Amount of ETH that has been staked since the `stakingMonitor` last called `resetStakeETHTally`.\n /// This can not go above `stakeETHThreshold`.\n uint256 public stakeETHTally;\n // For future use\n uint256[47] private __gap;\n\n enum VALIDATOR_STATE {\n NON_REGISTERED, // validator is not registered on the SSV network\n REGISTERED, // validator is registered on the SSV network\n STAKED, // validator has funds staked\n EXITING, // exit message has been posted and validator is in the process of exiting\n EXIT_COMPLETE // validator has funds withdrawn to the EigenPod and is removed from the SSV\n }\n\n event RegistratorChanged(address indexed newAddress);\n event StakingMonitorChanged(address indexed newAddress);\n event ETHStaked(bytes32 indexed pubKeyHash, bytes pubKey, uint256 amount);\n event SSVValidatorRegistered(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event SSVValidatorExitInitiated(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event SSVValidatorExitCompleted(\n bytes32 indexed pubKeyHash,\n bytes pubKey,\n uint64[] operatorIds\n );\n event StakeETHThresholdChanged(uint256 amount);\n event StakeETHTallyReset();\n\n /// @dev Throws if called by any account other than the Registrator\n modifier onlyRegistrator() {\n require(\n msg.sender == validatorRegistrator,\n \"Caller is not the Registrator\"\n );\n _;\n }\n\n /// @dev Throws if called by any account other than the Staking monitor\n modifier onlyStakingMonitor() {\n require(msg.sender == stakingMonitor, \"Caller is not the Monitor\");\n _;\n }\n\n /// @dev Throws if called by any account other than the Strategist\n modifier onlyStrategist() {\n require(\n msg.sender == IVault(VAULT_ADDRESS).strategistAddr(),\n \"Caller is not the Strategist\"\n );\n _;\n }\n\n /// @param _wethAddress Address of the Erc20 WETH Token contract\n /// @param _vaultAddress Address of the Vault\n /// @param _beaconChainDepositContract Address of the beacon chain deposit contract\n /// @param _ssvNetwork Address of the SSV Network contract\n /// @param _maxValidators Maximum number of validators that can be registered in the strategy\n constructor(\n address _wethAddress,\n address _vaultAddress,\n address _beaconChainDepositContract,\n address _ssvNetwork,\n uint256 _maxValidators\n ) {\n WETH = _wethAddress;\n BEACON_CHAIN_DEPOSIT_CONTRACT = _beaconChainDepositContract;\n SSV_NETWORK = _ssvNetwork;\n VAULT_ADDRESS = _vaultAddress;\n MAX_VALIDATORS = _maxValidators;\n }\n\n /// @notice Set the address of the registrator which can register, exit and remove validators\n function setRegistrator(address _address) external onlyGovernor {\n validatorRegistrator = _address;\n emit RegistratorChanged(_address);\n }\n\n /// @notice Set the address of the staking monitor that is allowed to reset stakeETHTally\n function setStakingMonitor(address _address) external onlyGovernor {\n stakingMonitor = _address;\n emit StakingMonitorChanged(_address);\n }\n\n /// @notice Set the amount of ETH that can be staked before staking monitor\n // needs to a approve further staking by resetting the stake ETH tally\n function setStakeETHThreshold(uint256 _amount) external onlyGovernor {\n stakeETHThreshold = _amount;\n emit StakeETHThresholdChanged(_amount);\n }\n\n /// @notice Reset the stakeETHTally\n function resetStakeETHTally() external onlyStakingMonitor {\n stakeETHTally = 0;\n emit StakeETHTallyReset();\n }\n\n /// @notice Stakes WETH to the node validators\n /// @param validators A list of validator data needed to stake.\n /// The `ValidatorStakeData` struct contains the pubkey, signature and depositDataRoot.\n /// Only the registrator can call this function.\n // slither-disable-start reentrancy-eth\n function stakeEth(ValidatorStakeData[] calldata validators)\n external\n onlyRegistrator\n whenNotPaused\n nonReentrant\n {\n uint256 requiredETH = validators.length * FULL_STAKE;\n\n // Check there is enough WETH from the deposits sitting in this strategy contract\n require(\n requiredETH <= IWETH9(WETH).balanceOf(address(this)),\n \"Insufficient WETH\"\n );\n require(\n activeDepositedValidators + validators.length <= MAX_VALIDATORS,\n \"Max validators reached\"\n );\n\n require(\n stakeETHTally + requiredETH <= stakeETHThreshold,\n \"Staking ETH over threshold\"\n );\n stakeETHTally += requiredETH;\n\n // Convert required ETH from WETH\n IWETH9(WETH).withdraw(requiredETH);\n _wethWithdrawn(requiredETH);\n\n /* 0x01 to indicate that withdrawal credentials will contain an EOA address that the sweeping function\n * can sweep funds to.\n * bytes11(0) to fill up the required zeros\n * remaining bytes20 are for the address\n */\n bytes memory withdrawalCredentials = abi.encodePacked(\n bytes1(0x01),\n bytes11(0),\n address(this)\n );\n\n // For each validator\n for (uint256 i = 0; i < validators.length; ++i) {\n bytes32 pubKeyHash = keccak256(validators[i].pubkey);\n\n require(\n validatorsStates[pubKeyHash] == VALIDATOR_STATE.REGISTERED,\n \"Validator not registered\"\n );\n\n IDepositContract(BEACON_CHAIN_DEPOSIT_CONTRACT).deposit{\n value: FULL_STAKE\n }(\n validators[i].pubkey,\n withdrawalCredentials,\n validators[i].signature,\n validators[i].depositDataRoot\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.STAKED;\n\n emit ETHStaked(pubKeyHash, validators[i].pubkey, FULL_STAKE);\n }\n // save gas by changing this storage variable only once rather each time in the loop.\n activeDepositedValidators += validators.length;\n }\n\n // slither-disable-end reentrancy-eth\n\n /// @notice Registers a new validator in the SSV Cluster.\n /// Only the registrator can call this function.\n /// @param publicKeys The public keys of the validators\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param sharesData The shares data for each validator\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n // slither-disable-start reentrancy-no-eth\n function registerSsvValidators(\n bytes[] calldata publicKeys,\n uint64[] calldata operatorIds,\n bytes[] calldata sharesData,\n uint256 ssvAmount,\n Cluster calldata cluster\n ) external onlyRegistrator whenNotPaused {\n require(\n publicKeys.length == sharesData.length,\n \"Pubkey sharesData mismatch\"\n );\n // Check each public key has not already been used\n bytes32 pubKeyHash;\n VALIDATOR_STATE currentState;\n for (uint256 i = 0; i < publicKeys.length; ++i) {\n pubKeyHash = keccak256(publicKeys[i]);\n currentState = validatorsStates[pubKeyHash];\n require(\n currentState == VALIDATOR_STATE.NON_REGISTERED,\n \"Validator already registered\"\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.REGISTERED;\n\n emit SSVValidatorRegistered(pubKeyHash, publicKeys[i], operatorIds);\n }\n\n ISSVNetwork(SSV_NETWORK).bulkRegisterValidator(\n publicKeys,\n operatorIds,\n sharesData,\n ssvAmount,\n cluster\n );\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Exit a validator from the Beacon chain.\n /// The staked ETH will eventually swept to this native staking strategy.\n /// Only the registrator can call this function.\n /// @param publicKey The public key of the validator\n /// @param operatorIds The operator IDs of the SSV Cluster\n // slither-disable-start reentrancy-no-eth\n function exitSsvValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds\n ) external onlyRegistrator whenNotPaused {\n bytes32 pubKeyHash = keccak256(publicKey);\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\n require(currentState == VALIDATOR_STATE.STAKED, \"Validator not staked\");\n\n ISSVNetwork(SSV_NETWORK).exitValidator(publicKey, operatorIds);\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXITING;\n\n emit SSVValidatorExitInitiated(pubKeyHash, publicKey, operatorIds);\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Remove a validator from the SSV Cluster.\n /// Make sure `exitSsvValidator` is called before and the validate has exited the Beacon chain.\n /// If removed before the validator has exited the beacon chain will result in the validator being slashed.\n /// Only the registrator can call this function.\n /// @param publicKey The public key of the validator\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n // slither-disable-start reentrancy-no-eth\n function removeSsvValidator(\n bytes calldata publicKey,\n uint64[] calldata operatorIds,\n Cluster calldata cluster\n ) external onlyRegistrator whenNotPaused {\n bytes32 pubKeyHash = keccak256(publicKey);\n VALIDATOR_STATE currentState = validatorsStates[pubKeyHash];\n require(\n currentState == VALIDATOR_STATE.EXITING,\n \"Validator not exiting\"\n );\n\n ISSVNetwork(SSV_NETWORK).removeValidator(\n publicKey,\n operatorIds,\n cluster\n );\n\n validatorsStates[pubKeyHash] = VALIDATOR_STATE.EXIT_COMPLETE;\n\n emit SSVValidatorExitCompleted(pubKeyHash, publicKey, operatorIds);\n }\n\n // slither-disable-end reentrancy-no-eth\n\n /// @notice Deposits more SSV Tokens to the SSV Network contract which is used to pay the SSV Operators.\n /// @dev A SSV cluster is defined by the SSVOwnerAddress and the set of operatorIds.\n /// uses \"onlyStrategist\" modifier so continuous front-running can't DOS our maintenance service\n /// that tries to top up SSV tokens.\n /// @param operatorIds The operator IDs of the SSV Cluster\n /// @param ssvAmount The amount of SSV tokens to be deposited to the SSV cluster\n /// @param cluster The SSV cluster details including the validator count and SSV balance\n function depositSSV(\n uint64[] memory operatorIds,\n uint256 ssvAmount,\n Cluster memory cluster\n ) external onlyStrategist {\n ISSVNetwork(SSV_NETWORK).deposit(\n address(this),\n operatorIds,\n ssvAmount,\n cluster\n );\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n /// @dev Called when WETH is withdrawn from the strategy or staked to a validator so\n /// the strategy knows how much WETH it has on deposit.\n /// This is so it can emit the correct amount in the Deposit event in depositAll().\n function _wethWithdrawn(uint256 _amount) internal virtual;\n}\n" + }, + "contracts/token/OUSD.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OUSD Token Contract\n * @dev ERC20 compatible contract for OUSD\n * @dev Implements an elastic supply\n * @author Origin Protocol Inc\n */\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { InitializableERC20Detailed } from \"../utils/InitializableERC20Detailed.sol\";\nimport { StableMath } from \"../utils/StableMath.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\n\n/**\n * NOTE that this is an ERC20 token but the invariant that the sum of\n * balanceOf(x) for all x is not >= totalSupply(). This is a consequence of the\n * rebasing design. Any integrations with OUSD should be aware.\n */\n\ncontract OUSD is Initializable, InitializableERC20Detailed, Governable {\n using SafeMath for uint256;\n using StableMath for uint256;\n\n event TotalSupplyUpdatedHighres(\n uint256 totalSupply,\n uint256 rebasingCredits,\n uint256 rebasingCreditsPerToken\n );\n event AccountRebasingEnabled(address account);\n event AccountRebasingDisabled(address account);\n\n enum RebaseOptions {\n NotSet,\n OptOut,\n OptIn\n }\n\n uint256 private constant MAX_SUPPLY = ~uint128(0); // (2^128) - 1\n uint256 public _totalSupply;\n mapping(address => mapping(address => uint256)) private _allowances;\n address public vaultAddress = address(0);\n mapping(address => uint256) private _creditBalances;\n uint256 private _rebasingCredits;\n uint256 private _rebasingCreditsPerToken;\n // Frozen address/credits are non rebasing (value is held in contracts which\n // do not receive yield unless they explicitly opt in)\n uint256 public nonRebasingSupply;\n mapping(address => uint256) public nonRebasingCreditsPerToken;\n mapping(address => RebaseOptions) public rebaseState;\n mapping(address => uint256) public isUpgraded;\n\n uint256 private constant RESOLUTION_INCREASE = 1e9;\n\n function initialize(\n string calldata _nameArg,\n string calldata _symbolArg,\n address _vaultAddress,\n uint256 _initialCreditsPerToken\n ) external onlyGovernor initializer {\n InitializableERC20Detailed._initialize(_nameArg, _symbolArg, 18);\n _rebasingCreditsPerToken = _initialCreditsPerToken;\n vaultAddress = _vaultAddress;\n }\n\n /**\n * @dev Verifies that the caller is the Vault contract\n */\n modifier onlyVault() {\n require(vaultAddress == msg.sender, \"Caller is not the Vault\");\n _;\n }\n\n /**\n * @return The total supply of OUSD.\n */\n function totalSupply() public view override returns (uint256) {\n return _totalSupply;\n }\n\n /**\n * @return Low resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerToken() public view returns (uint256) {\n return _rebasingCreditsPerToken / RESOLUTION_INCREASE;\n }\n\n /**\n * @return Low resolution total number of rebasing credits\n */\n function rebasingCredits() public view returns (uint256) {\n return _rebasingCredits / RESOLUTION_INCREASE;\n }\n\n /**\n * @return High resolution rebasingCreditsPerToken\n */\n function rebasingCreditsPerTokenHighres() public view returns (uint256) {\n return _rebasingCreditsPerToken;\n }\n\n /**\n * @return High resolution total number of rebasing credits\n */\n function rebasingCreditsHighres() public view returns (uint256) {\n return _rebasingCredits;\n }\n\n /**\n * @dev Gets the balance of the specified address.\n * @param _account Address to query the balance of.\n * @return A uint256 representing the amount of base units owned by the\n * specified address.\n */\n function balanceOf(address _account)\n public\n view\n override\n returns (uint256)\n {\n if (_creditBalances[_account] == 0) return 0;\n return\n _creditBalances[_account].divPrecisely(_creditsPerToken(_account));\n }\n\n /**\n * @dev Gets the credits balance of the specified address.\n * @dev Backwards compatible with old low res credits per token.\n * @param _account The address to query the balance of.\n * @return (uint256, uint256) Credit balance and credits per token of the\n * address\n */\n function creditsBalanceOf(address _account)\n public\n view\n returns (uint256, uint256)\n {\n uint256 cpt = _creditsPerToken(_account);\n if (cpt == 1e27) {\n // For a period before the resolution upgrade, we created all new\n // contract accounts at high resolution. Since they are not changing\n // as a result of this upgrade, we will return their true values\n return (_creditBalances[_account], cpt);\n } else {\n return (\n _creditBalances[_account] / RESOLUTION_INCREASE,\n cpt / RESOLUTION_INCREASE\n );\n }\n }\n\n /**\n * @dev Gets the credits balance of the specified address.\n * @param _account The address to query the balance of.\n * @return (uint256, uint256, bool) Credit balance, credits per token of the\n * address, and isUpgraded\n */\n function creditsBalanceOfHighres(address _account)\n public\n view\n returns (\n uint256,\n uint256,\n bool\n )\n {\n return (\n _creditBalances[_account],\n _creditsPerToken(_account),\n isUpgraded[_account] == 1\n );\n }\n\n /**\n * @dev Transfer tokens to a specified address.\n * @param _to the address to transfer to.\n * @param _value the amount to be transferred.\n * @return true on success.\n */\n function transfer(address _to, uint256 _value)\n public\n override\n returns (bool)\n {\n require(_to != address(0), \"Transfer to zero address\");\n require(\n _value <= balanceOf(msg.sender),\n \"Transfer greater than balance\"\n );\n\n _executeTransfer(msg.sender, _to, _value);\n\n emit Transfer(msg.sender, _to, _value);\n\n return true;\n }\n\n /**\n * @dev Transfer tokens from one address to another.\n * @param _from The address you want to send tokens from.\n * @param _to The address you want to transfer to.\n * @param _value The amount of tokens to be transferred.\n */\n function transferFrom(\n address _from,\n address _to,\n uint256 _value\n ) public override returns (bool) {\n require(_to != address(0), \"Transfer to zero address\");\n require(_value <= balanceOf(_from), \"Transfer greater than balance\");\n\n _allowances[_from][msg.sender] = _allowances[_from][msg.sender].sub(\n _value\n );\n\n _executeTransfer(_from, _to, _value);\n\n emit Transfer(_from, _to, _value);\n\n return true;\n }\n\n /**\n * @dev Update the count of non rebasing credits in response to a transfer\n * @param _from The address you want to send tokens from.\n * @param _to The address you want to transfer to.\n * @param _value Amount of OUSD to transfer\n */\n function _executeTransfer(\n address _from,\n address _to,\n uint256 _value\n ) internal {\n bool isNonRebasingTo = _isNonRebasingAccount(_to);\n bool isNonRebasingFrom = _isNonRebasingAccount(_from);\n\n // Credits deducted and credited might be different due to the\n // differing creditsPerToken used by each account\n uint256 creditsCredited = _value.mulTruncate(_creditsPerToken(_to));\n uint256 creditsDeducted = _value.mulTruncate(_creditsPerToken(_from));\n\n _creditBalances[_from] = _creditBalances[_from].sub(\n creditsDeducted,\n \"Transfer amount exceeds balance\"\n );\n _creditBalances[_to] = _creditBalances[_to].add(creditsCredited);\n\n if (isNonRebasingTo && !isNonRebasingFrom) {\n // Transfer to non-rebasing account from rebasing account, credits\n // are removed from the non rebasing tally\n nonRebasingSupply = nonRebasingSupply.add(_value);\n // Update rebasingCredits by subtracting the deducted amount\n _rebasingCredits = _rebasingCredits.sub(creditsDeducted);\n } else if (!isNonRebasingTo && isNonRebasingFrom) {\n // Transfer to rebasing account from non-rebasing account\n // Decreasing non-rebasing credits by the amount that was sent\n nonRebasingSupply = nonRebasingSupply.sub(_value);\n // Update rebasingCredits by adding the credited amount\n _rebasingCredits = _rebasingCredits.add(creditsCredited);\n }\n }\n\n /**\n * @dev Function to check the amount of tokens that _owner has allowed to\n * `_spender`.\n * @param _owner The address which owns the funds.\n * @param _spender The address which will spend the funds.\n * @return The number of tokens still available for the _spender.\n */\n function allowance(address _owner, address _spender)\n public\n view\n override\n returns (uint256)\n {\n return _allowances[_owner][_spender];\n }\n\n /**\n * @dev Approve the passed address to spend the specified amount of tokens\n * on behalf of msg.sender. This method is included for ERC20\n * compatibility. `increaseAllowance` and `decreaseAllowance` should be\n * used instead.\n *\n * Changing an allowance with this method brings the risk that someone\n * may transfer both the old and the new allowance - if they are both\n * greater than zero - if a transfer transaction is mined before the\n * later approve() call is mined.\n * @param _spender The address which will spend the funds.\n * @param _value The amount of tokens to be spent.\n */\n function approve(address _spender, uint256 _value)\n public\n override\n returns (bool)\n {\n _allowances[msg.sender][_spender] = _value;\n emit Approval(msg.sender, _spender, _value);\n return true;\n }\n\n /**\n * @dev Increase the amount of tokens that an owner has allowed to\n * `_spender`.\n * This method should be used instead of approve() to avoid the double\n * approval vulnerability described above.\n * @param _spender The address which will spend the funds.\n * @param _addedValue The amount of tokens to increase the allowance by.\n */\n function increaseAllowance(address _spender, uint256 _addedValue)\n public\n returns (bool)\n {\n _allowances[msg.sender][_spender] = _allowances[msg.sender][_spender]\n .add(_addedValue);\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\n return true;\n }\n\n /**\n * @dev Decrease the amount of tokens that an owner has allowed to\n `_spender`.\n * @param _spender The address which will spend the funds.\n * @param _subtractedValue The amount of tokens to decrease the allowance\n * by.\n */\n function decreaseAllowance(address _spender, uint256 _subtractedValue)\n public\n returns (bool)\n {\n uint256 oldValue = _allowances[msg.sender][_spender];\n if (_subtractedValue >= oldValue) {\n _allowances[msg.sender][_spender] = 0;\n } else {\n _allowances[msg.sender][_spender] = oldValue.sub(_subtractedValue);\n }\n emit Approval(msg.sender, _spender, _allowances[msg.sender][_spender]);\n return true;\n }\n\n /**\n * @dev Mints new tokens, increasing totalSupply.\n */\n function mint(address _account, uint256 _amount) external onlyVault {\n _mint(_account, _amount);\n }\n\n /**\n * @dev Creates `_amount` tokens and assigns them to `_account`, increasing\n * the total supply.\n *\n * Emits a {Transfer} event with `from` set to the zero address.\n *\n * Requirements\n *\n * - `to` cannot be the zero address.\n */\n function _mint(address _account, uint256 _amount) internal nonReentrant {\n require(_account != address(0), \"Mint to the zero address\");\n\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\n\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\n _creditBalances[_account] = _creditBalances[_account].add(creditAmount);\n\n // If the account is non rebasing and doesn't have a set creditsPerToken\n // then set it i.e. this is a mint from a fresh contract\n if (isNonRebasingAccount) {\n nonRebasingSupply = nonRebasingSupply.add(_amount);\n } else {\n _rebasingCredits = _rebasingCredits.add(creditAmount);\n }\n\n _totalSupply = _totalSupply.add(_amount);\n\n require(_totalSupply < MAX_SUPPLY, \"Max supply\");\n\n emit Transfer(address(0), _account, _amount);\n }\n\n /**\n * @dev Burns tokens, decreasing totalSupply.\n */\n function burn(address account, uint256 amount) external onlyVault {\n _burn(account, amount);\n }\n\n /**\n * @dev Destroys `_amount` tokens from `_account`, reducing the\n * total supply.\n *\n * Emits a {Transfer} event with `to` set to the zero address.\n *\n * Requirements\n *\n * - `_account` cannot be the zero address.\n * - `_account` must have at least `_amount` tokens.\n */\n function _burn(address _account, uint256 _amount) internal nonReentrant {\n require(_account != address(0), \"Burn from the zero address\");\n if (_amount == 0) {\n return;\n }\n\n bool isNonRebasingAccount = _isNonRebasingAccount(_account);\n uint256 creditAmount = _amount.mulTruncate(_creditsPerToken(_account));\n uint256 currentCredits = _creditBalances[_account];\n\n // Remove the credits, burning rounding errors\n if (\n currentCredits == creditAmount || currentCredits - 1 == creditAmount\n ) {\n // Handle dust from rounding\n _creditBalances[_account] = 0;\n } else if (currentCredits > creditAmount) {\n _creditBalances[_account] = _creditBalances[_account].sub(\n creditAmount\n );\n } else {\n revert(\"Remove exceeds balance\");\n }\n\n // Remove from the credit tallies and non-rebasing supply\n if (isNonRebasingAccount) {\n nonRebasingSupply = nonRebasingSupply.sub(_amount);\n } else {\n _rebasingCredits = _rebasingCredits.sub(creditAmount);\n }\n\n _totalSupply = _totalSupply.sub(_amount);\n\n emit Transfer(_account, address(0), _amount);\n }\n\n /**\n * @dev Get the credits per token for an account. Returns a fixed amount\n * if the account is non-rebasing.\n * @param _account Address of the account.\n */\n function _creditsPerToken(address _account)\n internal\n view\n returns (uint256)\n {\n if (nonRebasingCreditsPerToken[_account] != 0) {\n return nonRebasingCreditsPerToken[_account];\n } else {\n return _rebasingCreditsPerToken;\n }\n }\n\n /**\n * @dev Is an account using rebasing accounting or non-rebasing accounting?\n * Also, ensure contracts are non-rebasing if they have not opted in.\n * @param _account Address of the account.\n */\n function _isNonRebasingAccount(address _account) internal returns (bool) {\n bool isContract = Address.isContract(_account);\n if (isContract && rebaseState[_account] == RebaseOptions.NotSet) {\n _ensureRebasingMigration(_account);\n }\n return nonRebasingCreditsPerToken[_account] > 0;\n }\n\n /**\n * @dev Ensures internal account for rebasing and non-rebasing credits and\n * supply is updated following deployment of frozen yield change.\n */\n function _ensureRebasingMigration(address _account) internal {\n if (nonRebasingCreditsPerToken[_account] == 0) {\n emit AccountRebasingDisabled(_account);\n if (_creditBalances[_account] == 0) {\n // Since there is no existing balance, we can directly set to\n // high resolution, and do not have to do any other bookkeeping\n nonRebasingCreditsPerToken[_account] = 1e27;\n } else {\n // Migrate an existing account:\n\n // Set fixed credits per token for this account\n nonRebasingCreditsPerToken[_account] = _rebasingCreditsPerToken;\n // Update non rebasing supply\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(_account));\n // Update credit tallies\n _rebasingCredits = _rebasingCredits.sub(\n _creditBalances[_account]\n );\n }\n }\n }\n\n /**\n * @notice Enable rebasing for an account.\n * @dev Add a contract address to the non-rebasing exception list. The\n * address's balance will be part of rebases and the account will be exposed\n * to upside and downside.\n * @param _account Address of the account.\n */\n function governanceRebaseOptIn(address _account)\n public\n nonReentrant\n onlyGovernor\n {\n _rebaseOptIn(_account);\n }\n\n /**\n * @dev Add a contract address to the non-rebasing exception list. The\n * address's balance will be part of rebases and the account will be exposed\n * to upside and downside.\n */\n function rebaseOptIn() public nonReentrant {\n _rebaseOptIn(msg.sender);\n }\n\n function _rebaseOptIn(address _account) internal {\n require(_isNonRebasingAccount(_account), \"Account has not opted out\");\n\n // Convert balance into the same amount at the current exchange rate\n uint256 newCreditBalance = _creditBalances[_account]\n .mul(_rebasingCreditsPerToken)\n .div(_creditsPerToken(_account));\n\n // Decreasing non rebasing supply\n nonRebasingSupply = nonRebasingSupply.sub(balanceOf(_account));\n\n _creditBalances[_account] = newCreditBalance;\n\n // Increase rebasing credits, totalSupply remains unchanged so no\n // adjustment necessary\n _rebasingCredits = _rebasingCredits.add(_creditBalances[_account]);\n\n rebaseState[_account] = RebaseOptions.OptIn;\n\n // Delete any fixed credits per token\n delete nonRebasingCreditsPerToken[_account];\n emit AccountRebasingEnabled(_account);\n }\n\n /**\n * @dev Explicitly mark that an address is non-rebasing.\n */\n function rebaseOptOut() public nonReentrant {\n require(!_isNonRebasingAccount(msg.sender), \"Account has not opted in\");\n\n // Increase non rebasing supply\n nonRebasingSupply = nonRebasingSupply.add(balanceOf(msg.sender));\n // Set fixed credits per token\n nonRebasingCreditsPerToken[msg.sender] = _rebasingCreditsPerToken;\n\n // Decrease rebasing credits, total supply remains unchanged so no\n // adjustment necessary\n _rebasingCredits = _rebasingCredits.sub(_creditBalances[msg.sender]);\n\n // Mark explicitly opted out of rebasing\n rebaseState[msg.sender] = RebaseOptions.OptOut;\n emit AccountRebasingDisabled(msg.sender);\n }\n\n /**\n * @dev Modify the supply without minting new tokens. This uses a change in\n * the exchange rate between \"credits\" and OUSD tokens to change balances.\n * @param _newTotalSupply New total supply of OUSD.\n */\n function changeSupply(uint256 _newTotalSupply)\n external\n onlyVault\n nonReentrant\n {\n require(_totalSupply > 0, \"Cannot increase 0 supply\");\n\n if (_totalSupply == _newTotalSupply) {\n emit TotalSupplyUpdatedHighres(\n _totalSupply,\n _rebasingCredits,\n _rebasingCreditsPerToken\n );\n return;\n }\n\n _totalSupply = _newTotalSupply > MAX_SUPPLY\n ? MAX_SUPPLY\n : _newTotalSupply;\n\n _rebasingCreditsPerToken = _rebasingCredits.divPrecisely(\n _totalSupply.sub(nonRebasingSupply)\n );\n\n require(_rebasingCreditsPerToken > 0, \"Invalid change in supply\");\n\n _totalSupply = _rebasingCredits\n .divPrecisely(_rebasingCreditsPerToken)\n .add(nonRebasingSupply);\n\n emit TotalSupplyUpdatedHighres(\n _totalSupply,\n _rebasingCredits,\n _rebasingCreditsPerToken\n );\n }\n}\n" + }, + "contracts/utils/Helpers.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IBasicToken } from \"../interfaces/IBasicToken.sol\";\n\nlibrary Helpers {\n /**\n * @notice Fetch the `symbol()` from an ERC20 token\n * @dev Grabs the `symbol()` from a contract\n * @param _token Address of the ERC20 token\n * @return string Symbol of the ERC20 token\n */\n function getSymbol(address _token) internal view returns (string memory) {\n string memory symbol = IBasicToken(_token).symbol();\n return symbol;\n }\n\n /**\n * @notice Fetch the `decimals()` from an ERC20 token\n * @dev Grabs the `decimals()` from a contract and fails if\n * the decimal value does not live within a certain range\n * @param _token Address of the ERC20 token\n * @return uint256 Decimals of the ERC20 token\n */\n function getDecimals(address _token) internal view returns (uint256) {\n uint256 decimals = IBasicToken(_token).decimals();\n require(\n decimals >= 4 && decimals <= 18,\n \"Token must have sufficient decimal places\"\n );\n\n return decimals;\n }\n}\n" + }, + "contracts/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base contract any contracts that need to initialize state after deployment.\n * @author Origin Protocol Inc\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n require(\n initializing || !initialized,\n \"Initializable: contract is already initialized\"\n );\n\n bool isTopLevelCall = !initializing;\n if (isTopLevelCall) {\n initializing = true;\n initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n initializing = false;\n }\n }\n\n uint256[50] private ______gap;\n}\n" + }, + "contracts/utils/InitializableAbstractStrategy.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title Base contract for vault strategies.\n * @author Origin Protocol Inc\n */\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\n\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { IVault } from \"../interfaces/IVault.sol\";\n\nabstract contract InitializableAbstractStrategy is Initializable, Governable {\n using SafeERC20 for IERC20;\n\n event PTokenAdded(address indexed _asset, address _pToken);\n event PTokenRemoved(address indexed _asset, address _pToken);\n event Deposit(address indexed _asset, address _pToken, uint256 _amount);\n event Withdrawal(address indexed _asset, address _pToken, uint256 _amount);\n event RewardTokenCollected(\n address recipient,\n address rewardToken,\n uint256 amount\n );\n event RewardTokenAddressesUpdated(\n address[] _oldAddresses,\n address[] _newAddresses\n );\n event HarvesterAddressesUpdated(\n address _oldHarvesterAddress,\n address _newHarvesterAddress\n );\n\n /// @notice Address of the underlying platform\n address public immutable platformAddress;\n /// @notice Address of the OToken vault\n address public immutable vaultAddress;\n\n /// @dev Replaced with an immutable variable\n // slither-disable-next-line constable-states\n address private _deprecated_platformAddress;\n\n /// @dev Replaced with an immutable\n // slither-disable-next-line constable-states\n address private _deprecated_vaultAddress;\n\n /// @notice asset => pToken (Platform Specific Token Address)\n mapping(address => address) public assetToPToken;\n\n /// @notice Full list of all assets supported by the strategy\n address[] internal assetsMapped;\n\n // Deprecated: Reward token address\n // slither-disable-next-line constable-states\n address private _deprecated_rewardTokenAddress;\n\n // Deprecated: now resides in Harvester's rewardTokenConfigs\n // slither-disable-next-line constable-states\n uint256 private _deprecated_rewardLiquidationThreshold;\n\n /// @notice Address of the Harvester contract allowed to collect reward tokens\n address public harvesterAddress;\n\n /// @notice Address of the reward tokens. eg CRV, BAL, CVX, AURA\n address[] public rewardTokenAddresses;\n\n /* Reserved for future expansion. Used to be 100 storage slots\n * and has decreased to accommodate:\n * - harvesterAddress\n * - rewardTokenAddresses\n */\n int256[98] private _reserved;\n\n struct BaseStrategyConfig {\n address platformAddress; // Address of the underlying platform\n address vaultAddress; // Address of the OToken's Vault\n }\n\n /**\n * @param _config The platform and OToken vault addresses\n */\n constructor(BaseStrategyConfig memory _config) {\n platformAddress = _config.platformAddress;\n vaultAddress = _config.vaultAddress;\n }\n\n /**\n * @dev Internal initialize function, to set up initial internal state\n * @param _rewardTokenAddresses Address of reward token for platform\n * @param _assets Addresses of initial supported assets\n * @param _pTokens Platform Token corresponding addresses\n */\n function _initialize(\n address[] memory _rewardTokenAddresses,\n address[] memory _assets,\n address[] memory _pTokens\n ) internal {\n rewardTokenAddresses = _rewardTokenAddresses;\n\n uint256 assetCount = _assets.length;\n require(assetCount == _pTokens.length, \"Invalid input arrays\");\n for (uint256 i = 0; i < assetCount; ++i) {\n _setPTokenAddress(_assets[i], _pTokens[i]);\n }\n }\n\n /**\n * @notice Collect accumulated reward token and send to Vault.\n */\n function collectRewardTokens() external virtual onlyHarvester nonReentrant {\n _collectRewardTokens();\n }\n\n /**\n * @dev Default implementation that transfers reward tokens to the Harvester\n * Implementing strategies need to add custom logic to collect the rewards.\n */\n function _collectRewardTokens() internal virtual {\n uint256 rewardTokenCount = rewardTokenAddresses.length;\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\n IERC20 rewardToken = IERC20(rewardTokenAddresses[i]);\n uint256 balance = rewardToken.balanceOf(address(this));\n if (balance > 0) {\n emit RewardTokenCollected(\n harvesterAddress,\n address(rewardToken),\n balance\n );\n rewardToken.safeTransfer(harvesterAddress, balance);\n }\n }\n }\n\n /**\n * @dev Verifies that the caller is the Vault.\n */\n modifier onlyVault() {\n require(msg.sender == vaultAddress, \"Caller is not the Vault\");\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Harvester.\n */\n modifier onlyHarvester() {\n require(msg.sender == harvesterAddress, \"Caller is not the Harvester\");\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Vault or Governor.\n */\n modifier onlyVaultOrGovernor() {\n require(\n msg.sender == vaultAddress || msg.sender == governor(),\n \"Caller is not the Vault or Governor\"\n );\n _;\n }\n\n /**\n * @dev Verifies that the caller is the Vault, Governor, or Strategist.\n */\n modifier onlyVaultOrGovernorOrStrategist() {\n require(\n msg.sender == vaultAddress ||\n msg.sender == governor() ||\n msg.sender == IVault(vaultAddress).strategistAddr(),\n \"Caller is not the Vault, Governor, or Strategist\"\n );\n _;\n }\n\n /**\n * @notice Set the reward token addresses. Any old addresses will be overwritten.\n * @param _rewardTokenAddresses Array of reward token addresses\n */\n function setRewardTokenAddresses(address[] calldata _rewardTokenAddresses)\n external\n onlyGovernor\n {\n uint256 rewardTokenCount = _rewardTokenAddresses.length;\n for (uint256 i = 0; i < rewardTokenCount; ++i) {\n require(\n _rewardTokenAddresses[i] != address(0),\n \"Can not set an empty address as a reward token\"\n );\n }\n\n emit RewardTokenAddressesUpdated(\n rewardTokenAddresses,\n _rewardTokenAddresses\n );\n rewardTokenAddresses = _rewardTokenAddresses;\n }\n\n /**\n * @notice Get the reward token addresses.\n * @return address[] the reward token addresses.\n */\n function getRewardTokenAddresses()\n external\n view\n returns (address[] memory)\n {\n return rewardTokenAddresses;\n }\n\n /**\n * @notice Provide support for asset by passing its pToken address.\n * This method can only be called by the system Governor\n * @param _asset Address for the asset\n * @param _pToken Address for the corresponding platform token\n */\n function setPTokenAddress(address _asset, address _pToken)\n external\n virtual\n onlyGovernor\n {\n _setPTokenAddress(_asset, _pToken);\n }\n\n /**\n * @notice Remove a supported asset by passing its index.\n * This method can only be called by the system Governor\n * @param _assetIndex Index of the asset to be removed\n */\n function removePToken(uint256 _assetIndex) external virtual onlyGovernor {\n require(_assetIndex < assetsMapped.length, \"Invalid index\");\n address asset = assetsMapped[_assetIndex];\n address pToken = assetToPToken[asset];\n\n if (_assetIndex < assetsMapped.length - 1) {\n assetsMapped[_assetIndex] = assetsMapped[assetsMapped.length - 1];\n }\n assetsMapped.pop();\n assetToPToken[asset] = address(0);\n\n emit PTokenRemoved(asset, pToken);\n }\n\n /**\n * @notice Provide support for asset by passing its pToken address.\n * Add to internal mappings and execute the platform specific,\n * abstract method `_abstractSetPToken`\n * @param _asset Address for the asset\n * @param _pToken Address for the corresponding platform token\n */\n function _setPTokenAddress(address _asset, address _pToken) internal {\n require(assetToPToken[_asset] == address(0), \"pToken already set\");\n require(\n _asset != address(0) && _pToken != address(0),\n \"Invalid addresses\"\n );\n\n assetToPToken[_asset] = _pToken;\n assetsMapped.push(_asset);\n\n emit PTokenAdded(_asset, _pToken);\n\n _abstractSetPToken(_asset, _pToken);\n }\n\n /**\n * @notice Transfer token to governor. Intended for recovering tokens stuck in\n * strategy contracts, i.e. mistaken sends.\n * @param _asset Address for the asset\n * @param _amount Amount of the asset to transfer\n */\n function transferToken(address _asset, uint256 _amount)\n public\n onlyGovernor\n {\n require(!supportsAsset(_asset), \"Cannot transfer supported asset\");\n IERC20(_asset).safeTransfer(governor(), _amount);\n }\n\n /**\n * @notice Set the Harvester contract that can collect rewards.\n * @param _harvesterAddress Address of the harvester contract.\n */\n function setHarvesterAddress(address _harvesterAddress)\n external\n onlyGovernor\n {\n emit HarvesterAddressesUpdated(harvesterAddress, _harvesterAddress);\n harvesterAddress = _harvesterAddress;\n }\n\n /***************************************\n Abstract\n ****************************************/\n\n function _abstractSetPToken(address _asset, address _pToken)\n internal\n virtual;\n\n function safeApproveAllTokens() external virtual;\n\n /**\n * @notice Deposit an amount of assets into the platform\n * @param _asset Address for the asset\n * @param _amount Units of asset to deposit\n */\n function deposit(address _asset, uint256 _amount) external virtual;\n\n /**\n * @notice Deposit all supported assets in this strategy contract to the platform\n */\n function depositAll() external virtual;\n\n /**\n * @notice Withdraw an `amount` of assets from the platform and\n * send to the `_recipient`.\n * @param _recipient Address to which the asset should be sent\n * @param _asset Address of the asset\n * @param _amount Units of asset to withdraw\n */\n function withdraw(\n address _recipient,\n address _asset,\n uint256 _amount\n ) external virtual;\n\n /**\n * @notice Withdraw all supported assets from platform and\n * sends to the OToken's Vault.\n */\n function withdrawAll() external virtual;\n\n /**\n * @notice Get the total asset value held in the platform.\n * This includes any interest that was generated since depositing.\n * @param _asset Address of the asset\n * @return balance Total value of the asset in the platform\n */\n function checkBalance(address _asset)\n external\n view\n virtual\n returns (uint256 balance);\n\n /**\n * @notice Check if an asset is supported.\n * @param _asset Address of the asset\n * @return bool Whether asset is supported\n */\n function supportsAsset(address _asset) public view virtual returns (bool);\n}\n" + }, + "contracts/utils/InitializableERC20Detailed.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\n\n/**\n * @dev Optional functions from the ERC20 standard.\n * Converted from openzeppelin/contracts/token/ERC20/ERC20Detailed.sol\n * @author Origin Protocol Inc\n */\nabstract contract InitializableERC20Detailed is IERC20 {\n // Storage gap to skip storage from prior to OUSD reset\n uint256[100] private _____gap;\n\n string private _name;\n string private _symbol;\n uint8 private _decimals;\n\n /**\n * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of\n * these values are immutable: they can only be set once during\n * construction.\n * @notice To avoid variable shadowing appended `Arg` after arguments name.\n */\n function _initialize(\n string memory nameArg,\n string memory symbolArg,\n uint8 decimalsArg\n ) internal {\n _name = nameArg;\n _symbol = symbolArg;\n _decimals = decimalsArg;\n }\n\n /**\n * @notice Returns the name of the token.\n */\n function name() public view returns (string memory) {\n return _name;\n }\n\n /**\n * @notice Returns the symbol of the token, usually a shorter version of the\n * name.\n */\n function symbol() public view returns (string memory) {\n return _symbol;\n }\n\n /**\n * @notice Returns the number of decimals used to get its user representation.\n * For example, if `decimals` equals `2`, a balance of `505` tokens should\n * be displayed to a user as `5,05` (`505 / 10 ** 2`).\n *\n * Tokens usually opt for a value of 18, imitating the relationship between\n * Ether and Wei.\n *\n * NOTE: This information is only used for _display_ purposes: it in\n * no way affects any of the arithmetic of the contract, including\n * {IERC20-balanceOf} and {IERC20-transfer}.\n */\n function decimals() public view returns (uint8) {\n return _decimals;\n }\n}\n" + }, + "contracts/utils/StableMath.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\nimport { SafeMath } from \"@openzeppelin/contracts/utils/math/SafeMath.sol\";\n\n// Based on StableMath from Stability Labs Pty. Ltd.\n// https://github.com/mstable/mStable-contracts/blob/master/contracts/shared/StableMath.sol\n\nlibrary StableMath {\n using SafeMath for uint256;\n\n /**\n * @dev Scaling unit for use in specific calculations,\n * where 1 * 10**18, or 1e18 represents a unit '1'\n */\n uint256 private constant FULL_SCALE = 1e18;\n\n /***************************************\n Helpers\n ****************************************/\n\n /**\n * @dev Adjust the scale of an integer\n * @param to Decimals to scale to\n * @param from Decimals to scale from\n */\n function scaleBy(\n uint256 x,\n uint256 to,\n uint256 from\n ) internal pure returns (uint256) {\n if (to > from) {\n x = x.mul(10**(to - from));\n } else if (to < from) {\n // slither-disable-next-line divide-before-multiply\n x = x.div(10**(from - to));\n }\n return x;\n }\n\n /***************************************\n Precise Arithmetic\n ****************************************/\n\n /**\n * @dev Multiplies two precise units, and then truncates by the full scale\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit\n */\n function mulTruncate(uint256 x, uint256 y) internal pure returns (uint256) {\n return mulTruncateScale(x, y, FULL_SCALE);\n }\n\n /**\n * @dev Multiplies two precise units, and then truncates by the given scale. For example,\n * when calculating 90% of 10e18, (10e18 * 9e17) / 1e18 = (9e36) / 1e18 = 9e18\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @param scale Scale unit\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit\n */\n function mulTruncateScale(\n uint256 x,\n uint256 y,\n uint256 scale\n ) internal pure returns (uint256) {\n // e.g. assume scale = fullScale\n // z = 10e18 * 9e17 = 9e36\n uint256 z = x.mul(y);\n // return 9e36 / 1e18 = 9e18\n return z.div(scale);\n }\n\n /**\n * @dev Multiplies two precise units, and then truncates by the full scale, rounding up the result\n * @param x Left hand input to multiplication\n * @param y Right hand input to multiplication\n * @return Result after multiplying the two inputs and then dividing by the shared\n * scale unit, rounded up to the closest base unit.\n */\n function mulTruncateCeil(uint256 x, uint256 y)\n internal\n pure\n returns (uint256)\n {\n // e.g. 8e17 * 17268172638 = 138145381104e17\n uint256 scaled = x.mul(y);\n // e.g. 138145381104e17 + 9.99...e17 = 138145381113.99...e17\n uint256 ceil = scaled.add(FULL_SCALE.sub(1));\n // e.g. 13814538111.399...e18 / 1e18 = 13814538111\n return ceil.div(FULL_SCALE);\n }\n\n /**\n * @dev Precisely divides two units, by first scaling the left hand operand. Useful\n * for finding percentage weightings, i.e. 8e18/10e18 = 80% (or 8e17)\n * @param x Left hand input to division\n * @param y Right hand input to division\n * @return Result after multiplying the left operand by the scale, and\n * executing the division on the right hand input.\n */\n function divPrecisely(uint256 x, uint256 y)\n internal\n pure\n returns (uint256)\n {\n // e.g. 8e18 * 1e18 = 8e36\n uint256 z = x.mul(FULL_SCALE);\n // e.g. 8e36 / 10e18 = 8e17\n return z.div(y);\n }\n}\n" + }, + "contracts/vault/VaultStorage.sol": { + "content": "// SPDX-License-Identifier: MIT\npragma solidity ^0.8.0;\n\n/**\n * @title OToken VaultStorage contract\n * @notice The VaultStorage contract defines the storage for the Vault contracts\n * @author Origin Protocol Inc\n */\n\nimport { IERC20 } from \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport { SafeERC20 } from \"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol\";\nimport { Address } from \"@openzeppelin/contracts/utils/Address.sol\";\n\nimport { IStrategy } from \"../interfaces/IStrategy.sol\";\nimport { Governable } from \"../governance/Governable.sol\";\nimport { OUSD } from \"../token/OUSD.sol\";\nimport { Initializable } from \"../utils/Initializable.sol\";\nimport \"../utils/Helpers.sol\";\n\ncontract VaultStorage is Initializable, Governable {\n using SafeERC20 for IERC20;\n\n event AssetSupported(address _asset);\n event AssetRemoved(address _asset);\n event AssetDefaultStrategyUpdated(address _asset, address _strategy);\n event AssetAllocated(address _asset, address _strategy, uint256 _amount);\n event StrategyApproved(address _addr);\n event StrategyRemoved(address _addr);\n event Mint(address _addr, uint256 _value);\n event Redeem(address _addr, uint256 _value);\n event CapitalPaused();\n event CapitalUnpaused();\n event RebasePaused();\n event RebaseUnpaused();\n event VaultBufferUpdated(uint256 _vaultBuffer);\n event OusdMetaStrategyUpdated(address _ousdMetaStrategy);\n event RedeemFeeUpdated(uint256 _redeemFeeBps);\n event PriceProviderUpdated(address _priceProvider);\n event AllocateThresholdUpdated(uint256 _threshold);\n event RebaseThresholdUpdated(uint256 _threshold);\n event StrategistUpdated(address _address);\n event MaxSupplyDiffChanged(uint256 maxSupplyDiff);\n event YieldDistribution(address _to, uint256 _yield, uint256 _fee);\n event TrusteeFeeBpsChanged(uint256 _basis);\n event TrusteeAddressChanged(address _address);\n event NetOusdMintForStrategyThresholdChanged(uint256 _threshold);\n event SwapperChanged(address _address);\n event SwapAllowedUndervalueChanged(uint256 _basis);\n event SwapSlippageChanged(address _asset, uint256 _basis);\n event Swapped(\n address indexed _fromAsset,\n address indexed _toAsset,\n uint256 _fromAssetAmount,\n uint256 _toAssetAmount\n );\n\n // Assets supported by the Vault, i.e. Stablecoins\n enum UnitConversion {\n DECIMALS,\n GETEXCHANGERATE\n }\n // Changed to fit into a single storage slot so the decimals needs to be recached\n struct Asset {\n // Note: OETHVaultCore doesn't use `isSupported` when minting,\n // redeeming or checking balance of assets.\n bool isSupported;\n UnitConversion unitConversion;\n uint8 decimals;\n // Max allowed slippage from the Oracle price when swapping collateral assets in basis points.\n // For example 40 == 0.4% slippage\n uint16 allowedOracleSlippageBps;\n }\n\n /// @dev mapping of supported vault assets to their configuration\n // slither-disable-next-line uninitialized-state\n mapping(address => Asset) internal assets;\n /// @dev list of all assets supported by the vault.\n // slither-disable-next-line uninitialized-state\n address[] internal allAssets;\n\n // Strategies approved for use by the Vault\n struct Strategy {\n bool isSupported;\n uint256 _deprecated; // Deprecated storage slot\n }\n /// @dev mapping of strategy contracts to their configiration\n mapping(address => Strategy) internal strategies;\n /// @dev list of all vault strategies\n address[] internal allStrategies;\n\n /// @notice Address of the Oracle price provider contract\n // slither-disable-next-line uninitialized-state\n address public priceProvider;\n /// @notice pause rebasing if true\n bool public rebasePaused = false;\n /// @notice pause operations that change the OToken supply.\n /// eg mint, redeem, allocate, mint/burn for strategy\n bool public capitalPaused = true;\n /// @notice Redemption fee in basis points. eg 50 = 0.5%\n uint256 public redeemFeeBps;\n /// @notice Percentage of assets to keep in Vault to handle (most) withdrawals. 100% = 1e18.\n uint256 public vaultBuffer;\n /// @notice OToken mints over this amount automatically allocate funds. 18 decimals.\n uint256 public autoAllocateThreshold;\n /// @notice OToken mints over this amount automatically rebase. 18 decimals.\n uint256 public rebaseThreshold;\n\n /// @dev Address of the OToken token. eg OUSD or OETH.\n // slither-disable-next-line uninitialized-state\n OUSD internal oUSD;\n\n //keccak256(\"OUSD.vault.governor.admin.impl\");\n bytes32 constant adminImplPosition =\n 0xa2bd3d3cf188a41358c8b401076eb59066b09dec5775650c0de4c55187d17bd9;\n\n // Address of the contract responsible for post rebase syncs with AMMs\n address private _deprecated_rebaseHooksAddr = address(0);\n\n // Deprecated: Address of Uniswap\n // slither-disable-next-line constable-states\n address private _deprecated_uniswapAddr = address(0);\n\n /// @notice Address of the Strategist\n address public strategistAddr = address(0);\n\n /// @notice Mapping of asset address to the Strategy that they should automatically\n // be allocated to\n // slither-disable-next-line uninitialized-state\n mapping(address => address) public assetDefaultStrategies;\n\n /// @notice Max difference between total supply and total value of assets. 18 decimals.\n // slither-disable-next-line uninitialized-state\n uint256 public maxSupplyDiff;\n\n /// @notice Trustee contract that can collect a percentage of yield\n address public trusteeAddress;\n\n /// @notice Amount of yield collected in basis points. eg 2000 = 20%\n uint256 public trusteeFeeBps;\n\n /// @dev Deprecated: Tokens that should be swapped for stablecoins\n address[] private _deprecated_swapTokens;\n\n uint256 constant MINT_MINIMUM_UNIT_PRICE = 0.998e18;\n\n /// @notice Metapool strategy that is allowed to mint/burn OTokens without changing collateral\n address public ousdMetaStrategy = address(0);\n\n /// @notice How much OTokens are currently minted by the strategy\n int256 public netOusdMintedForStrategy = 0;\n\n /// @notice How much net total OTokens are allowed to be minted by all strategies\n uint256 public netOusdMintForStrategyThreshold = 0;\n\n uint256 constant MIN_UNIT_PRICE_DRIFT = 0.7e18;\n uint256 constant MAX_UNIT_PRICE_DRIFT = 1.3e18;\n\n /// @notice Collateral swap configuration.\n /// @dev is packed into a single storage slot to save gas.\n struct SwapConfig {\n // Contract that swaps the vault's collateral assets\n address swapper;\n // Max allowed percentage the total value can drop below the total supply in basis points.\n // For example 100 == 1%\n uint16 allowedUndervalueBps;\n }\n SwapConfig internal swapConfig = SwapConfig(address(0), 0);\n\n // For future use\n uint256[50] private __gap;\n\n /**\n * @notice set the implementation for the admin, this needs to be in a base class else we cannot set it\n * @param newImpl address of the implementation\n */\n function setAdminImpl(address newImpl) external onlyGovernor {\n require(\n Address.isContract(newImpl),\n \"new implementation is not a contract\"\n );\n bytes32 position = adminImplPosition;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(position, newImpl)\n }\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 200 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file

    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�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 literal 454018 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

<#ehoXUQP=Qg{*4_ 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 z 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 Uyjg64cV>{0R5%uUp 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 z z^o6{dcqez7yU`iKsQZP9^Cao0@_;~h#Y;Blk3D098NtOSfjJU()s}~+E~hT8zMpRx^V zb+>_Dra!G6;r{i@j@n)3zGMfS1*8yo1hk^9tNrC~$!dfT&&^$^P`RsROq^$4n7+F^zq2rW? zr^Z6coV-u0HYGlU*l=O8oevH2-~azCBZ=ss{%Ph!Um)}M_Lr(%EO3C|%)>yA^{#(1 zC?m?=8RYa=RV)~W1(WAt-K4F^cUDH9P2;cw@i6EZFkNhb9VMF+@Gt#Q)Xx5GcDY#U zmXw^_a@7Z+1kl5g$Maxl{l>UH`S``z_de3TVJ!=>T?K3DI!)G@28rSbXy0iMp z{P^*m8hj+u*}0{zTDvYBUVFE-)pLMGJ$1z1+WNt}@0!vN!?2>btLs4l;OUYMDVp{L zms|YN8#is*kbNwKeOomf#k|362ZkRwpPY^Z=P+}{_B2K&CJ>TO3W4+q+l0c47q_MR z@7*hQe`RlPFL*XcfzmZUFByxtcx?5|x^&6<0!&qrgM+6gzfb%|oi4N31P*17A77lr znu<%@`4>(b)L}11XJ=wiM|-<^^%b}a56f{TnnhxBF6!sFFrLRvOINHYWyLgJ?Z*qB zH8hZ>6!C-GVT}2)Qgr?L%%URwLFN2l*aM$u27%{qO^eYYO4Nd*%J%Tld;9=0M94N+ zn2`NhxIxg)Q}^*HMKy#+N4pjqieHd|AbQ=+0>??%P~HIZ z7^`^rmoz=RC;X_Z>xR=^=D`^l_+5&L+5~#6#-VK!U0q$!gTM#x$Pr>KnqED7^5vV4 z1>Hvg)xU&6%E5)3oSF<9gmo5PtO(l*%iJ&+QmO`SZr$aP-oZ3Rjf-Qv%rIw*ML$`z zCt*BaM8~mmV)Cg_j2c|fL`6>$ZE3<~eRXxlLIMA0Ng`_BCIW|lv9f9^t*AbsxA(pC zlJ#81u&LLyfJo$4>e$LL9`oeO2`L{H|Iq#%YQZSc0 zWG7Z0=^z-GgU-#jc@h2ok|NmU9ZE5rt1A= z*8Ss4-?AL3a%{KXClW?!1ZGJLFM&vmsPSG<*~q_?4NF0~k%-|2v}>1sKfESkYy-^( zCSZJ)d=*^#o}(d2P?rjZKsKW-L+OZAq0H_^c0`Nidu=S=gYNlyqss%%$>|IQ&sE|& z1_n8;Wo2^57lHc>(h;*F=r%+J+gVal^5I)1D;YG+lOF`#of(gXs!EE8Wb$yohxgL8 zSXbwf?DE@KUvog@jozKvZOH)Jh})ZgC;GyL3wbg2=H`7LKkB@y)|7y2!jOCd3_GzU z`>?mS|3rT>cv*%=*FUX*rebAiDhy=-w3?fnAF$d@qtRGaca3op_cfGodoJ*NRdXRr z0`xVp$DN&L&YpeR-j46by-z&#)os7h++5+#4I*!)gqj95J>nW<(6O|YHNhq_Kt{_W z9gKTiG5ogw{-Pi2qRl&>Jp*@4Z_2F?n0q8g@}vm>RQaXif~Q2VH#62a+h@Z0aihqS zM~~Jk#-XYv0Et=AXajZR4qnVx{c3wNUdPKo#5 zU0?9_VyS0augGIIqr$oOJdad|_e|${mSsU%OYHcBiz~=D51X5h?_k+xd^MbB+4l}E z=-TKhi~dLdjy%=Ol(Xwp#Kumpu<1v+Fx$it`7MiEMu11hrX;Ylz(T^5DnZ1%)8
r`{2%`4}>o^l={ScffcNez#aY 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