0 txs
0 calls
constructor
constructor(address asset_, address ipToken_, address ammTreasury_, address ammStorage_, address ammAssetManagement_, address iporOracle_, address iporProtocolRouter_, uint256 redeemFeeRate_, uint256 autoRebalanceThresholdMultiplier_)
functions
ammAssetManagement
viewfunction ammAssetManagement() view returns (address)
ammStorage
viewfunction ammStorage() view returns (address)
ammTreasury
viewfunction ammTreasury() view returns (address)
asset
viewfunction asset() view returns (address)
assetDecimals
viewfunction assetDecimals() view returns (uint256)
autoRebalanceThresholdMultiplier
viewfunction autoRebalanceThresholdMultiplier() view returns (uint256)
iporOracle
viewfunction iporOracle() view returns (address)
iporProtocolRouter
viewfunction iporProtocolRouter() view returns (address)
ipToken
viewfunction ipToken() view returns (address)
redeemFeeRate
viewfunction redeemFeeRate() view returns (uint256)
provideLiquidityWstEth
payablefunction provideLiquidityWstEth(address beneficiary, uint256 assetAmount) payable
rebalanceBetweenAmmTreasuryAndAssetManagementWstEth
nonpayablefunction rebalanceBetweenAmmTreasuryAndAssetManagementWstEth()
redeemFromAmmPoolWstEth
nonpayablefunction redeemFromAmmPoolWstEth(address beneficiary, uint256 ipTokenAmount)
events
ProvideLiquidity
event ProvideLiquidity(address poolAsset, address indexed from, address indexed beneficiary, address indexed to, uint256 exchangeRate, uint256 assetAmount, uint256 ipTokenAmount)
ProvideLiquidityWstEth
event ProvideLiquidityWstEth(address indexed from, address indexed beneficiary, address indexed to, uint256 exchangeRate, uint256 assetAmount, uint256 ipTokenAmount)
Redeem
event Redeem(address poolAsset, address indexed ammTreasury, address indexed from, address indexed beneficiary, uint256 exchangeRate, uint256 amount, uint256 redeemedAmount, uint256 ipTokenAmount)
RedeemWstEth
event RedeemWstEth(address indexed ammTreasuryEth, address indexed from, address indexed beneficiary, uint256 exchangeRate, uint256 amountStEth, uint256 redeemedAmountStEth, uint256 ipTokenAmount)
errors
AssetMismatch
error AssetMismatch(address assetOne, address assetTwo)
creation bytecode
0x6101c0604052348015610010575f80fd5b50604051614ed8380380614ed883398101604081905261002f916102eb565b88888888888888888861004a6001600160a01b038a16610281565b6001600160a01b031660808190526040805163313ce56760e01b8152905163313ce567916004808201926020929091908290030181865afa158015610091573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100b59190610383565b60ff1660a0526100cd6001600160a01b038916610281565b6001600160a01b0390811660c0526100e6908816610281565b6001600160a01b0390811660e0526100ff908716610281565b6001600160a01b0390811661010052610119908616610281565b6001600160a01b0390811661012052610133908516610281565b6001600160a01b039081166101405261014d908416610281565b6001600160a01b0316610160526101808290526101a081905260408051808201909152600881526749504f525f34313160c01b6020820152670de0b6b3a76400008311156101b75760405162461bcd60e51b81526004016101ae91906103aa565b60405180910390fd5b505f610120516001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156101f8573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061021c91906103df565b90506080516001600160a01b0316816001600160a01b03161461026957608051604051634e83a9b960e01b81526001600160a01b03808416600483015290911660248201526044016101ae565b505050505050505050505050505050505050506103f8565b604080518082019091526008815267049504f525f3030360c41b60208201525f906001600160a01b0383166102c95760405162461bcd60e51b81526004016101ae91906103aa565b5090919050565b80516001600160a01b03811681146102e6575f80fd5b919050565b5f805f805f805f805f6101208a8c031215610304575f80fd5b61030d8a6102d0565b985061031b60208b016102d0565b975061032960408b016102d0565b965061033760608b016102d0565b955061034560808b016102d0565b945061035360a08b016102d0565b935061036160c08b016102d0565b60e08b0151610100909b0151999c989b50969995989497939695949392505050565b5f60208284031215610393575f80fd5b815160ff811681146103a3575f80fd5b9392505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f602082840312156103ef575f80fd5b6103a3826102d0565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516149366105a25f395f818161032e0152818161136c015261165d01525f81816101a701526105ed01525f61021b01525f81816101e801526111a301525f818161017401528181610e600152818161144301526117c301525f81816102fb015261114b01525f81816102810152818161052a015281816107de01528181610865015281816108ed01528181610a8a01528181610bd101528181610d2f01528181610e2f01528181610f9b0152818161105e01528181611173015281816112de0152818161140f015281816114b3015281816116f701528181611797015261181e01525f818161024e015281816103aa0152818161073401528181610b1a015261112101525f81816102b40152818161062601528181610653015281816109810152610dce01525f8181610104015281816107ba0152818161081f015281816108c401528181610a6701528181610b9801528181610c3401528181610cce01528181610d60015281816110f50152818161130c01528181611343015261172901526149365ff3fe6080604052600436106100ce575f3560e01c80639f69ff981161007c578063c2d4160111610057578063c2d41601146102a3578063c6cdef96146102d6578063e96b181c146102ea578063fb3b93d81461031d575f80fd5b80639f69ff981461020a578063ba35971e1461023d578063bf93f99114610270575f80fd5b80635019005a116100ac5780635019005a146101635780635872e6fa146101965780637761022f146101d7575f80fd5b8063189946df146100d257806338d52e0f146100f357806349a7c90614610150575b5f80fd5b3480156100dd575f80fd5b506100f16100ec36600461441b565b610350565b005b3480156100fe575f80fd5b506101267f000000000000000000000000000000000000000000000000000000000000000081565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020015b60405180910390f35b6100f161015e36600461441b565b61035e565b34801561016e575f80fd5b506101267f000000000000000000000000000000000000000000000000000000000000000081565b3480156101a1575f80fd5b506101c97f000000000000000000000000000000000000000000000000000000000000000081565b604051908152602001610147565b3480156101e2575f80fd5b506101267f000000000000000000000000000000000000000000000000000000000000000081565b348015610215575f80fd5b506101267f000000000000000000000000000000000000000000000000000000000000000081565b348015610248575f80fd5b506101267f000000000000000000000000000000000000000000000000000000000000000081565b34801561027b575f80fd5b506101267f000000000000000000000000000000000000000000000000000000000000000081565b3480156102ae575f80fd5b506101c97f000000000000000000000000000000000000000000000000000000000000000081565b3480156102e1575f80fd5b506100f1610368565b3480156102f5575f80fd5b506101267f000000000000000000000000000000000000000000000000000000000000000081565b348015610328575f80fd5b506101c97f000000000000000000000000000000000000000000000000000000000000000081565b61035a8282610372565b5050565b61035a82826108be565b610370610c2f565b565b5f8111801561042c57506040517f70a082310000000000000000000000000000000000000000000000000000000081523360048201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906370a0823190602401602060405180830381865afa158015610404573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610428919061445d565b8111155b6040518060400160405280600881526020017f49504f525f343033000000000000000000000000000000000000000000000000815250906104a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b60405180910390fd5b5060408051808201909152600881527f49504f525f303030000000000000000000000000000000000000000000000000602082015273ffffffffffffffffffffffffffffffffffffffff8316610526576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634fcf9f716040518163ffffffff1660e01b8152600401602060405180830381865afa158015610591573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906105b5919061445d565b90505f6105c1826110d4565b90505f6105df6105d183866144f4565b670de0b6b3a76400006111db565b90505f61064a61062461061a7f0000000000000000000000000000000000000000000000000000000000000000670de0b6b3a764000061450b565b6105d190856144f4565b7f00000000000000000000000000000000000000000000000000000000000000006111fc565b90505f610677827f0000000000000000000000000000000000000000000000000000000000000000611261565b90505f8211801561068757505f81115b6040518060400160405280600881526020017f49504f525f343035000000000000000000000000000000000000000000000000815250906106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b506106ff816112a1565b6040517f9dc29fac000000000000000000000000000000000000000000000000000000008152336004820152602481018790527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1690639dc29fac906044015f604051808303815f87803b15801561078a575f80fd5b505af115801561079c573d5f803e3d5ffd5b5061080492505073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690507f0000000000000000000000000000000000000000000000000000000000000000898561153c565b6040805173ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811682526020820187905291810185905260608101839052608081018890528882169133917f0000000000000000000000000000000000000000000000000000000000000000909116907fe021269cd0664c981c25db606d4d8f46d794d2b8736acba138aa18f99ad4ae729060a00160405180910390a450505050505050565b5f6108e87f00000000000000000000000000000000000000000000000000000000000000006115d1565b90505f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16634fcf9f716040518163ffffffff1660e01b8152600401602060405180830381865afa158015610954573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610978919061445d565b90505f6109a5847f0000000000000000000000000000000000000000000000000000000000000000611261565b90505f6109b2828461451e565b84519091506109cf9063ffffffff16670de0b6b3a76400006144f4565b8111156040518060400160405280600881526020017f49504f525f33303400000000000000000000000000000000000000000000000081525090610a40576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b505f610a4b846110d4565b9050610aaf73ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016337f00000000000000000000000000000000000000000000000000000000000000008961153c565b5f610acb610ac585670de0b6b3a76400006144f4565b836111db565b6040517f40c10f1900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8a81166004830152602482018390529192507f0000000000000000000000000000000000000000000000000000000000000000909116906340c10f19906044015f604051808303815f87803b158015610b5d575f80fd5b505af1158015610b6f573d5f803e3d5ffd5b50505050610b7d868561165a565b6040805173ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000008116825260208201859052918101869052606081018390527f00000000000000000000000000000000000000000000000000000000000000008216918a169033907f3905344fec84f7e69e300efa5cfe63336584ef52e8259130d507509e7f7506b39060800160405180910390a45050505050505050565b610c597f0000000000000000000000000000000000000000000000000000000000000000336118b3565b6040518060400160405280600881526020017f49504f525f34313000000000000000000000000000000000000000000000000081525090610cc7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b505f610cf27f00000000000000000000000000000000000000000000000000000000000000006115d1565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192505f91610df2917f0000000000000000000000000000000000000000000000000000000000000000909116906370a08231906024015b602060405180830381865afa158015610da8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610dcc919061445d565b7f0000000000000000000000000000000000000000000000000000000000000000611261565b6040517fce96cb7700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301529192505f91610e91917f00000000000000000000000000000000000000000000000000000000000000009091169063ce96cb7790602401610d8d565b610e9b908361451e565b90505f81116040518060400160405280600881526020017f49504f525f34303700000000000000000000000000000000000000000000000081525090610f0e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b505f610f25610ac584670de0b6b3a76400006144f4565b90505f846040015161ffff16655af3107a4000610f4291906144f4565b90508082111561100e575f610f5a6105d185846144f4565b610f64908661450b565b90508015611008576040517f46b8fbfd000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16906346b8fbfd906024015f604051808303815f87803b158015610ff1575f80fd5b505af1158015611003573d5f803e3d5ffd5b505050505b506110cd565b5f8461101d6105d186856144f4565b611027919061450b565b905080156110cb576040517f666ffbe5000000000000000000000000000000000000000000000000000000008152600481018290527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff169063666ffbe5906024015f604051808303815f87803b1580156110b4575f80fd5b505af11580156110c6573d5f803e3d5ffd5b505050505b505b5050505050565b6040805160e08101825273ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000081168252601260208301527f00000000000000000000000000000000000000000000000000000000000000008116928201929092527f0000000000000000000000000000000000000000000000000000000000000000821660608201527f0000000000000000000000000000000000000000000000000000000000000000821660808201525f60a082018190527f000000000000000000000000000000000000000000000000000000000000000090921660c08201526111d481846118f6565b9392505050565b5f816111e860028261455e565b6111f2908561451e565b6111d4919061455e565b5f8160120361120c57508161125b565b601282111561123c5761122060128361450b565b61122b90600a614692565b61123590846144f4565b905061125b565b6112358361124b84601261450b565b61125690600a614692565b6111db565b92915050565b5f821561129a578160120361127757508161125b565b601282111561128f576112358361124b60128561450b565b61122082601261450b565b508161125b565b6040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f9161133b917f000000000000000000000000000000000000000000000000000000000000000016906370a0823190602401610d8d565b90505f6113677f00000000000000000000000000000000000000000000000000000000000000006115d1565b90505f7f0000000000000000000000000000000000000000000000000000000000000000826020015163ffffffff16670de0b6b3a76400006113a991906144f4565b6113b391906144f4565b9050828411806113cd57505f811180156113cd5750808410155b15611536576040517fce96cb7700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f91611492918691611472917f0000000000000000000000000000000000000000000000000000000000000000169063ce96cb7790602401610d8d565b87866040015161ffff16655af3107a400061148d91906144f4565b611a4a565b90505f8112156110cd5773ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001663666ffbe56114e96114e48461469d565b611adc565b6040518263ffffffff1660e01b815260040161150791815260200190565b5f604051808303815f87803b15801561151e575f80fd5b505af1158015611530573d5f803e3d5ffd5b50505050505b50505050565b6040805173ffffffffffffffffffffffffffffffffffffffff85811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd00000000000000000000000000000000000000000000000000000000179052611536908590611b4b565b604080516060810182525f80825260208201819052918101919091526115f5611c58565b73ffffffffffffffffffffffffffffffffffffffff929092165f90815260209283526040908190208151606081018352905463ffffffff8082168352640100000000820416948201949094526801000000000000000090930461ffff16908301525090565b5f7f0000000000000000000000000000000000000000000000000000000000000000836020015163ffffffff16670de0b6b3a764000061169a91906144f4565b6116a491906144f4565b90505f811180156116b55750808210155b156118ae576040517f70a0823100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301525f916118129161175a917f0000000000000000000000000000000000000000000000000000000000000000909116906370a0823190602401610d8d565b6040517fce96cb7700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000811660048301526117f4917f00000000000000000000000000000000000000000000000000000000000000009091169063ce96cb7790602401610d8d565b604087015161180d9061ffff16655af3107a40006144f4565b611c64565b90505f811315611536577f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166346b8fbfd61186183611adc565b6040518263ffffffff1660e01b815260040161187f91815260200190565b5f604051808303815f87803b158015611896575f80fd5b505af11580156118a8573d5f803e3d5ffd5b50505050505b505050565b5f806118bd611cb6565b73ffffffffffffffffffffffffffffffffffffffff9485165f908152602091825260408082209590961681529390525050205460ff1690565b5f8061190184611cc2565b925050505f8161191085611e13565b61191a91906146d3565b90505f8112156040518060400160405280600881526020017f49504f525f3331360000000000000000000000000000000000000000000000008152509061198e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b505f856040015173ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119dd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a01919061445d565b90508015611a3757611a2d611a1583611adc565b611a2790670de0b6b3a76400006144f4565b826111db565b935050505061125b565b670de0b6b3a7640000935050505061125b565b5f815f03611a5957505f611ad4565b611a6284611e13565b611ac7611a6e84611e13565b611a8090670de0b6b3a76400006146d3565b611a8986611e13565b611a9288611e13565b611a9b8a611e13565b611aa591906146f9565b611aaf91906146d3565b611ab99190614718565b670de0b6b3a7640000611ec4565b611ad191906146d3565b90505b949350505050565b5f80821215611b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f53616665436173743a2076616c7565206d75737420626520706f736974697665604482015260640161049a565b5090565b5f611bac826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16611f6f9092919063ffffffff16565b905080515f1480611bcc575080806020019051810190611bcc9190614763565b6118ae576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161049a565b5f8061125b6008611f7d565b5f815f03611c7357505f6111d4565b611c7c83611e13565b611cac611c8884611e13565b611c9a90670de0b6b3a76400006146d3565b611aaf611ca7878961451e565b611e13565b611ad491906146d3565b5f8061125b6007611f7d565b5f805f804290505f80866060015173ffffffffffffffffffffffffffffffffffffffff1663cab418206040518163ffffffff1660e01b815260040161014060405180830381865afa158015611d19573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d3d9190614812565b60c089015189516040517f0e5c712900000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff9182166004820152602481018890529395509193505f92911690630e5c712990604401602060405180830381865afa158015611dbd573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611de1919061445d565b9050611dee838583611f9e565b9650611dfb828583611fd1565b9550611e0786886146f9565b96989597505050505050565b5f7f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821115611b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602860248201527f53616665436173743a2076616c756520646f65736e27742066697420696e206160448201527f6e20696e74323536000000000000000000000000000000000000000000000000606482015260840161049a565b5f805f8412611ed35783611edc565b611edc8461469d565b90505f808412611eec5783611ef5565b611ef58461469d565b905084841860ff1d5f80838581611f0e57611f0e614531565b049150838581611f2057611f20614531565b0690505f831215611f485783600182901b1115611f4357611f4082614846565b91505b611f5f565b83600182901b10611f5f57611f5c82614846565b91505b5060019091170295945050505050565b6060611ad484845f85612004565b5f620f4240826008811115611f9457611f9461487d565b61125b919061451e565b5f611fbb611fac8585612119565b8560200151611ca7919061451e565b611cac611ca78487604001516105d191906144f4565b5f611fe8611ca78386604001516105d191906144f4565b611cac611ff58686612119565b8660200151611ca7919061451e565b606082471015612096576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f60448201527f722063616c6c0000000000000000000000000000000000000000000000000000606482015260840161049a565b5f808673ffffffffffffffffffffffffffffffffffffffff1685876040516120be91906148aa565b5f6040518083038185875af1925050503d805f81146120f8576040519150601f19603f3d011682016040523d82523d5f602084013e6120fd565b606091505b509150915061210e8783838761214c565b979650505050505050565b5f612140828460800151855f01518660200151612136919061451e565b86606001516121eb565b83516111d4919061451e565b606083156121e15782515f036121da5773ffffffffffffffffffffffffffffffffffffffff85163b6121da576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161049a565b5081611ad4565b611ad4838361227d565b5f838510156040518060400160405280600881526020017f49504f525f3331370000000000000000000000000000000000000000000000008152509061225e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b50611ad161226c858761450b565b61227690846144f4565b84906122c1565b81511561228d5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161049a9190614474565b5f826122cd84846122d7565b6111d4919061450b565b5f806122e7836301e133806111db565b90505f6122fc85670de0b6b3a7640000612331565b90505f61231183670de0b6b3a7640000612331565b90505f612326836123218461237e565b6123b1565b905061210e816127ff565b5f8061233d83856148c0565b11156123515761234e60018461451e565b92505b5f61235b8461282a565b90505f6123678461282a565b90505f6123748383612894565b9695505050505050565b5f61125b6123ac837f3fff71547652b82fe1777d0ffda0d23a000000000000000000000000000000006123b1565b612cae565b5f617fff60f084811c8216919084901c81169082900361252f5780617fff036124ae577fffffffffffffffffffffffffffffffff000000000000000000000000000000008085169086160361242d575050507f80000000000000000000000000000000000000000000000000000000000000008116821861125b565b7fffffffffffffffffffffffffffffffff00000000000000000000000000000000858518167f8000000000000000000000000000000000000000000000000000000000000000036124835750505081811761125b565b507f7fff800000000000000000000000000000000000000000000000000000000000915061125b9050565b7f7fffffffffffffffffffffffffffffff0000000000000000000000000000000084165f0361250257507f7fff800000000000000000000000000000000000000000000000000000000000915061125b9050565b5050507f80000000000000000000000000000000000000000000000000000000000000008116821861125b565b80617fff036125b9577f7fffffffffffffffffffffffffffffff0000000000000000000000000000000085165f0361258c57507f7fff800000000000000000000000000000000000000000000000000000000000915061125b9050565b5050507f80000000000000000000000000000000000000000000000000000000000000008216811861125b565b6dffffffffffffffffffffffffffff608086901c165f8390036125df57600192506125f1565b6e010000000000000000000000000000175b6dffffffffffffffffffffffffffff608086901c165f8390036126175760019250612629565b6e010000000000000000000000000000175b8082029150815f03612691577f800000000000000000000000000000000000000000000000000000000000000087871816612664575f612686565b7f80000000000000000000000000000000000000000000000000000000000000005b94505050505061125b565b928201925f7c02000000000000000000000000000000000000000000000000000000008310156126f5577c01000000000000000000000000000000000000000000000000000000008310156126ee576126e9836142b4565b6126f8565b60e06126f8565b60e15b90506140708186011015612711575f94505f92506127b3565b6140e081860110156127535761407085101561273657846140700383901c925061274b565b61407085111561274b57614070850383901b92505b5f94506127b3565b61c0dd818601111561276c57617fff94505f92506127b3565b6070811115612783576070810383901c9250612796565b6070811015612796578060700383901b92505b6dffffffffffffffffffffffffffff831692506140df8186010394505b82607086901b888a186f8000000000000000000000000000000060801b1660801c6fffffffffffffffffffffffffffffffff16171760801b9550505050505061125b565b505092915050565b5f80612812670de0b6b3a764000061282a565b90505f61281f84836123b1565b9050611ad481614361565b5f815f0361283957505f919050565b815f612844826142b4565b9050607081101561285d578060700382901b9150612870565b6070811115612870576070810382901c91505b613fff0160701b6dffffffffffffffffffffffffffff919091161760801b92915050565b5f617fff60f084811c8216919084901c8116908290036128e25780617fff0361250257507f7fff800000000000000000000000000000000000000000000000000000000000915061125b9050565b80617fff03612969577dffffffffffffffffffffffffffff0000000000000000000000000000000084161561293c57507f7fff800000000000000000000000000000000000000000000000000000000000915061125b9050565b5050508082187f80000000000000000000000000000000000000000000000000000000000000001661125b565b7f7fffffffffffffffffffffffffffffff0000000000000000000000000000000084165f03612a35577f7fffffffffffffffffffffffffffffff0000000000000000000000000000000085165f036129e657507f7fff800000000000000000000000000000000000000000000000000000000000915061125b9050565b5050508082187f8000000000000000000000000000000000000000000000000000000000000000167f7fff0000000000000000000000000000000000000000000000000000000000001761125b565b6dffffffffffffffffffffffffffff608085901c165f829003612a5b5760019150612a6d565b6e010000000000000000000000000000175b6dffffffffffffffffffffffffffff608087901c165f849003612ad3578015612ace575f612a9a826142b4565b6001955060e2039384017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e01939190911b90505b612ae8565b6e0100000000000000000000000000001760721b5b818181612af757612af7614531565b049050805f03612b30577f800000000000000000000000000000000000000000000000000000000000000087871816612664575f612686565b6d1000000000000000000000000000811015612b4e57612b4e6148d3565b5f6e080000000000000000000000000000821015612bad576e040000000000000000000000000000821015612ba2576e020000000000000000000000000000821015612b9b576070612ba5565b6071612ba5565b60725b60ff16612bb6565b612bb6826142b4565b905083614071018186011115612bd357617fff94505f9150612c6a565b83818601613ffc011015612bec575f94505f9150612c6a565b83818601613f8c011015612c38578385613ffc011115612c17578385613ffc010382901b9150612c30565b8385613ffc011015612c3057613ffc8585030382901c91505b5f9450612c6a565b6070811115612c4b576070810382901c91505b6dffffffffffffffffffffffffffff8216915083818601613f8d010394505b81607086901b888a186f8000000000000000000000000000000060801b1660801c6fffffffffffffffffffffffffffffffff16171760801b9550505050505061125b565b5f6f80000000000000000000000000000000608083901c90811190617fff60f085901c8116916dffffffffffffffffffffffffffff169082148015612cf257508015155b15612d2157507f7fff800000000000000000000000000000000000000000000000000000000000949350505050565b61400d821115612d615782612d56577f7fff000000000000000000000000000000000000000000000000000000000000612d58565b5f5b95945050505050565b613f7f821015612d9557507f3fff000000000000000000000000000000000000000000000000000000000000949350505050565b815f03612da55760019150612db7565b6e010000000000000000000000000000175b613fef821115612dea577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc01182011b612dfc565b613fef821015612dfc57613fef8290031c5b828015612e1a575071406e0000000000000000000000000000000081115b15612e2957505f949350505050565b82158015612e485750713fffffffffffffffffffffffffffffffffff81115b15612e7757507f7fff000000000000000000000000000000000000000000000000000000000000949350505050565b6fffffffffffffffffffffffffffffffff81169060801c838015612e9a57508115155b15612ea6579019906001015b6f8000000000000000000000000000000082811615612ed65770016a09e667f3bcc908b2fb1366ea957d3e0260801c5b6f40000000000000000000000000000000831615612f05577001306fe0a31b7152de8d5a46305c85edec0260801c5b6f20000000000000000000000000000000831615612f34577001172b83c7d517adcdf7c8c50eb14a791f0260801c5b6f10000000000000000000000000000000831615612f635770010b5586cf9890f6298b92b71842a983630260801c5b6f08000000000000000000000000000000831615612f92577001059b0d31585743ae7c548eb68ca417fd0260801c5b6f04000000000000000000000000000000831615612fc157700102c9a3e778060ee6f7caca4f7a29bde80260801c5b6f02000000000000000000000000000000831615612ff05770010163da9fb33356d84a66ae336dcdfa3f0260801c5b6f0100000000000000000000000000000083161561301f57700100b1afa5abcbed6129ab13ec11dc95430260801c5b6e80000000000000000000000000000083161561304d5770010058c86da1c09ea1ff19d294cf2f679b0260801c5b6e40000000000000000000000000000083161561307b577001002c605e2e8cec506d21bfc89a23a00f0260801c5b6e2000000000000000000000000000008316156130a957700100162f3904051fa128bca9c55c31e5df0260801c5b6e1000000000000000000000000000008316156130d7577001000b175effdc76ba38e31671ca9397250260801c5b6e08000000000000000000000000000083161561310557700100058ba01fb9f96d6cacd4b180917c3d0260801c5b6e0400000000000000000000000000008316156131335770010002c5cc37da9491d0985c348c68e7b30260801c5b6e020000000000000000000000000000831615613161577001000162e525ee054754457d59952920260260801c5b6e01000000000000000000000000000083161561318f5770010000b17255775c040618bf4a4ade83fc0260801c5b6d80000000000000000000000000008316156131bc577001000058b91b5bc9ae2eed81e9b7d4cfab0260801c5b6d40000000000000000000000000008316156131e957700100002c5c89d5ec6ca4d7c8acc017b7c90260801c5b6d20000000000000000000000000008316156132165770010000162e43f4f831060e02d839a9d16d0260801c5b6d100000000000000000000000000083161561324357700100000b1721bcfc99d9f890ea069117630260801c5b6d08000000000000000000000000008316156132705770010000058b90cf1e6d97f9ca14dbcc16280260801c5b6d040000000000000000000000000083161561329d577001000002c5c863b73f016468f6bac5ca2b0260801c5b6d02000000000000000000000000008316156132ca57700100000162e430e5a18f6119e3c02282a50260801c5b6d01000000000000000000000000008316156132f7577001000000b1721835514b86e6d96efd1bfe0260801c5b6c8000000000000000000000000083161561332357700100000058b90c0b48c6be5df846c5b2ef0260801c5b6c4000000000000000000000000083161561334f5770010000002c5c8601cc6b9e94213c72737a0260801c5b6c2000000000000000000000000083161561337b577001000000162e42fff037df38aa2b219f060260801c5b6c100000000000000000000000008316156133a75770010000000b17217fba9c739aa5819f44f90260801c5b6c080000000000000000000000008316156133d3577001000000058b90bfcdee5acd3c1cedc8230260801c5b6c040000000000000000000000008316156133ff57700100000002c5c85fe31f35a6a30da1be500260801c5b6c0200000000000000000000000083161561342b5770010000000162e42ff0999ce3541b9fffcf0260801c5b6c0100000000000000000000000083161561345757700100000000b17217f80f4ef5aadda455540260801c5b6b8000000000000000000000008316156134825770010000000058b90bfbf8479bd5a81b51ad0260801c5b6b4000000000000000000000008316156134ad577001000000002c5c85fdf84bd62ae30a74cc0260801c5b6b2000000000000000000000008316156134d857700100000000162e42fefb2fed257559bdaa0260801c5b6b100000000000000000000000831615613503577001000000000b17217f7d5a7716bba4a9ae0260801c5b6b08000000000000000000000083161561352e57700100000000058b90bfbe9ddbac5e109cce0260801c5b6b0400000000000000000000008316156135595770010000000002c5c85fdf4b15de6f17eb0d0260801c5b6b020000000000000000000000831615613584577001000000000162e42fefa494f1478fde050260801c5b6b0100000000000000000000008316156135af5770010000000000b17217f7d20cf927c8e94c0260801c5b6a80000000000000000000008316156135d9577001000000000058b90bfbe8f71cb4e4b33d0260801c5b6a400000000000000000000083161561360357700100000000002c5c85fdf477b662b269450260801c5b6a200000000000000000000083161561362d5770010000000000162e42fefa3ae53369388c0260801c5b6a100000000000000000000083161561365757700100000000000b17217f7d1d351a389d400260801c5b6a08000000000000000000008316156136815770010000000000058b90bfbe8e8b2d3d4ede0260801c5b6a04000000000000000000008316156136ab577001000000000002c5c85fdf4741bea6e77e0260801c5b6a02000000000000000000008316156136d557700100000000000162e42fefa39fe95583c20260801c5b6a01000000000000000000008316156136ff577001000000000000b17217f7d1cfb72b45e10260801c5b698000000000000000000083161561372857700100000000000058b90bfbe8e7cc35c3f00260801c5b69400000000000000000008316156137515770010000000000002c5c85fdf473e242ea380260801c5b692000000000000000000083161561377a577001000000000000162e42fefa39f02b772c0260801c5b69100000000000000000008316156137a35770010000000000000b17217f7d1cf7d83c1a0260801c5b69080000000000000000008316156137cc577001000000000000058b90bfbe8e7bdcbe2e0260801c5b69040000000000000000008316156137f557700100000000000002c5c85fdf473dea871f0260801c5b690200000000000000000083161561381e5770010000000000000162e42fefa39ef44d910260801c5b690100000000000000000083161561384757700100000000000000b17217f7d1cf79e9490260801c5b6880000000000000000083161561386f5770010000000000000058b90bfbe8e7bce5440260801c5b68400000000000000000831615613897577001000000000000002c5c85fdf473de6eca0260801c5b682000000000000000008316156138bf57700100000000000000162e42fefa39ef366f0260801c5b681000000000000000008316156138e7577001000000000000000b17217f7d1cf79afa0260801c5b6808000000000000000083161561390f57700100000000000000058b90bfbe8e7bcd6d0260801c5b680400000000000000008316156139375770010000000000000002c5c85fdf473de6b20260801c5b6802000000000000000083161561395f577001000000000000000162e42fefa39ef3580260801c5b680100000000000000008316156139875770010000000000000000b17217f7d1cf79ab0260801c5b6780000000000000008316156139ae577001000000000000000058b90bfbe8e7bcd50260801c5b6740000000000000008316156139d557700100000000000000002c5c85fdf473de6a0260801c5b6720000000000000008316156139fc5770010000000000000000162e42fefa39ef340260801c5b671000000000000000831615613a2357700100000000000000000b17217f7d1cf7990260801c5b670800000000000000831615613a4a5770010000000000000000058b90bfbe8e7bcc0260801c5b670400000000000000831615613a71577001000000000000000002c5c85fdf473de50260801c5b670200000000000000831615613a9857700100000000000000000162e42fefa39ef20260801c5b670100000000000000831615613abf577001000000000000000000b17217f7d1cf780260801c5b6680000000000000831615613ae557700100000000000000000058b90bfbe8e7bb0260801c5b6640000000000000831615613b0b5770010000000000000000002c5c85fdf473dd0260801c5b6620000000000000831615613b31577001000000000000000000162e42fefa39ee0260801c5b6610000000000000831615613b575770010000000000000000000b17217f7d1cf60260801c5b6608000000000000831615613b7d577001000000000000000000058b90bfbe8e7a0260801c5b6604000000000000831615613ba357700100000000000000000002c5c85fdf473c0260801c5b6602000000000000831615613bc95770010000000000000000000162e42fefa39d0260801c5b6601000000000000831615613bef57700100000000000000000000b17217f7d1ce0260801c5b65800000000000831615613c145770010000000000000000000058b90bfbe8e60260801c5b65400000000000831615613c39577001000000000000000000002c5c85fdf4720260801c5b65200000000000831615613c5e57700100000000000000000000162e42fefa380260801c5b65100000000000831615613c83577001000000000000000000000b17217f7d1b0260801c5b65080000000000831615613ca857700100000000000000000000058b90bfbe8d0260801c5b65040000000000831615613ccd5770010000000000000000000002c5c85fdf460260801c5b65020000000000831615613cf2577001000000000000000000000162e42fefa20260801c5b65010000000000831615613d175770010000000000000000000000b17217f7d00260801c5b648000000000831615613d3b577001000000000000000000000058b90bfbe70260801c5b644000000000831615613d5f57700100000000000000000000002c5c85fdf30260801c5b642000000000831615613d835770010000000000000000000000162e42fef90260801c5b641000000000831615613da757700100000000000000000000000b17217f7c0260801c5b640800000000831615613dcb5770010000000000000000000000058b90bfbd0260801c5b640400000000831615613def577001000000000000000000000002c5c85fde0260801c5b640200000000831615613e1357700100000000000000000000000162e42fee0260801c5b640100000000831615613e37577001000000000000000000000000b17217f60260801c5b6380000000831615613e5a57700100000000000000000000000058b90bfa0260801c5b6340000000831615613e7d5770010000000000000000000000002c5c85fc0260801c5b6320000000831615613ea0577001000000000000000000000000162e42fd0260801c5b6310000000831615613ec35770010000000000000000000000000b17217e0260801c5b6308000000831615613ee6577001000000000000000000000000058b90be0260801c5b6304000000831615613f0957700100000000000000000000000002c5c85e0260801c5b6302000000831615613f2c5770010000000000000000000000000162e42e0260801c5b6301000000831615613f4f57700100000000000000000000000000b172160260801c5b62800000831615613f715770010000000000000000000000000058b90a0260801c5b62400000831615613f93577001000000000000000000000000002c5c840260801c5b62200000831615613fb557700100000000000000000000000000162e410260801c5b62100000831615613fd7577001000000000000000000000000000b17200260801c5b62080000831615613ff957700100000000000000000000000000058b8f0260801c5b6204000083161561401b5770010000000000000000000000000002c5c70260801c5b6202000083161561403d577001000000000000000000000000000162e30260801c5b6201000083161561405f5770010000000000000000000000000000b1710260801c5b618000831615614080577001000000000000000000000000000058b80260801c5b6140008316156140a157700100000000000000000000000000002c5b0260801c5b6120008316156140c25770010000000000000000000000000000162d0260801c5b6110008316156140e357700100000000000000000000000000000b160260801c5b6108008316156141045770010000000000000000000000000000058a0260801c5b610400831615614125577001000000000000000000000000000002c40260801c5b610200831615614146577001000000000000000000000000000001610260801c5b610100831615614167577001000000000000000000000000000000b00260801c5b6080831615614187577001000000000000000000000000000000570260801c5b60408316156141a75770010000000000000000000000000000002b0260801c5b60208316156141c7577001000000000000000000000000000000150260801c5b60108316156141e75770010000000000000000000000000000000a0260801c5b6008831615614207577001000000000000000000000000000000040260801c5b6004831615614227577001000000000000000000000000000000010260801c5b8461424f57600f81901c6dffffffffffffffffffffffffffff169050613fff820191506142a1565b613ffe821161427b57600f81901c6dffffffffffffffffffffffffffff16905081613fff0391506142a1565b5f917fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc011011c5b60709190911b1760801b95945050505050565b5f8082116142c0575f80fd5b5f70010000000000000000000000000000000083106142e157608092831c92015b6801000000000000000083106142f957604092831c92015b640100000000831061430d57602092831c92015b62010000831061431f57601092831c92015b610100831061433057600892831c92015b6010831061434057600492831c92015b6004831061435057600292831c92015b6002831061125b5760010192915050565b5f617fff60f083901c16613fff81101561437d57505f92915050565b6f80000000000000000000000000000000608084901c1061439c575f80fd5b6140fe8111156143aa575f80fd5b6e0100000000000000000000000000006dffffffffffffffffffffffffffff608085901c161761406f8210156143e65761406f8290031c6111d4565b61406f8211156111d4577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf9182011b9392505050565b5f806040838503121561442c575f80fd5b823573ffffffffffffffffffffffffffffffffffffffff8116811461444f575f80fd5b946020939093013593505050565b5f6020828403121561446d575f80fd5b5051919050565b602081525f82518060208401528060208501604085015e5f6040828501015260407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f83011684010191505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b808202811582820484141761125b5761125b6144c7565b8181038181111561125b5761125b6144c7565b8082018082111561125b5761125b6144c7565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b5f8261456c5761456c614531565b500490565b6001815b60018411156145ac57808504811115614590576145906144c7565b600184161561459e57908102905b60019390931c928002614575565b935093915050565b5f826145c25750600161125b565b816145ce57505f61125b565b81600181146145e457600281146145ee5761460a565b600191505061125b565b60ff8411156145ff576145ff6144c7565b50506001821b61125b565b5060208310610133831016604e8410600b841016171561462d575081810a61125b565b6146587fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8484614571565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561468a5761468a6144c7565b029392505050565b5f6111d483836145b4565b5f7f800000000000000000000000000000000000000000000000000000000000000082036146cd576146cd6144c7565b505f0390565b8181035f8312801583831316838312821617156146f2576146f26144c7565b5092915050565b8082018281125f8312801582168215821617156127f7576127f76144c7565b8082025f82127f80000000000000000000000000000000000000000000000000000000000000008414161561474f5761474f6144c7565b818105831482151761125b5761125b6144c7565b5f60208284031215614773575f80fd5b815180151581146111d4575f80fd5b5f60a08284031215614792575f80fd5b60405160a0810181811067ffffffffffffffff821117156147da577f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604090815283518252602080850151908301528381015190820152606080840151908201526080928301519281019290925250919050565b5f806101408385031215614824575f80fd5b61482e8484614782565b915061483d8460a08501614782565b90509250929050565b5f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203614876576148766144c7565b5060010190565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b5f82518060208501845e5f920191825250919050565b5f826148ce576148ce614531565b500690565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52600160045260245ffdfea2646970667358221220faf80309f6624c88d0e41280d71a681a5042f85f2eca5379002675baa2d5069864736f6c634300081a0033000000000000000000000000c1cba3fcea344f92d9239c08c0568f6f2f0ee452000000000000000000000000ff7907cdca84db03f09702a4a49c262908af48af00000000000000000000000009388e18d5c331449c6ef636726dd1fd007b8ddf00000000000000000000000029399d76921e23314ae259cf5e17116f48ae65b7000000000000000000000000fe8b23b493579e5c3a0a3bc5bbf20662b3072de600000000000000000000000085564fb392e18a84a64343a3fb65839206936c0f00000000000000000000000021d337ebf86e584e614ecc18a2b1144d3c3759180000000000000000000000000000000000000000000000000011c37937e080000000000000000000000000000000000000000000000000000000000000000001