0x60806040526000805463ffffffff60a01b1916624043c560a21b17905560028054626403036001600160401b0319909116179081905561ffff66010000000000008204811691620000629164010000000082048116916201000090041662000419565b6200006e919062000419565b600280547d1b2b20a7b804b7cbd53bda6dbb47eb2ee4295a9d00000000000000000000600160501b600160f01b031961ffff94909416680100000000000000000293909316600160401b600160f01b031990911617919091179055600380546001600160a01b031916731b2b20a7b804b7cbd53bda6dbb47eb2ee4295a9d179055620000fd6009600a6200053d565b6200010d906327bc86aa62000555565b6005556200011e6009600a6200053d565b6200012e906327bc86aa62000555565b600655620186a0620001436009600a6200053d565b62000153906327bc86aa62000555565b6200016090600a62000555565b6200016c91906200056f565b600755620186a0620001816009600a6200053d565b62000191906327bc86aa62000555565b6200019f906101f362000555565b620001ab91906200056f565b600855600e80546001600160a01b031916737a250d5630b4cf539739df2c5dacb4c659f2488d1790556011805461ff0019169055348015620001ec57600080fd5b5060008054336001600160a01b03199182168117909255600d8054909116909117905560646200021f6009600a6200053d565b6200022f906327bc86aa62000555565b6200023c90600062000555565b6200024891906200056f565b336000818152600960209081526040808320859055519384529192909160008051602062002cff833981519152910160405180910390a33360009081526009602081905260409091205490620002a090600a6200053d565b620002b0906327bc86aa62000555565b620002bc919062000592565b306000818152600960209081526040808320859055519384529192909160008051602062002cff833981519152910160405180910390a3600080546001600160a01b039081168252600b602090815260408084208054600160ff1991821681179092553080875283872080548316841790557fd1def2fe8304e5e69b6f2907349cddd4c272de4ef47368d65b87ae00d7f101478054831684179055600280546a0100000000000000000000908190048816895285892080548516861790556003805489168a52868a208054861687179055895489168a52600c909752858920805485168617905591885284882080548416851790557f0ec9aca9afadc09fc0bd96ec7d7d6cfbb5408a5bc5bcf87bc0656b65508e559a80548416851790555404851686528286208054821683179055925490931684529092208054909216179055620005a8565b634e487b7160e01b600052601160045260246000fd5b61ffff81811683821601908082111562000437576200043762000403565b5092915050565b600181815b808511156200047f57816000190482111562000463576200046362000403565b808516156200047157918102915b93841c939080029062000443565b509250929050565b600082620004985750600162000537565b81620004a75750600062000537565b8160018114620004c05760028114620004cb57620004eb565b600191505062000537565b60ff841115620004df57620004df62000403565b50506001821b62000537565b5060208310610133831016604e8410600b841016171562000510575081810a62000537565b6200051c83836200043e565b806000190482111562000533576200053362000403565b0290505b92915050565b60006200054e60ff84168362000487565b9392505050565b808202811582820484141762000537576200053762000403565b6000826200058d57634e487b7160e01b600052601260045260246000fd5b500490565b8181038181111562000537576200053762000403565b61274780620005b86000396000f3fe6080604052600436106101dc5760003560e01c80635a90a49e1161010257806395d89b4111610095578063dd62ed3e11610064578063dd62ed3e146105e0578063e8078d9414610626578063f2fde38b1461062e578063f8b45b051461064e57600080fd5b806395d89b411461055c578063a6097b0a1461058b578063a9059cbb146105ab578063c3f70b52146105cb57600080fd5b8063715018a6116100d1578063715018a6146104d057806376a39c28146104e55780638d3e6e40146105055780638da5cb5b1461053e57600080fd5b80635a90a49e146103fc57806362b9bbb6146104355780636373ea691461045357806370a082311461049a57600080fd5b80632fb528ba1161017a5780634706240211610149578063470624021461038f5780634d4ce935146103a75780634fcd2446146103bc57806357ff135a146103dc57600080fd5b80632fb528ba14610326578063313ce56714610346578063368f48001461035a57806346b898341461037a57600080fd5b8063147c9f6d116101b6578063147c9f6d1461029657806318160ddd146102b857806323b872dd146102db5780632b14ca56146102fb57600080fd5b806306fdde03146101e8578063095ea7b31461022d5780630aae34121461025d57600080fd5b366101e357005b600080fd5b3480156101f457600080fd5b5060408051808201909152600a81526904461726b205472756d760b41b60208201525b6040516102249190612105565b60405180910390f35b34801561023957600080fd5b5061024d610248366004612168565b610663565b6040519015158152602001610224565b34801561026957600080fd5b50600254600160501b90046001600160a01b03165b6040516001600160a01b039091168152602001610224565b3480156102a257600080fd5b506102b66102b1366004612194565b6106d0565b005b3480156102c457600080fd5b506102cd610874565b604051908152602001610224565b3480156102e757600080fd5b5061024d6102f63660046121df565b610895565b34801561030757600080fd5b50600254610100900460ff165b60405160ff9091168152602001610224565b34801561033257600080fd5b506102b6610341366004612246565b61094f565b34801561035257600080fd5b506009610314565b34801561036657600080fd5b506102b661037536600461228b565b610a7d565b34801561038657600080fd5b506007546102cd565b34801561039b57600080fd5b5060025460ff16610314565b3480156103b357600080fd5b506008546102cd565b3480156103c857600080fd5b506102b66103d73660046122b5565b610bc0565b3480156103e857600080fd5b506102b66103f73660046122df565b610c60565b34801561040857600080fd5b5061024d610417366004612324565b6001600160a01b03166000908152600b602052604090205460ff1690565b34801561044157600080fd5b506003546001600160a01b031661027e565b34801561045f57600080fd5b506002546040805161ffff62010000840481168252640100000000840481166020830152600160301b90930490921690820152606001610224565b3480156104a657600080fd5b506102cd6104b5366004612324565b6001600160a01b031660009081526009602052604090205490565b3480156104dc57600080fd5b506102b6610d36565b3480156104f157600080fd5b506102b6610500366004612341565b610da5565b34801561051157600080fd5b5061024d610520366004612324565b6001600160a01b03166000908152600c602052604090205460ff1690565b34801561054a57600080fd5b506000546001600160a01b031661027e565b34801561056857600080fd5b506040805180820190915260068152650445452554d560d41b6020820152610217565b34801561059757600080fd5b506102b66105a636600461238f565b610e9d565b3480156105b757600080fd5b5061024d6105c6366004612168565b611053565b3480156105d757600080fd5b506005546102cd565b3480156105ec57600080fd5b506102cd6105fb3660046123e3565b6001600160a01b039182166000908152600a6020908152604080832093909416825291909152205490565b6102b661108c565b34801561063a57600080fd5b506102b6610649366004612324565b6113e1565b34801561065a57600080fd5b506006546102cd565b336000818152600a602090815260408083206001600160a01b038716808552925280832085905551919290917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925906106be9086815260200190565b60405180910390a35060015b92915050565b6000546001600160a01b031633146107035760405162461bcd60e51b81526004016106fa9061241c565b60405180910390fd5b6001600160a01b03831660009081526010602052604090205460ff1615801561074557506001600160a01b03821660009081526010602052604090205460ff16155b801561076a57506001600160a01b03811660009081526010602052604090205460ff16155b6107b65760405162461bcd60e51b815260206004820152601760248201527f4c502063616e6e6f74206265207461782077616c6c657400000000000000000060448201526064016106fa565b600280547fffff0000000000000000000000000000000000000000ffffffffffffffffffff16600160501b6001600160a01b0395861690810291909117909155600380546001600160a01b0319908116948616948517909155600d805490911692909416919091179092556000918252600b60208181526040808520805460ff199081166001908117909255600c80855283882080548316841790559587529383528186208054851682179055939091529092208054909216179055565b60006108826009600a61254d565b610890906327bc86aa61255c565b905090565b60006108a08461145f565b6108bc5760405162461bcd60e51b81526004016106fa90612573565b6001600160a01b0384166000908152600a602090815260408083203384529091529020546000191461093c576001600160a01b0384166000908152600a6020908152604080832033845290915290205461091790839061259d565b6001600160a01b0385166000908152600a602090815260408083203384529091529020555b6109478484846114c5565b949350505050565b6000546001600160a01b031633146109795760405162461bcd60e51b81526004016106fa9061241c565b6011805461ff001916610100179055606460ff831611156109dc5760405162461bcd60e51b815260206004820152601a60248201527f43616e6e6f742073776170206d6f7265207468616e203130302500000000000060448201526064016106fa565b306000908152600960205260408120546064906109fd9060ff86169061255c565b610a0791906125b0565b9050610a156009600a61254d565b811115610a2557610a25816117b2565b8115610a6d574780610a625760405162461bcd60e51b815260206004820152600660248201526509cde408aa8960d31b60448201526064016106fa565b610a6b476118fc565b505b50506011805461ff001916905550565b6000546001600160a01b03163314610aa75760405162461bcd60e51b81526004016106fa9061241c565b60006103e861ffff8416610abd6009600a61254d565b610acb906327bc86aa61255c565b610ad5919061255c565b610adf91906125b0565b610aea9060016125d2565b9050600554811015610b2b5760405162461bcd60e51b815260206004820152600a602482015269747820746f6f206c6f7760b01b60448201526064016106fa565b600581905560006103e861ffff8416610b466009600a61254d565b610b54906327bc86aa61255c565b610b5e919061255c565b610b6891906125b0565b610b739060016125d2565b9050600654811015610bb85760405162461bcd60e51b815260206004820152600e60248201526d77616c6c657420746f6f206c6f7760901b60448201526064016106fa565b600655505050565b6000546001600160a01b03163314610bea5760405162461bcd60e51b81526004016106fa9061241c565b6063610bf682846125e5565b60ff161115610c3c5760405162461bcd60e51b81526020600482015260126024820152710a4deeadcc8e8e4d2e040e8dede40d0d2ced60731b60448201526064016106fa565b6002805460ff9283166101000261ffff199091169290931691909117919091179055565b6000546001600160a01b03163314610c8a5760405162461bcd60e51b81526004016106fa9061241c565b8080610c935750815b15610cf4576001600160a01b03831660009081526010602052604090205460ff1615610cf45760405162461bcd60e51b815260206004820152601060248201526f043616e6e6f74206578656d7074204c560841b60448201526064016106fa565b6001600160a01b039092166000908152600b60209081526040808320805494151560ff19958616179055600c9091529020805492151592909116919091179055565b6000546001600160a01b03163314610d605760405162461bcd60e51b81526004016106fa9061241c565b600080546001600160a01b03191681556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a1565b6000546001600160a01b03163314610dcf5760405162461bcd60e51b81526004016106fa9061241c565b600081610ddc84866125fe565b610de691906125fe565b905060008161ffff1611610e2e5760405162461bcd60e51b815260206004820152600f60248201526e0416c6c2063616e6e6f74206265203608c1b60448201526064016106fa565b6002805467ffff0000ffff00001916600160301b61ffff9687160263ffff000019161762010000948616949094029390931769ffff0000ffff0000000019166401000000009285169290920269ffff0000000000000000191691909117600160401b9190931602919091179055565b6000546001600160a01b03163314610ec75760405162461bcd60e51b81526004016106fa9061241c565b63ffffffff808416908516610ede6009600a61254d565b610eec906327bc86aa61255c565b610ef6919061255c565b610f0091906125b0565b60075563ffffffff808216908316610f1a6009600a61254d565b610f28906327bc86aa61255c565b610f32919061255c565b610f3c91906125b0565b60088190556007541115610f825760405162461bcd60e51b815260206004820152600d60248201526c26b4b717a6b0bc1032b93937b960991b60448201526064016106fa565b620186a0610f926009600a61254d565b610fa0906327bc86aa61255c565b610faa91906125b0565b60085411610fe85760405162461bcd60e51b815260206004820152600b60248201526a4d617820746f6f206c6f7760a81b60448201526064016106fa565b6064610ff66009600a61254d565b611004906327bc86aa61255c565b61100e91906125b0565b6008541061104d5760405162461bcd60e51b815260206004820152600c60248201526b09ac2f040e8dede40d0d2ced60a31b60448201526064016106fa565b50505050565b600061105e3361145f565b61107a5760405162461bcd60e51b81526004016106fa90612573565b6110853384846114c5565b9392505050565b6000546001600160a01b031633146110b65760405162461bcd60e51b81526004016106fa9061241c565b6011805461ff001916610100179055600f546001600160a01b03161561110a5760405162461bcd60e51b81526020600482015260096024820152684c502065786973747360b81b60448201526064016106fa565b60115460ff161561114f5760405162461bcd60e51b815260206004820152600f60248201526e3a3930b234b7339034b99037b832b760891b60448201526064016106fa565b600034118061115e5750600047115b6111aa5760405162461bcd60e51b815260206004820152601d60248201527f4e6f2045544820696e20636f6e7472616374206f72206d65737361676500000060448201526064016106fa565b306000908152600960205260409020546111fe5760405162461bcd60e51b8152602060048201526015602482015274139bc81d1bdad95b9cc81a5b8818dbdb9d1c9858dd605a1b60448201526064016106fa565b600e60009054906101000a90046001600160a01b03166001600160a01b031663c45a01556040518163ffffffff1660e01b8152600401602060405180830381865afa158015611251573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112759190612620565b6001600160a01b031663c9c6539630600e60009054906101000a90046001600160a01b03166001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112fb9190612620565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015611348573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136c9190612620565b600f80546001600160a01b0319166001600160a01b0392909216919091179055306000908152600960205260408120546113a7914790611a15565b600f546001600160a01b03166000908152601060205260409020805460ff191660011790556113d4611ad0565b6011805461ff0019169055565b6000546001600160a01b0316331461140b5760405162461bcd60e51b81526004016106fa9061241c565b600080546001600160a01b0319166001600160a01b0383169081179091556040519081527f04dba622d284ed0014ee4b9a6a68386be1a4c08a4913ae272de89199cc6861639060200160405180910390a150565b601154600090819060ff1615611477575060016106ca565b6001600160a01b0383166000908152600b602052604090205460ff1680156114b757506001600160a01b0383166000908152600c602052604090205460ff165b156106ca5750600192915050565b60006001600160a01b03841661151d5760405162461bcd60e51b815260206004820152601d60248201527f4e6f207472616e73666572732066726f6d205a65726f2077616c6c657400000060448201526064016106fa565b60115460ff16611583576001600160a01b0384166000908152600b602052604090205460ff16801561156757506001600160a01b0384166000908152600c602052604090205460ff165b6115835760405162461bcd60e51b81526004016106fa90612573565b601154610100900460ff161580156115b357506001600160a01b03831660009081526010602052604090205460ff165b156115c0576115c0611b4b565b6115ca8484611c8c565b61160d5760405162461bcd60e51b815260206004820152601460248201527313515588189bdd1cc81b9bdd08185b1b1bddd95960621b60448201526064016106fa565b6001600160a01b038416301480159061162f57506001600160a01b0383163014155b801561164957506000546001600160a01b03858116911614155b1561169957611659848484611e0a565b6116995760405162461bcd60e51b815260206004820152601160248201527054582065786365656473206c696d69747360781b60448201526064016106fa565b60006116a6858585611ed4565b905060006116b4828561259d565b6001600160a01b0387166000908152600960205260409020549091506116db90859061259d565b6001600160a01b038716600090815260096020526040902055811561172657306000908152600960205260409020546117159083906125d2565b306000908152600960205260409020555b6001600160a01b03851660009081526009602052604090205461174a9082906125d2565b6001600160a01b0380871660008181526009602052604090819020939093559151908816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061179e9088815260200190565b60405180910390a350600195945050505050565b6117bb81612060565b60408051600280825260608201835260009260208301908036833701905050905030816000815181106117f0576117f061263d565b6001600160a01b03928316602091820292909201810191909152600e54604080516315ab88c960e31b81529051919093169263ad5c46489260048083019391928290030181865afa158015611849573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061186d9190612620565b816001815181106118805761188061263d565b6001600160a01b039283166020918202929092010152600e5460405163791ac94760e01b815291169063791ac947906118c6908590600090869030904290600401612653565b600060405180830381600087803b1580156118e057600080fd5b505af11580156118f4573d6000803e3d6000fd5b505050505050565b6002546000906119209061ffff6401000000008204811691620100009004166125fe565b905061ffff811615611a115760025460009061ffff8084169161194b9162010000909104168561255c565b61195591906125b0565b60025490915060009061ffff8085169161197991640100000000909104168661255c565b61198391906125b0565b905081156119cd57600254604051600160501b9091046001600160a01b0316906108fc8415029084906000818181858888f193505050501580156119cb573d6000803e3d6000fd5b505b801561104d576003546040516001600160a01b039091169082156108fc029083906000818181858888f19350505050158015611a0d573d6000803e3d6000fd5b5050505b5050565b600d546001600160a01b03168115611a2b575060005b611a3484612060565b600e5460405163f305d71960e01b81523060048201526024810186905260006044820181905260648201526001600160a01b0383811660848301524260a48301529091169063f305d71990859060c40160606040518083038185885af1158015611aa2573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190611ac791906126c4565b50505050505050565b6064611ade6009600a61254d565b611aec906327bc86aa61255c565b611af790600361255c565b611b0191906125b0565b6005556064611b126009600a61254d565b611b20906327bc86aa61255c565b611b2b90600361255c565b611b3591906125b0565b6006556011805460ff1916600117905543600455565b6011805461ff0019166101001790553060009081526009602052604081205490506007548110158015611b80575060115460ff165b15611c7e576008548110611b9357506008545b600280546000919061ffff600160401b8204811691611bbb91600160301b909104168561255c565b611bc591906125b0565b611bcf91906125b0565b90506000611bdd828461259d565b9050611beb6009600a61254d565b811115611c6a5747611bfc826117b2565b6000611c08824761259d565b600254909150600160301b900461ffff1615611c675760025460009061ffff600160401b8204811691611c4491600160301b909104168461255c565b611c4e91906125b0565b9050611c5985612060565b611c6585826000611a15565b505b50505b478015611c7a57611c7a816118fc565b5050505b506011805461ff0019169055565b60008054600454829160ff600160b81b8204811692611cb592600160b01b9004909116906125d2565b611cbf91906125d2565b611cca90600a6125d2565b43108015611cf15750600054600454611ced91600160b01b900460ff16906125d2565b4310155b15611dff576001600160a01b03841660009081526010602052604090205460ff1615611d9d576001600160a01b0383166000908152600b602052604090205460ff16158015611d5957506001600160a01b0383166000908152600c602052604090205460ff16155b15611d7a576001600160a01b03831660009081526001602052604090204390555b6001600160a01b0383163214611d985780611d94816126f2565b9150505b611dcb565b6001600160a01b038416600090815260016020526040902054439003611dcb5780611dc7816126f2565b9150505b3a15611dff57483a1480611dec5750611de9486404a817c8006125d2565b3a115b15611dff5780611dfb816126f2565b9150505b60ff16159392505050565b60115460009060019060ff168015611e3b57506001600160a01b0385166000908152600c602052604090205460ff16155b8015611e6057506001600160a01b0384166000908152600c602052604090205460ff16155b1561094757600554831115611e7757506000610947565b6001600160a01b03841660009081526010602052604090205460ff16158015611ec457506006546001600160a01b038516600090815260096020526040902054611ec29085906125d2565b115b1561094757506000949350505050565b601154600090819060ff161580611f0357506001600160a01b0385166000908152600b602052604090205460ff165b80611f2657506001600160a01b0384166000908152600b602052604090205460ff165b15611f3357506000610947565b60005460045460ff600160b81b8304811692611f5a92600160b01b909104909116906125d2565b611f6491906125d2565b4310611ff0576001600160a01b03851660009081526010602052604090205460ff1615611faf57600254606490611f9e9060ff168561255c565b611fa891906125b0565b9050610947565b6001600160a01b03841660009081526010602052604090205460ff1615611fe857600254606490611f9e90610100900460ff168561255c565b506000610947565b60005460045461200a91600160b01b900460ff16906125d2565b431061202a57600054606490611f9e90600160a81b900460ff168561255c565b60045443106109475760005460649061204d90600160a01b900460ff168561255c565b61205791906125b0565b95945050505050565b306000908152600a60209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d845290915290205481111561210257306000818152600a60209081526040808320737a250d5630b4cf539739df2c5dacb4c659f2488d808552908352928190206000199081905590519081529192917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35b50565b600060208083528351808285015260005b8181101561213257858101830151858201604001528201612116565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461210257600080fd5b6000806040838503121561217b57600080fd5b823561218681612153565b946020939093013593505050565b6000806000606084860312156121a957600080fd5b83356121b481612153565b925060208401356121c481612153565b915060408401356121d481612153565b809150509250925092565b6000806000606084860312156121f457600080fd5b83356121ff81612153565b9250602084013561220f81612153565b929592945050506040919091013590565b803560ff8116811461223157600080fd5b919050565b8035801515811461223157600080fd5b6000806040838503121561225957600080fd5b61226283612220565b915061227060208401612236565b90509250929050565b803561ffff8116811461223157600080fd5b6000806040838503121561229e57600080fd5b6122a783612279565b915061227060208401612279565b600080604083850312156122c857600080fd5b6122d183612220565b915061227060208401612220565b6000806000606084860312156122f457600080fd5b83356122ff81612153565b925061230d60208501612236565b915061231b60408501612236565b90509250925092565b60006020828403121561233657600080fd5b813561108581612153565b60008060006060848603121561235657600080fd5b61235f84612279565b925061236d60208501612279565b915061231b60408501612279565b803563ffffffff8116811461223157600080fd5b600080600080608085870312156123a557600080fd5b6123ae8561237b565b93506123bc6020860161237b565b92506123ca6040860161237b565b91506123d86060860161237b565b905092959194509250565b600080604083850312156123f657600080fd5b823561240181612153565b9150602083013561241181612153565b809150509250929050565b60208082526018908201527f4f6e6c79206f776e65722063616e2063616c6c20746869730000000000000000604082015260600190565b634e487b7160e01b600052601160045260246000fd5b600181815b808511156124a457816000190482111561248a5761248a612453565b8085161561249757918102915b93841c939080029061246e565b509250929050565b6000826124bb575060016106ca565b816124c8575060006106ca565b81600181146124de57600281146124e857612504565b60019150506106ca565b60ff8411156124f9576124f9612453565b50506001821b6106ca565b5060208310610133831016604e8410600b8410161715612527575081810a6106ca565b6125318383612469565b806000190482111561254557612545612453565b029392505050565b600061108560ff8416836124ac565b80820281158282048414176106ca576106ca612453565b60208082526010908201526f2a3930b234b733903737ba1037b832b760811b604082015260600190565b818103818111156106ca576106ca612453565b6000826125cd57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156106ca576106ca612453565b60ff81811683821601908111156106ca576106ca612453565b61ffff81811683821601908082111561261957612619612453565b5092915050565b60006020828403121561263257600080fd5b815161108581612153565b634e487b7160e01b600052603260045260246000fd5b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b818110156126a35784516001600160a01b03168352938301939183019160010161267e565b50506001600160a01b03969096166060850152505050608001529392505050565b6000806000606084860312156126d957600080fd5b8351925060208401519150604084015190509250925092565b600060ff821660ff810361270857612708612453565b6001019291505056fea2646970667358221220de9512d7e8602d118b46ba54f70f62c7b225fb4aa10b91c3f7411fec8f2765ed64736f6c63430008130033ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef