diff --git a/build-py-grpc.sh b/build-py-grpc.sh
index a22be1f3..4285224a 100755
--- a/build-py-grpc.sh
+++ b/build-py-grpc.sh
@@ -5,7 +5,7 @@ echo "Packaging python tinode-grpc..."
 pushd ./pbx > /dev/null
 
 # Generate grpc bindings from the proto file.
-./generate-python.sh v=3
+./py-generate.sh v=3
 
 pushd ../py_grpc > /dev/null
 
diff --git a/py_grpc/README.md b/py_grpc/README.md
index 57f123fc..a26e08b9 100644
--- a/py_grpc/README.md
+++ b/py_grpc/README.md
@@ -17,7 +17,7 @@ pip install tinode_grpc
 
 ## Generating files
 
-Don't modify included files directly. If you want to make changes, you have to install protobuffers tool chain and gRPC the generate the Python bindings from [`pbx/model.proto`](https://github.com/tinode/chat/tree/master/pbx/model.proto) (your path to `model.proto` may be different):
+Don't modify included files directly. If you want to make changes, you have to install protobuffers tool chain and gRPC then generate the Python bindings from [`pbx/model.proto`](https://github.com/tinode/chat/tree/master/pbx/model.proto) (your path to `model.proto` may be different):
 ```
 python -m grpc_tools.protoc -I../pbx --python_out=. --grpc_python_out=. ../pbx/model.proto
 ```
diff --git a/py_grpc/tinode_grpc/model_pb2.py b/py_grpc/tinode_grpc/model_pb2.py
index 3ae626af..0488db81 100644
--- a/py_grpc/tinode_grpc/model_pb2.py
+++ b/py_grpc/tinode_grpc/model_pb2.py
@@ -1,10 +1,10 @@
+# -*- coding: utf-8 -*-
 # Generated by the protocol buffer compiler.  DO NOT EDIT!
 # source: model.proto
-
-import sys
-_b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1'))
+"""Generated protocol buffer code."""
 from google.protobuf.internal import enum_type_wrapper
 from google.protobuf import descriptor as _descriptor
+from google.protobuf import descriptor_pool as _descriptor_pool
 from google.protobuf import message as _message
 from google.protobuf import reflection as _reflection
 from google.protobuf import symbol_database as _symbol_database
@@ -15,129 +15,15 @@ _sym_db = _symbol_database.Default()
 
 
 
-DESCRIPTOR = _descriptor.FileDescriptor(
-  name='model.proto',
-  package='pbx',
-  syntax='proto3',
-  serialized_options=_b('Z\032github.com/tinode/chat/pbx'),
-  serialized_pb=_b('\n\x0bmodel.proto\x12\x03pbx\"\x08\n\x06Unused\",\n\x0e\x44\x65\x66\x61ultAcsMode\x12\x0c\n\x04\x61uth\x18\x01 \x01(\t\x12\x0c\n\x04\x61non\x18\x02 \x01(\t\")\n\nAccessMode\x12\x0c\n\x04want\x18\x01 \x01(\t\x12\r\n\x05given\x18\x02 \x01(\t\"\'\n\x06SetSub\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x0c\n\x04mode\x18\x02 \x01(\t\"\x99\x01\n\nClientCred\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x10\n\x08response\x18\x03 \x01(\t\x12+\n\x06params\x18\x04 \x03(\x0b\x32\x1b.pbx.ClientCred.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"e\n\x07SetDesc\x12(\n\x0b\x64\x65\x66\x61ult_acs\x18\x01 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x0e\n\x06public\x18\x02 \x01(\x0c\x12\x0f\n\x07private\x18\x03 \x01(\x0c\x12\x0f\n\x07trusted\x18\x04 \x01(\x0c\"u\n\x07GetOpts\x12\x19\n\x11if_modified_since\x18\x01 \x01(\x03\x12\x0c\n\x04user\x18\x02 \x01(\t\x12\r\n\x05topic\x18\x03 \x01(\t\x12\x10\n\x08since_id\x18\x04 \x01(\x05\x12\x11\n\tbefore_id\x18\x05 \x01(\x05\x12\r\n\x05limit\x18\x06 \x01(\x05\"k\n\x08GetQuery\x12\x0c\n\x04what\x18\x01 \x01(\t\x12\x1a\n\x04\x64\x65sc\x18\x02 \x01(\x0b\x32\x0c.pbx.GetOpts\x12\x19\n\x03sub\x18\x03 \x01(\x0b\x32\x0c.pbx.GetOpts\x12\x1a\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x0c.pbx.GetOpts\"m\n\x08SetQuery\x12\x1a\n\x04\x64\x65sc\x18\x01 \x01(\x0b\x32\x0c.pbx.SetDesc\x12\x18\n\x03sub\x18\x02 \x01(\x0b\x32\x0b.pbx.SetSub\x12\x0c\n\x04tags\x18\x03 \x03(\t\x12\x1d\n\x04\x63red\x18\x04 \x01(\x0b\x32\x0f.pbx.ClientCred\"#\n\x08SeqRange\x12\x0b\n\x03low\x18\x01 \x01(\x05\x12\n\n\x02hi\x18\x02 \x01(\x05\"~\n\x08\x43lientHi\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\nuser_agent\x18\x02 \x01(\t\x12\x0b\n\x03ver\x18\x03 \x01(\t\x12\x11\n\tdevice_id\x18\x04 \x01(\t\x12\x0c\n\x04lang\x18\x05 \x01(\t\x12\x10\n\x08platform\x18\x06 \x01(\t\x12\x12\n\nbackground\x18\x07 \x01(\x08\"\xbe\x01\n\tClientAcc\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x0e\n\x06scheme\x18\x03 \x01(\t\x12\x0e\n\x06secret\x18\x04 \x01(\x0c\x12\r\n\x05login\x18\x05 \x01(\x08\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x1a\n\x04\x64\x65sc\x18\x07 \x01(\x0b\x32\x0c.pbx.SetDesc\x12\x1d\n\x04\x63red\x18\x08 \x03(\x0b\x32\x0f.pbx.ClientCred\x12\r\n\x05token\x18\t \x01(\x0c\x12\r\n\x05state\x18\n \x01(\t\"X\n\x0b\x43lientLogin\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06scheme\x18\x02 \x01(\t\x12\x0e\n\x06secret\x18\x03 \x01(\x0c\x12\x1d\n\x04\x63red\x18\x04 \x03(\x0b\x32\x0f.pbx.ClientCred\"j\n\tClientSub\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12 \n\tset_query\x18\x03 \x01(\x0b\x32\r.pbx.SetQuery\x12 \n\tget_query\x18\x04 \x01(\x0b\x32\r.pbx.GetQuery\"7\n\x0b\x43lientLeave\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\r\n\x05unsub\x18\x03 \x01(\x08\"\x9d\x01\n\tClientPub\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0f\n\x07no_echo\x18\x03 \x01(\x08\x12&\n\x04head\x18\x04 \x03(\x0b\x32\x18.pbx.ClientPub.HeadEntry\x12\x0f\n\x07\x63ontent\x18\x05 \x01(\x0c\x1a+\n\tHeadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"D\n\tClientGet\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x05query\x18\x03 \x01(\x0b\x32\r.pbx.GetQuery\"D\n\tClientSet\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x05query\x18\x03 \x01(\x0b\x32\r.pbx.SetQuery\"\xe0\x01\n\tClientDel\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12!\n\x04what\x18\x03 \x01(\x0e\x32\x13.pbx.ClientDel.What\x12\x1e\n\x07\x64\x65l_seq\x18\x04 \x03(\x0b\x32\r.pbx.SeqRange\x12\x0f\n\x07user_id\x18\x05 \x01(\t\x12\x1d\n\x04\x63red\x18\x06 \x01(\x0b\x32\x0f.pbx.ClientCred\x12\x0c\n\x04hard\x18\x07 \x01(\x08\"7\n\x04What\x12\x07\n\x03MSG\x10\x00\x12\t\n\x05TOPIC\x10\x01\x12\x07\n\x03SUB\x10\x02\x12\x08\n\x04USER\x10\x03\x12\x08\n\x04\x43RED\x10\x04\"H\n\nClientNote\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x1b\n\x04what\x18\x02 \x01(\x0e\x32\r.pbx.InfoNote\x12\x0e\n\x06seq_id\x18\x03 \x01(\x05\"\\\n\x0b\x43lientExtra\x12\x13\n\x0b\x61ttachments\x18\x01 \x03(\t\x12\x14\n\x0con_behalf_of\x18\x02 \x01(\t\x12\"\n\nauth_level\x18\x03 \x01(\x0e\x32\x0e.pbx.AuthLevel\"\xf5\x02\n\tClientMsg\x12\x1b\n\x02hi\x18\x01 \x01(\x0b\x32\r.pbx.ClientHiH\x00\x12\x1d\n\x03\x61\x63\x63\x18\x02 \x01(\x0b\x32\x0e.pbx.ClientAccH\x00\x12!\n\x05login\x18\x03 \x01(\x0b\x32\x10.pbx.ClientLoginH\x00\x12\x1d\n\x03sub\x18\x04 \x01(\x0b\x32\x0e.pbx.ClientSubH\x00\x12!\n\x05leave\x18\x05 \x01(\x0b\x32\x10.pbx.ClientLeaveH\x00\x12\x1d\n\x03pub\x18\x06 \x01(\x0b\x32\x0e.pbx.ClientPubH\x00\x12\x1d\n\x03get\x18\x07 \x01(\x0b\x32\x0e.pbx.ClientGetH\x00\x12\x1d\n\x03set\x18\x08 \x01(\x0b\x32\x0e.pbx.ClientSetH\x00\x12\x1d\n\x03\x64\x65l\x18\t \x01(\x0b\x32\x0e.pbx.ClientDelH\x00\x12\x1f\n\x04note\x18\n \x01(\x0b\x32\x0f.pbx.ClientNoteH\x00\x12\x1f\n\x05\x65xtra\x18\r \x01(\x0b\x32\x10.pbx.ClientExtraB\t\n\x07Message\"9\n\nServerCred\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08\"\xe6\x02\n\tTopicDesc\x12\x12\n\ncreated_at\x18\x01 \x01(\x03\x12\x12\n\nupdated_at\x18\x02 \x01(\x03\x12\x12\n\ntouched_at\x18\x03 \x01(\x03\x12#\n\x06\x64\x65\x66\x61\x63s\x18\x04 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x1c\n\x03\x61\x63s\x18\x05 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0e\n\x06seq_id\x18\x06 \x01(\x05\x12\x0f\n\x07read_id\x18\x07 \x01(\x05\x12\x0f\n\x07recv_id\x18\x08 \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\t \x01(\x05\x12\x0e\n\x06public\x18\n \x01(\x0c\x12\x0f\n\x07private\x18\x0b \x01(\x0c\x12\r\n\x05state\x18\x0c \x01(\t\x12\x10\n\x08state_at\x18\r \x01(\x03\x12\x0f\n\x07trusted\x18\x0e \x01(\x0c\x12\x0f\n\x07is_chan\x18\x11 \x01(\x08\x12\x16\n\x0elast_seen_time\x18\x0f \x01(\x03\x12\x1c\n\x14last_seen_user_agent\x18\x10 \x01(\t\"\xbe\x02\n\x08TopicSub\x12\x12\n\nupdated_at\x18\x01 \x01(\x03\x12\x12\n\ndeleted_at\x18\x02 \x01(\x03\x12\x0e\n\x06online\x18\x03 \x01(\x08\x12\x1c\n\x03\x61\x63s\x18\x04 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0f\n\x07read_id\x18\x05 \x01(\x05\x12\x0f\n\x07recv_id\x18\x06 \x01(\x05\x12\x0e\n\x06public\x18\x07 \x01(\x0c\x12\x0f\n\x07trusted\x18\x10 \x01(\x0c\x12\x0f\n\x07private\x18\x08 \x01(\x0c\x12\x0f\n\x07user_id\x18\t \x01(\t\x12\r\n\x05topic\x18\n \x01(\t\x12\x12\n\ntouched_at\x18\x0b \x01(\x03\x12\x0e\n\x06seq_id\x18\x0c \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\r \x01(\x05\x12\x16\n\x0elast_seen_time\x18\x0e \x01(\x03\x12\x1c\n\x14last_seen_user_agent\x18\x0f \x01(\t\";\n\tDelValues\x12\x0e\n\x06\x64\x65l_id\x18\x01 \x01(\x05\x12\x1e\n\x07\x64\x65l_seq\x18\x02 \x03(\x0b\x32\r.pbx.SeqRange\"\x9f\x01\n\nServerCtrl\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x63ode\x18\x03 \x01(\x05\x12\x0c\n\x04text\x18\x04 \x01(\t\x12+\n\x06params\x18\x05 \x03(\x0b\x32\x1b.pbx.ServerCtrl.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xcf\x01\n\nServerData\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x14\n\x0c\x66rom_user_id\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x03\x12\x12\n\ndeleted_at\x18\x03 \x01(\x03\x12\x0e\n\x06seq_id\x18\x04 \x01(\x05\x12\'\n\x04head\x18\x05 \x03(\x0b\x32\x19.pbx.ServerData.HeadEntry\x12\x0f\n\x07\x63ontent\x18\x06 \x01(\x0c\x1a+\n\tHeadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xe4\x02\n\nServerPres\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x0b\n\x03src\x18\x02 \x01(\t\x12\"\n\x04what\x18\x03 \x01(\x0e\x32\x14.pbx.ServerPres.What\x12\x12\n\nuser_agent\x18\x04 \x01(\t\x12\x0e\n\x06seq_id\x18\x05 \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\x06 \x01(\x05\x12\x1e\n\x07\x64\x65l_seq\x18\x07 \x03(\x0b\x32\r.pbx.SeqRange\x12\x16\n\x0etarget_user_id\x18\x08 \x01(\t\x12\x15\n\ractor_user_id\x18\t \x01(\t\x12\x1c\n\x03\x61\x63s\x18\n \x01(\x0b\x32\x0f.pbx.AccessMode\"u\n\x04What\x12\x06\n\x02ON\x10\x00\x12\x07\n\x03OFF\x10\x01\x12\x06\n\x02UA\x10\x03\x12\x07\n\x03UPD\x10\x04\x12\x08\n\x04GONE\x10\x05\x12\x07\n\x03\x41\x43S\x10\x06\x12\x08\n\x04TERM\x10\x07\x12\x07\n\x03MSG\x10\x08\x12\x08\n\x04READ\x10\t\x12\x08\n\x04RECV\x10\n\x12\x07\n\x03\x44\x45L\x10\x0b\x12\x08\n\x04TAGS\x10\x0c\"\xab\x01\n\nServerMeta\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x0e.pbx.TopicDesc\x12\x1a\n\x03sub\x18\x04 \x03(\x0b\x32\r.pbx.TopicSub\x12\x1b\n\x03\x64\x65l\x18\x05 \x01(\x0b\x32\x0e.pbx.DelValues\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x1d\n\x04\x63red\x18\x07 \x03(\x0b\x32\x0f.pbx.ServerCred\"k\n\nServerInfo\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x14\n\x0c\x66rom_user_id\x18\x02 \x01(\t\x12\x1b\n\x04what\x18\x03 \x01(\x0e\x32\r.pbx.InfoNote\x12\x0e\n\x06seq_id\x18\x04 \x01(\x05\x12\x0b\n\x03src\x18\x05 \x01(\t\"\xca\x01\n\tServerMsg\x12\x1f\n\x04\x63trl\x18\x01 \x01(\x0b\x32\x0f.pbx.ServerCtrlH\x00\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x0f.pbx.ServerDataH\x00\x12\x1f\n\x04pres\x18\x03 \x01(\x0b\x32\x0f.pbx.ServerPresH\x00\x12\x1f\n\x04meta\x18\x04 \x01(\x0b\x32\x0f.pbx.ServerMetaH\x00\x12\x1f\n\x04info\x18\x05 \x01(\x0b\x32\x0f.pbx.ServerInfoH\x00\x12\r\n\x05topic\x18\x06 \x01(\tB\t\n\x07Message\"j\n\nServerResp\x12\x1d\n\x06status\x18\x01 \x01(\x0e\x32\r.pbx.RespCode\x12\x1e\n\x06srvmsg\x18\x02 \x01(\x0b\x32\x0e.pbx.ServerMsg\x12\x1d\n\x05\x63lmsg\x18\x03 \x01(\x0b\x32\x0e.pbx.ClientMsg\"\xa0\x01\n\x07Session\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\"\n\nauth_level\x18\x03 \x01(\x0e\x32\x0e.pbx.AuthLevel\x12\x13\n\x0bremote_addr\x18\x04 \x01(\t\x12\x12\n\nuser_agent\x18\x05 \x01(\t\x12\x11\n\tdevice_id\x18\x06 \x01(\t\x12\x10\n\x08language\x18\x07 \x01(\t\"D\n\tClientReq\x12\x1b\n\x03msg\x18\x01 \x01(\x0b\x32\x0e.pbx.ClientMsg\x12\x1a\n\x04sess\x18\x02 \x01(\x0b\x32\x0c.pbx.Session\"-\n\x0bSearchQuery\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\t\"Z\n\x0bSearchFound\x12\x1d\n\x06status\x18\x01 \x01(\x0e\x32\r.pbx.RespCode\x12\r\n\x05query\x18\x02 \x01(\t\x12\x1d\n\x06result\x18\x03 \x03(\x0b\x32\r.pbx.TopicSub\"S\n\nTopicEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1c\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x0e.pbx.TopicDesc\"\x82\x01\n\x0c\x41\x63\x63ountEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12(\n\x0b\x64\x65\x66\x61ult_acs\x18\x03 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x0e\n\x06public\x18\x04 \x01(\x0c\x12\x0c\n\x04tags\x18\x08 \x03(\t\"\xb0\x01\n\x11SubscriptionEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x03 \x01(\t\x12\x0e\n\x06\x64\x65l_id\x18\x04 \x01(\x05\x12\x0f\n\x07read_id\x18\x05 \x01(\x05\x12\x0f\n\x07recv_id\x18\x06 \x01(\x05\x12\x1d\n\x04mode\x18\x07 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0f\n\x07private\x18\x08 \x01(\x0c\"G\n\x0cMessageEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x1c\n\x03msg\x18\x02 \x01(\x0b\x32\x0f.pbx.ServerData*3\n\tAuthLevel\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04\x41NON\x10\n\x12\x08\n\x04\x41UTH\x10\x14\x12\x08\n\x04ROOT\x10\x1e*&\n\x08InfoNote\x12\x08\n\x04READ\x10\x00\x12\x08\n\x04RECV\x10\x01\x12\x06\n\x02KP\x10\x02*<\n\x08RespCode\x12\x0c\n\x08\x43ONTINUE\x10\x00\x12\x08\n\x04\x44ROP\x10\x01\x12\x0b\n\x07RESPOND\x10\x02\x12\x0b\n\x07REPLACE\x10\x03**\n\x04\x43rud\x12\n\n\x06\x43REATE\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x32;\n\x04Node\x12\x33\n\x0bMessageLoop\x12\x0e.pbx.ClientMsg\x1a\x0e.pbx.ServerMsg\"\x00(\x01\x30\x01\x32\x9f\x02\n\x06Plugin\x12-\n\x08\x46ireHose\x12\x0e.pbx.ClientReq\x1a\x0f.pbx.ServerResp\"\x00\x12,\n\x04\x46ind\x12\x10.pbx.SearchQuery\x1a\x10.pbx.SearchFound\"\x00\x12+\n\x07\x41\x63\x63ount\x12\x11.pbx.AccountEvent\x1a\x0b.pbx.Unused\"\x00\x12\'\n\x05Topic\x12\x0f.pbx.TopicEvent\x1a\x0b.pbx.Unused\"\x00\x12\x35\n\x0cSubscription\x12\x16.pbx.SubscriptionEvent\x1a\x0b.pbx.Unused\"\x00\x12+\n\x07Message\x12\x11.pbx.MessageEvent\x1a\x0b.pbx.Unused\"\x00\x42\x1cZ\x1agithub.com/tinode/chat/pbxb\x06proto3')
-)
-
-_AUTHLEVEL = _descriptor.EnumDescriptor(
-  name='AuthLevel',
-  full_name='pbx.AuthLevel',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='NONE', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ANON', index=1, number=10,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='AUTH', index=2, number=20,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ROOT', index=3, number=30,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5413,
-  serialized_end=5464,
-)
-_sym_db.RegisterEnumDescriptor(_AUTHLEVEL)
+DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x0bmodel.proto\x12\x03pbx\"\x08\n\x06Unused\",\n\x0e\x44\x65\x66\x61ultAcsMode\x12\x0c\n\x04\x61uth\x18\x01 \x01(\t\x12\x0c\n\x04\x61non\x18\x02 \x01(\t\")\n\nAccessMode\x12\x0c\n\x04want\x18\x01 \x01(\t\x12\r\n\x05given\x18\x02 \x01(\t\"\'\n\x06SetSub\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\x0c\n\x04mode\x18\x02 \x01(\t\"\x99\x01\n\nClientCred\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x10\n\x08response\x18\x03 \x01(\t\x12+\n\x06params\x18\x04 \x03(\x0b\x32\x1b.pbx.ClientCred.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"e\n\x07SetDesc\x12(\n\x0b\x64\x65\x66\x61ult_acs\x18\x01 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x0e\n\x06public\x18\x02 \x01(\x0c\x12\x0f\n\x07private\x18\x03 \x01(\x0c\x12\x0f\n\x07trusted\x18\x04 \x01(\x0c\"u\n\x07GetOpts\x12\x19\n\x11if_modified_since\x18\x01 \x01(\x03\x12\x0c\n\x04user\x18\x02 \x01(\t\x12\r\n\x05topic\x18\x03 \x01(\t\x12\x10\n\x08since_id\x18\x04 \x01(\x05\x12\x11\n\tbefore_id\x18\x05 \x01(\x05\x12\r\n\x05limit\x18\x06 \x01(\x05\"k\n\x08GetQuery\x12\x0c\n\x04what\x18\x01 \x01(\t\x12\x1a\n\x04\x64\x65sc\x18\x02 \x01(\x0b\x32\x0c.pbx.GetOpts\x12\x19\n\x03sub\x18\x03 \x01(\x0b\x32\x0c.pbx.GetOpts\x12\x1a\n\x04\x64\x61ta\x18\x04 \x01(\x0b\x32\x0c.pbx.GetOpts\"m\n\x08SetQuery\x12\x1a\n\x04\x64\x65sc\x18\x01 \x01(\x0b\x32\x0c.pbx.SetDesc\x12\x18\n\x03sub\x18\x02 \x01(\x0b\x32\x0b.pbx.SetSub\x12\x0c\n\x04tags\x18\x03 \x03(\t\x12\x1d\n\x04\x63red\x18\x04 \x01(\x0b\x32\x0f.pbx.ClientCred\"#\n\x08SeqRange\x12\x0b\n\x03low\x18\x01 \x01(\x05\x12\n\n\x02hi\x18\x02 \x01(\x05\"~\n\x08\x43lientHi\x12\n\n\x02id\x18\x01 \x01(\t\x12\x12\n\nuser_agent\x18\x02 \x01(\t\x12\x0b\n\x03ver\x18\x03 \x01(\t\x12\x11\n\tdevice_id\x18\x04 \x01(\t\x12\x0c\n\x04lang\x18\x05 \x01(\t\x12\x10\n\x08platform\x18\x06 \x01(\t\x12\x12\n\nbackground\x18\x07 \x01(\x08\"\xbe\x01\n\tClientAcc\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\x0e\n\x06scheme\x18\x03 \x01(\t\x12\x0e\n\x06secret\x18\x04 \x01(\x0c\x12\r\n\x05login\x18\x05 \x01(\x08\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x1a\n\x04\x64\x65sc\x18\x07 \x01(\x0b\x32\x0c.pbx.SetDesc\x12\x1d\n\x04\x63red\x18\x08 \x03(\x0b\x32\x0f.pbx.ClientCred\x12\r\n\x05token\x18\t \x01(\x0c\x12\r\n\x05state\x18\n \x01(\t\"X\n\x0b\x43lientLogin\x12\n\n\x02id\x18\x01 \x01(\t\x12\x0e\n\x06scheme\x18\x02 \x01(\t\x12\x0e\n\x06secret\x18\x03 \x01(\x0c\x12\x1d\n\x04\x63red\x18\x04 \x03(\x0b\x32\x0f.pbx.ClientCred\"j\n\tClientSub\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12 \n\tset_query\x18\x03 \x01(\x0b\x32\r.pbx.SetQuery\x12 \n\tget_query\x18\x04 \x01(\x0b\x32\r.pbx.GetQuery\"7\n\x0b\x43lientLeave\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\r\n\x05unsub\x18\x03 \x01(\x08\"\x9d\x01\n\tClientPub\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0f\n\x07no_echo\x18\x03 \x01(\x08\x12&\n\x04head\x18\x04 \x03(\x0b\x32\x18.pbx.ClientPub.HeadEntry\x12\x0f\n\x07\x63ontent\x18\x05 \x01(\x0c\x1a+\n\tHeadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"D\n\tClientGet\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x05query\x18\x03 \x01(\x0b\x32\r.pbx.GetQuery\"D\n\tClientSet\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x05query\x18\x03 \x01(\x0b\x32\r.pbx.SetQuery\"\xe0\x01\n\tClientDel\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12!\n\x04what\x18\x03 \x01(\x0e\x32\x13.pbx.ClientDel.What\x12\x1e\n\x07\x64\x65l_seq\x18\x04 \x03(\x0b\x32\r.pbx.SeqRange\x12\x0f\n\x07user_id\x18\x05 \x01(\t\x12\x1d\n\x04\x63red\x18\x06 \x01(\x0b\x32\x0f.pbx.ClientCred\x12\x0c\n\x04hard\x18\x07 \x01(\x08\"7\n\x04What\x12\x07\n\x03MSG\x10\x00\x12\t\n\x05TOPIC\x10\x01\x12\x07\n\x03SUB\x10\x02\x12\x08\n\x04USER\x10\x03\x12\x08\n\x04\x43RED\x10\x04\"H\n\nClientNote\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x1b\n\x04what\x18\x02 \x01(\x0e\x32\r.pbx.InfoNote\x12\x0e\n\x06seq_id\x18\x03 \x01(\x05\"\\\n\x0b\x43lientExtra\x12\x13\n\x0b\x61ttachments\x18\x01 \x03(\t\x12\x14\n\x0con_behalf_of\x18\x02 \x01(\t\x12\"\n\nauth_level\x18\x03 \x01(\x0e\x32\x0e.pbx.AuthLevel\"\xf5\x02\n\tClientMsg\x12\x1b\n\x02hi\x18\x01 \x01(\x0b\x32\r.pbx.ClientHiH\x00\x12\x1d\n\x03\x61\x63\x63\x18\x02 \x01(\x0b\x32\x0e.pbx.ClientAccH\x00\x12!\n\x05login\x18\x03 \x01(\x0b\x32\x10.pbx.ClientLoginH\x00\x12\x1d\n\x03sub\x18\x04 \x01(\x0b\x32\x0e.pbx.ClientSubH\x00\x12!\n\x05leave\x18\x05 \x01(\x0b\x32\x10.pbx.ClientLeaveH\x00\x12\x1d\n\x03pub\x18\x06 \x01(\x0b\x32\x0e.pbx.ClientPubH\x00\x12\x1d\n\x03get\x18\x07 \x01(\x0b\x32\x0e.pbx.ClientGetH\x00\x12\x1d\n\x03set\x18\x08 \x01(\x0b\x32\x0e.pbx.ClientSetH\x00\x12\x1d\n\x03\x64\x65l\x18\t \x01(\x0b\x32\x0e.pbx.ClientDelH\x00\x12\x1f\n\x04note\x18\n \x01(\x0b\x32\x0f.pbx.ClientNoteH\x00\x12\x1f\n\x05\x65xtra\x18\r \x01(\x0b\x32\x10.pbx.ClientExtraB\t\n\x07Message\"9\n\nServerCred\x12\x0e\n\x06method\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\t\x12\x0c\n\x04\x64one\x18\x03 \x01(\x08\"\xe6\x02\n\tTopicDesc\x12\x12\n\ncreated_at\x18\x01 \x01(\x03\x12\x12\n\nupdated_at\x18\x02 \x01(\x03\x12\x12\n\ntouched_at\x18\x03 \x01(\x03\x12#\n\x06\x64\x65\x66\x61\x63s\x18\x04 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x1c\n\x03\x61\x63s\x18\x05 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0e\n\x06seq_id\x18\x06 \x01(\x05\x12\x0f\n\x07read_id\x18\x07 \x01(\x05\x12\x0f\n\x07recv_id\x18\x08 \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\t \x01(\x05\x12\x0e\n\x06public\x18\n \x01(\x0c\x12\x0f\n\x07private\x18\x0b \x01(\x0c\x12\r\n\x05state\x18\x0c \x01(\t\x12\x10\n\x08state_at\x18\r \x01(\x03\x12\x0f\n\x07trusted\x18\x0e \x01(\x0c\x12\x0f\n\x07is_chan\x18\x11 \x01(\x08\x12\x16\n\x0elast_seen_time\x18\x0f \x01(\x03\x12\x1c\n\x14last_seen_user_agent\x18\x10 \x01(\t\"\xbe\x02\n\x08TopicSub\x12\x12\n\nupdated_at\x18\x01 \x01(\x03\x12\x12\n\ndeleted_at\x18\x02 \x01(\x03\x12\x0e\n\x06online\x18\x03 \x01(\x08\x12\x1c\n\x03\x61\x63s\x18\x04 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0f\n\x07read_id\x18\x05 \x01(\x05\x12\x0f\n\x07recv_id\x18\x06 \x01(\x05\x12\x0e\n\x06public\x18\x07 \x01(\x0c\x12\x0f\n\x07trusted\x18\x10 \x01(\x0c\x12\x0f\n\x07private\x18\x08 \x01(\x0c\x12\x0f\n\x07user_id\x18\t \x01(\t\x12\r\n\x05topic\x18\n \x01(\t\x12\x12\n\ntouched_at\x18\x0b \x01(\x03\x12\x0e\n\x06seq_id\x18\x0c \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\r \x01(\x05\x12\x16\n\x0elast_seen_time\x18\x0e \x01(\x03\x12\x1c\n\x14last_seen_user_agent\x18\x0f \x01(\t\";\n\tDelValues\x12\x0e\n\x06\x64\x65l_id\x18\x01 \x01(\x05\x12\x1e\n\x07\x64\x65l_seq\x18\x02 \x03(\x0b\x32\r.pbx.SeqRange\"\x9f\x01\n\nServerCtrl\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0c\n\x04\x63ode\x18\x03 \x01(\x05\x12\x0c\n\x04text\x18\x04 \x01(\t\x12+\n\x06params\x18\x05 \x03(\x0b\x32\x1b.pbx.ServerCtrl.ParamsEntry\x1a-\n\x0bParamsEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xcf\x01\n\nServerData\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x14\n\x0c\x66rom_user_id\x18\x02 \x01(\t\x12\x11\n\ttimestamp\x18\x07 \x01(\x03\x12\x12\n\ndeleted_at\x18\x03 \x01(\x03\x12\x0e\n\x06seq_id\x18\x04 \x01(\x05\x12\'\n\x04head\x18\x05 \x03(\x0b\x32\x19.pbx.ServerData.HeadEntry\x12\x0f\n\x07\x63ontent\x18\x06 \x01(\x0c\x1a+\n\tHeadEntry\x12\x0b\n\x03key\x18\x01 \x01(\t\x12\r\n\x05value\x18\x02 \x01(\x0c:\x02\x38\x01\"\xe4\x02\n\nServerPres\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x0b\n\x03src\x18\x02 \x01(\t\x12\"\n\x04what\x18\x03 \x01(\x0e\x32\x14.pbx.ServerPres.What\x12\x12\n\nuser_agent\x18\x04 \x01(\t\x12\x0e\n\x06seq_id\x18\x05 \x01(\x05\x12\x0e\n\x06\x64\x65l_id\x18\x06 \x01(\x05\x12\x1e\n\x07\x64\x65l_seq\x18\x07 \x03(\x0b\x32\r.pbx.SeqRange\x12\x16\n\x0etarget_user_id\x18\x08 \x01(\t\x12\x15\n\ractor_user_id\x18\t \x01(\t\x12\x1c\n\x03\x61\x63s\x18\n \x01(\x0b\x32\x0f.pbx.AccessMode\"u\n\x04What\x12\x06\n\x02ON\x10\x00\x12\x07\n\x03OFF\x10\x01\x12\x06\n\x02UA\x10\x03\x12\x07\n\x03UPD\x10\x04\x12\x08\n\x04GONE\x10\x05\x12\x07\n\x03\x41\x43S\x10\x06\x12\x08\n\x04TERM\x10\x07\x12\x07\n\x03MSG\x10\x08\x12\x08\n\x04READ\x10\t\x12\x08\n\x04RECV\x10\n\x12\x07\n\x03\x44\x45L\x10\x0b\x12\x08\n\x04TAGS\x10\x0c\"\xab\x01\n\nServerMeta\x12\n\n\x02id\x18\x01 \x01(\t\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x1c\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x0e.pbx.TopicDesc\x12\x1a\n\x03sub\x18\x04 \x03(\x0b\x32\r.pbx.TopicSub\x12\x1b\n\x03\x64\x65l\x18\x05 \x01(\x0b\x32\x0e.pbx.DelValues\x12\x0c\n\x04tags\x18\x06 \x03(\t\x12\x1d\n\x04\x63red\x18\x07 \x03(\x0b\x32\x0f.pbx.ServerCred\"k\n\nServerInfo\x12\r\n\x05topic\x18\x01 \x01(\t\x12\x14\n\x0c\x66rom_user_id\x18\x02 \x01(\t\x12\x1b\n\x04what\x18\x03 \x01(\x0e\x32\r.pbx.InfoNote\x12\x0e\n\x06seq_id\x18\x04 \x01(\x05\x12\x0b\n\x03src\x18\x05 \x01(\t\"\xca\x01\n\tServerMsg\x12\x1f\n\x04\x63trl\x18\x01 \x01(\x0b\x32\x0f.pbx.ServerCtrlH\x00\x12\x1f\n\x04\x64\x61ta\x18\x02 \x01(\x0b\x32\x0f.pbx.ServerDataH\x00\x12\x1f\n\x04pres\x18\x03 \x01(\x0b\x32\x0f.pbx.ServerPresH\x00\x12\x1f\n\x04meta\x18\x04 \x01(\x0b\x32\x0f.pbx.ServerMetaH\x00\x12\x1f\n\x04info\x18\x05 \x01(\x0b\x32\x0f.pbx.ServerInfoH\x00\x12\r\n\x05topic\x18\x06 \x01(\tB\t\n\x07Message\"j\n\nServerResp\x12\x1d\n\x06status\x18\x01 \x01(\x0e\x32\r.pbx.RespCode\x12\x1e\n\x06srvmsg\x18\x02 \x01(\x0b\x32\x0e.pbx.ServerMsg\x12\x1d\n\x05\x63lmsg\x18\x03 \x01(\x0b\x32\x0e.pbx.ClientMsg\"\xa0\x01\n\x07Session\x12\x12\n\nsession_id\x18\x01 \x01(\t\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12\"\n\nauth_level\x18\x03 \x01(\x0e\x32\x0e.pbx.AuthLevel\x12\x13\n\x0bremote_addr\x18\x04 \x01(\t\x12\x12\n\nuser_agent\x18\x05 \x01(\t\x12\x11\n\tdevice_id\x18\x06 \x01(\t\x12\x10\n\x08language\x18\x07 \x01(\t\"D\n\tClientReq\x12\x1b\n\x03msg\x18\x01 \x01(\x0b\x32\x0e.pbx.ClientMsg\x12\x1a\n\x04sess\x18\x02 \x01(\x0b\x32\x0c.pbx.Session\"-\n\x0bSearchQuery\x12\x0f\n\x07user_id\x18\x01 \x01(\t\x12\r\n\x05query\x18\x02 \x01(\t\"Z\n\x0bSearchFound\x12\x1d\n\x06status\x18\x01 \x01(\x0e\x32\r.pbx.RespCode\x12\r\n\x05query\x18\x02 \x01(\t\x12\x1d\n\x06result\x18\x03 \x03(\x0b\x32\r.pbx.TopicSub\"S\n\nTopicEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x0c\n\x04name\x18\x02 \x01(\t\x12\x1c\n\x04\x64\x65sc\x18\x03 \x01(\x0b\x32\x0e.pbx.TopicDesc\"\x82\x01\n\x0c\x41\x63\x63ountEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x0f\n\x07user_id\x18\x02 \x01(\t\x12(\n\x0b\x64\x65\x66\x61ult_acs\x18\x03 \x01(\x0b\x32\x13.pbx.DefaultAcsMode\x12\x0e\n\x06public\x18\x04 \x01(\x0c\x12\x0c\n\x04tags\x18\x08 \x03(\t\"\xb0\x01\n\x11SubscriptionEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\r\n\x05topic\x18\x02 \x01(\t\x12\x0f\n\x07user_id\x18\x03 \x01(\t\x12\x0e\n\x06\x64\x65l_id\x18\x04 \x01(\x05\x12\x0f\n\x07read_id\x18\x05 \x01(\x05\x12\x0f\n\x07recv_id\x18\x06 \x01(\x05\x12\x1d\n\x04mode\x18\x07 \x01(\x0b\x32\x0f.pbx.AccessMode\x12\x0f\n\x07private\x18\x08 \x01(\x0c\"G\n\x0cMessageEvent\x12\x19\n\x06\x61\x63tion\x18\x01 \x01(\x0e\x32\t.pbx.Crud\x12\x1c\n\x03msg\x18\x02 \x01(\x0b\x32\x0f.pbx.ServerData*3\n\tAuthLevel\x12\x08\n\x04NONE\x10\x00\x12\x08\n\x04\x41NON\x10\n\x12\x08\n\x04\x41UTH\x10\x14\x12\x08\n\x04ROOT\x10\x1e*&\n\x08InfoNote\x12\x08\n\x04READ\x10\x00\x12\x08\n\x04RECV\x10\x01\x12\x06\n\x02KP\x10\x02*<\n\x08RespCode\x12\x0c\n\x08\x43ONTINUE\x10\x00\x12\x08\n\x04\x44ROP\x10\x01\x12\x0b\n\x07RESPOND\x10\x02\x12\x0b\n\x07REPLACE\x10\x03**\n\x04\x43rud\x12\n\n\x06\x43REATE\x10\x00\x12\n\n\x06UPDATE\x10\x01\x12\n\n\x06\x44\x45LETE\x10\x02\x32;\n\x04Node\x12\x33\n\x0bMessageLoop\x12\x0e.pbx.ClientMsg\x1a\x0e.pbx.ServerMsg\"\x00(\x01\x30\x01\x32\x9f\x02\n\x06Plugin\x12-\n\x08\x46ireHose\x12\x0e.pbx.ClientReq\x1a\x0f.pbx.ServerResp\"\x00\x12,\n\x04\x46ind\x12\x10.pbx.SearchQuery\x1a\x10.pbx.SearchFound\"\x00\x12+\n\x07\x41\x63\x63ount\x12\x11.pbx.AccountEvent\x1a\x0b.pbx.Unused\"\x00\x12\'\n\x05Topic\x12\x0f.pbx.TopicEvent\x1a\x0b.pbx.Unused\"\x00\x12\x35\n\x0cSubscription\x12\x16.pbx.SubscriptionEvent\x1a\x0b.pbx.Unused\"\x00\x12+\n\x07Message\x12\x11.pbx.MessageEvent\x1a\x0b.pbx.Unused\"\x00\x42\x1cZ\x1agithub.com/tinode/chat/pbxb\x06proto3')
 
+_AUTHLEVEL = DESCRIPTOR.enum_types_by_name['AuthLevel']
 AuthLevel = enum_type_wrapper.EnumTypeWrapper(_AUTHLEVEL)
-_INFONOTE = _descriptor.EnumDescriptor(
-  name='InfoNote',
-  full_name='pbx.InfoNote',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='READ', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='RECV', index=1, number=1,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='KP', index=2, number=2,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5466,
-  serialized_end=5504,
-)
-_sym_db.RegisterEnumDescriptor(_INFONOTE)
-
+_INFONOTE = DESCRIPTOR.enum_types_by_name['InfoNote']
 InfoNote = enum_type_wrapper.EnumTypeWrapper(_INFONOTE)
-_RESPCODE = _descriptor.EnumDescriptor(
-  name='RespCode',
-  full_name='pbx.RespCode',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CONTINUE', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DROP', index=1, number=1,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='RESPOND', index=2, number=2,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='REPLACE', index=3, number=3,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5506,
-  serialized_end=5566,
-)
-_sym_db.RegisterEnumDescriptor(_RESPCODE)
-
+_RESPCODE = DESCRIPTOR.enum_types_by_name['RespCode']
 RespCode = enum_type_wrapper.EnumTypeWrapper(_RESPCODE)
-_CRUD = _descriptor.EnumDescriptor(
-  name='Crud',
-  full_name='pbx.Crud',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='CREATE', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='UPDATE', index=1, number=1,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DELETE', index=2, number=2,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=5568,
-  serialized_end=5610,
-)
-_sym_db.RegisterEnumDescriptor(_CRUD)
-
+_CRUD = DESCRIPTOR.enum_types_by_name['Crud']
 Crud = enum_type_wrapper.EnumTypeWrapper(_CRUD)
 NONE = 0
 ANON = 10
@@ -155,3265 +41,490 @@ UPDATE = 1
 DELETE = 2
 
 
-_CLIENTDEL_WHAT = _descriptor.EnumDescriptor(
-  name='What',
-  full_name='pbx.ClientDel.What',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='MSG', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='TOPIC', index=1, number=1,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='SUB', index=2, number=2,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='USER', index=3, number=3,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='CRED', index=4, number=4,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=1841,
-  serialized_end=1896,
-)
-_sym_db.RegisterEnumDescriptor(_CLIENTDEL_WHAT)
-
-_SERVERPRES_WHAT = _descriptor.EnumDescriptor(
-  name='What',
-  full_name='pbx.ServerPres.What',
-  filename=None,
-  file=DESCRIPTOR,
-  values=[
-    _descriptor.EnumValueDescriptor(
-      name='ON', index=0, number=0,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='OFF', index=1, number=1,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='UA', index=2, number=3,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='UPD', index=3, number=4,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='GONE', index=4, number=5,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='ACS', index=5, number=6,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='TERM', index=6, number=7,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='MSG', index=7, number=8,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='READ', index=8, number=9,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='RECV', index=9, number=10,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='DEL', index=10, number=11,
-      serialized_options=None,
-      type=None),
-    _descriptor.EnumValueDescriptor(
-      name='TAGS', index=11, number=12,
-      serialized_options=None,
-      type=None),
-  ],
-  containing_type=None,
-  serialized_options=None,
-  serialized_start=3856,
-  serialized_end=3973,
-)
-_sym_db.RegisterEnumDescriptor(_SERVERPRES_WHAT)
-
-
-_UNUSED = _descriptor.Descriptor(
-  name='Unused',
-  full_name='pbx.Unused',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=20,
-  serialized_end=28,
-)
-
-
-_DEFAULTACSMODE = _descriptor.Descriptor(
-  name='DefaultAcsMode',
-  full_name='pbx.DefaultAcsMode',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='auth', full_name='pbx.DefaultAcsMode.auth', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='anon', full_name='pbx.DefaultAcsMode.anon', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=30,
-  serialized_end=74,
-)
-
-
-_ACCESSMODE = _descriptor.Descriptor(
-  name='AccessMode',
-  full_name='pbx.AccessMode',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='want', full_name='pbx.AccessMode.want', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='given', full_name='pbx.AccessMode.given', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=76,
-  serialized_end=117,
-)
-
-
-_SETSUB = _descriptor.Descriptor(
-  name='SetSub',
-  full_name='pbx.SetSub',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.SetSub.user_id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='mode', full_name='pbx.SetSub.mode', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=119,
-  serialized_end=158,
-)
-
-
-_CLIENTCRED_PARAMSENTRY = _descriptor.Descriptor(
-  name='ParamsEntry',
-  full_name='pbx.ClientCred.ParamsEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='pbx.ClientCred.ParamsEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='pbx.ClientCred.ParamsEntry.value', index=1,
-      number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=_b('8\001'),
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=269,
-  serialized_end=314,
-)
-
-_CLIENTCRED = _descriptor.Descriptor(
-  name='ClientCred',
-  full_name='pbx.ClientCred',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='method', full_name='pbx.ClientCred.method', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='pbx.ClientCred.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='response', full_name='pbx.ClientCred.response', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='params', full_name='pbx.ClientCred.params', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[_CLIENTCRED_PARAMSENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=161,
-  serialized_end=314,
-)
-
-
-_SETDESC = _descriptor.Descriptor(
-  name='SetDesc',
-  full_name='pbx.SetDesc',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='default_acs', full_name='pbx.SetDesc.default_acs', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='public', full_name='pbx.SetDesc.public', index=1,
-      number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='private', full_name='pbx.SetDesc.private', index=2,
-      number=3, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='trusted', full_name='pbx.SetDesc.trusted', index=3,
-      number=4, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=316,
-  serialized_end=417,
-)
-
-
-_GETOPTS = _descriptor.Descriptor(
-  name='GetOpts',
-  full_name='pbx.GetOpts',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='if_modified_since', full_name='pbx.GetOpts.if_modified_since', index=0,
-      number=1, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user', full_name='pbx.GetOpts.user', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.GetOpts.topic', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='since_id', full_name='pbx.GetOpts.since_id', index=3,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='before_id', full_name='pbx.GetOpts.before_id', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='limit', full_name='pbx.GetOpts.limit', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=419,
-  serialized_end=536,
-)
-
-
-_GETQUERY = _descriptor.Descriptor(
-  name='GetQuery',
-  full_name='pbx.GetQuery',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='what', full_name='pbx.GetQuery.what', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='desc', full_name='pbx.GetQuery.desc', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sub', full_name='pbx.GetQuery.sub', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='data', full_name='pbx.GetQuery.data', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=538,
-  serialized_end=645,
-)
-
-
-_SETQUERY = _descriptor.Descriptor(
-  name='SetQuery',
-  full_name='pbx.SetQuery',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='desc', full_name='pbx.SetQuery.desc', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sub', full_name='pbx.SetQuery.sub', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='tags', full_name='pbx.SetQuery.tags', index=2,
-      number=3, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='cred', full_name='pbx.SetQuery.cred', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=647,
-  serialized_end=756,
-)
-
-
-_SEQRANGE = _descriptor.Descriptor(
-  name='SeqRange',
-  full_name='pbx.SeqRange',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='low', full_name='pbx.SeqRange.low', index=0,
-      number=1, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='hi', full_name='pbx.SeqRange.hi', index=1,
-      number=2, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=758,
-  serialized_end=793,
-)
-
-
-_CLIENTHI = _descriptor.Descriptor(
-  name='ClientHi',
-  full_name='pbx.ClientHi',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientHi.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_agent', full_name='pbx.ClientHi.user_agent', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='ver', full_name='pbx.ClientHi.ver', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='pbx.ClientHi.device_id', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='lang', full_name='pbx.ClientHi.lang', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='platform', full_name='pbx.ClientHi.platform', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='background', full_name='pbx.ClientHi.background', index=6,
-      number=7, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=795,
-  serialized_end=921,
-)
-
-
-_CLIENTACC = _descriptor.Descriptor(
-  name='ClientAcc',
-  full_name='pbx.ClientAcc',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientAcc.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.ClientAcc.user_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='scheme', full_name='pbx.ClientAcc.scheme', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='secret', full_name='pbx.ClientAcc.secret', index=3,
-      number=4, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='login', full_name='pbx.ClientAcc.login', index=4,
-      number=5, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='tags', full_name='pbx.ClientAcc.tags', index=5,
-      number=6, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='desc', full_name='pbx.ClientAcc.desc', index=6,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='cred', full_name='pbx.ClientAcc.cred', index=7,
-      number=8, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='token', full_name='pbx.ClientAcc.token', index=8,
-      number=9, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='state', full_name='pbx.ClientAcc.state', index=9,
-      number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=924,
-  serialized_end=1114,
-)
-
-
-_CLIENTLOGIN = _descriptor.Descriptor(
-  name='ClientLogin',
-  full_name='pbx.ClientLogin',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientLogin.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='scheme', full_name='pbx.ClientLogin.scheme', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='secret', full_name='pbx.ClientLogin.secret', index=2,
-      number=3, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='cred', full_name='pbx.ClientLogin.cred', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1116,
-  serialized_end=1204,
-)
-
-
-_CLIENTSUB = _descriptor.Descriptor(
-  name='ClientSub',
-  full_name='pbx.ClientSub',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientSub.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ClientSub.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='set_query', full_name='pbx.ClientSub.set_query', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='get_query', full_name='pbx.ClientSub.get_query', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1206,
-  serialized_end=1312,
-)
-
-
-_CLIENTLEAVE = _descriptor.Descriptor(
-  name='ClientLeave',
-  full_name='pbx.ClientLeave',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientLeave.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ClientLeave.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='unsub', full_name='pbx.ClientLeave.unsub', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1314,
-  serialized_end=1369,
-)
-
-
-_CLIENTPUB_HEADENTRY = _descriptor.Descriptor(
-  name='HeadEntry',
-  full_name='pbx.ClientPub.HeadEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='pbx.ClientPub.HeadEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='pbx.ClientPub.HeadEntry.value', index=1,
-      number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=_b('8\001'),
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1486,
-  serialized_end=1529,
-)
-
-_CLIENTPUB = _descriptor.Descriptor(
-  name='ClientPub',
-  full_name='pbx.ClientPub',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientPub.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ClientPub.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='no_echo', full_name='pbx.ClientPub.no_echo', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='head', full_name='pbx.ClientPub.head', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='content', full_name='pbx.ClientPub.content', index=4,
-      number=5, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[_CLIENTPUB_HEADENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1372,
-  serialized_end=1529,
-)
-
-
-_CLIENTGET = _descriptor.Descriptor(
-  name='ClientGet',
-  full_name='pbx.ClientGet',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientGet.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ClientGet.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='query', full_name='pbx.ClientGet.query', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1531,
-  serialized_end=1599,
-)
-
-
-_CLIENTSET = _descriptor.Descriptor(
-  name='ClientSet',
-  full_name='pbx.ClientSet',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientSet.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ClientSet.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='query', full_name='pbx.ClientSet.query', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1601,
-  serialized_end=1669,
-)
-
-
-_CLIENTDEL = _descriptor.Descriptor(
-  name='ClientDel',
-  full_name='pbx.ClientDel',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ClientDel.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ClientDel.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='what', full_name='pbx.ClientDel.what', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del_seq', full_name='pbx.ClientDel.del_seq', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.ClientDel.user_id', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='cred', full_name='pbx.ClientDel.cred', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='hard', full_name='pbx.ClientDel.hard', index=6,
-      number=7, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _CLIENTDEL_WHAT,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1672,
-  serialized_end=1896,
-)
-
-
-_CLIENTNOTE = _descriptor.Descriptor(
-  name='ClientNote',
-  full_name='pbx.ClientNote',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ClientNote.topic', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='what', full_name='pbx.ClientNote.what', index=1,
-      number=2, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='seq_id', full_name='pbx.ClientNote.seq_id', index=2,
-      number=3, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1898,
-  serialized_end=1970,
-)
-
-
-_CLIENTEXTRA = _descriptor.Descriptor(
-  name='ClientExtra',
-  full_name='pbx.ClientExtra',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='attachments', full_name='pbx.ClientExtra.attachments', index=0,
-      number=1, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='on_behalf_of', full_name='pbx.ClientExtra.on_behalf_of', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='auth_level', full_name='pbx.ClientExtra.auth_level', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1972,
-  serialized_end=2064,
-)
-
-
-_CLIENTMSG = _descriptor.Descriptor(
-  name='ClientMsg',
-  full_name='pbx.ClientMsg',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='hi', full_name='pbx.ClientMsg.hi', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='acc', full_name='pbx.ClientMsg.acc', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='login', full_name='pbx.ClientMsg.login', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sub', full_name='pbx.ClientMsg.sub', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='leave', full_name='pbx.ClientMsg.leave', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='pub', full_name='pbx.ClientMsg.pub', index=5,
-      number=6, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='get', full_name='pbx.ClientMsg.get', index=6,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='set', full_name='pbx.ClientMsg.set', index=7,
-      number=8, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del', full_name='pbx.ClientMsg.del', index=8,
-      number=9, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='note', full_name='pbx.ClientMsg.note', index=9,
-      number=10, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='extra', full_name='pbx.ClientMsg.extra', index=10,
-      number=13, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-    _descriptor.OneofDescriptor(
-      name='Message', full_name='pbx.ClientMsg.Message',
-      index=0, containing_type=None, fields=[]),
-  ],
-  serialized_start=2067,
-  serialized_end=2440,
-)
-
-
-_SERVERCRED = _descriptor.Descriptor(
-  name='ServerCred',
-  full_name='pbx.ServerCred',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='method', full_name='pbx.ServerCred.method', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='pbx.ServerCred.value', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='done', full_name='pbx.ServerCred.done', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2442,
-  serialized_end=2499,
-)
-
-
-_TOPICDESC = _descriptor.Descriptor(
-  name='TopicDesc',
-  full_name='pbx.TopicDesc',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='created_at', full_name='pbx.TopicDesc.created_at', index=0,
-      number=1, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='updated_at', full_name='pbx.TopicDesc.updated_at', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='touched_at', full_name='pbx.TopicDesc.touched_at', index=2,
-      number=3, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='defacs', full_name='pbx.TopicDesc.defacs', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='acs', full_name='pbx.TopicDesc.acs', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='seq_id', full_name='pbx.TopicDesc.seq_id', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='read_id', full_name='pbx.TopicDesc.read_id', index=6,
-      number=7, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='recv_id', full_name='pbx.TopicDesc.recv_id', index=7,
-      number=8, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del_id', full_name='pbx.TopicDesc.del_id', index=8,
-      number=9, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='public', full_name='pbx.TopicDesc.public', index=9,
-      number=10, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='private', full_name='pbx.TopicDesc.private', index=10,
-      number=11, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='state', full_name='pbx.TopicDesc.state', index=11,
-      number=12, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='state_at', full_name='pbx.TopicDesc.state_at', index=12,
-      number=13, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='trusted', full_name='pbx.TopicDesc.trusted', index=13,
-      number=14, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='is_chan', full_name='pbx.TopicDesc.is_chan', index=14,
-      number=17, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='last_seen_time', full_name='pbx.TopicDesc.last_seen_time', index=15,
-      number=15, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='last_seen_user_agent', full_name='pbx.TopicDesc.last_seen_user_agent', index=16,
-      number=16, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2502,
-  serialized_end=2860,
-)
-
-
-_TOPICSUB = _descriptor.Descriptor(
-  name='TopicSub',
-  full_name='pbx.TopicSub',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='updated_at', full_name='pbx.TopicSub.updated_at', index=0,
-      number=1, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='deleted_at', full_name='pbx.TopicSub.deleted_at', index=1,
-      number=2, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='online', full_name='pbx.TopicSub.online', index=2,
-      number=3, type=8, cpp_type=7, label=1,
-      has_default_value=False, default_value=False,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='acs', full_name='pbx.TopicSub.acs', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='read_id', full_name='pbx.TopicSub.read_id', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='recv_id', full_name='pbx.TopicSub.recv_id', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='public', full_name='pbx.TopicSub.public', index=6,
-      number=7, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='trusted', full_name='pbx.TopicSub.trusted', index=7,
-      number=16, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='private', full_name='pbx.TopicSub.private', index=8,
-      number=8, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.TopicSub.user_id', index=9,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.TopicSub.topic', index=10,
-      number=10, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='touched_at', full_name='pbx.TopicSub.touched_at', index=11,
-      number=11, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='seq_id', full_name='pbx.TopicSub.seq_id', index=12,
-      number=12, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del_id', full_name='pbx.TopicSub.del_id', index=13,
-      number=13, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='last_seen_time', full_name='pbx.TopicSub.last_seen_time', index=14,
-      number=14, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='last_seen_user_agent', full_name='pbx.TopicSub.last_seen_user_agent', index=15,
-      number=15, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=2863,
-  serialized_end=3181,
-)
-
-
-_DELVALUES = _descriptor.Descriptor(
-  name='DelValues',
-  full_name='pbx.DelValues',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='del_id', full_name='pbx.DelValues.del_id', index=0,
-      number=1, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del_seq', full_name='pbx.DelValues.del_seq', index=1,
-      number=2, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3183,
-  serialized_end=3242,
-)
-
-
-_SERVERCTRL_PARAMSENTRY = _descriptor.Descriptor(
-  name='ParamsEntry',
-  full_name='pbx.ServerCtrl.ParamsEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='pbx.ServerCtrl.ParamsEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='pbx.ServerCtrl.ParamsEntry.value', index=1,
-      number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=_b('8\001'),
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=269,
-  serialized_end=314,
-)
-
-_SERVERCTRL = _descriptor.Descriptor(
-  name='ServerCtrl',
-  full_name='pbx.ServerCtrl',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ServerCtrl.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ServerCtrl.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='code', full_name='pbx.ServerCtrl.code', index=2,
-      number=3, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='text', full_name='pbx.ServerCtrl.text', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='params', full_name='pbx.ServerCtrl.params', index=4,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[_SERVERCTRL_PARAMSENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3245,
-  serialized_end=3404,
-)
-
-
-_SERVERDATA_HEADENTRY = _descriptor.Descriptor(
-  name='HeadEntry',
-  full_name='pbx.ServerData.HeadEntry',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='key', full_name='pbx.ServerData.HeadEntry.key', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='value', full_name='pbx.ServerData.HeadEntry.value', index=1,
-      number=2, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=_b('8\001'),
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=1486,
-  serialized_end=1529,
-)
-
-_SERVERDATA = _descriptor.Descriptor(
-  name='ServerData',
-  full_name='pbx.ServerData',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ServerData.topic', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='from_user_id', full_name='pbx.ServerData.from_user_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='timestamp', full_name='pbx.ServerData.timestamp', index=2,
-      number=7, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='deleted_at', full_name='pbx.ServerData.deleted_at', index=3,
-      number=3, type=3, cpp_type=2, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='seq_id', full_name='pbx.ServerData.seq_id', index=4,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='head', full_name='pbx.ServerData.head', index=5,
-      number=5, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='content', full_name='pbx.ServerData.content', index=6,
-      number=6, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[_SERVERDATA_HEADENTRY, ],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3407,
-  serialized_end=3614,
-)
-
-
-_SERVERPRES = _descriptor.Descriptor(
-  name='ServerPres',
-  full_name='pbx.ServerPres',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ServerPres.topic', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='src', full_name='pbx.ServerPres.src', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='what', full_name='pbx.ServerPres.what', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_agent', full_name='pbx.ServerPres.user_agent', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='seq_id', full_name='pbx.ServerPres.seq_id', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del_id', full_name='pbx.ServerPres.del_id', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del_seq', full_name='pbx.ServerPres.del_seq', index=6,
-      number=7, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='target_user_id', full_name='pbx.ServerPres.target_user_id', index=7,
-      number=8, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='actor_user_id', full_name='pbx.ServerPres.actor_user_id', index=8,
-      number=9, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='acs', full_name='pbx.ServerPres.acs', index=9,
-      number=10, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-    _SERVERPRES_WHAT,
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3617,
-  serialized_end=3973,
-)
-
-
-_SERVERMETA = _descriptor.Descriptor(
-  name='ServerMeta',
-  full_name='pbx.ServerMeta',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='id', full_name='pbx.ServerMeta.id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ServerMeta.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='desc', full_name='pbx.ServerMeta.desc', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sub', full_name='pbx.ServerMeta.sub', index=3,
-      number=4, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del', full_name='pbx.ServerMeta.del', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='tags', full_name='pbx.ServerMeta.tags', index=5,
-      number=6, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='cred', full_name='pbx.ServerMeta.cred', index=6,
-      number=7, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=3976,
-  serialized_end=4147,
-)
-
-
-_SERVERINFO = _descriptor.Descriptor(
-  name='ServerInfo',
-  full_name='pbx.ServerInfo',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ServerInfo.topic', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='from_user_id', full_name='pbx.ServerInfo.from_user_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='what', full_name='pbx.ServerInfo.what', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='seq_id', full_name='pbx.ServerInfo.seq_id', index=3,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='src', full_name='pbx.ServerInfo.src', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4149,
-  serialized_end=4256,
-)
-
-
-_SERVERMSG = _descriptor.Descriptor(
-  name='ServerMsg',
-  full_name='pbx.ServerMsg',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='ctrl', full_name='pbx.ServerMsg.ctrl', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='data', full_name='pbx.ServerMsg.data', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='pres', full_name='pbx.ServerMsg.pres', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='meta', full_name='pbx.ServerMsg.meta', index=3,
-      number=4, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='info', full_name='pbx.ServerMsg.info', index=4,
-      number=5, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.ServerMsg.topic', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-    _descriptor.OneofDescriptor(
-      name='Message', full_name='pbx.ServerMsg.Message',
-      index=0, containing_type=None, fields=[]),
-  ],
-  serialized_start=4259,
-  serialized_end=4461,
-)
-
-
-_SERVERRESP = _descriptor.Descriptor(
-  name='ServerResp',
-  full_name='pbx.ServerResp',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='status', full_name='pbx.ServerResp.status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='srvmsg', full_name='pbx.ServerResp.srvmsg', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='clmsg', full_name='pbx.ServerResp.clmsg', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4463,
-  serialized_end=4569,
-)
-
-
-_SESSION = _descriptor.Descriptor(
-  name='Session',
-  full_name='pbx.Session',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='session_id', full_name='pbx.Session.session_id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.Session.user_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='auth_level', full_name='pbx.Session.auth_level', index=2,
-      number=3, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='remote_addr', full_name='pbx.Session.remote_addr', index=3,
-      number=4, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_agent', full_name='pbx.Session.user_agent', index=4,
-      number=5, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='device_id', full_name='pbx.Session.device_id', index=5,
-      number=6, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='language', full_name='pbx.Session.language', index=6,
-      number=7, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4572,
-  serialized_end=4732,
-)
-
-
-_CLIENTREQ = _descriptor.Descriptor(
-  name='ClientReq',
-  full_name='pbx.ClientReq',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='msg', full_name='pbx.ClientReq.msg', index=0,
-      number=1, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='sess', full_name='pbx.ClientReq.sess', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4734,
-  serialized_end=4802,
-)
-
-
-_SEARCHQUERY = _descriptor.Descriptor(
-  name='SearchQuery',
-  full_name='pbx.SearchQuery',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.SearchQuery.user_id', index=0,
-      number=1, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='query', full_name='pbx.SearchQuery.query', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4804,
-  serialized_end=4849,
-)
-
-
-_SEARCHFOUND = _descriptor.Descriptor(
-  name='SearchFound',
-  full_name='pbx.SearchFound',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='status', full_name='pbx.SearchFound.status', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='query', full_name='pbx.SearchFound.query', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='result', full_name='pbx.SearchFound.result', index=2,
-      number=3, type=11, cpp_type=10, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4851,
-  serialized_end=4941,
-)
-
-
-_TOPICEVENT = _descriptor.Descriptor(
-  name='TopicEvent',
-  full_name='pbx.TopicEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='pbx.TopicEvent.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='name', full_name='pbx.TopicEvent.name', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='desc', full_name='pbx.TopicEvent.desc', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=4943,
-  serialized_end=5026,
-)
-
-
-_ACCOUNTEVENT = _descriptor.Descriptor(
-  name='AccountEvent',
-  full_name='pbx.AccountEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='pbx.AccountEvent.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.AccountEvent.user_id', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='default_acs', full_name='pbx.AccountEvent.default_acs', index=2,
-      number=3, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='public', full_name='pbx.AccountEvent.public', index=3,
-      number=4, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='tags', full_name='pbx.AccountEvent.tags', index=4,
-      number=8, type=9, cpp_type=9, label=3,
-      has_default_value=False, default_value=[],
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=5029,
-  serialized_end=5159,
-)
-
-
-_SUBSCRIPTIONEVENT = _descriptor.Descriptor(
-  name='SubscriptionEvent',
-  full_name='pbx.SubscriptionEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='pbx.SubscriptionEvent.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='topic', full_name='pbx.SubscriptionEvent.topic', index=1,
-      number=2, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='user_id', full_name='pbx.SubscriptionEvent.user_id', index=2,
-      number=3, type=9, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b("").decode('utf-8'),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='del_id', full_name='pbx.SubscriptionEvent.del_id', index=3,
-      number=4, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='read_id', full_name='pbx.SubscriptionEvent.read_id', index=4,
-      number=5, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='recv_id', full_name='pbx.SubscriptionEvent.recv_id', index=5,
-      number=6, type=5, cpp_type=1, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='mode', full_name='pbx.SubscriptionEvent.mode', index=6,
-      number=7, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='private', full_name='pbx.SubscriptionEvent.private', index=7,
-      number=8, type=12, cpp_type=9, label=1,
-      has_default_value=False, default_value=_b(""),
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=5162,
-  serialized_end=5338,
-)
-
-
-_MESSAGEEVENT = _descriptor.Descriptor(
-  name='MessageEvent',
-  full_name='pbx.MessageEvent',
-  filename=None,
-  file=DESCRIPTOR,
-  containing_type=None,
-  fields=[
-    _descriptor.FieldDescriptor(
-      name='action', full_name='pbx.MessageEvent.action', index=0,
-      number=1, type=14, cpp_type=8, label=1,
-      has_default_value=False, default_value=0,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-    _descriptor.FieldDescriptor(
-      name='msg', full_name='pbx.MessageEvent.msg', index=1,
-      number=2, type=11, cpp_type=10, label=1,
-      has_default_value=False, default_value=None,
-      message_type=None, enum_type=None, containing_type=None,
-      is_extension=False, extension_scope=None,
-      serialized_options=None, file=DESCRIPTOR),
-  ],
-  extensions=[
-  ],
-  nested_types=[],
-  enum_types=[
-  ],
-  serialized_options=None,
-  is_extendable=False,
-  syntax='proto3',
-  extension_ranges=[],
-  oneofs=[
-  ],
-  serialized_start=5340,
-  serialized_end=5411,
-)
-
-_CLIENTCRED_PARAMSENTRY.containing_type = _CLIENTCRED
-_CLIENTCRED.fields_by_name['params'].message_type = _CLIENTCRED_PARAMSENTRY
-_SETDESC.fields_by_name['default_acs'].message_type = _DEFAULTACSMODE
-_GETQUERY.fields_by_name['desc'].message_type = _GETOPTS
-_GETQUERY.fields_by_name['sub'].message_type = _GETOPTS
-_GETQUERY.fields_by_name['data'].message_type = _GETOPTS
-_SETQUERY.fields_by_name['desc'].message_type = _SETDESC
-_SETQUERY.fields_by_name['sub'].message_type = _SETSUB
-_SETQUERY.fields_by_name['cred'].message_type = _CLIENTCRED
-_CLIENTACC.fields_by_name['desc'].message_type = _SETDESC
-_CLIENTACC.fields_by_name['cred'].message_type = _CLIENTCRED
-_CLIENTLOGIN.fields_by_name['cred'].message_type = _CLIENTCRED
-_CLIENTSUB.fields_by_name['set_query'].message_type = _SETQUERY
-_CLIENTSUB.fields_by_name['get_query'].message_type = _GETQUERY
-_CLIENTPUB_HEADENTRY.containing_type = _CLIENTPUB
-_CLIENTPUB.fields_by_name['head'].message_type = _CLIENTPUB_HEADENTRY
-_CLIENTGET.fields_by_name['query'].message_type = _GETQUERY
-_CLIENTSET.fields_by_name['query'].message_type = _SETQUERY
-_CLIENTDEL.fields_by_name['what'].enum_type = _CLIENTDEL_WHAT
-_CLIENTDEL.fields_by_name['del_seq'].message_type = _SEQRANGE
-_CLIENTDEL.fields_by_name['cred'].message_type = _CLIENTCRED
-_CLIENTDEL_WHAT.containing_type = _CLIENTDEL
-_CLIENTNOTE.fields_by_name['what'].enum_type = _INFONOTE
-_CLIENTEXTRA.fields_by_name['auth_level'].enum_type = _AUTHLEVEL
-_CLIENTMSG.fields_by_name['hi'].message_type = _CLIENTHI
-_CLIENTMSG.fields_by_name['acc'].message_type = _CLIENTACC
-_CLIENTMSG.fields_by_name['login'].message_type = _CLIENTLOGIN
-_CLIENTMSG.fields_by_name['sub'].message_type = _CLIENTSUB
-_CLIENTMSG.fields_by_name['leave'].message_type = _CLIENTLEAVE
-_CLIENTMSG.fields_by_name['pub'].message_type = _CLIENTPUB
-_CLIENTMSG.fields_by_name['get'].message_type = _CLIENTGET
-_CLIENTMSG.fields_by_name['set'].message_type = _CLIENTSET
-_CLIENTMSG.fields_by_name['del'].message_type = _CLIENTDEL
-_CLIENTMSG.fields_by_name['note'].message_type = _CLIENTNOTE
-_CLIENTMSG.fields_by_name['extra'].message_type = _CLIENTEXTRA
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['hi'])
-_CLIENTMSG.fields_by_name['hi'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['acc'])
-_CLIENTMSG.fields_by_name['acc'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['login'])
-_CLIENTMSG.fields_by_name['login'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['sub'])
-_CLIENTMSG.fields_by_name['sub'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['leave'])
-_CLIENTMSG.fields_by_name['leave'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['pub'])
-_CLIENTMSG.fields_by_name['pub'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['get'])
-_CLIENTMSG.fields_by_name['get'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['set'])
-_CLIENTMSG.fields_by_name['set'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['del'])
-_CLIENTMSG.fields_by_name['del'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_CLIENTMSG.oneofs_by_name['Message'].fields.append(
-  _CLIENTMSG.fields_by_name['note'])
-_CLIENTMSG.fields_by_name['note'].containing_oneof = _CLIENTMSG.oneofs_by_name['Message']
-_TOPICDESC.fields_by_name['defacs'].message_type = _DEFAULTACSMODE
-_TOPICDESC.fields_by_name['acs'].message_type = _ACCESSMODE
-_TOPICSUB.fields_by_name['acs'].message_type = _ACCESSMODE
-_DELVALUES.fields_by_name['del_seq'].message_type = _SEQRANGE
-_SERVERCTRL_PARAMSENTRY.containing_type = _SERVERCTRL
-_SERVERCTRL.fields_by_name['params'].message_type = _SERVERCTRL_PARAMSENTRY
-_SERVERDATA_HEADENTRY.containing_type = _SERVERDATA
-_SERVERDATA.fields_by_name['head'].message_type = _SERVERDATA_HEADENTRY
-_SERVERPRES.fields_by_name['what'].enum_type = _SERVERPRES_WHAT
-_SERVERPRES.fields_by_name['del_seq'].message_type = _SEQRANGE
-_SERVERPRES.fields_by_name['acs'].message_type = _ACCESSMODE
-_SERVERPRES_WHAT.containing_type = _SERVERPRES
-_SERVERMETA.fields_by_name['desc'].message_type = _TOPICDESC
-_SERVERMETA.fields_by_name['sub'].message_type = _TOPICSUB
-_SERVERMETA.fields_by_name['del'].message_type = _DELVALUES
-_SERVERMETA.fields_by_name['cred'].message_type = _SERVERCRED
-_SERVERINFO.fields_by_name['what'].enum_type = _INFONOTE
-_SERVERMSG.fields_by_name['ctrl'].message_type = _SERVERCTRL
-_SERVERMSG.fields_by_name['data'].message_type = _SERVERDATA
-_SERVERMSG.fields_by_name['pres'].message_type = _SERVERPRES
-_SERVERMSG.fields_by_name['meta'].message_type = _SERVERMETA
-_SERVERMSG.fields_by_name['info'].message_type = _SERVERINFO
-_SERVERMSG.oneofs_by_name['Message'].fields.append(
-  _SERVERMSG.fields_by_name['ctrl'])
-_SERVERMSG.fields_by_name['ctrl'].containing_oneof = _SERVERMSG.oneofs_by_name['Message']
-_SERVERMSG.oneofs_by_name['Message'].fields.append(
-  _SERVERMSG.fields_by_name['data'])
-_SERVERMSG.fields_by_name['data'].containing_oneof = _SERVERMSG.oneofs_by_name['Message']
-_SERVERMSG.oneofs_by_name['Message'].fields.append(
-  _SERVERMSG.fields_by_name['pres'])
-_SERVERMSG.fields_by_name['pres'].containing_oneof = _SERVERMSG.oneofs_by_name['Message']
-_SERVERMSG.oneofs_by_name['Message'].fields.append(
-  _SERVERMSG.fields_by_name['meta'])
-_SERVERMSG.fields_by_name['meta'].containing_oneof = _SERVERMSG.oneofs_by_name['Message']
-_SERVERMSG.oneofs_by_name['Message'].fields.append(
-  _SERVERMSG.fields_by_name['info'])
-_SERVERMSG.fields_by_name['info'].containing_oneof = _SERVERMSG.oneofs_by_name['Message']
-_SERVERRESP.fields_by_name['status'].enum_type = _RESPCODE
-_SERVERRESP.fields_by_name['srvmsg'].message_type = _SERVERMSG
-_SERVERRESP.fields_by_name['clmsg'].message_type = _CLIENTMSG
-_SESSION.fields_by_name['auth_level'].enum_type = _AUTHLEVEL
-_CLIENTREQ.fields_by_name['msg'].message_type = _CLIENTMSG
-_CLIENTREQ.fields_by_name['sess'].message_type = _SESSION
-_SEARCHFOUND.fields_by_name['status'].enum_type = _RESPCODE
-_SEARCHFOUND.fields_by_name['result'].message_type = _TOPICSUB
-_TOPICEVENT.fields_by_name['action'].enum_type = _CRUD
-_TOPICEVENT.fields_by_name['desc'].message_type = _TOPICDESC
-_ACCOUNTEVENT.fields_by_name['action'].enum_type = _CRUD
-_ACCOUNTEVENT.fields_by_name['default_acs'].message_type = _DEFAULTACSMODE
-_SUBSCRIPTIONEVENT.fields_by_name['action'].enum_type = _CRUD
-_SUBSCRIPTIONEVENT.fields_by_name['mode'].message_type = _ACCESSMODE
-_MESSAGEEVENT.fields_by_name['action'].enum_type = _CRUD
-_MESSAGEEVENT.fields_by_name['msg'].message_type = _SERVERDATA
-DESCRIPTOR.message_types_by_name['Unused'] = _UNUSED
-DESCRIPTOR.message_types_by_name['DefaultAcsMode'] = _DEFAULTACSMODE
-DESCRIPTOR.message_types_by_name['AccessMode'] = _ACCESSMODE
-DESCRIPTOR.message_types_by_name['SetSub'] = _SETSUB
-DESCRIPTOR.message_types_by_name['ClientCred'] = _CLIENTCRED
-DESCRIPTOR.message_types_by_name['SetDesc'] = _SETDESC
-DESCRIPTOR.message_types_by_name['GetOpts'] = _GETOPTS
-DESCRIPTOR.message_types_by_name['GetQuery'] = _GETQUERY
-DESCRIPTOR.message_types_by_name['SetQuery'] = _SETQUERY
-DESCRIPTOR.message_types_by_name['SeqRange'] = _SEQRANGE
-DESCRIPTOR.message_types_by_name['ClientHi'] = _CLIENTHI
-DESCRIPTOR.message_types_by_name['ClientAcc'] = _CLIENTACC
-DESCRIPTOR.message_types_by_name['ClientLogin'] = _CLIENTLOGIN
-DESCRIPTOR.message_types_by_name['ClientSub'] = _CLIENTSUB
-DESCRIPTOR.message_types_by_name['ClientLeave'] = _CLIENTLEAVE
-DESCRIPTOR.message_types_by_name['ClientPub'] = _CLIENTPUB
-DESCRIPTOR.message_types_by_name['ClientGet'] = _CLIENTGET
-DESCRIPTOR.message_types_by_name['ClientSet'] = _CLIENTSET
-DESCRIPTOR.message_types_by_name['ClientDel'] = _CLIENTDEL
-DESCRIPTOR.message_types_by_name['ClientNote'] = _CLIENTNOTE
-DESCRIPTOR.message_types_by_name['ClientExtra'] = _CLIENTEXTRA
-DESCRIPTOR.message_types_by_name['ClientMsg'] = _CLIENTMSG
-DESCRIPTOR.message_types_by_name['ServerCred'] = _SERVERCRED
-DESCRIPTOR.message_types_by_name['TopicDesc'] = _TOPICDESC
-DESCRIPTOR.message_types_by_name['TopicSub'] = _TOPICSUB
-DESCRIPTOR.message_types_by_name['DelValues'] = _DELVALUES
-DESCRIPTOR.message_types_by_name['ServerCtrl'] = _SERVERCTRL
-DESCRIPTOR.message_types_by_name['ServerData'] = _SERVERDATA
-DESCRIPTOR.message_types_by_name['ServerPres'] = _SERVERPRES
-DESCRIPTOR.message_types_by_name['ServerMeta'] = _SERVERMETA
-DESCRIPTOR.message_types_by_name['ServerInfo'] = _SERVERINFO
-DESCRIPTOR.message_types_by_name['ServerMsg'] = _SERVERMSG
-DESCRIPTOR.message_types_by_name['ServerResp'] = _SERVERRESP
-DESCRIPTOR.message_types_by_name['Session'] = _SESSION
-DESCRIPTOR.message_types_by_name['ClientReq'] = _CLIENTREQ
-DESCRIPTOR.message_types_by_name['SearchQuery'] = _SEARCHQUERY
-DESCRIPTOR.message_types_by_name['SearchFound'] = _SEARCHFOUND
-DESCRIPTOR.message_types_by_name['TopicEvent'] = _TOPICEVENT
-DESCRIPTOR.message_types_by_name['AccountEvent'] = _ACCOUNTEVENT
-DESCRIPTOR.message_types_by_name['SubscriptionEvent'] = _SUBSCRIPTIONEVENT
-DESCRIPTOR.message_types_by_name['MessageEvent'] = _MESSAGEEVENT
-DESCRIPTOR.enum_types_by_name['AuthLevel'] = _AUTHLEVEL
-DESCRIPTOR.enum_types_by_name['InfoNote'] = _INFONOTE
-DESCRIPTOR.enum_types_by_name['RespCode'] = _RESPCODE
-DESCRIPTOR.enum_types_by_name['Crud'] = _CRUD
-_sym_db.RegisterFileDescriptor(DESCRIPTOR)
-
-Unused = _reflection.GeneratedProtocolMessageType('Unused', (_message.Message,), dict(
-  DESCRIPTOR = _UNUSED,
-  __module__ = 'model_pb2'
+_UNUSED = DESCRIPTOR.message_types_by_name['Unused']
+_DEFAULTACSMODE = DESCRIPTOR.message_types_by_name['DefaultAcsMode']
+_ACCESSMODE = DESCRIPTOR.message_types_by_name['AccessMode']
+_SETSUB = DESCRIPTOR.message_types_by_name['SetSub']
+_CLIENTCRED = DESCRIPTOR.message_types_by_name['ClientCred']
+_CLIENTCRED_PARAMSENTRY = _CLIENTCRED.nested_types_by_name['ParamsEntry']
+_SETDESC = DESCRIPTOR.message_types_by_name['SetDesc']
+_GETOPTS = DESCRIPTOR.message_types_by_name['GetOpts']
+_GETQUERY = DESCRIPTOR.message_types_by_name['GetQuery']
+_SETQUERY = DESCRIPTOR.message_types_by_name['SetQuery']
+_SEQRANGE = DESCRIPTOR.message_types_by_name['SeqRange']
+_CLIENTHI = DESCRIPTOR.message_types_by_name['ClientHi']
+_CLIENTACC = DESCRIPTOR.message_types_by_name['ClientAcc']
+_CLIENTLOGIN = DESCRIPTOR.message_types_by_name['ClientLogin']
+_CLIENTSUB = DESCRIPTOR.message_types_by_name['ClientSub']
+_CLIENTLEAVE = DESCRIPTOR.message_types_by_name['ClientLeave']
+_CLIENTPUB = DESCRIPTOR.message_types_by_name['ClientPub']
+_CLIENTPUB_HEADENTRY = _CLIENTPUB.nested_types_by_name['HeadEntry']
+_CLIENTGET = DESCRIPTOR.message_types_by_name['ClientGet']
+_CLIENTSET = DESCRIPTOR.message_types_by_name['ClientSet']
+_CLIENTDEL = DESCRIPTOR.message_types_by_name['ClientDel']
+_CLIENTNOTE = DESCRIPTOR.message_types_by_name['ClientNote']
+_CLIENTEXTRA = DESCRIPTOR.message_types_by_name['ClientExtra']
+_CLIENTMSG = DESCRIPTOR.message_types_by_name['ClientMsg']
+_SERVERCRED = DESCRIPTOR.message_types_by_name['ServerCred']
+_TOPICDESC = DESCRIPTOR.message_types_by_name['TopicDesc']
+_TOPICSUB = DESCRIPTOR.message_types_by_name['TopicSub']
+_DELVALUES = DESCRIPTOR.message_types_by_name['DelValues']
+_SERVERCTRL = DESCRIPTOR.message_types_by_name['ServerCtrl']
+_SERVERCTRL_PARAMSENTRY = _SERVERCTRL.nested_types_by_name['ParamsEntry']
+_SERVERDATA = DESCRIPTOR.message_types_by_name['ServerData']
+_SERVERDATA_HEADENTRY = _SERVERDATA.nested_types_by_name['HeadEntry']
+_SERVERPRES = DESCRIPTOR.message_types_by_name['ServerPres']
+_SERVERMETA = DESCRIPTOR.message_types_by_name['ServerMeta']
+_SERVERINFO = DESCRIPTOR.message_types_by_name['ServerInfo']
+_SERVERMSG = DESCRIPTOR.message_types_by_name['ServerMsg']
+_SERVERRESP = DESCRIPTOR.message_types_by_name['ServerResp']
+_SESSION = DESCRIPTOR.message_types_by_name['Session']
+_CLIENTREQ = DESCRIPTOR.message_types_by_name['ClientReq']
+_SEARCHQUERY = DESCRIPTOR.message_types_by_name['SearchQuery']
+_SEARCHFOUND = DESCRIPTOR.message_types_by_name['SearchFound']
+_TOPICEVENT = DESCRIPTOR.message_types_by_name['TopicEvent']
+_ACCOUNTEVENT = DESCRIPTOR.message_types_by_name['AccountEvent']
+_SUBSCRIPTIONEVENT = DESCRIPTOR.message_types_by_name['SubscriptionEvent']
+_MESSAGEEVENT = DESCRIPTOR.message_types_by_name['MessageEvent']
+_CLIENTDEL_WHAT = _CLIENTDEL.enum_types_by_name['What']
+_SERVERPRES_WHAT = _SERVERPRES.enum_types_by_name['What']
+Unused = _reflection.GeneratedProtocolMessageType('Unused', (_message.Message,), {
+  'DESCRIPTOR' : _UNUSED,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.Unused)
-  ))
+  })
 _sym_db.RegisterMessage(Unused)
 
-DefaultAcsMode = _reflection.GeneratedProtocolMessageType('DefaultAcsMode', (_message.Message,), dict(
-  DESCRIPTOR = _DEFAULTACSMODE,
-  __module__ = 'model_pb2'
+DefaultAcsMode = _reflection.GeneratedProtocolMessageType('DefaultAcsMode', (_message.Message,), {
+  'DESCRIPTOR' : _DEFAULTACSMODE,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.DefaultAcsMode)
-  ))
+  })
 _sym_db.RegisterMessage(DefaultAcsMode)
 
-AccessMode = _reflection.GeneratedProtocolMessageType('AccessMode', (_message.Message,), dict(
-  DESCRIPTOR = _ACCESSMODE,
-  __module__ = 'model_pb2'
+AccessMode = _reflection.GeneratedProtocolMessageType('AccessMode', (_message.Message,), {
+  'DESCRIPTOR' : _ACCESSMODE,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.AccessMode)
-  ))
+  })
 _sym_db.RegisterMessage(AccessMode)
 
-SetSub = _reflection.GeneratedProtocolMessageType('SetSub', (_message.Message,), dict(
-  DESCRIPTOR = _SETSUB,
-  __module__ = 'model_pb2'
+SetSub = _reflection.GeneratedProtocolMessageType('SetSub', (_message.Message,), {
+  'DESCRIPTOR' : _SETSUB,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.SetSub)
-  ))
+  })
 _sym_db.RegisterMessage(SetSub)
 
-ClientCred = _reflection.GeneratedProtocolMessageType('ClientCred', (_message.Message,), dict(
+ClientCred = _reflection.GeneratedProtocolMessageType('ClientCred', (_message.Message,), {
 
-  ParamsEntry = _reflection.GeneratedProtocolMessageType('ParamsEntry', (_message.Message,), dict(
-    DESCRIPTOR = _CLIENTCRED_PARAMSENTRY,
-    __module__ = 'model_pb2'
+  'ParamsEntry' : _reflection.GeneratedProtocolMessageType('ParamsEntry', (_message.Message,), {
+    'DESCRIPTOR' : _CLIENTCRED_PARAMSENTRY,
+    '__module__' : 'model_pb2'
     # @@protoc_insertion_point(class_scope:pbx.ClientCred.ParamsEntry)
-    ))
+    })
   ,
-  DESCRIPTOR = _CLIENTCRED,
-  __module__ = 'model_pb2'
+  'DESCRIPTOR' : _CLIENTCRED,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientCred)
-  ))
+  })
 _sym_db.RegisterMessage(ClientCred)
 _sym_db.RegisterMessage(ClientCred.ParamsEntry)
 
-SetDesc = _reflection.GeneratedProtocolMessageType('SetDesc', (_message.Message,), dict(
-  DESCRIPTOR = _SETDESC,
-  __module__ = 'model_pb2'
+SetDesc = _reflection.GeneratedProtocolMessageType('SetDesc', (_message.Message,), {
+  'DESCRIPTOR' : _SETDESC,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.SetDesc)
-  ))
+  })
 _sym_db.RegisterMessage(SetDesc)
 
-GetOpts = _reflection.GeneratedProtocolMessageType('GetOpts', (_message.Message,), dict(
-  DESCRIPTOR = _GETOPTS,
-  __module__ = 'model_pb2'
+GetOpts = _reflection.GeneratedProtocolMessageType('GetOpts', (_message.Message,), {
+  'DESCRIPTOR' : _GETOPTS,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.GetOpts)
-  ))
+  })
 _sym_db.RegisterMessage(GetOpts)
 
-GetQuery = _reflection.GeneratedProtocolMessageType('GetQuery', (_message.Message,), dict(
-  DESCRIPTOR = _GETQUERY,
-  __module__ = 'model_pb2'
+GetQuery = _reflection.GeneratedProtocolMessageType('GetQuery', (_message.Message,), {
+  'DESCRIPTOR' : _GETQUERY,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.GetQuery)
-  ))
+  })
 _sym_db.RegisterMessage(GetQuery)
 
-SetQuery = _reflection.GeneratedProtocolMessageType('SetQuery', (_message.Message,), dict(
-  DESCRIPTOR = _SETQUERY,
-  __module__ = 'model_pb2'
+SetQuery = _reflection.GeneratedProtocolMessageType('SetQuery', (_message.Message,), {
+  'DESCRIPTOR' : _SETQUERY,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.SetQuery)
-  ))
+  })
 _sym_db.RegisterMessage(SetQuery)
 
-SeqRange = _reflection.GeneratedProtocolMessageType('SeqRange', (_message.Message,), dict(
-  DESCRIPTOR = _SEQRANGE,
-  __module__ = 'model_pb2'
+SeqRange = _reflection.GeneratedProtocolMessageType('SeqRange', (_message.Message,), {
+  'DESCRIPTOR' : _SEQRANGE,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.SeqRange)
-  ))
+  })
 _sym_db.RegisterMessage(SeqRange)
 
-ClientHi = _reflection.GeneratedProtocolMessageType('ClientHi', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTHI,
-  __module__ = 'model_pb2'
+ClientHi = _reflection.GeneratedProtocolMessageType('ClientHi', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTHI,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientHi)
-  ))
+  })
 _sym_db.RegisterMessage(ClientHi)
 
-ClientAcc = _reflection.GeneratedProtocolMessageType('ClientAcc', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTACC,
-  __module__ = 'model_pb2'
+ClientAcc = _reflection.GeneratedProtocolMessageType('ClientAcc', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTACC,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientAcc)
-  ))
+  })
 _sym_db.RegisterMessage(ClientAcc)
 
-ClientLogin = _reflection.GeneratedProtocolMessageType('ClientLogin', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTLOGIN,
-  __module__ = 'model_pb2'
+ClientLogin = _reflection.GeneratedProtocolMessageType('ClientLogin', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTLOGIN,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientLogin)
-  ))
+  })
 _sym_db.RegisterMessage(ClientLogin)
 
-ClientSub = _reflection.GeneratedProtocolMessageType('ClientSub', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTSUB,
-  __module__ = 'model_pb2'
+ClientSub = _reflection.GeneratedProtocolMessageType('ClientSub', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTSUB,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientSub)
-  ))
+  })
 _sym_db.RegisterMessage(ClientSub)
 
-ClientLeave = _reflection.GeneratedProtocolMessageType('ClientLeave', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTLEAVE,
-  __module__ = 'model_pb2'
+ClientLeave = _reflection.GeneratedProtocolMessageType('ClientLeave', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTLEAVE,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientLeave)
-  ))
+  })
 _sym_db.RegisterMessage(ClientLeave)
 
-ClientPub = _reflection.GeneratedProtocolMessageType('ClientPub', (_message.Message,), dict(
+ClientPub = _reflection.GeneratedProtocolMessageType('ClientPub', (_message.Message,), {
 
-  HeadEntry = _reflection.GeneratedProtocolMessageType('HeadEntry', (_message.Message,), dict(
-    DESCRIPTOR = _CLIENTPUB_HEADENTRY,
-    __module__ = 'model_pb2'
+  'HeadEntry' : _reflection.GeneratedProtocolMessageType('HeadEntry', (_message.Message,), {
+    'DESCRIPTOR' : _CLIENTPUB_HEADENTRY,
+    '__module__' : 'model_pb2'
     # @@protoc_insertion_point(class_scope:pbx.ClientPub.HeadEntry)
-    ))
+    })
   ,
-  DESCRIPTOR = _CLIENTPUB,
-  __module__ = 'model_pb2'
+  'DESCRIPTOR' : _CLIENTPUB,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientPub)
-  ))
+  })
 _sym_db.RegisterMessage(ClientPub)
 _sym_db.RegisterMessage(ClientPub.HeadEntry)
 
-ClientGet = _reflection.GeneratedProtocolMessageType('ClientGet', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTGET,
-  __module__ = 'model_pb2'
+ClientGet = _reflection.GeneratedProtocolMessageType('ClientGet', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTGET,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientGet)
-  ))
+  })
 _sym_db.RegisterMessage(ClientGet)
 
-ClientSet = _reflection.GeneratedProtocolMessageType('ClientSet', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTSET,
-  __module__ = 'model_pb2'
+ClientSet = _reflection.GeneratedProtocolMessageType('ClientSet', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTSET,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientSet)
-  ))
+  })
 _sym_db.RegisterMessage(ClientSet)
 
-ClientDel = _reflection.GeneratedProtocolMessageType('ClientDel', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTDEL,
-  __module__ = 'model_pb2'
+ClientDel = _reflection.GeneratedProtocolMessageType('ClientDel', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTDEL,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientDel)
-  ))
+  })
 _sym_db.RegisterMessage(ClientDel)
 
-ClientNote = _reflection.GeneratedProtocolMessageType('ClientNote', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTNOTE,
-  __module__ = 'model_pb2'
+ClientNote = _reflection.GeneratedProtocolMessageType('ClientNote', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTNOTE,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientNote)
-  ))
+  })
 _sym_db.RegisterMessage(ClientNote)
 
-ClientExtra = _reflection.GeneratedProtocolMessageType('ClientExtra', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTEXTRA,
-  __module__ = 'model_pb2'
+ClientExtra = _reflection.GeneratedProtocolMessageType('ClientExtra', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTEXTRA,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientExtra)
-  ))
+  })
 _sym_db.RegisterMessage(ClientExtra)
 
-ClientMsg = _reflection.GeneratedProtocolMessageType('ClientMsg', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTMSG,
-  __module__ = 'model_pb2'
+ClientMsg = _reflection.GeneratedProtocolMessageType('ClientMsg', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTMSG,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientMsg)
-  ))
+  })
 _sym_db.RegisterMessage(ClientMsg)
 
-ServerCred = _reflection.GeneratedProtocolMessageType('ServerCred', (_message.Message,), dict(
-  DESCRIPTOR = _SERVERCRED,
-  __module__ = 'model_pb2'
+ServerCred = _reflection.GeneratedProtocolMessageType('ServerCred', (_message.Message,), {
+  'DESCRIPTOR' : _SERVERCRED,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerCred)
-  ))
+  })
 _sym_db.RegisterMessage(ServerCred)
 
-TopicDesc = _reflection.GeneratedProtocolMessageType('TopicDesc', (_message.Message,), dict(
-  DESCRIPTOR = _TOPICDESC,
-  __module__ = 'model_pb2'
+TopicDesc = _reflection.GeneratedProtocolMessageType('TopicDesc', (_message.Message,), {
+  'DESCRIPTOR' : _TOPICDESC,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.TopicDesc)
-  ))
+  })
 _sym_db.RegisterMessage(TopicDesc)
 
-TopicSub = _reflection.GeneratedProtocolMessageType('TopicSub', (_message.Message,), dict(
-  DESCRIPTOR = _TOPICSUB,
-  __module__ = 'model_pb2'
+TopicSub = _reflection.GeneratedProtocolMessageType('TopicSub', (_message.Message,), {
+  'DESCRIPTOR' : _TOPICSUB,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.TopicSub)
-  ))
+  })
 _sym_db.RegisterMessage(TopicSub)
 
-DelValues = _reflection.GeneratedProtocolMessageType('DelValues', (_message.Message,), dict(
-  DESCRIPTOR = _DELVALUES,
-  __module__ = 'model_pb2'
+DelValues = _reflection.GeneratedProtocolMessageType('DelValues', (_message.Message,), {
+  'DESCRIPTOR' : _DELVALUES,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.DelValues)
-  ))
+  })
 _sym_db.RegisterMessage(DelValues)
 
-ServerCtrl = _reflection.GeneratedProtocolMessageType('ServerCtrl', (_message.Message,), dict(
+ServerCtrl = _reflection.GeneratedProtocolMessageType('ServerCtrl', (_message.Message,), {
 
-  ParamsEntry = _reflection.GeneratedProtocolMessageType('ParamsEntry', (_message.Message,), dict(
-    DESCRIPTOR = _SERVERCTRL_PARAMSENTRY,
-    __module__ = 'model_pb2'
+  'ParamsEntry' : _reflection.GeneratedProtocolMessageType('ParamsEntry', (_message.Message,), {
+    'DESCRIPTOR' : _SERVERCTRL_PARAMSENTRY,
+    '__module__' : 'model_pb2'
     # @@protoc_insertion_point(class_scope:pbx.ServerCtrl.ParamsEntry)
-    ))
+    })
   ,
-  DESCRIPTOR = _SERVERCTRL,
-  __module__ = 'model_pb2'
+  'DESCRIPTOR' : _SERVERCTRL,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerCtrl)
-  ))
+  })
 _sym_db.RegisterMessage(ServerCtrl)
 _sym_db.RegisterMessage(ServerCtrl.ParamsEntry)
 
-ServerData = _reflection.GeneratedProtocolMessageType('ServerData', (_message.Message,), dict(
+ServerData = _reflection.GeneratedProtocolMessageType('ServerData', (_message.Message,), {
 
-  HeadEntry = _reflection.GeneratedProtocolMessageType('HeadEntry', (_message.Message,), dict(
-    DESCRIPTOR = _SERVERDATA_HEADENTRY,
-    __module__ = 'model_pb2'
+  'HeadEntry' : _reflection.GeneratedProtocolMessageType('HeadEntry', (_message.Message,), {
+    'DESCRIPTOR' : _SERVERDATA_HEADENTRY,
+    '__module__' : 'model_pb2'
     # @@protoc_insertion_point(class_scope:pbx.ServerData.HeadEntry)
-    ))
+    })
   ,
-  DESCRIPTOR = _SERVERDATA,
-  __module__ = 'model_pb2'
+  'DESCRIPTOR' : _SERVERDATA,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerData)
-  ))
+  })
 _sym_db.RegisterMessage(ServerData)
 _sym_db.RegisterMessage(ServerData.HeadEntry)
 
-ServerPres = _reflection.GeneratedProtocolMessageType('ServerPres', (_message.Message,), dict(
-  DESCRIPTOR = _SERVERPRES,
-  __module__ = 'model_pb2'
+ServerPres = _reflection.GeneratedProtocolMessageType('ServerPres', (_message.Message,), {
+  'DESCRIPTOR' : _SERVERPRES,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerPres)
-  ))
+  })
 _sym_db.RegisterMessage(ServerPres)
 
-ServerMeta = _reflection.GeneratedProtocolMessageType('ServerMeta', (_message.Message,), dict(
-  DESCRIPTOR = _SERVERMETA,
-  __module__ = 'model_pb2'
+ServerMeta = _reflection.GeneratedProtocolMessageType('ServerMeta', (_message.Message,), {
+  'DESCRIPTOR' : _SERVERMETA,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerMeta)
-  ))
+  })
 _sym_db.RegisterMessage(ServerMeta)
 
-ServerInfo = _reflection.GeneratedProtocolMessageType('ServerInfo', (_message.Message,), dict(
-  DESCRIPTOR = _SERVERINFO,
-  __module__ = 'model_pb2'
+ServerInfo = _reflection.GeneratedProtocolMessageType('ServerInfo', (_message.Message,), {
+  'DESCRIPTOR' : _SERVERINFO,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerInfo)
-  ))
+  })
 _sym_db.RegisterMessage(ServerInfo)
 
-ServerMsg = _reflection.GeneratedProtocolMessageType('ServerMsg', (_message.Message,), dict(
-  DESCRIPTOR = _SERVERMSG,
-  __module__ = 'model_pb2'
+ServerMsg = _reflection.GeneratedProtocolMessageType('ServerMsg', (_message.Message,), {
+  'DESCRIPTOR' : _SERVERMSG,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerMsg)
-  ))
+  })
 _sym_db.RegisterMessage(ServerMsg)
 
-ServerResp = _reflection.GeneratedProtocolMessageType('ServerResp', (_message.Message,), dict(
-  DESCRIPTOR = _SERVERRESP,
-  __module__ = 'model_pb2'
+ServerResp = _reflection.GeneratedProtocolMessageType('ServerResp', (_message.Message,), {
+  'DESCRIPTOR' : _SERVERRESP,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ServerResp)
-  ))
+  })
 _sym_db.RegisterMessage(ServerResp)
 
-Session = _reflection.GeneratedProtocolMessageType('Session', (_message.Message,), dict(
-  DESCRIPTOR = _SESSION,
-  __module__ = 'model_pb2'
+Session = _reflection.GeneratedProtocolMessageType('Session', (_message.Message,), {
+  'DESCRIPTOR' : _SESSION,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.Session)
-  ))
+  })
 _sym_db.RegisterMessage(Session)
 
-ClientReq = _reflection.GeneratedProtocolMessageType('ClientReq', (_message.Message,), dict(
-  DESCRIPTOR = _CLIENTREQ,
-  __module__ = 'model_pb2'
+ClientReq = _reflection.GeneratedProtocolMessageType('ClientReq', (_message.Message,), {
+  'DESCRIPTOR' : _CLIENTREQ,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.ClientReq)
-  ))
+  })
 _sym_db.RegisterMessage(ClientReq)
 
-SearchQuery = _reflection.GeneratedProtocolMessageType('SearchQuery', (_message.Message,), dict(
-  DESCRIPTOR = _SEARCHQUERY,
-  __module__ = 'model_pb2'
+SearchQuery = _reflection.GeneratedProtocolMessageType('SearchQuery', (_message.Message,), {
+  'DESCRIPTOR' : _SEARCHQUERY,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.SearchQuery)
-  ))
+  })
 _sym_db.RegisterMessage(SearchQuery)
 
-SearchFound = _reflection.GeneratedProtocolMessageType('SearchFound', (_message.Message,), dict(
-  DESCRIPTOR = _SEARCHFOUND,
-  __module__ = 'model_pb2'
+SearchFound = _reflection.GeneratedProtocolMessageType('SearchFound', (_message.Message,), {
+  'DESCRIPTOR' : _SEARCHFOUND,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.SearchFound)
-  ))
+  })
 _sym_db.RegisterMessage(SearchFound)
 
-TopicEvent = _reflection.GeneratedProtocolMessageType('TopicEvent', (_message.Message,), dict(
-  DESCRIPTOR = _TOPICEVENT,
-  __module__ = 'model_pb2'
+TopicEvent = _reflection.GeneratedProtocolMessageType('TopicEvent', (_message.Message,), {
+  'DESCRIPTOR' : _TOPICEVENT,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.TopicEvent)
-  ))
+  })
 _sym_db.RegisterMessage(TopicEvent)
 
-AccountEvent = _reflection.GeneratedProtocolMessageType('AccountEvent', (_message.Message,), dict(
-  DESCRIPTOR = _ACCOUNTEVENT,
-  __module__ = 'model_pb2'
+AccountEvent = _reflection.GeneratedProtocolMessageType('AccountEvent', (_message.Message,), {
+  'DESCRIPTOR' : _ACCOUNTEVENT,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.AccountEvent)
-  ))
+  })
 _sym_db.RegisterMessage(AccountEvent)
 
-SubscriptionEvent = _reflection.GeneratedProtocolMessageType('SubscriptionEvent', (_message.Message,), dict(
-  DESCRIPTOR = _SUBSCRIPTIONEVENT,
-  __module__ = 'model_pb2'
+SubscriptionEvent = _reflection.GeneratedProtocolMessageType('SubscriptionEvent', (_message.Message,), {
+  'DESCRIPTOR' : _SUBSCRIPTIONEVENT,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.SubscriptionEvent)
-  ))
+  })
 _sym_db.RegisterMessage(SubscriptionEvent)
 
-MessageEvent = _reflection.GeneratedProtocolMessageType('MessageEvent', (_message.Message,), dict(
-  DESCRIPTOR = _MESSAGEEVENT,
-  __module__ = 'model_pb2'
+MessageEvent = _reflection.GeneratedProtocolMessageType('MessageEvent', (_message.Message,), {
+  'DESCRIPTOR' : _MESSAGEEVENT,
+  '__module__' : 'model_pb2'
   # @@protoc_insertion_point(class_scope:pbx.MessageEvent)
-  ))
+  })
 _sym_db.RegisterMessage(MessageEvent)
 
+_NODE = DESCRIPTOR.services_by_name['Node']
+_PLUGIN = DESCRIPTOR.services_by_name['Plugin']
+if _descriptor._USE_C_DESCRIPTORS == False:
 
-DESCRIPTOR._options = None
-_CLIENTCRED_PARAMSENTRY._options = None
-_CLIENTPUB_HEADENTRY._options = None
-_SERVERCTRL_PARAMSENTRY._options = None
-_SERVERDATA_HEADENTRY._options = None
-
-_NODE = _descriptor.ServiceDescriptor(
-  name='Node',
-  full_name='pbx.Node',
-  file=DESCRIPTOR,
-  index=0,
-  serialized_options=None,
-  serialized_start=5612,
-  serialized_end=5671,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='MessageLoop',
-    full_name='pbx.Node.MessageLoop',
-    index=0,
-    containing_service=None,
-    input_type=_CLIENTMSG,
-    output_type=_SERVERMSG,
-    serialized_options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_NODE)
-
-DESCRIPTOR.services_by_name['Node'] = _NODE
-
-
-_PLUGIN = _descriptor.ServiceDescriptor(
-  name='Plugin',
-  full_name='pbx.Plugin',
-  file=DESCRIPTOR,
-  index=1,
-  serialized_options=None,
-  serialized_start=5674,
-  serialized_end=5961,
-  methods=[
-  _descriptor.MethodDescriptor(
-    name='FireHose',
-    full_name='pbx.Plugin.FireHose',
-    index=0,
-    containing_service=None,
-    input_type=_CLIENTREQ,
-    output_type=_SERVERRESP,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='Find',
-    full_name='pbx.Plugin.Find',
-    index=1,
-    containing_service=None,
-    input_type=_SEARCHQUERY,
-    output_type=_SEARCHFOUND,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='Account',
-    full_name='pbx.Plugin.Account',
-    index=2,
-    containing_service=None,
-    input_type=_ACCOUNTEVENT,
-    output_type=_UNUSED,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='Topic',
-    full_name='pbx.Plugin.Topic',
-    index=3,
-    containing_service=None,
-    input_type=_TOPICEVENT,
-    output_type=_UNUSED,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='Subscription',
-    full_name='pbx.Plugin.Subscription',
-    index=4,
-    containing_service=None,
-    input_type=_SUBSCRIPTIONEVENT,
-    output_type=_UNUSED,
-    serialized_options=None,
-  ),
-  _descriptor.MethodDescriptor(
-    name='Message',
-    full_name='pbx.Plugin.Message',
-    index=5,
-    containing_service=None,
-    input_type=_MESSAGEEVENT,
-    output_type=_UNUSED,
-    serialized_options=None,
-  ),
-])
-_sym_db.RegisterServiceDescriptor(_PLUGIN)
-
-DESCRIPTOR.services_by_name['Plugin'] = _PLUGIN
-
+  DESCRIPTOR._options = None
+  DESCRIPTOR._serialized_options = b'Z\032github.com/tinode/chat/pbx'
+  _CLIENTCRED_PARAMSENTRY._options = None
+  _CLIENTCRED_PARAMSENTRY._serialized_options = b'8\001'
+  _CLIENTPUB_HEADENTRY._options = None
+  _CLIENTPUB_HEADENTRY._serialized_options = b'8\001'
+  _SERVERCTRL_PARAMSENTRY._options = None
+  _SERVERCTRL_PARAMSENTRY._serialized_options = b'8\001'
+  _SERVERDATA_HEADENTRY._options = None
+  _SERVERDATA_HEADENTRY._serialized_options = b'8\001'
+  _AUTHLEVEL._serialized_start=5413
+  _AUTHLEVEL._serialized_end=5464
+  _INFONOTE._serialized_start=5466
+  _INFONOTE._serialized_end=5504
+  _RESPCODE._serialized_start=5506
+  _RESPCODE._serialized_end=5566
+  _CRUD._serialized_start=5568
+  _CRUD._serialized_end=5610
+  _UNUSED._serialized_start=20
+  _UNUSED._serialized_end=28
+  _DEFAULTACSMODE._serialized_start=30
+  _DEFAULTACSMODE._serialized_end=74
+  _ACCESSMODE._serialized_start=76
+  _ACCESSMODE._serialized_end=117
+  _SETSUB._serialized_start=119
+  _SETSUB._serialized_end=158
+  _CLIENTCRED._serialized_start=161
+  _CLIENTCRED._serialized_end=314
+  _CLIENTCRED_PARAMSENTRY._serialized_start=269
+  _CLIENTCRED_PARAMSENTRY._serialized_end=314
+  _SETDESC._serialized_start=316
+  _SETDESC._serialized_end=417
+  _GETOPTS._serialized_start=419
+  _GETOPTS._serialized_end=536
+  _GETQUERY._serialized_start=538
+  _GETQUERY._serialized_end=645
+  _SETQUERY._serialized_start=647
+  _SETQUERY._serialized_end=756
+  _SEQRANGE._serialized_start=758
+  _SEQRANGE._serialized_end=793
+  _CLIENTHI._serialized_start=795
+  _CLIENTHI._serialized_end=921
+  _CLIENTACC._serialized_start=924
+  _CLIENTACC._serialized_end=1114
+  _CLIENTLOGIN._serialized_start=1116
+  _CLIENTLOGIN._serialized_end=1204
+  _CLIENTSUB._serialized_start=1206
+  _CLIENTSUB._serialized_end=1312
+  _CLIENTLEAVE._serialized_start=1314
+  _CLIENTLEAVE._serialized_end=1369
+  _CLIENTPUB._serialized_start=1372
+  _CLIENTPUB._serialized_end=1529
+  _CLIENTPUB_HEADENTRY._serialized_start=1486
+  _CLIENTPUB_HEADENTRY._serialized_end=1529
+  _CLIENTGET._serialized_start=1531
+  _CLIENTGET._serialized_end=1599
+  _CLIENTSET._serialized_start=1601
+  _CLIENTSET._serialized_end=1669
+  _CLIENTDEL._serialized_start=1672
+  _CLIENTDEL._serialized_end=1896
+  _CLIENTDEL_WHAT._serialized_start=1841
+  _CLIENTDEL_WHAT._serialized_end=1896
+  _CLIENTNOTE._serialized_start=1898
+  _CLIENTNOTE._serialized_end=1970
+  _CLIENTEXTRA._serialized_start=1972
+  _CLIENTEXTRA._serialized_end=2064
+  _CLIENTMSG._serialized_start=2067
+  _CLIENTMSG._serialized_end=2440
+  _SERVERCRED._serialized_start=2442
+  _SERVERCRED._serialized_end=2499
+  _TOPICDESC._serialized_start=2502
+  _TOPICDESC._serialized_end=2860
+  _TOPICSUB._serialized_start=2863
+  _TOPICSUB._serialized_end=3181
+  _DELVALUES._serialized_start=3183
+  _DELVALUES._serialized_end=3242
+  _SERVERCTRL._serialized_start=3245
+  _SERVERCTRL._serialized_end=3404
+  _SERVERCTRL_PARAMSENTRY._serialized_start=269
+  _SERVERCTRL_PARAMSENTRY._serialized_end=314
+  _SERVERDATA._serialized_start=3407
+  _SERVERDATA._serialized_end=3614
+  _SERVERDATA_HEADENTRY._serialized_start=1486
+  _SERVERDATA_HEADENTRY._serialized_end=1529
+  _SERVERPRES._serialized_start=3617
+  _SERVERPRES._serialized_end=3973
+  _SERVERPRES_WHAT._serialized_start=3856
+  _SERVERPRES_WHAT._serialized_end=3973
+  _SERVERMETA._serialized_start=3976
+  _SERVERMETA._serialized_end=4147
+  _SERVERINFO._serialized_start=4149
+  _SERVERINFO._serialized_end=4256
+  _SERVERMSG._serialized_start=4259
+  _SERVERMSG._serialized_end=4461
+  _SERVERRESP._serialized_start=4463
+  _SERVERRESP._serialized_end=4569
+  _SESSION._serialized_start=4572
+  _SESSION._serialized_end=4732
+  _CLIENTREQ._serialized_start=4734
+  _CLIENTREQ._serialized_end=4802
+  _SEARCHQUERY._serialized_start=4804
+  _SEARCHQUERY._serialized_end=4849
+  _SEARCHFOUND._serialized_start=4851
+  _SEARCHFOUND._serialized_end=4941
+  _TOPICEVENT._serialized_start=4943
+  _TOPICEVENT._serialized_end=5026
+  _ACCOUNTEVENT._serialized_start=5029
+  _ACCOUNTEVENT._serialized_end=5159
+  _SUBSCRIPTIONEVENT._serialized_start=5162
+  _SUBSCRIPTIONEVENT._serialized_end=5338
+  _MESSAGEEVENT._serialized_start=5340
+  _MESSAGEEVENT._serialized_end=5411
+  _NODE._serialized_start=5612
+  _NODE._serialized_end=5671
+  _PLUGIN._serialized_start=5674
+  _PLUGIN._serialized_end=5961
 # @@protoc_insertion_point(module_scope)
diff --git a/py_grpc/tinode_grpc/model_pb2_grpc.py b/py_grpc/tinode_grpc/model_pb2_grpc.py
index 92724981..ff913671 100644
--- a/py_grpc/tinode_grpc/model_pb2_grpc.py
+++ b/py_grpc/tinode_grpc/model_pb2_grpc.py
@@ -1,180 +1,312 @@
 # Generated by the gRPC Python protocol compiler plugin. DO NOT EDIT!
+"""Client and server classes corresponding to protobuf-defined services."""
 import grpc
 
 from . import model_pb2 as model__pb2
 
 
 class NodeStub(object):
-  """This is the single method that needs to be implemented by a gRPC client.
-  """
-
-  def __init__(self, channel):
-    """Constructor.
-
-    Args:
-      channel: A grpc.Channel.
+    """This is the single method that needs to be implemented by a gRPC client.
     """
-    self.MessageLoop = channel.stream_stream(
-        '/pbx.Node/MessageLoop',
-        request_serializer=model__pb2.ClientMsg.SerializeToString,
-        response_deserializer=model__pb2.ServerMsg.FromString,
-        )
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.MessageLoop = channel.stream_stream(
+                '/pbx.Node/MessageLoop',
+                request_serializer=model__pb2.ClientMsg.SerializeToString,
+                response_deserializer=model__pb2.ServerMsg.FromString,
+                )
 
 
 class NodeServicer(object):
-  """This is the single method that needs to be implemented by a gRPC client.
-  """
-
-  def MessageLoop(self, request_iterator, context):
-    """Client sends a stream of ClientMsg, server responds with a stream of ServerMsg
+    """This is the single method that needs to be implemented by a gRPC client.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+
+    def MessageLoop(self, request_iterator, context):
+        """Client sends a stream of ClientMsg, server responds with a stream of ServerMsg
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_NodeServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'MessageLoop': grpc.stream_stream_rpc_method_handler(
-          servicer.MessageLoop,
-          request_deserializer=model__pb2.ClientMsg.FromString,
-          response_serializer=model__pb2.ServerMsg.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'pbx.Node', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'MessageLoop': grpc.stream_stream_rpc_method_handler(
+                    servicer.MessageLoop,
+                    request_deserializer=model__pb2.ClientMsg.FromString,
+                    response_serializer=model__pb2.ServerMsg.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'pbx.Node', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Node(object):
+    """This is the single method that needs to be implemented by a gRPC client.
+    """
+
+    @staticmethod
+    def MessageLoop(request_iterator,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.stream_stream(request_iterator, target, '/pbx.Node/MessageLoop',
+            model__pb2.ClientMsg.SerializeToString,
+            model__pb2.ServerMsg.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
 
 
 class PluginStub(object):
-  """Plugin interface.
-  """
-
-  def __init__(self, channel):
-    """Constructor.
-
-    Args:
-      channel: A grpc.Channel.
+    """Plugin interface.
     """
-    self.FireHose = channel.unary_unary(
-        '/pbx.Plugin/FireHose',
-        request_serializer=model__pb2.ClientReq.SerializeToString,
-        response_deserializer=model__pb2.ServerResp.FromString,
-        )
-    self.Find = channel.unary_unary(
-        '/pbx.Plugin/Find',
-        request_serializer=model__pb2.SearchQuery.SerializeToString,
-        response_deserializer=model__pb2.SearchFound.FromString,
-        )
-    self.Account = channel.unary_unary(
-        '/pbx.Plugin/Account',
-        request_serializer=model__pb2.AccountEvent.SerializeToString,
-        response_deserializer=model__pb2.Unused.FromString,
-        )
-    self.Topic = channel.unary_unary(
-        '/pbx.Plugin/Topic',
-        request_serializer=model__pb2.TopicEvent.SerializeToString,
-        response_deserializer=model__pb2.Unused.FromString,
-        )
-    self.Subscription = channel.unary_unary(
-        '/pbx.Plugin/Subscription',
-        request_serializer=model__pb2.SubscriptionEvent.SerializeToString,
-        response_deserializer=model__pb2.Unused.FromString,
-        )
-    self.Message = channel.unary_unary(
-        '/pbx.Plugin/Message',
-        request_serializer=model__pb2.MessageEvent.SerializeToString,
-        response_deserializer=model__pb2.Unused.FromString,
-        )
+
+    def __init__(self, channel):
+        """Constructor.
+
+        Args:
+            channel: A grpc.Channel.
+        """
+        self.FireHose = channel.unary_unary(
+                '/pbx.Plugin/FireHose',
+                request_serializer=model__pb2.ClientReq.SerializeToString,
+                response_deserializer=model__pb2.ServerResp.FromString,
+                )
+        self.Find = channel.unary_unary(
+                '/pbx.Plugin/Find',
+                request_serializer=model__pb2.SearchQuery.SerializeToString,
+                response_deserializer=model__pb2.SearchFound.FromString,
+                )
+        self.Account = channel.unary_unary(
+                '/pbx.Plugin/Account',
+                request_serializer=model__pb2.AccountEvent.SerializeToString,
+                response_deserializer=model__pb2.Unused.FromString,
+                )
+        self.Topic = channel.unary_unary(
+                '/pbx.Plugin/Topic',
+                request_serializer=model__pb2.TopicEvent.SerializeToString,
+                response_deserializer=model__pb2.Unused.FromString,
+                )
+        self.Subscription = channel.unary_unary(
+                '/pbx.Plugin/Subscription',
+                request_serializer=model__pb2.SubscriptionEvent.SerializeToString,
+                response_deserializer=model__pb2.Unused.FromString,
+                )
+        self.Message = channel.unary_unary(
+                '/pbx.Plugin/Message',
+                request_serializer=model__pb2.MessageEvent.SerializeToString,
+                response_deserializer=model__pb2.Unused.FromString,
+                )
 
 
 class PluginServicer(object):
-  """Plugin interface.
-  """
-
-  def FireHose(self, request, context):
-    """This plugin method is called by Tinode server for every message received from the clients. The
-    method returns a ServerCtrl message. Non-zero ServerCtrl.code indicates that no further
-    processing is needed. The Tinode server will generate a {ctrl} message from the returned ServerCtrl
-    and forward it to the client session.
-    ServerCtrl.code equals to 0 instructs the server to continue with default processing of the client message.
+    """Plugin interface.
     """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
 
-  def Find(self, request, context):
-    """An alteranative user and topic discovery mechanism.
-    A search request issued on a 'fnd' topic. This method is called to generate an alternative result set.
-    """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def FireHose(self, request, context):
+        """This plugin method is called by Tinode server for every message received from the clients. The
+        method returns a ServerCtrl message. Non-zero ServerCtrl.code indicates that no further
+        processing is needed. The Tinode server will generate a {ctrl} message from the returned ServerCtrl
+        and forward it to the client session.
+        ServerCtrl.code equals to 0 instructs the server to continue with default processing of the client message.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-  def Account(self, request, context):
-    """The following methods are for the Tinode server to report individual events.
+    def Find(self, request, context):
+        """An alteranative user and topic discovery mechanism.
+        A search request issued on a 'fnd' topic. This method is called to generate an alternative result set.
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-    Account created, updated or deleted
-    """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def Account(self, request, context):
+        """The following methods are for the Tinode server to report individual events.
 
-  def Topic(self, request, context):
-    """Topic created, updated [or deleted -- not supported yet]
-    """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+        Account created, updated or deleted
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-  def Subscription(self, request, context):
-    """Subscription created, updated or deleted
-    """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def Topic(self, request, context):
+        """Topic created, updated [or deleted -- not supported yet]
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
-  def Message(self, request, context):
-    """Message published or deleted
-    """
-    context.set_code(grpc.StatusCode.UNIMPLEMENTED)
-    context.set_details('Method not implemented!')
-    raise NotImplementedError('Method not implemented!')
+    def Subscription(self, request, context):
+        """Subscription created, updated or deleted
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
+
+    def Message(self, request, context):
+        """Message published or deleted
+        """
+        context.set_code(grpc.StatusCode.UNIMPLEMENTED)
+        context.set_details('Method not implemented!')
+        raise NotImplementedError('Method not implemented!')
 
 
 def add_PluginServicer_to_server(servicer, server):
-  rpc_method_handlers = {
-      'FireHose': grpc.unary_unary_rpc_method_handler(
-          servicer.FireHose,
-          request_deserializer=model__pb2.ClientReq.FromString,
-          response_serializer=model__pb2.ServerResp.SerializeToString,
-      ),
-      'Find': grpc.unary_unary_rpc_method_handler(
-          servicer.Find,
-          request_deserializer=model__pb2.SearchQuery.FromString,
-          response_serializer=model__pb2.SearchFound.SerializeToString,
-      ),
-      'Account': grpc.unary_unary_rpc_method_handler(
-          servicer.Account,
-          request_deserializer=model__pb2.AccountEvent.FromString,
-          response_serializer=model__pb2.Unused.SerializeToString,
-      ),
-      'Topic': grpc.unary_unary_rpc_method_handler(
-          servicer.Topic,
-          request_deserializer=model__pb2.TopicEvent.FromString,
-          response_serializer=model__pb2.Unused.SerializeToString,
-      ),
-      'Subscription': grpc.unary_unary_rpc_method_handler(
-          servicer.Subscription,
-          request_deserializer=model__pb2.SubscriptionEvent.FromString,
-          response_serializer=model__pb2.Unused.SerializeToString,
-      ),
-      'Message': grpc.unary_unary_rpc_method_handler(
-          servicer.Message,
-          request_deserializer=model__pb2.MessageEvent.FromString,
-          response_serializer=model__pb2.Unused.SerializeToString,
-      ),
-  }
-  generic_handler = grpc.method_handlers_generic_handler(
-      'pbx.Plugin', rpc_method_handlers)
-  server.add_generic_rpc_handlers((generic_handler,))
+    rpc_method_handlers = {
+            'FireHose': grpc.unary_unary_rpc_method_handler(
+                    servicer.FireHose,
+                    request_deserializer=model__pb2.ClientReq.FromString,
+                    response_serializer=model__pb2.ServerResp.SerializeToString,
+            ),
+            'Find': grpc.unary_unary_rpc_method_handler(
+                    servicer.Find,
+                    request_deserializer=model__pb2.SearchQuery.FromString,
+                    response_serializer=model__pb2.SearchFound.SerializeToString,
+            ),
+            'Account': grpc.unary_unary_rpc_method_handler(
+                    servicer.Account,
+                    request_deserializer=model__pb2.AccountEvent.FromString,
+                    response_serializer=model__pb2.Unused.SerializeToString,
+            ),
+            'Topic': grpc.unary_unary_rpc_method_handler(
+                    servicer.Topic,
+                    request_deserializer=model__pb2.TopicEvent.FromString,
+                    response_serializer=model__pb2.Unused.SerializeToString,
+            ),
+            'Subscription': grpc.unary_unary_rpc_method_handler(
+                    servicer.Subscription,
+                    request_deserializer=model__pb2.SubscriptionEvent.FromString,
+                    response_serializer=model__pb2.Unused.SerializeToString,
+            ),
+            'Message': grpc.unary_unary_rpc_method_handler(
+                    servicer.Message,
+                    request_deserializer=model__pb2.MessageEvent.FromString,
+                    response_serializer=model__pb2.Unused.SerializeToString,
+            ),
+    }
+    generic_handler = grpc.method_handlers_generic_handler(
+            'pbx.Plugin', rpc_method_handlers)
+    server.add_generic_rpc_handlers((generic_handler,))
+
+
+ # This class is part of an EXPERIMENTAL API.
+class Plugin(object):
+    """Plugin interface.
+    """
+
+    @staticmethod
+    def FireHose(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/FireHose',
+            model__pb2.ClientReq.SerializeToString,
+            model__pb2.ServerResp.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Find(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Find',
+            model__pb2.SearchQuery.SerializeToString,
+            model__pb2.SearchFound.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Account(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Account',
+            model__pb2.AccountEvent.SerializeToString,
+            model__pb2.Unused.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Topic(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Topic',
+            model__pb2.TopicEvent.SerializeToString,
+            model__pb2.Unused.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Subscription(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Subscription',
+            model__pb2.SubscriptionEvent.SerializeToString,
+            model__pb2.Unused.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)
+
+    @staticmethod
+    def Message(request,
+            target,
+            options=(),
+            channel_credentials=None,
+            call_credentials=None,
+            insecure=False,
+            compression=None,
+            wait_for_ready=None,
+            timeout=None,
+            metadata=None):
+        return grpc.experimental.unary_unary(request, target, '/pbx.Plugin/Message',
+            model__pb2.MessageEvent.SerializeToString,
+            model__pb2.Unused.FromString,
+            options, channel_credentials,
+            insecure, call_credentials, compression, wait_for_ready, timeout, metadata)