105.5k txs
875.4k calls
constructor
constructor(address _endpoint, address _owner, uint16 _queueCapacity)
functions
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
assetIds
viewfunction assetIds(address stargateImpl) view returns (uint16 assetId)
busQueues
viewfunction busQueues(uint32 dstEid) view returns (uint8 maxNumPassengers, uint80 busFare, uint80 busAndNativeDropFare, uint16 qLength, uint72 nextTicketId)
combineOptions
viewfunction combineOptions(uint32 _eid, uint16 _msgType, bytes _extraOptions) view returns (bytes)
endpoint
viewfunction endpoint() view returns (address)
enforcedOptions
viewfunction enforcedOptions(uint32 eid, uint16 msgType) view returns (bytes enforcedOption)
gasLimits
viewfunction gasLimits(uint32 eid) view returns (uint128 gasLimit, uint128 nativeDropGasLimit)
getPassengerHash
viewfunction getPassengerHash(uint32 _dstEid, uint16 _index) view returns (bytes32 hash)
getTransferGasLimit
viewfunction getTransferGasLimit() view returns (uint256)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes _message, address _sender) view returns (bool)
isPeer
viewfunction isPeer(uint32 _eid, bytes32 _peer) view returns (bool)
maxAssetId
viewfunction maxAssetId() view returns (uint16)
MSG_TYPE_BUS
viewfunction MSG_TYPE_BUS() view returns (uint8)
MSG_TYPE_TAXI
viewfunction MSG_TYPE_TAXI() view returns (uint8)
nativeDropAmounts
viewfunction nativeDropAmounts(uint32 dstEid) view returns (uint128 nativeDropAmount)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oApp
viewfunction oApp() view returns (address)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
owner
viewfunction owner() view returns (address)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
planner
viewfunction planner() view returns (address)
preCrime
viewfunction preCrime() view returns (address)
queueCapacity
viewfunction queueCapacity() view returns (uint16)
quoteDriveBus
viewfunction quoteDriveBus(uint32 _dstEid, bytes _passengers) view returns (tuple fee)
quoteFares
viewfunction quoteFares(uint32 _dstEid, uint8 _numPassengers) view returns (uint256 busFare, uint256 busAndNativeDropFare)
quoteRideBus
viewfunction quoteRideBus(uint32 _dstEid, bool _airdrop) view returns (tuple fee)
quoteTaxi
viewfunction quoteTaxi(tuple _params, bool _payInLzToken) view returns (tuple fee)
stargateImpls
viewfunction stargateImpls(uint16 assetId) view returns (address stargateImpl)
driveBus
payablefunction driveBus(uint32 _dstEid, bytes _passengers) payable returns (tuple receipt)
initializeBusQueueStorage
nonpayablefunction initializeBusQueueStorage(uint32[] _dstEids, uint16 _startSlot, uint16 _endSlot)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
lzReceiveAndRevert
payablefunction lzReceiveAndRevert(tuple[] _packets) payable
lzReceiveSimulate
payablefunction lzReceiveSimulate(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
renounceOwnership
nonpayablefunction renounceOwnership()
rideBus
nonpayablefunction rideBus(tuple _params) returns (tuple receipt, tuple ticket)
setAssetId
nonpayablefunction setAssetId(address _stargateImpl, uint16 _assetId)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setEnforcedOptions
nonpayablefunction setEnforcedOptions(tuple[] _enforcedOptions)
setFares
nonpayablefunction setFares(uint32 _dstEid, uint80 _busFare, uint80 _busAndNativeDropFare)
setGasLimit
nonpayablefunction setGasLimit(uint32 _eid, uint128 _gasLimit, uint128 _nativeDropGasLimit)
setMaxAssetId
nonpayablefunction setMaxAssetId(uint16 _maxAssetId)
setMaxNumPassengers
nonpayablefunction setMaxNumPassengers(uint32 _dstEid, uint8 _maxNumPassengers)
setNativeDropAmount
nonpayablefunction setNativeDropAmount(uint32 _dstEid, uint128 _nativeDropAmount)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setPlanner
nonpayablefunction setPlanner(address _planner)
setPreCrime
nonpayablefunction setPreCrime(address _preCrime)
setTransferGasLimit
nonpayablefunction setTransferGasLimit(uint256 _gasLimit)
taxi
payablefunction taxi(tuple _params, tuple _messagingFee, address _refundAddress) payable returns (tuple receipt)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AssetIdSet
event AssetIdSet(address stargateImpl, uint16 assetId)
BusDriven
event BusDriven(uint32 dstEid, uint72 startTicketId, uint8 numPassengers, bytes32 guid)
BusQueueStorageInitialized
event BusQueueStorageInitialized(uint32 dstEid, uint16 startSlot, uint16 endSlot)
BusRode
event BusRode(uint32 dstEid, uint72 ticketId, uint80 fare, bytes passenger)
EnforcedOptionSet
event EnforcedOptionSet((uint32 eid, uint16 msgType, bytes options)[] _enforcedOptions)
FaresSet
event FaresSet(uint32 dstEid, uint80 busFare, uint80 busAndNativeDropFare)
GasLimitSet
event GasLimitSet(uint32 eid, uint128 gasLimit, uint128 nativeDropGasLimit)
MaxAssetIdSet
event MaxAssetIdSet(uint16 maxAssetId)
MaxNumPassengersSet
event MaxNumPassengersSet(uint32 dstEid, uint8 maxNumPassengers)
NativeDropAmountSet
event NativeDropAmountSet(uint32 dstEid, uint128 nativeDropAmount)
NativeDropApplied
event NativeDropApplied(address receiver, uint128 amount)
NativeDropFailed
event NativeDropFailed(address receiver, uint128 amount)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
PlannerSet
event PlannerSet(address planner)
PreCrimeSet
event PreCrimeSet(address preCrimeAddress)
errors
Bus_InvalidFare
error Bus_InvalidFare(bool nativeDrop)
Bus_InvalidNumPassengers
error Bus_InvalidNumPassengers(uint8 numPassengers)
Bus_InvalidPassenger
error Bus_InvalidPassenger()
Bus_QueueFull
error Bus_QueueFull()
BusCodec_InvalidBusBytesLength
error BusCodec_InvalidBusBytesLength()
BusCodec_InvalidMessage
error BusCodec_InvalidMessage()
BusCodec_InvalidPassengersBytesLength
error BusCodec_InvalidPassengersBytesLength()
InvalidDelegate
error InvalidDelegate()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidOptions
error InvalidOptions(bytes options)
LzTokenUnavailable
error LzTokenUnavailable()
Messaging_InvalidAssetId
error Messaging_InvalidAssetId()
Messaging_InvalidEid
error Messaging_InvalidEid()
Messaging_InvalidMsgValue
error Messaging_InvalidMsgValue()
Messaging_InvalidQueueCapacity
error Messaging_InvalidQueueCapacity()
Messaging_MaxNumPassengersExceedsQueueCapacity
error Messaging_MaxNumPassengersExceedsQueueCapacity()
Messaging_NotEnoughPassengers
error Messaging_NotEnoughPassengers()
Messaging_Unauthorized
error Messaging_Unauthorized()
Messaging_Unavailable
error Messaging_Unavailable()
MessagingOptions_ZeroGasLimit
error MessagingOptions_ZeroGasLimit()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OnlySelf
error OnlySelf()
SimulationResult
error SimulationResult(bytes result)
TaxiCodec_InvalidMessage
error TaxiCodec_InvalidMessage()
Transfer_ApproveFailed
error Transfer_ApproveFailed()
Transfer_TransferFailed
error Transfer_TransferFailed()
creation bytecode
0x60e06040526108fc6001553480156200001757600080fd5b506040516200558d3803806200558d8339810160408190526200003a91620001fe565b8282818181816200004b3362000191565b6001600160a01b0380831660805281166200007957604051632d618d8160e21b815260040160405180910390fd5b60805160405163ca5eb5e160e01b81526001600160a01b0383811660048301529091169063ca5eb5e190602401600060405180830381600087803b158015620000c157600080fd5b505af1158015620000d6573d6000803e3d6000fd5b5050505050505050505060028161ffff16101562000107576040516327f53ac760e01b815260040160405180910390fd5b8061ffff1660a08161ffff16815250506080516001600160a01b031663416ecebf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000158573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200017e919062000252565b63ffffffff1660c0525062000281915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620001f957600080fd5b919050565b6000806000606084860312156200021457600080fd5b6200021f84620001e1565b92506200022f60208501620001e1565b9150604084015161ffff811681146200024757600080fd5b809150509250925092565b6000602082840312156200026557600080fd5b815163ffffffff811681146200027a57600080fd5b9392505050565b60805160a05160c05161528f620002fe6000396000610d5001526000818161087401528181610bc301528181610e3d0152818161104d0152818161146401528181611da901528181611ea60152611ee60152600081816104f101528181610c1a01528181611bb1015281816124500152612871015261528f6000f3fe60806040526004361061031e5760003560e01c806385afd453116101a5578063c239f1ad116100ec578063ee5ccf6a11610095578063fd6f05571161006f578063fd6f055714610af5578063fdee84ec14610b15578063ff6fb30014610b5d578063ff7bd03d14610b7057600080fd5b8063ee5ccf6a14610a35578063f2fde38b14610a55578063f8d50da614610a7557600080fd5b8063d4243885116100c6578063d4243885146109c4578063d8e8dbc7146109e4578063e4c572cc14610a1557600080fd5b8063c239f1ad1461097c578063ca5eb5e114610991578063d045a0dc146109b157600080fd5b8063917df23b1161014e578063bb0b6a5311610128578063bb0b6a531461091c578063bc70b35414610949578063bd815db01461096957600080fd5b8063917df23b146108a9578063b731ea0a146108dc578063b98bd070146108fc57600080fd5b80638da5cb5b1161017f5780638da5cb5b146108245780638f71f7dd1461084257806390fdb20c1461086257600080fd5b806385afd453146107b757806388543f0e146107e55780638c70830b1461080457600080fd5b80635e280f1111610269578063731dbe0c116102125780637d25a05e116101ec5780637d25a05e1461073b57806382413eac14610777578063826f1fb11461079757600080fd5b8063731dbe0c1461068657806375d2208c146106e65780637845ca231461070657600080fd5b80636763d689116102435780636763d689146105695780636ad9914d14610589578063715018a61461067157600080fd5b80635e280f11146104df5780635f6d9ae41461051357806364e4ac271461054957600080fd5b806332e4e363116102cb57806352ae2879116102a557806352ae28791461046f5780635535d461146104825780635a0dfe4d146104af57600080fd5b806332e4e363146103f05780633400288b1461042857806345655a161461044857600080fd5b80632b28b34e116102fc5780632b28b34e146103905780632dca2f51146103b05780633292cf02146103d057600080fd5b8063086431ec1461032357806313137d651461035957806317442b701461036e575b600080fd5b34801561032f57600080fd5b5061034361033e366004613d85565b610b90565b6040516103509190613dd8565b60405180910390f35b61036c610367366004613e1e565b610c18565b005b34801561037a57600080fd5b5060408051600181526002602082015201610350565b34801561039c57600080fd5b5061036c6103ab366004613ed7565b610d0a565b3480156103bc57600080fd5b5061036c6103cb366004613f1a565b610e33565b3480156103dc57600080fd5b506103436103eb366004613f79565b610f03565b3480156103fc57600080fd5b50600654610410906001600160a01b031681565b6040516001600160a01b039091168152602001610350565b34801561043457600080fd5b5061036c610443366004613fc7565b610f4c565b34801561045457600080fd5b5061045d600181565b60405160ff9091168152602001610350565b34801561047b57600080fd5b5030610410565b34801561048e57600080fd5b506104a261049d366004614003565b610f62565b604051610350919061407d565b3480156104bb57600080fd5b506104cf6104ca366004613fc7565b611007565b6040519015158152602001610350565b3480156104eb57600080fd5b506104107f000000000000000000000000000000000000000000000000000000000000000081565b34801561051f57600080fd5b5061041061052e366004614097565b6005602052600090815260409020546001600160a01b031681565b61055c610557366004613d85565b611026565b60405161035091906140e6565b34801561057557600080fd5b5061036c610584366004614114565b61111e565b34801561059557600080fd5b506106266105a436600461413e565b60096020526000908152604090205460ff81169069ffffffffffffffffffff61010082048116916b01000000000000000000000081049091169061ffff75010000000000000000000000000000000000000000008204169068ffffffffffffffffff770100000000000000000000000000000000000000000000009091041685565b6040805160ff96909616865269ffffffffffffffffffff9485166020870152929093169184019190915261ffff16606083015268ffffffffffffffffff16608082015260a001610350565b34801561067d57600080fd5b5061036c6111ad565b34801561069257600080fd5b506106c56106a136600461413e565b600a602052600090815260409020546fffffffffffffffffffffffffffffffff1681565b6040516fffffffffffffffffffffffffffffffff9091168152602001610350565b3480156106f257600080fd5b50610343610701366004614159565b6111c1565b34801561071257600080fd5b50610726610721366004613f1a565b61120b565b60408051928352602083019190915201610350565b34801561074757600080fd5b5061075e610756366004613fc7565b600092915050565b60405167ffffffffffffffff9091168152602001610350565b34801561078357600080fd5b506104cf610792366004614183565b611346565b3480156107a357600080fd5b5061036c6107b23660046141e9565b6113a7565b3480156107c357600080fd5b506107d76107d2366004614204565b61141c565b604051610350929190614216565b3480156107f157600080fd5b506001545b604051908152602001610350565b34801561081057600080fd5b5061036c61081f366004614254565b61153b565b34801561083057600080fd5b506000546001600160a01b0316610410565b34801561084e57600080fd5b5061036c61085d36600461426d565b611548565b34801561086e57600080fd5b506108967f000000000000000000000000000000000000000000000000000000000000000081565b60405161ffff9091168152602001610350565b3480156108b557600080fd5b506003546108969074010000000000000000000000000000000000000000900461ffff1681565b3480156108e857600080fd5b50600354610410906001600160a01b031681565b34801561090857600080fd5b5061036c6109173660046142ce565b61180a565b34801561092857600080fd5b506107f661093736600461413e565b60026020526000908152604090205481565b34801561095557600080fd5b506104a2610964366004614310565b611824565b61036c6109773660046142ce565b6119e5565b34801561098857600080fd5b5061045d600281565b34801561099d57600080fd5b5061036c6109ac3660046141e9565b611b71565b61036c6109bf366004613e1e565b611c10565b3480156109d057600080fd5b5061036c6109df3660046141e9565b611c58565b3480156109f057600080fd5b506108966109ff3660046141e9565b60046020526000908152604090205461ffff1681565b348015610a2157600080fd5b5061036c610a30366004614097565b611cc6565b348015610a4157600080fd5b5061036c610a50366004614371565b611d49565b348015610a6157600080fd5b5061036c610a703660046141e9565b611fe7565b348015610a8157600080fd5b50610acc610a9036600461413e565b6008602052600090815260409020546fffffffffffffffffffffffffffffffff8082169170010000000000000000000000000000000090041682565b604080516fffffffffffffffffffffffffffffffff938416815292909116602083015201610350565b348015610b0157600080fd5b5061036c610b103660046143cb565b612091565b348015610b2157600080fd5b506107f6610b30366004614003565b63ffffffff909116600090815260096020908152604080832061ffff909416835260019093019052205490565b61055c610b6b366004614405565b61212f565b348015610b7c57600080fd5b506104cf610b8b366004614466565b61217c565b604080518082019091526000808252602082015263ffffffff80851660009081526009602052604081209091610bed91907f000000000000000000000000000000000000000000000000000000000000000090879087906121b216565b9050600080610bfc87846123cd565b91509150610c0d878383600061243a565b979650505050505050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163314610c81576040517f91ac5e4f0000000000000000000000000000000000000000000000000000000081523360048201526024015b60405180910390fd5b60208701803590610c9b90610c96908a61413e565b612512565b14610cf257610cad602088018861413e565b6040517fc26bebcc00000000000000000000000000000000000000000000000000000000815263ffffffff909116600482015260208801356024820152604401610c78565b610d0187878787878787612567565b50505050505050565b6006546001600160a01b03163314610d4e576040517fc63aab2c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff168363ffffffff1603610db3576040517fa27dd10200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8084166000908152600960205260409020610dd7918490849061259316565b6040805163ffffffff8516815269ffffffffffffffffffff80851660208301528316918101919091527fd2245824774f1c2de21256e9fb34d9cc4633cf72c0952a82a996e45ad4df3c70906060015b60405180910390a1505050565b610e3b612603565b7f000000000000000000000000000000000000000000000000000000000000000061ffff168160ff1610610e9b576040517f31843b5600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b63ffffffff8083166000908152600960205260409020610ebd91839061267716565b6040805163ffffffff8416815260ff831660208201527ff9fa6c3c4dbf13c4a8348c3102ef22789aa450b81e492b853e93f9701e08958091015b60405180910390a15050565b6040805180820190915260008082526020820152600080610f23856126a6565b9092509050610f43610f3b604087016020880161413e565b83838761243a565b95945050505050565b610f54612603565b610f5e828261271d565b5050565b600760209081526000928352604080842090915290825290208054610f8690614482565b80601f0160208091040260200160405190810160405280929190818152602001828054610fb290614482565b8015610fff5780601f10610fd457610100808354040283529160200191610fff565b820191906000526020600020905b815481529060010190602001808311610fe257829003601f168201915b505050505081565b63ffffffff821660009081526002602052604090205481145b92915050565b61102e613ce0565b63ffffffff8085166000908152600960205260408120909161107791907f0000000000000000000000000000000000000000000000000000000000000000908790879061276b16565b905060008061108687846123cd565b915091506110ac8783836040518060400160405280348152602001600081525033612865565b835160208086015183516040805163ffffffff8e16815268ffffffffffffffffff9095169385019390935260ff909116838301526060830152519195507f1623f9ea59bd6f214c9571a892da012fc23534aa5906bef4ae8c5d15ee7d2d6e919081900360800190a15050509392505050565b611126612603565b63ffffffff82166000818152600a602090815260409182902080547fffffffffffffffffffffffffffffffff00000000000000000000000000000000166fffffffffffffffffffffffffffffffff86169081179091558251938452908301527f5b9fac6cf74b12ad67aa143075523ab25ca781b0f611c4897b31d1500f2ae9629101610ef7565b6111b5612603565b6111bf600061293e565b565b604080518082019091526000808252602082015263ffffffff80841660009081526009602052604090206111f79184906129a616565b69ffffffffffffffffffff16815292915050565b6000808260ff1660000361124b576040517fe3a9395200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061125b602b60ff86166144fe565b67ffffffffffffffff81111561127357611273614515565b6040519080825280601f01601f19166020018201604052801561129d576020820181803683370190505b50905060006112ae60008084612a2f565b905060006112bf8787600080612a61565b90508560ff166112d2888484600061243a565b516112dd9190614573565b63ffffffff88166000908152600a60205260408120549196509061131b908990899060ff8216906fffffffffffffffffffffffffffffffff16612a61565b90508660ff1661132e898584600061243a565b516113399190614573565b9450505050509250929050565b60006113528484612d6e565b1561139b5760006113638585612dd2565b50505061ffff81166000908152600560205260409020549091506001600160a01b0380851691160361139957600191505061139f565b505b5060005b949350505050565b6113af612603565b600680547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527f5767d79cd17d7554509a4dd59a5a7a9175c7e36466455d7b2fa4788228808579906020015b60405180910390a150565b611424613ce0565b604080518082019091526000815260606020820152600061144433612e77565b90506000611458604086016020870161413e565b905060008060006114f97f00000000000000000000000000000000000000000000000000000000000000008560405180608001604052808961ffff1681526020018c6040013581526020018c60600160208101906114b6919061459d565b67ffffffffffffffff1681526020016114d560a08e0160808f016145ba565b1515905263ffffffff808916600090815260096020526040902093929190612ed316565b60408051808201825268ffffffffffffffffff909416845260208401929092529089015169ffffffffffffffffffff9190911690529698969750505050505050565b611543612603565b600155565b611550612603565b8061ffff1660000361158e576040517fe447547600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035461ffff740100000000000000000000000000000000000000009091048116908216111561163757600380547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040519081527f8f1145f51954bc9512a08693182e170a57b63ca4f6acc321b87c526970f4c0179060200160405180910390a15b6001600160a01b0380831660009081526004602090815260408083205461ffff868116855260059093529220549116911681156116a85761ffff8216600090815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690555b6001600160a01b038116156116f6576001600160a01b038116600090815260046020526040902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001690555b6001600160a01b0384166117425761ffff8316600090815260056020526040902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690556117bf565b6001600160a01b038416600081815260046020908152604080832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00001661ffff891690811790915583526005909152902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001690911790555b604080516001600160a01b038616815261ffff851660208201527fac53470cf8e9e3d673caa7d47cd7db36c0d38cf37fc147c70c92bc0c1c4734f5910160405180910390a150505050565b611812612603565b610f5e61181f828461467a565b6130b8565b63ffffffff8416600090815260076020908152604080832061ffff8716845290915281208054606092919061185890614482565b80601f016020809104026020016040519081016040528092919081815260200182805461188490614482565b80156118d15780601f106118a6576101008083540402835291602001916118d1565b820191906000526020600020905b8154815290600101906020018083116118b457829003601f168201915b5050505050905080516000036119215783838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525092945061139f9350505050565b600083900361193157905061139f565b600283106119af5761197884848080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506131bf92505050565b806119868460028188614790565b604051602001611998939291906147ba565b60405160208183030381529060405291505061139f565b83836040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610c7892919061480d565b60005b81811015611ad75736838383818110611a0357611a03614821565b9050602002810190611a159190614850565b9050611a31611a27602083018361413e565b6020830135611007565b611a3b5750611acf565b3063d045a0dc60c08301358360a0810135611a5a61010083018361488e565b611a6b610100890160e08a016141e9565b611a796101208a018a61488e565b6040518963ffffffff1660e01b8152600401611a9b9796959493929190614931565b6000604051808303818588803b158015611ab457600080fd5b505af1158015611ac8573d6000803e3d6000fd5b5050505050505b6001016119e8565b50336001600160a01b0316638e9e70996040518163ffffffff1660e01b8152600401600060405180830381865afa158015611b16573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611b3e9190810190614988565b6040517f8351eea7000000000000000000000000000000000000000000000000000000008152600401610c78919061407d565b611b79612603565b6040517fca5eb5e10000000000000000000000000000000000000000000000000000000081526001600160a01b0382811660048301527f0000000000000000000000000000000000000000000000000000000000000000169063ca5eb5e190602401600060405180830381600087803b158015611bf557600080fd5b505af1158015611c09573d6000803e3d6000fd5b5050505050565b333014611c49576040517f14d4a4e800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d0187878787878787610cf2565b611c60612603565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0383169081179091556040519081527fd48d879cef83a1c0bdda516f27b13ddb1b3f8bbac1c9e1511bb2a659c242776090602001611411565b611cce612603565b600380547fffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff167401000000000000000000000000000000000000000061ffff8416908102919091179091556040519081527f8f1145f51954bc9512a08693182e170a57b63ca4f6acc321b87c526970f4c01790602001611411565b611d51612603565b60005b83811015611c0957600060096000878785818110611d7457611d74614821565b9050602002016020810190611d89919061413e565b63ffffffff1681526020810191909152604001600020805490915061ffff7f0000000000000000000000000000000000000000000000000000000000000000811691611e169175010000000000000000000000000000000000000000008204169068ffffffffffffffffff77010000000000000000000000000000000000000000000000909104166149f6565b68ffffffffffffffffff161115611e2d5750611fdf565b8054600090611e7f907501000000000000000000000000000000000000000000810461ffff169077010000000000000000000000000000000000000000000000900468ffffffffffffffffff166149f6565b905060008161ffff168661ffff161015611e995781611e9b565b855b90506000611eca60017f0000000000000000000000000000000000000000000000000000000000000000614a1f565b61ffff168661ffff161015611edf5785611f0a565b611f0a60017f0000000000000000000000000000000000000000000000000000000000000000614a1f565b9050815b8161ffff168161ffff1611611f675761ffff8116600090815260018601602052604090207f4600000000000000000000000000000000000000000000000000000000000000905580611f5f81614a3a565b915050611f0e565b507f68ae5a72b18bd3a6fbbc56d3cddb8a1c567b1d6ad4e705dd0b9295de05262bf4898987818110611f9b57611f9b614821565b9050602002016020810190611fb0919061413e565b6040805163ffffffff909216825261ffff808616602084015284169082015260600160405180910390a1505050505b600101611d54565b611fef612603565b6001600160a01b038116612085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610c78565b61208e8161293e565b50565b612099612603565b6040805180820182526fffffffffffffffffffffffffffffffff848116808352848216602080850182815263ffffffff8a16600081815260088452889020965191518616700100000000000000000000000000000000029190951617909455845192835292820152918201527fff958b7fbea293188b750425e92bd9c7a646f9063b9fc7722ae861802a7a1fe790606001610e26565b612137613ce0565b600080612143866126a6565b909250905061217261215b604088016020890161413e565b838361216c368a90038a018a614a5b565b88612865565b9695505050505050565b6000602082018035906002908390612194908661413e565b63ffffffff1681526020810191909152604001600020541492915050565b60408051608081018252600080825260208201819052918101829052606080820152906121df8484613204565b905060ff811615806121f85750855460ff908116908216115b80612223575085547501000000000000000000000000000000000000000000900461ffff1660ff8216115b1561225f576040517fc5ad74c700000000000000000000000000000000000000000000000000000000815260ff82166004820152602401610c78565b855477010000000000000000000000000000000000000000000000900468ffffffffffffffffff16600081156122cd578760010160008861ffff166001856122a79190614a8d565b6122b19190614aaf565b61ffff1661ffff168152602001908152602001600020546122d0565b60005b90506000806122e088888561325c565b9092509050600060016122f660ff8816876149f6565b6123009190614a8d565b905060018b01600061231661ffff8d1684614aaf565b61ffff1661ffff168152602001908152602001600020548214612365576040517f5b3f67cd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b68ffffffffffffffffff8516875260ff861660208089019190915260408051601f8b01839004830281018301909152898152908a908a90819084018382808284376000920191909152505050506060880152505060ff16604085015250919695505050505050565b63ffffffff82166000908152600a6020526040908190205490820151606083810151909283926fffffffffffffffffffffffffffffffff909116916124179160ff16908390612a2f565b9250612430858560200151866040015160ff1684612a61565b9150509250929050565b60408051808201909152600080825260208201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ddc28c586040518060a001604052808863ffffffff16815260200161249d89612512565b8152602001878152602001868152602001851515815250306040518363ffffffff1660e01b81526004016124d2929190614ad7565b6040805180830381865afa1580156124ee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f439190614b9e565b63ffffffff811660009081526002602052604081205480611020576040517ff6ff4fb700000000000000000000000000000000000000000000000000000000815263ffffffff84166004820152602401610c78565b612571858561331a565b15612587576125828787878761336a565b610d01565b610d01878787876135ea565b82547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010069ffffffffffffffffffff938416027fffffffffffffffffffffff00000000000000000000ffffffffffffffffffffff16176b0100000000000000000000009190921602179055565b6000546001600160a01b031633146111bf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610c78565b81547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660ff91909116179055565b60608060006126b433612e77565b90506126ee6126c660208601866141e9565b8260408701356126dc6080890160608a0161459d565b6126e960808a018a61488e565b6136a6565b9250612715612703604086016020870161413e565b61271060a087018761488e565b61374b565b915050915091565b63ffffffff8216600081815260026020908152604091829020849055815192835282018390527f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b9101610ef7565b604080516080810182526000808252602082018190529181019190915260608082015261279a858585856121b2565b6020810151865460ff90911661ffff750100000000000000000000000000000000000000000068ffffffffffffffffff77010000000000000000000000000000000000000000000000808604821685019091160276ffffffffffffffffffffffffffffffffffffffffffffff85168117829004831693909303909116027fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff90911674ffffffffffffffffffffffffffffffffffffffffff909216919091171790955550929392505050565b61286d613ce0565b82517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316632637a450826040518060a001604052808b63ffffffff1681526020016128bf8c612512565b81526020018a815260200189815260200160008960200151111515815250866040518463ffffffff1660e01b81526004016128fb929190614ad7565b60806040518083038185885af1158015612919573d6000803e3d6000fd5b50505050506040513d601f19601f82011682018060405250810190610c0d9190614bba565b600080546001600160a01b038381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000816129c5578254610100900469ffffffffffffffffffff166129e3565b82546b010000000000000000000000900469ffffffffffffffffffff165b90508069ffffffffffffffffffff16600003611020576040517f5bc181900000000000000000000000000000000000000000000000000000000081528215156004820152602401610c78565b60606002848484604051602001612a499493929190614c04565b60405160208183030381529060405290509392505050565b6060600080612a6f8761375a565b90925090506000612a9d612a9860ff89166fffffffffffffffffffffffffffffffff86166144fe565b6137ee565b90506000612ac0612a986fffffffffffffffffffffffffffffffff8816896144fe565b90506fffffffffffffffffffffffffffffffff811615612b0657612af9612a98886fffffffffffffffffffffffffffffffff86166144fe565b612b039083614c89565b91505b600080826fffffffffffffffffffffffffffffffff1611612bb9576040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e11000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085901b166024820152603401604051602081830303815290604052612c57565b6040517f0100000000000000000000000000000000000000000000000000000000000000602082018190527e21000000000000000000000000000000000000000000000000000000000000602183015260238201527fffffffffffffffffffffffffffffffff00000000000000000000000000000000608085811b8216602484015284901b1660348201526044016040516020818303038152906040525b63ffffffff8b16600090815260076020908152604080832060028452909152812080549293509091612c8890614482565b80601f0160208091040260200160405190810160405280929190818152602001828054612cb490614482565b8015612d015780601f10612cd657610100808354040283529160200191612d01565b820191906000526020600020905b815481529060010190602001808311612ce457829003601f168201915b505050505090506002815110612d3a578082604051602001612d24929190614cb2565b6040516020818303038152906040529650612d60565b600382604051602001612d4e929190614ce1565b60405160208183030381529060405296505b505050505050949350505050565b6000602b821015612dab576040517fde01ff2300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60018383600081612dbe57612dbe614821565b919091013560f81c91909114949350505050565b600080806060612de6600360018789614790565b612def91614d2c565b60f01c9350612e02602360038789614790565b612e0b91614d74565b9250612e1b602b60238789614790565b612e2491614d92565b60c01c9150612e3685602b8189614790565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152509699959850939650909450505050565b6001600160a01b03811660009081526004602052604081205461ffff1690819003612ece576040517f8b6fecb700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b8354600161ffff75010000000000000000000000000000000000000000008084048216928301821681027fffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffffff9094169390931780885568ffffffffffffffffff7701000000000000000000000000000000000000000000000082041690920192606092600092888116929091041610612f97576040517ffa36e2ba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612fa084613894565b9150612fb98460600151886129a690919063ffffffff16565b9050600068ffffffffffffffffff841615613012578760010160008861ffff166001870368ffffffffffffffffff1681612ff557612ff5614544565b0661ffff1661ffff16815260200190815260200160002054613015565b60005b9050808360405160200161302a929190614dd8565b604051602081830303815290604052805190602001208860010160008961ffff16876130569190614aaf565b61ffff1661ffff168152602001908152602001600020819055507f15955c5a4cc61b8fbb05301bce47fd31c0e6f935e1ab97fdac9b134c887bb074868584866040516130a59493929190614dfe565b60405180910390a1509450945094915050565b60005b815181101561318f576130ea8282815181106130d9576130d9614821565b6020026020010151604001516131bf565b8181815181106130fc576130fc614821565b6020026020010151604001516007600084848151811061311e5761311e614821565b60200260200101516000015163ffffffff1663ffffffff168152602001908152602001600020600084848151811061315857613158614821565b60200260200101516020015161ffff1661ffff16815260200190815260200160002090816131869190614e90565b506001016130bb565b507fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b674816040516114119190614f50565b600281015161ffff8116600314610f5e57816040517f9a6d49cd000000000000000000000000000000000000000000000000000000008152600401610c78919061407d565b600081613212602b82614ff9565b15613249576040517fbcbb94ef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61139f613257602b83614573565b61393a565b600081815b848110156133115736600087838861327a602b8361500d565b9261328793929190614790565b915091508382826040516020016132a093929190615020565b604051602081830303815290604052805190602001209350600082826001602b6132ca919061503a565b8181106132d9576132d9614821565b9091013560f81c60011491505080156132fa57856132f68161504d565b9650505b505050602b8161330a919061500d565b9050613261565b50935093915050565b60006021821015613357576040517fe907cd4f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60028383600081612dbe57612dbe614821565b600080600061337985856139cd565b9250925092506000836fffffffffffffffffffffffffffffffff161180156133bc57506133a6828461506c565b6fffffffffffffffffffffffffffffffff163414155b156133f3576040517f07098ab800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3460005b82518160ff1610156135c1576000838260ff168151811061341a5761341a614821565b6020026020010151905060006134338260000151613b4c565b90506000613442836020015190565b90506000876fffffffffffffffffffffffffffffffff16118015613467575082606001515b156135415761348a81886fffffffffffffffffffffffffffffffff166001613ba0565b156134ed57604080516001600160a01b03831681526fffffffffffffffffffffffffffffffff891660208201819052909603957f2d0eb51492ddbee9e95192a44349b114ecfdaacebba5e8aa735b12f14ab1affa910160405180910390a1613541565b604080516001600160a01b03831681526fffffffffffffffffffffffffffffffff891660208201527f4e2061832d78c1622b4b41b221d1791733ba77cd67e86bba10b3e61194d55eb2910160405180910390a15b816001600160a01b031663434def558d8d878588604001516040518663ffffffff1660e01b8152600401613579959493929190615098565b600060405180830381600087803b15801561359357600080fd5b505af11580156135a7573d6000803e3d6000fd5b5050505050505080806135b99061504d565b9150506133f7565b5080156135e0576006546135e0906001600160a01b0316826000613bc7565b5050505050505050565b6000806000806135fa8686612dd2565b9350935093509350600061360b8490565b9050600061361886613b4c565b6040517f203bd15f0000000000000000000000000000000000000000000000000000000081529091506001600160a01b0382169063203bd15f90613668908d908d9087908a908a906004016150de565b600060405180830381600087803b15801561368257600080fd5b505af1158015613696573d6000803e3d6000fd5b5050505050505050505050505050565b60606001868686856136ee5786868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061371c92505050565b6001600160a01b038b16878760405160200161370c93929190615020565b6040516020818303038152906040525b604051602001613730959493929190615123565b60405160208183030381529060405290509695505050505050565b606061139f8460018585611824565b63ffffffff811660009081526008602090815260408083208151808301909252546fffffffffffffffffffffffffffffffff80821680845270010000000000000000000000000000000090920416928201839052928390036137e8576040517fc960f36b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50915091565b60006fffffffffffffffffffffffffffffffff821115613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602760248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f32382062697473000000000000000000000000000000000000000000000000006064820152608401610c78565b5090565b60608160000151826020015183604001518460600151604051602001613924949392919060f09490941b7fffff000000000000000000000000000000000000000000000000000000000000168452600284019290925260c01b7fffffffffffffffff000000000000000000000000000000000000000000000000166022830152151560f81b602a820152602b0190565b6040516020818303038152906040529050919050565b600060ff821115613890576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602560248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203860448201527f20626974730000000000000000000000000000000000000000000000000000006064820152608401610c78565b6000806060836021811015613a0e576040517f262c503d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b613a1c601160018789614790565b613a25916151cd565b60801c9350613a38602160118789614790565b613a41916151cd565b60801c92506000602b613a5560218461503a565b613a5f9190614573565b90508067ffffffffffffffff811115613a7a57613a7a614515565b604051908082528060200260200182016040528015613acc57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181613a985790505b509250602160005b828160ff161015613b4157613b0289838a613af0602b8361500d565b92613afd93929190614790565b613c0d565b858260ff1681518110613b1757613b17614821565b6020908102919091010152613b2d602b8361500d565b915080613b398161504d565b915050613ad4565b505050509250925092565b61ffff81166000908152600560205260409020546001600160a01b031680612ece576040517f8b6fecb700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008082613bae575a613bb2565b6001545b9050600080600080878986f195945050505050565b613bd2838383613ba0565b613c08576040517f7c75c3d200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b604080516080810182526000808252602082018190529181018290526060810182905290613c3e6002828587614790565b613c4791614d2c565b60f01c90506000613c5c602260028688614790565b613c6591614d74565b90506000613c77602a60228789614790565b613c8091614d92565b60c01c90506000613c95602b602a888a614790565b613c9e91615213565b6040805160808101825261ffff969096168652602086019490945267ffffffffffffffff929092169284019290925260f81c6001146060830152509392505050565b604051806060016040528060008019168152602001600067ffffffffffffffff168152602001613d23604051806040016040528060008152602001600081525090565b905290565b803563ffffffff81168114612ece57600080fd5b60008083601f840112613d4e57600080fd5b50813567ffffffffffffffff811115613d6657600080fd5b602083019150836020828501011115613d7e57600080fd5b9250929050565b600080600060408486031215613d9a57600080fd5b613da384613d28565b9250602084013567ffffffffffffffff811115613dbf57600080fd5b613dcb86828701613d3c565b9497909650939450505050565b815181526020808301519082015260408101611020565b600060608284031215613e0157600080fd5b50919050565b80356001600160a01b0381168114612ece57600080fd5b600080600080600080600060e0888a031215613e3957600080fd5b613e438989613def565b965060608801359550608088013567ffffffffffffffff80821115613e6757600080fd5b613e738b838c01613d3c565b9097509550859150613e8760a08b01613e07565b945060c08a0135915080821115613e9d57600080fd5b50613eaa8a828b01613d3c565b989b979a50959850939692959293505050565b803569ffffffffffffffffffff81168114612ece57600080fd5b600080600060608486031215613eec57600080fd5b613ef584613d28565b9250613f0360208501613ebd565b9150613f1160408501613ebd565b90509250925092565b60008060408385031215613f2d57600080fd5b613f3683613d28565b9150602083013560ff81168114613f4c57600080fd5b809150509250929050565b600060c08284031215613e0157600080fd5b80358015158114612ece57600080fd5b60008060408385031215613f8c57600080fd5b823567ffffffffffffffff811115613fa357600080fd5b613faf85828601613f57565b925050613fbe60208401613f69565b90509250929050565b60008060408385031215613fda57600080fd5b613fe383613d28565b946020939093013593505050565b803561ffff81168114612ece57600080fd5b6000806040838503121561401657600080fd5b61401f83613d28565b9150613fbe60208401613ff1565b60005b83811015614048578181015183820152602001614030565b50506000910152565b6000815180845261406981602086016020860161402d565b601f01601f19169290920160200192915050565b6020815260006140906020830184614051565b9392505050565b6000602082840312156140a957600080fd5b61409082613ff1565b8051825267ffffffffffffffff60208201511660208301526040810151613c08604084018280518252602090810151910152565b6080810161102082846140b2565b80356fffffffffffffffffffffffffffffffff81168114612ece57600080fd5b6000806040838503121561412757600080fd5b61413083613d28565b9150613fbe602084016140f4565b60006020828403121561415057600080fd5b61409082613d28565b6000806040838503121561416c57600080fd5b61417583613d28565b9150613fbe60208401613f69565b60008060008060a0858703121561419957600080fd5b6141a38686613def565b9350606085013567ffffffffffffffff8111156141bf57600080fd5b6141cb87828801613d3c565b90945092506141de905060808601613e07565b905092959194509250565b6000602082840312156141fb57600080fd5b61409082613e07565b600060a08284031215613e0157600080fd5b61422081846140b2565b60a0608082015268ffffffffffffffffff82511660a082015260006020830151604060c0840152610f4360e0840182614051565b60006020828403121561426657600080fd5b5035919050565b6000806040838503121561428057600080fd5b61401f83613e07565b60008083601f84011261429b57600080fd5b50813567ffffffffffffffff8111156142b357600080fd5b6020830191508360208260051b8501011115613d7e57600080fd5b600080602083850312156142e157600080fd5b823567ffffffffffffffff8111156142f857600080fd5b61430485828601614289565b90969095509350505050565b6000806000806060858703121561432657600080fd5b61432f85613d28565b935061433d60208601613ff1565b9250604085013567ffffffffffffffff81111561435957600080fd5b61436587828801613d3c565b95989497509550505050565b6000806000806060858703121561438757600080fd5b843567ffffffffffffffff81111561439e57600080fd5b6143aa87828801614289565b90955093506143bd905060208601613ff1565b91506141de60408601613ff1565b6000806000606084860312156143e057600080fd5b6143e984613d28565b92506143f7602085016140f4565b9150613f11604085016140f4565b6000806000838503608081121561441b57600080fd5b843567ffffffffffffffff81111561443257600080fd5b61443e87828801613f57565b9450506040601f198201121561445357600080fd5b50602084019150613f1160608501613e07565b60006060828403121561447857600080fd5b6140908383613def565b600181811c9082168061449657607f821691505b602082108103613e01577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b8082028115828204841417611020576110206144cf565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60008261458257614582614544565b500490565b67ffffffffffffffff8116811461208e57600080fd5b6000602082840312156145af57600080fd5b813561409081614587565b6000602082840312156145cc57600080fd5b61409082613f69565b6040516060810167ffffffffffffffff811182821017156145f8576145f8614515565b60405290565b6040805190810167ffffffffffffffff811182821017156145f8576145f8614515565b604051601f8201601f1916810167ffffffffffffffff8111828210171561464a5761464a614515565b604052919050565b600067ffffffffffffffff82111561466c5761466c614515565b50601f01601f191660200190565b600067ffffffffffffffff8084111561469557614695614515565b8360051b60206146a6818301614621565b8681529185019181810190368411156146be57600080fd5b865b84811015614784578035868111156146d85760008081fd5b880160603682900312156146ec5760008081fd5b6146f46145d5565b6146fd82613d28565b815261470a868301613ff1565b86820152604080830135898111156147225760008081fd5b929092019136601f8401126147375760008081fd5b823561474a61474582614652565b614621565b818152368983870101111561475f5760008081fd5b818986018a8301376000918101890191909152908201528452509183019183016146c0565b50979650505050505050565b600080858511156147a057600080fd5b838611156147ad57600080fd5b5050820193919092039150565b600084516147cc81846020890161402d565b8201838582376000930192835250909392505050565b818352818160208501375060006020828401015260006020601f19601f840116840101905092915050565b60208152600061139f6020830184866147e2565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec183360301811261488457600080fd5b9190910192915050565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126148c357600080fd5b83018035915067ffffffffffffffff8211156148de57600080fd5b602001915036819003821315613d7e57600080fd5b63ffffffff61490182613d28565b16825260208101356020830152604081013561491c81614587565b67ffffffffffffffff81166040840152505050565b61493b81896148f3565b86606082015260e06080820152600061495860e0830187896147e2565b6001600160a01b03861660a084015282810360c084015261497a8185876147e2565b9a9950505050505050505050565b60006020828403121561499a57600080fd5b815167ffffffffffffffff8111156149b157600080fd5b8201601f810184136149c257600080fd5b80516149d061474582614652565b8181528560208385010111156149e557600080fd5b610f4382602083016020860161402d565b68ffffffffffffffffff818116838216019080821115614a1857614a186144cf565b5092915050565b61ffff828116828216039080821115614a1857614a186144cf565b600061ffff808316818103614a5157614a516144cf565b6001019392505050565b600060408284031215614a6d57600080fd5b614a756145fe565b82358152602083013560208201528091505092915050565b68ffffffffffffffffff828116828216039080821115614a1857614a186144cf565b600068ffffffffffffffffff80841680614acb57614acb614544565b92169190910692915050565b6040815263ffffffff8351166040820152602083015160608201526000604084015160a06080840152614b0d60e0840182614051565b905060608501517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08483030160a0850152614b488282614051565b60809690960151151560c08501525050506001600160a01b039190911660209091015290565b600060408284031215614b8057600080fd5b614b886145fe565b9050815181526020820151602082015292915050565b600060408284031215614bb057600080fd5b6140908383614b6e565b600060808284031215614bcc57600080fd5b614bd46145d5565b825181526020830151614be681614587565b6020820152614bf88460408501614b6e565b60408201529392505050565b7fff000000000000000000000000000000000000000000000000000000000000008560f81b16815260007fffffffffffffffffffffffffffffffff00000000000000000000000000000000808660801b166001840152808560801b166011840152508251614c7981602185016020870161402d565b9190910160210195945050505050565b6fffffffffffffffffffffffffffffffff818116838216019080821115614a1857614a186144cf565b60008351614cc481846020880161402d565b835190830190614cd881836020880161402d565b01949350505050565b7fffff0000000000000000000000000000000000000000000000000000000000008360f01b16815260008251614d1e81600285016020870161402d565b919091016002019392505050565b7fffff0000000000000000000000000000000000000000000000000000000000008135818116916002851015614d6c5780818660020360031b1b83161692505b505092915050565b8035602083101561102057600019602084900360031b1b1692915050565b7fffffffffffffffff0000000000000000000000000000000000000000000000008135818116916008851015614d6c5760089490940360031b84901b1690921692915050565b82815260008251614df081602085016020870161402d565b919091016020019392505050565b63ffffffff8516815268ffffffffffffffffff8416602082015269ffffffffffffffffffff831660408201526080606082015260006121726080830184614051565b601f821115613c08576000816000526020600020601f850160051c81016020861015614e695750805b601f850160051c820191505b81811015614e8857828155600101614e75565b505050505050565b815167ffffffffffffffff811115614eaa57614eaa614515565b614ebe81614eb88454614482565b84614e40565b602080601f831160018114614ef35760008415614edb5750858301515b600019600386901b1c1916600185901b178555614e88565b600085815260208120601f198616915b82811015614f2257888601518255948401946001909101908401614f03565b5085821015614f405787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b600060208083018184528085518083526040925060408601915060408160051b87010184880160005b83811015614feb578883037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc00185528151805163ffffffff1684528781015161ffff16888501528601516060878501819052614fd781860183614051565b968901969450505090860190600101614f79565b509098975050505050505050565b60008261500857615008614544565b500690565b80820180821115611020576110206144cf565b838152818360208301376000910160200190815292915050565b81810381811115611020576110206144cf565b600060ff821660ff8103615063576150636144cf565b60010192915050565b6fffffffffffffffffffffffffffffffff818116838216028082169190828114614d6c57614d6c6144cf565b60e081016150a682886148f3565b85606083015260ff851660808301526001600160a01b03841660a083015267ffffffffffffffff831660c08301529695505050505050565b6150e881876148f3565b8460608201526001600160a01b038416608082015267ffffffffffffffff831660a082015260e060c08201526000610c0d60e0830184614051565b7fff000000000000000000000000000000000000000000000000000000000000008660f81b1681527fffff0000000000000000000000000000000000000000000000000000000000008560f01b1660018201528360038201527fffffffffffffffff0000000000000000000000000000000000000000000000008360c01b166023820152600082516151bc81602b85016020870161402d565b91909101602b019695505050505050565b7fffffffffffffffffffffffffffffffff000000000000000000000000000000008135818116916010851015614d6c5760109490940360031b84901b1690921692915050565b7fff000000000000000000000000000000000000000000000000000000000000008135818116916001851015614d6c5760019490940360031b84901b169092169291505056fea26469706673582212204c1570096025a76a2e4ca153aea4e131278048f317a85384ee094b7ff1a7e86064736f6c634300081600330000000000000000000000001a44076050125825900e736c501f859c50fe728c0000000000000000000000004a79adc4539905376d339c69b6a7092d0598cc240000000000000000000000000000000000000000000000000000000000000200