Changpeng Duan 4 rokov pred
rodič
commit
0b5e21873b

+ 2 - 0
v2tv/package.json

@@ -12,6 +12,8 @@
     "default-passive-events": "^2.0.0",
     "echarts": "^4.8.0",
     "element-ui": "^2.13.2",
+    "google-protobuf": "^3.15.6",
+    "grpc-web": "^1.2.1",
     "mockjs": "^1.1.0",
     "moment": "^2.27.0",
     "nprogress": "^0.2.0",

+ 2 - 0
v2tv/src/grpc/gen.bat

@@ -0,0 +1,2 @@
+protoc -I . im.proto --grpc-web_out=import_style=commonjs,mode=grpcwebtext:.
+protoc -I . im.proto --js_out=import_style=commonjs:.

+ 309 - 0
v2tv/src/grpc/im.proto

@@ -0,0 +1,309 @@
+syntax = "proto3";
+
+option go_package = ".;im";
+
+package im;
+
+
+enum ErrorCode{
+  OK = 0;
+  PARAM = 4001;
+  Exist = 4002;
+  Token = 4003;
+}
+
+// metadata: 综合管理系统前端调用需要字段 token 用作登录验证;子系统调用需要字段 sys_token 用作系统验证
+service Api {
+  rpc SignUpUserCode (SignUpRequest) returns (SignUpReply) {}
+  rpc SignUpPhone (SignUpRequest) returns (SignUpReply) {}
+
+  rpc SignInUserCode (SignInPasswordRequest) returns (TokenParam)  {}
+  rpc SignInWithPhonePassword (SignInPasswordRequest) returns (TokenParam)  {}
+
+  // ---子系统专用---
+
+  // 检查token有效性
+  rpc SubSessionCheck (TokenParam) returns (SessionCheckReply)  {}
+  // 检查token所属用户是否拥有调用service权限
+  rpc SubPermissionCheck (PermissionCheck) returns (SessionCheckReply)  {}
+  // 登出传入token
+  rpc SubSignOut (TokenParam) returns (DefaultReply)  {}
+  // 批量保存service
+  rpc SubServiceSaveList (SaveServiceListRequest) returns (DefaultReply)  {}
+
+  // ---子系统专用---
+
+  // 用户列表
+  rpc UserList (UserListRequest) returns (UserListReply)  {}
+  // 单个用户信息详情
+  rpc UserGetInfo (UserGetInfoRequest) returns (UserInfo)  {}
+  // 用户添加多个角色
+  rpc UserAddRoles(UserRolesRequest) returns (DefaultReply)  {}
+  // 用户移除多个角色
+  rpc UserRemoveRoles(UserRolesRequest) returns (DefaultReply)  {}
+  // 用户获取栏目列表
+  rpc UserGetColumnList(UserGetColumnListRequest) returns (UserGetColumnListReply)  {}
+  // 创建角色
+  rpc RoleCreate(CreateRoleRequest) returns (DefaultReply)  {}
+  // 角色列表
+  rpc RoleList(RoleListRequest) returns (RoleListReply)  {}
+  // 角色编辑
+  rpc RoleEdit(Role) returns (DefaultReply)  {}
+  // 角色添加多个service权限
+  rpc RoleAddPermissions(RolePermissionRequest) returns (DefaultReply)  {}
+  // 角色移除多个service权限
+  rpc RoleRemovePermissions(RolePermissionRequest) returns (DefaultReply)  {}
+
+  // service权限列表
+  rpc ServiceList(ServiceListRequest) returns (ServiceListReply)  {}
+  // 移除service
+  rpc ServiceRemoveList(ServiceRemoveRequest) returns (DefaultReply)  {}
+
+  rpc ShopCreate (CreateShopRequest) returns (CreateReply)  {}
+  rpc ShopList (ShopListRequest) returns (ShopListReply)  {}
+  rpc SystemAddShop (SystemAddShopRequest) returns (DefaultReply)  {}
+  rpc SystemAddUser (SystemAddUserRequest) returns (DefaultReply)  {}
+  // ---总后台专用API---
+
+  rpc IMSystemCreate (CreateSystemRequest) returns (TokenParam)  {}
+  rpc IMSignOut (DefaultRequest) returns (DefaultReply)  {}
+  rpc IMSelfInfo (DefaultRequest) returns (UserInfo)  {}
+  rpc IMMessageRcv (DefaultRequest) returns (stream Message)  {}
+
+  // ---总后台专用API---
+}
+message DefaultRequest{
+}
+message TokenParam{
+  string token = 1;
+}
+
+message DefaultReply{}
+
+message SignUpReply{
+  int64 userId = 1;
+}
+
+message SignInPasswordRequest {
+  string auth = 1;
+  string password = 2;
+  int64 sysId = 3;
+  //session有效期,单位:秒
+  int64 expirationSec = 4;
+}
+
+enum Status{
+  Null = 0;
+  Ban = 1;
+  On = 2;
+  Delete = 9;
+}
+
+message SignUpRequest {
+  string userCode = 1 ;
+  string name = 2 ;
+  string email = 3 ;
+  string phone = 4 ;
+  string wxOpenId = 5;
+  string qq = 6;
+  string password = 7;
+  string question = 8;
+  string answer = 9;
+  string memo = 10;
+}
+
+message UserInfo {
+  int64  id = 1 ;
+  string userCode = 2 ;
+  string name = 3 ;
+  string email = 4 ;
+  string phone = 5 ;
+  string qq = 7;
+  string memo = 11;
+  Status status = 12;
+}
+
+message CreateReply{
+  int64 id = 1;
+}
+
+message PermissionCheck {
+  string token = 1;
+  // service全路径,区分大小写,如User/List
+  string servicePath = 2;
+}
+
+
+message SessionCheckReply {
+  int64 userId = 1;
+}
+
+message Service {
+  string path = 1;
+  string memo = 2;
+}
+
+message SaveServiceListRequest{
+  repeated Service list = 1;
+}
+
+message CreateSystemRequest{
+  string fullName = 1;
+  string shortname = 2;
+  string sysUrl = 3;
+  string memo = 4;
+}
+
+message UserGetColumnListRequest{
+  int64 userId = 1;
+  // 最顶层为0
+  int32 parentId = 2;
+  // 仅综合管理后台调用有效
+  int64 sysId = 3;
+}
+
+message Column{
+  string name = 1;
+  string url = 2;
+  string code = 3;
+  // 顺序
+  int32 sn = 4;
+  Status status = 5;
+  bool navShow = 6;
+  int64 id = 7;
+}
+
+message UserGetColumnListReply{
+  repeated Column list = 1;
+}
+
+message CreateRoleRequest{
+  string name = 1;
+  string memo = 2;
+}
+
+message Role {
+  int64  id = 1;
+  string name = 2;
+  string memo = 3;
+  Status status = 4;
+  string systemName = 5;
+}
+
+message RoleListRequest{
+  int64 userId = 1;
+  int64 sysId = 2;
+}
+
+message UserListRequest{
+  // 0为全部
+  int64 roleId = 1;
+  Status status = 2;
+  // 模糊查询
+  string name = 3;
+  int64 lcstypeid = 4;
+  // 仅总后台请求时有效
+  int64 sysId = 5;
+}
+
+message UserListReply{
+  repeated UserInfo list = 1;
+}
+
+message UserGetInfoRequest{
+  int64 userId = 1;
+}
+message UserRolesRequest{
+  int64 userId = 1;
+  repeated int64 roleIdList = 2;
+}
+
+message RoleListReply {
+  repeated Role list = 1;
+}
+
+message RolePermissionRequest{
+  int64 roleId = 1;
+  repeated string servicePath = 2;
+}
+
+message ServiceListRequest{
+  // 仅总系统有效
+  int64 sysId = 1;
+}
+
+message ServiceListReply{
+  repeated Service list = 1;
+}
+
+message ServiceRemoveRequest{
+  repeated string pathList = 1;
+}
+
+message CreateShopRequest{
+  string name = 1;
+  string key = 2;
+  //上级商家Id
+  int64  sId = 3;
+  string addr = 4;
+  string phone = 5;
+  string contacts = 6;
+  int64 createUser = 7;
+}
+
+message ShopListRequest{
+  // 子系统调用时,0:展示所有商家,大于0则展示本系统商家
+  int64 sysId = 1;
+  // 模糊查询
+  string name = 2;
+  // Status_Null查询全部
+  Status status = 3;
+  //上级商家Id, -1 时查询全部
+  int64 sId = 4;
+}
+
+message ShopInfo{
+  int64 shopId = 1;
+  string name = 2;
+  int64 sId = 3;
+  string addr = 4;
+  string phone = 5;
+  string contacts = 6;
+  Status status = 7;
+  int64 created_at = 8;
+  int64 created_user = 9;
+  int64 updated_at = 10;
+  int64 updated_user = 11;
+}
+
+message ShopListReply{
+  repeated ShopInfo list = 1;
+}
+
+message SystemAddShopRequest{
+  // 仅总后台调用有效
+  int64 sysId = 1;
+  int64 shopId = 2;
+}
+
+
+message SystemAddUserRequest{
+  // 仅总后台调用有效
+  int64 sysId = 1;
+  int64 userId = 2;
+}
+
+message Message{
+  int64 id = 1;
+  string title = 2;
+  string content = 3;
+  enum Level{
+    Null = 0;
+    Normal = 1;
+    Warn = 2;
+    Error = 3;
+  }
+
+  Level level = 4;
+  int64 createAt = 5;
+}

+ 2308 - 0
v2tv/src/grpc/im_grpc_web_pb.js

@@ -0,0 +1,2308 @@
+/**
+ * @fileoverview gRPC-Web generated client stub for im
+ * @enhanceable
+ * @public
+ */
+
+// GENERATED CODE -- DO NOT EDIT!
+
+
+/* eslint-disable */
+// @ts-nocheck
+
+
+const grpc = {};
+grpc.web = require('grpc-web');
+
+const proto = {};
+proto.im = require('./im_pb.js');
+
+/**
+ * @param {string} hostname
+ * @param {?Object} credentials
+ * @param {?Object} options
+ * @constructor
+ * @struct
+ * @final
+ */
+proto.im.ApiClient =
+    function (hostname, credentials, options) {
+        if (!options) options = {};
+        options['format'] = 'text';
+
+        /**
+         * @private @const {!grpc.web.GrpcWebClientBase} The client
+         */
+        this.client_ = new grpc.web.GrpcWebClientBase(options);
+
+        /**
+         * @private @const {string} The hostname
+         */
+        this.hostname_ = hostname;
+
+    };
+
+
+/**
+ * @param {string} hostname
+ * @param {?Object} credentials
+ * @param {?Object} options
+ * @constructor
+ * @struct
+ * @final
+ */
+proto.im.ApiPromiseClient =
+    function (hostname, credentials, options) {
+        if (!options) options = {};
+        options['format'] = 'text';
+
+        /**
+         * @private @const {!grpc.web.GrpcWebClientBase} The client
+         */
+        this.client_ = new grpc.web.GrpcWebClientBase(options);
+
+        /**
+         * @private @const {string} The hostname
+         */
+        this.hostname_ = hostname;
+
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.SignUpRequest,
+ *   !proto.im.SignUpReply>}
+ */
+const methodDescriptor_Api_SignUpUserCode = new grpc.web.MethodDescriptor(
+    '/im.Api/SignUpUserCode',
+    grpc.web.MethodType.UNARY,
+    proto.im.SignUpRequest,
+    proto.im.SignUpReply,
+    /**
+     * @param {!proto.im.SignUpRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SignUpReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.SignUpRequest,
+ *   !proto.im.SignUpReply>}
+ */
+const methodInfo_Api_SignUpUserCode = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.SignUpReply,
+    /**
+     * @param {!proto.im.SignUpRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SignUpReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.SignUpRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.SignUpReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.SignUpReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.signUpUserCode =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SignUpUserCode',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignUpUserCode,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.SignUpRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.SignUpReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.signUpUserCode =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SignUpUserCode',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignUpUserCode);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.SignUpRequest,
+ *   !proto.im.SignUpReply>}
+ */
+const methodDescriptor_Api_SignUpPhone = new grpc.web.MethodDescriptor(
+    '/im.Api/SignUpPhone',
+    grpc.web.MethodType.UNARY,
+    proto.im.SignUpRequest,
+    proto.im.SignUpReply,
+    /**
+     * @param {!proto.im.SignUpRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SignUpReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.SignUpRequest,
+ *   !proto.im.SignUpReply>}
+ */
+const methodInfo_Api_SignUpPhone = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.SignUpReply,
+    /**
+     * @param {!proto.im.SignUpRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SignUpReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.SignUpRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.SignUpReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.SignUpReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.signUpPhone =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SignUpPhone',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignUpPhone,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.SignUpRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.SignUpReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.signUpPhone =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SignUpPhone',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignUpPhone);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.SignInPasswordRequest,
+ *   !proto.im.TokenParam>}
+ */
+const methodDescriptor_Api_SignInUserCode = new grpc.web.MethodDescriptor(
+    '/im.Api/SignInUserCode',
+    grpc.web.MethodType.UNARY,
+    proto.im.SignInPasswordRequest,
+    proto.im.TokenParam,
+    /**
+     * @param {!proto.im.SignInPasswordRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.TokenParam.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.SignInPasswordRequest,
+ *   !proto.im.TokenParam>}
+ */
+const methodInfo_Api_SignInUserCode = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.TokenParam,
+    /**
+     * @param {!proto.im.SignInPasswordRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.TokenParam.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.SignInPasswordRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.TokenParam)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.TokenParam>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.signInUserCode =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SignInUserCode',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignInUserCode,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.SignInPasswordRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.TokenParam>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.signInUserCode =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SignInUserCode',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignInUserCode);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.SignInPasswordRequest,
+ *   !proto.im.TokenParam>}
+ */
+const methodDescriptor_Api_SignInWithPhonePassword = new grpc.web.MethodDescriptor(
+    '/im.Api/SignInWithPhonePassword',
+    grpc.web.MethodType.UNARY,
+    proto.im.SignInPasswordRequest,
+    proto.im.TokenParam,
+    /**
+     * @param {!proto.im.SignInPasswordRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.TokenParam.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.SignInPasswordRequest,
+ *   !proto.im.TokenParam>}
+ */
+const methodInfo_Api_SignInWithPhonePassword = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.TokenParam,
+    /**
+     * @param {!proto.im.SignInPasswordRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.TokenParam.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.SignInPasswordRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.TokenParam)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.TokenParam>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.signInWithPhonePassword =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SignInWithPhonePassword',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignInWithPhonePassword,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.SignInPasswordRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.TokenParam>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.signInWithPhonePassword =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SignInWithPhonePassword',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SignInWithPhonePassword);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.TokenParam,
+ *   !proto.im.SessionCheckReply>}
+ */
+const methodDescriptor_Api_SubSessionCheck = new grpc.web.MethodDescriptor(
+    '/im.Api/SubSessionCheck',
+    grpc.web.MethodType.UNARY,
+    proto.im.TokenParam,
+    proto.im.SessionCheckReply,
+    /**
+     * @param {!proto.im.TokenParam} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SessionCheckReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.TokenParam,
+ *   !proto.im.SessionCheckReply>}
+ */
+const methodInfo_Api_SubSessionCheck = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.SessionCheckReply,
+    /**
+     * @param {!proto.im.TokenParam} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SessionCheckReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.TokenParam} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.SessionCheckReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.SessionCheckReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.subSessionCheck =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SubSessionCheck',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubSessionCheck,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.TokenParam} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.SessionCheckReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.subSessionCheck =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SubSessionCheck',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubSessionCheck);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.PermissionCheck,
+ *   !proto.im.SessionCheckReply>}
+ */
+const methodDescriptor_Api_SubPermissionCheck = new grpc.web.MethodDescriptor(
+    '/im.Api/SubPermissionCheck',
+    grpc.web.MethodType.UNARY,
+    proto.im.PermissionCheck,
+    proto.im.SessionCheckReply,
+    /**
+     * @param {!proto.im.PermissionCheck} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SessionCheckReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.PermissionCheck,
+ *   !proto.im.SessionCheckReply>}
+ */
+const methodInfo_Api_SubPermissionCheck = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.SessionCheckReply,
+    /**
+     * @param {!proto.im.PermissionCheck} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.SessionCheckReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.PermissionCheck} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.SessionCheckReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.SessionCheckReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.subPermissionCheck =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SubPermissionCheck',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubPermissionCheck,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.PermissionCheck} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.SessionCheckReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.subPermissionCheck =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SubPermissionCheck',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubPermissionCheck);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.TokenParam,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_SubSignOut = new grpc.web.MethodDescriptor(
+    '/im.Api/SubSignOut',
+    grpc.web.MethodType.UNARY,
+    proto.im.TokenParam,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.TokenParam} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.TokenParam,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_SubSignOut = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.TokenParam} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.TokenParam} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.subSignOut =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SubSignOut',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubSignOut,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.TokenParam} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.subSignOut =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SubSignOut',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubSignOut);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.SaveServiceListRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_SubServiceSaveList = new grpc.web.MethodDescriptor(
+    '/im.Api/SubServiceSaveList',
+    grpc.web.MethodType.UNARY,
+    proto.im.SaveServiceListRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.SaveServiceListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.SaveServiceListRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_SubServiceSaveList = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.SaveServiceListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.SaveServiceListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.subServiceSaveList =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SubServiceSaveList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubServiceSaveList,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.SaveServiceListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.subServiceSaveList =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SubServiceSaveList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SubServiceSaveList);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.UserListRequest,
+ *   !proto.im.UserListReply>}
+ */
+const methodDescriptor_Api_UserList = new grpc.web.MethodDescriptor(
+    '/im.Api/UserList',
+    grpc.web.MethodType.UNARY,
+    proto.im.UserListRequest,
+    proto.im.UserListReply,
+    /**
+     * @param {!proto.im.UserListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserListReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.UserListRequest,
+ *   !proto.im.UserListReply>}
+ */
+const methodInfo_Api_UserList = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.UserListReply,
+    /**
+     * @param {!proto.im.UserListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserListReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.UserListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.UserListReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.UserListReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.userList =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/UserList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserList,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.UserListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.UserListReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.userList =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/UserList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserList);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.UserGetInfoRequest,
+ *   !proto.im.UserInfo>}
+ */
+const methodDescriptor_Api_UserGetInfo = new grpc.web.MethodDescriptor(
+    '/im.Api/UserGetInfo',
+    grpc.web.MethodType.UNARY,
+    proto.im.UserGetInfoRequest,
+    proto.im.UserInfo,
+    /**
+     * @param {!proto.im.UserGetInfoRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserInfo.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.UserGetInfoRequest,
+ *   !proto.im.UserInfo>}
+ */
+const methodInfo_Api_UserGetInfo = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.UserInfo,
+    /**
+     * @param {!proto.im.UserGetInfoRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserInfo.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.UserGetInfoRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.UserInfo)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.UserInfo>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.userGetInfo =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/UserGetInfo',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserGetInfo,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.UserGetInfoRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.UserInfo>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.userGetInfo =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/UserGetInfo',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserGetInfo);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.UserRolesRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_UserAddRoles = new grpc.web.MethodDescriptor(
+    '/im.Api/UserAddRoles',
+    grpc.web.MethodType.UNARY,
+    proto.im.UserRolesRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.UserRolesRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.UserRolesRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_UserAddRoles = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.UserRolesRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.UserRolesRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.userAddRoles =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/UserAddRoles',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserAddRoles,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.UserRolesRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.userAddRoles =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/UserAddRoles',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserAddRoles);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.UserRolesRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_UserRemoveRoles = new grpc.web.MethodDescriptor(
+    '/im.Api/UserRemoveRoles',
+    grpc.web.MethodType.UNARY,
+    proto.im.UserRolesRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.UserRolesRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.UserRolesRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_UserRemoveRoles = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.UserRolesRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.UserRolesRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.userRemoveRoles =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/UserRemoveRoles',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserRemoveRoles,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.UserRolesRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.userRemoveRoles =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/UserRemoveRoles',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserRemoveRoles);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.UserGetColumnListRequest,
+ *   !proto.im.UserGetColumnListReply>}
+ */
+const methodDescriptor_Api_UserGetColumnList = new grpc.web.MethodDescriptor(
+    '/im.Api/UserGetColumnList',
+    grpc.web.MethodType.UNARY,
+    proto.im.UserGetColumnListRequest,
+    proto.im.UserGetColumnListReply,
+    /**
+     * @param {!proto.im.UserGetColumnListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserGetColumnListReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.UserGetColumnListRequest,
+ *   !proto.im.UserGetColumnListReply>}
+ */
+const methodInfo_Api_UserGetColumnList = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.UserGetColumnListReply,
+    /**
+     * @param {!proto.im.UserGetColumnListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserGetColumnListReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.UserGetColumnListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.UserGetColumnListReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.UserGetColumnListReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.userGetColumnList =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/UserGetColumnList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserGetColumnList,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.UserGetColumnListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.UserGetColumnListReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.userGetColumnList =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/UserGetColumnList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_UserGetColumnList);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.CreateRoleRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_RoleCreate = new grpc.web.MethodDescriptor(
+    '/im.Api/RoleCreate',
+    grpc.web.MethodType.UNARY,
+    proto.im.CreateRoleRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.CreateRoleRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.CreateRoleRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_RoleCreate = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.CreateRoleRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.CreateRoleRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.roleCreate =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/RoleCreate',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleCreate,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.CreateRoleRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.roleCreate =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/RoleCreate',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleCreate);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.RoleListRequest,
+ *   !proto.im.RoleListReply>}
+ */
+const methodDescriptor_Api_RoleList = new grpc.web.MethodDescriptor(
+    '/im.Api/RoleList',
+    grpc.web.MethodType.UNARY,
+    proto.im.RoleListRequest,
+    proto.im.RoleListReply,
+    /**
+     * @param {!proto.im.RoleListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.RoleListReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.RoleListRequest,
+ *   !proto.im.RoleListReply>}
+ */
+const methodInfo_Api_RoleList = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.RoleListReply,
+    /**
+     * @param {!proto.im.RoleListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.RoleListReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.RoleListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.RoleListReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.RoleListReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.roleList =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/RoleList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleList,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.RoleListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.RoleListReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.roleList =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/RoleList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleList);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.Role,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_RoleEdit = new grpc.web.MethodDescriptor(
+    '/im.Api/RoleEdit',
+    grpc.web.MethodType.UNARY,
+    proto.im.Role,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.Role} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.Role,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_RoleEdit = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.Role} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.Role} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.roleEdit =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/RoleEdit',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleEdit,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.Role} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.roleEdit =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/RoleEdit',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleEdit);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.RolePermissionRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_RoleAddPermissions = new grpc.web.MethodDescriptor(
+    '/im.Api/RoleAddPermissions',
+    grpc.web.MethodType.UNARY,
+    proto.im.RolePermissionRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.RolePermissionRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.RolePermissionRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_RoleAddPermissions = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.RolePermissionRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.RolePermissionRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.roleAddPermissions =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/RoleAddPermissions',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleAddPermissions,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.RolePermissionRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.roleAddPermissions =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/RoleAddPermissions',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleAddPermissions);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.RolePermissionRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_RoleRemovePermissions = new grpc.web.MethodDescriptor(
+    '/im.Api/RoleRemovePermissions',
+    grpc.web.MethodType.UNARY,
+    proto.im.RolePermissionRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.RolePermissionRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.RolePermissionRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_RoleRemovePermissions = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.RolePermissionRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.RolePermissionRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.roleRemovePermissions =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/RoleRemovePermissions',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleRemovePermissions,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.RolePermissionRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.roleRemovePermissions =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/RoleRemovePermissions',
+            request,
+            metadata || {},
+            methodDescriptor_Api_RoleRemovePermissions);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.ServiceListRequest,
+ *   !proto.im.ServiceListReply>}
+ */
+const methodDescriptor_Api_ServiceList = new grpc.web.MethodDescriptor(
+    '/im.Api/ServiceList',
+    grpc.web.MethodType.UNARY,
+    proto.im.ServiceListRequest,
+    proto.im.ServiceListReply,
+    /**
+     * @param {!proto.im.ServiceListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.ServiceListReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.ServiceListRequest,
+ *   !proto.im.ServiceListReply>}
+ */
+const methodInfo_Api_ServiceList = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.ServiceListReply,
+    /**
+     * @param {!proto.im.ServiceListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.ServiceListReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.ServiceListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.ServiceListReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.ServiceListReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.serviceList =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/ServiceList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ServiceList,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.ServiceListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.ServiceListReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.serviceList =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/ServiceList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ServiceList);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.ServiceRemoveRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_ServiceRemoveList = new grpc.web.MethodDescriptor(
+    '/im.Api/ServiceRemoveList',
+    grpc.web.MethodType.UNARY,
+    proto.im.ServiceRemoveRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.ServiceRemoveRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.ServiceRemoveRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_ServiceRemoveList = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.ServiceRemoveRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.ServiceRemoveRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.serviceRemoveList =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/ServiceRemoveList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ServiceRemoveList,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.ServiceRemoveRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.serviceRemoveList =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/ServiceRemoveList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ServiceRemoveList);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.CreateShopRequest,
+ *   !proto.im.CreateReply>}
+ */
+const methodDescriptor_Api_ShopCreate = new grpc.web.MethodDescriptor(
+    '/im.Api/ShopCreate',
+    grpc.web.MethodType.UNARY,
+    proto.im.CreateShopRequest,
+    proto.im.CreateReply,
+    /**
+     * @param {!proto.im.CreateShopRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.CreateReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.CreateShopRequest,
+ *   !proto.im.CreateReply>}
+ */
+const methodInfo_Api_ShopCreate = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.CreateReply,
+    /**
+     * @param {!proto.im.CreateShopRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.CreateReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.CreateShopRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.CreateReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.CreateReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.shopCreate =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/ShopCreate',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ShopCreate,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.CreateShopRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.CreateReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.shopCreate =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/ShopCreate',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ShopCreate);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.ShopListRequest,
+ *   !proto.im.ShopListReply>}
+ */
+const methodDescriptor_Api_ShopList = new grpc.web.MethodDescriptor(
+    '/im.Api/ShopList',
+    grpc.web.MethodType.UNARY,
+    proto.im.ShopListRequest,
+    proto.im.ShopListReply,
+    /**
+     * @param {!proto.im.ShopListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.ShopListReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.ShopListRequest,
+ *   !proto.im.ShopListReply>}
+ */
+const methodInfo_Api_ShopList = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.ShopListReply,
+    /**
+     * @param {!proto.im.ShopListRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.ShopListReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.ShopListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.ShopListReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.ShopListReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.shopList =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/ShopList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ShopList,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.ShopListRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.ShopListReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.shopList =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/ShopList',
+            request,
+            metadata || {},
+            methodDescriptor_Api_ShopList);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.SystemAddShopRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_SystemAddShop = new grpc.web.MethodDescriptor(
+    '/im.Api/SystemAddShop',
+    grpc.web.MethodType.UNARY,
+    proto.im.SystemAddShopRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.SystemAddShopRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.SystemAddShopRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_SystemAddShop = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.SystemAddShopRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.SystemAddShopRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.systemAddShop =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SystemAddShop',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SystemAddShop,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.SystemAddShopRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.systemAddShop =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SystemAddShop',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SystemAddShop);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.SystemAddUserRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_SystemAddUser = new grpc.web.MethodDescriptor(
+    '/im.Api/SystemAddUser',
+    grpc.web.MethodType.UNARY,
+    proto.im.SystemAddUserRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.SystemAddUserRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.SystemAddUserRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_SystemAddUser = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.SystemAddUserRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.SystemAddUserRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.systemAddUser =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/SystemAddUser',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SystemAddUser,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.SystemAddUserRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.systemAddUser =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/SystemAddUser',
+            request,
+            metadata || {},
+            methodDescriptor_Api_SystemAddUser);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.CreateSystemRequest,
+ *   !proto.im.TokenParam>}
+ */
+const methodDescriptor_Api_IMSystemCreate = new grpc.web.MethodDescriptor(
+    '/im.Api/IMSystemCreate',
+    grpc.web.MethodType.UNARY,
+    proto.im.CreateSystemRequest,
+    proto.im.TokenParam,
+    /**
+     * @param {!proto.im.CreateSystemRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.TokenParam.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.CreateSystemRequest,
+ *   !proto.im.TokenParam>}
+ */
+const methodInfo_Api_IMSystemCreate = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.TokenParam,
+    /**
+     * @param {!proto.im.CreateSystemRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.TokenParam.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.CreateSystemRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.TokenParam)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.TokenParam>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.iMSystemCreate =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/IMSystemCreate',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMSystemCreate,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.CreateSystemRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.TokenParam>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.iMSystemCreate =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/IMSystemCreate',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMSystemCreate);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.DefaultRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodDescriptor_Api_IMSignOut = new grpc.web.MethodDescriptor(
+    '/im.Api/IMSignOut',
+    grpc.web.MethodType.UNARY,
+    proto.im.DefaultRequest,
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.DefaultRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.DefaultRequest,
+ *   !proto.im.DefaultReply>}
+ */
+const methodInfo_Api_IMSignOut = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.DefaultReply,
+    /**
+     * @param {!proto.im.DefaultRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.DefaultReply.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.DefaultRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.DefaultReply)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.DefaultReply>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.iMSignOut =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/IMSignOut',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMSignOut,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.DefaultRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.DefaultReply>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.iMSignOut =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/IMSignOut',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMSignOut);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.DefaultRequest,
+ *   !proto.im.UserInfo>}
+ */
+const methodDescriptor_Api_IMSelfInfo = new grpc.web.MethodDescriptor(
+    '/im.Api/IMSelfInfo',
+    grpc.web.MethodType.UNARY,
+    proto.im.DefaultRequest,
+    proto.im.UserInfo,
+    /**
+     * @param {!proto.im.DefaultRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserInfo.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.DefaultRequest,
+ *   !proto.im.UserInfo>}
+ */
+const methodInfo_Api_IMSelfInfo = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.UserInfo,
+    /**
+     * @param {!proto.im.DefaultRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.UserInfo.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.DefaultRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @param {function(?grpc.web.Error, ?proto.im.UserInfo)}
+ *     callback The callback function(error, response)
+ * @return {!grpc.web.ClientReadableStream<!proto.im.UserInfo>|undefined}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.iMSelfInfo =
+    function (request, metadata, callback) {
+        return this.client_.rpcCall(this.hostname_ +
+            '/im.Api/IMSelfInfo',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMSelfInfo,
+            callback);
+    };
+
+
+/**
+ * @param {!proto.im.DefaultRequest} request The
+ *     request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!Promise<!proto.im.UserInfo>}
+ *     Promise that resolves to the response
+ */
+proto.im.ApiPromiseClient.prototype.iMSelfInfo =
+    function (request, metadata) {
+        return this.client_.unaryCall(this.hostname_ +
+            '/im.Api/IMSelfInfo',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMSelfInfo);
+    };
+
+
+/**
+ * @const
+ * @type {!grpc.web.MethodDescriptor<
+ *   !proto.im.DefaultRequest,
+ *   !proto.im.Message>}
+ */
+const methodDescriptor_Api_IMMessageRcv = new grpc.web.MethodDescriptor(
+    '/im.Api/IMMessageRcv',
+    grpc.web.MethodType.SERVER_STREAMING,
+    proto.im.DefaultRequest,
+    proto.im.Message,
+    /**
+     * @param {!proto.im.DefaultRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.Message.deserializeBinary
+);
+
+
+/**
+ * @const
+ * @type {!grpc.web.AbstractClientBase.MethodInfo<
+ *   !proto.im.DefaultRequest,
+ *   !proto.im.Message>}
+ */
+const methodInfo_Api_IMMessageRcv = new grpc.web.AbstractClientBase.MethodInfo(
+    proto.im.Message,
+    /**
+     * @param {!proto.im.DefaultRequest} request
+     * @return {!Uint8Array}
+     */
+    function (request) {
+        return request.serializeBinary();
+    },
+    proto.im.Message.deserializeBinary
+);
+
+
+/**
+ * @param {!proto.im.DefaultRequest} request The request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!grpc.web.ClientReadableStream<!proto.im.Message>}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiClient.prototype.iMMessageRcv =
+    function (request, metadata) {
+        return this.client_.serverStreaming(this.hostname_ +
+            '/im.Api/IMMessageRcv',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMMessageRcv);
+    };
+
+
+/**
+ * @param {!proto.im.DefaultRequest} request The request proto
+ * @param {?Object<string, string>} metadata User defined
+ *     call metadata
+ * @return {!grpc.web.ClientReadableStream<!proto.im.Message>}
+ *     The XHR Node Readable Stream
+ */
+proto.im.ApiPromiseClient.prototype.iMMessageRcv =
+    function (request, metadata) {
+        return this.client_.serverStreaming(this.hostname_ +
+            '/im.Api/IMMessageRcv',
+            request,
+            metadata || {},
+            methodDescriptor_Api_IMMessageRcv);
+    };
+
+
+module.exports = proto.im;
+

+ 7545 - 0
v2tv/src/grpc/im_pb.js

@@ -0,0 +1,7545 @@
+// source: im.proto
+/**
+ * @fileoverview
+ * @enhanceable
+ * @suppress {missingRequire} reports error on implicit type usages.
+ * @suppress {messageConventions} JS Compiler reports an error if a variable or
+ *     field starts with 'MSG_' and isn't a translatable message.
+ * @public
+ */
+// GENERATED CODE -- DO NOT EDIT!
+/* eslint-disable */
+// @ts-nocheck
+
+var jspb = require('google-protobuf');
+var goog = jspb;
+var global = Function('return this')();
+
+goog.exportSymbol('proto.im.Column', null, global);
+goog.exportSymbol('proto.im.CreateReply', null, global);
+goog.exportSymbol('proto.im.CreateRoleRequest', null, global);
+goog.exportSymbol('proto.im.CreateShopRequest', null, global);
+goog.exportSymbol('proto.im.CreateSystemRequest', null, global);
+goog.exportSymbol('proto.im.DefaultReply', null, global);
+goog.exportSymbol('proto.im.DefaultRequest', null, global);
+goog.exportSymbol('proto.im.ErrorCode', null, global);
+goog.exportSymbol('proto.im.Message', null, global);
+goog.exportSymbol('proto.im.Message.Level', null, global);
+goog.exportSymbol('proto.im.PermissionCheck', null, global);
+goog.exportSymbol('proto.im.Role', null, global);
+goog.exportSymbol('proto.im.RoleListReply', null, global);
+goog.exportSymbol('proto.im.RoleListRequest', null, global);
+goog.exportSymbol('proto.im.RolePermissionRequest', null, global);
+goog.exportSymbol('proto.im.SaveServiceListRequest', null, global);
+goog.exportSymbol('proto.im.Service', null, global);
+goog.exportSymbol('proto.im.ServiceListReply', null, global);
+goog.exportSymbol('proto.im.ServiceListRequest', null, global);
+goog.exportSymbol('proto.im.ServiceRemoveRequest', null, global);
+goog.exportSymbol('proto.im.SessionCheckReply', null, global);
+goog.exportSymbol('proto.im.ShopInfo', null, global);
+goog.exportSymbol('proto.im.ShopListReply', null, global);
+goog.exportSymbol('proto.im.ShopListRequest', null, global);
+goog.exportSymbol('proto.im.SignInPasswordRequest', null, global);
+goog.exportSymbol('proto.im.SignUpReply', null, global);
+goog.exportSymbol('proto.im.SignUpRequest', null, global);
+goog.exportSymbol('proto.im.Status', null, global);
+goog.exportSymbol('proto.im.SystemAddShopRequest', null, global);
+goog.exportSymbol('proto.im.SystemAddUserRequest', null, global);
+goog.exportSymbol('proto.im.TokenParam', null, global);
+goog.exportSymbol('proto.im.UserGetColumnListReply', null, global);
+goog.exportSymbol('proto.im.UserGetColumnListRequest', null, global);
+goog.exportSymbol('proto.im.UserGetInfoRequest', null, global);
+goog.exportSymbol('proto.im.UserInfo', null, global);
+goog.exportSymbol('proto.im.UserListReply', null, global);
+goog.exportSymbol('proto.im.UserListRequest', null, global);
+goog.exportSymbol('proto.im.UserRolesRequest', null, global);
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.DefaultRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.DefaultRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.DefaultRequest.displayName = 'proto.im.DefaultRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.TokenParam = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.TokenParam, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.TokenParam.displayName = 'proto.im.TokenParam';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.DefaultReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.DefaultReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.DefaultReply.displayName = 'proto.im.DefaultReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.SignUpReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.SignUpReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.SignUpReply.displayName = 'proto.im.SignUpReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.SignInPasswordRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.SignInPasswordRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.SignInPasswordRequest.displayName = 'proto.im.SignInPasswordRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.SignUpRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.SignUpRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.SignUpRequest.displayName = 'proto.im.SignUpRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.UserInfo = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.UserInfo, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.UserInfo.displayName = 'proto.im.UserInfo';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.CreateReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.CreateReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.CreateReply.displayName = 'proto.im.CreateReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.PermissionCheck = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.PermissionCheck, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.PermissionCheck.displayName = 'proto.im.PermissionCheck';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.SessionCheckReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.SessionCheckReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.SessionCheckReply.displayName = 'proto.im.SessionCheckReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.Service = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.Service, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.Service.displayName = 'proto.im.Service';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.SaveServiceListRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.SaveServiceListRequest.repeatedFields_, null);
+};
+goog.inherits(proto.im.SaveServiceListRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.SaveServiceListRequest.displayName = 'proto.im.SaveServiceListRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.CreateSystemRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.CreateSystemRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.CreateSystemRequest.displayName = 'proto.im.CreateSystemRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.UserGetColumnListRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.UserGetColumnListRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.UserGetColumnListRequest.displayName = 'proto.im.UserGetColumnListRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.Column = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.Column, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.Column.displayName = 'proto.im.Column';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.UserGetColumnListReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.UserGetColumnListReply.repeatedFields_, null);
+};
+goog.inherits(proto.im.UserGetColumnListReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.UserGetColumnListReply.displayName = 'proto.im.UserGetColumnListReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.CreateRoleRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.CreateRoleRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.CreateRoleRequest.displayName = 'proto.im.CreateRoleRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.Role = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.Role, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.Role.displayName = 'proto.im.Role';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.RoleListRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.RoleListRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.RoleListRequest.displayName = 'proto.im.RoleListRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.UserListRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.UserListRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.UserListRequest.displayName = 'proto.im.UserListRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.UserListReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.UserListReply.repeatedFields_, null);
+};
+goog.inherits(proto.im.UserListReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.UserListReply.displayName = 'proto.im.UserListReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.UserGetInfoRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.UserGetInfoRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.UserGetInfoRequest.displayName = 'proto.im.UserGetInfoRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.UserRolesRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.UserRolesRequest.repeatedFields_, null);
+};
+goog.inherits(proto.im.UserRolesRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.UserRolesRequest.displayName = 'proto.im.UserRolesRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.RoleListReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.RoleListReply.repeatedFields_, null);
+};
+goog.inherits(proto.im.RoleListReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.RoleListReply.displayName = 'proto.im.RoleListReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.RolePermissionRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.RolePermissionRequest.repeatedFields_, null);
+};
+goog.inherits(proto.im.RolePermissionRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.RolePermissionRequest.displayName = 'proto.im.RolePermissionRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.ServiceListRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.ServiceListRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.ServiceListRequest.displayName = 'proto.im.ServiceListRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.ServiceListReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.ServiceListReply.repeatedFields_, null);
+};
+goog.inherits(proto.im.ServiceListReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.ServiceListReply.displayName = 'proto.im.ServiceListReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.ServiceRemoveRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.ServiceRemoveRequest.repeatedFields_, null);
+};
+goog.inherits(proto.im.ServiceRemoveRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.ServiceRemoveRequest.displayName = 'proto.im.ServiceRemoveRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.CreateShopRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.CreateShopRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.CreateShopRequest.displayName = 'proto.im.CreateShopRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.ShopListRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.ShopListRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.ShopListRequest.displayName = 'proto.im.ShopListRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.ShopInfo = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.ShopInfo, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.ShopInfo.displayName = 'proto.im.ShopInfo';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.ShopListReply = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, proto.im.ShopListReply.repeatedFields_, null);
+};
+goog.inherits(proto.im.ShopListReply, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.ShopListReply.displayName = 'proto.im.ShopListReply';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.SystemAddShopRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.SystemAddShopRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.SystemAddShopRequest.displayName = 'proto.im.SystemAddShopRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.SystemAddUserRequest = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.SystemAddUserRequest, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.SystemAddUserRequest.displayName = 'proto.im.SystemAddUserRequest';
+}
+/**
+ * Generated by JsPbCodeGenerator.
+ * @param {Array=} opt_data Optional initial data array, typically from a
+ * server response, or constructed directly in Javascript. The array is used
+ * in place and becomes part of the constructed object. It is not cloned.
+ * If no data is provided, the constructed object will be empty, but still
+ * valid.
+ * @extends {jspb.Message}
+ * @constructor
+ */
+proto.im.Message = function (opt_data) {
+    jspb.Message.initialize(this, opt_data, 0, -1, null, null);
+};
+goog.inherits(proto.im.Message, jspb.Message);
+if (goog.DEBUG && !COMPILED) {
+    /**
+     * @public
+     * @override
+     */
+    proto.im.Message.displayName = 'proto.im.Message';
+}
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.DefaultRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.DefaultRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.DefaultRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.DefaultRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {};
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.DefaultRequest}
+ */
+proto.im.DefaultRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.DefaultRequest;
+    return proto.im.DefaultRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.DefaultRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.DefaultRequest}
+ */
+proto.im.DefaultRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.DefaultRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.DefaultRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.DefaultRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.DefaultRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.TokenParam.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.TokenParam.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.TokenParam} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.TokenParam.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            token: jspb.Message.getFieldWithDefault(msg, 1, "")
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.TokenParam}
+ */
+proto.im.TokenParam.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.TokenParam;
+    return proto.im.TokenParam.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.TokenParam} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.TokenParam}
+ */
+proto.im.TokenParam.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setToken(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.TokenParam.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.TokenParam.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.TokenParam} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.TokenParam.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getToken();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string token = 1;
+ * @return {string}
+ */
+proto.im.TokenParam.prototype.getToken = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.TokenParam} returns this
+ */
+proto.im.TokenParam.prototype.setToken = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.DefaultReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.DefaultReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.DefaultReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.DefaultReply.toObject = function (includeInstance, msg) {
+        var f, obj = {};
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.DefaultReply}
+ */
+proto.im.DefaultReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.DefaultReply;
+    return proto.im.DefaultReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.DefaultReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.DefaultReply}
+ */
+proto.im.DefaultReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.DefaultReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.DefaultReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.DefaultReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.DefaultReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.SignUpReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.SignUpReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.SignUpReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.SignUpReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            userid: jspb.Message.getFieldWithDefault(msg, 1, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.SignUpReply}
+ */
+proto.im.SignUpReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.SignUpReply;
+    return proto.im.SignUpReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.SignUpReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.SignUpReply}
+ */
+proto.im.SignUpReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUserid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.SignUpReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.SignUpReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.SignUpReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.SignUpReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getUserid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 userId = 1;
+ * @return {number}
+ */
+proto.im.SignUpReply.prototype.getUserid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SignUpReply} returns this
+ */
+proto.im.SignUpReply.prototype.setUserid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.SignInPasswordRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.SignInPasswordRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.SignInPasswordRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.SignInPasswordRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            auth: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            password: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            sysid: jspb.Message.getFieldWithDefault(msg, 3, 0),
+            expirationsec: jspb.Message.getFieldWithDefault(msg, 4, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.SignInPasswordRequest}
+ */
+proto.im.SignInPasswordRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.SignInPasswordRequest;
+    return proto.im.SignInPasswordRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.SignInPasswordRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.SignInPasswordRequest}
+ */
+proto.im.SignInPasswordRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setAuth(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setPassword(value);
+                break;
+            case 3:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            case 4:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setExpirationsec(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.SignInPasswordRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.SignInPasswordRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.SignInPasswordRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.SignInPasswordRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getAuth();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getPassword();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            3,
+            f
+        );
+    }
+    f = message.getExpirationsec();
+    if (f !== 0) {
+        writer.writeInt64(
+            4,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string auth = 1;
+ * @return {string}
+ */
+proto.im.SignInPasswordRequest.prototype.getAuth = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignInPasswordRequest} returns this
+ */
+proto.im.SignInPasswordRequest.prototype.setAuth = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string password = 2;
+ * @return {string}
+ */
+proto.im.SignInPasswordRequest.prototype.getPassword = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignInPasswordRequest} returns this
+ */
+proto.im.SignInPasswordRequest.prototype.setPassword = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional int64 sysId = 3;
+ * @return {number}
+ */
+proto.im.SignInPasswordRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SignInPasswordRequest} returns this
+ */
+proto.im.SignInPasswordRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 3, value);
+};
+
+
+/**
+ * optional int64 expirationSec = 4;
+ * @return {number}
+ */
+proto.im.SignInPasswordRequest.prototype.getExpirationsec = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SignInPasswordRequest} returns this
+ */
+proto.im.SignInPasswordRequest.prototype.setExpirationsec = function (value) {
+    return jspb.Message.setProto3IntField(this, 4, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.SignUpRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.SignUpRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.SignUpRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.SignUpRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            usercode: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            name: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            email: jspb.Message.getFieldWithDefault(msg, 3, ""),
+            phone: jspb.Message.getFieldWithDefault(msg, 4, ""),
+            wxopenid: jspb.Message.getFieldWithDefault(msg, 5, ""),
+            qq: jspb.Message.getFieldWithDefault(msg, 6, ""),
+            password: jspb.Message.getFieldWithDefault(msg, 7, ""),
+            question: jspb.Message.getFieldWithDefault(msg, 8, ""),
+            answer: jspb.Message.getFieldWithDefault(msg, 9, ""),
+            memo: jspb.Message.getFieldWithDefault(msg, 10, "")
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.SignUpRequest}
+ */
+proto.im.SignUpRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.SignUpRequest;
+    return proto.im.SignUpRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.SignUpRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.SignUpRequest}
+ */
+proto.im.SignUpRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setUsercode(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 3:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setEmail(value);
+                break;
+            case 4:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setPhone(value);
+                break;
+            case 5:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setWxopenid(value);
+                break;
+            case 6:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setQq(value);
+                break;
+            case 7:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setPassword(value);
+                break;
+            case 8:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setQuestion(value);
+                break;
+            case 9:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setAnswer(value);
+                break;
+            case 10:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setMemo(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.SignUpRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.SignUpRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.SignUpRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.SignUpRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getUsercode();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getEmail();
+    if (f.length > 0) {
+        writer.writeString(
+            3,
+            f
+        );
+    }
+    f = message.getPhone();
+    if (f.length > 0) {
+        writer.writeString(
+            4,
+            f
+        );
+    }
+    f = message.getWxopenid();
+    if (f.length > 0) {
+        writer.writeString(
+            5,
+            f
+        );
+    }
+    f = message.getQq();
+    if (f.length > 0) {
+        writer.writeString(
+            6,
+            f
+        );
+    }
+    f = message.getPassword();
+    if (f.length > 0) {
+        writer.writeString(
+            7,
+            f
+        );
+    }
+    f = message.getQuestion();
+    if (f.length > 0) {
+        writer.writeString(
+            8,
+            f
+        );
+    }
+    f = message.getAnswer();
+    if (f.length > 0) {
+        writer.writeString(
+            9,
+            f
+        );
+    }
+    f = message.getMemo();
+    if (f.length > 0) {
+        writer.writeString(
+            10,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string userCode = 1;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getUsercode = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setUsercode = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string name = 2;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional string email = 3;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getEmail = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setEmail = function (value) {
+    return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+
+/**
+ * optional string phone = 4;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getPhone = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setPhone = function (value) {
+    return jspb.Message.setProto3StringField(this, 4, value);
+};
+
+
+/**
+ * optional string wxOpenId = 5;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getWxopenid = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setWxopenid = function (value) {
+    return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
+/**
+ * optional string qq = 6;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getQq = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setQq = function (value) {
+    return jspb.Message.setProto3StringField(this, 6, value);
+};
+
+
+/**
+ * optional string password = 7;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getPassword = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setPassword = function (value) {
+    return jspb.Message.setProto3StringField(this, 7, value);
+};
+
+
+/**
+ * optional string question = 8;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getQuestion = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 8, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setQuestion = function (value) {
+    return jspb.Message.setProto3StringField(this, 8, value);
+};
+
+
+/**
+ * optional string answer = 9;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getAnswer = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 9, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setAnswer = function (value) {
+    return jspb.Message.setProto3StringField(this, 9, value);
+};
+
+
+/**
+ * optional string memo = 10;
+ * @return {string}
+ */
+proto.im.SignUpRequest.prototype.getMemo = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 10, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.SignUpRequest} returns this
+ */
+proto.im.SignUpRequest.prototype.setMemo = function (value) {
+    return jspb.Message.setProto3StringField(this, 10, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.UserInfo.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.UserInfo.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.UserInfo} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.UserInfo.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            id: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            usercode: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            name: jspb.Message.getFieldWithDefault(msg, 3, ""),
+            email: jspb.Message.getFieldWithDefault(msg, 4, ""),
+            phone: jspb.Message.getFieldWithDefault(msg, 5, ""),
+            qq: jspb.Message.getFieldWithDefault(msg, 7, ""),
+            memo: jspb.Message.getFieldWithDefault(msg, 11, ""),
+            status: jspb.Message.getFieldWithDefault(msg, 12, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.UserInfo}
+ */
+proto.im.UserInfo.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.UserInfo;
+    return proto.im.UserInfo.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.UserInfo} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.UserInfo}
+ */
+proto.im.UserInfo.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setId(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setUsercode(value);
+                break;
+            case 3:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 4:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setEmail(value);
+                break;
+            case 5:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setPhone(value);
+                break;
+            case 7:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setQq(value);
+                break;
+            case 11:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setMemo(value);
+                break;
+            case 12:
+                var value = /** @type {!proto.im.Status} */ (reader.readEnum());
+                msg.setStatus(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.UserInfo.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.UserInfo.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.UserInfo} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.UserInfo.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getId();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getUsercode();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            3,
+            f
+        );
+    }
+    f = message.getEmail();
+    if (f.length > 0) {
+        writer.writeString(
+            4,
+            f
+        );
+    }
+    f = message.getPhone();
+    if (f.length > 0) {
+        writer.writeString(
+            5,
+            f
+        );
+    }
+    f = message.getQq();
+    if (f.length > 0) {
+        writer.writeString(
+            7,
+            f
+        );
+    }
+    f = message.getMemo();
+    if (f.length > 0) {
+        writer.writeString(
+            11,
+            f
+        );
+    }
+    f = message.getStatus();
+    if (f !== 0.0) {
+        writer.writeEnum(
+            12,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 id = 1;
+ * @return {number}
+ */
+proto.im.UserInfo.prototype.getId = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setId = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional string userCode = 2;
+ * @return {string}
+ */
+proto.im.UserInfo.prototype.getUsercode = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setUsercode = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional string name = 3;
+ * @return {string}
+ */
+proto.im.UserInfo.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+
+/**
+ * optional string email = 4;
+ * @return {string}
+ */
+proto.im.UserInfo.prototype.getEmail = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setEmail = function (value) {
+    return jspb.Message.setProto3StringField(this, 4, value);
+};
+
+
+/**
+ * optional string phone = 5;
+ * @return {string}
+ */
+proto.im.UserInfo.prototype.getPhone = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setPhone = function (value) {
+    return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
+/**
+ * optional string qq = 7;
+ * @return {string}
+ */
+proto.im.UserInfo.prototype.getQq = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 7, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setQq = function (value) {
+    return jspb.Message.setProto3StringField(this, 7, value);
+};
+
+
+/**
+ * optional string memo = 11;
+ * @return {string}
+ */
+proto.im.UserInfo.prototype.getMemo = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 11, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setMemo = function (value) {
+    return jspb.Message.setProto3StringField(this, 11, value);
+};
+
+
+/**
+ * optional Status status = 12;
+ * @return {!proto.im.Status}
+ */
+proto.im.UserInfo.prototype.getStatus = function () {
+    return /** @type {!proto.im.Status} */ (jspb.Message.getFieldWithDefault(this, 12, 0));
+};
+
+
+/**
+ * @param {!proto.im.Status} value
+ * @return {!proto.im.UserInfo} returns this
+ */
+proto.im.UserInfo.prototype.setStatus = function (value) {
+    return jspb.Message.setProto3EnumField(this, 12, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.CreateReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.CreateReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.CreateReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.CreateReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            id: jspb.Message.getFieldWithDefault(msg, 1, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.CreateReply}
+ */
+proto.im.CreateReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.CreateReply;
+    return proto.im.CreateReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.CreateReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.CreateReply}
+ */
+proto.im.CreateReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setId(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.CreateReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.CreateReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.CreateReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.CreateReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getId();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 id = 1;
+ * @return {number}
+ */
+proto.im.CreateReply.prototype.getId = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.CreateReply} returns this
+ */
+proto.im.CreateReply.prototype.setId = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.PermissionCheck.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.PermissionCheck.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.PermissionCheck} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.PermissionCheck.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            token: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            servicepath: jspb.Message.getFieldWithDefault(msg, 2, "")
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.PermissionCheck}
+ */
+proto.im.PermissionCheck.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.PermissionCheck;
+    return proto.im.PermissionCheck.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.PermissionCheck} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.PermissionCheck}
+ */
+proto.im.PermissionCheck.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setToken(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setServicepath(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.PermissionCheck.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.PermissionCheck.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.PermissionCheck} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.PermissionCheck.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getToken();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getServicepath();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string token = 1;
+ * @return {string}
+ */
+proto.im.PermissionCheck.prototype.getToken = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.PermissionCheck} returns this
+ */
+proto.im.PermissionCheck.prototype.setToken = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string servicePath = 2;
+ * @return {string}
+ */
+proto.im.PermissionCheck.prototype.getServicepath = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.PermissionCheck} returns this
+ */
+proto.im.PermissionCheck.prototype.setServicepath = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.SessionCheckReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.SessionCheckReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.SessionCheckReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.SessionCheckReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            userid: jspb.Message.getFieldWithDefault(msg, 1, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.SessionCheckReply}
+ */
+proto.im.SessionCheckReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.SessionCheckReply;
+    return proto.im.SessionCheckReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.SessionCheckReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.SessionCheckReply}
+ */
+proto.im.SessionCheckReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUserid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.SessionCheckReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.SessionCheckReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.SessionCheckReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.SessionCheckReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getUserid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 userId = 1;
+ * @return {number}
+ */
+proto.im.SessionCheckReply.prototype.getUserid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SessionCheckReply} returns this
+ */
+proto.im.SessionCheckReply.prototype.setUserid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.Service.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.Service.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.Service} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.Service.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            path: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            memo: jspb.Message.getFieldWithDefault(msg, 2, "")
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.Service}
+ */
+proto.im.Service.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.Service;
+    return proto.im.Service.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.Service} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.Service}
+ */
+proto.im.Service.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setPath(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setMemo(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.Service.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.Service.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.Service} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.Service.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getPath();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getMemo();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string path = 1;
+ * @return {string}
+ */
+proto.im.Service.prototype.getPath = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Service} returns this
+ */
+proto.im.Service.prototype.setPath = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string memo = 2;
+ * @return {string}
+ */
+proto.im.Service.prototype.getMemo = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Service} returns this
+ */
+proto.im.Service.prototype.setMemo = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.SaveServiceListRequest.repeatedFields_ = [1];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.SaveServiceListRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.SaveServiceListRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.SaveServiceListRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.SaveServiceListRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            listList: jspb.Message.toObjectList(msg.getListList(),
+                proto.im.Service.toObject, includeInstance)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.SaveServiceListRequest}
+ */
+proto.im.SaveServiceListRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.SaveServiceListRequest;
+    return proto.im.SaveServiceListRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.SaveServiceListRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.SaveServiceListRequest}
+ */
+proto.im.SaveServiceListRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = new proto.im.Service;
+                reader.readMessage(value, proto.im.Service.deserializeBinaryFromReader);
+                msg.addList(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.SaveServiceListRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.SaveServiceListRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.SaveServiceListRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.SaveServiceListRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getListList();
+    if (f.length > 0) {
+        writer.writeRepeatedMessage(
+            1,
+            f,
+            proto.im.Service.serializeBinaryToWriter
+        );
+    }
+};
+
+
+/**
+ * repeated Service list = 1;
+ * @return {!Array<!proto.im.Service>}
+ */
+proto.im.SaveServiceListRequest.prototype.getListList = function () {
+    return /** @type{!Array<!proto.im.Service>} */ (
+        jspb.Message.getRepeatedWrapperField(this, proto.im.Service, 1));
+};
+
+
+/**
+ * @param {!Array<!proto.im.Service>} value
+ * @return {!proto.im.SaveServiceListRequest} returns this
+ */
+proto.im.SaveServiceListRequest.prototype.setListList = function (value) {
+    return jspb.Message.setRepeatedWrapperField(this, 1, value);
+};
+
+
+/**
+ * @param {!proto.im.Service=} opt_value
+ * @param {number=} opt_index
+ * @return {!proto.im.Service}
+ */
+proto.im.SaveServiceListRequest.prototype.addList = function (opt_value, opt_index) {
+    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.im.Service, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.SaveServiceListRequest} returns this
+ */
+proto.im.SaveServiceListRequest.prototype.clearListList = function () {
+    return this.setListList([]);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.CreateSystemRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.CreateSystemRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.CreateSystemRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.CreateSystemRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            fullname: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            shortname: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            sysurl: jspb.Message.getFieldWithDefault(msg, 3, ""),
+            memo: jspb.Message.getFieldWithDefault(msg, 4, "")
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.CreateSystemRequest}
+ */
+proto.im.CreateSystemRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.CreateSystemRequest;
+    return proto.im.CreateSystemRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.CreateSystemRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.CreateSystemRequest}
+ */
+proto.im.CreateSystemRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setFullname(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setShortname(value);
+                break;
+            case 3:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setSysurl(value);
+                break;
+            case 4:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setMemo(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.CreateSystemRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.CreateSystemRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.CreateSystemRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.CreateSystemRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getFullname();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getShortname();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getSysurl();
+    if (f.length > 0) {
+        writer.writeString(
+            3,
+            f
+        );
+    }
+    f = message.getMemo();
+    if (f.length > 0) {
+        writer.writeString(
+            4,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string fullName = 1;
+ * @return {string}
+ */
+proto.im.CreateSystemRequest.prototype.getFullname = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateSystemRequest} returns this
+ */
+proto.im.CreateSystemRequest.prototype.setFullname = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string shortname = 2;
+ * @return {string}
+ */
+proto.im.CreateSystemRequest.prototype.getShortname = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateSystemRequest} returns this
+ */
+proto.im.CreateSystemRequest.prototype.setShortname = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional string sysUrl = 3;
+ * @return {string}
+ */
+proto.im.CreateSystemRequest.prototype.getSysurl = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateSystemRequest} returns this
+ */
+proto.im.CreateSystemRequest.prototype.setSysurl = function (value) {
+    return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+
+/**
+ * optional string memo = 4;
+ * @return {string}
+ */
+proto.im.CreateSystemRequest.prototype.getMemo = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateSystemRequest} returns this
+ */
+proto.im.CreateSystemRequest.prototype.setMemo = function (value) {
+    return jspb.Message.setProto3StringField(this, 4, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.UserGetColumnListRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.UserGetColumnListRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.UserGetColumnListRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.UserGetColumnListRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            userid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            parentid: jspb.Message.getFieldWithDefault(msg, 2, 0),
+            sysid: jspb.Message.getFieldWithDefault(msg, 3, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.UserGetColumnListRequest}
+ */
+proto.im.UserGetColumnListRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.UserGetColumnListRequest;
+    return proto.im.UserGetColumnListRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.UserGetColumnListRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.UserGetColumnListRequest}
+ */
+proto.im.UserGetColumnListRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUserid(value);
+                break;
+            case 2:
+                var value = /** @type {number} */ (reader.readInt32());
+                msg.setParentid(value);
+                break;
+            case 3:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.UserGetColumnListRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.UserGetColumnListRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.UserGetColumnListRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.UserGetColumnListRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getUserid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getParentid();
+    if (f !== 0) {
+        writer.writeInt32(
+            2,
+            f
+        );
+    }
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            3,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 userId = 1;
+ * @return {number}
+ */
+proto.im.UserGetColumnListRequest.prototype.getUserid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserGetColumnListRequest} returns this
+ */
+proto.im.UserGetColumnListRequest.prototype.setUserid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional int32 parentId = 2;
+ * @return {number}
+ */
+proto.im.UserGetColumnListRequest.prototype.getParentid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserGetColumnListRequest} returns this
+ */
+proto.im.UserGetColumnListRequest.prototype.setParentid = function (value) {
+    return jspb.Message.setProto3IntField(this, 2, value);
+};
+
+
+/**
+ * optional int64 sysId = 3;
+ * @return {number}
+ */
+proto.im.UserGetColumnListRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserGetColumnListRequest} returns this
+ */
+proto.im.UserGetColumnListRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 3, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.Column.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.Column.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.Column} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.Column.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            name: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            url: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            code: jspb.Message.getFieldWithDefault(msg, 3, ""),
+            sn: jspb.Message.getFieldWithDefault(msg, 4, 0),
+            status: jspb.Message.getFieldWithDefault(msg, 5, 0),
+            navshow: jspb.Message.getBooleanFieldWithDefault(msg, 6, false),
+            id: jspb.Message.getFieldWithDefault(msg, 7, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.Column}
+ */
+proto.im.Column.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.Column;
+    return proto.im.Column.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.Column} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.Column}
+ */
+proto.im.Column.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setUrl(value);
+                break;
+            case 3:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setCode(value);
+                break;
+            case 4:
+                var value = /** @type {number} */ (reader.readInt32());
+                msg.setSn(value);
+                break;
+            case 5:
+                var value = /** @type {!proto.im.Status} */ (reader.readEnum());
+                msg.setStatus(value);
+                break;
+            case 6:
+                var value = /** @type {boolean} */ (reader.readBool());
+                msg.setNavshow(value);
+                break;
+            case 7:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setId(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.Column.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.Column.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.Column} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.Column.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getUrl();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getCode();
+    if (f.length > 0) {
+        writer.writeString(
+            3,
+            f
+        );
+    }
+    f = message.getSn();
+    if (f !== 0) {
+        writer.writeInt32(
+            4,
+            f
+        );
+    }
+    f = message.getStatus();
+    if (f !== 0.0) {
+        writer.writeEnum(
+            5,
+            f
+        );
+    }
+    f = message.getNavshow();
+    if (f) {
+        writer.writeBool(
+            6,
+            f
+        );
+    }
+    f = message.getId();
+    if (f !== 0) {
+        writer.writeInt64(
+            7,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string name = 1;
+ * @return {string}
+ */
+proto.im.Column.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Column} returns this
+ */
+proto.im.Column.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string url = 2;
+ * @return {string}
+ */
+proto.im.Column.prototype.getUrl = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Column} returns this
+ */
+proto.im.Column.prototype.setUrl = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional string code = 3;
+ * @return {string}
+ */
+proto.im.Column.prototype.getCode = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Column} returns this
+ */
+proto.im.Column.prototype.setCode = function (value) {
+    return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+
+/**
+ * optional int32 sn = 4;
+ * @return {number}
+ */
+proto.im.Column.prototype.getSn = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.Column} returns this
+ */
+proto.im.Column.prototype.setSn = function (value) {
+    return jspb.Message.setProto3IntField(this, 4, value);
+};
+
+
+/**
+ * optional Status status = 5;
+ * @return {!proto.im.Status}
+ */
+proto.im.Column.prototype.getStatus = function () {
+    return /** @type {!proto.im.Status} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
+};
+
+
+/**
+ * @param {!proto.im.Status} value
+ * @return {!proto.im.Column} returns this
+ */
+proto.im.Column.prototype.setStatus = function (value) {
+    return jspb.Message.setProto3EnumField(this, 5, value);
+};
+
+
+/**
+ * optional bool navShow = 6;
+ * @return {boolean}
+ */
+proto.im.Column.prototype.getNavshow = function () {
+    return /** @type {boolean} */ (jspb.Message.getBooleanFieldWithDefault(this, 6, false));
+};
+
+
+/**
+ * @param {boolean} value
+ * @return {!proto.im.Column} returns this
+ */
+proto.im.Column.prototype.setNavshow = function (value) {
+    return jspb.Message.setProto3BooleanField(this, 6, value);
+};
+
+
+/**
+ * optional int64 id = 7;
+ * @return {number}
+ */
+proto.im.Column.prototype.getId = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.Column} returns this
+ */
+proto.im.Column.prototype.setId = function (value) {
+    return jspb.Message.setProto3IntField(this, 7, value);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.UserGetColumnListReply.repeatedFields_ = [1];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.UserGetColumnListReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.UserGetColumnListReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.UserGetColumnListReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.UserGetColumnListReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            listList: jspb.Message.toObjectList(msg.getListList(),
+                proto.im.Column.toObject, includeInstance)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.UserGetColumnListReply}
+ */
+proto.im.UserGetColumnListReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.UserGetColumnListReply;
+    return proto.im.UserGetColumnListReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.UserGetColumnListReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.UserGetColumnListReply}
+ */
+proto.im.UserGetColumnListReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = new proto.im.Column;
+                reader.readMessage(value, proto.im.Column.deserializeBinaryFromReader);
+                msg.addList(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.UserGetColumnListReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.UserGetColumnListReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.UserGetColumnListReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.UserGetColumnListReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getListList();
+    if (f.length > 0) {
+        writer.writeRepeatedMessage(
+            1,
+            f,
+            proto.im.Column.serializeBinaryToWriter
+        );
+    }
+};
+
+
+/**
+ * repeated Column list = 1;
+ * @return {!Array<!proto.im.Column>}
+ */
+proto.im.UserGetColumnListReply.prototype.getListList = function () {
+    return /** @type{!Array<!proto.im.Column>} */ (
+        jspb.Message.getRepeatedWrapperField(this, proto.im.Column, 1));
+};
+
+
+/**
+ * @param {!Array<!proto.im.Column>} value
+ * @return {!proto.im.UserGetColumnListReply} returns this
+ */
+proto.im.UserGetColumnListReply.prototype.setListList = function (value) {
+    return jspb.Message.setRepeatedWrapperField(this, 1, value);
+};
+
+
+/**
+ * @param {!proto.im.Column=} opt_value
+ * @param {number=} opt_index
+ * @return {!proto.im.Column}
+ */
+proto.im.UserGetColumnListReply.prototype.addList = function (opt_value, opt_index) {
+    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.im.Column, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.UserGetColumnListReply} returns this
+ */
+proto.im.UserGetColumnListReply.prototype.clearListList = function () {
+    return this.setListList([]);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.CreateRoleRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.CreateRoleRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.CreateRoleRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.CreateRoleRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            name: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            memo: jspb.Message.getFieldWithDefault(msg, 2, "")
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.CreateRoleRequest}
+ */
+proto.im.CreateRoleRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.CreateRoleRequest;
+    return proto.im.CreateRoleRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.CreateRoleRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.CreateRoleRequest}
+ */
+proto.im.CreateRoleRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setMemo(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.CreateRoleRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.CreateRoleRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.CreateRoleRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.CreateRoleRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getMemo();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string name = 1;
+ * @return {string}
+ */
+proto.im.CreateRoleRequest.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateRoleRequest} returns this
+ */
+proto.im.CreateRoleRequest.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string memo = 2;
+ * @return {string}
+ */
+proto.im.CreateRoleRequest.prototype.getMemo = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateRoleRequest} returns this
+ */
+proto.im.CreateRoleRequest.prototype.setMemo = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.Role.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.Role.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.Role} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.Role.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            id: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            name: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            memo: jspb.Message.getFieldWithDefault(msg, 3, ""),
+            status: jspb.Message.getFieldWithDefault(msg, 4, 0),
+            systemname: jspb.Message.getFieldWithDefault(msg, 5, "")
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.Role}
+ */
+proto.im.Role.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.Role;
+    return proto.im.Role.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.Role} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.Role}
+ */
+proto.im.Role.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setId(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 3:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setMemo(value);
+                break;
+            case 4:
+                var value = /** @type {!proto.im.Status} */ (reader.readEnum());
+                msg.setStatus(value);
+                break;
+            case 5:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setSystemname(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.Role.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.Role.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.Role} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.Role.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getId();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getMemo();
+    if (f.length > 0) {
+        writer.writeString(
+            3,
+            f
+        );
+    }
+    f = message.getStatus();
+    if (f !== 0.0) {
+        writer.writeEnum(
+            4,
+            f
+        );
+    }
+    f = message.getSystemname();
+    if (f.length > 0) {
+        writer.writeString(
+            5,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 id = 1;
+ * @return {number}
+ */
+proto.im.Role.prototype.getId = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.Role} returns this
+ */
+proto.im.Role.prototype.setId = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional string name = 2;
+ * @return {string}
+ */
+proto.im.Role.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Role} returns this
+ */
+proto.im.Role.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional string memo = 3;
+ * @return {string}
+ */
+proto.im.Role.prototype.getMemo = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Role} returns this
+ */
+proto.im.Role.prototype.setMemo = function (value) {
+    return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+
+/**
+ * optional Status status = 4;
+ * @return {!proto.im.Status}
+ */
+proto.im.Role.prototype.getStatus = function () {
+    return /** @type {!proto.im.Status} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
+};
+
+
+/**
+ * @param {!proto.im.Status} value
+ * @return {!proto.im.Role} returns this
+ */
+proto.im.Role.prototype.setStatus = function (value) {
+    return jspb.Message.setProto3EnumField(this, 4, value);
+};
+
+
+/**
+ * optional string systemName = 5;
+ * @return {string}
+ */
+proto.im.Role.prototype.getSystemname = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Role} returns this
+ */
+proto.im.Role.prototype.setSystemname = function (value) {
+    return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.RoleListRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.RoleListRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.RoleListRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.RoleListRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            userid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            sysid: jspb.Message.getFieldWithDefault(msg, 2, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.RoleListRequest}
+ */
+proto.im.RoleListRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.RoleListRequest;
+    return proto.im.RoleListRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.RoleListRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.RoleListRequest}
+ */
+proto.im.RoleListRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUserid(value);
+                break;
+            case 2:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.RoleListRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.RoleListRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.RoleListRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.RoleListRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getUserid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 userId = 1;
+ * @return {number}
+ */
+proto.im.RoleListRequest.prototype.getUserid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.RoleListRequest} returns this
+ */
+proto.im.RoleListRequest.prototype.setUserid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional int64 sysId = 2;
+ * @return {number}
+ */
+proto.im.RoleListRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.RoleListRequest} returns this
+ */
+proto.im.RoleListRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 2, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.UserListRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.UserListRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.UserListRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.UserListRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            roleid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            status: jspb.Message.getFieldWithDefault(msg, 2, 0),
+            name: jspb.Message.getFieldWithDefault(msg, 3, ""),
+            lcstypeid: jspb.Message.getFieldWithDefault(msg, 4, 0),
+            sysid: jspb.Message.getFieldWithDefault(msg, 5, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.UserListRequest}
+ */
+proto.im.UserListRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.UserListRequest;
+    return proto.im.UserListRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.UserListRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.UserListRequest}
+ */
+proto.im.UserListRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setRoleid(value);
+                break;
+            case 2:
+                var value = /** @type {!proto.im.Status} */ (reader.readEnum());
+                msg.setStatus(value);
+                break;
+            case 3:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 4:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setLcstypeid(value);
+                break;
+            case 5:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.UserListRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.UserListRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.UserListRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.UserListRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getRoleid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getStatus();
+    if (f !== 0.0) {
+        writer.writeEnum(
+            2,
+            f
+        );
+    }
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            3,
+            f
+        );
+    }
+    f = message.getLcstypeid();
+    if (f !== 0) {
+        writer.writeInt64(
+            4,
+            f
+        );
+    }
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            5,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 roleId = 1;
+ * @return {number}
+ */
+proto.im.UserListRequest.prototype.getRoleid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserListRequest} returns this
+ */
+proto.im.UserListRequest.prototype.setRoleid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional Status status = 2;
+ * @return {!proto.im.Status}
+ */
+proto.im.UserListRequest.prototype.getStatus = function () {
+    return /** @type {!proto.im.Status} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
+};
+
+
+/**
+ * @param {!proto.im.Status} value
+ * @return {!proto.im.UserListRequest} returns this
+ */
+proto.im.UserListRequest.prototype.setStatus = function (value) {
+    return jspb.Message.setProto3EnumField(this, 2, value);
+};
+
+
+/**
+ * optional string name = 3;
+ * @return {string}
+ */
+proto.im.UserListRequest.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.UserListRequest} returns this
+ */
+proto.im.UserListRequest.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+
+/**
+ * optional int64 lcstypeid = 4;
+ * @return {number}
+ */
+proto.im.UserListRequest.prototype.getLcstypeid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserListRequest} returns this
+ */
+proto.im.UserListRequest.prototype.setLcstypeid = function (value) {
+    return jspb.Message.setProto3IntField(this, 4, value);
+};
+
+
+/**
+ * optional int64 sysId = 5;
+ * @return {number}
+ */
+proto.im.UserListRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserListRequest} returns this
+ */
+proto.im.UserListRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 5, value);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.UserListReply.repeatedFields_ = [1];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.UserListReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.UserListReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.UserListReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.UserListReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            listList: jspb.Message.toObjectList(msg.getListList(),
+                proto.im.UserInfo.toObject, includeInstance)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.UserListReply}
+ */
+proto.im.UserListReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.UserListReply;
+    return proto.im.UserListReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.UserListReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.UserListReply}
+ */
+proto.im.UserListReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = new proto.im.UserInfo;
+                reader.readMessage(value, proto.im.UserInfo.deserializeBinaryFromReader);
+                msg.addList(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.UserListReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.UserListReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.UserListReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.UserListReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getListList();
+    if (f.length > 0) {
+        writer.writeRepeatedMessage(
+            1,
+            f,
+            proto.im.UserInfo.serializeBinaryToWriter
+        );
+    }
+};
+
+
+/**
+ * repeated UserInfo list = 1;
+ * @return {!Array<!proto.im.UserInfo>}
+ */
+proto.im.UserListReply.prototype.getListList = function () {
+    return /** @type{!Array<!proto.im.UserInfo>} */ (
+        jspb.Message.getRepeatedWrapperField(this, proto.im.UserInfo, 1));
+};
+
+
+/**
+ * @param {!Array<!proto.im.UserInfo>} value
+ * @return {!proto.im.UserListReply} returns this
+ */
+proto.im.UserListReply.prototype.setListList = function (value) {
+    return jspb.Message.setRepeatedWrapperField(this, 1, value);
+};
+
+
+/**
+ * @param {!proto.im.UserInfo=} opt_value
+ * @param {number=} opt_index
+ * @return {!proto.im.UserInfo}
+ */
+proto.im.UserListReply.prototype.addList = function (opt_value, opt_index) {
+    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.im.UserInfo, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.UserListReply} returns this
+ */
+proto.im.UserListReply.prototype.clearListList = function () {
+    return this.setListList([]);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.UserGetInfoRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.UserGetInfoRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.UserGetInfoRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.UserGetInfoRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            userid: jspb.Message.getFieldWithDefault(msg, 1, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.UserGetInfoRequest}
+ */
+proto.im.UserGetInfoRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.UserGetInfoRequest;
+    return proto.im.UserGetInfoRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.UserGetInfoRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.UserGetInfoRequest}
+ */
+proto.im.UserGetInfoRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUserid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.UserGetInfoRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.UserGetInfoRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.UserGetInfoRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.UserGetInfoRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getUserid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 userId = 1;
+ * @return {number}
+ */
+proto.im.UserGetInfoRequest.prototype.getUserid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserGetInfoRequest} returns this
+ */
+proto.im.UserGetInfoRequest.prototype.setUserid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.UserRolesRequest.repeatedFields_ = [2];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.UserRolesRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.UserRolesRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.UserRolesRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.UserRolesRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            userid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            roleidlistList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.UserRolesRequest}
+ */
+proto.im.UserRolesRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.UserRolesRequest;
+    return proto.im.UserRolesRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.UserRolesRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.UserRolesRequest}
+ */
+proto.im.UserRolesRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUserid(value);
+                break;
+            case 2:
+                var values = /** @type {!Array<number>} */ (reader.isDelimited() ? reader.readPackedInt64() : [reader.readInt64()]);
+                for (var i = 0; i < values.length; i++) {
+                    msg.addRoleidlist(values[i]);
+                }
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.UserRolesRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.UserRolesRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.UserRolesRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.UserRolesRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getUserid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getRoleidlistList();
+    if (f.length > 0) {
+        writer.writePackedInt64(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 userId = 1;
+ * @return {number}
+ */
+proto.im.UserRolesRequest.prototype.getUserid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.UserRolesRequest} returns this
+ */
+proto.im.UserRolesRequest.prototype.setUserid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * repeated int64 roleIdList = 2;
+ * @return {!Array<number>}
+ */
+proto.im.UserRolesRequest.prototype.getRoleidlistList = function () {
+    return /** @type {!Array<number>} */ (jspb.Message.getRepeatedField(this, 2));
+};
+
+
+/**
+ * @param {!Array<number>} value
+ * @return {!proto.im.UserRolesRequest} returns this
+ */
+proto.im.UserRolesRequest.prototype.setRoleidlistList = function (value) {
+    return jspb.Message.setField(this, 2, value || []);
+};
+
+
+/**
+ * @param {number} value
+ * @param {number=} opt_index
+ * @return {!proto.im.UserRolesRequest} returns this
+ */
+proto.im.UserRolesRequest.prototype.addRoleidlist = function (value, opt_index) {
+    return jspb.Message.addToRepeatedField(this, 2, value, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.UserRolesRequest} returns this
+ */
+proto.im.UserRolesRequest.prototype.clearRoleidlistList = function () {
+    return this.setRoleidlistList([]);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.RoleListReply.repeatedFields_ = [1];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.RoleListReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.RoleListReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.RoleListReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.RoleListReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            listList: jspb.Message.toObjectList(msg.getListList(),
+                proto.im.Role.toObject, includeInstance)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.RoleListReply}
+ */
+proto.im.RoleListReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.RoleListReply;
+    return proto.im.RoleListReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.RoleListReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.RoleListReply}
+ */
+proto.im.RoleListReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = new proto.im.Role;
+                reader.readMessage(value, proto.im.Role.deserializeBinaryFromReader);
+                msg.addList(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.RoleListReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.RoleListReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.RoleListReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.RoleListReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getListList();
+    if (f.length > 0) {
+        writer.writeRepeatedMessage(
+            1,
+            f,
+            proto.im.Role.serializeBinaryToWriter
+        );
+    }
+};
+
+
+/**
+ * repeated Role list = 1;
+ * @return {!Array<!proto.im.Role>}
+ */
+proto.im.RoleListReply.prototype.getListList = function () {
+    return /** @type{!Array<!proto.im.Role>} */ (
+        jspb.Message.getRepeatedWrapperField(this, proto.im.Role, 1));
+};
+
+
+/**
+ * @param {!Array<!proto.im.Role>} value
+ * @return {!proto.im.RoleListReply} returns this
+ */
+proto.im.RoleListReply.prototype.setListList = function (value) {
+    return jspb.Message.setRepeatedWrapperField(this, 1, value);
+};
+
+
+/**
+ * @param {!proto.im.Role=} opt_value
+ * @param {number=} opt_index
+ * @return {!proto.im.Role}
+ */
+proto.im.RoleListReply.prototype.addList = function (opt_value, opt_index) {
+    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.im.Role, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.RoleListReply} returns this
+ */
+proto.im.RoleListReply.prototype.clearListList = function () {
+    return this.setListList([]);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.RolePermissionRequest.repeatedFields_ = [2];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.RolePermissionRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.RolePermissionRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.RolePermissionRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.RolePermissionRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            roleid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            servicepathList: (f = jspb.Message.getRepeatedField(msg, 2)) == null ? undefined : f
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.RolePermissionRequest}
+ */
+proto.im.RolePermissionRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.RolePermissionRequest;
+    return proto.im.RolePermissionRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.RolePermissionRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.RolePermissionRequest}
+ */
+proto.im.RolePermissionRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setRoleid(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.addServicepath(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.RolePermissionRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.RolePermissionRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.RolePermissionRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.RolePermissionRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getRoleid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getServicepathList();
+    if (f.length > 0) {
+        writer.writeRepeatedString(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 roleId = 1;
+ * @return {number}
+ */
+proto.im.RolePermissionRequest.prototype.getRoleid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.RolePermissionRequest} returns this
+ */
+proto.im.RolePermissionRequest.prototype.setRoleid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * repeated string servicePath = 2;
+ * @return {!Array<string>}
+ */
+proto.im.RolePermissionRequest.prototype.getServicepathList = function () {
+    return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 2));
+};
+
+
+/**
+ * @param {!Array<string>} value
+ * @return {!proto.im.RolePermissionRequest} returns this
+ */
+proto.im.RolePermissionRequest.prototype.setServicepathList = function (value) {
+    return jspb.Message.setField(this, 2, value || []);
+};
+
+
+/**
+ * @param {string} value
+ * @param {number=} opt_index
+ * @return {!proto.im.RolePermissionRequest} returns this
+ */
+proto.im.RolePermissionRequest.prototype.addServicepath = function (value, opt_index) {
+    return jspb.Message.addToRepeatedField(this, 2, value, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.RolePermissionRequest} returns this
+ */
+proto.im.RolePermissionRequest.prototype.clearServicepathList = function () {
+    return this.setServicepathList([]);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.ServiceListRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.ServiceListRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.ServiceListRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.ServiceListRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            sysid: jspb.Message.getFieldWithDefault(msg, 1, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.ServiceListRequest}
+ */
+proto.im.ServiceListRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.ServiceListRequest;
+    return proto.im.ServiceListRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.ServiceListRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.ServiceListRequest}
+ */
+proto.im.ServiceListRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.ServiceListRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.ServiceListRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.ServiceListRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.ServiceListRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 sysId = 1;
+ * @return {number}
+ */
+proto.im.ServiceListRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ServiceListRequest} returns this
+ */
+proto.im.ServiceListRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.ServiceListReply.repeatedFields_ = [1];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.ServiceListReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.ServiceListReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.ServiceListReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.ServiceListReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            listList: jspb.Message.toObjectList(msg.getListList(),
+                proto.im.Service.toObject, includeInstance)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.ServiceListReply}
+ */
+proto.im.ServiceListReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.ServiceListReply;
+    return proto.im.ServiceListReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.ServiceListReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.ServiceListReply}
+ */
+proto.im.ServiceListReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = new proto.im.Service;
+                reader.readMessage(value, proto.im.Service.deserializeBinaryFromReader);
+                msg.addList(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.ServiceListReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.ServiceListReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.ServiceListReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.ServiceListReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getListList();
+    if (f.length > 0) {
+        writer.writeRepeatedMessage(
+            1,
+            f,
+            proto.im.Service.serializeBinaryToWriter
+        );
+    }
+};
+
+
+/**
+ * repeated Service list = 1;
+ * @return {!Array<!proto.im.Service>}
+ */
+proto.im.ServiceListReply.prototype.getListList = function () {
+    return /** @type{!Array<!proto.im.Service>} */ (
+        jspb.Message.getRepeatedWrapperField(this, proto.im.Service, 1));
+};
+
+
+/**
+ * @param {!Array<!proto.im.Service>} value
+ * @return {!proto.im.ServiceListReply} returns this
+ */
+proto.im.ServiceListReply.prototype.setListList = function (value) {
+    return jspb.Message.setRepeatedWrapperField(this, 1, value);
+};
+
+
+/**
+ * @param {!proto.im.Service=} opt_value
+ * @param {number=} opt_index
+ * @return {!proto.im.Service}
+ */
+proto.im.ServiceListReply.prototype.addList = function (opt_value, opt_index) {
+    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.im.Service, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.ServiceListReply} returns this
+ */
+proto.im.ServiceListReply.prototype.clearListList = function () {
+    return this.setListList([]);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.ServiceRemoveRequest.repeatedFields_ = [1];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.ServiceRemoveRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.ServiceRemoveRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.ServiceRemoveRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.ServiceRemoveRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            pathlistList: (f = jspb.Message.getRepeatedField(msg, 1)) == null ? undefined : f
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.ServiceRemoveRequest}
+ */
+proto.im.ServiceRemoveRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.ServiceRemoveRequest;
+    return proto.im.ServiceRemoveRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.ServiceRemoveRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.ServiceRemoveRequest}
+ */
+proto.im.ServiceRemoveRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.addPathlist(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.ServiceRemoveRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.ServiceRemoveRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.ServiceRemoveRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.ServiceRemoveRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getPathlistList();
+    if (f.length > 0) {
+        writer.writeRepeatedString(
+            1,
+            f
+        );
+    }
+};
+
+
+/**
+ * repeated string pathList = 1;
+ * @return {!Array<string>}
+ */
+proto.im.ServiceRemoveRequest.prototype.getPathlistList = function () {
+    return /** @type {!Array<string>} */ (jspb.Message.getRepeatedField(this, 1));
+};
+
+
+/**
+ * @param {!Array<string>} value
+ * @return {!proto.im.ServiceRemoveRequest} returns this
+ */
+proto.im.ServiceRemoveRequest.prototype.setPathlistList = function (value) {
+    return jspb.Message.setField(this, 1, value || []);
+};
+
+
+/**
+ * @param {string} value
+ * @param {number=} opt_index
+ * @return {!proto.im.ServiceRemoveRequest} returns this
+ */
+proto.im.ServiceRemoveRequest.prototype.addPathlist = function (value, opt_index) {
+    return jspb.Message.addToRepeatedField(this, 1, value, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.ServiceRemoveRequest} returns this
+ */
+proto.im.ServiceRemoveRequest.prototype.clearPathlistList = function () {
+    return this.setPathlistList([]);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.CreateShopRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.CreateShopRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.CreateShopRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.CreateShopRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            name: jspb.Message.getFieldWithDefault(msg, 1, ""),
+            key: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            sid: jspb.Message.getFieldWithDefault(msg, 3, 0),
+            addr: jspb.Message.getFieldWithDefault(msg, 4, ""),
+            phone: jspb.Message.getFieldWithDefault(msg, 5, ""),
+            contacts: jspb.Message.getFieldWithDefault(msg, 6, ""),
+            createuser: jspb.Message.getFieldWithDefault(msg, 7, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.CreateShopRequest}
+ */
+proto.im.CreateShopRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.CreateShopRequest;
+    return proto.im.CreateShopRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.CreateShopRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.CreateShopRequest}
+ */
+proto.im.CreateShopRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setKey(value);
+                break;
+            case 3:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSid(value);
+                break;
+            case 4:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setAddr(value);
+                break;
+            case 5:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setPhone(value);
+                break;
+            case 6:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setContacts(value);
+                break;
+            case 7:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setCreateuser(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.CreateShopRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.CreateShopRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.CreateShopRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.CreateShopRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            1,
+            f
+        );
+    }
+    f = message.getKey();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getSid();
+    if (f !== 0) {
+        writer.writeInt64(
+            3,
+            f
+        );
+    }
+    f = message.getAddr();
+    if (f.length > 0) {
+        writer.writeString(
+            4,
+            f
+        );
+    }
+    f = message.getPhone();
+    if (f.length > 0) {
+        writer.writeString(
+            5,
+            f
+        );
+    }
+    f = message.getContacts();
+    if (f.length > 0) {
+        writer.writeString(
+            6,
+            f
+        );
+    }
+    f = message.getCreateuser();
+    if (f !== 0) {
+        writer.writeInt64(
+            7,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional string name = 1;
+ * @return {string}
+ */
+proto.im.CreateShopRequest.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateShopRequest} returns this
+ */
+proto.im.CreateShopRequest.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 1, value);
+};
+
+
+/**
+ * optional string key = 2;
+ * @return {string}
+ */
+proto.im.CreateShopRequest.prototype.getKey = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateShopRequest} returns this
+ */
+proto.im.CreateShopRequest.prototype.setKey = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional int64 sId = 3;
+ * @return {number}
+ */
+proto.im.CreateShopRequest.prototype.getSid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.CreateShopRequest} returns this
+ */
+proto.im.CreateShopRequest.prototype.setSid = function (value) {
+    return jspb.Message.setProto3IntField(this, 3, value);
+};
+
+
+/**
+ * optional string addr = 4;
+ * @return {string}
+ */
+proto.im.CreateShopRequest.prototype.getAddr = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateShopRequest} returns this
+ */
+proto.im.CreateShopRequest.prototype.setAddr = function (value) {
+    return jspb.Message.setProto3StringField(this, 4, value);
+};
+
+
+/**
+ * optional string phone = 5;
+ * @return {string}
+ */
+proto.im.CreateShopRequest.prototype.getPhone = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateShopRequest} returns this
+ */
+proto.im.CreateShopRequest.prototype.setPhone = function (value) {
+    return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
+/**
+ * optional string contacts = 6;
+ * @return {string}
+ */
+proto.im.CreateShopRequest.prototype.getContacts = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.CreateShopRequest} returns this
+ */
+proto.im.CreateShopRequest.prototype.setContacts = function (value) {
+    return jspb.Message.setProto3StringField(this, 6, value);
+};
+
+
+/**
+ * optional int64 createUser = 7;
+ * @return {number}
+ */
+proto.im.CreateShopRequest.prototype.getCreateuser = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.CreateShopRequest} returns this
+ */
+proto.im.CreateShopRequest.prototype.setCreateuser = function (value) {
+    return jspb.Message.setProto3IntField(this, 7, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.ShopListRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.ShopListRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.ShopListRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.ShopListRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            sysid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            name: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            status: jspb.Message.getFieldWithDefault(msg, 3, 0),
+            sid: jspb.Message.getFieldWithDefault(msg, 4, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.ShopListRequest}
+ */
+proto.im.ShopListRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.ShopListRequest;
+    return proto.im.ShopListRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.ShopListRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.ShopListRequest}
+ */
+proto.im.ShopListRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 3:
+                var value = /** @type {!proto.im.Status} */ (reader.readEnum());
+                msg.setStatus(value);
+                break;
+            case 4:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.ShopListRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.ShopListRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.ShopListRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.ShopListRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getStatus();
+    if (f !== 0.0) {
+        writer.writeEnum(
+            3,
+            f
+        );
+    }
+    f = message.getSid();
+    if (f !== 0) {
+        writer.writeInt64(
+            4,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 sysId = 1;
+ * @return {number}
+ */
+proto.im.ShopListRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopListRequest} returns this
+ */
+proto.im.ShopListRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional string name = 2;
+ * @return {string}
+ */
+proto.im.ShopListRequest.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.ShopListRequest} returns this
+ */
+proto.im.ShopListRequest.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional Status status = 3;
+ * @return {!proto.im.Status}
+ */
+proto.im.ShopListRequest.prototype.getStatus = function () {
+    return /** @type {!proto.im.Status} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
+};
+
+
+/**
+ * @param {!proto.im.Status} value
+ * @return {!proto.im.ShopListRequest} returns this
+ */
+proto.im.ShopListRequest.prototype.setStatus = function (value) {
+    return jspb.Message.setProto3EnumField(this, 3, value);
+};
+
+
+/**
+ * optional int64 sId = 4;
+ * @return {number}
+ */
+proto.im.ShopListRequest.prototype.getSid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopListRequest} returns this
+ */
+proto.im.ShopListRequest.prototype.setSid = function (value) {
+    return jspb.Message.setProto3IntField(this, 4, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.ShopInfo.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.ShopInfo.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.ShopInfo} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.ShopInfo.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            shopid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            name: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            sid: jspb.Message.getFieldWithDefault(msg, 3, 0),
+            addr: jspb.Message.getFieldWithDefault(msg, 4, ""),
+            phone: jspb.Message.getFieldWithDefault(msg, 5, ""),
+            contacts: jspb.Message.getFieldWithDefault(msg, 6, ""),
+            status: jspb.Message.getFieldWithDefault(msg, 7, 0),
+            createdAt: jspb.Message.getFieldWithDefault(msg, 8, 0),
+            createdUser: jspb.Message.getFieldWithDefault(msg, 9, 0),
+            updatedAt: jspb.Message.getFieldWithDefault(msg, 10, 0),
+            updatedUser: jspb.Message.getFieldWithDefault(msg, 11, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.ShopInfo}
+ */
+proto.im.ShopInfo.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.ShopInfo;
+    return proto.im.ShopInfo.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.ShopInfo} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.ShopInfo}
+ */
+proto.im.ShopInfo.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setShopid(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setName(value);
+                break;
+            case 3:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSid(value);
+                break;
+            case 4:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setAddr(value);
+                break;
+            case 5:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setPhone(value);
+                break;
+            case 6:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setContacts(value);
+                break;
+            case 7:
+                var value = /** @type {!proto.im.Status} */ (reader.readEnum());
+                msg.setStatus(value);
+                break;
+            case 8:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setCreatedAt(value);
+                break;
+            case 9:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setCreatedUser(value);
+                break;
+            case 10:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUpdatedAt(value);
+                break;
+            case 11:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUpdatedUser(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.ShopInfo.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.ShopInfo.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.ShopInfo} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.ShopInfo.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getShopid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getName();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getSid();
+    if (f !== 0) {
+        writer.writeInt64(
+            3,
+            f
+        );
+    }
+    f = message.getAddr();
+    if (f.length > 0) {
+        writer.writeString(
+            4,
+            f
+        );
+    }
+    f = message.getPhone();
+    if (f.length > 0) {
+        writer.writeString(
+            5,
+            f
+        );
+    }
+    f = message.getContacts();
+    if (f.length > 0) {
+        writer.writeString(
+            6,
+            f
+        );
+    }
+    f = message.getStatus();
+    if (f !== 0.0) {
+        writer.writeEnum(
+            7,
+            f
+        );
+    }
+    f = message.getCreatedAt();
+    if (f !== 0) {
+        writer.writeInt64(
+            8,
+            f
+        );
+    }
+    f = message.getCreatedUser();
+    if (f !== 0) {
+        writer.writeInt64(
+            9,
+            f
+        );
+    }
+    f = message.getUpdatedAt();
+    if (f !== 0) {
+        writer.writeInt64(
+            10,
+            f
+        );
+    }
+    f = message.getUpdatedUser();
+    if (f !== 0) {
+        writer.writeInt64(
+            11,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 shopId = 1;
+ * @return {number}
+ */
+proto.im.ShopInfo.prototype.getShopid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setShopid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional string name = 2;
+ * @return {string}
+ */
+proto.im.ShopInfo.prototype.getName = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setName = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional int64 sId = 3;
+ * @return {number}
+ */
+proto.im.ShopInfo.prototype.getSid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 3, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setSid = function (value) {
+    return jspb.Message.setProto3IntField(this, 3, value);
+};
+
+
+/**
+ * optional string addr = 4;
+ * @return {string}
+ */
+proto.im.ShopInfo.prototype.getAddr = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 4, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setAddr = function (value) {
+    return jspb.Message.setProto3StringField(this, 4, value);
+};
+
+
+/**
+ * optional string phone = 5;
+ * @return {string}
+ */
+proto.im.ShopInfo.prototype.getPhone = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 5, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setPhone = function (value) {
+    return jspb.Message.setProto3StringField(this, 5, value);
+};
+
+
+/**
+ * optional string contacts = 6;
+ * @return {string}
+ */
+proto.im.ShopInfo.prototype.getContacts = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 6, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setContacts = function (value) {
+    return jspb.Message.setProto3StringField(this, 6, value);
+};
+
+
+/**
+ * optional Status status = 7;
+ * @return {!proto.im.Status}
+ */
+proto.im.ShopInfo.prototype.getStatus = function () {
+    return /** @type {!proto.im.Status} */ (jspb.Message.getFieldWithDefault(this, 7, 0));
+};
+
+
+/**
+ * @param {!proto.im.Status} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setStatus = function (value) {
+    return jspb.Message.setProto3EnumField(this, 7, value);
+};
+
+
+/**
+ * optional int64 created_at = 8;
+ * @return {number}
+ */
+proto.im.ShopInfo.prototype.getCreatedAt = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 8, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setCreatedAt = function (value) {
+    return jspb.Message.setProto3IntField(this, 8, value);
+};
+
+
+/**
+ * optional int64 created_user = 9;
+ * @return {number}
+ */
+proto.im.ShopInfo.prototype.getCreatedUser = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 9, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setCreatedUser = function (value) {
+    return jspb.Message.setProto3IntField(this, 9, value);
+};
+
+
+/**
+ * optional int64 updated_at = 10;
+ * @return {number}
+ */
+proto.im.ShopInfo.prototype.getUpdatedAt = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 10, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setUpdatedAt = function (value) {
+    return jspb.Message.setProto3IntField(this, 10, value);
+};
+
+
+/**
+ * optional int64 updated_user = 11;
+ * @return {number}
+ */
+proto.im.ShopInfo.prototype.getUpdatedUser = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 11, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.ShopInfo} returns this
+ */
+proto.im.ShopInfo.prototype.setUpdatedUser = function (value) {
+    return jspb.Message.setProto3IntField(this, 11, value);
+};
+
+
+/**
+ * List of repeated fields within this message type.
+ * @private {!Array<number>}
+ * @const
+ */
+proto.im.ShopListReply.repeatedFields_ = [1];
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.ShopListReply.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.ShopListReply.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.ShopListReply} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.ShopListReply.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            listList: jspb.Message.toObjectList(msg.getListList(),
+                proto.im.ShopInfo.toObject, includeInstance)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.ShopListReply}
+ */
+proto.im.ShopListReply.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.ShopListReply;
+    return proto.im.ShopListReply.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.ShopListReply} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.ShopListReply}
+ */
+proto.im.ShopListReply.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = new proto.im.ShopInfo;
+                reader.readMessage(value, proto.im.ShopInfo.deserializeBinaryFromReader);
+                msg.addList(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.ShopListReply.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.ShopListReply.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.ShopListReply} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.ShopListReply.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getListList();
+    if (f.length > 0) {
+        writer.writeRepeatedMessage(
+            1,
+            f,
+            proto.im.ShopInfo.serializeBinaryToWriter
+        );
+    }
+};
+
+
+/**
+ * repeated ShopInfo list = 1;
+ * @return {!Array<!proto.im.ShopInfo>}
+ */
+proto.im.ShopListReply.prototype.getListList = function () {
+    return /** @type{!Array<!proto.im.ShopInfo>} */ (
+        jspb.Message.getRepeatedWrapperField(this, proto.im.ShopInfo, 1));
+};
+
+
+/**
+ * @param {!Array<!proto.im.ShopInfo>} value
+ * @return {!proto.im.ShopListReply} returns this
+ */
+proto.im.ShopListReply.prototype.setListList = function (value) {
+    return jspb.Message.setRepeatedWrapperField(this, 1, value);
+};
+
+
+/**
+ * @param {!proto.im.ShopInfo=} opt_value
+ * @param {number=} opt_index
+ * @return {!proto.im.ShopInfo}
+ */
+proto.im.ShopListReply.prototype.addList = function (opt_value, opt_index) {
+    return jspb.Message.addToRepeatedWrapperField(this, 1, opt_value, proto.im.ShopInfo, opt_index);
+};
+
+
+/**
+ * Clears the list making it empty but non-null.
+ * @return {!proto.im.ShopListReply} returns this
+ */
+proto.im.ShopListReply.prototype.clearListList = function () {
+    return this.setListList([]);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.SystemAddShopRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.SystemAddShopRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.SystemAddShopRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.SystemAddShopRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            sysid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            shopid: jspb.Message.getFieldWithDefault(msg, 2, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.SystemAddShopRequest}
+ */
+proto.im.SystemAddShopRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.SystemAddShopRequest;
+    return proto.im.SystemAddShopRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.SystemAddShopRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.SystemAddShopRequest}
+ */
+proto.im.SystemAddShopRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            case 2:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setShopid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.SystemAddShopRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.SystemAddShopRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.SystemAddShopRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.SystemAddShopRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getShopid();
+    if (f !== 0) {
+        writer.writeInt64(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 sysId = 1;
+ * @return {number}
+ */
+proto.im.SystemAddShopRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SystemAddShopRequest} returns this
+ */
+proto.im.SystemAddShopRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional int64 shopId = 2;
+ * @return {number}
+ */
+proto.im.SystemAddShopRequest.prototype.getShopid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SystemAddShopRequest} returns this
+ */
+proto.im.SystemAddShopRequest.prototype.setShopid = function (value) {
+    return jspb.Message.setProto3IntField(this, 2, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.SystemAddUserRequest.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.SystemAddUserRequest.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.SystemAddUserRequest} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.SystemAddUserRequest.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            sysid: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            userid: jspb.Message.getFieldWithDefault(msg, 2, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.SystemAddUserRequest}
+ */
+proto.im.SystemAddUserRequest.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.SystemAddUserRequest;
+    return proto.im.SystemAddUserRequest.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.SystemAddUserRequest} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.SystemAddUserRequest}
+ */
+proto.im.SystemAddUserRequest.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setSysid(value);
+                break;
+            case 2:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setUserid(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.SystemAddUserRequest.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.SystemAddUserRequest.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.SystemAddUserRequest} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.SystemAddUserRequest.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getSysid();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getUserid();
+    if (f !== 0) {
+        writer.writeInt64(
+            2,
+            f
+        );
+    }
+};
+
+
+/**
+ * optional int64 sysId = 1;
+ * @return {number}
+ */
+proto.im.SystemAddUserRequest.prototype.getSysid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SystemAddUserRequest} returns this
+ */
+proto.im.SystemAddUserRequest.prototype.setSysid = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional int64 userId = 2;
+ * @return {number}
+ */
+proto.im.SystemAddUserRequest.prototype.getUserid = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.SystemAddUserRequest} returns this
+ */
+proto.im.SystemAddUserRequest.prototype.setUserid = function (value) {
+    return jspb.Message.setProto3IntField(this, 2, value);
+};
+
+
+if (jspb.Message.GENERATE_TO_OBJECT) {
+    /**
+     * Creates an object representation of this proto.
+     * Field names that are reserved in JavaScript and will be renamed to pb_name.
+     * Optional fields that are not set will be set to undefined.
+     * To access a reserved field use, foo.pb_<name>, eg, foo.pb_default.
+     * For the list of reserved names please see:
+     *     net/proto2/compiler/js/internal/generator.cc#kKeyword.
+     * @param {boolean=} opt_includeInstance Deprecated. whether to include the
+     *     JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @return {!Object}
+     */
+    proto.im.Message.prototype.toObject = function (opt_includeInstance) {
+        return proto.im.Message.toObject(opt_includeInstance, this);
+    };
+
+
+    /**
+     * Static version of the {@see toObject} method.
+     * @param {boolean|undefined} includeInstance Deprecated. Whether to include
+     *     the JSPB instance for transitional soy proto support:
+     *     http://goto/soy-param-migration
+     * @param {!proto.im.Message} msg The msg instance to transform.
+     * @return {!Object}
+     * @suppress {unusedLocalVariables} f is only used for nested messages
+     */
+    proto.im.Message.toObject = function (includeInstance, msg) {
+        var f, obj = {
+            id: jspb.Message.getFieldWithDefault(msg, 1, 0),
+            title: jspb.Message.getFieldWithDefault(msg, 2, ""),
+            content: jspb.Message.getFieldWithDefault(msg, 3, ""),
+            level: jspb.Message.getFieldWithDefault(msg, 4, 0),
+            createat: jspb.Message.getFieldWithDefault(msg, 5, 0)
+        };
+
+        if (includeInstance) {
+            obj.$jspbMessageInstance = msg;
+        }
+        return obj;
+    };
+}
+
+
+/**
+ * Deserializes binary data (in protobuf wire format).
+ * @param {jspb.ByteSource} bytes The bytes to deserialize.
+ * @return {!proto.im.Message}
+ */
+proto.im.Message.deserializeBinary = function (bytes) {
+    var reader = new jspb.BinaryReader(bytes);
+    var msg = new proto.im.Message;
+    return proto.im.Message.deserializeBinaryFromReader(msg, reader);
+};
+
+
+/**
+ * Deserializes binary data (in protobuf wire format) from the
+ * given reader into the given message object.
+ * @param {!proto.im.Message} msg The message object to deserialize into.
+ * @param {!jspb.BinaryReader} reader The BinaryReader to use.
+ * @return {!proto.im.Message}
+ */
+proto.im.Message.deserializeBinaryFromReader = function (msg, reader) {
+    while (reader.nextField()) {
+        if (reader.isEndGroup()) {
+            break;
+        }
+        var field = reader.getFieldNumber();
+        switch (field) {
+            case 1:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setId(value);
+                break;
+            case 2:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setTitle(value);
+                break;
+            case 3:
+                var value = /** @type {string} */ (reader.readString());
+                msg.setContent(value);
+                break;
+            case 4:
+                var value = /** @type {!proto.im.Message.Level} */ (reader.readEnum());
+                msg.setLevel(value);
+                break;
+            case 5:
+                var value = /** @type {number} */ (reader.readInt64());
+                msg.setCreateat(value);
+                break;
+            default:
+                reader.skipField();
+                break;
+        }
+    }
+    return msg;
+};
+
+
+/**
+ * Serializes the message to binary data (in protobuf wire format).
+ * @return {!Uint8Array}
+ */
+proto.im.Message.prototype.serializeBinary = function () {
+    var writer = new jspb.BinaryWriter();
+    proto.im.Message.serializeBinaryToWriter(this, writer);
+    return writer.getResultBuffer();
+};
+
+
+/**
+ * Serializes the given message to binary data (in protobuf wire
+ * format), writing to the given BinaryWriter.
+ * @param {!proto.im.Message} message
+ * @param {!jspb.BinaryWriter} writer
+ * @suppress {unusedLocalVariables} f is only used for nested messages
+ */
+proto.im.Message.serializeBinaryToWriter = function (message, writer) {
+    var f = undefined;
+    f = message.getId();
+    if (f !== 0) {
+        writer.writeInt64(
+            1,
+            f
+        );
+    }
+    f = message.getTitle();
+    if (f.length > 0) {
+        writer.writeString(
+            2,
+            f
+        );
+    }
+    f = message.getContent();
+    if (f.length > 0) {
+        writer.writeString(
+            3,
+            f
+        );
+    }
+    f = message.getLevel();
+    if (f !== 0.0) {
+        writer.writeEnum(
+            4,
+            f
+        );
+    }
+    f = message.getCreateat();
+    if (f !== 0) {
+        writer.writeInt64(
+            5,
+            f
+        );
+    }
+};
+
+
+/**
+ * @enum {number}
+ */
+proto.im.Message.Level = {
+    NULL: 0,
+    NORMAL: 1,
+    WARN: 2,
+    ERROR: 3
+};
+
+/**
+ * optional int64 id = 1;
+ * @return {number}
+ */
+proto.im.Message.prototype.getId = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.Message} returns this
+ */
+proto.im.Message.prototype.setId = function (value) {
+    return jspb.Message.setProto3IntField(this, 1, value);
+};
+
+
+/**
+ * optional string title = 2;
+ * @return {string}
+ */
+proto.im.Message.prototype.getTitle = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Message} returns this
+ */
+proto.im.Message.prototype.setTitle = function (value) {
+    return jspb.Message.setProto3StringField(this, 2, value);
+};
+
+
+/**
+ * optional string content = 3;
+ * @return {string}
+ */
+proto.im.Message.prototype.getContent = function () {
+    return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 3, ""));
+};
+
+
+/**
+ * @param {string} value
+ * @return {!proto.im.Message} returns this
+ */
+proto.im.Message.prototype.setContent = function (value) {
+    return jspb.Message.setProto3StringField(this, 3, value);
+};
+
+
+/**
+ * optional Level level = 4;
+ * @return {!proto.im.Message.Level}
+ */
+proto.im.Message.prototype.getLevel = function () {
+    return /** @type {!proto.im.Message.Level} */ (jspb.Message.getFieldWithDefault(this, 4, 0));
+};
+
+
+/**
+ * @param {!proto.im.Message.Level} value
+ * @return {!proto.im.Message} returns this
+ */
+proto.im.Message.prototype.setLevel = function (value) {
+    return jspb.Message.setProto3EnumField(this, 4, value);
+};
+
+
+/**
+ * optional int64 createAt = 5;
+ * @return {number}
+ */
+proto.im.Message.prototype.getCreateat = function () {
+    return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 5, 0));
+};
+
+
+/**
+ * @param {number} value
+ * @return {!proto.im.Message} returns this
+ */
+proto.im.Message.prototype.setCreateat = function (value) {
+    return jspb.Message.setProto3IntField(this, 5, value);
+};
+
+
+/**
+ * @enum {number}
+ */
+proto.im.ErrorCode = {
+    OK: 0,
+    PARAM: 4001,
+    EXIST: 4002,
+    TOKEN: 4003
+};
+
+/**
+ * @enum {number}
+ */
+proto.im.Status = {
+    NULL: 0,
+    BAN: 1,
+    ON: 2,
+    DELETE: 9
+};
+
+goog.object.extend(exports, proto.im);

+ 5 - 0
v2tv/src/grpc/package.json

@@ -0,0 +1,5 @@
+{
+  "devDependencies": {
+    "compression-webpack-plugin": "^1.1.12"
+  }
+}

+ 50 - 0
v2tv/src/grpc/readme.md

@@ -0,0 +1,50 @@
+# readme
+
+## 生成服务
+
+执行gen.bat 重新生成服务文件
+
+### 使用
+
+#### 单页引用
+
+import {SignInPasswordRequest, FlushDataRequest, Data} from "@/assets/grpcBack/im_pb"; //{}内容为传入参数的方法名,按实际需求添加
+
+import {ApiClient} from "@/assets/grpcBack/im_grpc_web_pb"; // 固定内容无需修改
+
+[comment]: <> (function)
+let that = this; //端口地址 this.client = new ApiClient("http://192.168.0.3:20010", null, null);
+
+// 报文内容和方法,方法取自im.proto文件 rpc rpc SignInUserCode (SignInPasswordRequest) returns (TokenParam)  {}
+
+let pwdtext = "asdf*123"
+let authtext = "admin"
+let getRequest = new SignInPasswordRequest();
+
+// 对报文内容字符串进行编码 ,setXXX方法取自im.proto文件 message SignInPasswordRequest { ... ,内部属性要加set前缀字
+
+getRequest.setPassword(pwdtext); getRequest.setAuth(authtext); getRequest.setExpirationsec(10000);
+
+//接口名取自im.proto文件 rpc rpc SignInUserCode (SignInPasswordRequest) returns (TokenParam)  {}
+
+let res = this.client.signInUserCode(getRequest, {}, (err, response) => { //回调方法名取自im.proto文件 rpc SignInUserCode (
+SignInPasswordRequest) returns (TokenParam)  {} 的TokenParam返回值, //内部属性要加get前缀字
+
+this.message = response.getToken(); });
+
+//****注意,加前缀子的编码方法和回调方法的大小写请逐一在im_grpc_web_pb.js文件中核对,转换规则一般是小驼峰书写。
+
+#### 全局使用
+
+main.js 里 import {ApiClient} from "../src/grpc/im_grpc_web_pb"; // 建立grpc连接服务 let client = new
+ApiClient("http://192.168.0.3:20010", null, null); // 挂载为全局方法 Vue.prototype.client = client;
+
+目标vue页面 里 按需引入 import {SignInPasswordRequest} from "@/grpc/im_pb";
+
+...
+
+methods: { grpcServe(){ let that = this; let getRequest = new SignInPasswordRequest(); getRequest.setPassword("asdf*
+123"); getRequest.setAuth("admin"); getRequest.setExpirationsec(10000); that.client.signInUserCode(getRequest, {}, (err,
+response) => { that.TodayCalcValues = response.getToken(); }); },
+
+//TodayCalcValues为显示容器

+ 9 - 1
v2tv/src/main.js

@@ -11,6 +11,10 @@ import axios from 'axios'
 import VConsole from 'vconsole/dist/vconsole.min.js' //import vconsole
 import animated from 'animate.css'
 
+
+import {ApiClient} from "../src/grpc/im_grpc_web_pb";
+
+
 if (process.env.NODE_ENV === 'development') {
     // 显示控制台
     let vConsole = new VConsole();
@@ -26,10 +30,14 @@ Vue.config.productionTip = false;
 Vue.use(ElementUI);
 Vue.use(animated);
 
+// 建立grpc连接服务
+let client = new ApiClient("http://192.168.0.3:20010", null, null);
+// 挂载为全局方法
+Vue.prototype.client = client;
+
 // store,
 new Vue({
     router,
-
     render: h => h(App)
 }).$mount('#app');
 

+ 16 - 2
v2tv/src/views/Wait.vue

@@ -34,7 +34,8 @@
             </span>
         <div class="sumCalc">
           <h5 :class="[{ 'box animate__animated animate__flipInX': Listate[3].state }]">
-            {{ recordMain[0].Result[0].Values }}</h5>
+            <!--            {{ recordMain[0].Result[0].Values }}</h5>-->
+            {{ TodayCalcValues }}</h5>
           <em>Kcal</em>
         </div>
         <div class="persons">
@@ -186,7 +187,7 @@ import {
 } from '@/api/getApiRes'
 
 import audio from '../static/sound/bell.wav'
-
+import {SignInPasswordRequest} from "@/grpc/im_pb";
 let qs = require('qs');
 export default {
   data() {
@@ -225,10 +226,12 @@ export default {
       CKMonthRank: [],
       Heros: [],
       CKtoper: [],
+      TodayCalcValues: 0,
     }
   },
   mounted() {
     this.init();
+    this.grpcServe();
     if (this.pageTimer) {
       clearInterval(this.pageTimer);
     } else {
@@ -257,6 +260,17 @@ export default {
     }
   },
   methods: {
+    grpcServe() {
+      let that = this;
+      let getRequest = new SignInPasswordRequest();
+      getRequest.setPassword("asdf*123");
+      getRequest.setAuth("admin");
+      getRequest.setExpirationsec(10000);
+      that.client.signInUserCode(getRequest, {}, (err, response) => {
+        that.TodayCalcValues = response.getToken();
+        that.TodayCalcValues = 123456;//不影响展示效果,可注释
+      });
+    },
     playBell() {
       this.bellState = !this.bellState
     },