0 txs
23 calls
constructor
constructor(address _erc4626, address _distributor)
functions
accruedRewards
viewfunction accruedRewards(address user) view returns (uint256[] rewardAmounts)
allowance
viewfunction allowance(address owner, address spender) view returns (uint256)
asset
viewfunction asset() view returns (address)
assetInfo
viewfunction assetInfo() view returns (uint8 assetType, address assetAddress, uint8 assetDecimals)
balanceOf
viewfunction balanceOf(address account) view returns (uint256)
decimals
viewfunction decimals() view returns (uint8)
distributor
viewfunction distributor() view returns (address)
exchangeRate
viewfunction exchangeRate() view returns (uint256)
getRewardTokens
viewfunction getRewardTokens() view returns (address[] rewardTokens)
getTokensIn
viewfunction getTokensIn() view returns (address[] res)
getTokensOut
viewfunction getTokensOut() view returns (address[] res)
isValidTokenIn
viewfunction isValidTokenIn(address token) view returns (bool)
isValidTokenOut
viewfunction isValidTokenOut(address token) view returns (bool)
lastRewardBlock
viewfunction lastRewardBlock() view returns (uint256)
name
viewfunction name() view returns (string)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
pendingOwner
viewfunction pendingOwner() view returns (address)
previewDeposit
viewfunction previewDeposit(address tokenIn, uint256 amountTokenToDeposit) view returns (uint256 amountSharesOut)
previewRedeem
viewfunction previewRedeem(address tokenOut, uint256 amountSharesToRedeem) view returns (uint256 amountTokenOut)
rewardIndexesStored
viewfunction rewardIndexesStored() view returns (uint256[] indexes)
rewardState
viewfunction rewardState(address) view returns (uint128 index, uint128 lastBalance)
symbol
viewfunction symbol() view returns (string)
totalSupply
viewfunction totalSupply() view returns (uint256)
userReward
viewfunction userReward(address, address) view returns (uint128 index, uint128 accrued)
yieldToken
viewfunction yieldToken() view returns (address)
approve
nonpayablefunction approve(address spender, uint256 amount) returns (bool)
claimOwnership
nonpayablefunction claimOwnership()
claimRewards
nonpayablefunction claimRewards(address user) returns (uint256[] rewardAmounts)
deposit
payablefunction deposit(address receiver, address tokenIn, uint256 amountTokenToDeposit, uint256 minSharesOut) payable returns (uint256 amountSharesOut)
initialize
nonpayablefunction initialize(string _name, string _symbol, address _owner)
pause
nonpayablefunction pause()
redeem
nonpayablefunction redeem(address receiver, uint256 amountSharesToRedeem, address tokenOut, uint256 minTokenOut, bool burnFromInternalBalance) returns (uint256 amountTokenOut)
rewardIndexesCurrent
nonpayablefunction rewardIndexesCurrent() returns (uint256[] indexes)
transfer
nonpayablefunction transfer(address to, uint256 amount) returns (bool)
transferFrom
nonpayablefunction transferFrom(address from, address to, uint256 amount) returns (bool)
transferOwnership
nonpayablefunction transferOwnership(address newOwner, bool direct, bool renounce)
unpause
nonpayablefunction unpause()
events
Approval
event Approval(address indexed owner, address indexed spender, uint256 value)
ClaimRewards
event ClaimRewards(address indexed user, address[] rewardTokens, uint256[] rewardAmounts)
Deposit
event Deposit(address indexed caller, address indexed receiver, address indexed tokenIn, uint256 amountDeposited, uint256 amountSyOut)
Initialized
event Initialized(uint8 version)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(address account)
Redeem
event Redeem(address indexed caller, address indexed receiver, address indexed tokenOut, uint256 amountSyToRedeem, uint256 amountTokenOut)
Transfer
event Transfer(address indexed from, address indexed to, uint256 value)
Unpaused
event Unpaused(address account)
errors
SYInsufficientSharesOut
error SYInsufficientSharesOut(uint256 actualSharesOut, uint256 requiredSharesOut)
SYInsufficientTokenOut
error SYInsufficientTokenOut(uint256 actualTokenOut, uint256 requiredTokenOut)
SYInvalidTokenIn
error SYInvalidTokenIn(address token)
SYInvalidTokenOut
error SYInvalidTokenOut(address token)
SYZeroDeposit
error SYZeroDeposit()
SYZeroRedeem
error SYZeroRedeem()
creation bytecode
0x61010060409080825234620001d6578181620047d48038038091620000258285620002ca565b833981010312620001d6576200003b8162000302565b6200004a602080930162000302565b835163313ce56760e01b81526001600160a01b03831692908481600481875afa908115620002c0575f9162000282575b5060805260ff19609b5416609b5560a05260015460ff8160a81c166200022e579183918360ff8060049660a01c1603620001ec575b5060e05284516338d52e0f60e01b815292839182905afa918215620001e2575f92620001a0575b505060c052516144bc90816200031882396080518161166d015260a05181818161086c01528181610ec601528181610f370152818161100e01528181611550015281816119090152818161230b0152818161276701528181612ca801528181613202015281816137840152613924015260c0518181816103a6015281816107780152818161090201528181610b9b01528181611612015281816118d601528181611e3a0152818161232c01528181612cd80152613874015260e05181818161098301526139f70152f35b90809250813d8311620001da575b620001ba8183620002ca565b81010312620001d657620001ce9062000302565b5f80620000d6565b5f80fd5b503d620001ae565b83513d5f823e3d90fd5b60ff60a01b191660ff60a01b17600155855160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498908490a15f620000af565b845162461bcd60e51b815260048101859052602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b90508481813d8311620002b8575b6200029c8183620002ca565b81010312620001d6575160ff81168103620001d6575f6200007a565b503d62000290565b86513d5f823e3d90fd5b601f909101601f19168101906001600160401b03821190821017620002ee57604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620001d65756fe6080604090808252600480361015610021575b505050361561001f575f80fd5b005b5f3560e01c91826306fdde031461278b57508163071bc3c91461272f578163077f224a146120af578163078dfbe714611f28578163095ea7b314611eda578163128fced114611dfb57816318160ddd14611da057816320e8c56514611997578163213cae631461185e57816323b872dd14611691578163313ce5671461163657816338d52e0f146115c85781633ba0b9a9146114d25781633f4ba83a146113c55781634e71e0c8146112bb5781635c975abb1461127a5781635cbadbe4146111d857816370a0823114611175578163769f8e5d14610f5b57816376d5de8514610eed578163784367d614610e705781638456cb5914610dc15781638da5cb5b14610d7057816395d89b4114610c59578163a40bee5014610b54578163a9059cbb14610a85578163a9f8d18114610a48578163b8f82b26146109a7578163bfe1092814610939578163c4f59f9b146108ca578163cbe52ae314610819578163da88ecb414610744578163dd62ed3e146106cf578163e30c39781461067d578163ea64a820146105ef578163ef5cfb8c146102fe578163f8b2f99114610220575063fa5a4f06146101d1578080610012565b3461021c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5760209061021361020e612a44565b612c8d565b90519015158152f35b5f80fd5b90503461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576102fa9181549161026760028460f81c1415612c28565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161781556102b66137f9565b7f01000000000000000000000000000000000000000000000000000000000000006102df613872565b94905082541617905551918291602083526020830190612a8a565b0390f35b823461021c57602090817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57610338612a44565b9083549061034c60028360f81c1415612c28565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80931617855561039b6137f9565b6103a483613ff0565b7f0000000000000000000000000000000000000000000000000000000000000000936103cf85612cfe565b916103da8351612b8b565b965f73ffffffffffffffffffffffffffffffffffffffff95868816915b865181101561055e578761040b8289612c14565b51165f528a610100808852865f20855f528852865f205490608091821c6104328585612c14565b5261043d8484612c14565b5161044e575b5050506001016103f7565b8a610459858c612c14565b51165f528852865f20855f52885261048c83885f20936fffffffffffffffffffffffffffffffff94858154169055612c14565b519082821161021c578a6104a0858c612c14565b51165f52610102895282885f209216908254901c03918211610532578c8b610521858d610519828f61051460019b9a6105289a906fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b612c14565b511693612c14565b5191613f03565b90508a8c80610443565b6011867f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b50917f01000000000000000000000000000000000000000000000000000000000000006102fa938b9695937f2193aa20a3717f5f4ac79482f4f553e5f0afe8f4e6ec3e3d1aa2e138adc4763f6105ca6105b68e612cfe565b6105d788519283928a84528a8401906128b2565b8281038c8401528c612a8a565b0390a282541617905551928284938452830190612a8a565b823461021c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576102fa9073ffffffffffffffffffffffffffffffffffffffff610640612a44565b165f9081526101026020908152908290205491516fffffffffffffffffffffffffffffffff8316815260809290921c908201529081906040820190565b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5760209073ffffffffffffffffffffffffffffffffffffffff600154169051908152f35b823461021c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57602090610709612a44565b610711612a67565b9073ffffffffffffffffffffffffffffffffffffffff8091165f5260038452825f2091165f528252805f20549051908152f35b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5761079c7f0000000000000000000000000000000000000000000000000000000000000000612cfe565b6107a68151612b8b565b5f5b8251811015610804578073ffffffffffffffffffffffffffffffffffffffff6107d360019386612c14565b51165f526101026020526fffffffffffffffffffffffffffffffff855f2054166107fd8285612c14565b52016107a8565b8351602080825281906102fa90820185612a8a565b90503461021c57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57610851612a44565b73ffffffffffffffffffffffffffffffffffffffff809116907f000000000000000000000000000000000000000000000000000000000000000016810361089d57602083516024358152f35b60249251917f88a50561000000000000000000000000000000000000000000000000000000008352820152fd5b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576102fa906109267f0000000000000000000000000000000000000000000000000000000000000000612cfe565b90519182916020835260208301906128b2565b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90503461021c57817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576109df612a44565b906109e982612c8d565b15610a04576020836109fd6024358561376d565b9051908152f35b73ffffffffffffffffffffffffffffffffffffffff60249351927faeabe7180000000000000000000000000000000000000000000000000000000084521690820152fd5b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57602090610101549051908152f35b823461021c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576020917f0100000000000000000000000000000000000000000000000000000000000000610ae0612a44565b610b47835491610af660028460f81c1415612c28565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80941617855560243590336132f3565b8254161790555160018152f35b90503461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5773ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016906020835180927f313ce56700000000000000000000000000000000000000000000000000000000825281855afa908115610c4f575f91610c10575b509160ff6060938251935f855260208501521690820152f35b90506020813d602011610c47575b81610c2b60209383612960565b8101031261021c57519160ff8316830361021c579160ff610bf7565b3d9150610c1e565b83513d5f823e3d90fd5b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5780515f600654610c9781612abd565b80845290602090600190818116908115610d285750600114610ccf575b6102fa8587610cc582880383612960565b519182918261284e565b60065f90815293507ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f5b838510610d1557505050508101602001610cc5826102fa610cb4565b8054868601840152938201938101610cf9565b6102fa97955086935060209250610cc59491507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001682840152151560051b8201019294610cb4565b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5760209073ffffffffffffffffffffffffffffffffffffffff5f54169051908152f35b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5760207f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25891610e3673ffffffffffffffffffffffffffffffffffffffff5f54163314612b0e565b610e3e6137f9565b60017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00609b541617609b5551338152a1005b823461021c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57602090610eab612a44565b73ffffffffffffffffffffffffffffffffffffffff915191807f0000000000000000000000000000000000000000000000000000000000000000169116148152f35b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90503461021c5760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57610f94612a44565b9160243591610fa1612a21565b6064359460843590811515820361021c57835492610fc560028560f81c1415612c28565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8095161785557f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff80921693828216850361114657881561111e5783611071928a925f146111145761106c8330613584565b613f03565b8787106110df5760209750907f0100000000000000000000000000000000000000000000000000000000000000939291865191888352888a84015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c873392a482541617905551908152f35b60448589898951927fbfee4ca00000000000000000000000000000000000000000000000000000000084528301526024820152fd5b61106c8333613584565b8688517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b602487868a51917f88a50561000000000000000000000000000000000000000000000000000000008352820152fd5b823461021c5760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576020906109fd6111b3612a44565b73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f205490565b823461021c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576102fa90611213612a44565b61121b612a67565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815261010060209081528482209290931681529082528290205491516fffffffffffffffffffffffffffffffff8316815260809290921c908201529081906040820190565b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5760209060ff609b541690519015158152f35b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576001549073ffffffffffffffffffffffffffffffffffffffff9283831691823303611368575050805f549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000928316175f5516600155005b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b90503461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5761141773ffffffffffffffffffffffffffffffffffffffff5f54163314612b0e565b609b549060ff821615611475577f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008516609b5551338152a1005b60649060208451917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57670de0b6b3a76400008151927fc6e6f59200000000000000000000000000000000000000000000000000000000845283015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa9081156115bf575f9161158a575b6020925051908152f35b90506020823d6020116115b7575b816115a560209383612960565b8101031261021c576020915190611580565b3d9150611598565b513d5f823e3d90fd5b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576020905173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b90503461021c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576116ca612a44565b6116d2612a67565b604435908354926116e960028560f81c1415612c28565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80951617855573ffffffffffffffffffffffffffffffffffffffff81165f526003602052855f20335f52602052855f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81036117b4575b602087877f010000000000000000000000000000000000000000000000000000000000000088610b478989896132f3565b8381106118015792602096959492610b47926117f4837f01000000000000000000000000000000000000000000000000000000000000009703338361307a565b9250929495965092611783565b60648660208951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c578051906060820182811067ffffffffffffffff82111761196b57815260028252803660208401376118bd82612bda565b73ffffffffffffffffffffffffffffffffffffffff90817f000000000000000000000000000000000000000000000000000000000000000016905282516001101561193f576102fa93507f00000000000000000000000000000000000000000000000000000000000000001681830152519182916020835260208301906128b2565b6032847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b6041847f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8260807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576119ca612a44565b906119d3612a67565b60443590606435938554926119ee60028560f81c1415612c28565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809516178755611a3e83612c8d565b15611d5b578015611d335773ffffffffffffffffffffffffffffffffffffffff8381169384611c9b57823403611c3e5782611a78916131eb565b96808810611c0957508216918215611bac57611a9b90611a966137f9565b613ff0565b83861161021c57865484871685821601858111611b8057918593917fff0000000000000000000000000000000000000000000000000000000000000060209a977f01000000000000000000000000000000000000000000000000000000000000009795169116178655815f5260028952865f20611b198982546132b9565b9055815f7fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8b8a518c8152a3865190815287898201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d59873392a482541617905551908152f35b6011897f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b60648860208851917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152fd5b88604491898951927fbc71f2ba0000000000000000000000000000000000000000000000000000000084528301526024820152fd5b60648960208951917f08c379a0000000000000000000000000000000000000000000000000000000008352820152600c60248201527f657468206d69736d6174636800000000000000000000000000000000000000006044820152fd5b86517f23b872dd0000000000000000000000000000000000000000000000000000000060208201523360248201523060448201528360648201526064815260a0810181811067ffffffffffffffff821117611d075791611d028592611a78948b52886140ae565b6131eb565b60418b7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b8685517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b84517faeabe71800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841681890152602490fd5b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c577effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60209254169051908152f35b823461021c576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57611e34612a44565b90611e5e7f0000000000000000000000000000000000000000000000000000000000000000612cfe565b91611e698351612b8b565b9173ffffffffffffffffffffffffffffffffffffffff918216915f5b8551811015611ec5578082611e9c60019389612c14565b51165f526101008452875f20855f528452875f205460801c611ebe8288612c14565b5201611e85565b8651602080825281906102fa90820188612a8a565b823461021c57807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57602090611f21611f17612a44565b602435903361307a565b5160018152f35b823461021c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c57611f60612a44565b9160243591821515830361021c5760443592831515840361021c5773ffffffffffffffffffffffffffffffffffffffff948591611fa1835f54163314612b0e565b1561207c571692831590811591612074575b5015612017575050805f549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216175f55600154166001555f80f35b90602060649251917f08c379a0000000000000000000000000000000000000000000000000000000008352820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905085611fb3565b9350505050167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b823461021c5760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c5767ffffffffffffffff91803583811161021c576120ff90369083016129db565b9260243581811161021c5761211790369084016129db565b91612120612a21565b9160019586549460ff8660a81c161595868097612720575b8015612707575b156126845786740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff8316178a55612642575b506121a060ff895460a81c1661219b81612d3b565b612d3b565b81518381116124e857600590806121b78354612abd565b94601f958681116125d7575b5060209086831160011461251f575f92612514575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828c1b9260031b1c19161781555b81519384116124e85761221d600654612abd565b90838211612487575b505060209183116001146123b35773ffffffffffffffffffffffffffffffffffffffff949392915f91836123a8575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82891b9260031b1c1916176006555b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8254161790556122de60ff865460a81c16612d3b565b167fffffffffffffffffffffffff00000000000000000000000000000000000000005f5416175f556123507f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612dc6565b61235657005b816020917fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff7f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498945416825551908152a1005b015190508880612255565b93929187917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082169060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f915f5b81811061246f5750968373ffffffffffffffffffffffffffffffffffffffff9810612438575b505050811b01600655612287565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905588808061242a565b8289015184558b959093019260209283019201612404565b60065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9084808701821c830193602088106124df575b01901c019089905b8281106124d45750612226565b5f81550189906124c7565b935082936124bf565b6041857f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b015190508b806121d8565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08d941691855f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0925f5b8181106125bf57508411612588575b505050811b018155612209565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558b808061257b565b8284015185558f96909401936020938401930161256c565b909150835f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db086808501861c82019260208610612639575b918e918695949301871c01915b82811061262b5750506121c3565b5f81558594508e910161261d565b92508192612610565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff16750101000000000000000000000000000000000000000017885588612186565b60848560208a51917f08c379a0000000000000000000000000000000000000000000000000000000008352820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b15801561213f57508860ff8260a01c161461213f565b508860ff8260a01c1610612138565b823461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c576102fa906109267f0000000000000000000000000000000000000000000000000000000000000000612cfe565b83903461021c575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261021c575f6005546127c881612abd565b80845290602090600190818116908115610d2857506001146127f5576102fa8587610cc582880383612960565b60055f90815293507f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db05b83851061283b57505050508101602001610cc5826102fa610cb4565b805486860184015293820193810161281f565b6020808252825181830181905293925f5b85811061289e575050507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6040809697860101520116010190565b81810183015184820160400152820161285f565b9081518082526020808093019301915f5b8281106128d1575050505090565b835173ffffffffffffffffffffffffffffffffffffffff16855293810193928101926001016128c3565b6040810190811067ffffffffffffffff82111761291757604052565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6080810190811067ffffffffffffffff82111761291757604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff82111761291757604052565b67ffffffffffffffff811161291757601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b81601f8201121561021c578035906129f2826129a1565b92612a006040519485612960565b8284526020838301011161021c57815f926020809301838601378301015290565b6044359073ffffffffffffffffffffffffffffffffffffffff8216820361021c57565b6004359073ffffffffffffffffffffffffffffffffffffffff8216820361021c57565b6024359073ffffffffffffffffffffffffffffffffffffffff8216820361021c57565b9081518082526020808093019301915f5b828110612aa9575050505090565b835185529381019392810192600101612a9b565b90600182811c92168015612b04575b6020831014612ad757565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691612acc565b15612b1557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b67ffffffffffffffff81116129175760051b60200190565b90612b9582612b73565b612ba26040519182612960565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0612bd08294612b73565b0190602036910137565b805115612be75760200190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b8051821015612be75760209160051b010190565b15612c2f57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116817f0000000000000000000000000000000000000000000000000000000000000000168114918215612cd657505090565b7f00000000000000000000000000000000000000000000000000000000000000001614919050565b9060405191612d0c836128fb565b600183526020368185013773ffffffffffffffffffffffffffffffffffffffff612d3584612bda565b91169052565b15612d4257565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b9073ffffffffffffffffffffffffffffffffffffffff91828116908115613074576040918251809581957fdd62ed3e0000000000000000000000000000000000000000000000000000000083523060048401521691826024830152602096879160449788915afa801561306a575f90613031575b6b7fffffffffffffffffffffff915010612e56575b5050505050565b8251905f808784017f095ea7b300000000000000000000000000000000000000000000000000000000948582528460248201528289820152888152612e9a81612944565b519082875af1612ea8613ebc565b81613001575b5015612fa557915f929183809386519089820193845260248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff88820152878152612efa81612944565b51925af1612f06613ebc565b81612f75575b5015612f19578080612e4f565b606492917f5361666520417070726f766500000000000000000000000000000000000000009151927f08c379a00000000000000000000000000000000000000000000000000000000084526004840152600c6024840152820152fd5b80518015925085908315612f8d575b5050505f612f0c565b612f9d9350820181019101613eeb565b5f8481612f84565b6064867f5361666520417070726f76650000000000000000000000000000000000000000878751927f08c379a00000000000000000000000000000000000000000000000000000000084526004840152600c6024840152820152fd5b80518015925088908315613019575b5050505f612eae565b6130299350820181019101613eeb565b5f8781613010565b508581813d8311613063575b6130478183612960565b8101031261021c576b7fffffffffffffffffffffff9051612e3a565b503d61303d565b84513d5f823e3d90fd5b50505050565b73ffffffffffffffffffffffffffffffffffffffff80911691821561316857169182156130e45760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526003825260405f20855f5282528060405f2055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081169116810361322f575090565b60209060445f9360405194859384927f6e553f6500000000000000000000000000000000000000000000000000000000845260048401523060248401525af19081156132ae575f9161327f575090565b90506020813d6020116132a6575b8161329a60209383612960565b8101031261021c575190565b3d915061328d565b6040513d5f823e3d90fd5b919082018092116132c657565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b909173ffffffffffffffffffffffffffffffffffffffff9182811692831561350057841693841561347c5784841461341e57613336916133316137f9565b61403f565b815f52600260205260405f205481811061339a57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f52600284520360405f2055845f5260405f2061338f8282546132b9565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff81169081156136e9576135ae90611a966137f9565b805f52600260205260405f2054828110613665578290825f5260026020520360405f20557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9182811161021c576004549280821681851603918183116132c6575f947fff000000000000000000000000000000000000000000000000000000000000006020937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9516911617600455604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116911681036137b1575090565b906020906024604051809481937fef8b30f700000000000000000000000000000000000000000000000000000000835260048301525afa9081156132ae575f9161327f575090565b60ff609b541661380557565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b919082039182116132c657565b565b7f00000000000000000000000000000000000000000000000000000000000000009061389d82612cfe565b6138a78151612b8b565b92815115613eb75761010180544314613e51574390557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6004541690604051906138ef826128fb565b600182525f5b60208110613e4057509061390b61398392612cfe565b61391482612bda565b5261391e81612bda565b506139487f0000000000000000000000000000000000000000000000000000000000000000612cfe565b906040519283927f54375c450000000000000000000000000000000000000000000000000000000084526060600485015260648401906128b2565b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc838203016024840152815180825260208201916020808360051b8301019401925f915b838310613db057505050505090805f9230604483015203818373ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165af180156132ae57613cb8575b505f5b8251811015613cb25773ffffffffffffffffffffffffffffffffffffffff613a4f8285612c14565b511690815f5261010260205260405f2060405190613a6c826128fb565b54906fffffffffffffffffffffffffffffffff8216815260208260801c9101526fffffffffffffffffffffffffffffffff81169073ffffffffffffffffffffffffffffffffffffffff613abf8488612c14565b511680613c305750613ad6475b8260801c90613863565b6fffffffffffffffffffffffffffffffff821615613c27575b85613bc7575b6fffffffffffffffffffffffffffffffff831161021c57613b189160801c6132b9565b926fffffffffffffffffffffffffffffffff841161021c57600193613bb6916fffffffffffffffffffffffffffffffff60405192613b55846128fb565b81861684521660208301525f5261010260205260405f20815160209092015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b613bc08288612c14565b5201613a27565b91670de0b6b3a7640000908184029184830414841517156132c6578615613bfa5786613bf49204906132b9565b91613af5565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b60019250613aef565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa80156132ae575f90613c7e575b613ad69150613acc565b506020813d602011613caa575b81613c9860209383612960565b8101031261021c57613ad69051613c74565b3d9150613c8b565b50509190565b3d805f833e613cc78183612960565b810160208282031261021c57815167ffffffffffffffff9283821161021c570181601f8201121561021c57805192602080613d0186612b73565b613d0e6040519182612960565b868152019460051b8301019183831161021c5760208101945b838610613d38575050505050613a24565b855183811161021c57820185603f8201121561021c57602081015190613d5d82612b73565b91613d6b6040519384612960565b8083526040602084019160051b8301019188831161021c57604001905b828210613da057505050815260209586019501613d27565b8151815260209182019101613d88565b9193955091937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0828203018352855190602080835192838152019201905f905b808210613e1257505050602080600192970193019301909286959492936139c7565b90919260208060019273ffffffffffffffffffffffffffffffffffffffff8751168152019401920190613df0565b8060606020809386010152016138f5565b5050915f5b8351811015613eb3578073ffffffffffffffffffffffffffffffffffffffff613e8160019387612c14565b51165f526101026020526fffffffffffffffffffffffffffffffff60405f205416613eac8285612c14565b5201613e56565b5090565b509190565b3d15613ee6573d90613ecd826129a1565b91613edb6040519384612960565b82523d5f602084013e565b606090565b9081602091031261021c5751801515810361021c5790565b8215613feb5773ffffffffffffffffffffffffffffffffffffffff9081169081613f9f5750505f80809381935af1613f39613ebc565b5015613f4157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b9261387093604051937fa9059cbb000000000000000000000000000000000000000000000000000000006020860152166024840152604483015260448252613fe682612944565b6140ae565b505050565b613ff8613872565b90805115613feb5773ffffffffffffffffffffffffffffffffffffffff83168015159081614034575b5061402b57505050565b613870926141cd565b90503014155f614021565b614047613872565b918151156130745773ffffffffffffffffffffffffffffffffffffffff90838383831680151590816140a3575b50614092575b50505083168015159081614034575061402b57505050565b61409b926141cd565b5f838361407a565b90503014155f614074565b6040516141189173ffffffffffffffffffffffffffffffffffffffff166140d4826128fb565b5f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af1614112613ebc565b916143be565b8051908282159283156141b5575b505050156141315750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6141c59350820181019101613eeb565b5f8281614126565b91909173ffffffffffffffffffffffffffffffffffffffff80821691821515806143b4575b15614387576142239095949573ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f205490565b905f958215965b815181101561437d578261423e8284612c14565b51169061424b8188612c14565b5191805f52610100926020848152604090815f208a5f5281526fffffffffffffffffffffffffffffffff958d87845f2054168015614375575b858114801561436d575b61435d5761429c9086613863565b90818c02918c83041417156132c657670de0b6b3a76400006142d491875f528385528d865f20905f52855204845f205460801c6132b9565b9487851161021c5787861161021c5787614357966001998651976142f7896128fb565b16875216838601525f528152815f20908a5f52525f20815160209092015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b0161422a565b5050505050505060019150614357565b50851561428e565b506001614284565b5050505050509050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b50308314156141f2565b9192901561443957508151156143d2575090565b3b156143db5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b82519091501561444c5750805190602001fd5b614482906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526004830161284e565b0390fdfea2646970667358221220ea5f206d494c932b845a9bb9aa9a5aed5a60d480d0dacae0ebdec8221f7215f764736f6c634300081800330000000000000000000000004f827a63755855cdf3e8f3bcd20265c833f150330000000000000000000000004655ce3d625a63d30ba704087e52b4c31e38188b