7 txs
4 calls
constructor
constructor(address _token, address _lzEndpoint, address _owner)
functions
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
approvalRequired
purefunction approvalRequired() pure returns (bool)
combineOptions
viewfunction combineOptions(uint32 _eid, uint16 _msgType, bytes _extraOptions) view returns (bytes)
decimalConversionRate
viewfunction decimalConversionRate() view returns (uint256)
endpoint
viewfunction endpoint() view returns (address)
enforcedOptions
viewfunction enforcedOptions(uint32 eid, uint16 msgType) view returns (bytes enforcedOption)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes, address _sender) view returns (bool)
isPeer
viewfunction isPeer(uint32 _eid, bytes32 _peer) view returns (bool)
msgInspector
viewfunction msgInspector() view returns (address)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oApp
viewfunction oApp() view returns (address)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
oftVersion
purefunction oftVersion() pure returns (bytes4 interfaceId, uint64 version)
owner
viewfunction owner() view returns (address)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
preCrime
viewfunction preCrime() view returns (address)
quoteOFT
viewfunction quoteOFT(tuple _sendParam) view returns (tuple oftLimit, tuple[] oftFeeDetails, tuple oftReceipt)
quoteSend
viewfunction quoteSend(tuple _sendParam, bool _payInLzToken) view returns (tuple msgFee)
SEND_AND_CALL
viewfunction SEND_AND_CALL() view returns (uint16)
SEND
viewfunction SEND() view returns (uint16)
sharedDecimals
viewfunction sharedDecimals() view returns (uint8)
token
viewfunction token() view returns (address)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
lzReceiveAndRevert
payablefunction lzReceiveAndRevert(tuple[] _packets) payable
lzReceiveSimulate
payablefunction lzReceiveSimulate(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
renounceOwnership
nonpayablefunction renounceOwnership()
send
payablefunction send(tuple _sendParam, tuple _fee, address _refundAddress) payable returns (tuple msgReceipt, tuple oftReceipt)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setEnforcedOptions
nonpayablefunction setEnforcedOptions(tuple[] _enforcedOptions)
setMsgInspector
nonpayablefunction setMsgInspector(address _msgInspector)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setPreCrime
nonpayablefunction setPreCrime(address _preCrime)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
EnforcedOptionSet
event EnforcedOptionSet((uint32 eid, uint16 msgType, bytes options)[] _enforcedOptions)
MsgInspectorSet
event MsgInspectorSet(address inspector)
OFTReceived
event OFTReceived(bytes32 indexed guid, uint32 srcEid, address indexed toAddress, uint256 amountReceivedLD)
OFTSent
event OFTSent(bytes32 indexed guid, uint32 dstEid, address indexed fromAddress, uint256 amountSentLD, uint256 amountReceivedLD)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
PreCrimeSet
event PreCrimeSet(address preCrimeAddress)
errors
AmountSDOverflowed
error AmountSDOverflowed(uint256 amountSD)
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidLocalDecimals
error InvalidLocalDecimals()
InvalidOptions
error InvalidOptions(bytes options)
LzTokenUnavailable
error LzTokenUnavailable()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OnlySelf
error OnlySelf()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
SimulationResult
error SimulationResult(bytes result)
SlippageExceeded
error SlippageExceeded(uint256 amountLD, uint256 minAmountLD)
creation bytecode
0x60e060405234801561000f575f5ffd5b50604051614ce5380380614ce58339818101604052810190610031919061040f565b8282828273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801561007d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906100a19190610495565b8282818181818a5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610118575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161010f91906104cf565b60405180910390fd5b610127816102e860201b60201c565b508173ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036101c1576040517fb586360400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60805173ffffffffffffffffffffffffffffffffffffffff1663ca5eb5e1826040518263ffffffff1660e01b81526004016101fc91906104cf565b5f604051808303815f87803b158015610213575f5ffd5b505af1158015610225573d5f5f3e3d5ffd5b505050505050505061023b6103a960201b60201c565b60ff168360ff16101561027a576040517f1e9714b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6102886103a960201b60201c565b836102939190610515565b600a61029f9190610681565b60a081815250505050508273ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff16815250505050505050506106cb565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f6006905090565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6103de826103b5565b9050919050565b6103ee816103d4565b81146103f8575f5ffd5b50565b5f81519050610409816103e5565b92915050565b5f5f5f60608486031215610426576104256103b1565b5b5f610433868287016103fb565b9350506020610444868287016103fb565b9250506040610455868287016103fb565b9150509250925092565b5f60ff82169050919050565b6104748161045f565b811461047e575f5ffd5b50565b5f8151905061048f8161046b565b92915050565b5f602082840312156104aa576104a96103b1565b5b5f6104b784828501610481565b91505092915050565b6104c9816103d4565b82525050565b5f6020820190506104e25f8301846104c0565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61051f8261045f565b915061052a8361045f565b9250828203905060ff811115610543576105426104e8565b5b92915050565b5f8160011c9050919050565b5f5f8291508390505b600185111561059e5780860481111561057a576105796104e8565b5b60018516156105895780820291505b808102905061059785610549565b945061055e565b94509492505050565b5f826105b65760019050610671565b816105c3575f9050610671565b81600181146105d957600281146105e357610612565b6001915050610671565b60ff8411156105f5576105f46104e8565b5b8360020a91508482111561060c5761060b6104e8565b5b50610671565b5060208310610133831016604e8410600b84101617156106475782820a905083811115610642576106416104e8565b5b610671565b6106548484846001610555565b9250905081840481111561066b5761066a6104e8565b5b81810290505b9392505050565b5f819050919050565b5f61068b82610678565b91506106968361045f565b92506106c37fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff84846105a7565b905092915050565b60805160a05160c0516145956107505f395f818161140901528181611e76015261208501525f8181610d7501528181611d6e01528181611d8f01528181611e330152611f7601525f81816109a701528181610c49015281816111fc015281816115cb01528181611945015281816121060152818161235b015261245301526145955ff3fe6080604052600436106101ed575f3560e01c806382413eac1161010c578063bc70b3541161009f578063d045a0dc1161006e578063d045a0dc146106ec578063d424388514610708578063f2fde38b14610730578063fc0c546a14610758578063ff7bd03d14610782576101ed565b8063bc70b3541461063b578063bd815db014610677578063c7c7f5b314610693578063ca5eb5e1146106c4576101ed565b80639f68b964116100db5780639f68b96414610583578063b731ea0a146105ad578063b98bd070146105d7578063bb0b6a53146105ff576101ed565b806382413eac146104c9578063857749b0146105055780638da5cb5b1461052f578063963efcaa14610559576101ed565b80633b6f743b116101845780635e280f11116101535780635e280f11146104255780636fc1b31e1461044f578063715018a6146104775780637d25a05e1461048d576101ed565b80633b6f743b1461034757806352ae2879146103835780635535d461146103ad5780635a0dfe4d146103e9576101ed565b8063156a0d0f116101c0578063156a0d0f1461029f57806317442b70146102ca5780631f5e1334146102f55780633400288b1461031f576101ed565b80630d35b415146101f1578063111ecdad1461022f57806313137d6514610259578063134d4f2514610275575b5f5ffd5b3480156101fc575f5ffd5b50610217600480360381019061021291906125fc565b6107be565b60405161022693929190612832565b60405180910390f35b34801561023a575f5ffd5b50610243610969565b60405161025091906128ad565b60405180910390f35b610273600480360381019061026e91906129a2565b61098e565b005b348015610280575f5ffd5b50610289610aae565b6040516102969190612a75565b60405180910390f35b3480156102aa575f5ffd5b506102b3610ab3565b6040516102c1929190612aea565b60405180910390f35b3480156102d5575f5ffd5b506102de610ae0565b6040516102ec929190612b11565b60405180910390f35b348015610300575f5ffd5b50610309610aee565b6040516103169190612a75565b60405180910390f35b34801561032a575f5ffd5b5061034560048036038101906103409190612b71565b610af3565b005b348015610352575f5ffd5b5061036d60048036038101906103689190612be4565b610b09565b60405161037a9190612c6b565b60405180910390f35b34801561038e575f5ffd5b50610397610b71565b6040516103a491906128ad565b60405180910390f35b3480156103b8575f5ffd5b506103d360048036038101906103ce9190612cae565b610b78565b6040516103e09190612d3e565b60405180910390f35b3480156103f4575f5ffd5b5061040f600480360381019061040a9190612b71565b610c1e565b60405161041c9190612d6d565b60405180910390f35b348015610430575f5ffd5b50610439610c47565b6040516104469190612de1565b60405180910390f35b34801561045a575f5ffd5b5061047560048036038101906104709190612dfa565b610c6b565b005b348015610482575f5ffd5b5061048b610ced565b005b348015610498575f5ffd5b506104b360048036038101906104ae9190612b71565b610d00565b6040516104c09190612e25565b60405180910390f35b3480156104d4575f5ffd5b506104ef60048036038101906104ea9190612e3e565b610d0a565b6040516104fc9190612d6d565b60405180910390f35b348015610510575f5ffd5b50610519610d44565b6040516105269190612eca565b60405180910390f35b34801561053a575f5ffd5b50610543610d4c565b60405161055091906128ad565b60405180910390f35b348015610564575f5ffd5b5061056d610d73565b60405161057a9190612ef2565b60405180910390f35b34801561058e575f5ffd5b50610597610d97565b6040516105a49190612d6d565b60405180910390f35b3480156105b8575f5ffd5b506105c1610d9f565b6040516105ce91906128ad565b60405180910390f35b3480156105e2575f5ffd5b506105fd60048036038101906105f89190612f60565b610dc4565b005b34801561060a575f5ffd5b5061062560048036038101906106209190612fab565b610de5565b6040516106329190612fe5565b60405180910390f35b348015610646575f5ffd5b50610661600480360381019061065c9190612ffe565b610dfa565b60405161066e9190612d3e565b60405180910390f35b610691600480360381019061068c91906130c4565b610ffc565b005b6106ad60048036038101906106a8919061312d565b6111cb565b6040516106bb929190613224565b60405180910390f35b3480156106cf575f5ffd5b506106ea60048036038101906106e59190612dfa565b6111f2565b005b610706600480360381019061070191906129a2565b611283565b005b348015610713575f5ffd5b5061072e60048036038101906107299190612dfa565b611300565b005b34801561073b575f5ffd5b5061075660048036038101906107519190612dfa565b611382565b005b348015610763575f5ffd5b5061076c611406565b60405161077991906128ad565b60405180910390f35b34801561078d575f5ffd5b506107a860048036038101906107a3919061324b565b61142d565b6040516107b59190612d6d565b60405180910390f35b6107c6612539565b60606107d0612551565b5f5f90505f3073ffffffffffffffffffffffffffffffffffffffff1663fc0c546a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561081e573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610842919061328a565b73ffffffffffffffffffffffffffffffffffffffff166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561088a573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108ae91906132df565b905060405180604001604052808381526020018281525094505f67ffffffffffffffff8111156108e1576108e061330a565b5b60405190808252806020026020018201604052801561091a57816020015b610907612569565b8152602001906001900390816108ff5790505b5093505f5f610943886040013589606001358a5f01602081019061093e9190612fab565b61146a565b915091506040518060400160405280838152602001828152509450505050509193909250565b60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff167f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1614610a1e57336040517f91ac5e4f000000000000000000000000000000000000000000000000000000008152600401610a1591906128ad565b60405180910390fd5b8660200135610a3d885f016020810190610a389190612fab565b6114c9565b14610a9657865f016020810190610a549190612fab565b87602001356040517fc26bebcc000000000000000000000000000000000000000000000000000000008152600401610a8d929190613346565b60405180910390fd5b610aa58787878787878761153a565b50505050505050565b600281565b5f5f7f02e49c2c000000000000000000000000000000000000000000000000000000006001915091509091565b5f5f60016002915091509091565b600181565b610afb6116c4565b610b05828261174b565b5050565b610b11612582565b5f610b3684604001358560600135865f016020810190610b319190612fab565b61146a565b9150505f5f610b4586846117aa565b91509150610b66865f016020810190610b5e9190612fab565b83838861193b565b935050505092915050565b5f30905090565b6003602052815f5260405f20602052805f5260405f205f91509150508054610b9f9061339a565b80601f0160208091040260200160405190810160405280929190818152602001828054610bcb9061339a565b8015610c165780601f10610bed57610100808354040283529160200191610c16565b820191905f5260205f20905b815481529060010190602001808311610bf957829003601f168201915b505050505081565b5f8160015f8563ffffffff1663ffffffff1681526020019081526020015f205414905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b610c736116c4565b8060045f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d441419781604051610ce291906128ad565b60405180910390a150565b610cf56116c4565b610cfe5f611a1c565b565b5f5f905092915050565b5f3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16149050949350505050565b5f6006905090565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b5f6001905090565b60025f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610dcc6116c4565b610de1828290610ddc91906135fb565b611add565b5050565b6001602052805f5260405f205f915090505481565b60605f60035f8763ffffffff1663ffffffff1681526020019081526020015f205f8661ffff1661ffff1681526020019081526020015f208054610e3c9061339a565b80601f0160208091040260200160405190810160405280929190818152602001828054610e689061339a565b8015610eb35780601f10610e8a57610100808354040283529160200191610eb3565b820191905f5260205f20905b815481529060010190602001808311610e9657829003601f168201915b505050505090505f815103610f0e5783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050915050610ff4565b5f8484905003610f215780915050610ff4565b60028484905010610fb557610f7884848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611bf5565b8084846002908092610f8c93929190613617565b604051602001610f9e939291906136af565b604051602081830303815290604052915050610ff4565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610feb929190613700565b60405180910390fd5b949350505050565b5f5f90505b8282905081101561111e57368383838181106110205761101f613722565b5b9050602002810190611032919061375b565b9050611057815f015f01602081019061104b9190612fab565b825f0160200135610c1e565b6110615750611111565b3073ffffffffffffffffffffffffffffffffffffffff1663d045a0dc8260c00135835f018460a001358580610100019061109b9190613783565b8760e00160208101906110ae9190612dfa565b888061012001906110bf9190613783565b6040518963ffffffff1660e01b81526004016110e197969594939291906138b8565b5f604051808303818588803b1580156110f8575f5ffd5b505af115801561110a573d5f5f3e3d5ffd5b5050505050505b8080600101915050611001565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611167573d5f5f3e3d5ffd5b505050506040513d5f823e3d601f19601f8201168201806040525081019061118f9190613989565b6040517f8351eea70000000000000000000000000000000000000000000000000000000081526004016111c29190612d3e565b60405180910390fd5b6111d361259a565b6111db612551565b6111e6858585611c4e565b91509150935093915050565b6111fa6116c4565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ca5eb5e1826040518263ffffffff1660e01b815260040161125391906128ad565b5f604051808303815f87803b15801561126a575f5ffd5b505af115801561127c573d5f5f3e3d5ffd5b5050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146112e8576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6112f787878787878787611d53565b50505050505050565b6113086116c4565b8060025f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c24277608160405161137791906128ad565b60405180910390a150565b61138a6116c4565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036113fa575f6040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081526004016113f191906128ad565b60405180910390fd5b61140381611a1c565b50565b5f7f0000000000000000000000000000000000000000000000000000000000000000905090565b5f816020013560015f845f0160208101906114489190612fab565b63ffffffff1663ffffffff1681526020019081526020015f2054149050919050565b5f5f61147585611d6b565b9150819050838110156114c15780846040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004016114b89291906139d0565b60405180910390fd5b935093915050565b5f5f60015f8463ffffffff1663ffffffff1681526020019081526020015f205490505f5f1b810361153157826040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815260040161152891906139f7565b60405180910390fd5b80915050919050565b5f61154d6115488787611dca565b611df4565b90505f61157d826115666115618a8a611dff565b611e30565b8b5f0160208101906115789190612fab565b611e6e565b90506115898787611ec4565b15611657575f6115c78a60400160208101906115a59190613a10565b8b5f0160208101906115b79190612fab565b846115c28c8c611ed7565b611f39565b90507f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16637cb59012848b5f856040518563ffffffff1660e01b81526004016116289493929190613a74565b5f604051808303815f87803b15801561163f575f5ffd5b505af1158015611651573d5f5f3e3d5ffd5b50505050505b8173ffffffffffffffffffffffffffffffffffffffff16887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c8b5f0160208101906116a29190612fab565b846040516116b1929190613abe565b60405180910390a3505050505050505050565b6116cc611f6b565b73ffffffffffffffffffffffffffffffffffffffff166116ea610d4c565b73ffffffffffffffffffffffffffffffffffffffff16146117495761170d611f6b565b6040517f118cdaa700000000000000000000000000000000000000000000000000000000815260040161174091906128ad565b60405180910390fd5b565b8060015f8463ffffffff1663ffffffff1681526020019081526020015f20819055507f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b828260405161179e929190613346565b60405180910390a15050565b6060805f61181685602001356117bf86611f72565b878060a001906117cf9190613783565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050611ffa565b80925081945050505f8161182b57600161182e565b60025b905061185b865f0160208101906118459190612fab565b828880608001906118569190613783565b610dfa565b92505f60045f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614611931578073ffffffffffffffffffffffffffffffffffffffff1663043a78eb86866040518363ffffffff1660e01b81526004016118f0929190613ae5565b602060405180830381865afa15801561190b573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061192f9190613b2e565b505b5050509250929050565b611943612582565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff16815260200161199f896114c9565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016119d4929190613c2a565b6040805180830381865afa1580156119ee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611a129190613ca5565b9050949350505050565b5f5f5f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f5f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f5f90505b8151811015611bba57611b12828281518110611b0157611b00613722565b5b602002602001015160400151611bf5565b818181518110611b2557611b24613722565b5b60200260200101516040015160035f848481518110611b4757611b46613722565b5b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611b7f57611b7e613722565b5b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611bac9190613e67565b508080600101915050611ae2565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051611bea919061404d565b60405180910390a150565b5f60028201519050600361ffff168161ffff1614611c4a57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401611c419190612d3e565b60405180910390fd5b5050565b611c5661259a565b611c5e612551565b5f5f611c8533886040013589606001358a5f016020810190611c809190612fab565b612068565b915091505f5f611c9589846117aa565b91509150611cc7895f016020810190611cae9190612fab565b83838b803603810190611cc191906140ce565b8b6120d3565b955060405180604001604052808581526020018481525094503373ffffffffffffffffffffffffffffffffffffffff16865f01517f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a8b5f016020810190611d2e9190612fab565b8787604051611d3f939291906140f9565b60405180910390a350505050935093915050565b611d628787878787878761153a565b50505050505050565b5f7f00000000000000000000000000000000000000000000000000000000000000007f000000000000000000000000000000000000000000000000000000000000000083611db99190614188565b611dc391906141b8565b9050919050565b5f82825f90602060ff1692611de193929190613617565b90611dec9190614203565b905092915050565b5f815f1c9050919050565b5f8282602060ff1690602860ff1692611e1a93929190613617565b90611e25919061428c565b60c01c905092915050565b5f7f00000000000000000000000000000000000000000000000000000000000000008267ffffffffffffffff16611e6791906141b8565b9050919050565b5f611eba84847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166121e99092919063ffffffff16565b8290509392505050565b5f602860ff168383905011905092915050565b60608282602860ff16908092611eef93929190613617565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f82011690508083019250505050505050905092915050565b606084848484604051602001611f529493929190614372565b6040516020818303038152906040529050949350505050565b5f33905090565b5f5f7f000000000000000000000000000000000000000000000000000000000000000083611fa09190614188565b905067ffffffffffffffff8016811115611ff157806040517fe2ce9413000000000000000000000000000000000000000000000000000000008152600401611fe89190612ef2565b60405180910390fd5b80915050919050565b60605f5f83511190508061202f57848460405160200161201b9291906143db565b60405160208183030381529060405261205e565b848461203a33612268565b8560405160200161204e9493929190614406565b6040516020818303038152906040525b9150935093915050565b5f5f61207585858561146a565b80925081935050506120ca8630847f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16612289909392919063ffffffff16565b94509492505050565b6120db61259a565b5f6120e8845f015161230b565b90505f84602001511115612104576121038460200151612358565b5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a450826040518060a001604052808b63ffffffff1681526020016121618c6114c9565b81526020018a81526020018981526020015f8960200151111515815250866040518463ffffffff1660e01b815260040161219c929190613c2a565b60806040518083038185885af11580156121b8573d5f5f3e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906121dd91906144d8565b91505095945050505050565b612263838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb858560405160240161221c929190614503565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061249e565b505050565b5f8173ffffffffffffffffffffffffffffffffffffffff165f1b9050919050565b612305848573ffffffffffffffffffffffffffffffffffffffff166323b872dd8686866040516024016122be9392919061452a565b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505061249e565b50505050565b5f81341461235057346040517f9f7041200000000000000000000000000000000000000000000000000000000081526004016123479190612ef2565b60405180910390fd5b819050919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123e6919061328a565b90505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361244d576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61249a337f0000000000000000000000000000000000000000000000000000000000000000848473ffffffffffffffffffffffffffffffffffffffff16612289909392919063ffffffff16565b5050565b5f5f60205f8451602086015f885af1806124bd576040513d5f823e3d81fd5b3d92505f519150505f82146124d65760018114156124f1565b5f8473ffffffffffffffffffffffffffffffffffffffff163b145b1561253357836040517f5274afe700000000000000000000000000000000000000000000000000000000815260040161252a91906128ad565b60405180910390fd5b50505050565b60405180604001604052805f81526020015f81525090565b60405180604001604052805f81526020015f81525090565b60405180604001604052805f8152602001606081525090565b60405180604001604052805f81526020015f81525090565b60405180606001604052805f81526020015f67ffffffffffffffff1681526020016125c3612582565b81525090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f60e082840312156125f3576125f26125da565b5b81905092915050565b5f60208284031215612611576126106125d2565b5b5f82013567ffffffffffffffff81111561262e5761262d6125d6565b5b61263a848285016125de565b91505092915050565b5f819050919050565b61265581612643565b82525050565b604082015f82015161266f5f85018261264c565b506020820151612682602085018261264c565b50505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f819050919050565b6126c3816126b1565b82525050565b5f81519050919050565b5f82825260208201905092915050565b8281835e5f83830152505050565b5f601f19601f8301169050919050565b5f61270b826126c9565b61271581856126d3565b93506127258185602086016126e3565b61272e816126f1565b840191505092915050565b5f604083015f83015161274e5f8601826126ba565b50602083015184820360208601526127668282612701565b9150508091505092915050565b5f61277e8383612739565b905092915050565b5f602082019050919050565b5f61279c82612688565b6127a68185612692565b9350836020820285016127b8856126a2565b805f5b858110156127f357848403895281516127d48582612773565b94506127df83612786565b925060208a019950506001810190506127bb565b50829750879550505050505092915050565b604082015f8201516128195f85018261264c565b50602082015161282c602085018261264c565b50505050565b5f60a0820190506128455f83018661265b565b81810360408301526128578185612792565b90506128666060830184612805565b949350505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f6128978261286e565b9050919050565b6128a78161288d565b82525050565b5f6020820190506128c05f83018461289e565b92915050565b5f606082840312156128db576128da6125da565b5b81905092915050565b5f819050919050565b6128f6816128e4565b8114612900575f5ffd5b50565b5f81359050612911816128ed565b92915050565b5f5ffd5b5f5ffd5b5f5ffd5b5f5f83601f84011261293857612937612917565b5b8235905067ffffffffffffffff8111156129555761295461291b565b5b6020830191508360018202830111156129715761297061291f565b5b9250929050565b6129818161288d565b811461298b575f5ffd5b50565b5f8135905061299c81612978565b92915050565b5f5f5f5f5f5f5f60e0888a0312156129bd576129bc6125d2565b5b5f6129ca8a828b016128c6565b97505060606129db8a828b01612903565b965050608088013567ffffffffffffffff8111156129fc576129fb6125d6565b5b612a088a828b01612923565b955095505060a0612a1b8a828b0161298e565b93505060c088013567ffffffffffffffff811115612a3c57612a3b6125d6565b5b612a488a828b01612923565b925092505092959891949750929550565b5f61ffff82169050919050565b612a6f81612a59565b82525050565b5f602082019050612a885f830184612a66565b92915050565b5f7fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612ac281612a8e565b82525050565b5f67ffffffffffffffff82169050919050565b612ae481612ac8565b82525050565b5f604082019050612afd5f830185612ab9565b612b0a6020830184612adb565b9392505050565b5f604082019050612b245f830185612adb565b612b316020830184612adb565b9392505050565b5f63ffffffff82169050919050565b612b5081612b38565b8114612b5a575f5ffd5b50565b5f81359050612b6b81612b47565b92915050565b5f5f60408385031215612b8757612b866125d2565b5b5f612b9485828601612b5d565b9250506020612ba585828601612903565b9150509250929050565b5f8115159050919050565b612bc381612baf565b8114612bcd575f5ffd5b50565b5f81359050612bde81612bba565b92915050565b5f5f60408385031215612bfa57612bf96125d2565b5b5f83013567ffffffffffffffff811115612c1757612c166125d6565b5b612c23858286016125de565b9250506020612c3485828601612bd0565b9150509250929050565b604082015f820151612c525f85018261264c565b506020820151612c65602085018261264c565b50505050565b5f604082019050612c7e5f830184612c3e565b92915050565b612c8d81612a59565b8114612c97575f5ffd5b50565b5f81359050612ca881612c84565b92915050565b5f5f60408385031215612cc457612cc36125d2565b5b5f612cd185828601612b5d565b9250506020612ce285828601612c9a565b9150509250929050565b5f81519050919050565b5f82825260208201905092915050565b5f612d1082612cec565b612d1a8185612cf6565b9350612d2a8185602086016126e3565b612d33816126f1565b840191505092915050565b5f6020820190508181035f830152612d568184612d06565b905092915050565b612d6781612baf565b82525050565b5f602082019050612d805f830184612d5e565b92915050565b5f819050919050565b5f612da9612da4612d9f8461286e565b612d86565b61286e565b9050919050565b5f612dba82612d8f565b9050919050565b5f612dcb82612db0565b9050919050565b612ddb81612dc1565b82525050565b5f602082019050612df45f830184612dd2565b92915050565b5f60208284031215612e0f57612e0e6125d2565b5b5f612e1c8482850161298e565b91505092915050565b5f602082019050612e385f830184612adb565b92915050565b5f5f5f5f60a08587031215612e5657612e556125d2565b5b5f612e63878288016128c6565b945050606085013567ffffffffffffffff811115612e8457612e836125d6565b5b612e9087828801612923565b93509350506080612ea38782880161298e565b91505092959194509250565b5f60ff82169050919050565b612ec481612eaf565b82525050565b5f602082019050612edd5f830184612ebb565b92915050565b612eec81612643565b82525050565b5f602082019050612f055f830184612ee3565b92915050565b5f5f83601f840112612f2057612f1f612917565b5b8235905067ffffffffffffffff811115612f3d57612f3c61291b565b5b602083019150836020820283011115612f5957612f5861291f565b5b9250929050565b5f5f60208385031215612f7657612f756125d2565b5b5f83013567ffffffffffffffff811115612f9357612f926125d6565b5b612f9f85828601612f0b565b92509250509250929050565b5f60208284031215612fc057612fbf6125d2565b5b5f612fcd84828501612b5d565b91505092915050565b612fdf816128e4565b82525050565b5f602082019050612ff85f830184612fd6565b92915050565b5f5f5f5f60608587031215613016576130156125d2565b5b5f61302387828801612b5d565b945050602061303487828801612c9a565b935050604085013567ffffffffffffffff811115613055576130546125d6565b5b61306187828801612923565b925092505092959194509250565b5f5f83601f84011261308457613083612917565b5b8235905067ffffffffffffffff8111156130a1576130a061291b565b5b6020830191508360208202830111156130bd576130bc61291f565b5b9250929050565b5f5f602083850312156130da576130d96125d2565b5b5f83013567ffffffffffffffff8111156130f7576130f66125d6565b5b6131038582860161306f565b92509250509250929050565b5f60408284031215613124576131236125da565b5b81905092915050565b5f5f5f60808486031215613144576131436125d2565b5b5f84013567ffffffffffffffff811115613161576131606125d6565b5b61316d868287016125de565b935050602061317e8682870161310f565b925050606061318f8682870161298e565b9150509250925092565b6131a2816128e4565b82525050565b6131b181612ac8565b82525050565b604082015f8201516131cb5f85018261264c565b5060208201516131de602085018261264c565b50505050565b608082015f8201516131f85f850182613199565b50602082015161320b60208501826131a8565b50604082015161321e60408501826131b7565b50505050565b5f60c0820190506132375f8301856131e4565b6132446080830184612805565b9392505050565b5f606082840312156132605761325f6125d2565b5b5f61326d848285016128c6565b91505092915050565b5f8151905061328481612978565b92915050565b5f6020828403121561329f5761329e6125d2565b5b5f6132ac84828501613276565b91505092915050565b6132be81612643565b81146132c8575f5ffd5b50565b5f815190506132d9816132b5565b92915050565b5f602082840312156132f4576132f36125d2565b5b5f613301848285016132cb565b91505092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b61334081612b38565b82525050565b5f6040820190506133595f830185613337565b6133666020830184612fd6565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806133b157607f821691505b6020821081036133c4576133c361336d565b5b50919050565b6133d3826126f1565b810181811067ffffffffffffffff821117156133f2576133f161330a565b5b80604052505050565b5f6134046125c9565b905061341082826133ca565b919050565b5f67ffffffffffffffff82111561342f5761342e61330a565b5b602082029050602081019050919050565b5f5ffd5b5f5ffd5b5f5ffd5b5f67ffffffffffffffff8211156134665761346561330a565b5b61346f826126f1565b9050602081019050919050565b828183375f83830152505050565b5f61349c6134978461344c565b6133fb565b9050828152602081018484840111156134b8576134b7613448565b5b6134c384828561347c565b509392505050565b5f82601f8301126134df576134de612917565b5b81356134ef84826020860161348a565b91505092915050565b5f6060828403121561350d5761350c613440565b5b61351760606133fb565b90505f61352684828501612b5d565b5f83015250602061353984828501612c9a565b602083015250604082013567ffffffffffffffff81111561355d5761355c613444565b5b613569848285016134cb565b60408301525092915050565b5f61358761358284613415565b6133fb565b905080838252602082019050602084028301858111156135aa576135a961291f565b5b835b818110156135f157803567ffffffffffffffff8111156135cf576135ce612917565b5b8086016135dc89826134f8565b855260208501945050506020810190506135ac565b5050509392505050565b5f613607368484613575565b905092915050565b5f5ffd5b5f5ffd5b5f5f8585111561362a5761362961360f565b5b8386111561363b5761363a613613565b5b6001850283019150848603905094509492505050565b5f81905092915050565b5f61366582612cec565b61366f8185613651565b935061367f8185602086016126e3565b80840191505092915050565b5f6136968385613651565b93506136a383858461347c565b82840190509392505050565b5f6136ba828661365b565b91506136c782848661368b565b9150819050949350505050565b5f6136df8385612cf6565b93506136ec83858461347c565b6136f5836126f1565b840190509392505050565b5f6020820190508181035f8301526137198184866136d4565b90509392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f5ffd5b5f5ffd5b5f5ffd5b5f82356001610140038336030381126137775761377661374f565b5b80830191505092915050565b5f5f8335600160200384360303811261379f5761379e61374f565b5b80840192508235915067ffffffffffffffff8211156137c1576137c0613753565b5b6020830192506001820236038313156137dd576137dc613757565b5b509250929050565b5f6137f36020840184612b5d565b905092915050565b61380481612b38565b82525050565b5f6138186020840184612903565b905092915050565b61382981612ac8565b8114613833575f5ffd5b50565b5f8135905061384481613820565b92915050565b5f6138586020840184613836565b905092915050565b606082016138705f8301836137e5565b61387c5f8501826137fb565b5061388a602083018361380a565b6138976020850182613199565b506138a5604083018361384a565b6138b260408501826131a8565b50505050565b5f60e0820190506138cb5f83018a613860565b6138d86060830189612fd6565b81810360808301526138eb8187896136d4565b90506138fa60a083018661289e565b81810360c083015261390d8184866136d4565b905098975050505050505050565b5f61392d6139288461344c565b6133fb565b90508281526020810184848401111561394957613948613448565b5b6139548482856126e3565b509392505050565b5f82601f8301126139705761396f612917565b5b815161398084826020860161391b565b91505092915050565b5f6020828403121561399e5761399d6125d2565b5b5f82015167ffffffffffffffff8111156139bb576139ba6125d6565b5b6139c78482850161395c565b91505092915050565b5f6040820190506139e35f830185612ee3565b6139f06020830184612ee3565b9392505050565b5f602082019050613a0a5f830184613337565b92915050565b5f60208284031215613a2557613a246125d2565b5b5f613a3284828501613836565b91505092915050565b5f819050919050565b5f613a5e613a59613a5484613a3b565b612d86565b612a59565b9050919050565b613a6e81613a44565b82525050565b5f608082019050613a875f83018761289e565b613a946020830186612fd6565b613aa16040830185613a65565b8181036060830152613ab38184612d06565b905095945050505050565b5f604082019050613ad15f830185613337565b613ade6020830184612ee3565b9392505050565b5f6040820190508181035f830152613afd8185612d06565b90508181036020830152613b118184612d06565b90509392505050565b5f81519050613b2881612bba565b92915050565b5f60208284031215613b4357613b426125d2565b5b5f613b5084828501613b1a565b91505092915050565b5f82825260208201905092915050565b5f613b7382612cec565b613b7d8185613b59565b9350613b8d8185602086016126e3565b613b96816126f1565b840191505092915050565b613baa81612baf565b82525050565b5f60a083015f830151613bc55f8601826137fb565b506020830151613bd86020860182613199565b5060408301518482036040860152613bf08282613b69565b91505060608301518482036060860152613c0a8282613b69565b9150506080830151613c1f6080860182613ba1565b508091505092915050565b5f6040820190508181035f830152613c428185613bb0565b9050613c51602083018461289e565b9392505050565b5f60408284031215613c6d57613c6c613440565b5b613c7760406133fb565b90505f613c86848285016132cb565b5f830152506020613c99848285016132cb565b60208301525092915050565b5f60408284031215613cba57613cb96125d2565b5b5f613cc784828501613c58565b91505092915050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302613d2c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613cf1565b613d368683613cf1565b95508019841693508086168417925050509392505050565b5f613d68613d63613d5e84612643565b612d86565b612643565b9050919050565b5f819050919050565b613d8183613d4e565b613d95613d8d82613d6f565b848454613cfd565b825550505050565b5f5f905090565b613dac613d9d565b613db7818484613d78565b505050565b5b81811015613dda57613dcf5f82613da4565b600181019050613dbd565b5050565b601f821115613e1f57613df081613cd0565b613df984613ce2565b81016020851015613e08578190505b613e1c613e1485613ce2565b830182613dbc565b50505b505050565b5f82821c905092915050565b5f613e3f5f1984600802613e24565b1980831691505092915050565b5f613e578383613e30565b9150826002028217905092915050565b613e7082612cec565b67ffffffffffffffff811115613e8957613e8861330a565b5b613e93825461339a565b613e9e828285613dde565b5f60209050601f831160018114613ecf575f8415613ebd578287015190505b613ec78582613e4c565b865550613f2e565b601f198416613edd86613cd0565b5f5b82811015613f0457848901518255600182019150602085019450602081019050613edf565b86831015613f215784890151613f1d601f891682613e30565b8355505b6001600288020188555050505b505050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b613f6881612a59565b82525050565b5f606083015f830151613f835f8601826137fb565b506020830151613f966020860182613f5f565b5060408301518482036040860152613fae8282613b69565b9150508091505092915050565b5f613fc68383613f6e565b905092915050565b5f602082019050919050565b5f613fe482613f36565b613fee8185613f40565b93508360208202850161400085613f50565b805f5b8581101561403b578484038952815161401c8582613fbb565b945061402783613fce565b925060208a01995050600181019050614003565b50829750879550505050505092915050565b5f6020820190508181035f8301526140658184613fda565b905092915050565b5f8135905061407b816132b5565b92915050565b5f6040828403121561409657614095613440565b5b6140a060406133fb565b90505f6140af8482850161406d565b5f8301525060206140c28482850161406d565b60208301525092915050565b5f604082840312156140e3576140e26125d2565b5b5f6140f084828501614081565b91505092915050565b5f60608201905061410c5f830186613337565b6141196020830185612ee3565b6141266040830184612ee3565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f61419282612643565b915061419d83612643565b9250826141ad576141ac61412e565b5b828204905092915050565b5f6141c282612643565b91506141cd83612643565b92508282026141db81612643565b915082820484148315176141f2576141f161415b565b5b5092915050565b5f82905092915050565b5f61420e83836141f9565b8261421981356128e4565b92506020821015614259576142547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff83602003600802613cf1565b831692505b505092915050565b5f7fffffffffffffffff00000000000000000000000000000000000000000000000082169050919050565b5f61429783836141f9565b826142a28135614261565b925060088210156142e2576142dd7fffffffffffffffff00000000000000000000000000000000000000000000000083600803600802613cf1565b831692505b505092915050565b5f8160c01b9050919050565b5f614300826142ea565b9050919050565b61431861431382612ac8565b6142f6565b82525050565b5f8160e01b9050919050565b5f6143348261431e565b9050919050565b61434c61434782612b38565b61432a565b82525050565b5f819050919050565b61436c61436782612643565b614352565b82525050565b5f61437d8287614307565b60088201915061438d828661433b565b60048201915061439d828561435b565b6020820191506143ad828461365b565b915081905095945050505050565b5f819050919050565b6143d56143d0826128e4565b6143bb565b82525050565b5f6143e682856143c4565b6020820191506143f68284614307565b6008820191508190509392505050565b5f61441182876143c4565b6020820191506144218286614307565b60088201915061443182856143c4565b602082019150614441828461365b565b915081905095945050505050565b5f8151905061445d816128ed565b92915050565b5f8151905061447181613820565b92915050565b5f6080828403121561448c5761448b613440565b5b61449660606133fb565b90505f6144a58482850161444f565b5f8301525060206144b884828501614463565b60208301525060406144cc84828501613c58565b60408301525092915050565b5f608082840312156144ed576144ec6125d2565b5b5f6144fa84828501614477565b91505092915050565b5f6040820190506145165f83018561289e565b6145236020830184612ee3565b9392505050565b5f60608201905061453d5f83018661289e565b61454a602083018561289e565b6145576040830184612ee3565b94935050505056fea264697066735822122071b5d27ebe7ea19e91afcded0a353c16cf1c898cbc0bf454d852a279b3a48de264736f6c634300081e003300000000000000000000000059a529070fbb61e6d6c91f952ccb7f35c34cf8aa0000000000000000000000001a44076050125825900e736c501f859c50fe728c0000000000000000000000006969acca95b7fb9631a114085eeebd161ec19f25