0 txs
0 calls
constructor
constructor(address _endpointLocator, address _delegate, uint32 _readChannel, address _delegatexyz, address _exclusiveDelegateResolver, address _initialAdmin)
functions
allowedExecutors
viewfunction allowedExecutors(address executor) view returns (bool allowed)
allowInitializePath
viewfunction allowInitializePath(tuple origin) view returns (bool)
baseToShadow
viewfunction baseToShadow(address baseCollectionAddress) view returns (address)
COLLECTION_REGISTRAR_ROLE
viewfunction COLLECTION_REGISTRAR_ROLE() view returns (bytes32)
collectionConfigs
viewfunction collectionConfigs(address baseCollectionAddress) view returns (uint32 baseCollectionChainId, uint32 baseCollectionEid, uint32 baseCollectionPerNftOwnershipUpdateCost, address shadowAddress)
combineOptions
viewfunction combineOptions(uint32 _eid, uint16 _msgType, bytes _extraOptions) view returns (bytes)
DEFAULT_ADMIN_ROLE
viewfunction DEFAULT_ADMIN_ROLE() view returns (bytes32)
DELEGATE_REGISTRY_ADDRESS
viewfunction DELEGATE_REGISTRY_ADDRESS() view returns (address)
delegatedOwners
viewfunction delegatedOwners(address collection, uint256 tokenId) view returns (address delegatedOwner)
endpoint
viewfunction endpoint() view returns (address)
enforcedOptions
viewfunction enforcedOptions(uint32 eid, uint16 msgType) view returns (bytes enforcedOption)
enforceExecutors
viewfunction enforceExecutors() view returns (bool)
EXCLUSIVE_DELEGATE_RESOLVER_ADDRESS
viewfunction EXCLUSIVE_DELEGATE_RESOLVER_ADDRESS() view returns (address)
getReadOptions
viewfunction getReadOptions(address baseCollectionAddress, uint256[] tokenIds, uint128 supplementalGasLimit) view returns (bytes)
getRoleAdmin
viewfunction getRoleAdmin(bytes32 role) view returns (bytes32)
getSendOptions
viewfunction getSendOptions(uint32 dstEid, address baseCollectionAddress, uint256[] tokenIds, uint128 supplementalGasLimit) view returns (bytes)
hasRole
viewfunction hasRole(bytes32 role, address account) view returns (bool)
initTimestamps
viewfunction initTimestamps(bytes32 guid) view returns (uint256 timestamp)
isComposeMsgSender
viewfunction isComposeMsgSender(tuple, bytes, address _sender) view returns (bool)
lzMap
viewfunction lzMap(bytes _request, bytes _response) view returns (bytes)
lzReduce
viewfunction lzReduce(bytes _request, bytes[] _responses) view returns (bytes)
nextNonce
viewfunction nextNonce(uint32, bytes32) view returns (uint64 nonce)
oAppVersion
purefunction oAppVersion() pure returns (uint64 senderVersion, uint64 receiverVersion)
owner
viewfunction owner() view returns (address)
payloadHashes
viewfunction payloadHashes(uint32, bytes32, uint64) view returns (bytes32)
peers
viewfunction peers(uint32 eid) view returns (bytes32 peer)
quoteRead
viewfunction quoteRead(address baseCollectionAddress, uint256[] tokenIds, uint32[] dstEids, uint128 supplementalGasLimit) view returns (uint256 nativeFee, uint256 lzTokenFee)
quoteSend
viewfunction quoteSend(uint32 dstEid, address baseCollectionAddress, uint256[] tokenIds, uint128 supplementalGasLimit) view returns (uint256 nativeFee, uint256 lzTokenFee)
readChannel
viewfunction readChannel() view returns (uint32)
requiredConfirmations
viewfunction requiredConfirmations(uint32 eid) view returns (uint16)
SHADOW_TOKEN_RIGHTS
viewfunction SHADOW_TOKEN_RIGHTS() view returns (bytes24)
shadowToBase
viewfunction shadowToBase(address shadowCollectionAddress) view returns (address)
supportsInterface
viewfunction supportsInterface(bytes4 interfaceId) view returns (bool)
THIS_CONTRACT_EID
viewfunction THIS_CONTRACT_EID() view returns (uint32)
unlockedExclusiveOwnerByRights
viewfunction unlockedExclusiveOwnerByRights(address baseCollectionAddress, uint256 tokenId, bytes24 rightsIdentifier) view returns (address _owner, bool _isLocked)
executeMessage
nonpayablefunction executeMessage(tuple _origin, bytes32 guid, bytes _message)
grantRole
nonpayablefunction grantRole(bytes32 role, address account)
lzReceive
payablefunction lzReceive(tuple _origin, bytes32 _guid, bytes _message, address _executor, bytes _extraData) payable
read
payablefunction read(address baseCollectionAddress, uint256[] tokenIds, uint32[] eids, address refundRecipient, uint128 supplementalGasLimit) payable returns (bytes32)
registerCollection
nonpayablefunction registerCollection(address shadowCollectionAddress, uint32 baseCollectionChainId, address baseCollectionAddress, uint32 baseCollectionEid, uint32 baseCollectionPerNftOwnershipUpdateCost)
renounceOwnership
nonpayablefunction renounceOwnership()
renounceRole
nonpayablefunction renounceRole(bytes32 role, address callerConfirmation)
retryFailedMessage
nonpayablefunction retryFailedMessage(uint32 srcEid, bytes32 sender, uint64 nonce, tuple origin, bytes32 guid, bytes message)
revokeRole
nonpayablefunction revokeRole(bytes32 role, address account)
send
payablefunction send(uint32 dstEid, address baseCollectionAddress, uint256[] tokenIds, address beneficiary, address refundRecipient, uint128 supplementalGasLimit) payable
setAllowedExecutor
nonpayablefunction setAllowedExecutor(address executor, bool allowed)
setBaseCollectionPerNftOwnershipUpdateCost
nonpayablefunction setBaseCollectionPerNftOwnershipUpdateCost(address baseCollectionAddress, uint32 cost)
setDelegate
nonpayablefunction setDelegate(address _delegate)
setEnforcedOptions
nonpayablefunction setEnforcedOptions(tuple[] _enforcedOptions)
setEnforceExecutors
nonpayablefunction setEnforceExecutors(bool _enforceExecutors)
setPeer
nonpayablefunction setPeer(uint32 _eid, bytes32 _peer)
setReadChannel
nonpayablefunction setReadChannel(uint32 _channelId, bool _active)
setReadChannel
nonpayablefunction setReadChannel(uint32 _readChannel)
setRequiredConfirmations
nonpayablefunction setRequiredConfirmations(uint32 eid, uint16 confirmations)
transferOwnership
nonpayablefunction transferOwnership(address newOwner)
events
AllowedExecutorSet
event AllowedExecutorSet(address executor, bool allowed)
CachedMessageExecuted
event CachedMessageExecuted(uint32 indexed srcEid, bytes32 indexed sender, uint64 nonce)
CollectionRegistered
event CollectionRegistered(address indexed collectionAddress, address indexed baseCollectionAddress, uint32 indexed baseCollectionEid)
EnforcedOptionSet
event EnforcedOptionSet((uint32 eid, uint16 msgType, bytes options)[] _enforcedOptions)
EnforceExecutionSet
event EnforceExecutionSet(bool enforceExecutors)
MessageCached
event MessageCached(uint32 indexed srcEid, bytes32 indexed sender, uint64 nonce, bytes reason)
OwnershipTransferred
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
PeerSet
event PeerSet(uint32 eid, bytes32 peer)
ReadChannelSet
event ReadChannelSet(uint32 readChannel)
ReadTriggered
event ReadTriggered(address indexed baseCollectionAddress, address indexed shadowCollectionAddress, uint32[] eids, uint256[] tokenIds)
RequiredConfirmationsSet
event RequiredConfirmationsSet(uint32 eid, uint16 confirmations)
RoleAdminChanged
event RoleAdminChanged(bytes32 indexed role, bytes32 indexed previousAdminRole, bytes32 indexed newAdminRole)
RoleGranted
event RoleGranted(bytes32 indexed role, address indexed account, address indexed sender)
RoleRevoked
event RoleRevoked(bytes32 indexed role, address indexed account, address indexed sender)
Sent
event Sent(uint32 indexed eid, address indexed baseCollectionAddress, address indexed collection, uint256[] tokenIds, address beneficiary)
errors
AccessControlBadConfirmation
error AccessControlBadConfirmation()
AccessControlUnauthorizedAccount
error AccessControlUnauthorizedAccount(address account, bytes32 neededRole)
BeneficiaryZeroAddress
error BeneficiaryZeroAddress()
BurnFailed
error BurnFailed()
CollectionAlreadyRegistered
error CollectionAlreadyRegistered()
CollectionNotInShadowMode
error CollectionNotInShadowMode()
ContractNotConfigured
error ContractNotConfigured()
InvalidCaller
error InvalidCaller()
InvalidChain
error InvalidChain()
InvalidDelegate
error InvalidDelegate()
InvalidEid
error InvalidEid()
InvalidEndpointCall
error InvalidEndpointCall()
InvalidOptions
error InvalidOptions(bytes options)
InvalidOptionType
error InvalidOptionType(uint16 optionType)
InvalidOwner
error InvalidOwner()
InvalidPayloadHash
error InvalidPayloadHash()
InvalidReadChannel
error InvalidReadChannel()
LzTokenUnavailable
error LzTokenUnavailable()
MaxLzReceiveGasAllocationExceeded
error MaxLzReceiveGasAllocationExceeded()
MintFailed
error MintFailed()
MismatchedCollectionAddress
error MismatchedCollectionAddress()
NoPeer
error NoPeer(uint32 eid)
NotEnoughNative
error NotEnoughNative(uint256 msgValue)
OnlyEndpoint
error OnlyEndpoint(address addr)
OnlyInternalCalls
error OnlyInternalCalls()
OnlyPeer
error OnlyPeer(uint32 eid, bytes32 sender)
OwnableInvalidOwner
error OwnableInvalidOwner(address owner)
OwnableUnauthorizedAccount
error OwnableUnauthorizedAccount(address account)
SafeCastOverflowedUintDowncast
error SafeCastOverflowedUintDowncast(uint8 bits, uint256 value)
SafeERC20FailedOperation
error SafeERC20FailedOperation(address token)
StaleReadRequest
error StaleReadRequest()
TransferFailed
error TransferFailed()
UnauthorizedExecutor
error UnauthorizedExecutor()
UnlockFailed
error UnlockFailed()
ZeroAddress
error ZeroAddress()
ZeroLengthArray
error ZeroLengthArray()
creation bytecode
0x61012080604052346104395760009060c0816156d08038038091610023828561043e565b8339810103126104355761003681610477565b9061004360208201610477565b61004f6040830161048b565b61005b60608401610477565b9061007460a061006d60808701610477565b9501610477565b604051635e280f1160e01b815290956001600160a01b031693602082600481885afa91821561042a5788926103ea575b506001600160a01b0387169182156103d65788546001600160a01b0319811684178a5560405193906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08b80a36001600160a01b039081166080819052911680156103c757908891813b156103c3578383819360249363ca5eb5e160e01b845260048401525af180156103b8576103a0575b5063ffffffff169263fffff9be841115610391579160209160049360e0526101005260405182810146815283825261017760408361043e565b905190206001600160401b03191660a052604051635e280f1160e01b815292839182905afa908115610347578491610352575b5060405163416ecebf60e01b815290602090829060049082906001600160a01b03165afa9081156103475784916102db575b7f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b60408661022687878760c05263ffffffff1960045416176004556102208161049c565b5061053a565b5063ffffffff6004541690818152600160205282309120558151908152306020820152a16040516150bf90816105b1823960805181818161075201528181610de601528181611a8f01528181613673015281816140b901526146d6015260a0518181816110300152613318015260c0518181816106360152818161180901528181611d1401528181611eb70152613363015260e0518181816109b00152612644015261010051818181610e2b0152614d2a0152f35b90506020813d60201161033f575b816102f66020938361043e565b8101031261033b576040927f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b94926103306102269361048b565b9250929450926101dc565b8380fd5b3d91506102e9565b6040513d86823e3d90fd5b90506020813d602011610389575b8161036d6020938361043e565b8101031261033b576020610382600492610477565b91506101aa565b3d9150610360565b633df6e48d60e21b8652600486fd5b956103b18163ffffffff939861043e565b959061013e565b6040513d89823e3d90fd5b8280fd5b632d618d8160e21b8952600489fd5b631e4fbdf760e01b89526004899052602489fd5b9091506020813d602011610422575b816104066020938361043e565b8101031261041e5761041790610477565b90386100a4565b8780fd5b3d91506103f9565b6040513d8a823e3d90fd5b5080fd5b600080fd5b601f909101601f19168101906001600160401b0382119082101761046157604052565b634e487b7160e01b600052604160045260246000fd5b51906001600160a01b038216820361043957565b519063ffffffff8216820361043957565b6001600160a01b0381166000908152600080516020615690833981519152602052604090205460ff16610534576001600160a01b0316600081815260008051602061569083398151915260205260408120805460ff191660011790553391907f8970ff45bc1804c7a79662cce9df9b0403588be8e486c6f5a410a2814caa892c906000805160206156708339815191529080a4600190565b50600090565b6001600160a01b03811660009081526000805160206156b0833981519152602052604090205460ff16610534576001600160a01b031660008181526000805160206156b083398151915260205260408120805460ff191660011790553391906000805160206156708339815191528180a460019056fe6080604052600436101561001257600080fd5b60003560e01c806301a0de051461038757806301ffc9a71461038257806304bd49a51461037d578063066d591014610378578063108dcbdd1461037357806313137d651461036e57806317442b70146103695780631d56672114610364578063248a9ca31461035f5780632f2ff15d1461035a5780633400288b146103555780633530511a1461035057806336568abe1461034b57806336b1dd211461034657806337cb6736146103415780634202fce11461033c57806345248a3714610337578063461572f91461033257806347c1b3171461032d5780635535d461146103285780635e280f11146103235780636a4d86721461031e5780636eaa6904146103195780636fe87dba14610314578063715018a61461030f5780637d25a05e1461030a57806382413eac14610305578063864c651514610300578063881ae9f8146102fb5780638da5cb5b146102f657806391d14854146102f157806399315160146102ec578063a0238f3e146102e7578063a217fddf146102e2578063a34ac81b146102dd578063ade7142d146102d8578063b33b522d146102d3578063b98bd070146102ce578063bb0b6a53146102c9578063bc70b354146102c4578063c9df8167146102bf578063ca5eb5e1146102ba578063cfac96ce146102b5578063d1e1d0cc146102b0578063d547741f146102ab578063da383b97146102a6578063e052778a146102a1578063e60c287c1461029c578063eba1cf0814610297578063f0a9e48114610292578063f17488351461028d578063f1c418ee14610288578063f2fde38b14610283578063fe084c8f1461027e5763ff7bd03d1461027957600080fd5b61235f565b612157565b6120ca565b6120a7565b612062565b61201a565b611fbb565b611f5c565b611f21565b611c61565b611c1e565b611b9a565b611b0d565b611a65565b611781565b61172d565b6116f2565b6115ed565b61157a565b6114e3565b611479565b61145d565b611405565b611287565b611231565b611208565b6111a6565b611132565b6110d4565b6110ad565b611054565b61100f565b610e6b565b610e15565b610dd0565b610d76565b610b8b565b610b67565b610af6565b610ac5565b6109df565b61099a565b610950565b6108f5565b6108c4565b61086e565b610839565b61080d565b6107eb565b6106e9565b61065a565b610619565b6104b9565b6103f1565b6103a2565b6001600160a01b0381160361039d57565b600080fd5b3461039d57604036600319011261039d576004356103bf8161038c565b6001600160a01b0390811660009081526007602090815260408083206024358452825291829020549151919092168152f35b3461039d57602036600319011261039d5760043563ffffffff60e01b811680910361039d57602090637965db0b60e01b8114908115610436575b506040519015158152f35b6301ffc9a760e01b1490503861042b565b9181601f8401121561039d578235916001600160401b03831161039d576020808501948460051b01011161039d57565b606435906001600160801b038216820361039d57565b60a435906001600160801b038216820361039d57565b608435906001600160801b038216820361039d57565b3461039d57608036600319011261039d576004356104d68161038c565b6024356001600160401b03811161039d576104f5903690600401610447565b91906044356001600160401b03811161039d57610516903690600401610447565b9361051f610477565b6001600160a01b0385166000908152600560205260409020610543905b5460601c90565b916001600160a01b038316156105fe5761056881866105999960009761057e976132f3565b9461057860045463ffffffff1690565b96612914565b60405180958192632f1c2cd560e21b83528660048401612476565b0381305afa9182156105f9576105b7936000936105d4575b5061360f565b8051602091820151604080519283529282015290819081015b0390f35b6105f29193503d806000833e6105ea8183610cb1565b810190612451565b91386105b1565b61249a565b622dc1c960e71b60005260046000fd5b600091031261039d57565b3461039d57600036600319011261039d57602060405163ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461039d57602036600319011261039d576004356106778161038c565b60018060a01b03166000526005602052602060406000205460601c604051908152f35b606090600319011261039d57600490565b606090606319011261039d57606490565b9181601f8401121561039d578235916001600160401b03831161039d576020838186019501011161039d57565b60e036600319011261039d576106fe3661069a565b6064356084356001600160401b03811161039d576107209036906004016106bc565b9060a4359261072e8461038c565b60c4356001600160401b03811161039d5761074d9036906004016106bc565b5050337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316036107d65784359461078b866108b6565b610794866136d8565b9560208201358097036107ae57506107ac9550613753565b005b63ffffffff816107be89936108b6565b63309afaf360e21b6000521660045260245260446000fd5b6391ac5e4f60e01b6000523360045260246000fd5b3461039d57600036600319011261039d57604080516001815260026020820152f35b3461039d57602036600319011261039d57600435600052600a6020526020604060002054604051908152f35b3461039d57602036600319011261039d576020610866600435600052600360205260016040600020015490565b604051908152f35b3461039d57604036600319011261039d576107ac6024356004356108918261038c565b6108b16108ac82600052600360205260016040600020015490565b613929565b613966565b63ffffffff81160361039d57565b3461039d57604036600319011261039d576107ac6004356108e4816108b6565b602435906108f06139fa565b613a23565b3461039d57606036600319011261039d576004356109128161038c565b60443560243567ffffffffffffffff198216820361039d576109339261252a565b604080516001600160a01b03939093168352901515602083015290f35b3461039d57604036600319011261039d576004356024356109708161038c565b336001600160a01b03821603610989576107ac91613a6b565b63334bd91960e11b60005260046000fd5b3461039d57600036600319011261039d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461039d57602036600319011261039d576004356109fc8161038c565b60018060a01b03166000526009602052602060ff604060002054166040519015158152f35b608060031982011261039d57600435610a39816108b6565b91602435610a468161038c565b91604435906001600160401b03821161039d57610a6591600401610447565b90916064356001600160801b038116810361039d5790565b60005b838110610a905750506000910152565b8181015183820152602001610a80565b90602091610ab981518092818552858086019101610a7d565b601f01601f1916010190565b3461039d576105d0610ae2610ad936610a21565b939290926127bd565b604051918291602083526020830190610aa0565b3461039d57610b0436610a21565b6001600160a01b0380851660009081526005602052604090209195949391610b2b9061053c565b16156105fe576105999460009261057e9260405195610b6187610b5385858560208501612890565b03601f198101895288610cb1565b876127bd565b3461039d57600036600319011261039d57602063ffffffff60045416604051908152f35b3461039d57606036600319011261039d57600435610ba88161038c565b6024356001600160401b03811161039d57610bc7903690600401610447565b909190604435906001600160801b038216820361039d576105d093610ae293612914565b6024359061ffff8216820361039d57565b359061ffff8216820361039d57565b90600182811c92168015610c3b575b6020831014610c2557565b634e487b7160e01b600052602260045260246000fd5b91607f1691610c1a565b634e487b7160e01b600052604160045260246000fd5b606081019081106001600160401b03821117610c7657604052565b610c45565b60e081019081106001600160401b03821117610c7657604052565b604081019081106001600160401b03821117610c7657604052565b90601f801991011681019081106001600160401b03821117610c7657604052565b9060405191826000825492610ce684610c0b565b8084529360018116908115610d545750600114610d0d575b50610d0b92500383610cb1565b565b90506000929192526020600020906000915b818310610d38575050906020610d0b9282010138610cfe565b6020919350806001915483858901015201910190918492610d1f565b905060209250610d0b94915060ff191682840152151560051b82010138610cfe565b3461039d57604036600319011261039d576105d0610ae2610dcb600435610d9c816108b6565b63ffffffff610da9610beb565b9116600052600260205260406000209061ffff16600052602052604060002090565b610cd2565b3461039d57600036600319011261039d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b3461039d57600036600319011261039d576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b6001600160401b0381160361039d57565b3461039d5761010036600319011261039d57600435610e89816108b6565b60243590604435610e9981610e5a565b610ea2366106ab565b9160c43560e4356001600160401b03811161039d57610ec59036906004016106bc565b909463ffffffff84169563fffff9be8711610ffe57610f0c92610efe916040519586946304c98a8b60e51b6020870152602486016129e8565b03601f198101835282610cb1565b6040516020810190610f2481610efe46863087612a3a565b519020610f7084610f5888610f498763ffffffff166000526008602052604060002090565b90600052602052604060002090565b906001600160401b0316600052602052604060002090565b5403610fed576000610f9d84610f5888610f49610fa59763ffffffff166000526008602052604060002090565b555a30613ca4565b9015610fe557506040516001600160401b039190911681527f49a5bb7337668613a742dc30346f29d11f0b4d4a2c0745a08afccc9bb6cea3d090602090a3005b805190602001fd5b63a84ab60d60e01b60005260046000fd5b634d30e69360e11b60005260046000fd5b3461039d57600036600319011261039d5760206040516001600160401b03197f0000000000000000000000000000000000000000000000000000000000000000168152f35b3461039d57600036600319011261039d5761106d6139fa565b600080546001600160a01b0319811682556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a3005b3461039d57604036600319011261039d576110c96004356108b6565b602060405160008152f35b3461039d5760a036600319011261039d576110ee3661069a565b506064356001600160401b03811161039d5761110e9036906004016106bc565b5050602060843561111e8161038c565b6040516001600160a01b0390911630148152f35b3461039d57604036600319011261039d576107ac6004356111528161038c565b6024359061115f826108b6565b6111676139fa565b60018060a01b0316600052600560205260406000209063ffffffff60401b82549160401b169063ffffffff60401b1916179055565b8015150361039d57565b3461039d57602036600319011261039d577f57f2a528edf864f533774c287d06a5278e1a4447ed97923b7bbc251fcbd54f6f60206004356111e68161119c565b6111ee6139fa565b151560ff19600b541660ff821617600b55604051908152a1005b3461039d57600036600319011261039d576000546040516001600160a01b039091168152602090f35b3461039d57604036600319011261039d57602060ff61127b6024356004356112588261038c565b6000526003845260406000209060018060a01b0316600052602052604060002090565b54166040519015158152f35b3461039d5760a036600319011261039d576112a13661069a565b6064356084356001600160401b03811161039d576112c39036906004016106bc565b90923033036113f45763ffffffff63fffff9be91356112e1816108b6565b1611156113285761070861130961130284600052600a602052604060002090565b544261371c565b11611317576107ac9261446b565b631a86ecf960e01b60005260046000fd5b826113369392500190614305565b6001600160a01b0392831660008181526005602052604090209093919290911690546113628160601c90565b906001600160a01b038216156105fe5763ffffffff16460361138857506107ac926148f6565b600093508392908390610efe906113d2906113b3906001600160a01b03165b6001600160a01b031690565b946040519283916020830196639277283360e01b885260248401614348565b51925af16113de614360565b506107ac57635f0ad7b760e11b60005260046000fd5b63139f696160e31b60005260046000fd5b3461039d57602036600319011261039d57602061ffff61145463ffffffff60043561142f816108b6565b1663ffffffff908060031c600052600c60205260e06040600020549160051b161c1690565b16604051908152f35b3461039d57600036600319011261039d57602060405160008152f35b3461039d57602036600319011261039d576004356114968161038c565b60018060a01b0316600052600560205260806040600020546040519063ffffffff8116825263ffffffff8160201c16602083015263ffffffff8160401c16604083015260601c6060820152f35b3461039d57604036600319011261039d577fc40a8c1d6db18d083249778a76a84a78429c4fe53001aba75f470c597afaee276040600435611523816108b6565b61ffff61152e610beb565b6115366139fa565b16600c602052631fffffff8260031c166000528260002060e08360051b168154908382821c1863ffffffff16901b18905563ffffffff8351921682526020820152a1005b3461039d57606036600319011261039d576115e160043561159a816108b6565b60243563ffffffff604435926115af84610e5a565b1660005260086020526040600020906000526020526040600020906001600160401b0316600052602052604060002090565b54604051908152602090f35b3461039d57602036600319011261039d576004356001600160401b03811161039d5761161d903690600401610447565b906116266139fa565b61162f82612a73565b9061163d6040519283610cb1565b828252602082019260051b81019036821161039d5780935b828510611665576107ac84613ead565b84356001600160401b03811161039d5782019060608236031261039d576040519161168f83610c5b565b803561169a816108b6565b83526116a860208201610bfc565b60208401526040810135906001600160401b03821161039d57019036601f8301121561039d576020926116e2849336908581359101612a8a565b6040820152815201940193611655565b3461039d57602036600319011261039d5763ffffffff600435611714816108b6565b1660005260016020526020604060002054604051908152f35b3461039d57606036600319011261039d5760043561174a816108b6565b611752610beb565b604435906001600160401b03821161039d576105d092611779610ae29336906004016106bc565b929091612b31565b60c036600319011261039d57600435611799816108b6565b602435906117a68261038c565b6044356001600160401b03811161039d576117c5903690600401610447565b606492919235906117d58261038c565b608435916117e28361038c565b6117ea61048d565b906001600160a01b03811615611a545763ffffffff85169463ffffffff7f00000000000000000000000000000000000000000000000000000000000000001686148015611a47575b610ffe578315611a36576001600160a01b03881660009081526005602052604090209261187161186c611866865460601c90565b956124b0565b613fac565b15611a0257889291906001600160a01b03851660005b8781106119865750509060006118c96118e4935b888c604051986118c38a6118b585858d86602086016128b9565b03601f1981018c528b610cb1565b866127bd565b60405180948192632f1c2cd560e21b83528560048401612476565b0381305afa9687156105f9577f6a0cf129b799c36943cf19ef7755eafb0b597737ba2f970045385de48107886a976119649561194694600092611969575b5061192b6123a6565b348152600060208201526001600160a01b0390931693614030565b506040516001600160a01b0393841698909316969293849384612c0e565b0390a4005b61197f9192503d806000833e6105ea8183610cb1565b9038611922565b90919293945061199781888c612bf9565b3590823b1561039d576040516323b872dd60e01b8152336004820152306024820152604481019290925260008260648183875af19182156105f9576001926119e7575b5001908a94939291611887565b806119f660006119fc93610cb1565b8061060e565b386119da565b9091906001600160a01b0384163303611a2557889260006118c96118e49361189b565b6348f5c3ed60e01b60005260046000fd5b630f59b9ff60e01b60005260046000fd5b5063fffff9be8611611832565b63d721852160e01b60005260046000fd5b3461039d5760006020366003190112611b0a5780600435611a858161038c565b611a8d6139fa565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316803b15611b065760405163ca5eb5e160e01b81526001600160a01b0390921660048301529091908290602490829084905af180156105f9578290611af85780f35b611b0191610cb1565b388180f35b5050fd5b80fd5b3461039d57604036600319011261039d577f69bdfca1ae414a7233840909f9c10a21560d38e0ed4fb50ff50b7b4c29ad96fe600435611b4b8161038c565b60243590611b588261119c565b611b606139fa565b6001600160a01b0316600081815260096020908152604091829020805460ff191660ff9515159586161790558151928352820192909252a1005b3461039d57602036600319011261039d5763ffffffff600435611bbc816108b6565b611bc46139fa565b1663fffff9be811115611c0d576020817fd22acca42bfd0ebef8a1ca8347653f46f782b92b553ba57e0f2294426dfe26ac9263ffffffff196004541617600455604051908152a1005b633df6e48d60e21b60005260046000fd5b3461039d57604036600319011261039d576107ac602435600435611c418261038c565b611c5c6108ac82600052600360205260016040600020015490565b613a6b565b3461039d5760a036600319011261039d57600435611c7e8161038c565b602435611c8a816108b6565b60443591611c978361038c565b60643590611ca4826108b6565b60843592611cb1846108b6565b611cb96138b7565b63ffffffff8116928315611f105763ffffffff8116958615610ffe576001600160a01b038116958615611eff576001600160a01b038516958615611eff57627a120063ffffffff831611611eee574603611eb05763ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168803610ffe57868603611e9f575b6001600160a01b0382166000908152600560205260409020611d67906113a79061053c565b611e8e5784611ded611dfd92611de0611e1796611dbc87611d9d611e679c60018060a01b03166000526006602052604060002090565b80546001600160a01b0319166001600160a01b03909216919091179055565b611dd3611dc76123b5565b63ffffffff909a168a52565b63ffffffff166020890152565b63ffffffff166040870152565b6001600160a01b03166060850152565b6001600160a01b0316600090815260056020526040902090565b8151602080840151604080860151606096870151911b63ffffffff60401b1663ffffffff9094169190921b67ffffffff000000001617919091176001600160601b03199190931b16919091179055565b7f328b68290d8d3a315d25b2476661d7c921ee87029fc767a4916b407e2ee31ede600080a4005b6341ab882d60e01b60005260046000fd5b630232505d60e61b60005260046000fd5b63ffffffff7f0000000000000000000000000000000000000000000000000000000000000000168803611d4257634d30e69360e11b60005260046000fd5b634a11e78360e11b60005260046000fd5b63d92e233d60e01b60005260046000fd5b63057f3fa760e51b60005260046000fd5b3461039d57600036600319011261039d5760206040517f8970ff45bc1804c7a79662cce9df9b0403588be8e486c6f5a410a2814caa892c8152f35b3461039d57604036600319011261039d576004356001600160401b03811161039d57611f8c9036906004016106bc565b602435906001600160401b03821161039d576105d092611fb3610ae29336906004016106bc565b929091612c97565b3461039d57604036600319011261039d576004356001600160401b03811161039d57611feb9036906004016106bc565b602435906001600160401b03821161039d576105d092612012610ae2933690600401610447565b929091612f8a565b3461039d57604036600319011261039d576107ac60043561203a816108b6565b6024356120468161119c565b61204e6139fa565b1561205a573090613a23565b600090613a23565b3461039d57602036600319011261039d5760043561207f8161038c565b60018060a01b03166000526006602052602060018060a01b0360406000205416604051908152f35b3461039d57600036600319011261039d57602060ff600b54166040519015158152f35b3461039d57602036600319011261039d576004356120e78161038c565b6120ef6139fa565b6001600160a01b0316801561214157600080546001600160a01b03198116831782556001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a3005b631e4fbdf760e01b600052600060045260246000fd5b60a036600319011261039d5760043561216f8161038c565b6024356001600160401b03811161039d5761218e903690600401610447565b6044356001600160401b03811161039d576121ad903690600401610447565b93606435946121bb8661038c565b6121c36104a3565b9184158015612357575b611a36576001600160a01b0381166000908152600560205260409020805460601c959086156105fe5761220561186c612209926124b0565b1590565b806122fb575b6122ea5761222081888588866132f3565b9061225c600061224161223860045463ffffffff1690565b97848c88612914565b60405180938192632f1c2cd560e21b83528a60048401612476565b0381305afa9586156105f9576105d09a7fed0c24299d2da4e3728deedbf20de24c4ff0e754c89f20b3d2532fe63b43b531976122d7956122a694600092611969575061192b6123a6565b5197426122bd8a600052600a602052604060002090565b556040516001600160a01b039094169693948594856131c3565b0390a36040519081529081906020820190565b634a91ec5f60e01b60005260046000fd5b50604051637347ebb960e01b81526020816004818a5afa9081156105f957600091612328575b501561220f565b61234a915060203d602011612350575b6123428183610cb1565b810190612500565b38612321565b503d612338565b5081156121cd565b3461039d57606036600319011261039d57602061237b3661069a565b63ffffffff813561238b816108b6565b16600052600182528160406000205491013560405191148152f35b60405190610d0b604083610cb1565b60405190610d0b608083610cb1565b60405190610d0b60e083610cb1565b60405190610d0b60c083610cb1565b60405190610d0b60a083610cb1565b6001600160401b038111610c7657601f01601f191660200190565b81601f8201121561039d578051612422816123f1565b926124306040519485610cb1565b8184526020828401011161039d5761244e9160208085019101610a7d565b90565b9060208282031261039d5781516001600160401b03811161039d5761244e920161240c565b60609063ffffffff61244e9493168152600160208201528160408201520190610aa0565b6040513d6000823e3d90fd5b3561244e816108b6565b90604051608081018181106001600160401b03821117610c7657604052606081935463ffffffff8116835263ffffffff8160201c16602084015263ffffffff8160401c166040840152811c910152565b9081602091031261039d575161244e8161119c565b9081602091031261039d575161244e8161038c565b6001600160a01b03166000908152600560205260409020909190612552906124b0565b6124b0565b9163ffffffff612569602085015163ffffffff1690565b16156127b2576125916060612582855163ffffffff1690565b9401516001600160a01b031690565b9260009063ffffffff1646036126dc57506040516331a9108f60e11b815260048101829052906020826024816001600160a01b0388165afa600092816126bb575b506125e35750505050600090600090565b6001600160a01b03821630036125fe57505050503090600190565b602091935b604051637f63c3dd60e01b81526001600160a01b039091166004820152602481019190915267ffffffffffffffff19909216604483015281806064810103817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa6000918161268a575b50612683575090600090565b9160009150565b6126ad91925060203d6020116126b4575b6126a58183610cb1565b810190612515565b9038612677565b503d61269b565b6126d591935060203d6020116126b4576126a58183610cb1565b91386125d2565b906001600160a01b03841680158015612761575b15612702575050505050600090600190565b6040516331a9108f60e11b81526004810183905260209390918490839060249082905afa909181612742575b5061273c5750600093612603565b93612603565b61275a919250843d86116126b4576126a58183610cb1565b903861272e565b50604051635a2d1e0760e11b815260048101839052602081602481855afa9081156105f9578491612793575b506126f0565b6127ac915060203d602011612350576123428183610cb1565b3861278d565b505050600090600190565b929150926127fd9360018060a01b0316600052600560205263ffffffff60406127e8816000206124b0565b94828060208801511691161494015116613b16565b90612806613b7e565b91600361ffff612815856141cf565b160361284b5761244e9192604051916001600160801b03199060801b16602083015260108252612846603083610cb1565b61421b565b61ffff612857846141cf565b633a51740d60e01b6000521660045260246000fd5b81835290916001600160fb1b03831161039d5760209260051b809284830137010190565b6001600160a01b0390911681526000602082015260606040820181905261244e9391019161286c565b6001600160a01b0391821681529116602082015260606040820181905261244e9391019161286c565b634e487b7160e01b600052601160045260246000fd5b63ffffffff1660e0019063ffffffff821161290f57565b6128e2565b61296e9293915060018060a01b031660005260056020526001600160801b0363ffffffff61294560406000206124b0565b51164614806000146129bd576201adb0905b156129b457816206390e5b81871602160116613af6565b90627a12006001600160801b03831611611eee5763ffffffff166060029063ffffffff821691820361290f576129a661244e926128f8565b906129af613b7e565b613b9a565b8161c350612962565b6201b7d890612957565b908060209392818452848401376000828201840152601f01601f1916010190565b61244e94926001600160401b03604060a09463ffffffff8135612a0a816108b6565b168552602081013560208601520135612a2281610e5a565b166040830152606082015281608082015201916129c7565b60349392916bffffffffffffffffffffffff199060601b168152612a68825180936020601485019101610a7d565b019060148201520190565b6001600160401b038111610c765760051b60200190565b929192612a96826123f1565b91612aa46040519384610cb1565b82948184528183011161039d578281602093846000960137010152565b90606e1161039d57602e0190604090565b9060541161039d5760400190601490565b602083610d0b939594956040519684612b05899651809287808a019101610a7d565b8501918483013701016000815203601f198101845283610cb1565b91602061244e9381815201916129c7565b612b639163ffffffff610dcb929694959616600052600260205260406000209061ffff16600052602052604060002090565b805115612bd5578315612bcf576002841015612b9b575050612b97604051928392639a6d49cd60e01b845260048401612b20565b0390fd5b909192612bb1612bac368387612a8a565b613f74565b600081600211611b0a5750600261244e939401906001190191612ae3565b92509050565b50919061244e913691612a8a565b634e487b7160e01b600052603260045260246000fd5b9190811015612c095760051b0190565b612be3565b91602091612c279195949560408552604085019161286c565b6001600160a01b03909416910152565b919082604091031261039d5760208235612c508161038c565b92013590565b919082604091031261039d5760208235612c6f8161038c565b92013561244e8161119c565b60405190612c8a602083610cb1565b6000808352366020840137565b612caa612cc792612cb292959495612ac1565b810190612c37565b936001600160a01b0390911692810190612c56565b612de6578183612cef61254d61244e9560018060a01b03166000526005602052604060002090565b91612cf983613fac565b15612d66576001600160a01b03166000908152600760205260409020610efe9250612d3491612d2791610f49565b546001600160a01b031690565b935b604080516001600160a01b0396871660208201529590931692850192909252606084019190915282906080820190565b505060600151612d80906113a7906001600160a01b031681565b6040516331a9108f60e11b81526004810185905290602090829060249082905afa60009181612dc5575b50612dbb5750610efe600093612d36565b610efe9093612d36565b612ddf91925060203d6020116126b4576126a58183610cb1565b9038612daa565b50505061244e612c7b565b356001600160601b0319811692919060148210612e0c575050565b6001600160601b031960149290920360031b82901b16169150565b90612e3182612a73565b612e3e6040519182610cb1565b8281528092612e4f601f1991612a73565b0190602036910137565b9190811015612c095760051b81013590601e198136030182121561039d5701908135916001600160401b03831161039d57602001823603811361039d579190565b9081606091031261039d578035612eb08161038c565b9160406020830135612c508161038c565b8051821015612c095760209160051b010190565b906020808351928381520192019060005b818110612ef35750505090565b82516001600160a01b0316845260209384019390920191600101612ee6565b906020808351928381520192019060005b818110612f305750505090565b8251845260209384019390920191600101612f23565b92612f6e61244e9593612f7c9360018060a01b03168652608060208701526080860190612ed5565b908482036040860152612ed5565b916060818403910152612f12565b612fb561254d611dfd612faf612fa9612fc3966060969a99989a612ad2565b90612df1565b60601c90565b01516001600160a01b031690565b612fcc82612e27565b91612fd681612e27565b94612fe082612e27565b91600091825b8281106130cb57505050815181106130125750610efe9061244e93949560405195869460208601612f46565b929061301d84612e27565b9361302781612e27565b9161303182612e27565b9360005b83811061305b575050505061244e9394955090610efe9160405195869460208601612f46565b806130af6130a561307e838e6130a08e6130918461308b61307e60019c8e612ec1565b516001600160a01b031690565b92612ec1565b6001600160a01b039091169052565b612ec1565b6130918389612ec1565b6130b98185612ec1565b516130c48289612ec1565b5201613035565b6130d6818484612e59565b9050156131bb576131308161311d8b613091838a61310d6131036130fb848d8d612e59565b810190612e9a565b9291989093612ec1565b526001600160a01b031692612ec1565b6001600160a01b0316613091838a612ec1565b61313d61307e8289612ec1565b61314d6113a761307e848d612ec1565b6001600160a01b0390911603613168575b6001905b01612fe6565b92600180916131778688612ec1565b516131828289612ec1565b5261319d61319361307e888c612ec1565b613091838c612ec1565b6131b28b6130918361308b61307e8b85612ec1565b0193905061315e565b600190613162565b949391949290928560408201604083525260608101936000965b8088106131f957505061244e949550602081850391015261286c565b909460208060019263ffffffff8935613211816108b6565b168152019601970196906131dd565b908160011b918083046002149015171561290f57565b8181029291811591840414171561290f57565b9061325382612a73565b6132606040519182610cb1565b8281528092613271601f1991612a73565b019060005b82811061328257505050565b60209060405161329181610c7b565b60008152600083820152600060408201526000606082015260006080820152600060a0820152606060c082015282828501015201613276565b906001820180921161290f57565b906023820180921161290f57565b9190820180921161290f57565b9291926133086133038587613236565b613249565b9360006001600160401b034216967f0000000000000000000000000000000000000000000000000000000000000000915b8181106133b157505050505050509061244e9161339f6133576123d3565b600281529263ffffffff7f0000000000000000000000000000000000000000000000000000000000000000166020850152600060408501526001600160401b03166060840152565b600060808301523060a083015261412d565b60005b8481106133c45750600101613339565b61340a6133e66133dd6133d884898c612bf9565b6124a6565b63ffffffff1690565b63ffffffff908060031c600052600c60205260e06040600020549160051b161c1690565b63ffffffff811615610ffe578484613421856132ca565b61342b8286613236565b613434916132e6565b61ffff1692888c878d88613449818684612bf9565b613452906124a6565b9461345c92612bf9565b613465906124a6565b61346e906136d8565b6001600160a01b03169461348192612bf9565b604051631a98288d60e11b60208201526001600160a01b038d1660248201529035604482015267ffffffffffffffff199490941660648086019190915284526134cb608485610cb1565b6134d36123c4565b61ffff909516855263ffffffff166020850152600060408501526001600160401b038e16606085015261ffff1660808401526001600160a01b031660a083015260c0820152816135238785613236565b9061352d916132e6565b90613538828c612ec1565b52613543908a612ec1565b506001016133b4565b6040519061355982610c96565b60006020838281520152565b919082604091031261039d5760405161357d81610c96565b6020808294805184520151910152565b9060408282031261039d5761244e91613565565b906020909392936040835263ffffffff815116604084015281810151606084015260806135f56135df604084015160a08488015260e0870190610aa0565b6060840151868203603f190160a0880152610aa0565b910151151560c08401526001600160a01b03909416910152565b61366f9260409261361e61354c565b50613628836136d8565b61363f6136336123e2565b63ffffffff9095168552565b602084015283830152606082015260006080820152815180938192631bb8518b60e31b83523090600484016135a1565b03817f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165afa9081156105f9576000916136af575090565b61244e915060403d6040116136d1575b6136c98183610cb1565b81019061358d565b503d6136bf565b63ffffffff168060005260016020526040600020549081156136f8575090565b63f6ff4fb760e01b60005260045260246000fd5b61c34f1981019190821161290f57565b9190820391821161290f57565b3561244e81610e5a565b6040906001600160401b0361244e94931681528160208201520190610aa0565b93929192613763600b5460ff1690565b9081613893575b5061388257610efe613793926040519485936304c98a8b60e51b602086015287602486016129e8565b6137a6816137a05a61370c565b30613ca4565b9190156137b257505050565b63ffffffff7fd191660d5fb7fa40de3038f810fa899670f44a26d29f0609702b778de1c4e5f6916040516137f181610efe602082019446903087612a3a565b51902061387d61386e61386861381f613809896124a6565b63ffffffff166000526008602052604060002090565b976138396020820135809a90600052602052604060002090565b94613862604083019661384b88613729565b6001600160401b0316600052602052604060002090565b556124a6565b92613729565b94604051938493169583613733565b0390a3565b6341c8302160e11b60005260046000fd5b6001600160a01b031660009081526009602052604090205460ff161590503861376a565b3360009081527f460e1c17541eb4600da639136d22ecdece50dfd5504d40fe2d419370e887d378602052604090205460ff16156138f057565b63e2517d3f60e01b600052336004527f8970ff45bc1804c7a79662cce9df9b0403588be8e486c6f5a410a2814caa892c60245260446000fd5b600081815260036020908152604080832033845290915290205460ff161561394e5750565b63e2517d3f60e01b6000523360045260245260446000fd5b60008181526003602090815260408083206001600160a01b038616845290915290205460ff166139f35760008181526003602090815260408083206001600160a01b03861684529091529020805460ff1916600117905533916001600160a01b0316907f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d600080a4600190565b5050600090565b6000546001600160a01b03163303613a0e57565b63118cdaa760e01b6000523360045260246000fd5b7f238399d427b947898edb290f5ff0f9109849b1c3ba196a42e35f00c50a54b98b9163ffffffff604092169081600052600160205280836000205582519182526020820152a1565b60008181526003602090815260408083206001600160a01b038616845290915290205460ff16156139f35760008181526003602090815260408083206001600160a01b03861684529091529020805460ff1916905533916001600160a01b0316907ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b600080a4600190565b906001600160801b03809116911601906001600160801b03821161290f57565b916001600160801b03613b4e948193948180613b73575b15613b6957905b15613b645762031c870181165b16026201adb00116613af6565b90627a12006001600160801b03831611611eee57565b613b41565b5061c35090613b34565b508281161515613b2d565b604051600360f01b60208201526002815261244e602282610cb1565b9091600361ffff613baa846141cf565b1603613c985760405160809390931b6fffffffffffffffffffffffffffffffff1916602084015260e01b6001600160e01b031916603083015260148252613bf2603483610cb1565b600361ffff613c00836141cf565b1603613c8c57600161ffff613c1584516148cd565b16019161ffff831161290f5761244e9160206004926040519583613c428895518092868089019101610a7d565b840190600160f81b8483015261ffff60f01b9060f01b166021820152600560f81b6023820152613c7b8251809385602485019101610a7d565b01010301601f198101835282610cb1565b61285761ffff916141cf565b61ffff612857836141cf565b929190600091829182613cb760046123f1565b96613cc56040519889610cb1565b60048852601f19613cd660046123f1565b013660208a013760208451940192f13d60048111613cfd575b8084526000602085013e9190565b506004613cef565b601f8211613d1257505050565b6000526020600020906020601f840160051c83019310613d4d575b601f0160051c01905b818110613d41575050565b60008155600101613d36565b9091508190613d2d565b91909182516001600160401b038111610c7657613d7e81613d788454610c0b565b84613d05565b6020601f8211600114613dbf578190613db0939495600092613db4575b50508160011b916000199060031b1c19161790565b9055565b015190503880613d9b565b601f19821690613dd484600052602060002090565b9160005b818110613e1057509583600195969710613df7575b505050811b019055565b015160001960f88460031b161c19169055388080613ded565b9192602060018192868b015181550194019201613dd8565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310613e5b57505050505090565b9091929394602080613e9e600193603f19868203018752606060408b5163ffffffff815116845261ffff8682015116868501520151918160408201520190610aa0565b97019301930191939290613e4c565b60005b8151811015613f3d5780613ed36040613ecb60019486612ec1565b510151613f74565b613f376040613ee28386612ec1565b51015163ffffffff613ef48487612ec1565b5151166000526002602052613f326040600020613f206020613f16878a612ec1565b51015161ffff1690565b61ffff16600052602052604060002090565b613d57565b01613eb0565b50613f6f7fbe4864a8e820971c0247f5992e2da559595f7bf076a21cb5928d443d2a13b6749160405191829182613e28565b0390a1565b600361ffff60028301511603613f875750565b604051639a6d49cd60e01b815260206004820152908190612b97906024830190610aa0565b63ffffffff815116156105fe5763ffffffff905116461490565b60405190613fd382610c5b565b8160008152600060208201526040613fe961354c565b910152565b9060808282031261039d5761402890604080519361400b85610c5b565b80518552602081015161401d81610e5a565b602086015201613565565b604082015290565b614099608094926140b59694614044613fc6565b50602061405186516146a8565b95019182518061411e575b50614066856136d8565b92511515926140826140766123e2565b63ffffffff9097168752565b602086015260408501526060840152151585830152565b6040518095819482936302637a4560e41b8452600484016135a1565b03917f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af19081156105f9576000916140f5575090565b61244e915060803d608011614117575b61410f8183610cb1565b810190613fee565b503d614105565b614127906146c7565b3861405c565b91909161413a81516148cd565b604051600160f01b60208201526000602282015260f09190911b6001600160f01b031916602482015260068152614172602682610cb1565b916000925b825184101561419f576141976001916141908686612ec1565b5190614e82565b930192614177565b92509290508163ffffffff6141bb602084015163ffffffff1690565b166141c557505090565b61244e92506147d6565b60028151106141df576002015190565b60405162461bcd60e51b8152602060048201526014602482015273746f55696e7431365f6f75744f66426f756e647360601b6044820152606490fd5b600361ffff614229836141cf565b1603613c8c57600161ffff61423e84516148cd565b16019161ffff831161290f5761244e916020600492604051958361426b8895518092868089019101610a7d565b600160f81b90850184810182905260f09290921b6001600160f01b03191660218301526023820152815191613c7b90839060248401908601610a7d565b9080601f8301121561039d5781356142bf81612a73565b926142cd6040519485610cb1565b81845260208085019260051b82010192831161039d57602001905b8282106142f55750505090565b81358152602091820191016142e8565b9160608383031261039d57823561431b8161038c565b92602081013561432a8161038c565b9260408201356001600160401b03811161039d5761244e92016142a8565b90612c27602091949394604084526040840190612f12565b3d1561438b573d90614371826123f1565b9161437f6040519384610cb1565b82523d6000602084013e565b606090565b9080601f8301121561039d5781356143a781612a73565b926143b56040519485610cb1565b81845260208085019260051b82010192831161039d57602001905b8282106143dd5750505090565b6020809183356143ec8161038c565b8152019101906143d0565b9060808282031261039d57813561440d8161038c565b9260208301356001600160401b03811161039d578261442d918501614390565b9260408101356001600160401b03811161039d578361444d918301614390565b9260608201356001600160401b03811161039d5761244e92016142a8565b61447a919392938101906143f7565b6001600160a01b03909316600081815260066020526040902091929161449f90612d27565b916144c261186c61254d8560018060a01b03166000526005602052604060002090565b156144d4575050610d0b939450614ad5565b91509360005b845181101561465b576000806144f361307e8487612ec1565b61450061307e8589612ec1565b9061450b858a612ec1565b51906001600160a01b03811615841461458457506040516340c10f1960e01b602082019081526001600160a01b03909316602482015260448101919091526145568160648101610efe565b5190828a5af1614564614360565b5015614574576001905b016144da565b62ec6f7b60e31b60005260046000fd5b916001600160a01b0381161584146145ee5750604051630852cd8d60e31b6020820190815260248201929092529091506145c18160448101610efe565b5190828a5af16145cf614360565b50156145dd5760019061456e565b631bc5aabf60e21b60005260046000fd5b6040516323b872dd60e01b602082019081526001600160a01b039485166024830152939091166044820152606481019190915261462e8160848101610efe565b5190828a5af161463c614360565b501561464a5760019061456e565b6312171d8360e31b60005260046000fd5b50949392505050803b1561039d5760405163163b5cc360e31b815260048101929092526000908290602490829084905af180156105f9576146995750565b806119f66000610d0b93610cb1565b8034036146b25790565b6304fb820960e51b6000523460045260246000fd5b60405163393f876560e21b81527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031690602081600481855afa9081156105f9576000916147b7575b506001600160a01b03169182156147a6576040516323b872dd60e01b60208281019182523360248401526001600160a01b03909416604483015260648201929092526000919061476a8160848101610efe565b519082855af11561249a576000513d61479d5750803b155b6147895750565b635274afe760e01b60005260045260246000fd5b60011415614782565b6329b99a9560e11b60005260046000fd5b6147d0915060203d6020116126b4576126a58183610cb1565b38614717565b61244e9060276020936148be60ff825116916148aa63ffffffff888301511691604081015115156001600160401b036060830151169061ffff6080840151169260a0600180821b0391015116946040519b8c9a61483c828d019182815194859201610a7d565b600160f81b9101908152600160f01b600182015260f898891b6001600160f81b031916600382015260e09190911b6001600160e01b031916600482015290151590961b600887015260c01b6001600160c01b031916600986015260f01b6001600160f01b0319166011850152565b60601b6001600160601b0319166013830152565b0103601f198101835282610cb1565b61ffff81116148dd5761ffff1690565b6306dfcc6560e41b600052601060045260245260446000fd5b60005b8351811015614985576001600160a01b0382166149168286612ec1565b5190803b1561039d576040516323b872dd60e01b81523060048201526001600160a01b038616602482015260448101929092526000908290606490829084905af180156105f95761496b575b506001016148f9565b8061497860008093610cb1565b80031261039d5738614962565b50610d0b929150614f30565b9061499b82612a73565b6149a86040519182610cb1565b82815280926149b9601f1991612a73565b019060005b8281106149ca57505050565b8060606020809385010152016149be565b60208183031261039d578051906001600160401b03821161039d57019080601f8301121561039d578151614a0e81612a73565b92614a1c6040519485610cb1565b81845260208085019260051b8201019183831161039d5760208201905b838210614a4857505050505090565b81516001600160401b03811161039d57602091614a6a8784809488010161240c565b815201910190614a39565b602081016020825282518091526040820191602060408360051b8301019401926000915b838310614aa857505050505090565b9091929394602080614ac6600193603f198682030187528951610aa0565b97019301930191939290614a99565b909291614aea614ae58251613220565b614991565b600094855b8351811015614ce157614b0561307e8284612ec1565b614b0f8286612ec1565b5190614b34612d2783610f498a60018060a01b03166000526007602052604060002090565b6040516331a9108f60e11b8152600481018490526020816024816001600160a01b038d165afa9081156105f957600091614cc3575b50306001600160a01b0390911603614cb2576001600160a01b038116614c41575b506001600160a01b038116614ba4575b5050600101614aef565b60405163b18e2bbb60e01b60208201526001600160a01b038083166024830152881660448201526064810183905264ffffffffff6084820152600160a482018190529299929392614c3a9291611d9d918691614c038160c48101610efe565b614c0d828b612ec1565b52614c18818a612ec1565b506001600160a01b038b16600090815260076020526040902091019b90610f49565b9038614b9a565b60405163b18e2bbb60e01b60208201526001600160a01b03918216602482015290881660448201526064810183905264ffffffffff6084820152600060a48201529098600191614c948160c48101610efe565b614c9e8288612ec1565b52614ca98187612ec1565b50019738614b8a565b6349e27cff60e01b60005260046000fd5b614cdb915060203d81116126b4576126a58183610cb1565b38614b69565b50509293915050614cf181614991565b9160005b828110614d80575050614d055750565b6000614d259160405180938192631592ca1b60e31b835260048301614a75565b0381837f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03165af180156105f957614d615750565b614d7d903d806000833e614d758183610cb1565b8101906149db565b50565b80614d8d60019284612ec1565b51614d988287612ec1565b52614da38186612ec1565b5001614cf5565b602090614dc2600b9694959382815194859201610a7d565b600160f81b910190815260f093841b6001600160f01b03199081166001830152600160f01b60038301529190931b16600583015260e01b6001600160e01b03191660078201520190565b602090614e27601f9897959396949682815194859201610a7d565b94151560f81b940193845260c01b6001600160c01b031916600184015260f01b6001600160f01b031916600983015260601b6001600160601b031916600b820152815191614e7d90839085840190602001610a7d565b010190565b9061244e90610efe614e96825161ffff1690565b91614ede60c0820195614ed0614eb5614eb08951516132d8565b6148cd565b602085015163ffffffff169060405197889460208601614daa565b03601f198101855284610cb1565b6040810151151594614efa60608301516001600160401b031690565b91614f1e60a0614f0f608084015161ffff1690565b9201516001600160a01b031690565b91519260405197889660208801614e0c565b919091614f3d8351614991565b600091825b855181101561503d57614f558187612ec1565b5193614f7a612d2786610f498660018060a01b03166000526007602052604060002090565b6001600160a01b038116156150325760405163b18e2bbb60e01b60208201526001600160a01b03918216602482015290841660448201526064810186905264ffffffffff6084820152600060a48201526001929161502c9161501c918591614fe58160c48101610efe565b614fef868a612ec1565b52614ffa8589612ec1565b506001600160a01b038716600090815260076020526040902091019790610f49565b80546001600160a01b0319169055565b01614f42565b50935060019061502c565b505091925061504b81614991565b9160005b82811061505f575050614d055750565b8061506c60019284612ec1565b516150778287612ec1565b526150828186612ec1565b500161504f56fea2646970667358221220e40b6d1cbc769734a9e93e86e73c5e53f52e0ab913b57d4d7ec28c3efef89db364736f6c634300081d00332f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d460e1c17541eb4600da639136d22ecdece50dfd5504d40fe2d419370e887d3783617319a054d772f909f7c479a2cebe5066e836a939412e32403c99029b92eff000000000000000000000000000000000000506aa8bc5da44f9b3329b8c6f7e00000000000000000000000005454757e592aedf88b9786313e878ed65b96367700000000000000000000000000000000000000000000000000000000ffffffff00000000000000000000000000000000000000447e69651d841bd8d104bed4930000000000000000000000000000000000007129af73c46c9f01a3fb4ff61a020000000000000000000000005454757e592aedf88b9786313e878ed65b963677