#      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                            ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L MNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~     Safe(None(kNone/SX(   44None_)}  (c) simplex.chatAGPL-3chat@simplex.chat experimental non-portableNone "$9X_dkSo( simplexmqKey hash newtype. simplexmqIV bytes newtype. simplexmqAES key newtype." simplexmq(Various cryptographic or related errors.# simplexmqRSA OAEP encryption error$ simplexmqRSA OAEP decryption error% simplexmqRSA PSS signature error& simplexmqAES initialization error' simplexmqIV generation error( simplexmqAES decryption error) simplexmq!message does not fit in SMP block* simplexmq,failure parsing RSA-encrypted message header+ simplexmqRSA signature newtype.. simplexmq Tuple of RSA 6 and 2./ simplexmq Tuple of RSA 6 and 5. simplexmq Tuple of RSA 6 and 0.0 simplexmqNType-class used for both private key types: SafePrivateKey and FullPrivateKey.2 simplexmq A newtype of  (with PublicKey inside).5 simplexmq A newtype of , with PublicKey removed.kIt is not possible to recover PublicKey from SafePrivateKey. The constructor of this type is not exported.6 simplexmq A newtype of .: simplexmqCGenerate RSA key pair with either SafePrivateKey or FullPrivateKey.> simplexmq8Digest (hash) of binary X509 encoding of RSA public key.? simplexmqSHA256 digest.@ simplexmqAES256 key parser.A simplexmqIV bytes parser.B simplexmqE2E encrypt SMP agent messages. ^https://github.com/simplex-chat/simplexmq/blob/master/rfcs/2021-01-26-crypto.md#e2e-encryptionC simplexmqE2E decrypt SMP agent messages. ^https://github.com/simplex-chat/simplexmq/blob/master/rfcs/2021-01-26-crypto.md#e2e-encryptionD simplexmqAEAD-GCM encryption.UUsed as part of hybrid E2E encryption scheme and for SMP transport blocks encryption.E simplexmqAEAD-GCM decryption.UUsed as part of hybrid E2E encryption scheme and for SMP transport blocks decryption.F simplexmqRandom AES256 key.G simplexmq&Random IV bytes for AES256 encryption.H simplexmq Convert AEAD AuthTag to ByteString.I simplexmqConvert ByteString to AEAD AuthTag.J simplexmqRSA OAEP encryption.MUsed as part of hybrid E2E encryption scheme and for SMP transport handshake.K simplexmqRSA OAEP decryption.MUsed as part of hybrid E2E encryption scheme and for SMP transport handshake.L simplexmqRSA PSS message signing.LUsed by SMP clients to sign SMP commands and by SMP agents to sign messages.M simplexmqRSA PSS signature verification.SUsed by SMP servers to authorize SMP commands and by SMP agents to verify messages.N simplexmq(Base-64 X509 encoding of RSA public key.<Used as part of SMP queue information (out-of-band message).O simplexmq*Base-64 PKCS8 encoding of PSA private key."Not used as part of SMP protocols.S simplexmq Construct 57 from three numbers - used internally and in the tests.< !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST<015234678/.:;<=SBCJK+,-LM !DE9HIFG@AONT>RPQ?"#$%&'()*(c) simplex.chatAGPL-3chat@simplex.chat experimental non-portableNone"$&'*79>X_ds simplexmqTransport handshake error. simplexmqencryption error simplexmqdecryption error simplexmqerror parsing protocol version simplexmqerror parsing RSA key simplexmq;error parsing server transport header or invalid block size simplexmqerror parsing AES keys simplexmqnot matching RSA key hash simplexmq/lower major agent version than protocol version  simplexmqTCP transport terminatedo simplexmq*Error of SMP encrypted transport over TCP.p simplexmqerror parsing transport blockq simplexmqblock encryption errorr simplexmqblock decryption errors simplexmqtransport handshake errort simplexmq;The handle for SMP encrypted transport connection over TCP.z simplexmqZRun TCP server on passed port and signal when server started and stopped via passed TMVar.FAll accepted TCP connection handles are passed to the passed function.{ simplexmq>Connect to passed TCP host:port and pass handle to the client.| simplexmqBSend ByteString to TCP connection handle terminating it with CRLF.} simplexmqOReceive ByteString from TCP connection handle, allowing LF or CRLF termination.~ simplexmq!Trim trailing CR from ByteString. simplexmq%SMP encrypted transport error parser. simplexmq(Serialize SMP encrypted transport error. simplexmq2Encrypt and send block to SMP encrypted transport. simplexmq7Receive and decrypt block from SMP encrypted transport. simplexmq)Server SMP encrypted transport handshake.See ^https://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#appendix-aAThe numbers in function names refer to the steps in the document. simplexmq)Client SMP encrypted transport handshake.See ^https://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#appendix-aAThe numbers in function names refer to the steps in the document.opqrstuvywxz{|}~z{|}~tuvywxopqrs(c) simplex.chatAGPL-3chat@simplex.chat experimental non-portableNone&'.17HPVX_e. simplexmqSMP command error type. simplexmq.server response sent from client or vice versa simplexmqXbad RSA key size in NEW or KEY commands (only 1024, 2048 and 4096 bits keys are allowed) simplexmqerror parsing command simplexmq@transmission has no required credentials (signature or queue ID) simplexmqBtransmission has credentials that are not allowed for this command simplexmq%transmission has no required queue ID simplexmqType for protocol errors. simplexmq2incorrect block format, encoding or signature size simplexmq,SMP command is unknown or has invalid syntax simplexmqEcommand authorization error - bad signature or non-existing SMP queue simplexmq6ACK command is sent without message to be acknowledged simplexmqinternal server error simplexmq=used internally, never returned by the server (to be removed) simplexmqSMP message body. simplexmqSMP message server ID. simplexmqOSender's public key used by SMP server to verify authorization of SMP commands. simplexmqLSender's private key used by the recipient to authorize (sign) SMP commands.VOnly used by SMP agent, kept here so its definition is close to respective public key. simplexmqRRecipient's public key used by SMP server to verify authorization of SMP commands. simplexmqORecipient's private key used by the recipient to authorize (sign) SMP commands.VOnly used by SMP agent, kept here so its definition is close to respective public key. simplexmqTransmission correlation ID.EA newtype to avoid accidentally changing order of transmission parts. simplexmqBase-64 encoded string. simplexmqCParameterized type for SMP protocol commands from all participants. simplexmqSMP queue ID on the server. simplexmqSMP queue ID for the sender. simplexmqSMP queue ID for the recipient. simplexmq)unparsed SMP transmission with signature. simplexmq)unparsed SMP transmission with signature. simplexmq/signed parsed transmission, with parsing error. simplexmq SMP transmission with signature. simplexmq#SMP transmission without signature. simplexmq0Type for command or response of any participant. simplexmq.Singleton types for SMP protocol participants. simplexmqSMP protocol participants. simplexmqSMP transmission parser. simplexmqSMP command parser.! simplexmqParse SMP command. simplexmqSerialize SMP command. simplexmqSMP error parser. simplexmqSerialize SMP error. simplexmq.Send signed SMP transmission to TCP transport. simplexmqSerialize SMP transmission. simplexmq5Validate that it is an SMP client command, used with  by . simplexmq5Validate that it is an SMP server command, used with  by ." simplexmq6Receive and parse transmission from the TCP transport. simplexmq(Receive client and server transmissions.6The first argument is used to limit allowed senders.  or  should be used here.CCNone$.@AHNone $&'.HP_g simplexmqopaque container for file handle with a type-safe IOMode constructors are not exported, openWriteStoreLog and openReadStoreLog should be used instead None$&'./=?@AHSXU        None@AC   None,/=>?@A !" !" None"$.Xd_&%&('),+*-.10/235467=<;:8>9?@FEDCBAGHIJ&?@FEDCBA67=<;:8>92354-.10/),+*%&('GHIJ (c) simplex.chatAGPL-3chat@simplex.chat experimental non-portableNone"$&'.>HPSX_dK simplexmq.Runs an SMP server using passed configuration.See a full server here: Mhttps://github.com/simplex-chat/simplexmq/blob/master/apps/smp-server/Main.hsL simplexmq>Runs an SMP server using passed configuration with signalling.This function uses passed TMVar to signal when the server is ready to accept TCP requests (True) and when it is disconnected from the TCP socket once the server thread is killed (False).KLKL(c) simplex.chatAGPL-3chat@simplex.chat experimental non-portableNone$&'.179HSVX_OM simplexmqErrors of another SMP agent.N simplexmq7possibly should include bytestring that failed to parseO simplexmq8possibly should include the prohibited SMP/agent messageP simplexmq0cannot RSA/AES-decrypt or parse decrypted headerQ simplexmqinvalid RSA signatureR simplexmqSMP server errors.S simplexmq)invalid server response (failed to parse)T simplexmqunexpected responseU simplexmq network errorV simplexmq"handshake or other transport errorW simplexmqcommand response timeoutX simplexmqConnection error.Y simplexmq'connection alias is not in the databaseZ simplexmqconnection alias already exists[ simplexmq;connection is simplex, but operation requires another queue\ simplexmq-SMP agent protocol command or response error.] simplexmqcommand is prohibited^ simplexmqcommand syntax is invalid_ simplexmq.connection alias is required with this command` simplexmq2message size is not correct (no terminating space)a simplexmq!message does not fit in SMP blockb simplexmq0Error type used in errors sent to agent clients.c simplexmqcommand or response errord simplexmqconnection errorse simplexmq.SMP protocol errors forwarded to agent clientsf simplexmqSMP server errorsg simplexmqerrors of other agentsh simplexmq)agent implementation or dependency errorsi simplexmq&Error of message integrity validation.n simplexmq0Result of received message integrity validation.q simplexmqSMP queue status.r simplexmqqueue is createds simplexmq queue is confirmed by the sendert simplexmqCqueue is secured with sender key (only used by the queue recipient)u simplexmqqueue is activev simplexmq4queue is disabled (only used by the queue recipient)w simplexmqAPublic key used by SMP server to authorize (verify) SMP commands.x simplexmq%Private key used to sign SMP commandsy simplexmq-Private key used to E2E decrypt SMP messages.z simplexmq,Public key used to E2E encrypt SMP messages.{ simplexmq-Connection reply mode (used in JOIN command).} simplexmq'SMP queue information sent out-of-band. hhttps://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#out-of-band-messages simplexmq/Message acknowledgement mode of the connection. simplexmqConnection modes. simplexmqSMP agent connection alias. simplexmq4SMP server location and transport key digest (hash). simplexmq;Messages sent between SMP agents once SMP queue is secured. lhttps://github.com/simplex-chat/simplexmq/blob/master/protocol/agent-protocol.md#messages-between-smp-agents simplexmq8the first message in the queue to validate it is secured simplexmqreply queue information simplexmq%agent envelope for the client message simplexmqSMP message formats. simplexmqSMP confirmation (see  `https://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#send-message SMP protocol) simplexmq<Agent message header and envelope for client messages (see  lhttps://github.com/simplex-chat/simplexmq/blob/master/protocol/agent-protocol.md#messages-between-smp-agentsSMP agent protocol) simplexmq+sequential ID assigned by the sending agent simplexmq timestamp from the sending agent simplexmqdigest of the previous message simplexmq2messages sent between agents once queue is secured simplexmqWParameterized type for SMP agent protocol commands and responses from all participants. simplexmq4Singleton types for SMP agent protocol participants. simplexmq SMP agent protocol participants. simplexmq6SMP agent protocol transmission or transmission error. simplexmq'Parsed SMP agent protocol transmission. simplexmq/Raw (unparsed) SMP agent protocol transmission. simplexmqParse SMP message. simplexmqSerialize SMP message. simplexmqSMP queue information parser. simplexmqSMP server location parser. simplexmq9Serialize SMP queue information that is sent out-of-band. simplexmqSerialize SMP server location. simplexmq%AMP agent command and response parser simplexmq+Message integrity validation result parser. simplexmqSerialize SMP agent command. simplexmq.Serialize message integrity validation result. simplexmq SMP agent protocol error parser. simplexmq#Serialize SMP agent protocol error. simplexmqFSend raw (unparsed) SMP agent protocol transmission to TCP connection. simplexmqKReceive raw (unparsed) SMP agent protocol transmission from TCP connection. simplexmq@Send SMP agent protocol command (or response) to TCP connection. simplexmq;Receive client and agent transmissions from TCP connection.uMNOPQRSTUVWXYZ[\]^_`abechgdfijklmnopqrstuvwxyz{|}~u}~bechgdf\]^_`aXYZ[RSTUVWMNOPQ{|nopijklmqrstuvxwzy(c) simplex.chatAGPL-3chat@simplex.chat experimental non-portableNone "$&'.9X_dp0 simplexmqSMP client error type. simplexmqhCorrectly parsed SMP server ERR response. This error is forwarded to the agent client as `ERR SMP err`. simplexmqfInvalid server response that failed to parse. Forwarded to the agent client as `ERR BROKER RESPONSE`. simplexmq_Different response from what is expected to a certain SMP command, e.g. server should respond  or  to q command, other responses would result in this error. Forwarded to the agent client as `ERR BROKER UNEXPECTED`. simplexmqnUsed for TCP connection and command response timeouts. Forwarded to the agent client as `ERR BROKER TIMEOUT`. simplexmq\Failure to establish TCP connection. Forwarded to the agent client as `ERR BROKER NETWORK`. simplexmqrTCP transport handshake or some other transport error. Forwarded to the agent client as `ERR BROKER TRANSPORT e`. simplexmq3Error when cryptographically "signing" the command. simplexmqSMP client configuration.  simplexmq8size of TBQueue to use for server commands and responses  simplexmq=default SMP server port if port is not specified in SMPServer  simplexmq&timeout of TCP commands (microseconds)  simplexmq+period for SMP ping commands (microseconds)  simplexmqjestimated maximum size of SMP command excluding message body, determines the maximum allowed message size simplexmq9Type synonym for transmission from some SPM server queue. simplexmq< is a handle used to send commands to a specific SMP server.oThe only exported selector is blockSize that is negotiated with the server during the TCP transport handshake.Use 8 to connect to an SMP server and create a client handle. simplexmq!Default SMP client configuration. simplexmq Connects to M using passed client configuration and queue for messages and notifications.(A single queue can be used for multiple  instances, as  includes server information. simplexmqEDisconnects SMP client from the server and terminates client threads. simplexmqCreate a new SMP queue. hhttps://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#create-queue-command simplexmqSubscribe to the SMP queue. fhttps://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#subscribe-to-queue simplexmq3Secure the SMP queue by adding a sender public key. hhttps://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#secure-queue-command simplexmqSend SMP message. `https://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#send-message simplexmq:Acknowledge message delivery (server deletes the message). phttps://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#acknowledge-message-delivery simplexmq^Irreversibly suspend SMP queue. The existing messages from the queue will still be delivered. ahttps://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#suspend-queue simplexmq5Irreversibly delete SMP queue and all messages in it. `https://github.com/simplex-chat/simplexmq/blob/master/protocol/simplex-messaging.md#delete-queue simplexmqSend any SMP command ( type).          None "&'.19@AHdl  simplexmqAgent store error.  simplexmqIO exceptions in store actions.! simplexmq3Connection alias not found (or both queues absent)." simplexmqConnection alias already used.# simplexmqfWrong connection type, e.g. "send" connection when "receive" or "duplex" is expected, or vice versa.  and E do not allow duplex connections - they would also return this error.$ simplexmqCurrently not used. The intention was to pass current expected queue status in methods, as we always know what it should be at any stage of the protocol, and in case it does not match use this error.% simplexmqUsed in + that is not implemented/used. TODO remove.* simplexmq+Base message data independent of direction.- simplexmqMonotonically increasing id of a message per connection, internal to the agent. Internal Id preserves ordering between both received and sent messages, and is needed to track the order of the conversation (which can be different for the sender / receiver) and address messages in commands. External [sender] Id cannot be used for this purpose due to a possibility of implementation errors in different agents.0 simplexmq)Hash of the message as computed by agent.: simplexmq+A message sent by the agent to a recipient.= simplexmqJId of the message sent / to be sent, as in its number in order of sending.? simplexmq<Timestamp of the message received by broker, corresponds to 5 status.@ simplexmq?Timestamp of the message received by recipient, corresponds to 6 status.N simplexmq.A message received by the agent from a sender.R simplexmq,Id of the message at sender, corresponds to a from the sender's side. Sender Id is made sequential for detection of missing messages. For redundant / parallel queues, it also allows to keep track of duplicates and restore the original order before delivery to the client.T simplexmqId of the message at broker, although it is not sequential (to avoid metadata leakage for potential observer), it is needed to track repeated deliveries in case of connection loss - this logic is not implemented yet.W simplexmq7Timestamp of acknowledgement to broker, corresponds to E status. Do not mix up with UI - timestamp created at broker after it receives the message from sender.X simplexmq7Timestamp of acknowledgement to sender, corresponds to F status. Do not mix up with SQ - timestamp created at sender before sending, which in its turn corresponds to i in sending agent.Y simplexmqRHash of previous message as received from sender - stored for integrity forensics.[ simplexmq:A message in either direction that is stored by the agent.p simplexmqCorresponds to last_snd_msg_hash in  connections tableq simplexmqCorresponds to last_rcv_msg_hash in  connections tabler simplexmqCorresponds to last_external_snd_msg_id in  connections tablet simplexmqdConnection of an unknown type. Used to refer to an arbitrary connection when retrieving from store.z simplexmqConnection of a specific type.RcvConnection is a connection that only has a receive queue set up, typically created by a recipient initiating a duplex connection.SndConnection is a connection that only has a send queue set up, typically created by a sender joining a duplex connection through a recipient's invitation.DuplexConnection is a connection that has both receive and send queues set up, typically created by upgrading a receive or a send connection with a missing queue.~ simplexmqType of a connection. simplexmqNA send queue. SMP queue through which the agent sends messages to a recipient. simplexmqSA receive queue. SMP queue through which the agent receives messages from a sender. simplexmqCStore class type. Defines store access methods for implementations.%$#"! &'()*+0.-,/123654789:;@?><=ABCFEDGHIJKLMNOXWVUTSRPYQZ[]\^_adb`cefnmihgojklpqrstuvyxwz}|{~~z}|{vyxwtusrqpefnmihgojkl^_adb`c[]\NOXWVUTSRPYQZKLMJIHGCFEDBA:;@?><=789365421*+0.-,/'()&%$#"! None"#$&'/=>?@AX_dpq>None"$.dqNone "$,.>X_dr  (c) simplex.chatAGPL-3chat@simplex.chat experimental non-portableNone "$&'.>SX_da  simplexmq>Runs an SMP agent as a TCP service using passed configuration."See a full agent executable here: Lhttps://github.com/simplex-chat/simplexmq/blob/master/apps/smp-agent/Main.hs  simplexmqNRuns an SMP agent as a TCP service using passed configuration with signalling.This function uses passed TMVar to signal when the server is ready to accept TCP requests (True) and when it is disconnected from the TCP socket once the server thread is killed (False).  simplexmqMCreates an SMP agent instance that receives commands and sends responses via #s.  simplexmqJRuns an SMP agent instance that receives commands and sends responses via #s.        $ !"#$%&'()*+,-./0123445667889:;<=>?@ABCCDEFGHHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                    ! " # $ $ % & ' ( ) ) * + + , - . / 0 0 1 2 3 4 5 6   7 8 9   : ; < < = > ? @ A B C D D E F G H I J K L M N O PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyzz{{||}~'        !"#$%&'()*+,-./001223456789:;<=>?@AABCDEFGGHIJKLMNOPQRSTUUVWXYZ[\]^_`abbcdefghijjklmnopqrstuvwxyz{|}~<<=Asimplexmq-0.3.1-inplace+Simplex.Messaging.Agent.Store.SQLite.SchemaSimplex.Messaging.UtilSimplex.Messaging.ParsersSimplex.Messaging.CryptoSimplex.Messaging.TransportSimplex.Messaging.Protocol#Simplex.Messaging.Server.QueueStore!Simplex.Messaging.Server.StoreLog'Simplex.Messaging.Server.QueueStore.STM!Simplex.Messaging.Server.MsgStore%Simplex.Messaging.Server.MsgStore.STM Simplex.Messaging.Server.Env.STMSimplex.Messaging.Server Simplex.Messaging.Agent.ProtocolSimplex.Messaging.ClientSimplex.Messaging.Agent.Store$Simplex.Messaging.Agent.Store.SQLite"Simplex.Messaging.Agent.Env.SQLiteSimplex.Messaging.Agent.ClientSimplex.Messaging.AgentPaths_simplexmqCrypto.PubKey.RSA PrivateKey PublicKeySimplex.MessagingServerClient createSchemaInternalExceptionunInternalExceptionraceAny_<$$><$?>bshow liftIOEither liftErrorliftEitherError$fMonadUnliftIOExceptT$fExceptionInternalException$fEqInternalException$fShowInternalExceptionbase64P base64StringP tsISO8601PparseparseAll parseRead parseRead1 parseRead2 parseStringblobFieldParserKeyHash$sel:unKeyHash:KeyHashIV $sel:unIV:IVKey$sel:unKey:Key CryptoErrorRSAEncryptErrorRSADecryptError RSASignErrorAESCipherError CryptoIVErrorAESDecryptErrorCryptoLargeMsgErrorCryptoHeaderError Signature$sel:unSignature:Signature FullKeyPair SafeKeyPair rsaPrivateKeyFullPrivateKey $sel:unPrivateKey:FullPrivateKeySafePrivateKey$sel:rsaPublicKey:PublicKey authTagSizegenerateKeyPair publicKey publicKeySize validKeySize publicKeyHash sha256HashaesKeyPivPencryptdecrypt encryptAES decryptAES randomAesKeyrandomIV authTagToBS bsToAuthTag encryptOAEP decryptOAEPsignverifyserializePubKeyserializePrivKeypubKeyP binaryPubKeyPprivKeyPsafePrivateKey encodePubKey$fFromFieldPublicKey$fToFieldPublicKey$fIsStringPublicKey$fFromFieldSafePrivateKey$fToFieldSafePrivateKey$fIsStringFullPrivateKey$fPrivateKeyFullPrivateKey$fPrivateKeySafePrivateKey$fIsStringSignature$fFromFieldKeyHash$fToFieldKeyHash$fIsStringKeyHash $fEqPublicKey$fShowPublicKey$fEqSafePrivateKey$fShowSafePrivateKey$fEqFullPrivateKey$fShowFullPrivateKey $fEqSignature$fShowSignature$fEqCryptoError$fShowCryptoError$fExceptionCryptoError $fEqKeyHash $fOrdKeyHash $fShowKeyHashTransportError TEBadBlock TEEncrypt TEDecrypt TEHandshakeTHandle$sel:handle:THandle$sel:sndKey:THandle$sel:rcvKey:THandle$sel:blockSize:THandle runTCPServer runTCPClientputLngetLntrimCRtransportErrorPserializeTransportError tPutEncrypted tGetEncryptedserverHandshakeclientHandshake$fArbitraryHandshakeError$fArbitraryTransportError$fEqSMPVersion$fOrdSMPVersion$fEqHandshakeError$fGenericHandshakeError$fReadHandshakeError$fShowHandshakeError$fExceptionHandshakeError$fEqTransportError$fGenericTransportError$fReadTransportError$fShowTransportError$fExceptionTransportError$fEqServerHeader$fShowServerHeader CommandError PROHIBITEDKEY_SIZESYNTAXNO_AUTHHAS_AUTHNO_QUEUE ErrorTypeBLOCKCMDAUTHNO_MSGINTERNAL DUPLICATE_MsgBodyMsgIdSenderPublicKeySenderPrivateKeyRecipientPublicKeyRecipientPrivateKeyCorrIdbsEncodedCommandNEWSUBKEYACKOFFDELSENDPINGIDSMSGENDOKERRPONGQueueIdSenderId RecipientIdSignedRawTransmissionRawTransmissionSignedTransmissionOrErrorSignedTransmission TransmissionCmdSPartySBroker SRecipientSSenderPartyBroker RecipientSender transmissionPcommandPserializeCommand errorTypePserializeErrorTypetPutserializeTransmission fromClient fromServertGet$fIsStringCorrId$fArbitraryCommandError$fArbitraryErrorType $fShowParty $fEqCorrId $fOrdCorrId $fShowCorrId$fEqCommandError$fGenericCommandError$fReadCommandError$fShowCommandError $fEqErrorType$fGenericErrorType$fReadErrorType$fShowErrorType $fEqCommand $fShowCommand $fShowCmd $fShowSPartyMonadQueueStoreaddQueuegetQueue secureQueue suspendQueue deleteQueue QueueStatus QueueActiveQueueOffQueueRec recipientIdsenderId recipientKey senderKeystatus mkQueueRec$fEqQueueStatusStoreLogopenWriteStoreLogopenReadStoreLog closeStoreLoglogCreateQueuelogSecureQueuelogDeleteQueuereadWriteStoreLog QueueStoreQueueStoreDataqueuessenders newQueueStore updateQueues getRcpQueue$fMonadQueueStoreTVarSTM MonadMsgQueuewriteMsg tryPeekMsgpeekMsg tryDelPeekMsg MonadMsgStore getMsgQueue delMsgQueueMessagemsgIdtsmsgBody STMMsgStore MsgStoreDatamessagesMsgQueuemsgQueue newMsgStore$fMonadMsgQueueMsgQueueSTM$fMonadMsgStoreTVarMsgQueueSTMSub$sel:subThread:Sub$sel:delivered:SubSubscriptionThreadNoSub SubPending SubThread$sel:subscriptions:Client$sel:rcvQ:Client$sel:sndQ:Client$sel:subscribedQ:Server$sel:subscribers:ServerEnv$sel:config:Env$sel:server:Env$sel:queueStore:Env$sel:msgStore:Env$sel:idsDrg:Env$sel:serverKeyPair:Env$sel:storeLog:Env ServerConfig$sel:tcpPort:ServerConfig$sel:tbqSize:ServerConfig$sel:queueIdBytes:ServerConfig$sel:msgIdBytes:ServerConfig$sel:storeLog:ServerConfig"$sel:serverPrivateKey:ServerConfig newServer newClientnewSubscriptionnewEnv runSMPServerrunSMPServerBlocking SMPAgentError A_MESSAGE A_PROHIBITED A_ENCRYPTION A_SIGNATUREBrokerErrorTypeRESPONSE UNEXPECTEDNETWORK TRANSPORTTIMEOUTConnectionErrorTypeUNKNOWN DUPLICATESIMPLEXCommandErrorTypeNO_CONNSIZELARGEAgentErrorTypeCONNSMPBROKERAGENT MsgErrorType MsgSkippedMsgBadId MsgBadHash MsgDuplicate MsgIntegrityMsgOkMsgErrorNew ConfirmedSecuredActiveDisabledVerificationKey SignatureKey DecryptionKey EncryptionKey ReplyMode SMPQueueInfoAckModeOnOffOnOff ConnAlias SMPServerhostportkeyHashAMessageHELLOREPLYA_MSG SMPMessageSMPConfirmation senderMsgIdsenderTimestamppreviousMsgHash agentMessageACommandINVJOINCONSUBALLSENT recipientMeta brokerMeta senderMeta msgIntegritySAPartySAgentSClientAPartyAgentATransmissionOrError ATransmissionARawTransmissionparseSMPMessageserializeSMPMessage smpQueueInfoP smpServerPserializeSmpQueueInfoserializeServer msgIntegrityPserializeMsgIntegrityagentErrorTypePserializeAgentErrortPutRawtGetRaw$fTestEqualityAPartySAParty$fIsStringSMPServer$fArbitraryCommandErrorType$fArbitraryConnectionErrorType$fArbitraryBrokerErrorType$fArbitrarySMPAgentError$fArbitraryAgentErrorType $fEqAParty $fShowAParty $fEqSMPServer$fOrdSMPServer$fShowSMPServer $fEqOnOff $fShowOnOff $fReadOnOff $fEqAckMode $fShowAckMode $fEqReplyMode$fShowReplyMode$fEqSMPQueueInfo$fShowSMPQueueInfo$fShowAMessage$fShowQueueDirection$fShowQueueStatus$fReadQueueStatus$fShowSMPMessage$fEqMsgErrorType$fShowMsgErrorType$fEqMsgIntegrity$fShowMsgIntegrity$fEqCommandErrorType$fGenericCommandErrorType$fReadCommandErrorType$fShowCommandErrorType$fExceptionCommandErrorType$fEqConnectionErrorType$fGenericConnectionErrorType$fReadConnectionErrorType$fShowConnectionErrorType$fExceptionConnectionErrorType$fEqBrokerErrorType$fGenericBrokerErrorType$fReadBrokerErrorType$fShowBrokerErrorType$fExceptionBrokerErrorType$fEqSMPAgentError$fGenericSMPAgentError$fReadSMPAgentError$fShowSMPAgentError$fExceptionSMPAgentError$fEqAgentErrorType$fGenericAgentErrorType$fReadAgentErrorType$fShowAgentErrorType$fExceptionAgentErrorType$fShowACommand $fEqACommand $fShowACmd $fEqSAParty $fShowSAPartySMPClientErrorSMPServerErrorSMPResponseErrorSMPUnexpectedResponseSMPResponseTimeoutSMPNetworkErrorSMPTransportErrorSMPSignatureErrorSMPClientConfig$sel:qSize:SMPClientConfig $sel:defaultPort:SMPClientConfig$sel:tcpTimeout:SMPClientConfig$sel:smpPing:SMPClientConfig#$sel:smpCommandSize:SMPClientConfigSMPServerTransmission SMPClient$sel:blockSize:SMPClientsmpDefaultConfig getSMPClientcloseSMPClientcreateSMPQueuesubscribeSMPQueuesecureSMPQueuesendSMPMessage ackSMPMessagesuspendSMPQueuedeleteSMPQueuesendSMPCommand$fEqSMPClientError$fShowSMPClientError$fExceptionSMPClientError StoreError SEInternalSEConnNotFoundSEConnDuplicate SEBadConnTypeSEBadQueueStatusSENotImplemented InternalTs InternalId$sel:unId:InternalIdMsgBase$sel:connAlias:MsgBase$sel:internalId:MsgBase$sel:internalTs:MsgBase$sel:msgBody:MsgBase$sel:internalHash:MsgBase DeliveredTsSentTs SndMsgStatusCreatedSent Delivered InternalSndId$sel:unSndId:InternalSndIdSndMsg$sel:msgBase:SndMsg$sel:internalSndId:SndMsg$sel:sndMsgStatus:SndMsg$sel:sentTs:SndMsg$sel:deliveredTs:SndMsg AckSenderTs AckBrokerTs RcvMsgStatusReceivedAcknowledgedToBrokerAcknowledgedToSenderBrokerTsBrokerId ExternalSndTs ExternalSndId InternalRcvId$sel:unRcvId:InternalRcvIdRcvMsg$sel:msgBase:RcvMsg$sel:internalRcvId:RcvMsg$sel:externalSndId:RcvMsg$sel:externalSndTs:RcvMsg$sel:brokerId:RcvMsg$sel:brokerTs:RcvMsg$sel:rcvMsgStatus:RcvMsg$sel:ackBrokerTs:RcvMsg$sel:ackSenderTs:RcvMsg$sel:externalPrevSndHash:RcvMsg$sel:msgIntegrity:RcvMsgMsgMRcvMSnd SndMsgData$sel:internalId:SndMsgData$sel:internalSndId:SndMsgData$sel:internalTs:SndMsgData$sel:msgBody:SndMsgData$sel:internalHash:SndMsgData RcvMsgData$sel:internalId:RcvMsgData$sel:internalRcvId:RcvMsgData$sel:internalTs:RcvMsgData$sel:senderMeta:RcvMsgData$sel:brokerMeta:RcvMsgData$sel:msgBody:RcvMsgData$sel:internalHash:RcvMsgData#$sel:externalPrevSndHash:RcvMsgData$sel:msgIntegrity:RcvMsgDataPrevSndMsgHashPrevRcvMsgHashPrevExternalSndIdMsgHashSomeConn SConnTypeSCRcvSCSndSCDuplex Connection RcvConnection SndConnectionDuplexConnectionConnTypeCRcvCSndCDuplexSndQueue$sel:server:SndQueue$sel:sndId:SndQueue$sel:connAlias:SndQueue$sel:sndPrivateKey:SndQueue$sel:encryptKey:SndQueue$sel:signKey:SndQueue$sel:status:SndQueueRcvQueue$sel:server:RcvQueue$sel:rcvId:RcvQueue$sel:connAlias:RcvQueue$sel:rcvPrivateKey:RcvQueue$sel:sndId:RcvQueue$sel:sndKey:RcvQueue$sel:decryptKey:RcvQueue$sel:verifyKey:RcvQueue$sel:status:RcvQueueMonadAgentStore createRcvConn createSndConngetConngetAllConnAliases getRcvConn deleteConnupgradeRcvConnToDuplexupgradeSndConnToDuplexsetRcvQueueStatussetRcvQueueActivesetSndQueueStatus updateRcvIds createRcvMsg updateSndIds createSndMsggetMsgconnType$fTestEqualityConnTypeSConnType $fEqSomeConn $fEqRcvQueue$fShowRcvQueue $fEqSndQueue$fShowSndQueue $fEqConnType$fShowConnType$fEqInternalRcvId$fShowInternalRcvId$fEqRcvMsgStatus$fShowRcvMsgStatus$fEqInternalSndId$fShowInternalSndId$fEqSndMsgStatus$fShowSndMsgStatus$fEqInternalId$fShowInternalId $fEqMsgBase $fShowMsgBase $fEqSndMsg $fShowSndMsg $fEqRcvMsg $fShowRcvMsg$fEqMsg $fShowMsg$fEqStoreError$fShowStoreError$fExceptionStoreError$fShowSomeConn$fShowSConnType $fEqSConnType$fShowConnection$fEqConnection SQLiteStore$sel:dbFilePath:SQLiteStore$sel:dbConn:SQLiteStorecreateSQLiteStoreconnectSQLiteStore$fFromRow(,,,,,,,,,,)$fFromFieldMsgIntegrity$fToFieldMsgIntegrity$fToFieldSndMsgStatus$fToFieldRcvMsgStatus$fFromFieldInternalId$fToFieldInternalId$fFromFieldInternalSndId$fToFieldInternalSndId$fFromFieldInternalRcvId$fToFieldInternalRcvId$fFromFieldQueueStatus$fToFieldQueueStatus$fMonadAgentStoreSQLiteStorem$sel:clientCounter:Env$sel:reservedMsgSize:Env$sel:randomServer:Env AgentConfig$sel:tcpPort:AgentConfig$sel:smpServers:AgentConfig$sel:rsaKeySize:AgentConfig$sel:connIdBytes:AgentConfig$sel:tbqSize:AgentConfig$sel:dbFile:AgentConfig$sel:smpCfg:AgentConfignewSMPAgentEnv AgentMonad AgentClient$sel:rcvQ:AgentClient$sel:sndQ:AgentClient$sel:msgQ:AgentClient$sel:smpClients:AgentClient$sel:subscrSrvrs:AgentClient$sel:subscrConns:AgentClient$sel:clientId:AgentClientnewAgentClientgetSMPServerClientcloseSMPServerClientsnewReceiveQueuesubscribeQueueremoveSubscription logServersendConfirmation sendHellosendAcksendAgentMessagedecryptAndVerify verifyMessage cryptoError runSMPAgentrunSMPAgentBlockinggetSMPAgentClientrunSMPAgentClientversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileNameKeyPairHandshakeErrorENCRYPTDECRYPTVERSIONRSA_KEYHEADERAES_KEYSBAD_HASH MAJOR_VERSION TERMINATED parseCommand tGetParse stm-2.5.0.0Control.Concurrent.STM.TBQueueTBQueue