0 txs
0 calls
constructor
constructor(address nttManager, address wormholeCoreBridge, address wormholeRelayerAddr, address specialRelayerAddr, uint8 _consistencyLevel, uint256 _gasLimit)
functions
consistencyLevel
viewfunction consistencyLevel() view returns (uint8)
encodeWormholeTransceiverInstruction
purefunction encodeWormholeTransceiverInstruction(tuple instruction) pure returns (bytes)
gasLimit
viewfunction gasLimit() view returns (uint256)
getMigratesImmutables
viewfunction getMigratesImmutables() view returns (bool)
getNttManagerOwner
viewfunction getNttManagerOwner() view returns (address)
getNttManagerToken
viewfunction getNttManagerToken() view returns (address)
getTransceiverType
purefunction getTransceiverType() pure returns (string)
getWormholePeer
viewfunction getWormholePeer(uint16 chainId) view returns (bytes32)
isPaused
viewfunction isPaused() view returns (bool)
isSpecialRelayingEnabled
viewfunction isSpecialRelayingEnabled(uint16 chainId) view returns (bool)
isVAAConsumed
viewfunction isVAAConsumed(bytes32 hash) view returns (bool)
isWormholeEvmChain
viewfunction isWormholeEvmChain(uint16 chainId) view returns (bool)
isWormholeRelayingEnabled
viewfunction isWormholeRelayingEnabled(uint16 chainId) view returns (bool)
nttManager
viewfunction nttManager() view returns (address)
nttManagerToken
viewfunction nttManagerToken() view returns (address)
owner
viewfunction owner() view returns (address)
parseWormholeTransceiverInstruction
purefunction parseWormholeTransceiverInstruction(bytes encoded) pure returns (tuple instruction)
pauser
viewfunction pauser() view returns (address)
quoteDeliveryPrice
viewfunction quoteDeliveryPrice(uint16 targetChain, tuple instruction) view returns (uint256)
specialRelayer
viewfunction specialRelayer() view returns (address)
WORMHOLE_TRANSCEIVER_VERSION
viewfunction WORMHOLE_TRANSCEIVER_VERSION() view returns (string)
wormhole
viewfunction wormhole() view returns (address)
wormholeRelayer
viewfunction wormholeRelayer() view returns (address)
initialize
payablefunction initialize() payable
migrate
nonpayablefunction migrate()
receiveMessage
nonpayablefunction receiveMessage(bytes encodedMessage)
receiveWormholeMessages
payablefunction receiveWormholeMessages(bytes payload, bytes[] additionalMessages, bytes32 sourceAddress, uint16 sourceChain, bytes32 deliveryHash) payable
sendMessage
payablefunction sendMessage(uint16 recipientChain, tuple instruction, bytes nttManagerMessage, bytes32 recipientNttManagerAddress, bytes32 refundAddress) payable
setIsSpecialRelayingEnabled
nonpayablefunction setIsSpecialRelayingEnabled(uint16 chainId, bool isEnabled)
setIsWormholeEvmChain
nonpayablefunction setIsWormholeEvmChain(uint16 chainId, bool isEvm)
setIsWormholeRelayingEnabled
nonpayablefunction setIsWormholeRelayingEnabled(uint16 chainId, bool isEnabled)
setWormholePeer
payablefunction setWormholePeer(uint16 peerChainId, bytes32 peerContract) payable
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
transferPauserCapability
nonpayablefunction transferPauserCapability(address newPauser)
transferTransceiverOwnership
nonpayablefunction transferTransceiverOwnership(address newOwner)
upgrade
nonpayablefunction upgrade(address newImplementation)
events
AdminChanged
event AdminChanged(address previousAdmin, address newAdmin)
BeaconUpgraded
event BeaconUpgraded(address indexed beacon)
Initialized
event Initialized(uint64 version)
NotPaused
event NotPaused(bool notPaused)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
Paused
event Paused(bool paused)
PauserTransferred
event PauserTransferred(address indexed oldPauser, address indexed newPauser)
ReceivedMessage
event ReceivedMessage(bytes32 digest, uint16 emitterChainId, bytes32 emitterAddress, uint64 sequence)
ReceivedRelayedMessage
event ReceivedRelayedMessage(bytes32 digest, uint16 emitterChainId, bytes32 emitterAddress)
RelayingInfo
event RelayingInfo(uint8 relayingType, bytes32 refundAddress, uint256 deliveryPayment)
SendTransceiverMessage
event SendTransceiverMessage(uint16 recipientChain, (bytes32 sourceNttManagerAddress, bytes32 recipientNttManagerAddress, bytes nttManagerPayload, bytes transceiverPayload) message)
SetIsSpecialRelayingEnabled
event SetIsSpecialRelayingEnabled(uint16 chainId, bool isRelayingEnabled)
SetIsWormholeEvmChain
event SetIsWormholeEvmChain(uint16 chainId, bool isEvm)
SetIsWormholeRelayingEnabled
event SetIsWormholeRelayingEnabled(uint16 chainId, bool isRelayingEnabled)
SetWormholePeer
event SetWormholePeer(uint16 chainId, bytes32 peerContract)
Upgraded
event Upgraded(address indexed implementation)
errors
CallerNotNttManager
error CallerNotNttManager(address caller)
CallerNotRelayer
error CallerNotRelayer(address caller)
CannotRenounceTransceiverOwnership
error CannotRenounceTransceiverOwnership(address currentOwner)
CannotTransferTransceiverOwnership
error CannotTransferTransceiverOwnership(address currentOwner, address newOwner)
InvalidBoolVal
error InvalidBoolVal(uint8 val)
InvalidBoolValue
error InvalidBoolValue(uint256 value)
InvalidFork
error InvalidFork(uint256 evmChainId, uint256 blockChainId)
InvalidInitialization
error InvalidInitialization()
InvalidPauser
error InvalidPauser(address account)
InvalidRelayingConfig
error InvalidRelayingConfig(uint16 chainId)
InvalidVaa
error InvalidVaa(string reason)
InvalidWormholeChainIdZero
error InvalidWormholeChainIdZero()
InvalidWormholePeer
error InvalidWormholePeer(uint16 chainId, bytes32 peerAddress)
InvalidWormholePeerZeroAddress
error InvalidWormholePeerZeroAddress()
LengthMismatch
error LengthMismatch(uint256 encodedLength, uint256 expectedLength)
NotAnEvmAddress
error NotAnEvmAddress(bytes32)
NotInitializing
error NotInitializing()
NotMigrating
error NotMigrating()
OnlyDelegateCall
error OnlyDelegateCall()
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
PeerAlreadySet
error PeerAlreadySet(uint16 chainId, bytes32 peerAddress)
ReentrancyGuardReentrantCall
error ReentrancyGuardReentrantCall()
RequireContractIsNotPaused
error RequireContractIsNotPaused()
RequireContractIsPaused
error RequireContractIsPaused()
TransferAlreadyCompleted
error TransferAlreadyCompleted(bytes32 vaaHash)
UnexpectedAdditionalMessages
error UnexpectedAdditionalMessages()
UnexpectedDeployer
error UnexpectedDeployer(address deployer, address caller)
UnexpectedRecipientNttManagerAddress
error UnexpectedRecipientNttManagerAddress(bytes32 recipientNttManagerAddress, bytes32 expectedRecipientNttManagerAddress)
creation bytecode
0x6101c0604081815234620002bb5760c08262003691803803809162000025828562000325565b833981010312620002bb576200003b826200035d565b6020916200004b8385016200035d565b92620000598286016200035d565b62000067606087016200035d565b9160808701519660ff88168803620002bb5760a00151947ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080549060ff82881c1662000314578392919083906001600160401b03906002600160401b031982851601620002d1575b505030608052505060a08190528551637e062a3560e11b81526001600160a01b039390918290600490829087165afa918215620002c7575f9262000285575b505060c0523360e0528061012096168652806101409216825261016092168252610180924684526101009687526101a0948552519461331e968762000373883960805187612d62015260a051878181610df90152818161152a015281816118a301528181612013015281816121c201528181612b160152612c47015260c051878181610e8401528181611c5e01528181612214015281816126510152612ee8015260e05187610d0101525186818161076101528181610f360152818161125501528181611bc901528181611db8015261235901525185818161020501528181610bfe01528181610f630152818161128101528181611b7101528181611de50152818161226401528181612f6d0152818161303f01526130cf01525184818161079a0152818161161301528181611a1a015281816122b40152612e3f015251838181610a5f01528181611c07015281816123040152612f24015251826102490152518181816106a2015281816119e50152612e130152f35b90809250813d8311620002bf575b6200029f818362000325565b81010312620002bb57620002b3906200035d565b5f806200010e565b5f80fd5b503d62000293565b86513d5f823e3d90fd5b6001600160401b0319909316811790925587519182527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d291a15f828180620000cf565b865163f92ee8a960e01b8152600490fd5b601f909101601f19168101906001600160401b038211908210176200034957604052565b634e487b7160e01b5f52604160045260245ffd5b51906001600160a01b0382168203620002bb5756fe60806040818152600480361015610014575f80fd5b5f925f3560e01c908163036de8af14612573575080630900f010146120425780630b4a1e89146113bc57806324fb21db14611ffe578063320d0d8e14611fbe57806348b330d614611f785780634b5b0505146118125780634b795b2114611774578063529dca321461157157806358f709ba14611502578063657b3b2f1461146457806366152efc14611404578063689f90c3146113c1578063694977d7146113bc5780637ab564031461116657806380eb32391461112d5780638129fc1c14610c7257806381e8ec7f14610c2d57806384acd1bb14610be95780638da5cb5b14610bb45780638fd3ab8014610a8e57806390ea542814610a4a578063935dec0714610a0b57806396dddc63146109595780639fd0506d14610911578063a0926b2a146108c5578063b187bd2614610884578063b5634c7314610837578063bc7f6d37146107f7578063d8d28418146107c9578063da25b72514610785578063e8dfd50814610747578063f2fde38b14610712578063f48066a8146106c9578063f68016b71461068a5763f953cec7146101ac575f80fd5b346106865760209081600319360112610682578035906001600160401b038581841161067f576101e26102019436908501612760565b86518095819263607ec5ef60e11b835288878401526024830190612846565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa80156106755786938790889261046e575b501561044b57507f000000000000000000000000000000000000000000000000000000000000000046810361042f57506060830161ffff91828251165f525f805160206132098339815191528652865f2054608086019081518091036103fe575061014086016102c981515f525f8051602061322983398151915260205260ff60405f20541690565b6103e557927ff6fc529540981400dc64edf649eb5e2e0eb5812a27f8c81bac2c1d317e71a5f0608060e0948b8a8e9996896103276103789d9b515f525f8051602061322983398151915260205260405f20600160ff19825416179055565b519360a08989511692519301511692519384528d8401528d8301526060820152a15116940151906103566128e5565b5061035f612909565b508651630453806b60e11b815293849283928301612a63565b038173b55f857fc9a9757ffe70a3988f4a0b4f04f9d2a05af49283156103db576103b29450859186946103b5575b50815191015191612c44565b80f35b9093506103d491503d8087833e6103cc8183612724565b8101906129e5565b925f6103a6565b84513d87823e3d90fd5b518851632d30ec0360e21b815280870191909152602490fd5b83518951633cd8e72b60e11b815290861661ffff1687820190815260208101929092529081900360400190fd5b0390fd5b826044918751916377d879fb60e01b8352820152466024820152fd5b8551634771719b60e11b815280840186905290819061042b906024830190612846565b945050503d8087853e6104818185612724565b83016060906060858203126106715784518381116105f75785016101609283828403126105fb5788519384018481108682111761065e5789526104c38261310b565b84526104d0888301613119565b888501526104df898301613119565b89850152606082015161ffff8116810361065a576060850152608080830151608086015261050f60a08401612aa7565b60a086015261052060c0840161310b565b60c086015260e0830151868111610656578461053d91850161295f565b60e0860152610100610550818501613119565b90860152610120908184015187811161065257840185601f820112156106525780518c946105896105808361280e565b96519687612724565b8186528c8087019260071b8401019288841161064e578d01915b8383106105ff57505050505084015261014080910151908301526105c8868601612bf8565b9487810151908482116105fb57019080601f830112156105f75781516105ef928801612928565b90935f610240565b8880fd5b8980fd5b84838a031261064e578d8f918287935190610619826126ee565b86518252838701518483015261063081880161310b565b9082015261063f85870161310b565b858201528152019201916105a3565b8f80fd5b8c80fd5b8b80fd5b8a80fd5b604187634e487b7160e01b5f525260245ffd5b8780fd5b85513d88823e3d90fd5b80fd5b8380fd5b8280fd5b5050346106c557816003193601126106c557602090517f00000000000000000000000000000000000000000000000000000000000000008152f35b5080fd5b5050346106c55760203660031901126106c55760209061ffff6106ea612680565b165f525f805160206132498339815191528252610709815f2054612c05565b90519015158152f35b8382346106c55760203660031901126106c557356001600160a01b03811681036106c5576103b290610742612ba5565b612b75565b5050346106c557816003193601126106c5576020905160ff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b5050346106c557816003193601126106c557517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346106c557816003193601126106c5576020906107e6612b01565b90516001600160a01b039091168152f35b5050346106c55760203660031901126106c55760209061ffff610818612680565b165f525f805160206131e98339815191528252610709815f2054612c05565b5034610686578160031936011261068657610850612680565b92602435906001600160401b03821161067f57509261087761087d926020953691016127a6565b90612da3565b9051908152f35b5050346106c557816003193601126106c55760209060027f64bacf405c5d7f563d3ba5252584a52c37e4fee380fd825b10666c27b825802254149051908152f35b5050346106c557816003193601126106c557805161090d916108e682612709565b6008825267776f726d686f6c6560c01b602083015251918291602083526020830190612846565b0390f35b5050346106c557816003193601126106c5577fbfa91572ce1e5fe8776a160d3b1f862e83f5ee2c080a7423b4761602a3ad12495490516001600160a01b039091168152602090f35b508290346106c557826003193601126106c557610974612680565b61097c6127ff565b91610985612ba5565b61ffff82169081156109fd57507f4add57d97a7bf5035340ea1212aeeb3d4d3887eb1faf3821a8224c3a6956a10c93946109f7916109c285612c36565b905f525f80516020613249833981519152602052815f2055519283928390929160209061ffff60408401951683521515910152565b0390a180f35b8551630f7662c960e21b8152fd5b5050346106c55760203660031901126106c55760209061ffff610a2c612680565b165f525f805160206132098339815191528252805f20549051908152f35b5050346106c557816003193601126106c557517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b509034610686578260031936011261068657610aa8612d5f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0080546001600160401b038082166001810190828211610ba15760ff84871c16908115610b94575b50610b8457169360ff7f7487ca88d037ca20519908b1ee7556206bef53bce0226a348750cb9d4f688e4e541615610b76575068ffffffffffffffffff19168317680100000000000000001768ff000000000000000019169055519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d290602090a180f35b8351632866815360e11b8152fd5b845163f92ee8a960e01b81528690fd5b905082821611155f610af0565b634e487b7160e01b885260118752602488fd5b5050346106c557816003193601126106c5575f805160206132898339815191525490516001600160a01b039091168152602090f35b5050346106c557816003193601126106c557517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5050346106c557816003193601126106c557805161090d91610c4e82612709565b60058252640312e312e360dc1b602083015251918291602083526020830190612846565b508260031936011261068657610c86612d5f565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a009182549160ff83831c1615906001600160401b039384811680159081611125575b600114908161111b575b159081611112575b506111035767ffffffffffffffff1981166001178655826110e4575b506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116338190036110c85750610d336131a7565b610d3b6131a7565b60017f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f0055610de7610d6a612b01565b610d726131a7565b610d7a6131a7565b610d826131a7565b60017f64bacf405c5d7f563d3ba5252584a52c37e4fee380fd825b10666c27b8258022557fbfa91572ce1e5fe8776a160d3b1f862e83f5ee2c080a7423b4761602a3ad124980546001600160a01b03191633179055610ddf6131a7565b6107426131a7565b8351634b4fd03b60e01b8152602095907f0000000000000000000000000000000000000000000000000000000000000000831687828681845afa9182156110be578a92611087575b508651631dcbf42b60e11b81529188838781855afa92831561107d578b93611046575b5087519360a085019081118582101761065e578852639c23bd3b60e01b845288840191825260ff9081168489019081527f00000000000000000000000000000000000000000000000000000000000000008616606086019081529382166080860190815289516301529f6160e21b815295516001600160e01b031916888701529251602486015251811660448501529151606484015251166084820152878160a48173b55f857fc9a9757ffe70a3988f4a0b4f04f9d2a05af490811561103c5791610f5d939187938a9161101a575b5086518095819482936358cd21bf60e11b84527f0000000000000000000000000000000000000000000000000000000000000000918401612abb565b039134907f0000000000000000000000000000000000000000000000000000000000000000165af1801561101057610fd8575b50610f99578380f35b7fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29268ff00000000000000001981541690555160018152a15f80808380f35b8381813d8311611009575b610fed8183612724565b8101031261100557610ffe90612aa7565b505f610f90565b8580fd5b503d610fe3565b83513d88823e3d90fd5b61103691503d808c833e61102e8183612724565b810190612a82565b5f610f21565b85513d8a823e3d90fd5b9092508881813d8311611076575b61105e8183612724565b8101031261065a5761106f9061310b565b915f610e52565b503d611054565b88513d8d823e3d90fd5b9091508781813d83116110b7575b61109f8183612724565b810103126105fb576110b09061310b565b905f610e2f565b503d611095565b87513d8c823e3d90fd5b82604491865191636345072160e11b8352820152336024820152fd5b68ffffffffffffffffff1916680100000000000000011785555f610cf6565b50825163f92ee8a960e01b8152fd5b9050155f610cda565b303b159150610cd2565b849150610cc8565b50913461067f57602036600319011261067f5750610709602092355f525f8051602061322983398151915260205260ff60405f20541690565b50816003193601126106865761117a612680565b60243591611186612ba5565b61ffff8083169081156113ac57841561139c57815f525f8051602061320983398151915291602092808452875f2054806113735750815f52835285875f20558651916111d1836126d3565b630c7e33e160e11b8352838301918252878301878152885163077650fb60e51b815293516001600160e01b031916868501529151166024830152516044820152868160648173b55f857fc9a9757ffe70a3988f4a0b4f04f9d2a05af49283156113695761127c938392899161134f575b5087516358cd21bf60e11b815294859283927f0000000000000000000000000000000000000000000000000000000000000000918401612abb565b0381347f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af18015610675576112f3575b5050915161ffff909216825260208201527fa559263ee060c7a2560843b3a064ff0376c9753ae3e2449b595a3b615d3264669080604081016109f7565b81813d8311611348575b6113078183612724565b81010312611344577fa559263ee060c7a2560843b3a064ff0376c9753ae3e2449b595a3b615d3264669361133d6109f792612aa7565b50936112b6565b8480fd5b503d6112fd565b61136391503d808b833e61102e8183612724565b5f611241565b86513d89823e3d90fd5b885163b55eeae960e01b815261ffff881681880190815260208101929092529081906040010390fd5b855163137063ef60e11b81528390fd5b8551630f7662c960e21b81528390fd5b61263c565b5050346106c557816003193601126106c55760209060ff7f5443fea4dc453d96b81ce55b62e11a4094cc4cbb8a360956a7253cfdb42506cb541690519015158152f35b50913461067f57602036600319011261067f5750805191611424836126b8565b3590811515918281036114605761090d935280519160f81b60208301526001825261144e82612709565b51918291602083526020830190612846565b5f80fd5b508290346106c557826003193601126106c55761147f612680565b6114876127ff565b91611490612ba5565b61ffff82169081156109fd57507f528b18a533e892b5401d1fb63597275df9d2bb45b13e7695c3147cd07b9746c393946109f7916114cd85612c36565b905f525f80516020613269833981519152602052815f2055519283928390929160209061ffff60408401951683521515910152565b5034610686576020366003190112610686578035916001600160a01b038084168403611344577f000000000000000000000000000000000000000000000000000000000000000016330361155a57836103b284612d0b565b60249250519063c5aa615360e01b82523390820152fd5b5060a0366003190112610686576001600160401b0381358181116113445761159c9036908401612760565b60249283359383851161177057366023860112156117705784820135936115c28561280e565b946115cf88519687612724565b808652602096838888019260051b8201019236841161065a57848201925b84841061174a5750505050506044356064359461ffff86169081870361146057608435937f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361173757825f525f805160206132098339815191528952838a5f20540361171057848b525f80516020613229833981519152895260ff8a8c2054166116fc57506116a5845f525f8051602061322983398151915260205260405f20600160ff19825416179055565b516116ec57606061037895938a95937ff557dbbb087662f52c815f6c7ee350628a37a51eae9608ff840d996b65f87475938b519283528a8301528a820152a16103566128e5565b875163c504ea2960e01b81528490fd5b8951632d30ec0360e21b8152808701869052fd5b8951633cd8e72b60e11b815261ffff89168188019081526020810186905281906040010390fd5b8951631c26958960e01b81523381880152fd5b8335828111610652578a916117658392893691880101612760565b8152019301926115ed565b8680fd5b508290346106c557826003193601126106c55761178f612680565b6117976127ff565b916117a0612ba5565b61ffff82169081156109fd57507f0fe301480713b2c2072ee91b3bcfcbf2c0014f0447c89046f020f0f80727003c93946109f7916117dd85612c36565b905f525f805160206131e9833981519152602052815f2055519283928390929160209061ffff60408401951683521515910152565b509060031960a03682011261068257611829612680565b9060249283356001600160401b03908181116106715761184c90369088016127a6565b906044358181116105f7576118649036908901612760565b90608435977f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f00976002895414611f6957600289556001600160a01b03937f000000000000000000000000000000000000000000000000000000000000000085163303611f5357908b61191e819361192d8a519b6118e08d6126b8565b848d528b516304616c8f60e21b81526309945ff160e41b89820152338782015260648035604483015260a0908201529c8d94859460a4860190612846565b91848303016084850152612846565b038173b55f857fc9a9757ffe70a3988f4a0b4f04f9d2a05af4938415611f495782988395611ef7575b5061196560208098015161286b565b80511580611ee8575b15611b49575050928a928592838989976119dd61ffff8f16968792835f525f805160206132098339815191528c526119b16119ab865f205461317b565b9b61317b565b94519c8d9b8c9a8b9a6312d729bd60e21b8c528b0152169088015260e0604488015260e4870190612846565b9360648601527f0000000000000000000000000000000000000000000000000000000000000000608486015260a48501521660c4830152039134907f0000000000000000000000000000000000000000000000000000000000000000165af18015611b3f57611ad0575b5061ffff926060611ab584611ac9945f805160206132c98339815191528460019c5f805160206132a98339815191529b9951905f8252848201523485820152a15b815197889716875281818801528451828801528401518387015283015160808087015260c0860190612846565b910151838203603f190160a0850152612846565b0390a15580f35b9391928185813d8311611b38575b611ae88183612724565b81010312610671576060611ab561ffff95611ac9945f805160206132c98339815191528460019c611b265f805160206132a98339815191529c612aa7565b509c5050509450949650505092611a47565b503d611ade565b83513d8a823e3d90fd5b919394959250959697989a50511580611ebf575b15611d98578651631a90a21960e01b8152937f000000000000000000000000000000000000000000000000000000000000000082169087868681855afa958d8715611d8d57908993929197611d5a575b50869291611bf1918b519889809481936358cd21bf60e11b83527f0000000000000000000000000000000000000000000000000000000000000000908c8401612abb565b03925af1948515611d50578c95611d19575b50817f00000000000000000000000000000000000000000000000000000000000000001690340390348211611d075790818d9796959493923b15610671578c96889660849561ffff8d519a8b998a98630b5624e160e11b8a527f0000000000000000000000000000000000000000000000000000000000000000169089015216908601528760448601521660648401525af18015611cfd57611ce5575b505f805160206132a9833981519152936060611ab585600199955f805160206132c983398151915284611ac99761ffff9a51908e8252848201523485820152a1611a88565b611cf190969296612691565b6110055793855f611ca0565b84513d84823e3d90fd5b83601186634e487b7160e01b5f52525ffd5b9094508681813d8311611d49575b611d318183612724565b8101031261065657611d4290612aa7565b935f611c03565b503d611d27565b88513d8e823e3d90fd5b9196509181813d8111611d86575b611d728183612724565b810103126114605751948791611bf1611bad565b503d611d68565b8a51903d90823e3d90fd5b9050611ddf9350849286999799518095819482936358cd21bf60e11b84527f0000000000000000000000000000000000000000000000000000000000000000918401612abb565b039134907f0000000000000000000000000000000000000000000000000000000000000000165af18015611eb557611e58575b5091611ac96001956060611ab5855f805160206132a9833981519152975f805160206132c9833981519152848d61ffff9a519060028252848201523485820152a1611a88565b9181838195933d8311611eae575b611e708183612724565b81010312611770576001956060611ab5611ac9935f805160206132a983398151915297611e9f61ffff98612aa7565b50959750955050509550611e12565b503d611e66565b83513d89823e3d90fd5b5061ffff8a165f525f805160206131e98339815191528652611ee3875f2054612c05565b611b5d565b50611ef28b61312a565b61196e565b985093503d80838a3e611f0a818a612724565b88019787818a03126106865780518581116106825789611f2b91830161297c565b98602082015186811161134457611f42920161295f565b935f611956565b87513d84823e3d90fd5b509085519063c5aa615360e01b82523390820152fd5b508451633ee5aeb560e01b8152fd5b50913461067f57602036600319011261067f578235906001600160401b03821161067f5750611faf602093611fb492369101612760565b61286b565b9051905115158152f35b5050346106c55760203660031901126106c55760209061ffff611fdf612680565b165f525f805160206132698339815191528252610709815f2054612c05565b5050346106c557816003193601126106c557517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b5090346114605760209182600319360112611460576001600160a01b039181358381169081810361146057612075612ba5565b61207d612d5f565b3b1561251a577f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b031916821790557fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b5f80a27f7487ca88d037ca20519908b1ee7556206bef53bce0226a348750cb9d4f688e4e9384549361210a60ff861615612bdd565b60ff199485166001178655303b1561146057825163011fa75760e71b81525f81868183305af18015612510576124fd575b50825163689f90c360e01b815282818681305afa9081156124045788916124c8575b5015612197575b505050507f5443fea4dc453d96b81ce55b62e11a4094cc4cbb8a360956a7253cfdb42506cb818154169055815416905580f35b82516324fb21db60e01b815282818681305afa90811561240457906121e99189916124ab575b5082167f0000000000000000000000000000000000000000000000000000000000000000831614612bdd565b8251630b4a1e8960e01b815282818681305afa908115612404579061223b91899161247e575b5082167f0000000000000000000000000000000000000000000000000000000000000000831614612bdd565b82516384acd1bb60e01b815282818681305afa8015612404578890612446575b61228b915082167f0000000000000000000000000000000000000000000000000000000000000000831614612bdd565b825163da25b72560e01b815282818681305afa801561240457889061240e575b6122db915082167f0000000000000000000000000000000000000000000000000000000000000000831614612bdd565b825163121d4a8560e31b815282818681305afa9081156124045788916123ca575b508161232c927f000000000000000000000000000000000000000000000000000000000000000016911614612bdd565b8082518094631d1bfaa160e31b825281305afa9182156123c15750859161238a575b50612381915060ff807f000000000000000000000000000000000000000000000000000000000000000016911614612bdd565b5f808080612164565b905081813d83116123ba575b6123a08183612724565b81010312610682576123b46123819161310b565b5f61234e565b503d612396565b513d87823e3d90fd5b90508281813d83116123fd575b6123e18183612724565b810103126106715751908082168203610671579061232c6122fc565b503d6123d7565b84513d8a823e3d90fd5b508281813d831161243f575b6124248183612724565b8101031261067157518181168103610671576122db906122ab565b503d61241a565b508281813d8311612477575b61245c8183612724565b81010312610671575181811681036106715761228b9061225b565b503d612452565b61249e9150843d86116124a4575b6124968183612724565b810190612ae2565b5f61220f565b503d61248c565b6124c29150843d86116124a4576124968183612724565b5f6121bd565b90508281813d83116124f6575b6124df8183612724565b81010312610671576124f090612bf8565b5f61215d565b503d6124d5565b612508919750612691565b5f955f61213b565b84513d5f823e3d90fd5b815162461bcd60e51b8152808401869052602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608490fd5b9050346114605760203660031901126114605781356001600160a01b03818116939184900361146057805f805160206132898339815191525416927fbfa91572ce1e5fe8776a160d3b1f862e83f5ee2c080a7423b4761602a3ad124992835492831694338614159081612631575b5061261c5750506001600160a01b031916831790557f51c4874e0f23f262e04a38c51751336dde72126d67f53eb672aaff02996b3ef65f80a3005b63e2a08e5d60e01b8252339082015260249150fd5b9050331415876125e1565b34611460575f366003190112611460576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6004359061ffff8216820361146057565b6001600160401b0381116126a457604052565b634e487b7160e01b5f52604160045260245ffd5b602081019081106001600160401b038211176126a457604052565b606081019081106001600160401b038211176126a457604052565b608081019081106001600160401b038211176126a457604052565b604081019081106001600160401b038211176126a457604052565b90601f801991011681019081106001600160401b038211176126a457604052565b6001600160401b0381116126a457601f01601f191660200190565b81601f820112156114605780359061277782612745565b926127856040519485612724565b8284526020838301011161146057815f926020809301838601378301015290565b9190916040818403126114605760408051916001600160401b03918301828111848210176126a4576040528294813560ff811681036114605784526020820135928311611460576020926127fa9201612760565b910152565b60243590811515820361146057565b6001600160401b0381116126a45760051b60200190565b5f5b8381106128365750505f910152565b8181015183820152602001612827565b9060209161285f81518092818552858086019101612825565b601f01601f1916010190565b9060405191612879836126b8565b5f8352828151156128e05750600181015160fe81166128c45760ff161515835251600181036128a55750565b604490604051906355c5b3e360e11b8252600482015260016024820152fd5b60405163f7a37b0760e01b815260ff9091166004820152602490fd5b925050565b604051906128f2826126ee565b606080835f81525f60208201528160408201520152565b60405190612916826126d3565b60606040835f81525f60208201520152565b9092919261293581612745565b916129436040519384612724565b82948284528282011161146057602061295d930190612825565b565b9080601f8301121561146057815161297992602001612928565b90565b91906080838203126114605760405190612995826126ee565b819380518352602081015160208401526040810151916001600160401b039283811161146057816129c791840161295f565b60408501526060820151928311611460576060926127fa920161295f565b9190604083820312611460578251906001600160401b03918281116114605781612a1091860161297c565b936020810151908382116114605701906060828203126114605760405192612a37846126d3565b8251845260208301516020850152604083015190811161146057612a5b920161295f565b604082015290565b6309945ff160e41b815260406020820181905261297992910190612846565b906020828203126114605781516001600160401b03811161146057612979920161295f565b51906001600160401b038216820361146057565b9060ff612adb6040929594955f8552606060208601526060850190612846565b9416910152565b9081602091031261146057516001600160a01b03811681036114605790565b604051638da5cb5b60e01b81526020816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa908115612b6a575f91612b51575090565b612979915060203d6020116124a4576124968183612724565b6040513d5f823e3d90fd5b6001600160a01b03811615612b8d5761295d90612d0b565b604051631e4fbdf760e01b81525f6004820152602490fd5b5f80516020613289833981519152546001600160a01b03163303612bc557565b60405163118cdaa760e01b8152336004820152602490fd5b15612be457565b634e487b7160e01b5f52600160045260245ffd5b5190811515820361146057565b8015612c315760018114612c2b576024906040519063b998bad560e01b82526004820152fd5b50600190565b505f90565b15612c4057600190565b5f90565b917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690818103612ced5750803b156114605761ffff5f8094612cd3604080519889978896879563275e091560e21b875216600486015260248501526060604485015280516064850152602081015160848501520151606060a484015260c4830190612846565b03925af18015612b6a57612ce45750565b61295d90612691565b60449250604051916339dee99160e11b835260048301526024820152fd5b5f8051602061328983398151915280546001600160a01b039283166001600160a01b0319821681179092559091167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e05f80a3565b307f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614612d9157565b604051633c64f99360e21b8152600490fd5b612db160208093015161286b565b516130ba5761ffff811691825f525f805160206132698339815191528152604091612dde835f2054612c05565b80613094575b61307c57612df19061312a565b15612eae5750805163c23ee3c360e01b815260048101929092525f60248301527f000000000000000000000000000000000000000000000000000000000000000060448301529081816064817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215612ea5575f92612e7b57505090565b90809250813d8311612e9e575b612e928183612724565b81010312611460575190565b503d612e88565b513d5f823e3d90fd5b825f525f805160206131e98339815191528152612ecd825f2054612c05565b1561302957815163209d173960e21b81526001600160a01b037f00000000000000000000000000000000000000000000000000000000000000008116600483015260248201949094525f60448201529281846064817f000000000000000000000000000000000000000000000000000000000000000085165afa93841561301f575f94612fee575b509080600492845193848092631a90a21960e01b82527f0000000000000000000000000000000000000000000000000000000000000000165afa928315612ea557505f92612fc0575b50508101809111612fac5790565b634e487b7160e01b5f52601160045260245ffd5b90809250813d8311612fe7575b612fd78183612724565b8101031261146057515f80612f9e565b503d612fcd565b918091945082813d8311613018575b6130078183612724565b810103126114605790519281612f55565b503d612ffd565b83513d5f823e3d90fd5b8151631a90a21960e01b815291925080826004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa928315612ea557505f92612e7b57505090565b825163251268db60e21b815260048101859052602490fd5b50835f525f8051602061324983398151915282526130b4835f2054612c05565b15612de4565b50604051631a90a21960e01b815281816004817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa918215612b6a575f92612e7b57505090565b519060ff8216820361146057565b519063ffffffff8216820361146057565b61ffff16805f525f8051602061326983398151915260205261314f60405f2054612c05565b9081613159575090565b90505f525f8051602061324983398151915260205261297960405f2054612c05565b8060a01c61318f576001600160a01b031690565b6024906040519063033b960d60e41b82526004820152fd5b60ff7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a005460401c16156131d657565b604051631afcd79f60e31b8152600490fdfed4cbc7742a1e11dcc33209ac33862ef146cfcb6d7f860df12df42105dfedb1c948c66ef0992b4bcc14f2551075db9459fc23bf706abb76034f1c66c1ba2846845e6aacb3f16e5b01c8b072a0ab4c38e919266014a45db863ee64a4580fb3e7e2e79d2e5e46f62be2ac831294e423b664f30320fb9ebaefd78a978cafe07c0f8c16ee6ac6bf7a8d7c37112a9426e00852b215ac4f5c50536beb6c95f1ba47b4af9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930079376a0dc6cbfe6f6f8f89ad24c262a8c6233f8df181d3fe5abb2e2442e8c738c3192e083c87c556db539f071d8a298869f487e951327b5616a6f85ae3da958ea264697066735822122035c00c490160d58784156f174e44c013abc10fd317862f30c735c2ac5b819a2364736f6c63430008160033000000000000000000000000cdecfb0dbec659a542795d2b4825bded20639241000000000000000000000000bebdb6c8ddc678ffa9f8748f85c815c556dd8ac6000000000000000000000000706f82e9bb5b0813501714ab5974216704980e3100000000000000000000000063be47835c7d66c4aa5b2c688dc6ed9771c94c7400000000000000000000000000000000000000000000000000000000000000ca000000000000000000000000000000000000000000000000000000000007a120