0 txs
1 call
constructor
constructor()
functions
balances
viewfunction balances(bytes32 _asset, bytes32 _user) view returns (uint256 _amount)
callExecutor
viewfunction callExecutor() view returns (address)
DOMAIN
viewfunction DOMAIN() view returns (uint32)
EVERCLEAR
viewfunction EVERCLEAR() view returns (uint32)
FILL_INTENT_FOR_SOLVER_TYPEHASH
viewfunction FILL_INTENT_FOR_SOLVER_TYPEHASH() view returns (bytes32)
fillQueue
viewfunction fillQueue() view returns (uint256 first, uint256 last)
gateway
viewfunction gateway() view returns (address)
intentQueue
viewfunction intentQueue() view returns (uint256 first, uint256 last)
lighthouse
viewfunction lighthouse() view returns (address)
messageGasLimit
viewfunction messageGasLimit() view returns (uint256)
messageReceiver
viewfunction messageReceiver() view returns (address)
modules
viewfunction modules(uint8 _strategy) view returns (address _module)
nonce
viewfunction nonce() view returns (uint64)
nonces
viewfunction nonces(address owner) view returns (uint256)
owner
viewfunction owner() view returns (address)
paused
viewfunction paused() view returns (bool)
PERMIT2
viewfunction PERMIT2() view returns (address)
PROCESS_FILL_QUEUE_VIA_RELAYER_TYPEHASH
viewfunction PROCESS_FILL_QUEUE_VIA_RELAYER_TYPEHASH() view returns (bytes32)
PROCESS_INTENT_QUEUE_VIA_RELAYER_TYPEHASH
viewfunction PROCESS_INTENT_QUEUE_VIA_RELAYER_TYPEHASH() view returns (bytes32)
proxiableUUID
viewfunction proxiableUUID() view returns (bytes32)
status
viewfunction status(bytes32 _intentId) view returns (uint8 status)
strategies
viewfunction strategies(address _asset) view returns (uint8 _strategy)
UPGRADE_INTERFACE_VERSION
viewfunction UPGRADE_INTERFACE_VERSION() view returns (string)
watchtower
viewfunction watchtower() view returns (address)
deposit
nonpayablefunction deposit(address _asset, uint256 _amount)
executeIntentCalldata
nonpayablefunction executeIntentCalldata(tuple _intent)
fillIntent
nonpayablefunction fillIntent(tuple _intent, uint24 _fee) returns (tuple _fillMessage)
fillIntentForSolver
nonpayablefunction fillIntentForSolver(address _solver, tuple _intent, uint256 _nonce, uint24 _fee, bytes _signature) returns (tuple _fillMessage)
initialize
nonpayablefunction initialize(tuple _init)
newIntent
nonpayablefunction newIntent(uint32[] _destinations, address _receiver, address _inputAsset, address _outputAsset, uint256 _amount, uint24 _maxFee, uint48 _ttl, bytes _data, tuple _permit2Params) returns (bytes32 _intentId, tuple _intent)
newIntent
nonpayablefunction newIntent(uint32[] _destinations, address _receiver, address _inputAsset, address _outputAsset, uint256 _amount, uint24 _maxFee, uint48 _ttl, bytes _data) returns (bytes32 _intentId, tuple _intent)
newIntent
nonpayablefunction newIntent(uint32[] _destinations, bytes32 _receiver, address _inputAsset, bytes32 _outputAsset, uint256 _amount, uint24 _maxFee, uint48 _ttl, bytes _data) returns (bytes32 _intentId, tuple _intent)
pause
nonpayablefunction pause()
processFillQueue
payablefunction processFillQueue(uint32 _amount) payable
processFillQueueViaRelayer
nonpayablefunction processFillQueueViaRelayer(uint32 _domain, uint32 _amount, address _relayer, uint256 _ttl, uint256 _nonce, uint256 _bufferDBPS, bytes _signature)
processIntentQueue
payablefunction processIntentQueue(tuple[] _intents) payable
processIntentQueueViaRelayer
nonpayablefunction processIntentQueueViaRelayer(uint32 _domain, tuple[] _intents, address _relayer, uint256 _ttl, uint256 _nonce, uint256 _bufferDBPS, bytes _signature)
receiveMessage
nonpayablefunction receiveMessage(bytes)
renounceOwnership
nonpayablefunction renounceOwnership()
setModuleForStrategy
nonpayablefunction setModuleForStrategy(uint8 _strategy, address _module)
setStrategyForAsset
nonpayablefunction setStrategyForAsset(address _asset, uint8 _strategy)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
unpause
nonpayablefunction unpause()
updateGateway
nonpayablefunction updateGateway(address _newGateway)
updateMessageGasLimit
nonpayablefunction updateMessageGasLimit(uint256 _newGasLimit)
updateMessageReceiver
nonpayablefunction updateMessageReceiver(address _newMessageReceiver)
updateSecurityModule
nonpayablefunction updateSecurityModule(address _newSecurityModule)
upgradeToAndCall
payablefunction upgradeToAndCall(address newImplementation, bytes data) payable
withdraw
nonpayablefunction withdraw(address _asset, uint256 _amount)
events
AssetMintFailed
event AssetMintFailed(address indexed _asset, address indexed _recipient, uint256 _amount, uint8 _strategy)
AssetTransferFailed
event AssetTransferFailed(address indexed _asset, address indexed _recipient, uint256 _amount)
Deposited
event Deposited(address indexed _depositant, address indexed _asset, uint256 _amount)
ExternalCalldataExecuted
event ExternalCalldataExecuted(bytes32 indexed _intentId, bytes _returnData)
FillQueueProcessed
event FillQueueProcessed(bytes32 indexed _messageId, uint256 _firstIdx, uint256 _lastIdx, uint256 _quote)
GatewayUpdated
event GatewayUpdated(address _oldGateway, address _newGateway)
Initialized
event Initialized(uint64 version)
IntentAdded
event IntentAdded(bytes32 indexed _intentId, uint256 _queueIdx, (bytes32 initiator, bytes32 receiver, bytes32 inputAsset, bytes32 outputAsset, uint24 maxFee, uint32 origin, uint64 nonce, uint48 timestamp, uint48 ttl, uint256 amount, uint32[] destinations, bytes data) _intent)
IntentFilled
event IntentFilled(bytes32 indexed _intentId, address indexed _solver, uint256 _totalFeeDBPS, uint256 _queueIdx, (bytes32 initiator, bytes32 receiver, bytes32 inputAsset, bytes32 outputAsset, uint24 maxFee, uint32 origin, uint64 nonce, uint48 timestamp, uint48 ttl, uint256 amount, uint32[] destinations, bytes data) _intent)
IntentQueueProcessed
event IntentQueueProcessed(bytes32 indexed _messageId, uint256 _firstIdx, uint256 _lastIdx, uint256 _quote)
LighthouseUpdated
event LighthouseUpdated(address _oldLightHouse, address _newLightHouse)
MessageGasLimitUpdated
event MessageGasLimitUpdated(uint256 _oldGasLimit, uint256 _newGasLimit)
MessageReceiverUpdated
event MessageReceiverUpdated(address _oldMessageReceiver, address _newMessageReceiver)
ModuleSetForStrategy
event ModuleSetForStrategy(uint8 _strategy, address _module)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused()
Settled
event Settled(bytes32 indexed _intentId, address _account, address _asset, uint256 _amount)
StrategySetForAsset
event StrategySetForAsset(address _asset, uint8 _strategy)
Unpaused
event Unpaused()
Upgraded
event Upgraded(address indexed implementation)
WatchtowerUpdated
event WatchtowerUpdated(address _oldWatchtower, address _newWatchtower)
Withdrawn
event Withdrawn(address indexed _withdrawer, address indexed _asset, uint256 _amount)
errors
AddressEmptyCode
error AddressEmptyCode(address target)
AddressInsufficientBalance
error AddressInsufficientBalance(address account)
ECDSAInvalidSignature
error ECDSAInvalidSignature()
ECDSAInvalidSignatureLength
error ECDSAInvalidSignatureLength(uint256 length)
ECDSAInvalidSignatureS
error ECDSAInvalidSignatureS(bytes32 s)
ERC1967InvalidImplementation
error ERC1967InvalidImplementation(address implementation)
ERC1967NonPayable
error ERC1967NonPayable()
EverclearSpoke_ExecuteIntentCalldata_ExternalCallFailed
error EverclearSpoke_ExecuteIntentCalldata_ExternalCallFailed()
EverclearSpoke_ExecuteIntentCalldata_InvalidStatus
error EverclearSpoke_ExecuteIntentCalldata_InvalidStatus(bytes32 _intentId)
EverclearSpoke_FillIntent_InsufficientFunds
error EverclearSpoke_FillIntent_InsufficientFunds(uint256 _requested, uint256 _available)
EverclearSpoke_FillIntent_IntentExpired
error EverclearSpoke_FillIntent_IntentExpired(bytes32 _intentId)
EverclearSpoke_FillIntent_InvalidStatus
error EverclearSpoke_FillIntent_InvalidStatus(bytes32 _intentId)
EverclearSpoke_FillIntent_MaxFeeExceeded
error EverclearSpoke_FillIntent_MaxFeeExceeded(uint256 _fee, uint24 _maxFee)
EverclearSpoke_InvalidMessageType
error EverclearSpoke_InvalidMessageType()
EverclearSpoke_InvalidSignature
error EverclearSpoke_InvalidSignature()
EverclearSpoke_InvalidVarUpdate
error EverclearSpoke_InvalidVarUpdate()
EverclearSpoke_NewIntent_CalldataExceedsLimit
error EverclearSpoke_NewIntent_CalldataExceedsLimit()
EverclearSpoke_NewIntent_InvalidIntent
error EverclearSpoke_NewIntent_InvalidIntent()
EverclearSpoke_NewIntent_MaxFeeExceeded
error EverclearSpoke_NewIntent_MaxFeeExceeded(uint256 _fee, uint24 _maxFee)
EverclearSpoke_NewIntent_ZeroAmount
error EverclearSpoke_NewIntent_ZeroAmount()
EverclearSpoke_Pause_NotAuthorized
error EverclearSpoke_Pause_NotAuthorized()
EverclearSpoke_Paused
error EverclearSpoke_Paused()
EverclearSpoke_ProcessFillViaRelayer_NotRelayer
error EverclearSpoke_ProcessFillViaRelayer_NotRelayer()
EverclearSpoke_ProcessFillViaRelayer_TTLExpired
error EverclearSpoke_ProcessFillViaRelayer_TTLExpired()
EverclearSpoke_ProcessFillViaRelayer_WrongDomain
error EverclearSpoke_ProcessFillViaRelayer_WrongDomain()
EverclearSpoke_ProcessIntentQueue_NotFound
error EverclearSpoke_ProcessIntentQueue_NotFound(bytes32 _intentId, uint256 _position)
EverclearSpoke_ProcessQueue_InvalidAmount
error EverclearSpoke_ProcessQueue_InvalidAmount(uint256 _first, uint256 _last, uint256 _amount)
EverclearSpoke_ProcessQueue_ZeroAmount
error EverclearSpoke_ProcessQueue_ZeroAmount()
EverclearSpoke_Unauthorized
error EverclearSpoke_Unauthorized()
EverclearSpoke_WrongDestination
error EverclearSpoke_WrongDestination()
EverclearSpoke_ZeroAddress
error EverclearSpoke_ZeroAddress()
FailedInnerCall
error FailedInnerCall()
InvalidAccountNonce
error InvalidAccountNonce(address account, uint256 currentNonce)
InvalidInitialization
error InvalidInitialization()
NotInitializing
error NotInitializing()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
Queue_EmptyQueue
error Queue_EmptyQueue()
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
UUPSUnauthorizedCallContext
error UUPSUnauthorizedCallContext()
UUPSUnsupportedProxiableUUID
error UUPSUnsupportedProxiableUUID(bytes32 slot)
creation bytecode
0x60a060405230608052348015610013575f80fd5b5061001c610021565b6100d3565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff16156100715760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b03908116146100d05780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b6080516159b76100f95f395f8181612ef201528181612f1b01526130cb01526159b75ff3fe60806040526004361061030e575f3560e01c80637f7673f91161019c578063beff4ce2116100e7578063df7a760111610092578063f37c0a2e1161006d578063f37c0a2e14610a21578063f3fef3a314610a3c578063f953cec714610a5b578063fa12957c14610a7a575f80fd5b8063df7a7601146109b0578063e2cae9f5146109e3578063f2fde38b14610a02575f80fd5b8063c2aeb7bd116100c2578063c2aeb7bd1461094d578063cab0071e14610981578063d6979ef614610996575f80fd5b8063beff4ce2146108f0578063c0346b201461090f578063c13eedbe1461092e575f80fd5b806391a3ef8e11610147578063ad3cb1cc11610122578063ad3cb1cc1461082a578063affed0e01461087f578063b4c20477146108d1575f80fd5b806391a3ef8e146107cd578063990969f6146107ec5780639eb93f1f1461080b575f80fd5b80638af5f779116101775780638af5f7791461074f5780638da5cb5b146107625780638fd689401461079e575f80fd5b80637f7673f9146106fd5780638456cb591461071c5780638467b5b514610730575f80fd5b806352ad0d5e1161025c5780636301fd6311610207578063715fc736116101e2578063715fc7361461065857806373e554f6146106775780637ecebe00146106aa575f80fd5b80636301fd63146105f85780636afdd85014610622578063715018a614610644575f80fd5b80635c975abb116102375780635c975abb146105855780635d394d3b146105c6578063601ae9b8146105e5575f80fd5b806352ad0d5e1461051757806352d1902d146105525780635c8ff76114610566575f80fd5b806347e7ef24116102bc5780634f1ef286116102975780634f1ef28614610499578063522dbaa5146104ac57806352a9674b146104df575f80fd5b806347e7ef241461043c5780634a943d211461045b5780634c739c321461047a575f80fd5b80631b5c3e8b116102ec5780631b5c3e8b146103be57806339ebf823146103eb5780633f4ba83a14610426575f80fd5b8063043dca0414610312578063116191b61461035b57806311a4cbbf14610392575b5f80fd5b34801561031d575f80fd5b5061034861032c36600461431a565b600660209081525f928352604080842090915290825290205481565b6040519081526020015b60405180910390f35b348015610366575f80fd5b5060035461037a906001600160a01b031681565b6040516001600160a01b039091168152602001610352565b34801561039d575f80fd5b506103b16103ac366004614368565b610a99565b60405161035291906143b3565b3480156103c9575f80fd5b506103dd6103d83660046145a3565b610b2a565b6040516103529291906147a8565b3480156103f6575f80fd5b506104196104053660046147c0565b60086020525f908152604090205460ff1681565b604051610352919061481c565b348015610431575f80fd5b5061043a610c3d565b005b348015610447575f80fd5b5061043a61045636600461482a565b610cf7565b348015610466575f80fd5b506103dd610475366004614854565b610dd3565b348015610485575f80fd5b5061043a6104943660046148dc565b610ee6565b61043a6104a7366004614960565b611270565b3480156104b7575f80fd5b506103487f0afae807991f914b71165fd92589f1dc28648cb9fb1f8558f3a6c7507d56deff81565b3480156104ea575f80fd5b505f5461050290640100000000900463ffffffff1681565b60405163ffffffff9091168152602001610352565b348015610522575f80fd5b506105456105313660046149ad565b60076020525f908152604090205460ff1681565b60405161035291906149c4565b34801561055d575f80fd5b5061034861128f565b348015610571575f80fd5b5061043a6105803660046147c0565b6112bd565b348015610590575f80fd5b506004546105b69074010000000000000000000000000000000000000000900460ff1681565b6040519015158152602001610352565b3480156105d1575f80fd5b5061043a6105e03660046149ad565b61133f565b61043a6105f33660046149de565b611385565b348015610603575f80fd5b505f5461037a906801000000000000000090046001600160a01b031681565b34801561062d575f80fd5b5061037a6e22d473030f116ddee9f6b43ac78ba381565b34801561064f575f80fd5b5061043a6114e7565b348015610663575f80fd5b5061043a6106723660046149f7565b6114fa565b348015610682575f80fd5b506103487f8104c8a42e1531612796e696e327ea52a475d9583ee6d64ffdefcafad22c0b2481565b3480156106b5575f80fd5b506103486106c43660046147c0565b6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00602052604090205490565b348015610708575f80fd5b5060015461037a906001600160a01b031681565b348015610727575f80fd5b5061043a6116e8565b34801561073b575f80fd5b5061043a61074a366004614a29565b6117b9565b61043a61075d366004614af8565b611a63565b34801561076d575f80fd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031661037a565b3480156107a9575f80fd5b50600a54600b546107b8919082565b60408051928352602083019190915201610352565b3480156107d8575f80fd5b5061043a6107e73660046147c0565b611bc1565b3480156107f7575f80fd5b5060045461037a906001600160a01b031681565b348015610816575f80fd5b5061043a610825366004614b37565b611c3f565b348015610835575f80fd5b506108726040518060400160405280600581526020017f352e302e3000000000000000000000000000000000000000000000000000000081525081565b6040516103529190614bbf565b34801561088a575f80fd5b506004546108b8907501000000000000000000000000000000000000000000900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610352565b3480156108dc575f80fd5b506103dd6108eb366004614be1565b611eeb565b3480156108fb575f80fd5b5061043a61090a366004614cd2565b6120cf565b34801561091a575f80fd5b5061043a6109293660046147c0565b61215f565b348015610939575f80fd5b5061043a610948366004614d07565b6121d9565b348015610958575f80fd5b5061037a610967366004614d31565b60096020525f90815260409020546001600160a01b031681565b34801561098c575f80fd5b5061034860055481565b3480156109a1575f80fd5b50600d54600e546107b8919082565b3480156109bb575f80fd5b506103487fce47b2c080dbcd8e420dc92bcf58f25f73f2e008a3b34ac41b9d468d1fb45d5a81565b3480156109ee575f80fd5b5060025461037a906001600160a01b031681565b348015610a0d575f80fd5b5061043a610a1c3660046147c0565b612268565b348015610a2c575f80fd5b505f546105029063ffffffff1681565b348015610a47575f80fd5b5061043a610a5636600461482a565b6122be565b348015610a66575f80fd5b5061043a610a75366004614d4a565b612393565b348015610a85575f80fd5b506103b1610a94366004614d7d565b6123a8565b6040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915260045474010000000000000000000000000000000000000000900460ff1615610b18576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610b23833384612494565b9392505050565b60408051610180810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082015260045474010000000000000000000000000000000000000000900460ff1615610bdd576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a8b511115610c19576040517f1b51089c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c2b8b8b8b8b8b8b8b8b8b5f61298d565b909c909b509950505050505050505050565b5f546801000000000000000090046001600160a01b03163314801590610c6e57506001546001600160a01b03163314155b15610ca5576040517f9e54918800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff1690556040517fa45f47fdea8a1efdd9029a5691c7f759c32b7c698632b563573e155625d16933905f90a1565b60045474010000000000000000000000000000000000000000900460ff1615610d4c576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610d57338383612ebc565b6001600160a01b0382165f90815260066020908152604080832033845290915281208054839290610d89908490614e3b565b90915550506040518181526001600160a01b0383169033907f8752a472e571a816aea92eec8dae9baf628e840f4929fbcc2d155e6233ff68a7906020015b60405180910390a35050565b60408051610180810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082015260045474010000000000000000000000000000000000000000900460ff1615610e86576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a8b511115610ec2576040517f1b51089c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610c2b8b6001600160a01b038c168b6001600160a01b038c168b8b8b8b8b5f61298d565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000810460ff16159067ffffffffffffffff165f81158015610f305750825b90505f8267ffffffffffffffff166001148015610f4c5750303b155b905081158015610f5a575080155b15610f91576040517ff92ee8a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b84547fffffffffffffffffffffffffffffffffffffffffffffffff00000000000000001660011785558315610ff25784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff16680100000000000000001785555b5f80547fffffffffffffffffffffffffffffffffffffffffffffffff00000000ffffffff166401000000004663ffffffff160217905561103560208701876147c0565b600380547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905561107d60608701604088016147c0565b600280547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556110c560808701606088016147c0565b5f80546001600160a01b039290921668010000000000000000027fffffffff0000000000000000000000000000000000000000ffffffffffffffff90921691909117905561111960a08701608088016147c0565b600180547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b039290921691909117905561116160408701602088016147c0565b600480547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b03929092169190911790556111a960c0870160a088016149de565b5f80547fffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000001663ffffffff929092169190911790556301312d006005556111fd6111f860e0880160c089016147c0565b612ed6565b6001600a819055600d5583156112685784547fffffffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffff168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b611278612ee7565b61128182612fb7565b61128b8282612fbf565b5050565b5f6112986130c0565b507f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc90565b6112c5613122565b600280546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f7a193273ad96e9aef3cc696a63e316b572c173af157d568ea56dcbc6425a7e7891015b60405180910390a15050565b611347613122565b600580549082905560408051828152602081018490527f93e4453d7ab6f59ea20f42db2f427c07a21a4447b279a2dc2ce878997b5a48809101611333565b60045474010000000000000000000000000000000000000000900460ff16156113da576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806113e583613196565b6003545f80546005546040517f3e8c4294000000000000000000000000000000000000000000000000000000008152959750939550909384936001600160a01b0390931692633e8c42949234926114499263ffffffff909216918a91600401614e4e565b604080518083038185885af1158015611464573d5f803e3d5ffd5b50505050506040513d601f19601f820116820180604052508101906114899190614e7c565b9092509050817f5e3a5b80dcf8e0fb984fe128ed0db507a86cc0674c4f5980f83b129b2cfdc69e846114c163ffffffff891682614e3b565b604080519283526020830191909152810184905260600160405180910390a25050505050565b6114ef613122565b6114f85f61333f565b565b60045474010000000000000000000000000000000000000000900460ff161561154f576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f548190640100000000900463ffffffff1661156f610140830183614e9e565b5f81811061157f5761157f614f02565b905060200201602081019061159491906149de565b63ffffffff16146115d1576040517f43d7dc7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f826040516020016115e39190615167565b60408051601f198184030181529190528051602090910120905060065f8281526007602052604090205460ff166009811115611621576116216147db565b14611660576040517f4bfd0ae5000000000000000000000000000000000000000000000000000000008152600481018290526024015b60405180910390fd5b6116ab81611672610160860186615179565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152506133c792505050565b5f90815260076020819052604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001690911790555050565b5f546801000000000000000090046001600160a01b0316331480159061171957506001546001600160a01b03163314155b15611750576040517f9e54918800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600480547fffffffffffffffffffffff00ffffffffffffffffffffffffffffffffffffffff16740100000000000000000000000000000000000000001790556040517f9e87fac88ff661f02d44f95383c817fece4bce600a3dab7a54406878b965e752905f90a1565b60045474010000000000000000000000000000000000000000900460ff161561180e576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517f0afae807991f914b71165fd92589f1dc28648cb9fb1f8558f3a6c7507d56deff602082015263ffffffff8a811682840152891660608201526001600160a01b03888116608083015260a0820188905260c0820187905260e0808301879052835180840390910181526101009092019092525f5490916118a29168010000000000000000900416828786866134e6565b6118ad8988886135ba565b5f806118b88a613196565b6003545f80546005546040517f0278681b00000000000000000000000000000000000000000000000000000000815295975093955090936001600160a01b0390921692630278681b926119169263ffffffff16918891600401614e4e565b602060405180830381865afa158015611931573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195591906151da565b6003545f80549293509182916001600160a01b0316906304e77a669063ffffffff1687620186a06119868e896151f1565b6119909190615208565b61199a9088614e3b565b6005546040518563ffffffff1660e01b81526004016119bc9493929190615240565b60408051808303815f875af11580156119d7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119fb9190614e7c565b91509150817f5e3a5b80dcf8e0fb984fe128ed0db507a86cc0674c4f5980f83b129b2cfdc69e858f63ffffffff1687611a349190614e3b565b604080519283526020830191909152810184905260600160405180910390a25050505050505050505050505050565b60045474010000000000000000000000000000000000000000900460ff1615611ab8576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f80611ac48484613681565b6003545f80546005546040517f3e8c4294000000000000000000000000000000000000000000000000000000008152959750939550909384936001600160a01b0390931692633e8c4294923492611b289263ffffffff909216918a91600401614e4e565b604080518083038185885af1158015611b43573d5f803e3d5ffd5b50505050506040513d601f19601f82011682018060405250810190611b689190614e7c565b9092509050817f43a52e9a77f317a192970b363b14ece56df243fe0dd94f459f63029d657efec384611b9a8882614e3b565b604080519283526020830191909152810184905260600160405180910390a2505050505050565b611bc9613122565b6003546040517f91a3ef8e0000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152909116906391a3ef8e906024015f604051808303815f87803b158015611c26575f80fd5b505af1158015611c38573d5f803e3d5ffd5b5050505050565b60045474010000000000000000000000000000000000000000900460ff1615611c94576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b604080517f8104c8a42e1531612796e696e327ea52a475d9583ee6d64ffdefcafad22c0b24602082015263ffffffff8b811682840152891660608201526001600160a01b03888116608083015260a0820188905260c0820187905260e0808301879052835180840390910181526101009092019092525f548992611d289168010000000000000000900416828887876134e6565b611d338b89896135ba565b5f80611d3f8c8c613681565b6003545f80546005546040517f0278681b00000000000000000000000000000000000000000000000000000000815295975093955090936001600160a01b0390921692630278681b92611d9d9263ffffffff16918891600401614e4e565b602060405180830381865afa158015611db8573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ddc91906151da565b6003545f80549293509182916001600160a01b0316906304e77a669063ffffffff1687620186a0611e0d8f896151f1565b611e179190615208565b611e219088614e3b565b6005546040518563ffffffff1660e01b8152600401611e439493929190615240565b60408051808303815f875af1158015611e5e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e829190614e7c565b9092509050817f43a52e9a77f317a192970b363b14ece56df243fe0dd94f459f63029d657efec385611eba63ffffffff8b1682614e3b565b604080519283526020830191909152810184905260600160405180910390a250505050505050505050505050505050565b60408051610180810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e0820183905261010082018390526101208201839052610140820181905261016082015260045474010000000000000000000000000000000000000000900460ff1615611f9e576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a8c511115611fda576040517f1b51089c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6040805160a0810182526001600160a01b038c1660608201908152608082018b9052815284356020808301919091528581013582840152825180840184523081529081018b90526e22d473030f116ddee9f6b43ac78ba3926330f28b7a929190339061204890890189615179565b6040518663ffffffff1660e01b8152600401612068959493929190615271565b5f604051808303815f87803b15801561207f575f80fd5b505af1158015612091573d5f803e3d5ffd5b506120bc92508e9150506001600160a01b038d168c6001600160a01b038d168c8c8c8c8c600161298d565b909d909c509a5050505050505050505050565b6120d7613122565b8060095f8460018111156120ed576120ed6147db565b60018111156120fe576120fe6147db565b81526020019081526020015f205f6101000a8154816001600160a01b0302191690836001600160a01b031602179055507f37c2b523addce9bbdac7ccde6d3a471e90d82c1b538b6779ce00beb4b7ae1edb82826040516113339291906152d3565b612167613122565b600380546001600160a01b038381167fffffffffffffffffffffffff000000000000000000000000000000000000000083168117909355604080519190921680825260208201939093527f68e84423772dadc3e4047f8b5bd221ddb02dc67796e7852533fd976947d86c519101611333565b6121e1613122565b6001600160a01b0382165f90815260086020526040902080548291907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660018381811115612232576122326147db565b02179055507f01373f2d31dc702eb723a3420b82d31bde7c67ce32b2711eae415fd6137810c982826040516113339291906152f7565b612270613122565b6001600160a01b0381166122b2576040517f1e4fbdf70000000000000000000000000000000000000000000000000000000081525f6004820152602401611657565b6122bb8161333f565b50565b60045474010000000000000000000000000000000000000000900460ff1615612313576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382165f90815260066020908152604080832033845290915281208054839290612345908490615314565b909155506123569050338383613817565b6040518181526001600160a01b0383169033907fd1c19fbcd4551a5edfb66d43d2e337c04837afda3482b42bdf569a8fccdae5fb90602001610dc7565b60025461128b906001600160a01b031661382b565b6040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915260045474010000000000000000000000000000000000000000900460ff1615612427576040517f02bb18c700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f7fce47b2c080dbcd8e420dc92bcf58f25f73f2e008a3b34ac41b9d468d1fb45d5a87878760405160200161245f9493929190615327565b604051602081830303815290604052905061247d88828887876134e6565b612488878987612494565b98975050505050505050565b6040805160a0810182525f808252602082018190529181018290526060810182905260808101919091525f548490640100000000900463ffffffff166124de610140830183614e9e565b5f8181106124ee576124ee614f02565b905060200201602081019061250391906149de565b63ffffffff1614612540576040517f43d7dc7b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f856040516020016125529190615167565b60408051601f198184030181529190528051602090910120905061257e6101208701610100880161535b565b61258f610100880160e0890161535b565b6125999190615374565b65ffffffffffff1642106125dc576040517fc55b0e4800000000000000000000000000000000000000000000000000000000815260048101829052602401611657565b6125ec60a087016080880161539a565b62ffffff168462ffffff16111561264f578361260e60a088016080890161539a565b6040517fa0cec32600000000000000000000000000000000000000000000000000000000815262ffffff928316600482015291166024820152604401611657565b5f8181526007602052604081205460ff166009811115612671576126716147db565b146126ab576040517f9cc863db00000000000000000000000000000000000000000000000000000000815260048101829052602401611657565b5f612720601260608901356001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126f1573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061271591906153b3565b896101200135613849565b90505f620186a061273662ffffff8816846151f1565b6127409190615208565b90505f61274d8284615314565b60608a01355f9081526006602090815260408083206001600160a01b038d1684529091529020549091508111156127e35760608901355f9081526006602090815260408083206001600160a01b038c168452909152908190205490517ff0cb85ec000000000000000000000000000000000000000000000000000000008152600481018390526024810191909152604401611657565b60608901355f9081526006602090815260408083206001600160a01b038c16845290915281208054839290612819908490615314565b90915550505f84815260076020908152604090912080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660031790558901351580159061286b5750606089013515155b801561287657508215155b1561288e5761288e60208a013560608b013583613817565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a4706128bd6101608b018b615179565b6040516128cb9291906153d3565b6040518091039020146128ea576128ea846116726101608c018c615179565b6040805160a08101909152848152602081016001600160a01b038a1681528a35602082015262ffffff8916604082015265ffffffffffff42166060909101529550612936600d876138b9565b876001600160a01b0316847f11cd513bfc9cb4365a2f38d87c35bea962f9cea1c1fe9c8a9a9488df7d50727589600d600101548d604051612979939291906153e2565b60405180910390a350505050509392505050565b60408051610180810182525f8082526020820181905291810182905260608082018390526080820183905260a0820183905260c0820183905260e082018390526101008201839052610120820183905261014082018190526101608201528b51600103612a455765ffffffffffff861615801590612a09575088155b15612a40576040517f1b51089c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612a91565b65ffffffffffff8616151580612a5a57508815155b15612a91576040517f1b51089c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b620186a062ffffff88161115612ae3576040517f77f649f300000000000000000000000000000000000000000000000000000000815262ffffff88166004820152620186a06024820152604401611657565b61c350841115612b1f576040517f6415b96a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f612b8b8b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b5f573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b8391906153b3565b60128b613849565b9050805f03612bc6576040517fee6def7500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b83612ce5576001600160a01b038b165f9081526008602052604081205460ff1690816001811115612bf957612bf96147db565b03612c0e57612c09338d8c612ebc565b612ce3565b5f60095f836001811115612c2457612c246147db565b6001811115612c3557612c356147db565b81526020019081526020015f205f9054906101000a90046001600160a01b03169050806001600160a01b031663f3a9a59e8e338e6040518463ffffffff1660e01b8152600401612cb4939291906001600160a01b03938416815291909216602082015260408101919091526080606082018190525f9082015260a00190565b5f604051808303815f87803b158015612ccb575f80fd5b505af1158015612cdd573d5f803e3d5ffd5b50505050505b505b60408051610180810190915280338152602081018e90526040016001600160a01b038d168152602081018c905262ffffff8a1660408201525f54640100000000900463ffffffff16606082015260048054608090920191601590612d6b907501000000000000000000000000000000000000000000900467ffffffffffffffff16615405565b91906101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905567ffffffffffffffff1681526020014265ffffffffffff1681526020018865ffffffffffff1681526020018281526020018e815260200187878080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920191909152505050915250604051909250612e1290839060200161542b565b60408051601f1981840301815291905280516020909101209250612e37600a84613959565b5f838152600760205260409081902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055600b54905184917fefe68281645929e2db845c5b42e12f7c73485fb5f18737b7b29379da006fa5f791612ea4919086906147a8565b60405180910390a2509a509a98505050505050505050565b612ed16001600160a01b03831684308461398b565b505050565b612ede613a0d565b6122bb81613a74565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480612f8057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316612f747f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b6001600160a01b031614155b156114f8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6122bb613122565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015613019575060408051601f3d908101601f19168201909252613016918101906151da565b60015b61305a576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0383166004820152602401611657565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc81146130b6576040517faa1d49a400000000000000000000000000000000000000000000000000000000815260048101829052602401611657565b612ed18383613a7c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114f8576040517fe07c8dba00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b336131547f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146114f8576040517f118cdaa7000000000000000000000000000000000000000000000000000000008152336004820152602401611657565b600d54600e546060915f9163ffffffff85168084036131e1576040517f7c0ffbda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160016131ee8386614e3b565b6131f89190615314565b1115613241576040517fa617ee68000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401611657565b600d5493505f63ffffffff871667ffffffffffffffff811115613266576132666143f9565b6040519080825280602002602001820160405280156132dc57816020015b6040805160a0810182525f808252602080830182905292820181905260608201819052608082015282527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9092019101816132845790505b5090505f5b8763ffffffff168163ffffffff16101561332a576132ff600d613ad1565b828263ffffffff168151811061331757613317614f02565b60209081029190910101526001016132e1565b5061333481613bed565b955050505050915091565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080547fffffffffffffffffffffffff000000000000000000000000000000000000000081166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b5f80828060200190518101906133dd919061548a565b60045491935091505f9081906001600160a01b0316636dc63837856127105a6134069190615314565b5f610100886040518663ffffffff1660e01b815260040161342b9594939291906154ce565b5f604051808303815f875af1158015613446573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261346d9190810190615514565b9150915081156134b457857f72c7d97e6fac52d20092b101af2183fd0bd04b357a936e82537e8974ea2c0eb7826040516134a79190614bbf565b60405180910390a2611268565b6040517f2f5746e500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b835160208501207f19457468657265756d205369676e6564204d6573736167653a0a3332000000005f908152601c829052603c812061355a9085858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f92019190915250613c1f92505050565b9050866001600160a01b0316816001600160a01b0316146135a7576040517f24c55ca400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6135b18186613c47565b50505050505050565b5f5463ffffffff8481166401000000009092041614613605576040517f66b0477d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b0382163314613647576040517f4744936400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80421115612ed1576040517f26f774b000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600a54600b546060915f91848084036136c6576040517f7c0ffbda00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8160016136d38386614e3b565b6136dd9190615314565b1115613726576040517fa617ee68000000000000000000000000000000000000000000000000000000008152600481018490526024810183905260448101829052606401611657565b600a5493505f5b63ffffffff81168711156137f8575f613746600a613cd1565b90505f89898463ffffffff1681811061376157613761614f02565b90506020028101906137739190615549565b6040516020016137839190615167565b6040516020818303038152906040528051906020012090508082146137e3576040517f908c3ec70000000000000000000000000000000000000000000000000000000081526004810182905263ffffffff84166024820152604401611657565b505080806137f090615585565b91505061372d565b5061380b613806878961559d565b613d40565b94505050509250929050565b612ed16001600160a01b0383168483613d57565b365f80375f80365f845af43d5f803e808015613845573d5ff35b3d5ffd5b5f8260ff168460ff160361385e575080610b23565b8260ff168460ff1610156138925761387684846156ed565b61388190600a615824565b61388b90836151f1565b9050610b23565b61389c83856156ed565b6138a790600a615824565b6138b19083615208565b949350505050565b6001826001015f8282546138cd9190614e3b565b90915550506001808301545f908152600293840160209081526040918290208451815590840151928101929092558201519281019290925560608101516003909201805460809092015165ffffffffffff166301000000027fffffffffffffffffffffffffffffffffffffffffffffff00000000000000000090921662ffffff90931692909217179055565b6001826001015f82825461396d9190614e3b565b909155505060018201545f9081526002909201602052604090912055565b6040516001600160a01b038481166024830152838116604483015260648201839052613a079186918216906323b872dd906084015b604051602081830303815290604052915060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050613d88565b50505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005468010000000000000000900460ff166114f8576040517fd7e6bcf800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612270613a0d565b613a8582613e02565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115613ac957612ed18282613ea9565b61128b613f1b565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152815460018301541015613b3a576040517f950f1c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5080545f818152600280840160208181526040808520815160a08101835281548152600180830180548387015296830180549483019490945260038301805462ffffff8116606085015265ffffffffffff630100000082041660808501529989529590945290869055938590558490557fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909416905583549092918491613be2908490614e3b565b909155509092915050565b6060613c19600183604051602001613c059190615832565b604051602081830303815290604052613f53565b92915050565b5f805f80613c2d8686613f90565b925092509250613c3d8282613fd9565b5090949350505050565b6001600160a01b0382165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0060205260409020805460018101909155818114612ed1576040517f752d88c00000000000000000000000000000000000000000000000000000000081526001600160a01b038416600482015260248101829052604401611657565b5f815f015482600101541015613d13576040517f950f1c1500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5080545f908152600282016020526040812080549082905582549091600191849190613be2908490614e3b565b6060613c195f83604051602001613c0591906158b7565b6040516001600160a01b03838116602483015260448201839052612ed191859182169063a9059cbb906064016139c0565b5f613d9c6001600160a01b038416836140dc565b905080515f14158015613dc0575080806020019051810190613dbe9190615937565b155b15612ed1576040517f5274afe70000000000000000000000000000000000000000000000000000000081526001600160a01b0384166004820152602401611657565b806001600160a01b03163b5f03613e50576040517f4c9c8ce30000000000000000000000000000000000000000000000000000000081526001600160a01b0382166004820152602401611657565b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051613ec59190615950565b5f60405180830381855af49150503d805f8114613efd576040519150601f19603f3d011682016040523d82523d5f602084013e613f02565b606091505b5091509150613f128583836140e9565b95945050505050565b34156114f8576040517fb398979f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060826003811115613f6757613f676147db565b82604051602001613f79929190615966565b604051602081830303815290604052905092915050565b5f805f8351604103613fc7576020840151604085015160608601515f1a613fb98882858561415e565b955095509550505050613fd2565b505081515f91506002905b9250925092565b5f826003811115613fec57613fec6147db565b03613ff5575050565b6001826003811115614009576140096147db565b03614040576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6002826003811115614054576140546147db565b0361408e576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401611657565b60038260038111156140a2576140a26147db565b0361128b576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401611657565b6060610b2383835f614226565b6060826140fe576140f9826142d8565b610b23565b815115801561411557506001600160a01b0384163b155b15614157576040517f9996b3150000000000000000000000000000000000000000000000000000000081526001600160a01b0385166004820152602401611657565b5080610b23565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561419757505f9150600390508261421c565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156141e8573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661421357505f92506001915082905061421c565b92505f91508190505b9450945094915050565b606081471015614264576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401611657565b5f80856001600160a01b0316848660405161427f9190615950565b5f6040518083038185875af1925050503d805f81146142b9576040519150601f19603f3d011682016040523d82523d5f602084013e6142be565b606091505b50915091506142ce8683836140e9565b9695505050505050565b8051156142e85780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f806040838503121561432b575f80fd5b50508035926020909101359150565b5f610180828403121561434b575f80fd5b50919050565b803562ffffff81168114614363575f80fd5b919050565b5f8060408385031215614379575f80fd5b823567ffffffffffffffff81111561438f575f80fd5b61439b8582860161433a565b9250506143aa60208401614351565b90509250929050565b60a08101613c19828480518252602081015160208301526040810151604083015262ffffff606082015116606083015265ffffffffffff60808201511660808301525050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b604051610180810167ffffffffffffffff8111828210171561444a5761444a6143f9565b60405290565b604051601f8201601f1916810167ffffffffffffffff81118282101715614479576144796143f9565b604052919050565b5f67ffffffffffffffff82111561449a5761449a6143f9565b5060051b60200190565b803563ffffffff81168114614363575f80fd5b5f82601f8301126144c6575f80fd5b813560206144db6144d683614481565b614450565b8083825260208201915060208460051b8701019350868411156144fc575f80fd5b602086015b8481101561451f57614512816144a4565b8352918301918301614501565b509695505050505050565b6001600160a01b03811681146122bb575f80fd5b80356143638161452a565b803565ffffffffffff81168114614363575f80fd5b5f8083601f84011261456e575f80fd5b50813567ffffffffffffffff811115614585575f80fd5b60208301915083602082850101111561459c575f80fd5b9250929050565b5f805f805f805f805f6101008a8c0312156145bc575f80fd5b893567ffffffffffffffff808211156145d3575f80fd5b6145df8d838e016144b7565b9a5060208c0135995060408c013591506145f88261452a565b81985060608c0135975060808c0135965061461560a08d01614351565b955061462360c08d01614549565b945060e08c0135915080821115614638575f80fd5b506146458c828d0161455e565b915080935050809150509295985092959850929598565b5f815180845260208085019450602084015f5b8381101561469157815163ffffffff168752958201959082019060010161466f565b509495945050505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b5f610180825184526020830151602085015260408301516040850152606083015160608501526080830151614706608086018262ffffff169052565b5060a083015161471e60a086018263ffffffff169052565b5060c083015161473a60c086018267ffffffffffffffff169052565b5060e083015161475460e086018265ffffffffffff169052565b506101008381015165ffffffffffff169085015261012080840151908501526101408084015181860183905261478c8387018261465c565b9250505061016080840151858303828701526142ce838261469c565b828152604060208201525f6138b160408301846146ca565b5f602082840312156147d0575f80fd5b8135610b238161452a565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60028110614818576148186147db565b9052565b60208101613c198284614808565b5f806040838503121561483b575f80fd5b82356148468161452a565b946020939093013593505050565b5f805f805f805f805f6101008a8c03121561486d575f80fd5b893567ffffffffffffffff80821115614884575f80fd5b6148908d838e016144b7565b9a5060208c013591506148a28261452a565b90985060408b0135906148b48261452a565b90975060608b0135906148c68261452a565b81975060808c0135965061461560a08d01614351565b5f60e0828403121561434b575f80fd5b5f67ffffffffffffffff821115614905576149056143f9565b50601f01601f191660200190565b5f82601f830112614922575f80fd5b81356149306144d6826148ec565b818152846020838601011115614944575f80fd5b816020850160208301375f918101602001919091529392505050565b5f8060408385031215614971575f80fd5b823561497c8161452a565b9150602083013567ffffffffffffffff811115614997575f80fd5b6149a385828601614913565b9150509250929050565b5f602082840312156149bd575f80fd5b5035919050565b60208101600a83106149d8576149d86147db565b91905290565b5f602082840312156149ee575f80fd5b610b23826144a4565b5f60208284031215614a07575f80fd5b813567ffffffffffffffff811115614a1d575f80fd5b6138b18482850161433a565b5f805f805f805f8060e0898b031215614a40575f80fd5b614a49896144a4565b9750614a5760208a016144a4565b96506040890135614a678161452a565b9550606089013594506080890135935060a0890135925060c089013567ffffffffffffffff811115614a97575f80fd5b614aa38b828c0161455e565b999c989b5096995094979396929594505050565b5f8083601f840112614ac7575f80fd5b50813567ffffffffffffffff811115614ade575f80fd5b6020830191508360208260051b850101111561459c575f80fd5b5f8060208385031215614b09575f80fd5b823567ffffffffffffffff811115614b1f575f80fd5b614b2b85828601614ab7565b90969095509350505050565b5f805f805f805f805f60e08a8c031215614b4f575f80fd5b614b588a6144a4565b985060208a013567ffffffffffffffff80821115614b74575f80fd5b614b808d838e01614ab7565b909a50985060408c01359150614b958261452a565b90965060608b0135955060808b0135945060a08b0135935060c08b01359080821115614638575f80fd5b602081525f610b23602083018461469c565b5f6060828403121561434b575f80fd5b5f805f805f805f805f806101208b8d031215614bfb575f80fd5b8a3567ffffffffffffffff80821115614c12575f80fd5b614c1e8e838f016144b7565b9b50614c2c60208e0161453e565b9a50614c3a60408e0161453e565b9950614c4860608e0161453e565b985060808d01359750614c5d60a08e01614351565b9650614c6b60c08e01614549565b955060e08d0135915080821115614c80575f80fd5b614c8c8e838f0161455e565b90955093506101008d0135915080821115614ca5575f80fd5b50614cb28d828e01614bd1565b9150509295989b9194979a5092959850565b803560028110614363575f80fd5b5f8060408385031215614ce3575f80fd5b614cec83614cc4565b91506020830135614cfc8161452a565b809150509250929050565b5f8060408385031215614d18575f80fd5b8235614d238161452a565b91506143aa60208401614cc4565b5f60208284031215614d41575f80fd5b610b2382614cc4565b5f8060208385031215614d5b575f80fd5b823567ffffffffffffffff811115614d71575f80fd5b614b2b8582860161455e565b5f805f805f8060a08789031215614d92575f80fd5b8635614d9d8161452a565b9550602087013567ffffffffffffffff80821115614db9575f80fd5b614dc58a838b0161433a565b965060408901359550614dda60608a01614351565b94506080890135915080821115614def575f80fd5b50614dfc89828a0161455e565b979a9699509497509295939492505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b80820180821115613c1957613c19614e0e565b63ffffffff84168152606060208201525f614e6c606083018561469c565b9050826040830152949350505050565b5f8060408385031215614e8d575f80fd5b505080516020909101519092909150565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614ed1575f80fd5b83018035915067ffffffffffffffff821115614eeb575f80fd5b6020019150600581901b360382131561459c575f80fd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b803567ffffffffffffffff81168114614363575f80fd5b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112614f79575f80fd5b830160208101925035905067ffffffffffffffff811115614f98575f80fd5b8060051b360382131561459c575f80fd5b8183525f60208085019450825f5b858110156146915763ffffffff614fcd836144a4565b1687529582019590820190600101614fb7565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112615013575f80fd5b830160208101925035905067ffffffffffffffff811115615032575f80fd5b80360382131561459c575f80fd5b81835281816020850137505f602082840101525f6020601f19601f840116840101905092915050565b5f6101808235845260208301356020850152604083013560408501526060830135606085015261509b60808401614351565b62ffffff1660808501526150b160a084016144a4565b63ffffffff1660a08501526150c860c08401614f2f565b67ffffffffffffffff1660c08501526150e360e08401614549565b65ffffffffffff1660e08501526101006150fe848201614549565b65ffffffffffff1690850152610120838101359085015261014061512481850185614f46565b83838801526151368488018284614fa9565b935050505061016061514a81850185614fe0565b8684038388015261515c848284615040565b979650505050505050565b602081525f610b236020830184615069565b5f8083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe18436030181126151ac575f80fd5b83018035915067ffffffffffffffff8211156151c6575f80fd5b60200191503681900382131561459c575f80fd5b5f602082840312156151ea575f80fd5b5051919050565b8082028115828204841417613c1957613c19614e0e565b5f8261523b577f4e487b71000000000000000000000000000000000000000000000000000000005f52601260045260245ffd5b500490565b63ffffffff85168152608060208201525f61525e608083018661469c565b6040830194909452506060015292915050565b5f61010087516001600160a01b038082511685526020820151602086015260208a0151604086015260408a01516060860152808951166080860152602089015160a086015280881660c086015250508060e08401526124888184018587615040565b604081016152e18285614808565b6001600160a01b03831660208301529392505050565b6001600160a01b038316815260408101610b236020830184614808565b81810381811115613c1957613c19614e0e565b848152608060208201525f61533f6080830186615069565b905083604083015262ffffff8316606083015295945050505050565b5f6020828403121561536b575f80fd5b610b2382614549565b65ffffffffffff81811683821601908082111561539357615393614e0e565b5092915050565b5f602082840312156153aa575f80fd5b610b2382614351565b5f602082840312156153c3575f80fd5b815160ff81168114610b23575f80fd5b818382375f9101908152919050565b62ffffff84168152826020820152606060408201525f613f126060830184615069565b5f67ffffffffffffffff80831681810361542157615421614e0e565b6001019392505050565b602081525f610b2360208301846146ca565b5f82601f83011261544c575f80fd5b815161545a6144d6826148ec565b81815284602083860101111561546e575f80fd5b8160208501602083015e5f918101602001919091529392505050565b5f806040838503121561549b575f80fd5b82516154a68161452a565b602084015190925067ffffffffffffffff8111156154c2575f80fd5b6149a38582860161543d565b6001600160a01b038616815284602082015283604082015261ffff8316606082015260a060808201525f61515c60a083018461469c565b80518015158114614363575f80fd5b5f8060408385031215615525575f80fd5b61552e83615505565b9150602083015167ffffffffffffffff8111156154c2575f80fd5b5f82357ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe8183360301811261557b575f80fd5b9190910192915050565b5f63ffffffff80831681810361542157615421614e0e565b5f6155aa6144d684614481565b80848252602080830192508560051b8501368111156155c7575f80fd5b855b818110156156e157803567ffffffffffffffff808211156155e8575f80fd5b818901915061018082360312156155fd575f80fd5b615605614426565b82358152858301358682015260408084013590820152606080840135908201526080615632818501614351565b9082015260a06156438482016144a4565b9082015260c0615654848201614f2f565b9082015260e0615665848201614549565b90820152610100615677848201614549565b9082015261012083810135908201526101408084013583811115615699575f80fd5b6156a5368287016144b7565b82840152505061016080840135838111156156be575f80fd5b6156ca36828701614913565b9183019190915250875250509382019382016155c9565b50919695505050505050565b60ff8281168282160390811115613c1957613c19614e0e565b600181815b8085111561575f57817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561574557615745614e0e565b8085161561575257918102915b93841c939080029061570b565b509250929050565b5f8261577557506001613c19565b8161578157505f613c19565b816001811461579757600281146157a1576157bd565b6001915050613c19565b60ff8411156157b2576157b2614e0e565b50506001821b613c19565b5060208310610133831016604e8410600b84101617156157e0575081810a613c19565b6157ea8383615706565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0482111561581c5761581c614e0e565b029392505050565b5f610b2360ff841683615767565b602080825282518282018190525f9190848201906040850190845b818110156158ab5761589883855180518252602081015160208301526040810151604083015262ffffff606082015116606083015265ffffffffffff60808201511660808301525050565b9284019260a0929092019160010161584d565b50909695505050505050565b5f60208083016020845280855180835260408601915060408160051b8701019250602087015f5b8281101561592a577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08886030184526159188583516146ca565b945092850192908501906001016158de565b5092979650505050505050565b5f60208284031215615947575f80fd5b610b2382615505565b5f82518060208501845e5f920191825250919050565b60ff83168152604060208201525f6138b1604083018461469c56fea2646970667358221220af5bd4cb8910dac4883b5f31c1d6a732d2f1aa0ae6d15091346d9ef57e8acf9e64736f6c63430008190033