UNPKG

@layerzerolabs/oft-alt-evm

Version:

LayerZero Labs reference EVM OmniChain Fungible Token (OFT) implementation

1 lines 237 kB
{"abi":[{"type":"constructor","inputs":[{"name":"_name","type":"string","internalType":"string"},{"name":"_symbol","type":"string","internalType":"string"},{"name":"_lzEndpoint","type":"address","internalType":"address"},{"name":"_delegate","type":"address","internalType":"address"}],"stateMutability":"nonpayable"},{"type":"function","name":"SEND","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"SEND_AND_CALL","inputs":[],"outputs":[{"name":"","type":"uint16","internalType":"uint16"}],"stateMutability":"view"},{"type":"function","name":"allowInitializePath","inputs":[{"name":"origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"allowance","inputs":[{"name":"owner","type":"address","internalType":"address"},{"name":"spender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"approvalRequired","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"approve","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"balanceOf","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"buildMsgAndOptions","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_amountToCreditLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"message","type":"bytes","internalType":"bytes"},{"name":"options","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"combineOptions","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_msgType","type":"uint16","internalType":"uint16"},{"name":"_extraOptions","type":"bytes","internalType":"bytes"}],"outputs":[{"name":"","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"credit","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amountToCreditLD","type":"uint256","internalType":"uint256"},{"name":"_srcEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"debit","inputs":[{"name":"_amountToSendLD","type":"uint256","internalType":"uint256"},{"name":"_minAmountToCreditLD","type":"uint256","internalType":"uint256"},{"name":"_dstEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"amountDebitedLD","type":"uint256","internalType":"uint256"},{"name":"amountToCreditLD","type":"uint256","internalType":"uint256"}],"stateMutability":"nonpayable"},{"type":"function","name":"debitView","inputs":[{"name":"_amountToSendLD","type":"uint256","internalType":"uint256"},{"name":"_minAmountToCreditLD","type":"uint256","internalType":"uint256"},{"name":"_dstEid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"amountDebitedLD","type":"uint256","internalType":"uint256"},{"name":"amountToCreditLD","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimalConversionRate","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"decimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"endpoint","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract ILayerZeroEndpointV2"}],"stateMutability":"view"},{"type":"function","name":"enforcedOptions","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"}],"outputs":[{"name":"enforcedOption","type":"bytes","internalType":"bytes"}],"stateMutability":"view"},{"type":"function","name":"isComposeMsgSender","inputs":[{"name":"","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"","type":"bytes","internalType":"bytes"},{"name":"_sender","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPeer","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_peer","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lzReceive","inputs":[{"name":"_origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_executor","type":"address","internalType":"address"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReceiveAndRevert","inputs":[{"name":"_packets","type":"tuple[]","internalType":"struct InboundPacket[]","components":[{"name":"origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"receiver","type":"address","internalType":"address"},{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"value","type":"uint256","internalType":"uint256"},{"name":"executor","type":"address","internalType":"address"},{"name":"message","type":"bytes","internalType":"bytes"},{"name":"extraData","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"lzReceiveSimulate","inputs":[{"name":"_origin","type":"tuple","internalType":"struct Origin","components":[{"name":"srcEid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"}]},{"name":"_guid","type":"bytes32","internalType":"bytes32"},{"name":"_message","type":"bytes","internalType":"bytes"},{"name":"_executor","type":"address","internalType":"address"},{"name":"_extraData","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"mint","inputs":[{"name":"_to","type":"address","internalType":"address"},{"name":"_amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"msgInspector","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"name","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"nextNonce","inputs":[{"name":"","type":"uint32","internalType":"uint32"},{"name":"","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"nonce","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"oApp","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"oAppVersion","inputs":[],"outputs":[{"name":"senderVersion","type":"uint64","internalType":"uint64"},{"name":"receiverVersion","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"oftVersion","inputs":[],"outputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"},{"name":"version","type":"uint64","internalType":"uint64"}],"stateMutability":"pure"},{"type":"function","name":"owner","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"peers","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}],"outputs":[{"name":"peer","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"preCrime","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"quoteOFT","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]}],"outputs":[{"name":"oftLimit","type":"tuple","internalType":"struct OFTLimit","components":[{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"maxAmountLD","type":"uint256","internalType":"uint256"}]},{"name":"oftFeeDetails","type":"tuple[]","internalType":"struct OFTFeeDetail[]","components":[{"name":"feeAmountLD","type":"int256","internalType":"int256"},{"name":"description","type":"string","internalType":"string"}]},{"name":"oftReceipt","type":"tuple","internalType":"struct OFTReceipt","components":[{"name":"amountSentLD","type":"uint256","internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"quoteSend","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_payInLzToken","type":"bool","internalType":"bool"}],"outputs":[{"name":"msgFee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}],"stateMutability":"view"},{"type":"function","name":"removeDust","inputs":[{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountLD","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"renounceOwnership","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"send","inputs":[{"name":"_sendParam","type":"tuple","internalType":"struct SendParam","components":[{"name":"dstEid","type":"uint32","internalType":"uint32"},{"name":"to","type":"bytes32","internalType":"bytes32"},{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"},{"name":"extraOptions","type":"bytes","internalType":"bytes"},{"name":"composeMsg","type":"bytes","internalType":"bytes"},{"name":"oftCmd","type":"bytes","internalType":"bytes"}]},{"name":"_fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]},{"name":"_refundAddress","type":"address","internalType":"address"}],"outputs":[{"name":"msgReceipt","type":"tuple","internalType":"struct MessagingReceipt","components":[{"name":"guid","type":"bytes32","internalType":"bytes32"},{"name":"nonce","type":"uint64","internalType":"uint64"},{"name":"fee","type":"tuple","internalType":"struct MessagingFee","components":[{"name":"nativeFee","type":"uint256","internalType":"uint256"},{"name":"lzTokenFee","type":"uint256","internalType":"uint256"}]}]},{"name":"oftReceipt","type":"tuple","internalType":"struct OFTReceipt","components":[{"name":"amountSentLD","type":"uint256","internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","internalType":"uint256"}]}],"stateMutability":"payable"},{"type":"function","name":"setDelegate","inputs":[{"name":"_delegate","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setEnforcedOptions","inputs":[{"name":"_enforcedOptions","type":"tuple[]","internalType":"struct EnforcedOptionParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"},{"name":"options","type":"bytes","internalType":"bytes"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMsgInspector","inputs":[{"name":"_msgInspector","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPeer","inputs":[{"name":"_eid","type":"uint32","internalType":"uint32"},{"name":"_peer","type":"bytes32","internalType":"bytes32"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPreCrime","inputs":[{"name":"_preCrime","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"sharedDecimals","inputs":[],"outputs":[{"name":"","type":"uint8","internalType":"uint8"}],"stateMutability":"view"},{"type":"function","name":"symbol","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"toLD","inputs":[{"name":"_amountSD","type":"uint64","internalType":"uint64"}],"outputs":[{"name":"amountLD","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"toSD","inputs":[{"name":"_amountLD","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"amountSD","type":"uint64","internalType":"uint64"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"totalSupply","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"transfer","inputs":[{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferFrom","inputs":[{"name":"from","type":"address","internalType":"address"},{"name":"to","type":"address","internalType":"address"},{"name":"value","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"nonpayable"},{"type":"function","name":"transferOwnership","inputs":[{"name":"newOwner","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"Approval","inputs":[{"name":"owner","type":"address","indexed":true,"internalType":"address"},{"name":"spender","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EnforcedOptionSet","inputs":[{"name":"_enforcedOptions","type":"tuple[]","indexed":false,"internalType":"struct EnforcedOptionParam[]","components":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"msgType","type":"uint16","internalType":"uint16"},{"name":"options","type":"bytes","internalType":"bytes"}]}],"anonymous":false},{"type":"event","name":"MsgInspectorSet","inputs":[{"name":"inspector","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"OFTReceived","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"srcEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"toAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amountReceivedLD","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OFTSent","inputs":[{"name":"guid","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"dstEid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"fromAddress","type":"address","indexed":true,"internalType":"address"},{"name":"amountSentLD","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"amountReceivedLD","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"OwnershipTransferred","inputs":[{"name":"previousOwner","type":"address","indexed":true,"internalType":"address"},{"name":"newOwner","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"PeerSet","inputs":[{"name":"eid","type":"uint32","indexed":false,"internalType":"uint32"},{"name":"peer","type":"bytes32","indexed":false,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"PreCrimeSet","inputs":[{"name":"preCrimeAddress","type":"address","indexed":false,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Transfer","inputs":[{"name":"from","type":"address","indexed":true,"internalType":"address"},{"name":"to","type":"address","indexed":true,"internalType":"address"},{"name":"value","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"error","name":"ERC20InsufficientAllowance","inputs":[{"name":"spender","type":"address","internalType":"address"},{"name":"allowance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InsufficientBalance","inputs":[{"name":"sender","type":"address","internalType":"address"},{"name":"balance","type":"uint256","internalType":"uint256"},{"name":"needed","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"ERC20InvalidApprover","inputs":[{"name":"approver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidReceiver","inputs":[{"name":"receiver","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSender","inputs":[{"name":"sender","type":"address","internalType":"address"}]},{"type":"error","name":"ERC20InvalidSpender","inputs":[{"name":"spender","type":"address","internalType":"address"}]},{"type":"error","name":"InvalidDelegate","inputs":[]},{"type":"error","name":"InvalidEndpointCall","inputs":[]},{"type":"error","name":"InvalidLocalDecimals","inputs":[]},{"type":"error","name":"InvalidOptions","inputs":[{"name":"options","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"LzTokenUnavailable","inputs":[]},{"type":"error","name":"NativeTokenUnavailable","inputs":[]},{"type":"error","name":"NoPeer","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"}]},{"type":"error","name":"NotEnoughNative","inputs":[{"name":"msgValue","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OFTAltCore__msg_value_not_zero","inputs":[{"name":"_msg_value","type":"uint256","internalType":"uint256"}]},{"type":"error","name":"OnlyEndpoint","inputs":[{"name":"addr","type":"address","internalType":"address"}]},{"type":"error","name":"OnlyPeer","inputs":[{"name":"eid","type":"uint32","internalType":"uint32"},{"name":"sender","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"OnlySelf","inputs":[]},{"type":"error","name":"OwnableInvalidOwner","inputs":[{"name":"owner","type":"address","internalType":"address"}]},{"type":"error","name":"OwnableUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"}]},{"type":"error","name":"SafeERC20FailedOperation","inputs":[{"name":"token","type":"address","internalType":"address"}]},{"type":"error","name":"SimulationResult","inputs":[{"name":"result","type":"bytes","internalType":"bytes"}]},{"type":"error","name":"SlippageExceeded","inputs":[{"name":"amountLD","type":"uint256","internalType":"uint256"},{"name":"minAmountLD","type":"uint256","internalType":"uint256"}]}],"bytecode":{"object":"0x60c060405234801562000010575f80fd5b50604051620041a6380380620041a68339810160408190526200003391620002c2565b83838383838360128484818181818d6001600160a01b0381166200007057604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6200007b8162000191565b506001600160a01b038083166080528116620000aa57604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e1906024015f604051808303815f87803b158015620000ef575f80fd5b505af115801562000102573d5f803e3d5ffd5b50505050505050506200011a620001e060201b60201c565b60ff168360ff16101562000141576040516301e9714b60e41b815260040160405180910390fd5b6200014e60068462000360565b6200015b90600a6200047b565b60a052506008915062000171905083826200051c565b5060096200018082826200051c565b5050505050505050505050620005e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600690565b634e487b7160e01b5f52604160045260245ffd5b5f82601f83011262000209575f80fd5b81516001600160401b0380821115620002265762000226620001e5565b604051601f8301601f19908116603f01168101908282118183101715620002515762000251620001e5565b81604052838152602092508660208588010111156200026e575f80fd5b5f91505b8382101562000291578582018301518183018401529082019062000272565b5f602085830101528094505050505092915050565b80516001600160a01b0381168114620002bd575f80fd5b919050565b5f805f8060808587031215620002d6575f80fd5b84516001600160401b0380821115620002ed575f80fd5b620002fb88838901620001f9565b9550602087015191508082111562000311575f80fd5b506200032087828801620001f9565b9350506200033160408601620002a6565b91506200034160608601620002a6565b905092959194509250565b634e487b7160e01b5f52601160045260245ffd5b60ff82811682821603908111156200037c576200037c6200034c565b92915050565b600181815b80851115620003c257815f1904821115620003a657620003a66200034c565b80851615620003b457918102915b93841c939080029062000387565b509250929050565b5f82620003da575060016200037c565b81620003e857505f6200037c565b81600181146200040157600281146200040c576200042c565b60019150506200037c565b60ff8411156200042057620004206200034c565b50506001821b6200037c565b5060208310610133831016604e8410600b841016171562000451575081810a6200037c565b6200045d838362000382565b805f19048211156200047357620004736200034c565b029392505050565b5f6200048b60ff841683620003ca565b9392505050565b600181811c90821680620004a757607f821691505b602082108103620004c657634e487b7160e01b5f52602260045260245ffd5b50919050565b601f8211156200051757805f5260205f20601f840160051c81016020851015620004f35750805b601f840160051c820191505b8181101562000514575f8155600101620004ff565b50505b505050565b81516001600160401b03811115620005385762000538620001e5565b620005508162000549845462000492565b84620004cc565b602080601f83116001811462000586575f84156200056e5750858301515b5f19600386901b1c1916600185901b178555620005e0565b5f85815260208120601f198616915b82811015620005b65788860151825594840194600190910190840162000595565b5085821015620005d457878501515f19600388901b60f8161c191681555b505060018460011b0185555b505050505050565b60805160a051613b486200065e5f395f81816107f0015281816116e201528181611d200152611e9801525f818161069d01528181610be3015281816113640152818161181301528181611b1d0152818161247d015281816125560152818161264d0152818161267c01526127730152613b485ff3fe608060405260043610610319575f3560e01c8063715018a61161019c578063bb0b6a53116100e7578063d045a0dc11610092578063f01630231161006d578063f0163023146109ec578063f2fde38b14610a0b578063fc0c546a146105f2578063ff7bd03d14610a2a575f80fd5b8063d045a0dc14610969578063d42438851461097c578063dd62ed3e1461099b575f80fd5b8063c0779988116100c2578063c07799881461090a578063c7c7f5b314610929578063ca5eb5e11461094a575f80fd5b8063bb0b6a53146108ad578063bc70b354146108d8578063bd815db0146108f7575f80fd5b8063963efcaa11610147578063b3a5abeb11610122578063b3a5abeb14610843578063b731ea0a14610862578063b98bd0701461088e575f80fd5b8063963efcaa146107df5780639f68b96414610812578063a9059cbb14610824575f80fd5b8063857749b011610177578063857749b01461078f5780638da5cb5b146107a257806395d89b41146107cb575f80fd5b8063715018a61461071f5780637d25a05e1461073357806382413eac14610754575f80fd5b806323b872dd1161026757806352ae2879116102125780635a0dfe4d116101ed5780635a0dfe4d146106575780635e280f111461068c5780636fc1b31e146106bf57806370a08231146106de575f80fd5b806352ae2879146105f257806354f52414146106045780635535d46114610638575f80fd5b80633b6f743b116102425780633b6f743b1461058857806340c10f19146105b45780634dba701b146105d3575f80fd5b806323b872dd14610529578063313ce567146105485780633400288b14610569575f80fd5b806313137d65116102c757806317442b70116102a257806317442b70146104d657806318160ddd146104f75780631f5e133414610515575f80fd5b806313137d651461045a578063134d4f251461046f578063156a0d0f14610496575f80fd5b80630d35b415116102f75780630d35b415146103a35780630e78842c146103d1578063111ecdad14610409575f80fd5b8063056d62de1461031d57806306fdde0314610353578063095ea7b314610374575b5f80fd5b348015610328575f80fd5b5061033c61033736600461291f565b610a49565b60405161034a9291906129cc565b60405180910390f35b34801561035e575f80fd5b50610367610a62565b60405161034a91906129f0565b34801561037f575f80fd5b5061039361038e366004612a23565b610af2565b604051901515815260200161034a565b3480156103ae575f80fd5b506103c26103bd366004612a4d565b610b0b565b60405161034a93929190612a7f565b3480156103dc575f80fd5b506103f06103eb366004612b34565b610bd7565b60405167ffffffffffffffff909116815260200161034a565b348015610414575f80fd5b506004546104359073ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200161034a565b61046d610468366004612b99565b610be1565b005b34801561047a575f80fd5b50610483600281565b60405161ffff909116815260200161034a565b3480156104a1575f80fd5b50604080517f02e49c2c000000000000000000000000000000000000000000000000000000008152600160208201520161034a565b3480156104e1575f80fd5b506040805160018152600260208201520161034a565b348015610502575f80fd5b506007545b60405190815260200161034a565b348015610520575f80fd5b50610483600181565b348015610534575f80fd5b50610393610543366004612c32565b610ce0565b348015610553575f80fd5b5060125b60405160ff909116815260200161034a565b348015610574575f80fd5b5061046d610583366004612c88565b610d05565b348015610593575f80fd5b506105a76105a2366004612caf565b610d1b565b60405161034a9190612cfe565b3480156105bf575f80fd5b5061046d6105ce366004612a23565b610d7f565b3480156105de575f80fd5b506105076105ed366004612d15565b610d89565b3480156105fd575f80fd5b5030610435565b34801561060f575f80fd5b5061062361061e366004612d50565b610d9d565b6040805192835260208301919091520161034a565b348015610643575f80fd5b50610367610652366004612d8a565b610db8565b348015610662575f80fd5b50610393610671366004612c88565b63ffffffff919091165f908152600160205260409020541490565b348015610697575f80fd5b506104357f000000000000000000000000000000000000000000000000000000000000000081565b3480156106ca575f80fd5b5061046d6106d9366004612dbb565b610e5a565b3480156106e9575f80fd5b506105076106f8366004612dbb565b73ffffffffffffffffffffffffffffffffffffffff165f9081526005602052604090205490565b34801561072a575f80fd5b5061046d610edc565b34801561073e575f80fd5b506103f061074d366004612c88565b5f92915050565b34801561075f575f80fd5b5061039361076e366004612dd6565b73ffffffffffffffffffffffffffffffffffffffff81163014949350505050565b34801561079a575f80fd5b506006610557565b3480156107ad575f80fd5b505f5473ffffffffffffffffffffffffffffffffffffffff16610435565b3480156107d6575f80fd5b50610367610eef565b3480156107ea575f80fd5b506105077f000000000000000000000000000000000000000000000000000000000000000081565b34801561081d575f80fd5b505f610393565b34801561082f575f80fd5b5061039361083e366004612a23565b610efe565b34801561084e575f80fd5b5061050761085d366004612e4e565b610f0b565b34801561086d575f80fd5b506002546104359073ffffffffffffffffffffffffffffffffffffffff1681565b348015610899575f80fd5b5061046d6108a8366004612eaa565b610f15565b3480156108b8575f80fd5b506105076108c7366004612ee9565b60016020525f908152604090205481565b3480156108e3575f80fd5b506103676108f2366004612f02565b610f2f565b61046d610905366004612eaa565b6110e9565b348015610915575f80fd5b50610507610924366004612b34565b6112ad565b61093c610937366004612f5f565b6112b7565b60405161034a929190612fe6565b348015610955575f80fd5b5061046d610964366004612dbb565b611317565b61046d610977366004612b99565b6113be565b348015610987575f80fd5b5061046d610996366004612dbb565b611406565b3480156109a6575f80fd5b506105076109b5366004613038565b73ffffffffffffffffffffffffffffffffffffffff9182165f90815260066020908152604080832093909416825291909152205490565b3480156109f7575f80fd5b50610623610a06366004612d50565b611481565b348015610a16575f80fd5b5061046d610a25366004612dbb565b61148e565b348015610a35575f80fd5b50610393610a44366004613064565b6114f1565b606080610a568484611525565b915091505b9250929050565b606060088054610a719061307e565b80601f0160208091040260200160405190810160405280929190818152602001828054610a9d9061307e565b8015610ae85780601f10610abf57610100808354040283529160200191610ae8565b820191905f5260205f20905b815481529060010190602001808311610acb57829003601f168201915b5050505050905090565b5f33610aff818585611676565b60019150505b92915050565b604080518082019091525f80825260208201526060610b3b60405180604001604052805f81526020015f81525090565b6040805180820182525f80825267ffffffffffffffff602080840182905284518381529081019094529195509182610b95565b604080518082019091525f815260606020820152815260200190600190039081610b6e5790505b5093505f80610bb9604089013560608a0135610bb460208c018c612ee9565b611688565b60408051808201909152918252602082015296989597505050505050565b5f610b05826116dc565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163314610c57576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610c7190610c6c908a612ee9565b611707565b14610cc857610c836020880188612ee9565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610c4e565b610cd78787878787878761175b565b50505050505050565b5f33610ced8582856118ec565b610cf88585856119b9565b60019150505b9392505050565b610d0d611a62565b610d178282611ab4565b5050565b604080518082019091525f80825260208201525f610d4960408501356060860135610bb46020880188612ee9565b9150505f80610d588684611525565b9092509050610d75610d6d6020880188612ee9565b838388611b08565b9695505050505050565b610d178282611bf3565b5f610d95848484611c4d565b949350505050565b5f80610dab33868686611c81565b915091505b935093915050565b600360209081525f928352604080842090915290825290208054610ddb9061307e565b80601f0160208091040260200160405190810160405280929190818152602001828054610e079061307e565b8015610e525780601f10610e2957610100808354040283529160200191610e52565b820191905f5260205f20905b815481529060010190602001808311610e3557829003601f168201915b505050505081565b610e62611a62565b600480547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527ff0be4f1e87349231d80c36b33f9e8639658eeaf474014dee15a3e6a4d4414197906020015b60405180910390a150565b610ee4611a62565b610eed5f611ca6565b565b606060098054610a719061307e565b5f33610aff8185856119b9565b5f610b0582611d1a565b610f1d611a62565b610d17610f2a82846131d6565b611d4f565b63ffffffff84165f90815260036020908152604080832061ffff87168452909152812080546060929190610f629061307e565b80601f0160208091040260200160405190810160405280929190818152602001828054610f8e9061307e565b8015610fd95780601f10610fb057610100808354040283529160200191610fd9565b820191905f5260205f20905b815481529060010190602001808311610fbc57829003601f168201915b5050505050905080515f036110275783838080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929450610d959350505050565b5f839003611036579050610d95565b600283106110b35761107c84848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611e5092505050565b8061108a84600281886132df565b60405160200161109c93929190613306565b604051602081830303815290604052915050610d95565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610c4e929190613373565b5f5b818110156111ec573683838381811061110657611106613386565b905060200281019061111891906133b3565b905061114a61112a6020830183612ee9565b602083013563ffffffff919091165f908152600160205260409020541490565b61115457506111e4565b3063d045a0dc60c08301358360a08101356111736101008301836133ef565b611184610100890160e08a01612dbb565b6111926101208a018a6133ef565b6040518963ffffffff1660e01b81526004016111b49796959493929190613450565b5f604051808303818588803b1580156111cb575f80fd5b505af11580156111dd573d5f803e3d5ffd5b5050505050505b6001016110eb565b503373ffffffffffffffffffffffffffffffffffffffff16638e9e70996040518163ffffffff1660e01b81526004015f60405180830381865afa158015611235573d5f803e3d5ffd5b505050506040513d5f823e601f3d9081017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016820160405261127a91908101906134e3565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610c4e91906129f0565b5f610b0582611e95565b6112bf6128c5565b604080518082019091525f8082526020820152341561130c576040517f8036d4a3000000000000000000000000000000000000000000000000000000008152346004820152602401610c4e565b610dab858585611ecb565b61131f611a62565b6040517fca5eb5e100000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e1906024015f604051808303815f87803b1580156113a5575f80fd5b505af11580156113b7573d5f803e3d5ffd5b5050505050565b3330146113f7576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610cd787878787878787610cc8565b61140e611a62565b600280547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff83169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001610ed1565b5f80610dab858585611688565b611496611a62565b73ffffffffffffffffffffffffffffffffffffffff81166114e5576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401610c4e565b6114ee81611ca6565b50565b5f6020820180359060019083906115089086612ee9565b63ffffffff16815260208101919091526040015f20541492915050565b6060805f611580856020013561153a866116dc565b61154760a08901896133ef565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250611fc392505050565b90935090505f81611592576001611595565b60025b90506115b56115a76020880188612ee9565b826108f260808a018a6133ef565b60045490935073ffffffffffffffffffffffffffffffffffffffff16801561166c576040517f043a78eb00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff82169063043a78eb9061162b90889088906004016129cc565b602060405180830381865afa158015611646573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061166a919061354c565b505b5050509250929050565b6116838383836001612055565b505050565b5f8061169385611e95565b915081905083811015610db0576040517f71c4efed0000000000000000000000000000000000000000000000000000000081526004810182905260248101859052604401610c4e565b5f610b057f000000000000000000000000000000000000000000000000000000000000000083613594565b63ffffffff81165f9081526001602052604081205480610b05576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610c4e565b5f61176c611769878761219a565b90565b90505f611797826117856117808a8a6121b1565b611d1a565b61179260208d018d612ee9565b611c4d565b9050602886111561187d575f6117d36117b660608c0160408d01612e4e565b6117c360208d018d612ee9565b846117ce8c8c6121d3565b61221d565b6040517f7cb5901200000000000000000000000000000000000000000000000000000000815290915073ffffffffffffffffffffffffffffffffffffffff7f00000000000000000000000000000000000000000000000000000000000000001690637cb590129061184e9086908d905f9087906004016135cc565b5f604051808303815f87803b158015611865575f80fd5b505af1158015611877573d5f803e3d5ffd5b50505050505b73ffffffffffffffffffffffffffffffffffffffff8216887fefed6d3500546b29533b128a29e3a94d70788727f0507505ac12eaf2e578fd9c6118c360208d018d612ee9565b6040805163ffffffff9092168252602082018690520160405180910390a3505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8381165f908152600660209081526040808320938616835292905220547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146119b357818110156119a5576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610c4e565b6119b384848484035f612055565b50505050565b73ffffffffffffffffffffffffffffffffffffffff8316611a08576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610c4e565b73ffffffffffffffffffffffffffffffffffffffff8216611a57576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610c4e565b61168383838361224f565b5f5473ffffffffffffffffffffffffffffffffffffffff163314610eed576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401610c4e565b63ffffffff82165f81815260016020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b910160405180910390a15050565b604080518082019091525f80825260208201527f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663ddc28c586040518060a001604052808863ffffffff168152602001611b7789611707565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b8152600401611bac92919061360a565b6040805180830381865afa158015611bc6573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bea91906136db565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff8216611c42576040517fec442f050000000000000000000000000000000000000000000000000000000081525f6004820152602401610c4e565b610d175f838361224f565b5f73ffffffffffffffffffffffffffffffffffffffff8416611c6f5761dead93505b611c798484611bf3565b509092915050565b5f80611c8e858585611688565b9092509050611c9d86836123f6565b94509492505050565b5f805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f610b057f000000000000000000000000000000000000000000000000000000000000000067ffffffffffffffff84166136f5565b5f5b8151811015611e2057611d80828281518110611d6f57611d6f613386565b602002602001015160400151611e50565b818181518110611d9257611d92613386565b60200260200101516040015160035f848481518110611db357611db3613386565b60200260200101515f015163ffffffff1663ffffffff1681526020019081526020015f205f848481518110611dea57611dea613386565b60200260200101516020015161ffff1661ffff1681526020019081526020015f209081611e179190613750565b50600101611d51565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b67481604051610ed1919061386c565b600281015161ffff8116600314610d1757816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610c4e91906129f0565b5f7f0000000000000000000000000000000000000000000000000000000000000000611ec18184613594565b610b0591906136f5565b611ed36128c5565b604080518082019091525f80825260208201525f80611f0833604089013560608a0135611f0360208c018c612ee9565b611c81565b915091505f80611f188984611525565b9092509050611f44611f2d60208b018b612ee9565b8383611f3e368d90038d018d613913565b8b612450565b60408051808201909152858152602080820186905282519298509096503391907f85496b760a4b7f8d66384b9df21b381f5d1b1e79f229a47aaf4c232edc2fe59a90611f92908d018d612ee9565b6040805163ffffffff909216825260208201899052810187905260600160405180910390a350505050935093915050565b805160609015158061202457848460405160200161201092919091825260c01b7fffffffffffffffff00000000000000000000000000000000000000000000000016602082015260280190565b60405160208183030381529060405261204b565b8484338560405160200161203b9493929190613943565b6040516020818303038152906040525b9150935093915050565b73ffffffffffffffffffffffffffffffffffffffff84166120a4576040517fe602df050000000000000000000000000000000000000000000000000000000081525f6004820152602401610c4e565b73ffffffffffffffffffffffffffffffffffffffff83166120f3576040517f94280d620000000000000000000000000000000000000000000000000000000081525f6004820152602401610c4e565b73ffffffffffffffffffffffffffffffffffffffff8085165f90815260066020908152604080832093871683529290522082905580156119b3578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161218c91815260200190565b60405180910390a350505050565b5f6121a860208284866132df565b610cfe9161399b565b5f6121c06028602084866132df565b6121c9916139d7565b60c01c9392505050565b60606121e282602881866132df565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250929695505050505050565b6060848484846040516020016122369493929190613a1f565b6040516020818303038152906040529050949350505050565b73ffffffffffffffffffffffffffffffffffffffff8316612286578060075f82825461227b9190613a9c565b909155506123369050565b73ffffffffffffffffffffffffffffffffffffffff83165f908152600560205260409020548181101561230b576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610c4e565b73ffffffffffffffffffffffffffffffffffffffff84165f9081526005602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff821661235f5760078054829003905561238a565b73ffffffffffffffffffffffffffffffffffffffff82165f9081526005602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516123e991815260200190565b60405180910390a3505050565b73ffffffffffffffffffffffffffffffffffffffff8216612445576040517f96c6fd1e0000000000000000000000000000000000000000000000000000000081525f6004820152602401610c4e565b610d17825f8361224f565b6124586128c5565b825161246390612552565b5060208301511561247b5761247b8360200151612679565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16632637a4506040518060a001604052808963ffffffff1681526020016124d78a611707565b81526020018881526020018781526020015f8760200151111515815250846040518363ffffffff1660e01b815260040161251292919061360a565b6080604051808303815f875af115801561252e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d759190613aaf565b5f807f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e1758bd86040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906125e19190613af7565b905073ffffffffffffffffffffffffffffffffffffffff8116612630576040517f8dce522700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61267273ffffffffffffffffffffffffffffffffffffffff8216337f000000000000000000000000000000000000000000000000000000000000000086612794565b5090919050565b5f7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1663e4fe1d946040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e3573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127079190613af7565b905073ffffffffffffffffffffffffffffffffffffffff8116612756576040517f5373352a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d1773ffffffffffffffffffffffffffffffffffffffff8216337f0000000000000000000000000000000000000000000000000000000000000000855b6040805173ffffffffffffffffffffffffffffffffffffffff8581166024830152841660448201526064808201849052825180830390910181526084909101909152602080820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f23b872dd0000000000000000000000000000000000000000000000000000000017815282516119b393889390925f9283929183919082885af180612845576040513d5f823e3d81fd5b50505f513d9150811561285c578060011415612876565b73ffffffffffffffffffffffffffffffffffffffff84163b155b156119b3576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610c4e565b60405180606001604052805f80191681526020015f67ffffffffffffffff16815260200161290460405180604001604052805f81526020015f81525090565b905290565b5f60e08284031215612919575f80fd5b50919050565b5f8060408385031215612930575f80fd5b823567ffffffffffffffff811115612946575f80fd5b61295285828601612909565b95602094909401359450505050565b5f5b8381101561297b578181015183820152602001612963565b50505f910152565b5f815180845261299a816020860160208601612961565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b604081525f6129de6040830185612983565b8281036020840152611bea8185612983565b602081525f610cfe6020830184612983565b73ffffffffffffffffffffffffffffffffffffffff811681146114ee575f80fd5b5f8060408385031215612a34575f80fd5b8235612a3f81612a02565b946020939093013593505050565b5f60208284031215612a5d575f80fd5b813567ffffffffffffffff811115612a73575f80fd5b610d9584828501612909565b83518152602080850151908201525f60a08201604060a0604085015281865180845260c08601915060c08160051b870101935060208089015f5b83811015612b16578887037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff40018552815180518852830151838801879052612b0387890182612983565b9750509382019390820190600101612ab9565b50508751606088015250505060208501516080850152509050610d95565b5f60208284031215612b44575f80fd5b5035919050565b5f60608284031215612919575f80fd5b5f8083601f840112612b6b575f80fd5b50813567ffffffffffffffff811115612b82575f80fd5b602083019150836020828501011115610a5b575f80fd5b5f805f805f805f60e0888a031215612baf575f80fd5b612bb98989612b4b565b965060608801359550608088013567ffffffffffffffff80821115612bdc575f80fd5b612be88b838c01612b5b565b909750955060a08a01359150612bfd82612a02565b90935060c08901359080821115612c12575f80fd5b50612c1f8a828b01612b5b565b989b979a50959850939692959293505050565b5f805f60608486031215612c44575f80fd5b8335612c4f81612a02565b92506020840135612c5f81612a02565b929592945050506040919091013590565b803563ffffffff81168114612c83575f80fd5b919050565b5f8060408385031215612c99575f80fd5b612a3f83612c70565b80151581146114ee575f80fd5b5f8060408385031215612cc0575f80fd5b823567ffffffffffffffff811115612cd6575f80fd5b612ce285828601612909565b9250506020830135612cf381612ca2565b809150509250929050565b815181526020808301519082015260408101610b05565b5f805f60608486031215612d27575f80fd5b8335612d3281612a02565b925060208401359150612d4760408501612c70565b90509250925092565b5f805f60608486031215612d62575f80fd5b8335925060208401359150612d4760408501612c70565b803561ffff81168114612c83575f80fd5b5f8060408385031215612d9b575f80fd5b612da483612c70565b9150612db260208401612d79565b90509250929050565b5f60208284031215612dcb575f80fd5b8135610cfe81612a02565b5f805f8060a08587031215612de9575f80fd5b612df38686612b4b565b9350606085013567ffffffffffffffff811115612e0e575f80fd5b612e1a87828801612b5b565b9094509250506080850135612e2e81612a02565b939692955090935050565b67ffffffffffffffff811681146114ee575f80fd5b5f60208284031215612e5e575f80fd5b8135610cfe81612e39565b5f8083601f840112612e79575f80fd5b50813567ffffffffffffffff811115612e90575f80fd5b6020830191508360208260051b8501011115610a5b575f80fd5b5f8060208385031215612ebb575f80fd5b823567ffffffffffffffff811115612ed1575f80fd5b612edd85828601612e69565b90969095509350505050565b5f60208284031215612ef9575f80fd5b610cfe82612c70565b5f805f8060608587031215612f15575f80fd5b612f1e85612c70565b9350612f2c60208601612d79565b9250604085013567ffffffffffffffff811115612f47575f80fd5b612f5387828801612b5b565b95989497509550505050565b5f805f8385036080811215612f72575f80fd5b843567ffffffffffffffff811115612f88575f80fd5b612f9487828801612909565b94505060407fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe082011215612fc6575f80fd5b506020840191506060840135612fdb81612a02565b809150509250925092565b5f60c0820190508351825267ffffffffffffffff60208501511660208301526040840151613021604084018280518252602090810151910152565b5082516080830152602083015160a0830152610cfe565b5f8060408385031215613049575f80fd5b823561305481612a02565b91506020830135612cf381612a02565b5f60608284031215613074575f80fd5b610cfe8383612b4b565b600181811c9082168061309257607f821691505b602082108103612919577f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040516060810167ffffffffffffffff81118282101715613119576131196130c9565b60405290565b6040805190810167ffffffffffffffff81118282101715613119576131196130c9565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016810167ffffffffffffffff8111