0 txs
46 calls
constructor
constructor(address _fToken)
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)
DOMAIN_SEPARATOR
viewfunction DOMAIN_SEPARATOR() view returns (bytes32)
eip712Domain
viewfunction eip712Domain() view returns (bytes1 fields, string name, string version, uint256 chainId, address verifyingContract, bytes32 salt, uint256[] extensions)
exchangeRate
viewfunction exchangeRate() view returns (uint256)
FLUID
viewfunction FLUID() view returns (address)
getRewardTokens
viewfunction getRewardTokens() view returns (address[] rewardTokens)
getTokensIn
viewfunction getTokensIn() view returns (address[] res)
getTokensOut
viewfunction getTokensOut() view returns (address[] res)
INST
viewfunction INST() view returns (address)
INSTA_MERKLE
viewfunction INSTA_MERKLE() view returns (address)
isValidTokenIn
viewfunction isValidTokenIn(address token) view returns (bool)
isValidTokenOut
viewfunction isValidTokenOut(address token) view returns (bool)
lastRewardBlock
viewfunction lastRewardBlock() view returns (uint256)
LIQUIDITY
viewfunction LIQUIDITY() view returns (address)
name
viewfunction name() view returns (string)
nonces
viewfunction nonces(address owner) view returns (uint256)
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)
stakingRewards
viewfunction stakingRewards() view returns (address)
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)
claimMerkle
nonpayablefunction claimMerkle(address recipient_, uint256 cumulativeAmount_, uint8 positionType_, bytes32 positionId_, uint256 cycle_, bytes32[] merkleProof_, bytes metadata_)
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)
pause
nonpayablefunction pause()
permit
nonpayablefunction permit(address owner, address spender, uint256 value, uint256 deadline, uint8 v, bytes32 r, bytes32 s)
redeem
nonpayablefunction redeem(address receiver, uint256 amountSharesToRedeem, address tokenOut, uint256 minTokenOut, bool burnFromInternalBalance) returns (uint256 amountTokenOut)
rewardIndexesCurrent
nonpayablefunction rewardIndexesCurrent() returns (uint256[] indexes)
setStakingRewards
nonpayablefunction setStakingRewards(address _newStakingRewards)
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)
EIP712DomainChanged
event EIP712DomainChanged()
Initialized
event Initialized(uint8 version)
NewStakingRewards
event NewStakingRewards(address newStakingRewards)
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
0x60e0604090808252346200027257620000329062005b46803803809162000027828562000288565b8339810190620002c0565b815163313ce56760e01b81526020916001600160a01b038116918381600481865afa9081156200027e575f916200023c575b5060805261013460ff19815416905560a05260015460ff8160a81c16620001e85760ff808260a01c1603620001a6575b50600146036200019257816004918451928380926338d52e0f60e01b82525afa91821562000188575f9262000154575b505060c052516158649081620002e28239608051816129fc015260a0518181816113ff01528181611520015281816118b70152818161199401528181611fcd015281816128af01528181612d150152818161382101528181613caa01528181614a6e0152614afa015260c051818181610da101528181611fee01528181612967015281816137ef0152613cda0152f35b620001789250803d1062000180575b6200016f818362000288565b810190620002c0565b5f80620000c4565b503d62000163565b83513d5f823e3d90fd5b634e487b7160e01b5f52600160045260245ffd5b60ff60a01b191660ff60a01b17600155825160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498908390a15f62000094565b835162461bcd60e51b815260048101849052602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b6064820152608490fd5b90508381813d831162000276575b62000256818362000288565b8101031262000272575160ff8116810362000272575f62000064565b5f80fd5b503d6200024a565b85513d5f823e3d90fd5b601f909101601f19168101906001600160401b03821190821017620002ac57604052565b634e487b7160e01b5f52604160045260245ffd5b908160209103126200027257516001600160a01b038116810362000272579056fe608080604052600436101561001c575b50361561001a575f80fd5b005b5f9060e05f35811c91826306fdde031461360c57508163071bc3c914612c31578163078dfbe71461348b578163095ea7b31461343c578163128fced114613392578163155449a7146131a757816318160ddd1461314a57816320e8c56514612c36578163213cae6314612c3157816323b872dd14612a6d5781632861c7d114612a20578163313ce567146129c45781633644e5151461298b57816338d52e0f1461291c5781633ba0b9a91461282e5781633f4ba83a146127205781634cd88b7614611c335781634e71e0c814611b2b5781635c975abb14611ae95781635cbadbe414611a3057816364b87a70146119dd5781636fb83a57146117e257816370a0823114611780578163769f8e5d1461142357816376d5de85146113b4578163784367d6146102855781637ecebe00146113515781638456cb591461129f57816384b0196e14610fc15781638da5cb5b14610f7057816395d89b4114610e55578163a40bee5014610d4a578163a9059cbb14610c75578163a9f8d18114610c38578163b8f82b2614610b9c578163c4f59f9b14610b4e578163cbe52ae314610aaa578163d505accf1461085e57508063d95bd6921461036b578063da88ecb4146107a7578063dd62ed3e1461072e578063e30c3978146106dc578063ea64a8201461064c578063ef5cfb8c14610370578063f6e2aa3b1461036b578063f8b2f9911461028a578063fa5a4f06146102855763fc21baa10361000f573461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576020604051737060fe0dd3e31be01efac6b28c8d38018fd163b08152f35b80fd5b613a1b565b503461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576103676004546102cf60028260f81c1415613c2a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8092161760045561031f614b6f565b7f0100000000000000000000000000000000000000000000000000000000000000610348614bda565b92905060045416176004556040519182916020835260208301906138cd565b0390f35b613a66565b5034610282576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261064857906103aa613887565b600454916103be60028460f81c1415613c2a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8094161760045561040e614b6f565b610417826151e9565b61041f614f1b565b6104298151613ba1565b94829073ffffffffffffffffffffffffffffffffffffffff93848616925b84518110156105b4578561045b8287613b28565b5116825261019980845260408320855f52845260405f205490608091821c610483848d613b28565b5261048e838c613b28565b5161049e575b5050600101610447565b876104a98489613b28565b51168452845260408320855f52845260405f20906fffffffffffffffffffffffffffffffff918281541690556104df838c613b28565b51908282116105b057886104f3858a613b28565b5116855261019b865282604086209216908254901c03918211610583576001929161055991906fffffffffffffffffffffffffffffffff7fffffffffffffffffffffffffffffffff0000000000000000000000000000000083549260801b169116179055565b61057c8a89610575848b61056d828d613b28565b511693613b28565b5191614141565b905f610494565b6024847f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b5f80fd5b88837f01000000000000000000000000000000000000000000000000000000000000008a877f2193aa20a3717f5f4ac79482f4f553e5f0afe8f4e6ec3e3d1aa2e138adc4763f61061c610605614f1b565b61062960405192839260408452604084019061372c565b82810389840152896138cd565b0390a260045416176004556103676040519282849384528301906138cd565b5080fd5b50346102825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825760406103679173ffffffffffffffffffffffffffffffffffffffff61069f613887565b16815261019b602090815291902054604080516fffffffffffffffffffffffffffffffff8316815260809290921c92820192909252918291820190565b503461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257602073ffffffffffffffffffffffffffffffffffffffff60015416604051908152f35b50346102825760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257610766613887565b60406107706138aa565b9273ffffffffffffffffffffffffffffffffffffffff809316815260036020522091165f52602052602060405f2054604051908152f35b503461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576107de614f1b565b6107e88151613ba1565b91805b8251811015610848578073ffffffffffffffffffffffffffffffffffffffff61081660019386613b28565b5116835261019b6020526fffffffffffffffffffffffffffffffff6040842054166108418287613b28565b52016107eb565b60405160208082528190610367908201876138cd565b90503461064857807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261064857610896613887565b9061089f6138aa565b604435916084359060643560ff831683036105b057804211610a4c5773ffffffffffffffffffffffffffffffffffffffff9182871693848952609f60205260408920918254926001840190556040519360208501937f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98552876040870152868916606087015289608087015260a086015260c085015260c0845283019183831067ffffffffffffffff841117610a1f576109af936109a793604052519020610965614f54565b90604051917f190100000000000000000000000000000000000000000000000000000000000083526002830152602282015260c43591604260a4359220614fca565b919091615052565b16036109c1576109be92613d00565b80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601e60248201527f45524332305065726d69743a20696e76616c6964207369676e617475726500006044820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332305065726d69743a206578706972656420646561646c696e650000006044820152fd5b82346102825760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257610ae2613887565b610aeb81613c8f565b15610b0757610aff60209160243590614ae3565b604051908152f35b60249073ffffffffffffffffffffffffffffffffffffffff604051917f88a50561000000000000000000000000000000000000000000000000000000008352166004820152fd5b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257610367610b88614f1b565b60405191829160208352602083019061372c565b82346102825760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257610bd4613887565b610bdd81613c8f565b15610bf157610aff60209160243590614a57565b60249073ffffffffffffffffffffffffffffffffffffffff604051917faeabe718000000000000000000000000000000000000000000000000000000008352166004820152fd5b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257602061019a54604051908152f35b82346102825760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282577f0100000000000000000000000000000000000000000000000000000000000000610cce613887565b610d3760045491610ce560028460f81c1415613c2a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809416176004556024359033614254565b6004541617600455602060405160018152f35b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576040517f313ce5670000000000000000000000000000000000000000000000000000000081527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16602082600481845afa918215610e4a578392610e07575b60608460ff85856040519384526020840152166040820152f35b9091506020813d602011610e42575b81610e236020938361394c565b81010312610e3e575160ff81168103610e3e579060ff610ded565b8280fd5b3d9150610e16565b6040513d85823e3d90fd5b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576040516006545f82610e9583613ab2565b91828252602093600190856001821691825f14610f32575050600114610ed7575b50610ec39250038361394c565b6103676040519282849384528301906136d0565b84915060065f527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f905f915b858310610f1a575050610ec3935082010185610eb6565b80548389018501528794508693909201918101610f03565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001685820152610ec395151560051b8501019250879150610eb69050565b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825773ffffffffffffffffffffffffffffffffffffffff6020915416604051908152f35b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257606b541580611295575b15611237576040515f91606d549161101183613ab2565b80825281602095600195876001821691825f146111fc5750506001146111a0575b61103e9250038261394c565b60405192835f606e549261105184613ab2565b93848452886001821691825f14611162575050600114611107575b506110799250038461394c565b604051908482019382851067ffffffffffffffff861117610a1f576110da6110e8926103679660405285855288604051998a997f0f000000000000000000000000000000000000000000000000000000000000008b528a01528801906136d0565b9086820360408801526136d0565b9146606086015230608086015260a085015283820360c08501526138cd565b879150606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a905f915b85831061114a57505061107993508201018861106c565b8054838a018501528894508993909201918101611133565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168582015261107995151560051b85010192508a915061106c9050565b5050606d5f5281857f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8865f915b8583106111e357505061103e9350820101611032565b80919294505483858801015201910186908685936111cd565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00168482015261103e94151560051b84010191506110329050565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4549503731323a20556e696e697469616c697a656400000000000000000000006044820152fd5b50606c5415610ffa565b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576112f073ffffffffffffffffffffffffffffffffffffffff8254163314613b3c565b6112f8614b6f565b61013460017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff008254161790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a2586020604051338152a180f35b82346102825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257604060209173ffffffffffffffffffffffffffffffffffffffff6113a3613887565b168152609f83522054604051908152f35b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b82346102825760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825761145b613887565b90602435916044359273ffffffffffffffffffffffffffffffffffffffff808516928386036105b05760643560843580151581036105b0576114f7600454986114aa60028b60f81c1415613c2a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff809b1617600455613c8f565b1561174f578415611725571561171657611511843061486e565b8261020054168061169d575b507f00000000000000000000000000000000000000000000000000000000000000009583871686810361160257505061155884838198614141565b8086106115cb5750917f0100000000000000000000000000000000000000000000000000000000000000939160209693604051928352868884015216907faee47cdf925cf525fdae94f9777ee5a06cac37e1c41220d0a8a89ed154f62d1c60403392a46004541617600455604051908152f35b85604491604051917fbfee4ca000000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b819297506020906064604051809481937fba0876520000000000000000000000000000000000000000000000000000000083528a600484015289891660248401523060448401525af1918215611691579161165f575b5094611558565b90506020813d602011611689575b8161167a6020938361394c565b810103126105b0575187611658565b3d915061166d565b604051903d90823e3d90fd5b803b15611712578680916024604051809481937f2e1a7d4d0000000000000000000000000000000000000000000000000000000083528a60048401525af18015611707579087916116ef575b5061151d565b6116f890613900565b6117035785886116e9565b8580fd5b6040513d89823e3d90fd5b8680fd5b611720843361486e565b611511565b60046040517fc3d83b07000000000000000000000000000000000000000000000000000000008152fd5b602486604051907f88a505610000000000000000000000000000000000000000000000000000000082526004820152fd5b82346102825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576020610aff6117bd613887565b73ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f205490565b82346102825760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825761181a613887565b73ffffffffffffffffffffffffffffffffffffffff61183d818454163314613b3c565b82610200918083541680611948575b50831692836118ae575b507f360f044f758e336e2b8b966565ece96a2a9f3160d0cb68e5d9c2b9fb5f346b0a60208484817fffffffffffffffffffffffff0000000000000000000000000000000000000000825416179055604051908152a180f35b6118e2906118dd7f00000000000000000000000000000000000000000000000000000000000000009182614570565b613efa565b833b1561064857604051907fa694fc3a0000000000000000000000000000000000000000000000000000000082526004820152818160248183885af1801561193d57156118565761193290613900565b610e3e578284611856565b6040513d84823e3d90fd5b803b15610e3e576040517fe9fad8ee000000000000000000000000000000000000000000000000000000008152838160048183865af19081156119d25784916119be575b50506119b8907f0000000000000000000000000000000000000000000000000000000000000000614768565b8561184c565b6119c790613900565b610e3e57828761198c565b6040513d86823e3d90fd5b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257602073ffffffffffffffffffffffffffffffffffffffff6102005416604051908152f35b82346102825760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257611a68613887565b6040611a726138aa565b9273ffffffffffffffffffffffffffffffffffffffff80931681526101996020522091165f5260205261036760405f205460405191816fffffffffffffffffffffffffffffffff849360801c9116839060209093929360408301946fffffffffffffffffffffffffffffffff809216845216910152565b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257602060ff61013454166040519015158152f35b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825760015473ffffffffffffffffffffffffffffffffffffffff90818116803303611bd5578084549384167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08680a37fffffffffffffffffffffffff00000000000000000000000000000000000000008093161783551660015580f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c657220213d2070656e64696e67206f776e65726044820152fd5b82346102825760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825760043567ffffffffffffffff811161064857611c839036906004016139fd565b60243567ffffffffffffffff8111610e3e57611ca39036906004016139fd565b916001549060ff8260a81c161591828093612710575b80156126f6575b156126725782740100000000000000000000000000000000000000007fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff83161760015561262f575b50611d2c60ff60015460a81c16611d1e816144e5565b611d27816144e5565b6144e5565b825167ffffffffffffffff811161249b57611d48600554613ab2565b601f811161258e575b50806020601f82116001146124d35783916124c8575b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176005555b835167ffffffffffffffff811161249b57611db5600654613ab2565b601f81116123fa575b50602094601f821160011461233c579482939495829392612331575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c1916176006555b7f01000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600454161760045560405191611e6383613914565b600183527f31000000000000000000000000000000000000000000000000000000000000006020840152611ea260ff60015460a81c16611d27816144e5565b835167ffffffffffffffff811161219a57611ebe606d54613ab2565b601f8111612290575b50602094601f82116001146121d25794839495829394926121c7575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617606d555b825167ffffffffffffffff811161219a57611f32606e54613ab2565b601f8111612137575b506020601f821160011461207a5783948293949261206f575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c191617606e555b81606b5581606c55611fa060ff60015460a81c166144e5565b337fffffffffffffffffffffffff00000000000000000000000000000000000000008354161782556120127f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000614570565b6120195780f35b7fffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffffff600154166001557f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498602060405160018152a180f35b015190508480611f54565b606e84527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316855b81811061211f575095836001959697106120e8575b505050811b01606e55611f87565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558480806120da565b9192602060018192868b0151815501940192016120c5565b606e84527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a601f830160051c81019160208410612190575b601f0160051c01905b8181106121855750611f3b565b848155600101612178565b909150819061216f565b6024837f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b015190508580611ee3565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695606d85527f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d891855b88811061227857508360019596979810612241575b505050811b01606d55611f16565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c19169055858080612233565b9192602060018192868501518155019401920161221e565b606d8452601f820160051c7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8019060208310612309575b601f0160051c7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d801905b8181106122fe5750611ec7565b8481556001016122f1565b7f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d891506122c7565b015190508580611dda565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0821695600684527ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f91845b8881106123e2575083600195969798106123ab575b505050811b01600655611e0d565b01517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c1916905585808061239d565b91926020600181928685015181550194019201612388565b60068352601f820160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f019060208310612473575b601f0160051c7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f01905b8181106124685750611dbe565b83815560010161245b565b7ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f9150612431565b6024827f4e487b710000000000000000000000000000000000000000000000000000000081526041600452fd5b905084015186611d67565b600584527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016845b8181106125765750908360019493921061253f575b5050811b01600555611d99565b8601517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690558680612532565b9192602060018192868b01518155019401920161251d565b60058352601f820160051c7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0019060208310612607575b601f0160051c7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db001905b8181106125fc5750611d51565b8381556001016125ef565b7f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db091506125c5565b7fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff1675010100000000000000000000000000000000000000001760015584611d08565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201527f647920696e697469616c697a65640000000000000000000000000000000000006064820152fd5b50303b158015611cc05750600160ff8260a01c1614611cc0565b50600160ff8260a01c1610611cb9565b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825761277173ffffffffffffffffffffffffffffffffffffffff8254163314613b3c565b610134805460ff8116156127d0577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6020604051338152a180f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601460248201527f5061757361626c653a206e6f74207061757365640000000000000000000000006044820152fd5b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257604051907f07a2d13a000000000000000000000000000000000000000000000000000000008252670de0b6b3a7640000600483015260208260248173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000165afa90811561169157906128e9575b602090604051908152f35b506020813d602011612914575b816129036020938361394c565b810103126105b057602090516128de565b3d91506128f6565b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257602060405173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc360112610282576020610aff614f54565b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257602060405160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825760206040517352aa899454998be5b000ad077a46bbe360f4e4978152f35b82346102825760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257612aa5613887565b90612aae6138aa565b60443590604060045493612ac860028660f81c1415613c2a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8096161760045573ffffffffffffffffffffffffffffffffffffffff86168152600360205220335f5260205260405f20547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8103612b8f575b5090610d37917f010000000000000000000000000000000000000000000000000000000000000094614254565b9190818310612bd3577f010000000000000000000000000000000000000000000000000000000000000094612bca83610d3795033383613d00565b94509091612b62565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f45524332303a20696e73756666696369656e7420616c6c6f77616e63650000006044820152fd5b613775565b8260807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc36011261028257612c69613887565b612c716138aa565b906044918235926064359360045493612c9060028660f81c1415613c2a565b7f02000000000000000000000000000000000000000000000000000000000000007effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff80961617600455612ce184613c8f565b156131035781156130d95773ffffffffffffffffffffffffffffffffffffffff938416938461307157823403613013575b877f00000000000000000000000000000000000000000000000000000000000000008216868103612f8557505082965b8882610200541680612f23575b5050808810612eed57508116928315612e8f5750612d7490612d6f614b6f565b6151e9565b8385116105b05760045484861685821601858111612e6257926020978193927fff00000000000000000000000000000000000000000000000000000000000000887f0100000000000000000000000000000000000000000000000000000000000000999897169116176004558181526002895260408120612df6898254614247565b90557fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef896040518a8152a360405190815285878201527f5fe47ed6d4225326d3303476197d782ded5a4e9c14f479dc9ec4992af4e85d5960403392a46004541617600455604051908152f35b6024887f4e487b710000000000000000000000000000000000000000000000000000000081526011600452fd5b6064907f45524332303a206d696e7420746f20746865207a65726f206164647265737300604051917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152601f6024840152820152fd5b878591604051917fbc71f2ba00000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b803b156106485781809160248c60405194859384927fa694fc3a00000000000000000000000000000000000000000000000000000000845260048401525af1801561193d5715612d4f57612f7690613900565b612f8157888a612d4f565b8880fd5b60209086604051809481937f6e553f650000000000000000000000000000000000000000000000000000000083528960048401523060248401525af1908115613008578991612fd6575b5096612d42565b90506020813d602011613000575b81612ff16020938361394c565b810103126105b0575189612fcf565b3d9150612fe4565b6040513d8b823e3d90fd5b6064847f657468206d69736d617463680000000000000000000000000000000000000000604051917f08c379a000000000000000000000000000000000000000000000000000000000835260206004840152600c6024840152820152fd5b6040517f23b872dd00000000000000000000000000000000000000000000000000000000602082015233602482015230858201528360648201526064815260a081019080821067ffffffffffffffff831117610a1f576130d491604052866152a7565b612d12565b60046040517fa907f2f0000000000000000000000000000000000000000000000000000000008152fd5b60248473ffffffffffffffffffffffffffffffffffffffff604051917faeabe718000000000000000000000000000000000000000000000000000000008352166004820152fd5b823461028257807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126102825760207effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60045416604051908152f35b82346105b057817ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b0576131de613887565b60443560ff81168091036105b05767ffffffffffffffff60a4358181116105b057366023820112156105b0578060040135958287116105b0578660051b9236602485850101116105b05760c4359081116105b057366023820112156105b0576132519036906024816004013591016139c7565b61327373ffffffffffffffffffffffffffffffffffffffff5f54163314613b3c565b61327b613e71565b97737060fe0dd3e31be01efac6b28c8d38018fd163b092833b156105b057604051967fbe5013dc000000000000000000000000000000000000000000000000000000008852306004890152602435602489015260448801526064356064880152608435608488015260a48701528060e48701527f07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61010491116105b057856133438195935f979384899560248698018387013784016101008582030160c486015201906136d0565b03925af180156133875761336e575b506133686109be9293613363613e71565b613bf0565b90613f92565b6109be925061337c90613900565b6133685f9250613352565b6040513d5f823e3d90fd5b346105b0576020807ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b0576133ca613887565b6133d2614f1b565b916133dd8351613ba1565b905f9073ffffffffffffffffffffffffffffffffffffffff809416915b855181101561084857808561341160019389613b28565b51165f52610199835260405f20845f52835260405f205460801c6134358287613b28565b52016133fa565b346105b05760407ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b057613480613476613887565b6024359033613d00565b602060405160018152f35b346105b05760607ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b0576134c2613887565b60243580151581036105b0576044359081151582036105b05773ffffffffffffffffffffffffffffffffffffffff928391613501835f54163314613b3c565b156135db5716908115908115916135d3575b501561357557805f549283167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a37fffffffffffffffffffffffff0000000000000000000000000000000000000000809216175f55600154166001555f80f35b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601560248201527f4f776e61626c653a207a65726f206164647265737300000000000000000000006044820152fd5b905083613513565b915050167fffffffffffffffffffffffff000000000000000000000000000000000000000060015416176001555f80f35b346105b0575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b0576005545f8261364883613ab2565b91828252602093600190856001821691825f14610f325750506001146136755750610ec39250038361394c565b84915060055f527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0905f915b8583106136b8575050610ec3935082010185610eb6565b805483890185015287945086939092019181016136a1565b91908251928382525f5b8481106137185750507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f845f6020809697860101520116010190565b6020818301810151848301820152016136da565b9081518082526020808093019301915f5b82811061374b575050505090565b835173ffffffffffffffffffffffffffffffffffffffff168552938101939281019260010161373d565b346105b0575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b0576040516060810181811067ffffffffffffffff821117610a1f576040526002815260403660208301376137d581613b1b565b9073ffffffffffffffffffffffffffffffffffffffff91827f000000000000000000000000000000000000000000000000000000000000000016905280516001101561385a57610367917f000000000000000000000000000000000000000000000000000000000000000016604082015260405191829160208352602083019061372c565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b6004359073ffffffffffffffffffffffffffffffffffffffff821682036105b057565b6024359073ffffffffffffffffffffffffffffffffffffffff821682036105b057565b9081518082526020808093019301915f5b8281106138ec575050505090565b8351855293810193928101926001016138de565b67ffffffffffffffff8111610a1f57604052565b6040810190811067ffffffffffffffff821117610a1f57604052565b6080810190811067ffffffffffffffff821117610a1f57604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610a1f57604052565b67ffffffffffffffff8111610a1f57601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b9291926139d38261398d565b916139e1604051938461394c565b8294818452818301116105b0578281602093845f960137010152565b9080601f830112156105b057816020613a18933591016139c7565b90565b346105b05760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b0576020613a5c613a57613887565b613c8f565b6040519015158152f35b346105b0575f7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126105b0576020604051736f40d4a6237c257fff2db00fa0510deeecd303eb8152f35b90600182811c92168015613af9575b6020831014613acc57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691613ac1565b67ffffffffffffffff8111610a1f5760051b60200190565b80511561385a5760200190565b805182101561385a5760209160051b010190565b15613b4357565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602060248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152fd5b90613bab82613b03565b613bb8604051918261394c565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0613be68294613b03565b0190602036910137565b91908203918211613bfd57565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b15613c3157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152fd5b73ffffffffffffffffffffffffffffffffffffffff809116817f0000000000000000000000000000000000000000000000000000000000000000168114918215613cd857505090565b7f00000000000000000000000000000000000000000000000000000000000000001614919050565b73ffffffffffffffffffffffffffffffffffffffff809116918215613dee5716918215613d6a5760207f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591835f526003825260405f20855f5282528060405f2055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f20616464726560448201527f73730000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a0000000000000000000000000000000000000000000000000000000008152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460448201527f72657373000000000000000000000000000000000000000000000000000000006064820152fd5b6040517f70a08231000000000000000000000000000000000000000000000000000000008152306004820152602081602481736f40d4a6237c257fff2db00fa0510deeecd303eb5afa908115613387575f91613ecb575090565b90506020813d602011613ef2575b81613ee66020938361394c565b810103126105b0575190565b3d9150613ed9565b73ffffffffffffffffffffffffffffffffffffffff1680613f1a57504790565b6020602491604051928380927f70a082310000000000000000000000000000000000000000000000000000000082523060048301525afa908115613387575f91613ecb575b5090565b3d15613f8d573d90613f748261398d565b91613f82604051938461394c565b82523d5f602084013e565b606090565b811561413d57614088905f806040519261402b84613fff602098898301947fa9059cbb000000000000000000000000000000000000000000000000000000008652602484016020909392919373ffffffffffffffffffffffffffffffffffffffff60408201951681520152565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810186528561394c565b6040519361403885613914565b8685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152519082736f40d4a6237c257fff2db00fa0510deeecd303eb5af1614082613f63565b9061571d565b805190828215928315614125575b505050156140a15750565b608490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f742073756363656564000000000000000000000000000000000000000000006064820152fd5b6141359350820181019101614750565b5f8281614096565b5050565b82156142425773ffffffffffffffffffffffffffffffffffffffff16806141d957505f80809381935af1614173613f63565b501561417b57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f6574682073656e64206661696c656400000000000000000000000000000000006044820152fd5b6040517fa9059cbb00000000000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff9290921660248301526044808301939093529181526142409161423b60648361394c565b6152a7565b565b505050565b91908201809211613bfd57565b909173ffffffffffffffffffffffffffffffffffffffff918281169283156144615784169384156143dd5784841461437f5761429791614292614b6f565b615238565b815f52600260205260405f20548181106142fb57817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f52600284520360405f2055845f5260405f206142f0828254614247565b9055604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e742065786365656473206260448201527f616c616e636500000000000000000000000000000000000000000000000000006064820152fd5b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601760248201527f45524332303a207472616e7366657220746f2073656c660000000000000000006044820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201527f65737300000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f20616460448201527f64726573730000000000000000000000000000000000000000000000000000006064820152fd5b156144ec57565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602b60248201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960448201527f6e697469616c697a696e670000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff918282169182156145f35760405180947fdd62ed3e00000000000000000000000000000000000000000000000000000000825230600483015283169384602483015281604460209788935afa8015613387575f90614717575b6b7fffffffffffffffffffffff9150106145f9575b50505050565b5f92614606849383614768565b82604051868101927f095ea7b300000000000000000000000000000000000000000000000000000000845260248201527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60448201526044815261466981613930565b51925af1614675613f63565b816146e7575b5015614689578080806145f3565b606490604051907f08c379a00000000000000000000000000000000000000000000000000000000082526004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b805180159250839083156146ff575b5050505f61467b565b61470f9350820181019101614750565b5f82816146f6565b508481813d8311614749575b61472d818361394c565b810103126105b0576b7fffffffffffffffffffffff90516145de565b503d614723565b908160209103126105b0575180151581036105b05790565b5f919082918260405173ffffffffffffffffffffffffffffffffffffffff60208201937f095ea7b3000000000000000000000000000000000000000000000000000000008552166024820152816044820152604481526147c781613930565b51925af16147d3613f63565b8161483f575b50156147e157565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600c60248201527f5361666520417070726f766500000000000000000000000000000000000000006044820152fd5b8051801592508215614854575b50505f6147d9565b6148679250602080918301019101614750565b5f8061484c565b73ffffffffffffffffffffffffffffffffffffffff81169081156149d35761489890612d6f614b6f565b805f52600260205260405f205482811061494f578290825f5260026020520360405f20557effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff918281116105b057600454928082168185160391818311613bfd575f947fff000000000000000000000000000000000000000000000000000000000000006020937fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9516911617600455604051908152a3565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60448201527f63650000000000000000000000000000000000000000000000000000000000006064820152fd5b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360448201527f73000000000000000000000000000000000000000000000000000000000000006064820152fd5b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811691168103614a9b575090565b906020906024604051809481937fef8b30f700000000000000000000000000000000000000000000000000000000835260048301525afa908115613387575f91613ecb575090565b73ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811691168103614b27575090565b906020906024604051809481937f4cdad50600000000000000000000000000000000000000000000000000000000835260048301525afa908115613387575f91613ecb575090565b60ff6101345416614b7c57565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601060248201527f5061757361626c653a20706175736564000000000000000000000000000000006044820152fd5b614be2614f1b565b90614bed8251613ba1565b9082515f9015614f185761019a80544314614eb65743905560047effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff600454169373ffffffffffffffffffffffffffffffffffffffff610200541680614e60575b50825b8651811015614e595773ffffffffffffffffffffffffffffffffffffffff614c778289613b28565b51169081855261019b918260205260409081872091805192614c9884613914565b546fffffffffffffffffffffffffffffffff81169384815260208260801c91015283614ceb8d61336373ffffffffffffffffffffffffffffffffffffffff614ce48a8760801c94613b28565b5116613efa565b9015614e50575b8b614dc4575b6fffffffffffffffffffffffffffffffff85116105b057614d1b9160801c614247565b906fffffffffffffffffffffffffffffffff82116105b057600195614db3936fffffffffffffffffffffffffffffffff835194614d5786613914565b81881686521660208501528a526020528820815160209092015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b614dbd8285613b28565b5201614c4f565b93670de0b6b3a76400008581810204811486151715614e24578c15614df857908c614df29287020490614247565b93614cf8565b60128a7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b60118a7f4e487b71000000000000000000000000000000000000000000000000000000005f525260245ffd5b60019450614cf2565b5093505050565b803b156105b0575f80916004604051809481937f3d18b9120000000000000000000000000000000000000000000000000000000083525af180156133875715614c4c57614eae919350613900565b5f915f614c4c565b5050905f5b8351811015613f5f578073ffffffffffffffffffffffffffffffffffffffff614ee660019387613b28565b51165f5261019b6020526fffffffffffffffffffffffffffffffff60405f205416614f118285613b28565b5201614ebb565b50565b60405190614f2882613914565b6001825260203681840137736f40d4a6237c257fff2db00fa0510deeecd303eb614f5183613b1b565b52565b614f5c615311565b614f64615431565b6040519060208201927f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f8452604083015260608201524660808201523060a082015260a0815260c0810181811067ffffffffffffffff821117610a1f5760405251902090565b7f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411615047576020935f9360ff60809460405194855216868401526040830152606082015282805260015afa15613387575f5173ffffffffffffffffffffffffffffffffffffffff81161561503f57905f90565b505f90600190565b505050505f90600390565b60058110156151bc57806150635750565b600181036150c95760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152fd5b6002810361512f5760646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152fd5b60031461513857565b60846040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c60448201527f75650000000000000000000000000000000000000000000000000000000000006064820152fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b6151f1614bda565b908051156142425773ffffffffffffffffffffffffffffffffffffffff8316801515908161522d575b5061522457505050565b6142409261552c565b90503014155f61521a565b615240614bda565b918151156145f35773ffffffffffffffffffffffffffffffffffffffff908383838316801515908161529c575b5061528b575b5050508316801515908161522d575061522457505050565b6152949261552c565b5f8383615273565b90503014155f61526d565b6040516140889173ffffffffffffffffffffffffffffffffffffffff166152cd82613914565b5f806020958685527f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656487860152868151910182855af161530b613f63565b916157fe565b604051606d54905f8161532384613ab2565b918282526020808301956001906001811690815f146153f15750600114615392575b50506153539250038261394c565b5190811561535f572090565b5050606b54801561536d5790565b507fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47090565b915092606d5f527f5006b838207c6a9ae9b84d68f467dd4bb5c305fbfb6b04eab8faaabeec1e18d8935f925b8284106153d957506153539450505081016020015f80615345565b855487850183015294850194869450928101926153be565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001688525061535394151560051b840160200192505f9150819050615345565b604051606e54905f8161544384613ab2565b918282526020808301956001906001811690815f146154ec575060011461548d575b50506154739250038261394c565b5190811561547f572090565b5050606c54801561536d5790565b915092606e5f527f9930d9ff0dee0ef5ca2f7710ea66b8f84dd0f5f5351ecffe72b952cd9db7142a935f925b8284106154d457506154739450505081016020015f80615465565b855487850183015294850194869450928101926154b9565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001688525061547394151560051b840160200192505f9150819050615465565b91909173ffffffffffffffffffffffffffffffffffffffff8082169182151580615713575b156156e6576155829095949573ffffffffffffffffffffffffffffffffffffffff165f52600260205260405f205490565b905f958215965b81518110156156dc578261559d8284613b28565b5116906155aa8188613b28565b5191805f52610199926020848152604090815f208a5f5281526fffffffffffffffffffffffffffffffff958d87845f20541680156156d4575b85811480156156cc575b6156bc576155fb9086613bf0565b90818c02918c8304141715613bfd57670de0b6b3a764000061563391875f528385528d865f20905f52855204845f205460801c614247565b948785116105b0578786116105b057876156b69660019986519761565689613914565b16875216838601525f528152815f20908a5f52525f20815160209092015160801b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff92909216919091179055565b01615589565b50505050505050600191506156b6565b5085156155ed565b5060016155e3565b5050505050509050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffd5b5030831415615551565b909190156157ac57508051156157305790565b736f40d4a6237c257fff2db00fa0510deeecd303eb3b1561574e5790565b60646040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152fd5b8151156157bc5750805190602001fd5b6157fa906040519182917f08c379a00000000000000000000000000000000000000000000000000000000083526020600484015260248301906136d0565b0390fd5b9192901561581b5750815115615812575090565b3b1561574e5790565b8251909150156157bc5750805190602001fdfea264697066735822122024e49f5c510b0af73edf0983406909dd09ef6193a1ba04b24049b6c073dc219e64736f6c634300081800330000000000000000000000009fb7b4477576fe5b32be4c1843afb1e55f251b33