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