0 txs
1 call
constructor
No constructor.
functions
cancelChannelUpgrade
nonpayablefunction cancelChannelUpgrade(tuple msg_)
channelUpgradeConfirm
nonpayablefunction channelUpgradeConfirm(tuple msg_) returns (bool)
channelUpgradeOpen
nonpayablefunction channelUpgradeOpen(tuple msg_)
timeoutChannelUpgrade
nonpayablefunction timeoutChannelUpgrade(tuple msg_)
events
ChannelUpgradeAck
event ChannelUpgradeAck(string portId, string channelId, uint64 upgradeSequence, uint8 channelState, (uint8 ordering, string[] connection_hops, string version) upgradeFields, ((uint64 revision_number, uint64 revision_height) height, uint64 timestamp) timeout, uint64 nextSequenceSend)
ChannelUpgradeConfirm
event ChannelUpgradeConfirm(string portId, string channelId, uint64 upgradeSequence, uint8 channelState)
ChannelUpgradeInit
event ChannelUpgradeInit(string portId, string channelId, uint64 upgradeSequence, (uint8 ordering, string[] connection_hops, string version) proposedUpgradeFields)
ChannelUpgradeOpen
event ChannelUpgradeOpen(string portId, string channelId, uint64 upgradeSequence)
ChannelUpgradeTry
event ChannelUpgradeTry(string portId, string channelId, uint64 upgradeSequence, (uint8 ordering, string[] connection_hops, string version) upgradeFields, ((uint64 revision_number, uint64 revision_height) height, uint64 timestamp) timeout, uint64 nextSequenceSend)
IBCModuleManagerChannelCapabilityClaimed
event IBCModuleManagerChannelCapabilityClaimed(string portId, string channelId, address module)
IBCModuleManagerPortCapabilityClaimed
event IBCModuleManagerPortCapabilityClaimed(string portId, address module)
WriteErrorReceipt
event WriteErrorReceipt(string portId, string channelId, uint64 upgradeSequence, string message)
errors
IBCChannelUpgradeCounterpartyAlreadyFlushCompleted
error IBCChannelUpgradeCounterpartyAlreadyFlushCompleted()
IBCChannelUpgradeCounterpartyAlreadyUpgraded
error IBCChannelUpgradeCounterpartyAlreadyUpgraded()
IBCChannelUpgradeCounterpartyNotFlushingOrFlushcomplete
error IBCChannelUpgradeCounterpartyNotFlushingOrFlushcomplete(uint8 state)
IBCChannelUpgradeCounterpartyNotOpenOrFlushcomplete
error IBCChannelUpgradeCounterpartyNotOpenOrFlushcomplete(uint8 state)
IBCChannelUpgradeErrorReceiptEmpty
error IBCChannelUpgradeErrorReceiptEmpty()
IBCChannelUpgradeFailedVerifyMembership
error IBCChannelUpgradeFailedVerifyMembership(string clientId, string path, bytes value, bytes proof, (uint64 revision_number, uint64 revision_height) height)
IBCChannelUpgradeIncompatibleProposal
error IBCChannelUpgradeIncompatibleProposal()
IBCChannelUpgradeInvalidErrorReceiptSequence
error IBCChannelUpgradeInvalidErrorReceiptSequence()
IBCChannelUpgradeInvalidTimeout
error IBCChannelUpgradeInvalidTimeout()
IBCChannelUpgradeInvalidUpgradeFields
error IBCChannelUpgradeInvalidUpgradeFields()
IBCChannelUpgradeNoChanges
error IBCChannelUpgradeNoChanges()
IBCChannelUpgradeNoExistingUpgrade
error IBCChannelUpgradeNoExistingUpgrade()
IBCChannelUpgradeNotFlushcomplete
error IBCChannelUpgradeNotFlushcomplete(uint8 state)
IBCChannelUpgradeNotFlushing
error IBCChannelUpgradeNotFlushing(uint8 state)
IBCChannelUpgradeNotOpenOrFlushing
error IBCChannelUpgradeNotOpenOrFlushing(uint8 state)
IBCChannelUpgradeOldCounterpartyUpgradeSequence
error IBCChannelUpgradeOldCounterpartyUpgradeSequence()
IBCChannelUpgradeOldErrorReceiptSequence
error IBCChannelUpgradeOldErrorReceiptSequence()
IBCChannelUpgradeTimeoutHeightNotReached
error IBCChannelUpgradeTimeoutHeightNotReached()
IBCChannelUpgradeTimeoutTimestampNotReached
error IBCChannelUpgradeTimeoutTimestampNotReached()
IBCChannelUpgradeTimeoutUnallowedState
error IBCChannelUpgradeTimeoutUnallowedState()
IBCChannelUpgradeTryProposedConnectionHopsEmpty
error IBCChannelUpgradeTryProposedConnectionHopsEmpty()
IBCChannelUpgradeTryProposedConnectionHopsMismatch
error IBCChannelUpgradeTryProposedConnectionHopsMismatch()
IBCChannelUpgradeUnauthorizedChannelUpgrader
error IBCChannelUpgradeUnauthorizedChannelUpgrader(address upgrader)
IBCChannelUpgradeUnsupportedOrdering
error IBCChannelUpgradeUnsupportedOrdering(uint8 ordering)
IBCChannelUpgradeWriteOldErrorReceiptSequence
error IBCChannelUpgradeWriteOldErrorReceiptSequence(uint64 latestSequence, uint64 sequence)
IBCHostChannelCapabilityAlreadyClaimed
error IBCHostChannelCapabilityAlreadyClaimed(string portId, string channelId)
IBCHostClientTypeAlreadyExists
error IBCHostClientTypeAlreadyExists(string clientType)
IBCHostFailedAuthenticateChannelCapability
error IBCHostFailedAuthenticateChannelCapability(string portId, string channelId, address caller)
IBCHostInvalidClientType
error IBCHostInvalidClientType(string clientType)
IBCHostInvalidLightClientAddress
error IBCHostInvalidLightClientAddress(address lcAddress)
IBCHostInvalidModuleAddress
error IBCHostInvalidModuleAddress(address moduleAddress)
IBCHostInvalidPortIdentifier
error IBCHostInvalidPortIdentifier(string portId)
IBCHostModuleChannelNotFound
error IBCHostModuleChannelNotFound(string portId, string channelId)
IBCHostModuleDoesNotSupportERC165
error IBCHostModuleDoesNotSupportERC165()
IBCHostModuleDoesNotSupportIIBCModule
error IBCHostModuleDoesNotSupportIIBCModule(address module, bytes4 interfaceId)
IBCHostModuleDoesNotSupportIIBCModuleInitializer
error IBCHostModuleDoesNotSupportIIBCModuleInitializer(address module, bytes4 interfaceId)
IBCHostModuleDoesNotSupportIIBCModuleUpgrade
error IBCHostModuleDoesNotSupportIIBCModuleUpgrade(address module)
IBCHostModulePortNotFound
error IBCHostModulePortNotFound(string portId)
IBCHostPortCapabilityAlreadyClaimed
error IBCHostPortCapabilityAlreadyClaimed(string portId)
creation bytecode
0x608080604052346015576144d4908161001a8239f35b5f80fdfe60806040526004361015610011575f80fd5b5f3560e01c80630db24ed714610054578063382db3881461004f578063921e51d41461004a5763c233390314610045575f80fd5b610ab6565b610678565b61012a565b346100d95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d95760043567ffffffffffffffff81116100d95760a07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc82360301126100d9576100cf60209160040161126b565b6040519015158152f35b5f80fd5b60207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc8201126100d95760043567ffffffffffffffff81116100d95760c090600401809203126100d95790565b346100d957610138366100dd565b61014b6101458280610acc565b90610b2a565b610163602083019161015d8385610acc565b90610b62565b91610172600784015460ff1690565b9261017c84610fa6565b831561065057805460ff1661019081610ba8565b6005811415908161063b575b5061061357600a81016101bd6101b96101b483611711565b612495565b1590565b90816105ec575b506105c4576101de6101d860038301611767565b50611806565b906101f4600b82015467ffffffffffffffff1690565b67ffffffffffffffff8116151590816104cf575b506104a757604083019460066102266102218887611981565b610bd3565b61022f81610ba8565b1461047f5760036102436102218887611981565b61024c81610ba8565b14610312575b5090846102f3926102ab61027460a061026e6103109a89611981565b01611a48565b67ffffffffffffffff6102a2610295600586015467ffffffffffffffff1690565b67ffffffffffffffff1690565b91161015611a08565b6102c46102bb6060870187610acc565b91909387611981565b926102e86102e060026102d960018701611040565b9501611040565b943690611ab9565b946080880190612fcf565b6103086103008280610acc565b939092610acc565b9290916122cc565b005b6103236101d8600884959401611767565b610347600161033f6103358a89611981565b60608101906119b4565b905014611a08565b61035360098501611a0f565b6020815191012061037b61037461036a8a89611981565b6080810190610acc565b3691610d01565b6020815191012014918261044c575b50816103c5575b5061039d57905f610252565b7fb20615f3000000000000000000000000000000000000000000000000000000005f5260045ffd5b6004915061040f6103e391604051928391602083019586910161177e565b037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08101835282610c66565b5190206104426103e361042e6104286103358a89611981565b90611a34565b929060405192839160208301958691610b1d565b519020145f610391565b909150610464602061045e8988611981565b01611a2a565b9061046e82610fa6565b61047781610fa6565b14905f61038a565b7f8af94d47000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fe818d27d000000000000000000000000000000000000000000000000000000005f5260045ffd5b905061051961050061050060016104e587611842565b015473ffffffffffffffffffffffffffffffffffffffff1690565b73ffffffffffffffffffffffffffffffffffffffff1690565b90602060405180937f4b0bbdc4000000000000000000000000000000000000000000000000000000008252818061055760808b018a60048401611960565b03915afa9182156105bf575f92610580575b5067ffffffffffffffff9081165b9116105f610208565b67ffffffffffffffff9192506105b06105779160203d6020116105b8575b6105a88183610c66565b81019061187e565b929150610569565b503d61059e565b611260565b7f7b13ef71000000000000000000000000000000000000000000000000000000005f5260045ffd5b61060d91506106076106013660808701610e81565b91611711565b90612f71565b5f6101c4565b7f53d79cd3000000000000000000000000000000000000000000000000000000005f5260045ffd5b6006915061064881610ba8565b14155f61019c565b7fb530cc3c000000000000000000000000000000000000000000000000000000005f5260045ffd5b346100d95760207ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc3601126100d95760043567ffffffffffffffff81116100d9578060040160e07ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc83360301126100d9576106f66101458280610acc565b610708602484019161015d8385610acc565b908154936107168560ff1690565b61071f81610ba8565b60068103610a8a57506107376101d860038501611767565b94610740611b6d565b506044820190600361075183610bd3565b61075a81610ba8565b036109985750506107706101d860088501611767565b94606482019161077f83611a48565b67ffffffffffffffff6107a0610295600589015467ffffffffffffffff1690565b9116106109705785610861856108949561081a61081461080f600460059e6108046107cf8f6007015460ff1690565b996107fb6107e86107e08380610acc565b9b9093610acc565b9190926107f3610ca7565b9b3691610d01565b8a523691610d01565b602088015201611040565b612fe7565b91611a48565b91610835610826610cb8565b60038152955b60208701610fe3565b6040850152606084015261084b60098901611040565b608084015267ffffffffffffffff1660a0830152565b915b6108706084830188610acc565b9061087d60018901611040565b9260a461088c60028b01611040565b950190612fcf565b6108b46108a18480610acc565b906108ac8487610acc565b929091612bc9565b6108dd6105006105006105006108ca8780610acc565b906108d5878a610acc565b9290916137f5565b906109086108f66108ee8680610acc565b939096610acc565b969094015467ffffffffffffffff1690565b823b156100d9575f9461094c8692604051988997889687957f5e11a22000000000000000000000000000000000000000000000000000000000875260048701611224565b03925af180156105bf5761095c57005b8061096a5f61031093610c66565b8061121a565b7f024c7304000000000000000000000000000000000000000000000000000000005f5260045ffd5b60066109a683989493610bd3565b6109af81610ba8565b03610a53576005965061089492919060081c60ff16610a4d6109ff6109d48980610acc565b91906109f66109e38a8d610acc565b9190926109ee610ca7565b953691610d01565b84523691610d01565b6020820152610a1361080f60048701611040565b888b015467ffffffffffffffff1691610a37610a2d610cb8565b600681529561082c565b6040850152606084015261084b60048901611040565b91610863565b610a87610a5f88610bd3565b7f2ca75d91000000000000000000000000000000000000000000000000000000005f52610bb7565b5ffd5b610a87907f02aaad8d000000000000000000000000000000000000000000000000000000005f52610bb7565b346100d957610310610ac7366100dd565b611c8b565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100d9570180359067ffffffffffffffff82116100d9576020019181360383136100d957565b908092918237015f815290565b60209082604051938492833781017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc0081520301902090565b6020919283604051948593843782019081520301902090565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60071115610bb257565b610b7b565b90602491610bc481610ba8565b600452565b600711156100d957565b35610bdd81610bc9565b90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6040810190811067ffffffffffffffff821117610c2957604052565b610be0565b6060810190811067ffffffffffffffff821117610c2957604052565b60c0810190811067ffffffffffffffff821117610c2957604052565b90601f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0910116810190811067ffffffffffffffff821117610c2957604052565b60405190610cb6604083610c66565b565b60405190610cb660c083610c66565b67ffffffffffffffff8111610c2957601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe01660200190565b929192610d0d82610cc7565b91610d1b6040519384610c66565b8294818452818301116100d9578281602093845f960137010152565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61813603018212156100d9570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81813603018212156100d9570190565b600311156100d957565b3590610cb682610d9d565b67ffffffffffffffff8111610c295760051b60200190565b9080601f830112156100d957816020610bdd93359101610d01565b9080601f830112156100d9578135610dfc81610db2565b92610e0a6040519485610c66565b81845260208085019260051b820101918383116100d95760208201905b838210610e3657505050505090565b813567ffffffffffffffff81116100d957602091610e5987848094880101610dca565b815201910190610e27565b67ffffffffffffffff8116036100d957565b3590610cb682610e64565b91908260409103126100d957604051610e9981610c0d565b60208082948035610ea981610e64565b8452013591610eb783610e64565b0152565b9190916060818403126100d95760206040805192610ed884610c0d565b610ea9849682610e81565b919060a0838203126100d95760405190610efc82610c2e565b8193803567ffffffffffffffff81116100d95781016060818403126100d95760405191610f2883610c2e565b8135610f3381610d9d565b8352602082013567ffffffffffffffff81116100d95784610f55918401610de5565b602084015260408201359167ffffffffffffffff83116100d95784610fa194610f87604097608096610f969501610dca565b87820152875260208301610ebb565b602086015201610e76565b910152565b60031115610bb257565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1813603018212156100d9570190565b6003821015610bb25752565b90600182811c92168015611036575b602083101461100957565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b91607f1691610ffe565b9060405191825f82549261105384610fef565b80845293600181169081156110bc5750600114611078575b50610cb692500383610c66565b90505f9291925260205f20905f915b8183106110a0575050906020610cb6928201015f61106b565b6020919350806001915483858901015201910190918492611087565b60209350610cb69592507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091501682840152151560051b8201015f61106b565b90815461110881610db2565b926111166040519485610c66565b81845260208401905f5260205f205f915b8383106111345750505050565b60016020819261114385611040565b815201920192019190611127565b9060405161115e81610c2e565b6040610fa16002839561117560ff82541686610fe3565b611181600182016110fc565b602086015201611040565b610bdd903690610ebb565b601f82602094937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe093818652868601375f8582860101520116010190565b926060946111fc61120a9367ffffffffffffffff959a99989a608088526080880191611197565b918583036020870152611197565b95166040820152610eb783610ba8565b5f9103126100d957565b939260409361124b6112599367ffffffffffffffff95999899606089526060890191611197565b918683036020880152611197565b9416910152565b6040513d5f823e3d90fd5b6112786101458280610acc565b9061128b602082019261015d8484610acc565b805460ff1661129981610ba8565b600581036116e55750604082019060056112b283610bd3565b6112bb81610ba8565b1415806116c9575b6116955790611301916112d68480610acc565b93906112f86112e58888610acc565b9190926112f0610ca7565b973691610d01565b86523691610d01565b6020840152600581019261135a611320855467ffffffffffffffff1690565b9160608701926113308489610d37565b9161133a87610bd3565b9161135361134b60808c018c610d6a565b943690610ee3565b9187611fb4565b60078201805460ff1661136c81610fa6565b15610650576101b96113999161139461138e611388868b610d37565b80610fb0565b91611151565b6120f0565b611677576113b260206113ac8388610d37565b0161118c565b6113bf6101b98251612495565b908161165c575b81156115f9575b506115df579061142f61142960069361141e6113ee855460ff9060081c1690565b6113f88a80610acc565b906114038d8d610acc565b9290916114188d5467ffffffffffffffff1690565b946125d9565b611590575b87610d37565b826127cd565b7ff8ffe9cd82961879c9a3e9fa981504d3268956cd2c302581573586df965d296361145a8680610acc565b906114956114688a8a610acc565b9561148661147e8b5467ffffffffffffffff1690565b915460ff1690565b968792604051968796876111d5565b0390a16114a181610ba8565b149081611573575b506114b7575b505050600190565b611505926114c86108a18480610acc565b6114de6105006105006105006108ca8780610acc565b906114f46114ec8580610acc565b929095610acc565b9590935467ffffffffffffffff1690565b823b156100d9575f946115498692604051988997889687957f5e11a22000000000000000000000000000000000000000000000000000000000875260048701611224565b03925af180156105bf5761155f575b80806114af565b8061096a5f61156d93610c66565b5f611558565b6006915061158090610bd3565b61158981610ba8565b145f6114a9565b83547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001660061784556115da846115c78a80610acc565b906115d28d8d610acc565b9290916126be565b611423565b505050509081610308610300826115f595610acc565b5f90565b602091500167ffffffffffffffff611619825167ffffffffffffffff1690565b161515908161162a575b505f6113cd565b905067ffffffffffffffff611652610295611643612557565b935167ffffffffffffffff1690565b911610155f611623565b90506116716116696124c0565b8251906124f6565b906113c6565b50505050908161168d610300826115f595610acc565b9290916123bd565b610a876116a183610bd3565b7f436fc71a000000000000000000000000000000000000000000000000000000005f52610bb7565b5060066116d583610bd3565b6116de81610ba8565b14156112c3565b610a87907f8b522a8c000000000000000000000000000000000000000000000000000000005f52610bb7565b9060405161171e81610c0d565b602067ffffffffffffffff829454818116845260401c16910152565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b805415611779575f5260205f20905f90565b61173a565b5f929181549161178d83610fef565b92600181169081156117d557506001146117a657505050565b90919293505f5260205f205f905b8382106117c15750500190565b6001816020925484860152019101906117b4565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff001683525050811515909102019150565b6020611818916040519283809261177e565b7f9ef02a9acd7179d999aa130fa65a34ac06dd2f1bae667ae0fb5500040879380081520301902090565b6020611854916040519283809261177e565b7f521e6acb905d37b69880078e1a941104ad5d8bcb8c5cf52f1d5f47d31739d50081520301902090565b908160209103126100d95751610bdd81610e64565b5f92918154916118a283610fef565b80835292600181169081156118f757506001146118be57505050565b5f9081526020812093945091925b8383106118dd575060209250010190565b6001816020929493945483858701015201910191906118cc565b905060209495507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0091509291921683830152151560051b010190565b67ffffffffffffffff6020809282813561194c81610e64565b168552013561195a81610e64565b16910152565b92916020611979610cb693606087526060870190611893565b940190611933565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41813603018212156100d9570190565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1813603018212156100d9570180359067ffffffffffffffff82116100d957602001918160051b360383136100d957565b156100d957565b90610cb6611a239260405193848092611893565b0383610c66565b35610bdd81610d9d565b90156117795780611a4491610acc565b9091565b35610bdd81610e64565b3590610cb682610bc9565b91906040838203126100d95760405190611a7682610c0d565b8193803567ffffffffffffffff81116100d95782611a95918301610dca565b835260208101359167ffffffffffffffff83116100d957602092610fa19201610dca565b91909160c0818403126100d957611ace610cb8565b92611ad882611a52565b8452611ae660208301610da7565b6020850152604082013567ffffffffffffffff81116100d95781611b0b918401611a5d565b6040850152606082013567ffffffffffffffff81116100d95781611b30918401610de5565b606085015260808201359167ffffffffffffffff83116100d957611b5b60a092611b66948301610dca565b608086015201610e76565b60a0830152565b60405190611b7a82610c4a565b5f60a083828152826020820152604051611b9381610c0d565b60608152606060208201526040820152606080820152606060808201520152565b611bbd82610ba8565b52565b908160209103126100d9575180151581036100d95790565b939260409361124b6112599373ffffffffffffffffffffffffffffffffffffffff95999899606089526060890191611197565b9035907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1813603018212156100d9570190565b6040813603126100d95760405190611c5582610c0d565b8035611c6081610e64565b825260208101359067ffffffffffffffff82116100d957611c8391369101610dca565b602082015290565b611c986101458280610acc565b611caa602083019161015d8385610acc565b91611cb9600784015460ff1690565b611cc281610fa6565b1561065057611ce8610500610500610500611cdd8580610acc565b906108d58888610acc565b6020611cf48380610acc565b9092611d008686610acc565b92611d3c604051968795869485947fce7d0a3b000000000000000000000000000000000000000000000000000000008652339360048701611bd8565b03915afa9081156105bf575f91611f85575b5080611f67575b611f555760408101611d74611d6a8284611c0b565b6020810190610acc565b905015611f2d576006611d88855460ff1690565b611d9181610ba8565b03611e7c57611da8611da38284611c0b565b611a48565b67ffffffffffffffff611dc9610295600588015467ffffffffffffffff1690565b911603611e5457610cb693611e3f915b611e23611deb6101d860038501611767565b92611e34611e2f611e2a611e0260608a018a610acc565b959094611e1d6002611e1660018401611040565b9201611040565b9061302e565b9589611c0b565b611c3e565b613110565b936080870190613302565b611e4c6103008280610acc565b929091612443565b7f04695fd4000000000000000000000000000000000000000000000000000000005f5260045ffd5b92611e8a611da38584611c0b565b90600581019167ffffffffffffffff611eae610295855467ffffffffffffffff1690565b911610611f055784611f00611e3f93611ecd611da3610cb69988611c0b565b67ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b611dd9565b7fcb51570f000000000000000000000000000000000000000000000000000000005f5260045ffd5b7fec8edc1a000000000000000000000000000000000000000000000000000000005f5260045ffd5b610cb69250611e4c6103008280610acc565b506006611f75845460ff1690565b611f7e81610ba8565b1415611d55565b611fa7915060203d602011611fad575b611f9f8183610c66565b810190611bc0565b5f611d4e565b503d611f95565b909361209b612095612089949661208f612081610cb69a61204a611fdd6101d860038b01611767565b9b8c95611fef8b5460ff9060081c1690565b9061201e61200261080f60048b01611040565b9261201561200e610cb8565b9d8e611bb4565b60208d01610fe3565b60408b015260608a015261203460048b01611040565b60808a015267ffffffffffffffff1660a0890152565b611d6a604082019761205c8380610acc565b9690600260018d019c01976120708d611040565b918c61207b8b611040565b94612fcf565b979096611040565b91611040565b906133dd565b94613420565b94613302565b8051156117795760200190565b80518210156117795760209160051b010190565b805191908290602001825e015f815290565b602061181891604051928380926120c2565b60041115610bb257565b80516120fb81610fa6565b61210483611a2a565b9061210e82610fa6565b61211781610fa6565b036121ab576040810151602081519101206121386103746040850185610acc565b60208151910120036121ab57612154602061215a9201516120a1565b516120d4565b90600361216b600284015460ff1690565b612174816120e6565b036121ab5760046121926103746104288460206121a09601906119b4565b602081519101209201611a0f565b602081519101201490565b50505f90565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b8181106121e9575050565b5f81556001016121de565b6121fe8154610fef565b9081612208575050565b81601f5f9311600114612219575055565b8183526020832061223591601f0160051c8101906001016121de565b808252602082209081548360011b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8560031b1c191617905555565b5f8155600181018054905f8155816122a7575b505060058161229760025f94016121f4565b8260016003830182815501550155565b5f5260205f20908101905b8181101561228557806122c66001926121f4565b016122b2565b9092600392610cb69467ffffffffffffffff600561231e604051848882376020818681017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc008152030190208686610b62565b877fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617815561235260078201612272565b61235b816134a4565b61237461236936868a610d01565b61208f368989610d01565b602081519101205f527f1ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c9006020525f60408120556123b4818787878b6126be565b0154169361353d565b9092600592610cb69467ffffffffffffffff8561240e604051848882376020818681017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc008152030190208686610b62565b60037fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0082541617815561235260078201612272565b9092600492610cb69467ffffffffffffffff600561240e604051848882376020818681017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc008152030190208686610b62565b67ffffffffffffffff8151161590816124ac575090565b67ffffffffffffffff915060200151161590565b5f60206040516124cf81610c0d565b82815201526040516124e081610c0d565b5f815267ffffffffffffffff4316602082015290565b67ffffffffffffffff8151169167ffffffffffffffff815116808411938415612521575b5050505090565b1492509082612536575b50505f80808061251a565b67ffffffffffffffff80929350602080920151169201511611155f8061252b565b633b9aca0067ffffffffffffffff42160267ffffffffffffffff811690810361257d5790565b6121b1565b9496959173ffffffffffffffffffffffffffffffffffffffff936060956125be67ffffffffffffffff946125cc9460808b5260808b0191611197565b9188830360208a0152611197565b9616604085015216910152565b60029094939192946125ea81610fa6565b14612672575b8361264461260b610500610500610500888760209b8a6137f5565b93604051978896879586957f4c707d97000000000000000000000000000000000000000000000000000000008752339460048801612582565b03915afa9081156105bf575f91612659575090565b610bdd915060203d602011611fad57611f9f8183610c66565b60066126886126818685610b2a565b8584610b62565b015467ffffffffffffffff6126ad6102958284169360801c67ffffffffffffffff1690565b9116036125f0575050505050600190565b61279d9261278f612797926127806127ca97959861277b61276a6005604051936126e785610c4a565b61270960ff82548181166126fa81610ba8565b885260081c1660208701610fe3565b60405161271581610c0d565b61272160018301611040565b815261272f60028301611040565b60208201526040860152612745600382016110fc565b606086015261275660048201611040565b6080860152015467ffffffffffffffff1690565b67ffffffffffffffff1660a0830152565b6136ad565b60208151910120973691610d01565b923691610d01565b90613796565b5f527f1ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c90060205260405f2090565b55565b600e6060610cb6936128736010850167ffffffffffffffff815460401c16612951575b80547fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff811660409190911b6fffffffffffffffff00000000000000001617815560808301359061283f82610e64565b9067ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b612910600d85016128c0602084013561288b81610e64565b829067ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b6040830135906128cf82610e64565b907fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b169116179055565b01359161291c83610e64565b019067ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b61295a866134a4565b6127f0565b906024916003811015610bb257600452565b906003811015610bb2577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00ff61ff0083549260081b169116179055565b9190601f81116129bc57505050565b610cb6925f5260205f20906020601f840160051c830193106129e6575b601f0160051c01906121de565b90915081906129d9565b919091828114612b3357612a048354610fef565b67ffffffffffffffff8111610c2957612a2781612a218454610fef565b846129ad565b5f93601f8211600114612a8457612a7592939482915f92612a79575b50507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8260011b9260031b1c19161790565b9055565b015490505f80612a43565b612ab47fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe08316915f5260205f2090565b94612ac2845f5260205f2090565b915f5b818110612b1b57509583600195969710612ae4575b505050811b019055565b01547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60f88460031b161c191690555f8080612ada565b9192600180602092868b015481550194019201612ac5565b509050565b818114612bc557815491680100000000000000008311610c29578154838355808410612b98575b505f5260205f20905f5260205f205f915b838310612b7d5750505050565b60018082612b8c8294866129f0565b01920192019190612b70565b825f528360205f2091820191015b818110612bb35750612b5f565b80612bbf6001926121f4565b01612ba6565b5050565b9091939293612be2612bdb8484610b2a565b8683610b62565b60078101805460ff16612bf481610fa6565b60028103612e6f575095612e5d600583612e067f241369740b78e45d97df8f622c144ef45c38c584444d29373ee9ec116c3c1b32999a612da4612d6c8a8c612d5d61279d8b612d57612e6a9f9e8f9080612ca66006612c616010612cf095015467ffffffffffffffff1690565b92019182907fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff6fffffffffffffffff000000000000000083549260401b169116179055565b80547fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff811660809190911b77ffffffffffffffff0000000000000000000000000000000016179055565b61278f60068d0197612d0e895467ffffffffffffffff9060401c1690565b604051612d4c816103e36020820194857fffffffffffffffff00000000000000000000000000000000000000000000000060089260c01b1681520190565b519020973691610d01565b906137aa565b555467ffffffffffffffff1690565b601185019067ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b612db8612db2825460ff1690565b84612971565b612dc860098401600485016129f0565b612dd86008840160038501612b38565b82547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166003178355612272565b612e35601082017fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff8154169055565b612e428185878b8b6126be565b612e4e84868a8a613a93565b015467ffffffffffffffff1690565b9160405195869586611224565b0390a1565b612e7881610fa6565b60018103612f45575095612e5d600583612e067f241369740b78e45d97df8f622c144ef45c38c584444d29373ee9ec116c3c1b32999a612da4612d6c8a8c612d5d61279d8b612d57612e6a9f9e8f906006612f409101612f0581680100000000000000007fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff825416179055565b7001000000000000000000000000000000007fffffffffffffffff0000000000000000ffffffffffffffffffffffffffffffff825416179055565b612cf0565b610a87907f1aadb682000000000000000000000000000000000000000000000000000000005f5261295f565b67ffffffffffffffff8151169167ffffffffffffffff815116808410938415612f9b575050505090565b1492509082612faf5750505f80808061251a565b67ffffffffffffffff809293506020809201511692015116115f8061252b565b94612fe161209b91610cb698966138cb565b946136ad565b60405190612ff6604083610c66565b6001825260205f5b81811061301d5750508151156117795760208201528051156117795790565b806060602080938701015201612ffe565b610bdd906103e361309793600a6040519586947f6368616e6e656c55706772616465732f757067726164654572726f722f706f7260208701527f74732f0000000000000000000000000000000000000000000000000000000000604087015260438601906120c2565b7f2f6368616e6e656c732f00000000000000000000000000000000000000000000815201906120c2565b906130cb82610cc7565b6130d86040519182610c66565b8281527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe06131068294610cc7565b0190602036910137565b61312467ffffffffffffffff8251166142a8565b90816001018060011161257d576020820192613141845151613cfa565b8060010160011161257d57600291010180911161257d57613161906130c1565b9160209167ffffffffffffffff8151166131bb575b5090818361318c935151613191575b5050613945565b815290565b806131ac846131a66131a6946131b497614305565b90613938565b8093516143ac565b5f83613185565b6131c4846142c7565b830180931161257d57826131a68561318c956131eb6131f0955167ffffffffffffffff1690565b613d0f565b91613176565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f602080948051918291828752018686015e5f8582860101520116010190565b9592613295926132a3956132879261326e613263610bdd9c9a966101208d526101208d0190611893565b9360208c0190611933565b5f60608b01525f60808b015289830360a08b0152611197565b9086820360c0880152611893565b9084820360e08601526131f6565b916101008184039101526131f6565b96959390946132f46080946132e6611979956132d8610cb69a60c08e8181520190611893565b8c810360208e0152906131f6565b908a820360408c01526131f6565b9188830360608a0152611197565b9394929190928460208488855f896133648861332861050061050060016104e58d611842565b95604051998a98899788967ff9bb5a51000000000000000000000000000000000000000000000000000000008852600584019360048901613239565b03925af19081156105bf575f916133be575b506133b6576040517f2c4d329b000000000000000000000000000000000000000000000000000000008152965086956133b295600488016132b2565b0390fd5b505050505050565b6133d7915060203d602011611fad57611f9f8183610c66565b5f613376565b610bdd906103e361309793600a6040519586947f6368616e6e656c55706772616465732f75706772616465732f706f7274732f006020870152603f8601906120c2565b61343261342d8251613d24565b613cfa565b80600101908160011161257d5761344f61342d6020850151613d96565b8060010160011161257d57600291010180911161257d5761347d67ffffffffffffffff6040840151166142a8565b6001018060011161257d5761349861349d9161318c93613938565b6130c1565b80926139ba565b6010810167ffffffffffffffff815460401c1680156134ff5781547fffffffffffffffffffffffffffffffff000000000000000000000000000000001667ffffffffffffffff9091161790555f90600190600d018281550155565b505050565b92610bdd96946111fc6135299367ffffffffffffffff95608088526080880191611197565b9316604082015260608184039101526131f6565b929093919594600f613583604051878782376020818981017f1952ed347963c5b7b1856335782fc9c26716d4219254baf3dfc6b26981b2dc00815203019020848a610b62565b01805467ffffffffffffffff1667ffffffffffffffff851667ffffffffffffffff821610156136715750916136178492613612612e6a967fef7ecb538ba766888f61a77318bf9fe298813d0ea1c94781985411946e1daa349a9b969067ffffffffffffffff167fffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000825416179055565b613adc565b9261363b613623610ca7565b67ffffffffffffffff85168152856020820152613110565b6020815191012061366461279d613653368b8b610d01565b61365e368787610d01565b90613b58565b5560405196879687613504565b7f8910397b000000000000000000000000000000000000000000000000000000005f5267ffffffffffffffff908116600452841660245260445ffd5b906137126136ff6136e06136db6136d66136d087516136cb81610ba8565b6140b0565b60030b90565b614151565b61390e565b6131a66136db6136d66136d060208901516136fa81610fa6565b614163565b6131a66136db61342d604087015161419d565b60608301915f915b8351805184101561374a576001916131a66136db61373b87613742956120ae565b5151613cfa565b92019161371a565b5061378f9194935061318c925061376f613498916131a66136db608088015151613cfa565b6131a66136db61378a60a088015167ffffffffffffffff1690565b613ce7565b8092613b62565b906137a0916138cb565b6020815191012090565b906137ef6103e391604051928391600a61309760208501977f6e65787453657175656e6365526563762f706f7274732f000000000000000000895260378601906120c2565b51902090565b9173ffffffffffffffffffffffffffffffffffffffff613849604051848682376020818681017f74277c96171a830beeb656543654929b9b37cec88976b4c319247999515505028152030190208684610b62565b5416938415613859575050505090565b906133b29161389b6040519586957f8e64f0b9000000000000000000000000000000000000000000000000000000008752604060048801526044870191611197565b917ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc858403016024860152611197565b610bdd906103e361309793600a6040519586947f6368616e6e656c456e64732f706f7274732f0000000000000000000000000000602087015260328601906120c2565b600101908160011161257d57565b602001908160201161257d57565b906020820180921161257d57565b9190820180921161257d57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0820191821161257d57565b602003906020821161257d57565b907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820191821161257d57565b9190820391821161257d57565b90915f90600a906020808601835b60071c9384156139ee576001918291608017815301940195607f841693969490966139c8565b9060219397959296945053019182841161257d576040613a38610bdd956131a684613a2e613a24896131a68460209c8c51613de1565b6131a68382614305565b8093880151613f0e565b920167ffffffffffffffff613a55825167ffffffffffffffff1690565b16613a62575b50506139ad565b816131a691613a7b856131a66131eb96613a8c98614312565b9384915167ffffffffffffffff1690565b5f80613a5b565b9161278f613aa7949361208f933691610d01565b602081519101205f527f1ee222554989dda120e26ecacf756fe1235cd8d726706b57517715dde4f0c9006020525f6040812055565b6040805191613aeb8284610c66565b600183527fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0602084019201368337613b2281610ba8565b8251156117795760300160f81b7fff00000000000000000000000000000000000000000000000000000000000000165f1a905390565b906137a09161302e565b90613bbc613bad60208451613b7681610ba8565b613b7f81610ba8565b613cbe575b83602086018051613b9481610fa6565b613b9d81610fa6565b613c91575b506131a69082614339565b6131a6838260408701516141c3565b9160608101805151613c42575b5091602091836080610bdd9501805151613c22575b5060a00167ffffffffffffffff613bfd825167ffffffffffffffff1690565b16613c095750506139ad565b816131a691613a7b856131a66131eb96613a8c98614360565b613c3b906131a6846131ac876131a68360a0989a614353565b9290613bde565b935f939193915b855151831015613c8457613c7c613c66826131a687600195614346565b6131a68682613c76888c516120ae565b516143ac565b920191613c49565b9094509290506020613bc9565b816131a691613caa856131a66131eb96613cb79861432c565b938491516136fa81610fa6565b835f613ba2565b613ccf816131a686613ce29461431f565b6131a685826131eb89516136cb81610ba8565b613b84565b67ffffffffffffffff610bdd91166142a8565b613d03816142a8565b810180911161257d5790565b9067ffffffffffffffff610bdd93921661437c565b9081516003811015610bb257613d3c613d4491614163565b60030b614151565b6001018060011161257d575f905b60208401518051831015613d7e576001916131a66136db61373b86613d76956120ae565b910190613d52565b5090506131a66136db6040610bdd9495015151613cfa565b613da361342d82516143f5565b80600101918260011161257d5767ffffffffffffffff6020613dc7920151166142a8565b8060010160011161257d57600291010180911161257d5790565b9291613def61349885613d24565b936020908051613dfe81610fa6565b613e0781610fa6565b613edf575b60208101805151613e93575b50613e6d610bdd9596613e7294613e42613e67956040613e61960184815151613e77575050613945565b948592613e59613e53848b8761437c565b8a613938565b95869161392a565b92613938565b90614418565b613938565b6139ad565b806131ac846131a66131a694613e8c97614339565b5f84613185565b93909491925f935b855151851015613ed057613ec8613eb8826131a68b600195614305565b6131a68a82613c768a8c516120ae565b940193613e9b565b92959194509250613e6d613e18565b9050613f08613ef5613ef0876142c7565b61391c565b6131a687826131eb86516136fa81610fa6565b90613e0c565b91613f1b61349884613d96565b906020613f278361436d565b81019081811161257d578551613f3f613498826143f5565b91809167ffffffffffffffff815116614036575b610bdd98876020613fcd886131a6613e619a613e728b613e729f9b613e679f9b90613e6d9e613fa192613e429d01613f96610295825167ffffffffffffffff1690565b614016575050613945565b90613e6d82613fc3613fbd613fb78d898561437c565b88613938565b9361392a565b613e67848d613938565b920167ffffffffffffffff613fea825167ffffffffffffffff1690565b16613ff6575050613945565b816131a691613a7b856131a66131eb9661400f9861432c565b835f613185565b816131a691613a7b856131a66131eb9661402f9861432c565b825f613185565b959150936140458394936142c7565b85019485811161257d57610bdd98836020613fcd876131a6613e6d99613e728c613e729f613e679f90613e619f613e429c614094846131a684613fa1976131eb885167ffffffffffffffff1690565b9f509d9f50509a50509b9d505050509850505097509850613f53565b6140b981610ba8565b801561414c576140c881610ba8565b60018114614146576140d981610ba8565b60028114614140576140ea81610ba8565b6003811461413a576140fb81610ba8565b600481146141345761410c81610ba8565b6005811461412e5780614120600692610ba8565b14614129575f80fd5b600690565b50600590565b50600490565b50600390565b50600290565b50600190565b505f90565b5f8160070b125f14613ce75750600a90565b6003811015610bb257801561414c5761417b81610fa6565b600181146141465760029061418f81610fa6565b14614198575f80fd5b600290565b6141a8815151613cfa565b80600101918260011161257d576020613dc791015151613cfa565b916141d06134988461419d565b92602090805151614219575b613e6d610bdd95613e7294613e42613e67956020613e61960184815151614204575050613945565b806131ac846131a66131a694613e8c97614305565b6142228561436d565b918281019283821161257d5782519081519161423f89878561437c565b9380855f94018b01019101905b8383106142915750509050810180911161257d57610bdd95613e7294613e42613e61946020614281613e6d96613e6799613938565b97505094505094509550506141dc565b600180809284515f1a81530192019201919061424c565b60019060071c805b6142b8575090565b60019091019060071c806142b0565b90600860205f93016008915b60071c9182156142f9576001918291608017815301930190607f811690939091936142d3565b90600193949250530190565b5f929183910160126142f9565b5f929183910160186142f9565b5f929183910160086142f9565b5f929183910160106142f9565b5f9291839101601a6142f9565b5f929183910160226142f9565b5f9291839101602a6142f9565b5f929183910160306142f9565b5f91908290602001600a6142f9565b5f9392607f821692019060071c9182156142f9576001918291608017815301930190607f811690939091936142d3565b9081519160206143bd85848661437c565b94855f9401019101905b8383106143de5750509050810180911161257d5790565b600180809284515f1a8153019201920191906143c7565b613da367ffffffffffffffff8251166142a8565b601f811161257d576101000a90565b909180156134ff575b602081116144505761443d61443861444292613972565b614409565b613980565b905182518216911916179052565b9091825181526020810180911161257d57916020810180911161257d57907fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0810190811115614421576121b156fea2646970667358221220b5110b8d610ff38940d8fc033c6d20e90df46693c4db1efcb8a66d75a271333064736f6c634300081c0033