diff options
Diffstat (limited to 'vendor/github.com')
75 files changed, 3904 insertions, 2533 deletions
diff --git a/vendor/github.com/d5/tengo/v2/README.md b/vendor/github.com/d5/tengo/v2/README.md index c19c5699..aa9caa73 100644 --- a/vendor/github.com/d5/tengo/v2/README.md +++ b/vendor/github.com/d5/tengo/v2/README.md @@ -147,7 +147,4 @@ fmt.Println(res) // "success" - Syntax Highlighters: [VSCode](https://github.com/lissein/vscode-tengo), [Atom](https://github.com/d5/tengo-atom) - **Why the name Tengo?** It's from [1Q84](https://en.wikipedia.org/wiki/1Q84). -## - -:hearts: Like writing Go code? Come work at Skool. [We're hiring!](https://jobs.lever.co/skool) diff --git a/vendor/github.com/d5/tengo/v2/objects.go b/vendor/github.com/d5/tengo/v2/objects.go index 30913db5..25745586 100644 --- a/vendor/github.com/d5/tengo/v2/objects.go +++ b/vendor/github.com/d5/tengo/v2/objects.go @@ -1577,9 +1577,8 @@ func (o *Undefined) Value() Object { // UserFunction represents a user function. type UserFunction struct { ObjectImpl - Name string - Value CallableFunc - EncodingID string + Name string + Value CallableFunc } // TypeName returns the name of the type. @@ -1593,7 +1592,7 @@ func (o *UserFunction) String() string { // Copy returns a copy of the type. func (o *UserFunction) Copy() Object { - return &UserFunction{Value: o.Value} + return &UserFunction{Value: o.Value, Name: o.Name} } // Equals returns true if the value of the type is equal to the value of diff --git a/vendor/github.com/d5/tengo/v2/stdlib/source_modules.go b/vendor/github.com/d5/tengo/v2/stdlib/source_modules.go index ca69d7d1..50e09287 100644 --- a/vendor/github.com/d5/tengo/v2/stdlib/source_modules.go +++ b/vendor/github.com/d5/tengo/v2/stdlib/source_modules.go @@ -4,5 +4,5 @@ package stdlib // SourceModules are source type standard library modules. var SourceModules = map[string]string{ - "enum": "is_enumerable := func(x) {\n return is_array(x) || is_map(x) || is_immutable_array(x) || is_immutable_map(x)\n}\n\nis_array_like := func(x) {\n return is_array(x) || is_immutable_array(x)\n}\n\nexport {\n // all returns true if the given function `fn` evaluates to a truthy value on\n // all of the items in `x`. It returns undefined if `x` is not enumerable.\n all: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if !fn(k, v) { return false }\n }\n\n return true\n },\n // any returns true if the given function `fn` evaluates to a truthy value on\n // any of the items in `x`. It returns undefined if `x` is not enumerable.\n any: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if fn(k, v) { return true }\n }\n\n return false\n },\n // chunk returns an array of elements split into groups the length of size.\n // If `x` can't be split evenly, the final chunk will be the remaining elements.\n // It returns undefined if `x` is not array.\n chunk: func(x, size) {\n if !is_array_like(x) || !size { return undefined }\n\n numElements := len(x)\n if !numElements { return [] }\n\n res := []\n idx := 0\n for idx < numElements {\n res = append(res, x[idx:idx+size])\n idx += size\n }\n\n return res\n },\n // at returns an element at the given index (if `x` is array) or\n // key (if `x` is map). It returns undefined if `x` is not enumerable.\n at: func(x, key) {\n if !is_enumerable(x) { return undefined }\n\n if is_array_like(x) {\n if !is_int(key) { return undefined }\n } else {\n if !is_string(key) { return undefined }\n }\n\n return x[key]\n },\n // each iterates over elements of `x` and invokes `fn` for each element. `fn` is\n // invoked with two arguments: `key` and `value`. `key` is an int index\n // if `x` is array. `key` is a string key if `x` is map. It does not iterate\n // and returns undefined if `x` is not enumerable.\n each: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n fn(k, v)\n }\n },\n // filter iterates over elements of `x`, returning an array of all elements `fn`\n // returns truthy for. `fn` is invoked with two arguments: `key` and `value`.\n // `key` is an int index if `x` is array. `key` is a string key if `x` is map.\n // It returns undefined if `x` is not enumerable.\n filter: func(x, fn) {\n if !is_array_like(x) { return undefined }\n\n dst := []\n for k, v in x {\n if fn(k, v) { dst = append(dst, v) }\n }\n\n return dst\n },\n // find iterates over elements of `x`, returning value of the first element `fn`\n // returns truthy for. `fn` is invoked with two arguments: `key` and `value`.\n // `key` is an int index if `x` is array. `key` is a string key if `x` is map.\n // It returns undefined if `x` is not enumerable.\n find: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if fn(k, v) { return v }\n }\n },\n // find_key iterates over elements of `x`, returning key or index of the first\n // element `fn` returns truthy for. `fn` is invoked with two arguments: `key`\n // and `value`. `key` is an int index if `x` is array. `key` is a string key if\n // `x` is map. It returns undefined if `x` is not enumerable.\n find_key: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if fn(k, v) { return k }\n }\n },\n // map creates an array of values by running each element in `x` through `fn`.\n // `fn` is invoked with two arguments: `key` and `value`. `key` is an int index\n // if `x` is array. `key` is a string key if `x` is map. It returns undefined\n // if `x` is not enumerable.\n map: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n dst := []\n for k, v in x {\n dst = append(dst, fn(k, v))\n }\n\n return dst\n },\n // key returns the first argument.\n key: func(k, _) { return k },\n // value returns the second argument.\n value: func(_, v) { return v }\n}\n", + "enum": "is_enumerable := func(x) {\n return is_array(x) || is_map(x) || is_immutable_array(x) || is_immutable_map(x)\n}\n\nis_array_like := func(x) {\n return is_array(x) || is_immutable_array(x)\n}\n\nexport {\n // all returns true if the given function `fn` evaluates to a truthy value on\n // all of the items in `x`. It returns undefined if `x` is not enumerable.\n all: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if !fn(k, v) { return false }\n }\n\n return true\n },\n // any returns true if the given function `fn` evaluates to a truthy value on\n // any of the items in `x`. It returns undefined if `x` is not enumerable.\n any: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if fn(k, v) { return true }\n }\n\n return false\n },\n // chunk returns an array of elements split into groups the length of size.\n // If `x` can't be split evenly, the final chunk will be the remaining elements.\n // It returns undefined if `x` is not array.\n chunk: func(x, size) {\n if !is_array_like(x) || !size { return undefined }\n\n numElements := len(x)\n if !numElements { return [] }\n\n res := []\n idx := 0\n for idx < numElements {\n res = append(res, x[idx:idx+size])\n idx += size\n }\n\n return res\n },\n // at returns an element at the given index (if `x` is array) or\n // key (if `x` is map). It returns undefined if `x` is not enumerable.\n at: func(x, key) {\n if !is_enumerable(x) { return undefined }\n\n if is_array_like(x) {\n if !is_int(key) { return undefined }\n } else {\n if !is_string(key) { return undefined }\n }\n\n return x[key]\n },\n // each iterates over elements of `x` and invokes `fn` for each element. `fn` is\n // invoked with two arguments: `key` and `value`. `key` is an int index\n // if `x` is array. `key` is a string key if `x` is map. It does not iterate\n // and returns undefined if `x` is not enumerable.\n each: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n fn(k, v)\n }\n },\n // filter iterates over elements of `x`, returning an array of all elements `fn`\n // returns truthy for. `fn` is invoked with two arguments: `key` and `value`.\n // `key` is an int index if `x` is array. It returns undefined if `x` is not array.\n filter: func(x, fn) {\n if !is_array_like(x) { return undefined }\n\n dst := []\n for k, v in x {\n if fn(k, v) { dst = append(dst, v) }\n }\n\n return dst\n },\n // find iterates over elements of `x`, returning value of the first element `fn`\n // returns truthy for. `fn` is invoked with two arguments: `key` and `value`.\n // `key` is an int index if `x` is array. `key` is a string key if `x` is map.\n // It returns undefined if `x` is not enumerable.\n find: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if fn(k, v) { return v }\n }\n },\n // find_key iterates over elements of `x`, returning key or index of the first\n // element `fn` returns truthy for. `fn` is invoked with two arguments: `key`\n // and `value`. `key` is an int index if `x` is array. `key` is a string key if\n // `x` is map. It returns undefined if `x` is not enumerable.\n find_key: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n for k, v in x {\n if fn(k, v) { return k }\n }\n },\n // map creates an array of values by running each element in `x` through `fn`.\n // `fn` is invoked with two arguments: `key` and `value`. `key` is an int index\n // if `x` is array. `key` is a string key if `x` is map. It returns undefined\n // if `x` is not enumerable.\n map: func(x, fn) {\n if !is_enumerable(x) { return undefined }\n\n dst := []\n for k, v in x {\n dst = append(dst, fn(k, v))\n }\n\n return dst\n },\n // key returns the first argument.\n key: func(k, _) { return k },\n // value returns the second argument.\n value: func(_, v) { return v }\n}\n", } diff --git a/vendor/github.com/d5/tengo/v2/stdlib/srcmod_enum.tengo b/vendor/github.com/d5/tengo/v2/stdlib/srcmod_enum.tengo index 7a5ea637..1db13fea 100644 --- a/vendor/github.com/d5/tengo/v2/stdlib/srcmod_enum.tengo +++ b/vendor/github.com/d5/tengo/v2/stdlib/srcmod_enum.tengo @@ -73,8 +73,7 @@ export { }, // filter iterates over elements of `x`, returning an array of all elements `fn` // returns truthy for. `fn` is invoked with two arguments: `key` and `value`. - // `key` is an int index if `x` is array. `key` is a string key if `x` is map. - // It returns undefined if `x` is not enumerable. + // `key` is an int index if `x` is array. It returns undefined if `x` is not array. filter: func(x, fn) { if !is_array_like(x) { return undefined } diff --git a/vendor/github.com/gomarkdown/markdown/README.md b/vendor/github.com/gomarkdown/markdown/README.md index 7efc1919..91397534 100644 --- a/vendor/github.com/gomarkdown/markdown/README.md +++ b/vendor/github.com/gomarkdown/markdown/README.md @@ -1,6 +1,6 @@ # Markdown Parser and HTML Renderer for Go -[![GoDoc](https://godoc.org/github.com/gomarkdown/markdown?status.svg)](https://godoc.org/github.com/gomarkdown/markdown) [![codecov](https://codecov.io/gh/gomarkdown/markdown/branch/master/graph/badge.svg)](https://codecov.io/gh/gomarkdown/markdown) +[![pkg.go.dev](https://pkg.go.dev/badge/github.com/gomarkdown/markdown)](https://pkg.go.dev/badge/github.com/gomarkdown/markdown) Package `github.com/gomarkdown/markdown` is a very fast Go library for parsing [Markdown](https://daringfireball.net/projects/markdown/) documents and rendering them to HTML. @@ -8,10 +8,10 @@ It's fast and supports common extensions. ## API Docs: -- https://godoc.org/github.com/gomarkdown/markdown : top level package -- https://godoc.org/github.com/gomarkdown/markdown/ast : defines abstract syntax tree of parsed markdown document -- https://godoc.org/github.com/gomarkdown/markdown/parser : parser -- https://godoc.org/github.com/gomarkdown/markdown/html : html renderer +- https://pkg.go.dev/github.com/gomarkdown/markdown : top level package +- https://pkg.go.dev/github.com/gomarkdown/markdown/ast : defines abstract syntax tree of parsed markdown document +- https://pkg.go.dev/github.com/gomarkdown/markdown/parser : parser +- https://pkg.go.dev/github.com/gomarkdown/markdown/html : html renderer ## Users @@ -40,7 +40,7 @@ output := markdown.ToHTML(md, nil, nil) Markdown format is loosely specified and there are multiple extensions invented after original specification was created. -The parser supports several [extensions](https://godoc.org/github.com/gomarkdown/markdown/parser#Extensions). +The parser supports several [extensions](https://pkg.go.dev/github.com/gomarkdown/markdown/parser#Extensions). Default parser uses most common `parser.CommonExtensions` but you can easily use parser with custom extension: @@ -59,7 +59,7 @@ html := markdown.ToHTML(md, parser, nil) ## Customizing HTML renderer -Similarly, HTML renderer can be configured with different [options](https://godoc.org/github.com/gomarkdown/markdown/html#RendererOptions) +Similarly, HTML renderer can be configured with different [options](https://pkg.go.dev/github.com/gomarkdown/markdown/html#RendererOptions) Here's how to use a custom renderer: @@ -77,9 +77,9 @@ md := []byte("markdown text") html := markdown.ToHTML(md, nil, renderer) ``` -HTML renderer also supports reusing most of the logic and overriding rendering of only specifc nodes. +HTML renderer also supports reusing most of the logic and overriding rendering of only specific nodes. -You can provide [RenderNodeFunc](https://godoc.org/github.com/gomarkdown/markdown/html#RenderNodeFunc) in [RendererOptions](https://godoc.org/github.com/gomarkdown/markdown/html#RendererOptions). +You can provide [RenderNodeFunc](https://pkg.go.dev/github.com/gomarkdown/markdown/html#RenderNodeFunc) in [RendererOptions](https://pkg.go.dev/github.com/gomarkdown/markdown/html#RendererOptions). The function is called for each node in AST, you can implement custom rendering logic and tell HTML renderer to skip rendering this node. @@ -134,7 +134,7 @@ html := bluemonday.UGCPolicy().SanitizeBytes(maybeUnsafeHTML) ## Windows / Mac newlines The library only supports Unix newlines. If you have markdown text with possibly -Windows / Mac newlines, normalize newlines before caling this librar using +Windows / Mac newlines, normalize newlines before calling this library using `d = markdown.NormalizeNewlines(d)` ## mdtohtml command-line tool diff --git a/vendor/github.com/gomarkdown/markdown/parser/block.go b/vendor/github.com/gomarkdown/markdown/parser/block.go index 32194d9f..2b48d52d 100644 --- a/vendor/github.com/gomarkdown/markdown/parser/block.go +++ b/vendor/github.com/gomarkdown/markdown/parser/block.go @@ -1412,6 +1412,13 @@ gatherlines: // is this a nested list item? case (p.uliPrefix(chunk) > 0 && !p.isHRule(chunk)) || p.oliPrefix(chunk) > 0 || p.dliPrefix(chunk) > 0: + // if indent is 4 or more spaces on unordered or ordered lists + // we need to add leadingWhiteSpaces + 1 spaces in the beginning of the chunk + if indentIndex >= 4 && p.dliPrefix(chunk) <= 0 { + leadingWhiteSpaces := skipChar(chunk, 0, ' ') + chunk = data[ line+indentIndex - (leadingWhiteSpaces + 1) : i] + } + // to be a nested list, it must be indented more // if not, it is either a different kind of list // or the next item in the same list @@ -1484,7 +1491,7 @@ gatherlines: } // add the line into the working buffer without prefix - raw.Write(data[line+indentIndex : i]) + raw.Write(chunk) line = i } diff --git a/vendor/github.com/gomarkdown/markdown/parser/block_table.go b/vendor/github.com/gomarkdown/markdown/parser/block_table.go index 53fbd471..0bf4f4ad 100644 --- a/vendor/github.com/gomarkdown/markdown/parser/block_table.go +++ b/vendor/github.com/gomarkdown/markdown/parser/block_table.go @@ -25,6 +25,11 @@ func (p *Parser) tableRow(data []byte, columns []ast.CellAlignFlags, header bool cellStart := i + // If we are in a codespan we should discount any | we see, check for that here and skip ahead. + if isCode, _ := codeSpan(p, data[i:], 0); isCode > 0 { + i += isCode - 1 + } + for i < n && (data[i] != '|' || isBackslashEscaped(data, i)) && data[i] != '\n' { i++ } @@ -84,6 +89,11 @@ func (p *Parser) tableFooter(data []byte) bool { n := len(data) i := skipCharN(data, 0, ' ', 3) for ; i < n && data[i] != '\n'; i++ { + // If we are in a codespan we should discount any | we see, check for that here and skip ahead. + if isCode, _ := codeSpan(p, data[i:], 0); isCode > 0 { + i += isCode - 1 + } + if data[i] == '|' && !isBackslashEscaped(data, i) { colCount++ continue @@ -111,6 +121,11 @@ func (p *Parser) tableHeader(data []byte, doRender bool) (size int, columns []as headerIsUnderline := true headerIsWithEmptyFields := true for i = 0; i < len(data) && data[i] != '\n'; i++ { + // If we are in a codespan we should discount any | we see, check for that here and skip ahead. + if isCode, _ := codeSpan(p, data[i:], 0); isCode > 0 { + i += isCode - 1 + } + if data[i] == '|' && !isBackslashEscaped(data, i) { colCount++ } diff --git a/vendor/github.com/gorilla/websocket/README.md b/vendor/github.com/gorilla/websocket/README.md index 19aa2e75..2517a287 100644 --- a/vendor/github.com/gorilla/websocket/README.md +++ b/vendor/github.com/gorilla/websocket/README.md @@ -6,6 +6,13 @@ Gorilla WebSocket is a [Go](http://golang.org/) implementation of the [WebSocket](http://www.rfc-editor.org/rfc/rfc6455.txt) protocol. + +--- + +⚠️ **[The Gorilla WebSocket Package is looking for a new maintainer](https://github.com/gorilla/websocket/issues/370)** + +--- + ### Documentation * [API Reference](https://pkg.go.dev/github.com/gorilla/websocket?tab=doc) @@ -30,35 +37,3 @@ The Gorilla WebSocket package passes the server tests in the [Autobahn Test Suite](https://github.com/crossbario/autobahn-testsuite) using the application in the [examples/autobahn subdirectory](https://github.com/gorilla/websocket/tree/master/examples/autobahn). -### Gorilla WebSocket compared with other packages - -<table> -<tr> -<th></th> -<th><a href="http://godoc.org/github.com/gorilla/websocket">github.com/gorilla</a></th> -<th><a href="http://godoc.org/golang.org/x/net/websocket">golang.org/x/net</a></th> -</tr> -<tr> -<tr><td colspan="3"><a href="http://tools.ietf.org/html/rfc6455">RFC 6455</a> Features</td></tr> -<tr><td>Passes <a href="https://github.com/crossbario/autobahn-testsuite">Autobahn Test Suite</a></td><td><a href="https://github.com/gorilla/websocket/tree/master/examples/autobahn">Yes</a></td><td>No</td></tr> -<tr><td>Receive <a href="https://tools.ietf.org/html/rfc6455#section-5.4">fragmented</a> message<td>Yes</td><td><a href="https://code.google.com/p/go/issues/detail?id=7632">No</a>, see note 1</td></tr> -<tr><td>Send <a href="https://tools.ietf.org/html/rfc6455#section-5.5.1">close</a> message</td><td><a href="http://godoc.org/github.com/gorilla/websocket#hdr-Control_Messages">Yes</a></td><td><a href="https://code.google.com/p/go/issues/detail?id=4588">No</a></td></tr> -<tr><td>Send <a href="https://tools.ietf.org/html/rfc6455#section-5.5.2">pings</a> and receive <a href="https://tools.ietf.org/html/rfc6455#section-5.5.3">pongs</a></td><td><a href="http://godoc.org/github.com/gorilla/websocket#hdr-Control_Messages">Yes</a></td><td>No</td></tr> -<tr><td>Get the <a href="https://tools.ietf.org/html/rfc6455#section-5.6">type</a> of a received data message</td><td>Yes</td><td>Yes, see note 2</td></tr> -<tr><td colspan="3">Other Features</tr></td> -<tr><td><a href="https://tools.ietf.org/html/rfc7692">Compression Extensions</a></td><td>Experimental</td><td>No</td></tr> -<tr><td>Read message using io.Reader</td><td><a href="http://godoc.org/github.com/gorilla/websocket#Conn.NextReader">Yes</a></td><td>No, see note 3</td></tr> -<tr><td>Write message using io.WriteCloser</td><td><a href="http://godoc.org/github.com/gorilla/websocket#Conn.NextWriter">Yes</a></td><td>No, see note 3</td></tr> -</table> - -Notes: - -1. Large messages are fragmented in [Chrome's new WebSocket implementation](http://www.ietf.org/mail-archive/web/hybi/current/msg10503.html). -2. The application can get the type of a received data message by implementing - a [Codec marshal](http://godoc.org/golang.org/x/net/websocket#Codec.Marshal) - function. -3. The go.net io.Reader and io.Writer operate across WebSocket frame boundaries. - Read returns when the input buffer is full or a frame boundary is - encountered. Each call to Write sends a single frame message. The Gorilla - io.Reader and io.WriteCloser operate on a single WebSocket message. - diff --git a/vendor/github.com/gorilla/websocket/client.go b/vendor/github.com/gorilla/websocket/client.go index 962c06a3..2efd8355 100644 --- a/vendor/github.com/gorilla/websocket/client.go +++ b/vendor/github.com/gorilla/websocket/client.go @@ -48,15 +48,23 @@ func NewClient(netConn net.Conn, u *url.URL, requestHeader http.Header, readBufS } // A Dialer contains options for connecting to WebSocket server. +// +// It is safe to call Dialer's methods concurrently. type Dialer struct { // NetDial specifies the dial function for creating TCP connections. If // NetDial is nil, net.Dial is used. NetDial func(network, addr string) (net.Conn, error) // NetDialContext specifies the dial function for creating TCP connections. If - // NetDialContext is nil, net.DialContext is used. + // NetDialContext is nil, NetDial is used. NetDialContext func(ctx context.Context, network, addr string) (net.Conn, error) + // NetDialTLSContext specifies the dial function for creating TLS/TCP connections. If + // NetDialTLSContext is nil, NetDialContext is used. + // If NetDialTLSContext is set, Dial assumes the TLS handshake is done there and + // TLSClientConfig is ignored. + NetDialTLSContext func(ctx context.Context, network, addr string) (net.Conn, error) + // Proxy specifies a function to return a proxy for a given // Request. If the function returns a non-nil error, the // request is aborted with the provided error. @@ -65,6 +73,8 @@ type Dialer struct { // TLSClientConfig specifies the TLS configuration to use with tls.Client. // If nil, the default configuration is used. + // If either NetDialTLS or NetDialTLSContext are set, Dial assumes the TLS handshake + // is done there and TLSClientConfig is ignored. TLSClientConfig *tls.Config // HandshakeTimeout specifies the duration for the handshake to complete. @@ -176,7 +186,7 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h } req := &http.Request{ - Method: "GET", + Method: http.MethodGet, URL: u, Proto: "HTTP/1.1", ProtoMajor: 1, @@ -237,13 +247,32 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h // Get network dial function. var netDial func(network, add string) (net.Conn, error) - if d.NetDialContext != nil { - netDial = func(network, addr string) (net.Conn, error) { - return d.NetDialContext(ctx, network, addr) + switch u.Scheme { + case "http": + if d.NetDialContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialContext(ctx, network, addr) + } + } else if d.NetDial != nil { + netDial = d.NetDial } - } else if d.NetDial != nil { - netDial = d.NetDial - } else { + case "https": + if d.NetDialTLSContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialTLSContext(ctx, network, addr) + } + } else if d.NetDialContext != nil { + netDial = func(network, addr string) (net.Conn, error) { + return d.NetDialContext(ctx, network, addr) + } + } else if d.NetDial != nil { + netDial = d.NetDial + } + default: + return nil, nil, errMalformedURL + } + + if netDial == nil { netDialer := &net.Dialer{} netDial = func(network, addr string) (net.Conn, error) { return netDialer.DialContext(ctx, network, addr) @@ -304,7 +333,9 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h } }() - if u.Scheme == "https" { + if u.Scheme == "https" && d.NetDialTLSContext == nil { + // If NetDialTLSContext is set, assume that the TLS handshake has already been done + cfg := cloneTLSConfig(d.TLSClientConfig) if cfg.ServerName == "" { cfg.ServerName = hostNoPort @@ -312,11 +343,12 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h tlsConn := tls.Client(netConn, cfg) netConn = tlsConn - var err error - if trace != nil { - err = doHandshakeWithTrace(trace, tlsConn, cfg) - } else { - err = doHandshake(tlsConn, cfg) + if trace != nil && trace.TLSHandshakeStart != nil { + trace.TLSHandshakeStart() + } + err := doHandshake(ctx, tlsConn, cfg) + if trace != nil && trace.TLSHandshakeDone != nil { + trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) } if err != nil { @@ -348,8 +380,8 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h } if resp.StatusCode != 101 || - !strings.EqualFold(resp.Header.Get("Upgrade"), "websocket") || - !strings.EqualFold(resp.Header.Get("Connection"), "upgrade") || + !tokenListContainsValue(resp.Header, "Upgrade", "websocket") || + !tokenListContainsValue(resp.Header, "Connection", "upgrade") || resp.Header.Get("Sec-Websocket-Accept") != computeAcceptKey(challengeKey) { // Before closing the network connection on return from this // function, slurp up some of the response to aid application @@ -382,14 +414,9 @@ func (d *Dialer) DialContext(ctx context.Context, urlStr string, requestHeader h return conn, resp, nil } -func doHandshake(tlsConn *tls.Conn, cfg *tls.Config) error { - if err := tlsConn.Handshake(); err != nil { - return err - } - if !cfg.InsecureSkipVerify { - if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { - return err - } +func cloneTLSConfig(cfg *tls.Config) *tls.Config { + if cfg == nil { + return &tls.Config{} } - return nil + return cfg.Clone() } diff --git a/vendor/github.com/gorilla/websocket/client_clone.go b/vendor/github.com/gorilla/websocket/client_clone.go deleted file mode 100644 index 4f0d9437..00000000 --- a/vendor/github.com/gorilla/websocket/client_clone.go +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.8 - -package websocket - -import "crypto/tls" - -func cloneTLSConfig(cfg *tls.Config) *tls.Config { - if cfg == nil { - return &tls.Config{} - } - return cfg.Clone() -} diff --git a/vendor/github.com/gorilla/websocket/client_clone_legacy.go b/vendor/github.com/gorilla/websocket/client_clone_legacy.go deleted file mode 100644 index babb007f..00000000 --- a/vendor/github.com/gorilla/websocket/client_clone_legacy.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2013 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.8 - -package websocket - -import "crypto/tls" - -// cloneTLSConfig clones all public fields except the fields -// SessionTicketsDisabled and SessionTicketKey. This avoids copying the -// sync.Mutex in the sync.Once and makes it safe to call cloneTLSConfig on a -// config in active use. -func cloneTLSConfig(cfg *tls.Config) *tls.Config { - if cfg == nil { - return &tls.Config{} - } - return &tls.Config{ - Rand: cfg.Rand, - Time: cfg.Time, - Certificates: cfg.Certificates, - NameToCertificate: cfg.NameToCertificate, - GetCertificate: cfg.GetCertificate, - RootCAs: cfg.RootCAs, - NextProtos: cfg.NextProtos, - ServerName: cfg.ServerName, - ClientAuth: cfg.ClientAuth, - ClientCAs: cfg.ClientCAs, - InsecureSkipVerify: cfg.InsecureSkipVerify, - CipherSuites: cfg.CipherSuites, - PreferServerCipherSuites: cfg.PreferServerCipherSuites, - ClientSessionCache: cfg.ClientSessionCache, - MinVersion: cfg.MinVersion, - MaxVersion: cfg.MaxVersion, - CurvePreferences: cfg.CurvePreferences, - } -} diff --git a/vendor/github.com/gorilla/websocket/conn.go b/vendor/github.com/gorilla/websocket/conn.go index ca46d2f7..331eebc8 100644 --- a/vendor/github.com/gorilla/websocket/conn.go +++ b/vendor/github.com/gorilla/websocket/conn.go @@ -13,6 +13,7 @@ import ( "math/rand" "net" "strconv" + "strings" "sync" "time" "unicode/utf8" @@ -401,6 +402,12 @@ func (c *Conn) write(frameType int, deadline time.Time, buf0, buf1 []byte) error return nil } +func (c *Conn) writeBufs(bufs ...[]byte) error { + b := net.Buffers(bufs) + _, err := b.WriteTo(c.conn) + return err +} + // WriteControl writes a control message with the given deadline. The allowed // message types are CloseMessage, PingMessage and PongMessage. func (c *Conn) WriteControl(messageType int, data []byte, deadline time.Time) error { @@ -794,47 +801,69 @@ func (c *Conn) advanceFrame() (int, error) { } // 2. Read and parse first two bytes of frame header. + // To aid debugging, collect and report all errors in the first two bytes + // of the header. + + var errors []string p, err := c.read(2) if err != nil { return noFrame, err } - final := p[0]&finalBit != 0 frameType := int(p[0] & 0xf) + final := p[0]&finalBit != 0 + rsv1 := p[0]&rsv1Bit != 0 + rsv2 := p[0]&rsv2Bit != 0 + rsv3 := p[0]&rsv3Bit != 0 mask := p[1]&maskBit != 0 c.setReadRemaining(int64(p[1] & 0x7f)) c.readDecompress = false - if c.newDecompressionReader != nil && (p[0]&rsv1Bit) != 0 { - c.readDecompress = true - p[0] &^= rsv1Bit + if rsv1 { + if c.newDecompressionReader != nil { + c.readDecompress = true + } else { + errors = append(errors, "RSV1 set") + } + } + + if rsv2 { + errors = append(errors, "RSV2 set") } - if rsv := p[0] & (rsv1Bit | rsv2Bit | rsv3Bit); rsv != 0 { - return noFrame, c.handleProtocolError("unexpected reserved bits 0x" + strconv.FormatInt(int64(rsv), 16)) + if rsv3 { + errors = append(errors, "RSV3 set") } switch frameType { case CloseMessage, PingMessage, PongMessage: if c.readRemaining > maxControlFramePayloadSize { - return noFrame, c.handleProtocolError("control frame length > 125") + errors = append(errors, "len > 125 for control") } if !final { - return noFrame, c.handleProtocolError("control frame not final") + errors = append(errors, "FIN not set on control") } case TextMessage, BinaryMessage: if !c.readFinal { - return noFrame, c.handleProtocolError("message start before final message frame") + errors = append(errors, "data before FIN") } c.readFinal = final case continuationFrame: if c.readFinal { - return noFrame, c.handleProtocolError("continuation after final message frame") + errors = append(errors, "continuation after FIN") } c.readFinal = final default: - return noFrame, c.handleProtocolError("unknown opcode " + strconv.Itoa(frameType)) + errors = append(errors, "bad opcode "+strconv.Itoa(frameType)) + } + + if mask != c.isServer { + errors = append(errors, "bad MASK") + } + + if len(errors) > 0 { + return noFrame, c.handleProtocolError(strings.Join(errors, ", ")) } // 3. Read and parse frame length as per @@ -872,10 +901,6 @@ func (c *Conn) advanceFrame() (int, error) { // 4. Handle frame masking. - if mask != c.isServer { - return noFrame, c.handleProtocolError("incorrect mask flag") - } - if mask { c.readMaskPos = 0 p, err := c.read(len(c.readMaskKey)) @@ -935,7 +960,7 @@ func (c *Conn) advanceFrame() (int, error) { if len(payload) >= 2 { closeCode = int(binary.BigEndian.Uint16(payload)) if !isValidReceivedCloseCode(closeCode) { - return noFrame, c.handleProtocolError("invalid close code") + return noFrame, c.handleProtocolError("bad close code " + strconv.Itoa(closeCode)) } closeText = string(payload[2:]) if !utf8.ValidString(closeText) { @@ -952,7 +977,11 @@ func (c *Conn) advanceFrame() (int, error) { } func (c *Conn) handleProtocolError(message string) error { - c.WriteControl(CloseMessage, FormatCloseMessage(CloseProtocolError, message), time.Now().Add(writeWait)) + data := FormatCloseMessage(CloseProtocolError, message) + if len(data) > maxControlFramePayloadSize { + data = data[:maxControlFramePayloadSize] + } + c.WriteControl(CloseMessage, data, time.Now().Add(writeWait)) return errors.New("websocket: " + message) } diff --git a/vendor/github.com/gorilla/websocket/conn_write.go b/vendor/github.com/gorilla/websocket/conn_write.go deleted file mode 100644 index a509a21f..00000000 --- a/vendor/github.com/gorilla/websocket/conn_write.go +++ /dev/null @@ -1,15 +0,0 @@ -// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build go1.8 - -package websocket - -import "net" - -func (c *Conn) writeBufs(bufs ...[]byte) error { - b := net.Buffers(bufs) - _, err := b.WriteTo(c.conn) - return err -} diff --git a/vendor/github.com/gorilla/websocket/conn_write_legacy.go b/vendor/github.com/gorilla/websocket/conn_write_legacy.go deleted file mode 100644 index 37edaff5..00000000 --- a/vendor/github.com/gorilla/websocket/conn_write_legacy.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright 2016 The Gorilla WebSocket Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -// +build !go1.8 - -package websocket - -func (c *Conn) writeBufs(bufs ...[]byte) error { - for _, buf := range bufs { - if len(buf) > 0 { - if _, err := c.conn.Write(buf); err != nil { - return err - } - } - } - return nil -} diff --git a/vendor/github.com/gorilla/websocket/mask.go b/vendor/github.com/gorilla/websocket/mask.go index 577fce9e..d0742bf2 100644 --- a/vendor/github.com/gorilla/websocket/mask.go +++ b/vendor/github.com/gorilla/websocket/mask.go @@ -2,6 +2,7 @@ // this source code is governed by a BSD-style license that can be found in the // LICENSE file. +//go:build !appengine // +build !appengine package websocket diff --git a/vendor/github.com/gorilla/websocket/mask_safe.go b/vendor/github.com/gorilla/websocket/mask_safe.go index 2aac060e..36250ca7 100644 --- a/vendor/github.com/gorilla/websocket/mask_safe.go +++ b/vendor/github.com/gorilla/websocket/mask_safe.go @@ -2,6 +2,7 @@ // this source code is governed by a BSD-style license that can be found in the // LICENSE file. +//go:build appengine // +build appengine package websocket diff --git a/vendor/github.com/gorilla/websocket/proxy.go b/vendor/github.com/gorilla/websocket/proxy.go index e87a8c9f..e0f466b7 100644 --- a/vendor/github.com/gorilla/websocket/proxy.go +++ b/vendor/github.com/gorilla/websocket/proxy.go @@ -48,7 +48,7 @@ func (hpd *httpProxyDialer) Dial(network string, addr string) (net.Conn, error) } connectReq := &http.Request{ - Method: "CONNECT", + Method: http.MethodConnect, URL: &url.URL{Opaque: addr}, Host: addr, Header: connectHeader, diff --git a/vendor/github.com/gorilla/websocket/server.go b/vendor/github.com/gorilla/websocket/server.go index 887d5589..24d53b38 100644 --- a/vendor/github.com/gorilla/websocket/server.go +++ b/vendor/github.com/gorilla/websocket/server.go @@ -23,6 +23,8 @@ func (e HandshakeError) Error() string { return e.message } // Upgrader specifies parameters for upgrading an HTTP connection to a // WebSocket connection. +// +// It is safe to call Upgrader's methods concurrently. type Upgrader struct { // HandshakeTimeout specifies the duration for the handshake to complete. HandshakeTimeout time.Duration @@ -115,8 +117,8 @@ func (u *Upgrader) selectSubprotocol(r *http.Request, responseHeader http.Header // Upgrade upgrades the HTTP server connection to the WebSocket protocol. // // The responseHeader is included in the response to the client's upgrade -// request. Use the responseHeader to specify cookies (Set-Cookie) and the -// application negotiated subprotocol (Sec-WebSocket-Protocol). +// request. Use the responseHeader to specify cookies (Set-Cookie). To specify +// subprotocols supported by the server, set Upgrader.Subprotocols directly. // // If the upgrade fails, then Upgrade replies to the client with an HTTP error // response. @@ -131,7 +133,7 @@ func (u *Upgrader) Upgrade(w http.ResponseWriter, r *http.Request, responseHeade return u.returnError(w, r, http.StatusBadRequest, badHandshake+"'websocket' token not found in 'Upgrade' header") } - if r.Method != "GET" { + if r.Method != http.MethodGet { return u.returnError(w, r, http.StatusMethodNotAllowed, badHandshake+"request method is not GET") } diff --git a/vendor/github.com/gorilla/websocket/tls_handshake.go b/vendor/github.com/gorilla/websocket/tls_handshake.go new file mode 100644 index 00000000..a62b68cc --- /dev/null +++ b/vendor/github.com/gorilla/websocket/tls_handshake.go @@ -0,0 +1,21 @@ +//go:build go1.17 +// +build go1.17 + +package websocket + +import ( + "context" + "crypto/tls" +) + +func doHandshake(ctx context.Context, tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.HandshakeContext(ctx); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/gorilla/websocket/tls_handshake_116.go b/vendor/github.com/gorilla/websocket/tls_handshake_116.go new file mode 100644 index 00000000..e1b2b44f --- /dev/null +++ b/vendor/github.com/gorilla/websocket/tls_handshake_116.go @@ -0,0 +1,21 @@ +//go:build !go1.17 +// +build !go1.17 + +package websocket + +import ( + "context" + "crypto/tls" +) + +func doHandshake(ctx context.Context, tlsConn *tls.Conn, cfg *tls.Config) error { + if err := tlsConn.Handshake(); err != nil { + return err + } + if !cfg.InsecureSkipVerify { + if err := tlsConn.VerifyHostname(cfg.ServerName); err != nil { + return err + } + } + return nil +} diff --git a/vendor/github.com/gorilla/websocket/trace.go b/vendor/github.com/gorilla/websocket/trace.go deleted file mode 100644 index 834f122a..00000000 --- a/vendor/github.com/gorilla/websocket/trace.go +++ /dev/null @@ -1,19 +0,0 @@ -// +build go1.8 - -package websocket - -import ( - "crypto/tls" - "net/http/httptrace" -) - -func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { - if trace.TLSHandshakeStart != nil { - trace.TLSHandshakeStart() - } - err := doHandshake(tlsConn, cfg) - if trace.TLSHandshakeDone != nil { - trace.TLSHandshakeDone(tlsConn.ConnectionState(), err) - } - return err -} diff --git a/vendor/github.com/gorilla/websocket/trace_17.go b/vendor/github.com/gorilla/websocket/trace_17.go deleted file mode 100644 index 77d05a0b..00000000 --- a/vendor/github.com/gorilla/websocket/trace_17.go +++ /dev/null @@ -1,12 +0,0 @@ -// +build !go1.8 - -package websocket - -import ( - "crypto/tls" - "net/http/httptrace" -) - -func doHandshakeWithTrace(trace *httptrace.ClientTrace, tlsConn *tls.Conn, cfg *tls.Config) error { - return doHandshake(tlsConn, cfg) -} diff --git a/vendor/github.com/harmony-development/shibshib/gen/chat/v1/chat_hrpc_client.pb.go b/vendor/github.com/harmony-development/shibshib/gen/chat/v1/chat_hrpc_client.pb.go index 62c02415..bb2ebde9 100644 --- a/vendor/github.com/harmony-development/shibshib/gen/chat/v1/chat_hrpc_client.pb.go +++ b/vendor/github.com/harmony-development/shibshib/gen/chat/v1/chat_hrpc_client.pb.go @@ -156,6 +156,9 @@ type ChatServiceClient interface { // Endpoint to unpin a message in a guild channel. UnpinMessage(context.Context, *UnpinMessageRequest) (*UnpinMessageResponse, error) // Endpoint to stream events from the homeserver. + // By default, this endpoint will subscribe to all events. + // Any guilds joined in the future will be added to the subscription as well. + // Use the UnsubscribeFromAll event for unsubscribing from all current subscriptions and disable the automatic guild subscriptions StreamEvents(context.Context, chan *StreamEventsRequest) (chan *StreamEventsResponse, error) // Endpoint to add a reaction to a message. AddReaction(context.Context, *AddReactionRequest) (*AddReactionResponse, error) diff --git a/vendor/github.com/harmony-development/shibshib/gen/chat/v1/guilds.pb.go b/vendor/github.com/harmony-development/shibshib/gen/chat/v1/guilds.pb.go index b60867fb..0ffc53c8 100644 --- a/vendor/github.com/harmony-development/shibshib/gen/chat/v1/guilds.pb.go +++ b/vendor/github.com/harmony-development/shibshib/gen/chat/v1/guilds.pb.go @@ -268,6 +268,64 @@ func (x *Guild) GetMetadata() *v1.Metadata { return nil } +// Object representing a guild with the ID part. +type GuildWithId struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The ID of the guild. + GuildId uint64 `protobuf:"varint,1,opt,name=guild_id,json=guildId,proto3" json:"guild_id,omitempty"` + // The guild. + Guild *Guild `protobuf:"bytes,2,opt,name=guild,proto3" json:"guild,omitempty"` +} + +func (x *GuildWithId) Reset() { + *x = GuildWithId{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_guilds_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *GuildWithId) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GuildWithId) ProtoMessage() {} + +func (x *GuildWithId) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_guilds_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GuildWithId.ProtoReflect.Descriptor instead. +func (*GuildWithId) Descriptor() ([]byte, []int) { + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{2} +} + +func (x *GuildWithId) GetGuildId() uint64 { + if x != nil { + return x.GuildId + } + return 0 +} + +func (x *GuildWithId) GetGuild() *Guild { + if x != nil { + return x.Guild + } + return nil +} + // Object representing an invite without the ID part. type Invite struct { state protoimpl.MessageState @@ -283,7 +341,7 @@ type Invite struct { func (x *Invite) Reset() { *x = Invite{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[2] + mi := &file_chat_v1_guilds_proto_msgTypes[3] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -296,7 +354,7 @@ func (x *Invite) String() string { func (*Invite) ProtoMessage() {} func (x *Invite) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[2] + mi := &file_chat_v1_guilds_proto_msgTypes[3] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -309,7 +367,7 @@ func (x *Invite) ProtoReflect() protoreflect.Message { // Deprecated: Use Invite.ProtoReflect.Descriptor instead. func (*Invite) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{2} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{3} } func (x *Invite) GetPossibleUses() uint32 { @@ -341,7 +399,7 @@ type InviteWithId struct { func (x *InviteWithId) Reset() { *x = InviteWithId{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[3] + mi := &file_chat_v1_guilds_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -354,7 +412,7 @@ func (x *InviteWithId) String() string { func (*InviteWithId) ProtoMessage() {} func (x *InviteWithId) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[3] + mi := &file_chat_v1_guilds_proto_msgTypes[4] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -367,7 +425,7 @@ func (x *InviteWithId) ProtoReflect() protoreflect.Message { // Deprecated: Use InviteWithId.ProtoReflect.Descriptor instead. func (*InviteWithId) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{3} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{4} } func (x *InviteWithId) GetInviteId() string { @@ -401,7 +459,7 @@ type PendingInvite struct { func (x *PendingInvite) Reset() { *x = PendingInvite{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[4] + mi := &file_chat_v1_guilds_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -414,7 +472,7 @@ func (x *PendingInvite) String() string { func (*PendingInvite) ProtoMessage() {} func (x *PendingInvite) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[4] + mi := &file_chat_v1_guilds_proto_msgTypes[5] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -427,7 +485,7 @@ func (x *PendingInvite) ProtoReflect() protoreflect.Message { // Deprecated: Use PendingInvite.ProtoReflect.Descriptor instead. func (*PendingInvite) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{4} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{5} } func (x *PendingInvite) GetInviteId() string { @@ -466,7 +524,7 @@ type GuildListEntry struct { func (x *GuildListEntry) Reset() { *x = GuildListEntry{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[5] + mi := &file_chat_v1_guilds_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -479,7 +537,7 @@ func (x *GuildListEntry) String() string { func (*GuildListEntry) ProtoMessage() {} func (x *GuildListEntry) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[5] + mi := &file_chat_v1_guilds_proto_msgTypes[6] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -492,7 +550,7 @@ func (x *GuildListEntry) ProtoReflect() protoreflect.Message { // Deprecated: Use GuildListEntry.ProtoReflect.Descriptor instead. func (*GuildListEntry) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{5} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{6} } func (x *GuildListEntry) GetGuildId() uint64 { @@ -526,7 +584,7 @@ type CreateGuildRequest struct { func (x *CreateGuildRequest) Reset() { *x = CreateGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[6] + mi := &file_chat_v1_guilds_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -539,7 +597,7 @@ func (x *CreateGuildRequest) String() string { func (*CreateGuildRequest) ProtoMessage() {} func (x *CreateGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[6] + mi := &file_chat_v1_guilds_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -552,7 +610,7 @@ func (x *CreateGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGuildRequest.ProtoReflect.Descriptor instead. func (*CreateGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{6} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{7} } func (x *CreateGuildRequest) GetName() string { @@ -589,7 +647,7 @@ type CreateGuildResponse struct { func (x *CreateGuildResponse) Reset() { *x = CreateGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[7] + mi := &file_chat_v1_guilds_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -602,7 +660,7 @@ func (x *CreateGuildResponse) String() string { func (*CreateGuildResponse) ProtoMessage() {} func (x *CreateGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[7] + mi := &file_chat_v1_guilds_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -615,7 +673,7 @@ func (x *CreateGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateGuildResponse.ProtoReflect.Descriptor instead. func (*CreateGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{7} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{8} } func (x *CreateGuildResponse) GetGuildId() uint64 { @@ -642,7 +700,7 @@ type CreateRoomRequest struct { func (x *CreateRoomRequest) Reset() { *x = CreateRoomRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[8] + mi := &file_chat_v1_guilds_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -655,7 +713,7 @@ func (x *CreateRoomRequest) String() string { func (*CreateRoomRequest) ProtoMessage() {} func (x *CreateRoomRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[8] + mi := &file_chat_v1_guilds_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -668,7 +726,7 @@ func (x *CreateRoomRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRoomRequest.ProtoReflect.Descriptor instead. func (*CreateRoomRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{8} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{9} } func (x *CreateRoomRequest) GetName() string { @@ -705,7 +763,7 @@ type CreateRoomResponse struct { func (x *CreateRoomResponse) Reset() { *x = CreateRoomResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[9] + mi := &file_chat_v1_guilds_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -718,7 +776,7 @@ func (x *CreateRoomResponse) String() string { func (*CreateRoomResponse) ProtoMessage() {} func (x *CreateRoomResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[9] + mi := &file_chat_v1_guilds_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -731,7 +789,7 @@ func (x *CreateRoomResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateRoomResponse.ProtoReflect.Descriptor instead. func (*CreateRoomResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{9} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{10} } func (x *CreateRoomResponse) GetGuildId() uint64 { @@ -758,7 +816,7 @@ type CreateDirectMessageRequest struct { func (x *CreateDirectMessageRequest) Reset() { *x = CreateDirectMessageRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[10] + mi := &file_chat_v1_guilds_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -771,7 +829,7 @@ func (x *CreateDirectMessageRequest) String() string { func (*CreateDirectMessageRequest) ProtoMessage() {} func (x *CreateDirectMessageRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[10] + mi := &file_chat_v1_guilds_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -784,7 +842,7 @@ func (x *CreateDirectMessageRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDirectMessageRequest.ProtoReflect.Descriptor instead. func (*CreateDirectMessageRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{10} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{11} } func (x *CreateDirectMessageRequest) GetUserName() string { @@ -814,7 +872,7 @@ type CreateDirectMessageResponse struct { func (x *CreateDirectMessageResponse) Reset() { *x = CreateDirectMessageResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[11] + mi := &file_chat_v1_guilds_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -827,7 +885,7 @@ func (x *CreateDirectMessageResponse) String() string { func (*CreateDirectMessageResponse) ProtoMessage() {} func (x *CreateDirectMessageResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[11] + mi := &file_chat_v1_guilds_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -840,7 +898,7 @@ func (x *CreateDirectMessageResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateDirectMessageResponse.ProtoReflect.Descriptor instead. func (*CreateDirectMessageResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{11} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{12} } func (x *CreateDirectMessageResponse) GetGuildId() uint64 { @@ -869,7 +927,7 @@ type CreateInviteRequest struct { func (x *CreateInviteRequest) Reset() { *x = CreateInviteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[12] + mi := &file_chat_v1_guilds_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -882,7 +940,7 @@ func (x *CreateInviteRequest) String() string { func (*CreateInviteRequest) ProtoMessage() {} func (x *CreateInviteRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[12] + mi := &file_chat_v1_guilds_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -895,7 +953,7 @@ func (x *CreateInviteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateInviteRequest.ProtoReflect.Descriptor instead. func (*CreateInviteRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{12} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{13} } func (x *CreateInviteRequest) GetGuildId() uint64 { @@ -932,7 +990,7 @@ type CreateInviteResponse struct { func (x *CreateInviteResponse) Reset() { *x = CreateInviteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[13] + mi := &file_chat_v1_guilds_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -945,7 +1003,7 @@ func (x *CreateInviteResponse) String() string { func (*CreateInviteResponse) ProtoMessage() {} func (x *CreateInviteResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[13] + mi := &file_chat_v1_guilds_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -958,7 +1016,7 @@ func (x *CreateInviteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateInviteResponse.ProtoReflect.Descriptor instead. func (*CreateInviteResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{13} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{14} } func (x *CreateInviteResponse) GetInviteId() string { @@ -978,7 +1036,7 @@ type GetGuildListRequest struct { func (x *GetGuildListRequest) Reset() { *x = GetGuildListRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[14] + mi := &file_chat_v1_guilds_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -991,7 +1049,7 @@ func (x *GetGuildListRequest) String() string { func (*GetGuildListRequest) ProtoMessage() {} func (x *GetGuildListRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[14] + mi := &file_chat_v1_guilds_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1004,7 +1062,7 @@ func (x *GetGuildListRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildListRequest.ProtoReflect.Descriptor instead. func (*GetGuildListRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{14} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{15} } // Used in the `GetGuildList` endpoint. @@ -1020,7 +1078,7 @@ type GetGuildListResponse struct { func (x *GetGuildListResponse) Reset() { *x = GetGuildListResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[15] + mi := &file_chat_v1_guilds_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1033,7 +1091,7 @@ func (x *GetGuildListResponse) String() string { func (*GetGuildListResponse) ProtoMessage() {} func (x *GetGuildListResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[15] + mi := &file_chat_v1_guilds_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1046,7 +1104,7 @@ func (x *GetGuildListResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildListResponse.ProtoReflect.Descriptor instead. func (*GetGuildListResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{15} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{16} } func (x *GetGuildListResponse) GetGuilds() []*GuildListEntry { @@ -1069,7 +1127,7 @@ type GetGuildRequest struct { func (x *GetGuildRequest) Reset() { *x = GetGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[16] + mi := &file_chat_v1_guilds_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1082,7 +1140,7 @@ func (x *GetGuildRequest) String() string { func (*GetGuildRequest) ProtoMessage() {} func (x *GetGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[16] + mi := &file_chat_v1_guilds_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1095,7 +1153,7 @@ func (x *GetGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildRequest.ProtoReflect.Descriptor instead. func (*GetGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{16} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{17} } func (x *GetGuildRequest) GetGuildId() uint64 { @@ -1118,7 +1176,7 @@ type GetGuildResponse struct { func (x *GetGuildResponse) Reset() { *x = GetGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[17] + mi := &file_chat_v1_guilds_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1131,7 +1189,7 @@ func (x *GetGuildResponse) String() string { func (*GetGuildResponse) ProtoMessage() {} func (x *GetGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[17] + mi := &file_chat_v1_guilds_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1144,7 +1202,7 @@ func (x *GetGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildResponse.ProtoReflect.Descriptor instead. func (*GetGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{17} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{18} } func (x *GetGuildResponse) GetGuild() *Guild { @@ -1167,7 +1225,7 @@ type GetGuildInvitesRequest struct { func (x *GetGuildInvitesRequest) Reset() { *x = GetGuildInvitesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[18] + mi := &file_chat_v1_guilds_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1180,7 +1238,7 @@ func (x *GetGuildInvitesRequest) String() string { func (*GetGuildInvitesRequest) ProtoMessage() {} func (x *GetGuildInvitesRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[18] + mi := &file_chat_v1_guilds_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1193,7 +1251,7 @@ func (x *GetGuildInvitesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildInvitesRequest.ProtoReflect.Descriptor instead. func (*GetGuildInvitesRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{18} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{19} } func (x *GetGuildInvitesRequest) GetGuildId() uint64 { @@ -1216,7 +1274,7 @@ type GetGuildInvitesResponse struct { func (x *GetGuildInvitesResponse) Reset() { *x = GetGuildInvitesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[19] + mi := &file_chat_v1_guilds_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1229,7 +1287,7 @@ func (x *GetGuildInvitesResponse) String() string { func (*GetGuildInvitesResponse) ProtoMessage() {} func (x *GetGuildInvitesResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[19] + mi := &file_chat_v1_guilds_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1242,7 +1300,7 @@ func (x *GetGuildInvitesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildInvitesResponse.ProtoReflect.Descriptor instead. func (*GetGuildInvitesResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{19} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{20} } func (x *GetGuildInvitesResponse) GetInvites() []*InviteWithId { @@ -1265,7 +1323,7 @@ type GetGuildMembersRequest struct { func (x *GetGuildMembersRequest) Reset() { *x = GetGuildMembersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[20] + mi := &file_chat_v1_guilds_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1278,7 +1336,7 @@ func (x *GetGuildMembersRequest) String() string { func (*GetGuildMembersRequest) ProtoMessage() {} func (x *GetGuildMembersRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[20] + mi := &file_chat_v1_guilds_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1291,7 +1349,7 @@ func (x *GetGuildMembersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildMembersRequest.ProtoReflect.Descriptor instead. func (*GetGuildMembersRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{20} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{21} } func (x *GetGuildMembersRequest) GetGuildId() uint64 { @@ -1314,7 +1372,7 @@ type GetGuildMembersResponse struct { func (x *GetGuildMembersResponse) Reset() { *x = GetGuildMembersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[21] + mi := &file_chat_v1_guilds_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1327,7 +1385,7 @@ func (x *GetGuildMembersResponse) String() string { func (*GetGuildMembersResponse) ProtoMessage() {} func (x *GetGuildMembersResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[21] + mi := &file_chat_v1_guilds_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1340,7 +1398,7 @@ func (x *GetGuildMembersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetGuildMembersResponse.ProtoReflect.Descriptor instead. func (*GetGuildMembersResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{21} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{22} } func (x *GetGuildMembersResponse) GetMembers() []uint64 { @@ -1369,7 +1427,7 @@ type UpdateGuildInformationRequest struct { func (x *UpdateGuildInformationRequest) Reset() { *x = UpdateGuildInformationRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[22] + mi := &file_chat_v1_guilds_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1382,7 +1440,7 @@ func (x *UpdateGuildInformationRequest) String() string { func (*UpdateGuildInformationRequest) ProtoMessage() {} func (x *UpdateGuildInformationRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[22] + mi := &file_chat_v1_guilds_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1395,7 +1453,7 @@ func (x *UpdateGuildInformationRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGuildInformationRequest.ProtoReflect.Descriptor instead. func (*UpdateGuildInformationRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{22} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{23} } func (x *UpdateGuildInformationRequest) GetGuildId() uint64 { @@ -1436,7 +1494,7 @@ type UpdateGuildInformationResponse struct { func (x *UpdateGuildInformationResponse) Reset() { *x = UpdateGuildInformationResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[23] + mi := &file_chat_v1_guilds_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1449,7 +1507,7 @@ func (x *UpdateGuildInformationResponse) String() string { func (*UpdateGuildInformationResponse) ProtoMessage() {} func (x *UpdateGuildInformationResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[23] + mi := &file_chat_v1_guilds_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1462,7 +1520,7 @@ func (x *UpdateGuildInformationResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateGuildInformationResponse.ProtoReflect.Descriptor instead. func (*UpdateGuildInformationResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{23} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{24} } // Used in the `UpgradeRoomToGuild` endpoint. @@ -1478,7 +1536,7 @@ type UpgradeRoomToGuildRequest struct { func (x *UpgradeRoomToGuildRequest) Reset() { *x = UpgradeRoomToGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[24] + mi := &file_chat_v1_guilds_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1491,7 +1549,7 @@ func (x *UpgradeRoomToGuildRequest) String() string { func (*UpgradeRoomToGuildRequest) ProtoMessage() {} func (x *UpgradeRoomToGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[24] + mi := &file_chat_v1_guilds_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1504,7 +1562,7 @@ func (x *UpgradeRoomToGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeRoomToGuildRequest.ProtoReflect.Descriptor instead. func (*UpgradeRoomToGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{24} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{25} } func (x *UpgradeRoomToGuildRequest) GetGuildId() uint64 { @@ -1524,7 +1582,7 @@ type UpgradeRoomToGuildResponse struct { func (x *UpgradeRoomToGuildResponse) Reset() { *x = UpgradeRoomToGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[25] + mi := &file_chat_v1_guilds_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1537,7 +1595,7 @@ func (x *UpgradeRoomToGuildResponse) String() string { func (*UpgradeRoomToGuildResponse) ProtoMessage() {} func (x *UpgradeRoomToGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[25] + mi := &file_chat_v1_guilds_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1550,7 +1608,7 @@ func (x *UpgradeRoomToGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UpgradeRoomToGuildResponse.ProtoReflect.Descriptor instead. func (*UpgradeRoomToGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{25} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{26} } // Used in the `DeleteGuild` endpoint. @@ -1566,7 +1624,7 @@ type DeleteGuildRequest struct { func (x *DeleteGuildRequest) Reset() { *x = DeleteGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[26] + mi := &file_chat_v1_guilds_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1579,7 +1637,7 @@ func (x *DeleteGuildRequest) String() string { func (*DeleteGuildRequest) ProtoMessage() {} func (x *DeleteGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[26] + mi := &file_chat_v1_guilds_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1592,7 +1650,7 @@ func (x *DeleteGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGuildRequest.ProtoReflect.Descriptor instead. func (*DeleteGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{26} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{27} } func (x *DeleteGuildRequest) GetGuildId() uint64 { @@ -1612,7 +1670,7 @@ type DeleteGuildResponse struct { func (x *DeleteGuildResponse) Reset() { *x = DeleteGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[27] + mi := &file_chat_v1_guilds_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1625,7 +1683,7 @@ func (x *DeleteGuildResponse) String() string { func (*DeleteGuildResponse) ProtoMessage() {} func (x *DeleteGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[27] + mi := &file_chat_v1_guilds_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1638,7 +1696,7 @@ func (x *DeleteGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteGuildResponse.ProtoReflect.Descriptor instead. func (*DeleteGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{27} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{28} } // Used in the `DeleteInvite` endpoint. @@ -1656,7 +1714,7 @@ type DeleteInviteRequest struct { func (x *DeleteInviteRequest) Reset() { *x = DeleteInviteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[28] + mi := &file_chat_v1_guilds_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1669,7 +1727,7 @@ func (x *DeleteInviteRequest) String() string { func (*DeleteInviteRequest) ProtoMessage() {} func (x *DeleteInviteRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[28] + mi := &file_chat_v1_guilds_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1682,7 +1740,7 @@ func (x *DeleteInviteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteInviteRequest.ProtoReflect.Descriptor instead. func (*DeleteInviteRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{28} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{29} } func (x *DeleteInviteRequest) GetGuildId() uint64 { @@ -1709,7 +1767,7 @@ type DeleteInviteResponse struct { func (x *DeleteInviteResponse) Reset() { *x = DeleteInviteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[29] + mi := &file_chat_v1_guilds_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1722,7 +1780,7 @@ func (x *DeleteInviteResponse) String() string { func (*DeleteInviteResponse) ProtoMessage() {} func (x *DeleteInviteResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[29] + mi := &file_chat_v1_guilds_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1735,7 +1793,7 @@ func (x *DeleteInviteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteInviteResponse.ProtoReflect.Descriptor instead. func (*DeleteInviteResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{29} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{30} } // Used in the `JoinGuild` endpoint. @@ -1751,7 +1809,7 @@ type JoinGuildRequest struct { func (x *JoinGuildRequest) Reset() { *x = JoinGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[30] + mi := &file_chat_v1_guilds_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1764,7 +1822,7 @@ func (x *JoinGuildRequest) String() string { func (*JoinGuildRequest) ProtoMessage() {} func (x *JoinGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[30] + mi := &file_chat_v1_guilds_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1777,7 +1835,7 @@ func (x *JoinGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use JoinGuildRequest.ProtoReflect.Descriptor instead. func (*JoinGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{30} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{31} } func (x *JoinGuildRequest) GetInviteId() string { @@ -1800,7 +1858,7 @@ type JoinGuildResponse struct { func (x *JoinGuildResponse) Reset() { *x = JoinGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[31] + mi := &file_chat_v1_guilds_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1813,7 +1871,7 @@ func (x *JoinGuildResponse) String() string { func (*JoinGuildResponse) ProtoMessage() {} func (x *JoinGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[31] + mi := &file_chat_v1_guilds_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1826,7 +1884,7 @@ func (x *JoinGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use JoinGuildResponse.ProtoReflect.Descriptor instead. func (*JoinGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{31} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{32} } func (x *JoinGuildResponse) GetGuildId() uint64 { @@ -1849,7 +1907,7 @@ type PreviewGuildRequest struct { func (x *PreviewGuildRequest) Reset() { *x = PreviewGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[32] + mi := &file_chat_v1_guilds_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1862,7 +1920,7 @@ func (x *PreviewGuildRequest) String() string { func (*PreviewGuildRequest) ProtoMessage() {} func (x *PreviewGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[32] + mi := &file_chat_v1_guilds_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1875,7 +1933,7 @@ func (x *PreviewGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use PreviewGuildRequest.ProtoReflect.Descriptor instead. func (*PreviewGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{32} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{33} } func (x *PreviewGuildRequest) GetInviteId() string { @@ -1902,7 +1960,7 @@ type PreviewGuildResponse struct { func (x *PreviewGuildResponse) Reset() { *x = PreviewGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[33] + mi := &file_chat_v1_guilds_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1915,7 +1973,7 @@ func (x *PreviewGuildResponse) String() string { func (*PreviewGuildResponse) ProtoMessage() {} func (x *PreviewGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[33] + mi := &file_chat_v1_guilds_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1928,7 +1986,7 @@ func (x *PreviewGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use PreviewGuildResponse.ProtoReflect.Descriptor instead. func (*PreviewGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{33} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{34} } func (x *PreviewGuildResponse) GetName() string { @@ -1965,7 +2023,7 @@ type LeaveGuildRequest struct { func (x *LeaveGuildRequest) Reset() { *x = LeaveGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[34] + mi := &file_chat_v1_guilds_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1978,7 +2036,7 @@ func (x *LeaveGuildRequest) String() string { func (*LeaveGuildRequest) ProtoMessage() {} func (x *LeaveGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[34] + mi := &file_chat_v1_guilds_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1991,7 +2049,7 @@ func (x *LeaveGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use LeaveGuildRequest.ProtoReflect.Descriptor instead. func (*LeaveGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{34} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{35} } func (x *LeaveGuildRequest) GetGuildId() uint64 { @@ -2011,7 +2069,7 @@ type LeaveGuildResponse struct { func (x *LeaveGuildResponse) Reset() { *x = LeaveGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[35] + mi := &file_chat_v1_guilds_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2024,7 +2082,7 @@ func (x *LeaveGuildResponse) String() string { func (*LeaveGuildResponse) ProtoMessage() {} func (x *LeaveGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[35] + mi := &file_chat_v1_guilds_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2037,7 +2095,7 @@ func (x *LeaveGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use LeaveGuildResponse.ProtoReflect.Descriptor instead. func (*LeaveGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{35} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{36} } // Used in `BanUser` endpoint. @@ -2055,7 +2113,7 @@ type BanUserRequest struct { func (x *BanUserRequest) Reset() { *x = BanUserRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[36] + mi := &file_chat_v1_guilds_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2068,7 +2126,7 @@ func (x *BanUserRequest) String() string { func (*BanUserRequest) ProtoMessage() {} func (x *BanUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[36] + mi := &file_chat_v1_guilds_proto_msgTypes[37] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2081,7 +2139,7 @@ func (x *BanUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use BanUserRequest.ProtoReflect.Descriptor instead. func (*BanUserRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{36} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{37} } func (x *BanUserRequest) GetGuildId() uint64 { @@ -2108,7 +2166,7 @@ type BanUserResponse struct { func (x *BanUserResponse) Reset() { *x = BanUserResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[37] + mi := &file_chat_v1_guilds_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2121,7 +2179,7 @@ func (x *BanUserResponse) String() string { func (*BanUserResponse) ProtoMessage() {} func (x *BanUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[37] + mi := &file_chat_v1_guilds_proto_msgTypes[38] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2134,7 +2192,7 @@ func (x *BanUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use BanUserResponse.ProtoReflect.Descriptor instead. func (*BanUserResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{37} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{38} } // Used in `KickUser` endpoint. @@ -2152,7 +2210,7 @@ type KickUserRequest struct { func (x *KickUserRequest) Reset() { *x = KickUserRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[38] + mi := &file_chat_v1_guilds_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2165,7 +2223,7 @@ func (x *KickUserRequest) String() string { func (*KickUserRequest) ProtoMessage() {} func (x *KickUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[38] + mi := &file_chat_v1_guilds_proto_msgTypes[39] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2178,7 +2236,7 @@ func (x *KickUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use KickUserRequest.ProtoReflect.Descriptor instead. func (*KickUserRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{38} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{39} } func (x *KickUserRequest) GetGuildId() uint64 { @@ -2205,7 +2263,7 @@ type KickUserResponse struct { func (x *KickUserResponse) Reset() { *x = KickUserResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[39] + mi := &file_chat_v1_guilds_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2218,7 +2276,7 @@ func (x *KickUserResponse) String() string { func (*KickUserResponse) ProtoMessage() {} func (x *KickUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[39] + mi := &file_chat_v1_guilds_proto_msgTypes[40] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2231,7 +2289,7 @@ func (x *KickUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use KickUserResponse.ProtoReflect.Descriptor instead. func (*KickUserResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{39} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{40} } // Used in `UnbanUser` endpoint. @@ -2249,7 +2307,7 @@ type UnbanUserRequest struct { func (x *UnbanUserRequest) Reset() { *x = UnbanUserRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[40] + mi := &file_chat_v1_guilds_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2262,7 +2320,7 @@ func (x *UnbanUserRequest) String() string { func (*UnbanUserRequest) ProtoMessage() {} func (x *UnbanUserRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[40] + mi := &file_chat_v1_guilds_proto_msgTypes[41] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2275,7 +2333,7 @@ func (x *UnbanUserRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UnbanUserRequest.ProtoReflect.Descriptor instead. func (*UnbanUserRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{40} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{41} } func (x *UnbanUserRequest) GetGuildId() uint64 { @@ -2302,7 +2360,7 @@ type UnbanUserResponse struct { func (x *UnbanUserResponse) Reset() { *x = UnbanUserResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[41] + mi := &file_chat_v1_guilds_proto_msgTypes[42] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2315,7 +2373,7 @@ func (x *UnbanUserResponse) String() string { func (*UnbanUserResponse) ProtoMessage() {} func (x *UnbanUserResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[41] + mi := &file_chat_v1_guilds_proto_msgTypes[42] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2328,7 +2386,7 @@ func (x *UnbanUserResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use UnbanUserResponse.ProtoReflect.Descriptor instead. func (*UnbanUserResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{41} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{42} } // Used in `GetBannedUsers` endpoint. @@ -2344,7 +2402,7 @@ type GetBannedUsersRequest struct { func (x *GetBannedUsersRequest) Reset() { *x = GetBannedUsersRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[42] + mi := &file_chat_v1_guilds_proto_msgTypes[43] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2357,7 +2415,7 @@ func (x *GetBannedUsersRequest) String() string { func (*GetBannedUsersRequest) ProtoMessage() {} func (x *GetBannedUsersRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[42] + mi := &file_chat_v1_guilds_proto_msgTypes[43] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2370,7 +2428,7 @@ func (x *GetBannedUsersRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBannedUsersRequest.ProtoReflect.Descriptor instead. func (*GetBannedUsersRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{42} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{43} } func (x *GetBannedUsersRequest) GetGuildId() uint64 { @@ -2393,7 +2451,7 @@ type GetBannedUsersResponse struct { func (x *GetBannedUsersResponse) Reset() { *x = GetBannedUsersResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[43] + mi := &file_chat_v1_guilds_proto_msgTypes[44] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2406,7 +2464,7 @@ func (x *GetBannedUsersResponse) String() string { func (*GetBannedUsersResponse) ProtoMessage() {} func (x *GetBannedUsersResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[43] + mi := &file_chat_v1_guilds_proto_msgTypes[44] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2419,7 +2477,7 @@ func (x *GetBannedUsersResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetBannedUsersResponse.ProtoReflect.Descriptor instead. func (*GetBannedUsersResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{43} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{44} } func (x *GetBannedUsersResponse) GetBannedUsers() []uint64 { @@ -2444,7 +2502,7 @@ type GrantOwnershipRequest struct { func (x *GrantOwnershipRequest) Reset() { *x = GrantOwnershipRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[44] + mi := &file_chat_v1_guilds_proto_msgTypes[45] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2457,7 +2515,7 @@ func (x *GrantOwnershipRequest) String() string { func (*GrantOwnershipRequest) ProtoMessage() {} func (x *GrantOwnershipRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[44] + mi := &file_chat_v1_guilds_proto_msgTypes[45] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2470,7 +2528,7 @@ func (x *GrantOwnershipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantOwnershipRequest.ProtoReflect.Descriptor instead. func (*GrantOwnershipRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{44} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{45} } func (x *GrantOwnershipRequest) GetGuildId() uint64 { @@ -2497,7 +2555,7 @@ type GrantOwnershipResponse struct { func (x *GrantOwnershipResponse) Reset() { *x = GrantOwnershipResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[45] + mi := &file_chat_v1_guilds_proto_msgTypes[46] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2510,7 +2568,7 @@ func (x *GrantOwnershipResponse) String() string { func (*GrantOwnershipResponse) ProtoMessage() {} func (x *GrantOwnershipResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[45] + mi := &file_chat_v1_guilds_proto_msgTypes[46] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2523,7 +2581,7 @@ func (x *GrantOwnershipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GrantOwnershipResponse.ProtoReflect.Descriptor instead. func (*GrantOwnershipResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{45} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{46} } // Request for GiveUpOwnership @@ -2539,7 +2597,7 @@ type GiveUpOwnershipRequest struct { func (x *GiveUpOwnershipRequest) Reset() { *x = GiveUpOwnershipRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[46] + mi := &file_chat_v1_guilds_proto_msgTypes[47] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2552,7 +2610,7 @@ func (x *GiveUpOwnershipRequest) String() string { func (*GiveUpOwnershipRequest) ProtoMessage() {} func (x *GiveUpOwnershipRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[46] + mi := &file_chat_v1_guilds_proto_msgTypes[47] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2565,7 +2623,7 @@ func (x *GiveUpOwnershipRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveUpOwnershipRequest.ProtoReflect.Descriptor instead. func (*GiveUpOwnershipRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{46} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{47} } func (x *GiveUpOwnershipRequest) GetGuildId() uint64 { @@ -2585,7 +2643,7 @@ type GiveUpOwnershipResponse struct { func (x *GiveUpOwnershipResponse) Reset() { *x = GiveUpOwnershipResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[47] + mi := &file_chat_v1_guilds_proto_msgTypes[48] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2598,7 +2656,7 @@ func (x *GiveUpOwnershipResponse) String() string { func (*GiveUpOwnershipResponse) ProtoMessage() {} func (x *GiveUpOwnershipResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[47] + mi := &file_chat_v1_guilds_proto_msgTypes[48] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2611,7 +2669,7 @@ func (x *GiveUpOwnershipResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GiveUpOwnershipResponse.ProtoReflect.Descriptor instead. func (*GiveUpOwnershipResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{47} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{48} } // Used in `GetPendingInvites` endpoint. @@ -2624,7 +2682,7 @@ type GetPendingInvitesRequest struct { func (x *GetPendingInvitesRequest) Reset() { *x = GetPendingInvitesRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[48] + mi := &file_chat_v1_guilds_proto_msgTypes[49] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2637,7 +2695,7 @@ func (x *GetPendingInvitesRequest) String() string { func (*GetPendingInvitesRequest) ProtoMessage() {} func (x *GetPendingInvitesRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[48] + mi := &file_chat_v1_guilds_proto_msgTypes[49] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2650,7 +2708,7 @@ func (x *GetPendingInvitesRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPendingInvitesRequest.ProtoReflect.Descriptor instead. func (*GetPendingInvitesRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{48} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{49} } // Used in `GetPendingInvites` endpoint. @@ -2666,7 +2724,7 @@ type GetPendingInvitesResponse struct { func (x *GetPendingInvitesResponse) Reset() { *x = GetPendingInvitesResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[49] + mi := &file_chat_v1_guilds_proto_msgTypes[50] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2679,7 +2737,7 @@ func (x *GetPendingInvitesResponse) String() string { func (*GetPendingInvitesResponse) ProtoMessage() {} func (x *GetPendingInvitesResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[49] + mi := &file_chat_v1_guilds_proto_msgTypes[50] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2692,7 +2750,7 @@ func (x *GetPendingInvitesResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use GetPendingInvitesResponse.ProtoReflect.Descriptor instead. func (*GetPendingInvitesResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{49} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{50} } func (x *GetPendingInvitesResponse) GetPendingInvites() []*PendingInvite { @@ -2717,7 +2775,7 @@ type RejectPendingInviteRequest struct { func (x *RejectPendingInviteRequest) Reset() { *x = RejectPendingInviteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[50] + mi := &file_chat_v1_guilds_proto_msgTypes[51] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2730,7 +2788,7 @@ func (x *RejectPendingInviteRequest) String() string { func (*RejectPendingInviteRequest) ProtoMessage() {} func (x *RejectPendingInviteRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[50] + mi := &file_chat_v1_guilds_proto_msgTypes[51] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2743,7 +2801,7 @@ func (x *RejectPendingInviteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use RejectPendingInviteRequest.ProtoReflect.Descriptor instead. func (*RejectPendingInviteRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{50} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{51} } func (x *RejectPendingInviteRequest) GetInviteId() string { @@ -2770,7 +2828,7 @@ type RejectPendingInviteResponse struct { func (x *RejectPendingInviteResponse) Reset() { *x = RejectPendingInviteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[51] + mi := &file_chat_v1_guilds_proto_msgTypes[52] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2783,7 +2841,7 @@ func (x *RejectPendingInviteResponse) String() string { func (*RejectPendingInviteResponse) ProtoMessage() {} func (x *RejectPendingInviteResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[51] + mi := &file_chat_v1_guilds_proto_msgTypes[52] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2796,7 +2854,7 @@ func (x *RejectPendingInviteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use RejectPendingInviteResponse.ProtoReflect.Descriptor instead. func (*RejectPendingInviteResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{51} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{52} } // Used in `IgnorePendingInvite` endpoint. @@ -2814,7 +2872,7 @@ type IgnorePendingInviteRequest struct { func (x *IgnorePendingInviteRequest) Reset() { *x = IgnorePendingInviteRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[52] + mi := &file_chat_v1_guilds_proto_msgTypes[53] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2827,7 +2885,7 @@ func (x *IgnorePendingInviteRequest) String() string { func (*IgnorePendingInviteRequest) ProtoMessage() {} func (x *IgnorePendingInviteRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[52] + mi := &file_chat_v1_guilds_proto_msgTypes[53] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2840,7 +2898,7 @@ func (x *IgnorePendingInviteRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use IgnorePendingInviteRequest.ProtoReflect.Descriptor instead. func (*IgnorePendingInviteRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{52} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{53} } func (x *IgnorePendingInviteRequest) GetInviteId() string { @@ -2867,7 +2925,7 @@ type IgnorePendingInviteResponse struct { func (x *IgnorePendingInviteResponse) Reset() { *x = IgnorePendingInviteResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[53] + mi := &file_chat_v1_guilds_proto_msgTypes[54] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2880,7 +2938,7 @@ func (x *IgnorePendingInviteResponse) String() string { func (*IgnorePendingInviteResponse) ProtoMessage() {} func (x *IgnorePendingInviteResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[53] + mi := &file_chat_v1_guilds_proto_msgTypes[54] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2893,7 +2951,7 @@ func (x *IgnorePendingInviteResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use IgnorePendingInviteResponse.ProtoReflect.Descriptor instead. func (*IgnorePendingInviteResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{53} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{54} } // Used in `InviteUserToGuild` endpoint. @@ -2913,7 +2971,7 @@ type InviteUserToGuildRequest struct { func (x *InviteUserToGuildRequest) Reset() { *x = InviteUserToGuildRequest{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[54] + mi := &file_chat_v1_guilds_proto_msgTypes[55] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2926,7 +2984,7 @@ func (x *InviteUserToGuildRequest) String() string { func (*InviteUserToGuildRequest) ProtoMessage() {} func (x *InviteUserToGuildRequest) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[54] + mi := &file_chat_v1_guilds_proto_msgTypes[55] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2939,7 +2997,7 @@ func (x *InviteUserToGuildRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use InviteUserToGuildRequest.ProtoReflect.Descriptor instead. func (*InviteUserToGuildRequest) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{54} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{55} } func (x *InviteUserToGuildRequest) GetUserName() string { @@ -2973,7 +3031,7 @@ type InviteUserToGuildResponse struct { func (x *InviteUserToGuildResponse) Reset() { *x = InviteUserToGuildResponse{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[55] + mi := &file_chat_v1_guilds_proto_msgTypes[56] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2986,7 +3044,7 @@ func (x *InviteUserToGuildResponse) String() string { func (*InviteUserToGuildResponse) ProtoMessage() {} func (x *InviteUserToGuildResponse) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[55] + mi := &file_chat_v1_guilds_proto_msgTypes[56] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2999,7 +3057,7 @@ func (x *InviteUserToGuildResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use InviteUserToGuildResponse.ProtoReflect.Descriptor instead. func (*InviteUserToGuildResponse) Descriptor() ([]byte, []int) { - return file_chat_v1_guilds_proto_rawDescGZIP(), []int{55} + return file_chat_v1_guilds_proto_rawDescGZIP(), []int{56} } // A "normal" guild as in a guild that allows multiple channels. @@ -3012,7 +3070,7 @@ type GuildKind_Normal struct { func (x *GuildKind_Normal) Reset() { *x = GuildKind_Normal{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[56] + mi := &file_chat_v1_guilds_proto_msgTypes[57] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3025,7 +3083,7 @@ func (x *GuildKind_Normal) String() string { func (*GuildKind_Normal) ProtoMessage() {} func (x *GuildKind_Normal) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[56] + mi := &file_chat_v1_guilds_proto_msgTypes[57] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3053,7 +3111,7 @@ type GuildKind_Room struct { func (x *GuildKind_Room) Reset() { *x = GuildKind_Room{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[57] + mi := &file_chat_v1_guilds_proto_msgTypes[58] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3066,7 +3124,7 @@ func (x *GuildKind_Room) String() string { func (*GuildKind_Room) ProtoMessage() {} func (x *GuildKind_Room) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[57] + mi := &file_chat_v1_guilds_proto_msgTypes[58] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3105,7 +3163,7 @@ type GuildKind_DirectMessage struct { func (x *GuildKind_DirectMessage) Reset() { *x = GuildKind_DirectMessage{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_guilds_proto_msgTypes[58] + mi := &file_chat_v1_guilds_proto_msgTypes[59] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3118,7 +3176,7 @@ func (x *GuildKind_DirectMessage) String() string { func (*GuildKind_DirectMessage) ProtoMessage() {} func (x *GuildKind_DirectMessage) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_guilds_proto_msgTypes[58] + mi := &file_chat_v1_guilds_proto_msgTypes[59] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3180,45 +3238,37 @@ var file_chat_v1_guilds_proto_rawDesc = []byte{ 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x4a, 0x0a, - 0x06, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x73, 0x69, - 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, - 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, - 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, - 0x08, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0c, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x30, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x52, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x22, 0x7b, 0x0a, 0x0d, 0x50, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, - 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x48, 0x0a, 0x0e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x22, - 0xa5, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x69, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, - 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, - 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, - 0x01, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0a, - 0x0a, 0x08, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x30, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0xa4, 0x01, 0x0a, 0x11, 0x43, 0x72, - 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x57, 0x0a, + 0x0b, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x2d, 0x0a, 0x05, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, + 0x05, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x22, 0x4a, 0x0a, 0x06, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x55, 0x73, 0x65, 0x73, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x5f, 0x63, 0x6f, 0x75, + 0x6e, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x08, 0x75, 0x73, 0x65, 0x43, 0x6f, 0x75, + 0x6e, 0x74, 0x22, 0x5d, 0x0a, 0x0c, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, + 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, + 0x30, 0x0a, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x18, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x06, 0x69, 0x6e, 0x76, 0x69, 0x74, + 0x65, 0x22, 0x7b, 0x0a, 0x0d, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, + 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, + 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, + 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x49, 0x64, + 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x48, + 0x0a, 0x0e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x22, 0xa5, 0x01, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, @@ -3228,205 +3278,219 @@ var file_chat_v1_guilds_proto_rawDesc = []byte{ 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x22, 0x2f, 0x0a, 0x12, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, - 0x64, 0x22, 0x69, 0x0a, 0x1a, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, - 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, - 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, - 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x1b, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, - 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, - 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, - 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x5f, 0x75, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x55, 0x73, 0x65, - 0x73, 0x22, 0x33, 0x0a, 0x14, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, - 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x50, 0x0a, - 0x14, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x06, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, - 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, - 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x52, 0x06, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x22, - 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x41, 0x0a, - 0x10, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x05, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x22, 0x33, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, - 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, - 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x53, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, - 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x38, 0x0a, 0x07, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x49, - 0x64, 0x52, 0x07, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x16, 0x47, 0x65, - 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, - 0x33, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x73, 0x22, 0xfa, 0x01, 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, - 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, - 0x64, 0x12, 0x1e, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, - 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x69, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x6d, - 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x22, 0x30, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x22, 0xa4, 0x01, 0x0a, 0x11, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, + 0x6d, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, + 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x43, 0x0a, 0x08, 0x6d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x48, 0x02, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, - 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x36, 0x0a, 0x19, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x6f, - 0x6f, 0x6d, 0x54, 0x6f, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x55, - 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x6f, 0x47, 0x75, 0x69, 0x6c, - 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x12, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x61, 0x48, 0x01, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, + 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0b, 0x0a, 0x09, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x2f, 0x0a, 0x12, 0x43, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, - 0x6c, 0x65, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, - 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x10, 0x4a, 0x6f, 0x69, 0x6e, - 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, - 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x11, 0x4a, 0x6f, 0x69, - 0x6e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x13, 0x50, 0x72, 0x65, - 0x76, 0x69, 0x65, 0x77, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x22, 0x78, 0x0a, - 0x14, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x69, 0x63, - 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, 0x69, - 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, - 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x5f, - 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x22, 0x2e, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x65, 0x61, 0x76, 0x65, - 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x0a, - 0x0e, 0x42, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x69, 0x0a, 0x1a, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x44, 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, + 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, + 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x38, 0x0a, 0x1b, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x44, + 0x69, 0x72, 0x65, 0x63, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, + 0x69, 0x0a, 0x13, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, + 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, + 0x65, 0x5f, 0x75, 0x73, 0x65, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0d, 0x52, 0x0c, 0x70, 0x6f, + 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x55, 0x73, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x14, 0x43, 0x72, + 0x65, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x22, + 0x15, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x50, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, + 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, + 0x0a, 0x06, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, + 0x31, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4c, 0x69, 0x73, 0x74, 0x45, 0x6e, 0x74, 0x72, 0x79, + 0x52, 0x06, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x22, 0x2c, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x47, + 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x41, 0x0a, 0x10, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2d, 0x0a, 0x05, 0x67, 0x75, + 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x17, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x47, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x05, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x22, 0x33, 0x0a, 0x16, 0x47, 0x65, 0x74, + 0x47, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x53, + 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x69, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x57, 0x69, 0x74, 0x68, 0x49, 0x64, 0x52, 0x07, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x73, 0x22, 0x33, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x4d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, + 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x33, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x47, + 0x75, 0x69, 0x6c, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x04, 0x52, 0x07, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x73, 0x22, 0xfa, 0x01, + 0x0a, 0x1d, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, + 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, - 0x72, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, 0x42, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x0a, 0x0f, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, + 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x08, 0x6e, 0x65, + 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, + 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6e, 0x65, + 0x77, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x01, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, + 0x12, 0x4a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, + 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x02, 0x52, 0x0b, 0x6e, 0x65, + 0x77, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, + 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6e, 0x65, + 0x77, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x65, + 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x22, 0x20, 0x0a, 0x1e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x61, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x36, 0x0a, 0x19, + 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, 0x6f, 0x6f, 0x6d, 0x54, 0x6f, 0x47, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, - 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x12, 0x0a, - 0x10, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x46, 0x0a, 0x10, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, + 0x6c, 0x64, 0x49, 0x64, 0x22, 0x1c, 0x0a, 0x1a, 0x55, 0x70, 0x67, 0x72, 0x61, 0x64, 0x65, 0x52, + 0x6f, 0x6f, 0x6d, 0x54, 0x6f, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2f, 0x0a, 0x12, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x75, 0x69, 0x6c, + 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x49, 0x64, 0x22, 0x15, 0x0a, 0x13, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x47, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x0a, 0x13, 0x44, 0x65, + 0x6c, 0x65, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x22, 0x16, 0x0a, 0x14, 0x44, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x2f, 0x0a, 0x10, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x49, 0x64, 0x22, 0x2e, 0x0a, 0x11, 0x4a, 0x6f, 0x69, 0x6e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x22, 0x32, 0x0a, 0x13, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, 0x77, 0x47, 0x75, 0x69, + 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x22, 0x78, 0x0a, 0x14, 0x50, 0x72, 0x65, 0x76, 0x69, 0x65, + 0x77, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x12, + 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, + 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, + 0x01, 0x12, 0x21, 0x0a, 0x0c, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x63, 0x6f, 0x75, 0x6e, + 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0b, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x43, + 0x6f, 0x75, 0x6e, 0x74, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, + 0x22, 0x2e, 0x0a, 0x11, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, - 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x55, 0x6e, 0x62, - 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, - 0x0a, 0x15, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, - 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, - 0x28, 0x04, 0x52, 0x0b, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, - 0x54, 0x0a, 0x15, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, - 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, + 0x22, 0x14, 0x0a, 0x12, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x0a, 0x0e, 0x42, 0x61, 0x6e, 0x55, 0x73, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x4f, 0x77, - 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x18, 0x0a, 0x16, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4f, 0x77, - 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x33, 0x0a, 0x16, 0x47, 0x69, 0x76, 0x65, 0x55, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, - 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, - 0x6c, 0x64, 0x49, 0x64, 0x22, 0x19, 0x0a, 0x17, 0x47, 0x69, 0x76, 0x65, 0x55, 0x70, 0x4f, 0x77, - 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x65, 0x0a, 0x19, 0x47, - 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x70, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, - 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x52, 0x0e, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x73, 0x22, 0x69, 0x0a, 0x1a, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x65, 0x6e, 0x64, - 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, - 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, - 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x1d, 0x0a, - 0x1b, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x1a, - 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, - 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x49, 0x67, 0x6e, 0x6f, 0x72, - 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x82, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, + 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x11, 0x0a, 0x0f, + 0x42, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x45, 0x0a, 0x0f, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x22, 0x12, 0x0a, 0x10, 0x4b, 0x69, 0x63, 0x6b, 0x55, 0x73, + 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x46, 0x0a, 0x10, 0x55, 0x6e, + 0x62, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, + 0x49, 0x64, 0x22, 0x13, 0x0a, 0x11, 0x55, 0x6e, 0x62, 0x61, 0x6e, 0x55, 0x73, 0x65, 0x72, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x42, 0x61, + 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x3b, 0x0a, 0x16, 0x47, + 0x65, 0x74, 0x42, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x61, 0x6e, 0x6e, 0x65, 0x64, 0x5f, + 0x75, 0x73, 0x65, 0x72, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0b, 0x62, 0x61, 0x6e, + 0x6e, 0x65, 0x64, 0x55, 0x73, 0x65, 0x72, 0x73, 0x22, 0x54, 0x0a, 0x15, 0x47, 0x72, 0x61, 0x6e, + 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, + 0x6e, 0x65, 0x77, 0x5f, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x49, 0x64, 0x22, 0x18, + 0x0a, 0x16, 0x47, 0x72, 0x61, 0x6e, 0x74, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x33, 0x0a, 0x16, 0x47, 0x69, 0x76, 0x65, + 0x55, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x22, 0x19, 0x0a, + 0x17, 0x47, 0x69, 0x76, 0x65, 0x55, 0x70, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x73, 0x68, 0x69, 0x70, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1a, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x22, 0x65, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, + 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x48, 0x0a, 0x0f, 0x70, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x69, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, + 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x0e, 0x70, 0x65, 0x6e, + 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x73, 0x22, 0x69, 0x0a, 0x1a, 0x52, + 0x65, 0x6a, 0x65, 0x63, 0x74, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, + 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x1d, 0x0a, 0x1b, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, + 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x69, 0x0a, 0x1a, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x50, + 0x65, 0x6e, 0x64, 0x69, 0x6e, 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, - 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x0c, 0x0a, - 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x49, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, 0x47, 0x75, 0x69, 0x6c, 0x64, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x2a, 0x67, 0x0a, 0x0b, 0x4c, 0x65, 0x61, 0x76, - 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x12, 0x26, 0x0a, 0x22, 0x4c, 0x45, 0x41, 0x56, 0x45, - 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x57, 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x4c, - 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, - 0x17, 0x0a, 0x13, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, - 0x42, 0x41, 0x4e, 0x4e, 0x45, 0x44, 0x10, 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x45, 0x41, 0x56, - 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x4b, 0x49, 0x43, 0x4b, 0x45, 0x44, 0x10, - 0x02, 0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x47, 0x75, 0x69, 0x6c, - 0x64, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, - 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x2d, 0x64, 0x65, - 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x62, 0x73, 0x68, - 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x63, - 0x68, 0x61, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, - 0x10, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, 0x43, 0x68, 0x61, 0x74, 0x5c, 0x56, - 0x31, 0xe2, 0x02, 0x1c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, 0x43, 0x68, 0x61, - 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, - 0xea, 0x02, 0x12, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x3a, 0x3a, 0x43, 0x68, 0x61, - 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x01, 0x01, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x22, 0x1d, 0x0a, 0x1b, 0x49, 0x67, 0x6e, 0x6f, 0x72, 0x65, 0x50, 0x65, 0x6e, 0x64, 0x69, 0x6e, + 0x67, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x82, 0x01, 0x0a, 0x18, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x73, 0x65, 0x72, 0x54, 0x6f, + 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x1b, 0x0a, 0x09, + 0x75, 0x73, 0x65, 0x72, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x5f, 0x69, 0x64, 0x22, 0x1b, 0x0a, 0x19, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x55, 0x73, + 0x65, 0x72, 0x54, 0x6f, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x2a, 0x67, 0x0a, 0x0b, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, + 0x12, 0x26, 0x0a, 0x22, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, + 0x5f, 0x57, 0x49, 0x4c, 0x4c, 0x49, 0x4e, 0x47, 0x4c, 0x59, 0x5f, 0x55, 0x4e, 0x53, 0x50, 0x45, + 0x43, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x00, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x45, 0x41, 0x56, + 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, 0x4e, 0x5f, 0x42, 0x41, 0x4e, 0x4e, 0x45, 0x44, 0x10, + 0x01, 0x12, 0x17, 0x0a, 0x13, 0x4c, 0x45, 0x41, 0x56, 0x45, 0x5f, 0x52, 0x45, 0x41, 0x53, 0x4f, + 0x4e, 0x5f, 0x4b, 0x49, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x02, 0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, + 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x73, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, + 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x2d, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, + 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x62, 0x73, 0x68, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2f, + 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x68, 0x61, 0x74, 0x76, 0x31, 0xa2, 0x02, + 0x03, 0x50, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x43, 0x68, 0x61, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x5c, 0x43, 0x68, 0x61, 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x50, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, 0x43, 0x68, 0x61, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, + 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x50, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x3a, 0x3a, 0x43, 0x68, 0x61, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3442,89 +3506,91 @@ func file_chat_v1_guilds_proto_rawDescGZIP() []byte { } var file_chat_v1_guilds_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_chat_v1_guilds_proto_msgTypes = make([]protoimpl.MessageInfo, 59) +var file_chat_v1_guilds_proto_msgTypes = make([]protoimpl.MessageInfo, 60) var file_chat_v1_guilds_proto_goTypes = []interface{}{ (LeaveReason)(0), // 0: protocol.chat.v1.LeaveReason (*GuildKind)(nil), // 1: protocol.chat.v1.GuildKind (*Guild)(nil), // 2: protocol.chat.v1.Guild - (*Invite)(nil), // 3: protocol.chat.v1.Invite - (*InviteWithId)(nil), // 4: protocol.chat.v1.InviteWithId - (*PendingInvite)(nil), // 5: protocol.chat.v1.PendingInvite - (*GuildListEntry)(nil), // 6: protocol.chat.v1.GuildListEntry - (*CreateGuildRequest)(nil), // 7: protocol.chat.v1.CreateGuildRequest - (*CreateGuildResponse)(nil), // 8: protocol.chat.v1.CreateGuildResponse - (*CreateRoomRequest)(nil), // 9: protocol.chat.v1.CreateRoomRequest - (*CreateRoomResponse)(nil), // 10: protocol.chat.v1.CreateRoomResponse - (*CreateDirectMessageRequest)(nil), // 11: protocol.chat.v1.CreateDirectMessageRequest - (*CreateDirectMessageResponse)(nil), // 12: protocol.chat.v1.CreateDirectMessageResponse - (*CreateInviteRequest)(nil), // 13: protocol.chat.v1.CreateInviteRequest - (*CreateInviteResponse)(nil), // 14: protocol.chat.v1.CreateInviteResponse - (*GetGuildListRequest)(nil), // 15: protocol.chat.v1.GetGuildListRequest - (*GetGuildListResponse)(nil), // 16: protocol.chat.v1.GetGuildListResponse - (*GetGuildRequest)(nil), // 17: protocol.chat.v1.GetGuildRequest - (*GetGuildResponse)(nil), // 18: protocol.chat.v1.GetGuildResponse - (*GetGuildInvitesRequest)(nil), // 19: protocol.chat.v1.GetGuildInvitesRequest - (*GetGuildInvitesResponse)(nil), // 20: protocol.chat.v1.GetGuildInvitesResponse - (*GetGuildMembersRequest)(nil), // 21: protocol.chat.v1.GetGuildMembersRequest - (*GetGuildMembersResponse)(nil), // 22: protocol.chat.v1.GetGuildMembersResponse - (*UpdateGuildInformationRequest)(nil), // 23: protocol.chat.v1.UpdateGuildInformationRequest - (*UpdateGuildInformationResponse)(nil), // 24: protocol.chat.v1.UpdateGuildInformationResponse - (*UpgradeRoomToGuildRequest)(nil), // 25: protocol.chat.v1.UpgradeRoomToGuildRequest - (*UpgradeRoomToGuildResponse)(nil), // 26: protocol.chat.v1.UpgradeRoomToGuildResponse - (*DeleteGuildRequest)(nil), // 27: protocol.chat.v1.DeleteGuildRequest - (*DeleteGuildResponse)(nil), // 28: protocol.chat.v1.DeleteGuildResponse - (*DeleteInviteRequest)(nil), // 29: protocol.chat.v1.DeleteInviteRequest - (*DeleteInviteResponse)(nil), // 30: protocol.chat.v1.DeleteInviteResponse - (*JoinGuildRequest)(nil), // 31: protocol.chat.v1.JoinGuildRequest - (*JoinGuildResponse)(nil), // 32: protocol.chat.v1.JoinGuildResponse - (*PreviewGuildRequest)(nil), // 33: protocol.chat.v1.PreviewGuildRequest - (*PreviewGuildResponse)(nil), // 34: protocol.chat.v1.PreviewGuildResponse - (*LeaveGuildRequest)(nil), // 35: protocol.chat.v1.LeaveGuildRequest - (*LeaveGuildResponse)(nil), // 36: protocol.chat.v1.LeaveGuildResponse - (*BanUserRequest)(nil), // 37: protocol.chat.v1.BanUserRequest - (*BanUserResponse)(nil), // 38: protocol.chat.v1.BanUserResponse - (*KickUserRequest)(nil), // 39: protocol.chat.v1.KickUserRequest - (*KickUserResponse)(nil), // 40: protocol.chat.v1.KickUserResponse - (*UnbanUserRequest)(nil), // 41: protocol.chat.v1.UnbanUserRequest - (*UnbanUserResponse)(nil), // 42: protocol.chat.v1.UnbanUserResponse - (*GetBannedUsersRequest)(nil), // 43: protocol.chat.v1.GetBannedUsersRequest - (*GetBannedUsersResponse)(nil), // 44: protocol.chat.v1.GetBannedUsersResponse - (*GrantOwnershipRequest)(nil), // 45: protocol.chat.v1.GrantOwnershipRequest - (*GrantOwnershipResponse)(nil), // 46: protocol.chat.v1.GrantOwnershipResponse - (*GiveUpOwnershipRequest)(nil), // 47: protocol.chat.v1.GiveUpOwnershipRequest - (*GiveUpOwnershipResponse)(nil), // 48: protocol.chat.v1.GiveUpOwnershipResponse - (*GetPendingInvitesRequest)(nil), // 49: protocol.chat.v1.GetPendingInvitesRequest - (*GetPendingInvitesResponse)(nil), // 50: protocol.chat.v1.GetPendingInvitesResponse - (*RejectPendingInviteRequest)(nil), // 51: protocol.chat.v1.RejectPendingInviteRequest - (*RejectPendingInviteResponse)(nil), // 52: protocol.chat.v1.RejectPendingInviteResponse - (*IgnorePendingInviteRequest)(nil), // 53: protocol.chat.v1.IgnorePendingInviteRequest - (*IgnorePendingInviteResponse)(nil), // 54: protocol.chat.v1.IgnorePendingInviteResponse - (*InviteUserToGuildRequest)(nil), // 55: protocol.chat.v1.InviteUserToGuildRequest - (*InviteUserToGuildResponse)(nil), // 56: protocol.chat.v1.InviteUserToGuildResponse - (*GuildKind_Normal)(nil), // 57: protocol.chat.v1.GuildKind.Normal - (*GuildKind_Room)(nil), // 58: protocol.chat.v1.GuildKind.Room - (*GuildKind_DirectMessage)(nil), // 59: protocol.chat.v1.GuildKind.DirectMessage - (*v1.Metadata)(nil), // 60: protocol.harmonytypes.v1.Metadata + (*GuildWithId)(nil), // 3: protocol.chat.v1.GuildWithId + (*Invite)(nil), // 4: protocol.chat.v1.Invite + (*InviteWithId)(nil), // 5: protocol.chat.v1.InviteWithId + (*PendingInvite)(nil), // 6: protocol.chat.v1.PendingInvite + (*GuildListEntry)(nil), // 7: protocol.chat.v1.GuildListEntry + (*CreateGuildRequest)(nil), // 8: protocol.chat.v1.CreateGuildRequest + (*CreateGuildResponse)(nil), // 9: protocol.chat.v1.CreateGuildResponse + (*CreateRoomRequest)(nil), // 10: protocol.chat.v1.CreateRoomRequest + (*CreateRoomResponse)(nil), // 11: protocol.chat.v1.CreateRoomResponse + (*CreateDirectMessageRequest)(nil), // 12: protocol.chat.v1.CreateDirectMessageRequest + (*CreateDirectMessageResponse)(nil), // 13: protocol.chat.v1.CreateDirectMessageResponse + (*CreateInviteRequest)(nil), // 14: protocol.chat.v1.CreateInviteRequest + (*CreateInviteResponse)(nil), // 15: protocol.chat.v1.CreateInviteResponse + (*GetGuildListRequest)(nil), // 16: protocol.chat.v1.GetGuildListRequest + (*GetGuildListResponse)(nil), // 17: protocol.chat.v1.GetGuildListResponse + (*GetGuildRequest)(nil), // 18: protocol.chat.v1.GetGuildRequest + (*GetGuildResponse)(nil), // 19: protocol.chat.v1.GetGuildResponse + (*GetGuildInvitesRequest)(nil), // 20: protocol.chat.v1.GetGuildInvitesRequest + (*GetGuildInvitesResponse)(nil), // 21: protocol.chat.v1.GetGuildInvitesResponse + (*GetGuildMembersRequest)(nil), // 22: protocol.chat.v1.GetGuildMembersRequest + (*GetGuildMembersResponse)(nil), // 23: protocol.chat.v1.GetGuildMembersResponse + (*UpdateGuildInformationRequest)(nil), // 24: protocol.chat.v1.UpdateGuildInformationRequest + (*UpdateGuildInformationResponse)(nil), // 25: protocol.chat.v1.UpdateGuildInformationResponse + (*UpgradeRoomToGuildRequest)(nil), // 26: protocol.chat.v1.UpgradeRoomToGuildRequest + (*UpgradeRoomToGuildResponse)(nil), // 27: protocol.chat.v1.UpgradeRoomToGuildResponse + (*DeleteGuildRequest)(nil), // 28: protocol.chat.v1.DeleteGuildRequest + (*DeleteGuildResponse)(nil), // 29: protocol.chat.v1.DeleteGuildResponse + (*DeleteInviteRequest)(nil), // 30: protocol.chat.v1.DeleteInviteRequest + (*DeleteInviteResponse)(nil), // 31: protocol.chat.v1.DeleteInviteResponse + (*JoinGuildRequest)(nil), // 32: protocol.chat.v1.JoinGuildRequest + (*JoinGuildResponse)(nil), // 33: protocol.chat.v1.JoinGuildResponse + (*PreviewGuildRequest)(nil), // 34: protocol.chat.v1.PreviewGuildRequest + (*PreviewGuildResponse)(nil), // 35: protocol.chat.v1.PreviewGuildResponse + (*LeaveGuildRequest)(nil), // 36: protocol.chat.v1.LeaveGuildRequest + (*LeaveGuildResponse)(nil), // 37: protocol.chat.v1.LeaveGuildResponse + (*BanUserRequest)(nil), // 38: protocol.chat.v1.BanUserRequest + (*BanUserResponse)(nil), // 39: protocol.chat.v1.BanUserResponse + (*KickUserRequest)(nil), // 40: protocol.chat.v1.KickUserRequest + (*KickUserResponse)(nil), // 41: protocol.chat.v1.KickUserResponse + (*UnbanUserRequest)(nil), // 42: protocol.chat.v1.UnbanUserRequest + (*UnbanUserResponse)(nil), // 43: protocol.chat.v1.UnbanUserResponse + (*GetBannedUsersRequest)(nil), // 44: protocol.chat.v1.GetBannedUsersRequest + (*GetBannedUsersResponse)(nil), // 45: protocol.chat.v1.GetBannedUsersResponse + (*GrantOwnershipRequest)(nil), // 46: protocol.chat.v1.GrantOwnershipRequest + (*GrantOwnershipResponse)(nil), // 47: protocol.chat.v1.GrantOwnershipResponse + (*GiveUpOwnershipRequest)(nil), // 48: protocol.chat.v1.GiveUpOwnershipRequest + (*GiveUpOwnershipResponse)(nil), // 49: protocol.chat.v1.GiveUpOwnershipResponse + (*GetPendingInvitesRequest)(nil), // 50: protocol.chat.v1.GetPendingInvitesRequest + (*GetPendingInvitesResponse)(nil), // 51: protocol.chat.v1.GetPendingInvitesResponse + (*RejectPendingInviteRequest)(nil), // 52: protocol.chat.v1.RejectPendingInviteRequest + (*RejectPendingInviteResponse)(nil), // 53: protocol.chat.v1.RejectPendingInviteResponse + (*IgnorePendingInviteRequest)(nil), // 54: protocol.chat.v1.IgnorePendingInviteRequest + (*IgnorePendingInviteResponse)(nil), // 55: protocol.chat.v1.IgnorePendingInviteResponse + (*InviteUserToGuildRequest)(nil), // 56: protocol.chat.v1.InviteUserToGuildRequest + (*InviteUserToGuildResponse)(nil), // 57: protocol.chat.v1.InviteUserToGuildResponse + (*GuildKind_Normal)(nil), // 58: protocol.chat.v1.GuildKind.Normal + (*GuildKind_Room)(nil), // 59: protocol.chat.v1.GuildKind.Room + (*GuildKind_DirectMessage)(nil), // 60: protocol.chat.v1.GuildKind.DirectMessage + (*v1.Metadata)(nil), // 61: protocol.harmonytypes.v1.Metadata } var file_chat_v1_guilds_proto_depIdxs = []int32{ - 57, // 0: protocol.chat.v1.GuildKind.normal:type_name -> protocol.chat.v1.GuildKind.Normal - 58, // 1: protocol.chat.v1.GuildKind.room:type_name -> protocol.chat.v1.GuildKind.Room - 59, // 2: protocol.chat.v1.GuildKind.direct_message:type_name -> protocol.chat.v1.GuildKind.DirectMessage + 58, // 0: protocol.chat.v1.GuildKind.normal:type_name -> protocol.chat.v1.GuildKind.Normal + 59, // 1: protocol.chat.v1.GuildKind.room:type_name -> protocol.chat.v1.GuildKind.Room + 60, // 2: protocol.chat.v1.GuildKind.direct_message:type_name -> protocol.chat.v1.GuildKind.DirectMessage 1, // 3: protocol.chat.v1.Guild.kind:type_name -> protocol.chat.v1.GuildKind - 60, // 4: protocol.chat.v1.Guild.metadata:type_name -> protocol.harmonytypes.v1.Metadata - 3, // 5: protocol.chat.v1.InviteWithId.invite:type_name -> protocol.chat.v1.Invite - 60, // 6: protocol.chat.v1.CreateGuildRequest.metadata:type_name -> protocol.harmonytypes.v1.Metadata - 60, // 7: protocol.chat.v1.CreateRoomRequest.metadata:type_name -> protocol.harmonytypes.v1.Metadata - 6, // 8: protocol.chat.v1.GetGuildListResponse.guilds:type_name -> protocol.chat.v1.GuildListEntry - 2, // 9: protocol.chat.v1.GetGuildResponse.guild:type_name -> protocol.chat.v1.Guild - 4, // 10: protocol.chat.v1.GetGuildInvitesResponse.invites:type_name -> protocol.chat.v1.InviteWithId - 60, // 11: protocol.chat.v1.UpdateGuildInformationRequest.new_metadata:type_name -> protocol.harmonytypes.v1.Metadata - 5, // 12: protocol.chat.v1.GetPendingInvitesResponse.pending_invites:type_name -> protocol.chat.v1.PendingInvite - 13, // [13:13] is the sub-list for method output_type - 13, // [13:13] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 61, // 4: protocol.chat.v1.Guild.metadata:type_name -> protocol.harmonytypes.v1.Metadata + 2, // 5: protocol.chat.v1.GuildWithId.guild:type_name -> protocol.chat.v1.Guild + 4, // 6: protocol.chat.v1.InviteWithId.invite:type_name -> protocol.chat.v1.Invite + 61, // 7: protocol.chat.v1.CreateGuildRequest.metadata:type_name -> protocol.harmonytypes.v1.Metadata + 61, // 8: protocol.chat.v1.CreateRoomRequest.metadata:type_name -> protocol.harmonytypes.v1.Metadata + 7, // 9: protocol.chat.v1.GetGuildListResponse.guilds:type_name -> protocol.chat.v1.GuildListEntry + 2, // 10: protocol.chat.v1.GetGuildResponse.guild:type_name -> protocol.chat.v1.Guild + 5, // 11: protocol.chat.v1.GetGuildInvitesResponse.invites:type_name -> protocol.chat.v1.InviteWithId + 61, // 12: protocol.chat.v1.UpdateGuildInformationRequest.new_metadata:type_name -> protocol.harmonytypes.v1.Metadata + 6, // 13: protocol.chat.v1.GetPendingInvitesResponse.pending_invites:type_name -> protocol.chat.v1.PendingInvite + 14, // [14:14] is the sub-list for method output_type + 14, // [14:14] is the sub-list for method input_type + 14, // [14:14] is the sub-list for extension type_name + 14, // [14:14] is the sub-list for extension extendee + 0, // [0:14] is the sub-list for field type_name } func init() { file_chat_v1_guilds_proto_init() } @@ -3558,7 +3624,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*Invite); i { + switch v := v.(*GuildWithId); i { case 0: return &v.state case 1: @@ -3570,7 +3636,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[3].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InviteWithId); i { + switch v := v.(*Invite); i { case 0: return &v.state case 1: @@ -3582,7 +3648,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PendingInvite); i { + switch v := v.(*InviteWithId); i { case 0: return &v.state case 1: @@ -3594,7 +3660,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GuildListEntry); i { + switch v := v.(*PendingInvite); i { case 0: return &v.state case 1: @@ -3606,7 +3672,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateGuildRequest); i { + switch v := v.(*GuildListEntry); i { case 0: return &v.state case 1: @@ -3618,7 +3684,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateGuildResponse); i { + switch v := v.(*CreateGuildRequest); i { case 0: return &v.state case 1: @@ -3630,7 +3696,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoomRequest); i { + switch v := v.(*CreateGuildResponse); i { case 0: return &v.state case 1: @@ -3642,7 +3708,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateRoomResponse); i { + switch v := v.(*CreateRoomRequest); i { case 0: return &v.state case 1: @@ -3654,7 +3720,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDirectMessageRequest); i { + switch v := v.(*CreateRoomResponse); i { case 0: return &v.state case 1: @@ -3666,7 +3732,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateDirectMessageResponse); i { + switch v := v.(*CreateDirectMessageRequest); i { case 0: return &v.state case 1: @@ -3678,7 +3744,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateInviteRequest); i { + switch v := v.(*CreateDirectMessageResponse); i { case 0: return &v.state case 1: @@ -3690,7 +3756,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*CreateInviteResponse); i { + switch v := v.(*CreateInviteRequest); i { case 0: return &v.state case 1: @@ -3702,7 +3768,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildListRequest); i { + switch v := v.(*CreateInviteResponse); i { case 0: return &v.state case 1: @@ -3714,7 +3780,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildListResponse); i { + switch v := v.(*GetGuildListRequest); i { case 0: return &v.state case 1: @@ -3726,7 +3792,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildRequest); i { + switch v := v.(*GetGuildListResponse); i { case 0: return &v.state case 1: @@ -3738,7 +3804,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildResponse); i { + switch v := v.(*GetGuildRequest); i { case 0: return &v.state case 1: @@ -3750,7 +3816,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildInvitesRequest); i { + switch v := v.(*GetGuildResponse); i { case 0: return &v.state case 1: @@ -3762,7 +3828,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildInvitesResponse); i { + switch v := v.(*GetGuildInvitesRequest); i { case 0: return &v.state case 1: @@ -3774,7 +3840,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildMembersRequest); i { + switch v := v.(*GetGuildInvitesResponse); i { case 0: return &v.state case 1: @@ -3786,7 +3852,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetGuildMembersResponse); i { + switch v := v.(*GetGuildMembersRequest); i { case 0: return &v.state case 1: @@ -3798,7 +3864,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateGuildInformationRequest); i { + switch v := v.(*GetGuildMembersResponse); i { case 0: return &v.state case 1: @@ -3810,7 +3876,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpdateGuildInformationResponse); i { + switch v := v.(*UpdateGuildInformationRequest); i { case 0: return &v.state case 1: @@ -3822,7 +3888,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpgradeRoomToGuildRequest); i { + switch v := v.(*UpdateGuildInformationResponse); i { case 0: return &v.state case 1: @@ -3834,7 +3900,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UpgradeRoomToGuildResponse); i { + switch v := v.(*UpgradeRoomToGuildRequest); i { case 0: return &v.state case 1: @@ -3846,7 +3912,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteGuildRequest); i { + switch v := v.(*UpgradeRoomToGuildResponse); i { case 0: return &v.state case 1: @@ -3858,7 +3924,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteGuildResponse); i { + switch v := v.(*DeleteGuildRequest); i { case 0: return &v.state case 1: @@ -3870,7 +3936,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteInviteRequest); i { + switch v := v.(*DeleteGuildResponse); i { case 0: return &v.state case 1: @@ -3882,7 +3948,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*DeleteInviteResponse); i { + switch v := v.(*DeleteInviteRequest); i { case 0: return &v.state case 1: @@ -3894,7 +3960,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JoinGuildRequest); i { + switch v := v.(*DeleteInviteResponse); i { case 0: return &v.state case 1: @@ -3906,7 +3972,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*JoinGuildResponse); i { + switch v := v.(*JoinGuildRequest); i { case 0: return &v.state case 1: @@ -3918,7 +3984,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PreviewGuildRequest); i { + switch v := v.(*JoinGuildResponse); i { case 0: return &v.state case 1: @@ -3930,7 +3996,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*PreviewGuildResponse); i { + switch v := v.(*PreviewGuildRequest); i { case 0: return &v.state case 1: @@ -3942,7 +4008,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LeaveGuildRequest); i { + switch v := v.(*PreviewGuildResponse); i { case 0: return &v.state case 1: @@ -3954,7 +4020,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*LeaveGuildResponse); i { + switch v := v.(*LeaveGuildRequest); i { case 0: return &v.state case 1: @@ -3966,7 +4032,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BanUserRequest); i { + switch v := v.(*LeaveGuildResponse); i { case 0: return &v.state case 1: @@ -3978,7 +4044,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[37].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*BanUserResponse); i { + switch v := v.(*BanUserRequest); i { case 0: return &v.state case 1: @@ -3990,7 +4056,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[38].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KickUserRequest); i { + switch v := v.(*BanUserResponse); i { case 0: return &v.state case 1: @@ -4002,7 +4068,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[39].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*KickUserResponse); i { + switch v := v.(*KickUserRequest); i { case 0: return &v.state case 1: @@ -4014,7 +4080,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[40].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbanUserRequest); i { + switch v := v.(*KickUserResponse); i { case 0: return &v.state case 1: @@ -4026,7 +4092,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[41].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*UnbanUserResponse); i { + switch v := v.(*UnbanUserRequest); i { case 0: return &v.state case 1: @@ -4038,7 +4104,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[42].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBannedUsersRequest); i { + switch v := v.(*UnbanUserResponse); i { case 0: return &v.state case 1: @@ -4050,7 +4116,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[43].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetBannedUsersResponse); i { + switch v := v.(*GetBannedUsersRequest); i { case 0: return &v.state case 1: @@ -4062,7 +4128,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[44].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrantOwnershipRequest); i { + switch v := v.(*GetBannedUsersResponse); i { case 0: return &v.state case 1: @@ -4074,7 +4140,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[45].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GrantOwnershipResponse); i { + switch v := v.(*GrantOwnershipRequest); i { case 0: return &v.state case 1: @@ -4086,7 +4152,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[46].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GiveUpOwnershipRequest); i { + switch v := v.(*GrantOwnershipResponse); i { case 0: return &v.state case 1: @@ -4098,7 +4164,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[47].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GiveUpOwnershipResponse); i { + switch v := v.(*GiveUpOwnershipRequest); i { case 0: return &v.state case 1: @@ -4110,7 +4176,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[48].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPendingInvitesRequest); i { + switch v := v.(*GiveUpOwnershipResponse); i { case 0: return &v.state case 1: @@ -4122,7 +4188,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[49].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GetPendingInvitesResponse); i { + switch v := v.(*GetPendingInvitesRequest); i { case 0: return &v.state case 1: @@ -4134,7 +4200,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[50].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RejectPendingInviteRequest); i { + switch v := v.(*GetPendingInvitesResponse); i { case 0: return &v.state case 1: @@ -4146,7 +4212,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[51].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*RejectPendingInviteResponse); i { + switch v := v.(*RejectPendingInviteRequest); i { case 0: return &v.state case 1: @@ -4158,7 +4224,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[52].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IgnorePendingInviteRequest); i { + switch v := v.(*RejectPendingInviteResponse); i { case 0: return &v.state case 1: @@ -4170,7 +4236,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[53].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*IgnorePendingInviteResponse); i { + switch v := v.(*IgnorePendingInviteRequest); i { case 0: return &v.state case 1: @@ -4182,7 +4248,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[54].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InviteUserToGuildRequest); i { + switch v := v.(*IgnorePendingInviteResponse); i { case 0: return &v.state case 1: @@ -4194,7 +4260,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[55].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*InviteUserToGuildResponse); i { + switch v := v.(*InviteUserToGuildRequest); i { case 0: return &v.state case 1: @@ -4206,7 +4272,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[56].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GuildKind_Normal); i { + switch v := v.(*InviteUserToGuildResponse); i { case 0: return &v.state case 1: @@ -4218,7 +4284,7 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[57].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*GuildKind_Room); i { + switch v := v.(*GuildKind_Normal); i { case 0: return &v.state case 1: @@ -4230,6 +4296,18 @@ func file_chat_v1_guilds_proto_init() { } } file_chat_v1_guilds_proto_msgTypes[58].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*GuildKind_Room); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_guilds_proto_msgTypes[59].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*GuildKind_DirectMessage); i { case 0: return &v.state @@ -4248,22 +4326,22 @@ func file_chat_v1_guilds_proto_init() { (*GuildKind_DirectMessage_)(nil), } file_chat_v1_guilds_proto_msgTypes[1].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[4].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[8].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[10].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[22].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[33].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[50].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[52].OneofWrappers = []interface{}{} - file_chat_v1_guilds_proto_msgTypes[54].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[5].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[7].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[9].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[11].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[23].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[34].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[51].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[53].OneofWrappers = []interface{}{} + file_chat_v1_guilds_proto_msgTypes[55].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v1_guilds_proto_rawDesc, NumEnums: 1, - NumMessages: 59, + NumMessages: 60, NumExtensions: 0, NumServices: 0, }, diff --git a/vendor/github.com/harmony-development/shibshib/gen/chat/v1/stream.pb.go b/vendor/github.com/harmony-development/shibshib/gen/chat/v1/stream.pb.go index 8ff28f1a..792d3e78 100644 --- a/vendor/github.com/harmony-development/shibshib/gen/chat/v1/stream.pb.go +++ b/vendor/github.com/harmony-development/shibshib/gen/chat/v1/stream.pb.go @@ -29,6 +29,9 @@ const ( const _ = proto.ProtoPackageIsVersion4 // Request type for use in the `StreamEvents` endpoint. +// By default, this endpoint will subscribe to all events. +// Any guilds joined in the future will be added to the subscription as well. +// Use the UnsubscribeFromAll event for unsubscribing from all current subscriptions and disable the automatic guild subscriptions type StreamEventsRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -40,6 +43,7 @@ type StreamEventsRequest struct { // *StreamEventsRequest_SubscribeToGuild_ // *StreamEventsRequest_SubscribeToActions_ // *StreamEventsRequest_SubscribeToHomeserverEvents_ + // *StreamEventsRequest_UnsubscribeFromAll_ Request isStreamEventsRequest_Request `protobuf_oneof:"request"` } @@ -103,6 +107,13 @@ func (x *StreamEventsRequest) GetSubscribeToHomeserverEvents() *StreamEventsRequ return nil } +func (x *StreamEventsRequest) GetUnsubscribeFromAll() *StreamEventsRequest_UnsubscribeFromAll { + if x, ok := x.GetRequest().(*StreamEventsRequest_UnsubscribeFromAll_); ok { + return x.UnsubscribeFromAll + } + return nil +} + type isStreamEventsRequest_Request interface { isStreamEventsRequest_Request() } @@ -122,12 +133,19 @@ type StreamEventsRequest_SubscribeToHomeserverEvents_ struct { SubscribeToHomeserverEvents *StreamEventsRequest_SubscribeToHomeserverEvents `protobuf:"bytes,3,opt,name=subscribe_to_homeserver_events,json=subscribeToHomeserverEvents,proto3,oneof"` } +type StreamEventsRequest_UnsubscribeFromAll_ struct { + // Unsubscribe from all events. + UnsubscribeFromAll *StreamEventsRequest_UnsubscribeFromAll `protobuf:"bytes,4,opt,name=unsubscribe_from_all,json=unsubscribeFromAll,proto3,oneof"` +} + func (*StreamEventsRequest_SubscribeToGuild_) isStreamEventsRequest_Request() {} func (*StreamEventsRequest_SubscribeToActions_) isStreamEventsRequest_Request() {} func (*StreamEventsRequest_SubscribeToHomeserverEvents_) isStreamEventsRequest_Request() {} +func (*StreamEventsRequest_UnsubscribeFromAll_) isStreamEventsRequest_Request() {} + // Used in the `StreamEvents` endpoint. type StreamEventsResponse struct { state protoimpl.MessageState @@ -860,6 +878,45 @@ func (*StreamEventsRequest_SubscribeToHomeserverEvents) Descriptor() ([]byte, [] return file_chat_v1_stream_proto_rawDescGZIP(), []int{0, 2} } +// Event to unsubscribe from all events. +type StreamEventsRequest_UnsubscribeFromAll struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *StreamEventsRequest_UnsubscribeFromAll) Reset() { + *x = StreamEventsRequest_UnsubscribeFromAll{} + if protoimpl.UnsafeEnabled { + mi := &file_chat_v1_stream_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *StreamEventsRequest_UnsubscribeFromAll) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StreamEventsRequest_UnsubscribeFromAll) ProtoMessage() {} + +func (x *StreamEventsRequest_UnsubscribeFromAll) ProtoReflect() protoreflect.Message { + mi := &file_chat_v1_stream_proto_msgTypes[6] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StreamEventsRequest_UnsubscribeFromAll.ProtoReflect.Descriptor instead. +func (*StreamEventsRequest_UnsubscribeFromAll) Descriptor() ([]byte, []int) { + return file_chat_v1_stream_proto_rawDescGZIP(), []int{0, 3} +} + // Event sent when a new message is sent. type StreamEvent_MessageSent struct { state protoimpl.MessageState @@ -881,7 +938,7 @@ type StreamEvent_MessageSent struct { func (x *StreamEvent_MessageSent) Reset() { *x = StreamEvent_MessageSent{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[6] + mi := &file_chat_v1_stream_proto_msgTypes[7] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -894,7 +951,7 @@ func (x *StreamEvent_MessageSent) String() string { func (*StreamEvent_MessageSent) ProtoMessage() {} func (x *StreamEvent_MessageSent) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[6] + mi := &file_chat_v1_stream_proto_msgTypes[7] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -966,7 +1023,7 @@ type StreamEvent_MessageUpdated struct { func (x *StreamEvent_MessageUpdated) Reset() { *x = StreamEvent_MessageUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[7] + mi := &file_chat_v1_stream_proto_msgTypes[8] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -979,7 +1036,7 @@ func (x *StreamEvent_MessageUpdated) String() string { func (*StreamEvent_MessageUpdated) ProtoMessage() {} func (x *StreamEvent_MessageUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[7] + mi := &file_chat_v1_stream_proto_msgTypes[8] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1047,7 +1104,7 @@ type StreamEvent_MessageDeleted struct { func (x *StreamEvent_MessageDeleted) Reset() { *x = StreamEvent_MessageDeleted{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[8] + mi := &file_chat_v1_stream_proto_msgTypes[9] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1060,7 +1117,7 @@ func (x *StreamEvent_MessageDeleted) String() string { func (*StreamEvent_MessageDeleted) ProtoMessage() {} func (x *StreamEvent_MessageDeleted) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[8] + mi := &file_chat_v1_stream_proto_msgTypes[9] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1120,7 +1177,7 @@ type StreamEvent_ChannelCreated struct { func (x *StreamEvent_ChannelCreated) Reset() { *x = StreamEvent_ChannelCreated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[9] + mi := &file_chat_v1_stream_proto_msgTypes[10] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1133,7 +1190,7 @@ func (x *StreamEvent_ChannelCreated) String() string { func (*StreamEvent_ChannelCreated) ProtoMessage() {} func (x *StreamEvent_ChannelCreated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[9] + mi := &file_chat_v1_stream_proto_msgTypes[10] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1210,7 +1267,7 @@ type StreamEvent_ChannelUpdated struct { func (x *StreamEvent_ChannelUpdated) Reset() { *x = StreamEvent_ChannelUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[10] + mi := &file_chat_v1_stream_proto_msgTypes[11] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1223,7 +1280,7 @@ func (x *StreamEvent_ChannelUpdated) String() string { func (*StreamEvent_ChannelUpdated) ProtoMessage() {} func (x *StreamEvent_ChannelUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[10] + mi := &file_chat_v1_stream_proto_msgTypes[11] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1284,7 +1341,7 @@ type StreamEvent_ChannelPositionUpdated struct { func (x *StreamEvent_ChannelPositionUpdated) Reset() { *x = StreamEvent_ChannelPositionUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[11] + mi := &file_chat_v1_stream_proto_msgTypes[12] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1297,7 +1354,7 @@ func (x *StreamEvent_ChannelPositionUpdated) String() string { func (*StreamEvent_ChannelPositionUpdated) ProtoMessage() {} func (x *StreamEvent_ChannelPositionUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[11] + mi := &file_chat_v1_stream_proto_msgTypes[12] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1349,7 +1406,7 @@ type StreamEvent_ChannelsReordered struct { func (x *StreamEvent_ChannelsReordered) Reset() { *x = StreamEvent_ChannelsReordered{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[12] + mi := &file_chat_v1_stream_proto_msgTypes[13] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1362,7 +1419,7 @@ func (x *StreamEvent_ChannelsReordered) String() string { func (*StreamEvent_ChannelsReordered) ProtoMessage() {} func (x *StreamEvent_ChannelsReordered) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[12] + mi := &file_chat_v1_stream_proto_msgTypes[13] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1407,7 +1464,7 @@ type StreamEvent_ChannelDeleted struct { func (x *StreamEvent_ChannelDeleted) Reset() { *x = StreamEvent_ChannelDeleted{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[13] + mi := &file_chat_v1_stream_proto_msgTypes[14] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1420,7 +1477,7 @@ func (x *StreamEvent_ChannelDeleted) String() string { func (*StreamEvent_ChannelDeleted) ProtoMessage() {} func (x *StreamEvent_ChannelDeleted) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[13] + mi := &file_chat_v1_stream_proto_msgTypes[14] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1469,7 +1526,7 @@ type StreamEvent_GuildUpdated struct { func (x *StreamEvent_GuildUpdated) Reset() { *x = StreamEvent_GuildUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[14] + mi := &file_chat_v1_stream_proto_msgTypes[15] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1482,7 +1539,7 @@ func (x *StreamEvent_GuildUpdated) String() string { func (*StreamEvent_GuildUpdated) ProtoMessage() {} func (x *StreamEvent_GuildUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[14] + mi := &file_chat_v1_stream_proto_msgTypes[15] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1539,7 +1596,7 @@ type StreamEvent_GuildDeleted struct { func (x *StreamEvent_GuildDeleted) Reset() { *x = StreamEvent_GuildDeleted{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[15] + mi := &file_chat_v1_stream_proto_msgTypes[16] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1552,7 +1609,7 @@ func (x *StreamEvent_GuildDeleted) String() string { func (*StreamEvent_GuildDeleted) ProtoMessage() {} func (x *StreamEvent_GuildDeleted) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[15] + mi := &file_chat_v1_stream_proto_msgTypes[16] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1590,7 +1647,7 @@ type StreamEvent_MemberJoined struct { func (x *StreamEvent_MemberJoined) Reset() { *x = StreamEvent_MemberJoined{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[16] + mi := &file_chat_v1_stream_proto_msgTypes[17] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1603,7 +1660,7 @@ func (x *StreamEvent_MemberJoined) String() string { func (*StreamEvent_MemberJoined) ProtoMessage() {} func (x *StreamEvent_MemberJoined) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[16] + mi := &file_chat_v1_stream_proto_msgTypes[17] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1650,7 +1707,7 @@ type StreamEvent_MemberLeft struct { func (x *StreamEvent_MemberLeft) Reset() { *x = StreamEvent_MemberLeft{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[17] + mi := &file_chat_v1_stream_proto_msgTypes[18] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1663,7 +1720,7 @@ func (x *StreamEvent_MemberLeft) String() string { func (*StreamEvent_MemberLeft) ProtoMessage() {} func (x *StreamEvent_MemberLeft) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[17] + mi := &file_chat_v1_stream_proto_msgTypes[18] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1715,7 +1772,7 @@ type StreamEvent_GuildAddedToList struct { func (x *StreamEvent_GuildAddedToList) Reset() { *x = StreamEvent_GuildAddedToList{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[18] + mi := &file_chat_v1_stream_proto_msgTypes[19] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1728,7 +1785,7 @@ func (x *StreamEvent_GuildAddedToList) String() string { func (*StreamEvent_GuildAddedToList) ProtoMessage() {} func (x *StreamEvent_GuildAddedToList) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[18] + mi := &file_chat_v1_stream_proto_msgTypes[19] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1773,7 +1830,7 @@ type StreamEvent_GuildRemovedFromList struct { func (x *StreamEvent_GuildRemovedFromList) Reset() { *x = StreamEvent_GuildRemovedFromList{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[19] + mi := &file_chat_v1_stream_proto_msgTypes[20] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1786,7 +1843,7 @@ func (x *StreamEvent_GuildRemovedFromList) String() string { func (*StreamEvent_GuildRemovedFromList) ProtoMessage() {} func (x *StreamEvent_GuildRemovedFromList) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[19] + mi := &file_chat_v1_stream_proto_msgTypes[20] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1837,7 +1894,7 @@ type StreamEvent_ActionPerformed struct { func (x *StreamEvent_ActionPerformed) Reset() { *x = StreamEvent_ActionPerformed{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[20] + mi := &file_chat_v1_stream_proto_msgTypes[21] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1850,7 +1907,7 @@ func (x *StreamEvent_ActionPerformed) String() string { func (*StreamEvent_ActionPerformed) ProtoMessage() {} func (x *StreamEvent_ActionPerformed) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[20] + mi := &file_chat_v1_stream_proto_msgTypes[21] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1918,7 +1975,7 @@ type StreamEvent_RoleMoved struct { func (x *StreamEvent_RoleMoved) Reset() { *x = StreamEvent_RoleMoved{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[21] + mi := &file_chat_v1_stream_proto_msgTypes[22] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1931,7 +1988,7 @@ func (x *StreamEvent_RoleMoved) String() string { func (*StreamEvent_RoleMoved) ProtoMessage() {} func (x *StreamEvent_RoleMoved) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[21] + mi := &file_chat_v1_stream_proto_msgTypes[22] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -1983,7 +2040,7 @@ type StreamEvent_RoleDeleted struct { func (x *StreamEvent_RoleDeleted) Reset() { *x = StreamEvent_RoleDeleted{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[22] + mi := &file_chat_v1_stream_proto_msgTypes[23] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -1996,7 +2053,7 @@ func (x *StreamEvent_RoleDeleted) String() string { func (*StreamEvent_RoleDeleted) ProtoMessage() {} func (x *StreamEvent_RoleDeleted) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[22] + mi := &file_chat_v1_stream_proto_msgTypes[23] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2049,7 +2106,7 @@ type StreamEvent_RoleCreated struct { func (x *StreamEvent_RoleCreated) Reset() { *x = StreamEvent_RoleCreated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[23] + mi := &file_chat_v1_stream_proto_msgTypes[24] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2062,7 +2119,7 @@ func (x *StreamEvent_RoleCreated) String() string { func (*StreamEvent_RoleCreated) ProtoMessage() {} func (x *StreamEvent_RoleCreated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[23] + mi := &file_chat_v1_stream_proto_msgTypes[24] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2143,7 +2200,7 @@ type StreamEvent_RoleUpdated struct { func (x *StreamEvent_RoleUpdated) Reset() { *x = StreamEvent_RoleUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[24] + mi := &file_chat_v1_stream_proto_msgTypes[25] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2156,7 +2213,7 @@ func (x *StreamEvent_RoleUpdated) String() string { func (*StreamEvent_RoleUpdated) ProtoMessage() {} func (x *StreamEvent_RoleUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[24] + mi := &file_chat_v1_stream_proto_msgTypes[25] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2235,7 +2292,7 @@ type StreamEvent_RolePermissionsUpdated struct { func (x *StreamEvent_RolePermissionsUpdated) Reset() { *x = StreamEvent_RolePermissionsUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[25] + mi := &file_chat_v1_stream_proto_msgTypes[26] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2248,7 +2305,7 @@ func (x *StreamEvent_RolePermissionsUpdated) String() string { func (*StreamEvent_RolePermissionsUpdated) ProtoMessage() {} func (x *StreamEvent_RolePermissionsUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[25] + mi := &file_chat_v1_stream_proto_msgTypes[26] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2309,7 +2366,7 @@ type StreamEvent_UserRolesUpdated struct { func (x *StreamEvent_UserRolesUpdated) Reset() { *x = StreamEvent_UserRolesUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[26] + mi := &file_chat_v1_stream_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2322,7 +2379,7 @@ func (x *StreamEvent_UserRolesUpdated) String() string { func (*StreamEvent_UserRolesUpdated) ProtoMessage() {} func (x *StreamEvent_UserRolesUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[26] + mi := &file_chat_v1_stream_proto_msgTypes[27] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2376,7 +2433,7 @@ type StreamEvent_Typing struct { func (x *StreamEvent_Typing) Reset() { *x = StreamEvent_Typing{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[27] + mi := &file_chat_v1_stream_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2389,7 +2446,7 @@ func (x *StreamEvent_Typing) String() string { func (*StreamEvent_Typing) ProtoMessage() {} func (x *StreamEvent_Typing) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[27] + mi := &file_chat_v1_stream_proto_msgTypes[28] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2448,7 +2505,7 @@ type StreamEvent_PermissionUpdated struct { func (x *StreamEvent_PermissionUpdated) Reset() { *x = StreamEvent_PermissionUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[28] + mi := &file_chat_v1_stream_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2461,7 +2518,7 @@ func (x *StreamEvent_PermissionUpdated) String() string { func (*StreamEvent_PermissionUpdated) ProtoMessage() {} func (x *StreamEvent_PermissionUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[28] + mi := &file_chat_v1_stream_proto_msgTypes[29] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2525,7 +2582,7 @@ type StreamEvent_MessagePinned struct { func (x *StreamEvent_MessagePinned) Reset() { *x = StreamEvent_MessagePinned{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[29] + mi := &file_chat_v1_stream_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2538,7 +2595,7 @@ func (x *StreamEvent_MessagePinned) String() string { func (*StreamEvent_MessagePinned) ProtoMessage() {} func (x *StreamEvent_MessagePinned) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[29] + mi := &file_chat_v1_stream_proto_msgTypes[30] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2595,7 +2652,7 @@ type StreamEvent_MessageUnpinned struct { func (x *StreamEvent_MessageUnpinned) Reset() { *x = StreamEvent_MessageUnpinned{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[30] + mi := &file_chat_v1_stream_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2608,7 +2665,7 @@ func (x *StreamEvent_MessageUnpinned) String() string { func (*StreamEvent_MessageUnpinned) ProtoMessage() {} func (x *StreamEvent_MessageUnpinned) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[30] + mi := &file_chat_v1_stream_proto_msgTypes[31] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2664,7 +2721,7 @@ type StreamEvent_ReactionUpdated struct { func (x *StreamEvent_ReactionUpdated) Reset() { *x = StreamEvent_ReactionUpdated{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[31] + mi := &file_chat_v1_stream_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2677,7 +2734,7 @@ func (x *StreamEvent_ReactionUpdated) String() string { func (*StreamEvent_ReactionUpdated) ProtoMessage() {} func (x *StreamEvent_ReactionUpdated) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[31] + mi := &file_chat_v1_stream_proto_msgTypes[32] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2734,7 +2791,7 @@ type StreamEvent_OwnerAdded struct { func (x *StreamEvent_OwnerAdded) Reset() { *x = StreamEvent_OwnerAdded{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[32] + mi := &file_chat_v1_stream_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2747,7 +2804,7 @@ func (x *StreamEvent_OwnerAdded) String() string { func (*StreamEvent_OwnerAdded) ProtoMessage() {} func (x *StreamEvent_OwnerAdded) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[32] + mi := &file_chat_v1_stream_proto_msgTypes[33] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2783,7 +2840,7 @@ type StreamEvent_OwnerRemoved struct { func (x *StreamEvent_OwnerRemoved) Reset() { *x = StreamEvent_OwnerRemoved{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[33] + mi := &file_chat_v1_stream_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2796,7 +2853,7 @@ func (x *StreamEvent_OwnerRemoved) String() string { func (*StreamEvent_OwnerRemoved) ProtoMessage() {} func (x *StreamEvent_OwnerRemoved) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[33] + mi := &file_chat_v1_stream_proto_msgTypes[34] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2836,7 +2893,7 @@ type StreamEvent_InviteReceived struct { func (x *StreamEvent_InviteReceived) Reset() { *x = StreamEvent_InviteReceived{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[34] + mi := &file_chat_v1_stream_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2849,7 +2906,7 @@ func (x *StreamEvent_InviteReceived) String() string { func (*StreamEvent_InviteReceived) ProtoMessage() {} func (x *StreamEvent_InviteReceived) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[34] + mi := &file_chat_v1_stream_proto_msgTypes[35] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2903,7 +2960,7 @@ type StreamEvent_InviteRejected struct { func (x *StreamEvent_InviteRejected) Reset() { *x = StreamEvent_InviteRejected{} if protoimpl.UnsafeEnabled { - mi := &file_chat_v1_stream_proto_msgTypes[35] + mi := &file_chat_v1_stream_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2916,7 +2973,7 @@ func (x *StreamEvent_InviteRejected) String() string { func (*StreamEvent_InviteRejected) ProtoMessage() {} func (x *StreamEvent_InviteRejected) ProtoReflect() protoreflect.Message { - mi := &file_chat_v1_stream_proto_msgTypes[35] + mi := &file_chat_v1_stream_proto_msgTypes[36] if protoimpl.UnsafeEnabled && x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2969,7 +3026,7 @@ var file_chat_v1_stream_proto_rawDesc = []byte{ 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x15, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x17, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe5, 0x03, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xe9, 0x04, 0x0a, 0x13, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x66, 0x0a, 0x12, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x74, 0x6f, 0x5f, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x36, 0x2e, 0x70, 0x72, 0x6f, @@ -2992,459 +3049,467 @@ var file_chat_v1_stream_proto_rawDesc = []byte{ 0x75, 0x65, 0x73, 0x74, 0x2e, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x48, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x48, 0x00, 0x52, 0x1b, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x48, - 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x1a, - 0x2d, 0x0a, 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x47, 0x75, - 0x69, 0x6c, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x1a, 0x14, - 0x0a, 0x12, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x1a, 0x1d, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, - 0x65, 0x54, 0x6f, 0x48, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x73, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0xca, - 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x63, 0x68, 0x61, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, 0x12, 0x36, 0x0a, 0x05, - 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x2e, 0x76, 0x31, 0x2e, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x05, 0x65, - 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x66, 0x69, - 0x6c, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, 0xb2, 0x34, 0x0a, 0x0b, - 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, 0x5f, 0x0a, 0x13, 0x67, - 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x6c, 0x69, - 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64, 0x64, - 0x65, 0x64, 0x54, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x6b, 0x0a, 0x17, - 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x5f, 0x66, 0x72, - 0x6f, 0x6d, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x32, 0x2e, + 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x12, + 0x6c, 0x0a, 0x14, 0x75, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x5f, 0x66, + 0x72, 0x6f, 0x6d, 0x5f, 0x61, 0x6c, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x38, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x75, 0x69, - 0x6c, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x69, 0x73, - 0x74, 0x48, 0x00, 0x52, 0x14, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, - 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5a, 0x0a, 0x10, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, - 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, - 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x66, - 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0c, 0x73, 0x65, 0x6e, 0x74, 0x5f, 0x6d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, - 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, 0x6e, 0x74, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x0e, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x5f, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x65, - 0x64, 0x69, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x57, 0x0a, 0x0f, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, - 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, - 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, - 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x57, 0x0a, 0x0f, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, - 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, - 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x55, - 0x0a, 0x0e, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x57, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, - 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, - 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, - 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x4f, - 0x0a, 0x0c, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x18, 0x0a, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, - 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x48, 0x00, 0x52, 0x0b, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x12, - 0x51, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x47, 0x75, 0x69, - 0x6c, 0x64, 0x12, 0x51, 0x0a, 0x0d, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x6d, - 0x62, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x2e, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x6c, 0x6c, 0x48, 0x00, 0x52, 0x12, 0x75, 0x6e, 0x73, 0x75, 0x62, + 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x6c, 0x6c, 0x1a, 0x2d, 0x0a, + 0x10, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x47, 0x75, 0x69, 0x6c, + 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x1a, 0x14, 0x0a, 0x12, + 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, 0x6f, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x73, 0x1a, 0x1d, 0x0a, 0x1b, 0x53, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, 0x54, + 0x6f, 0x48, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x73, 0x1a, 0x14, 0x0a, 0x12, 0x55, 0x6e, 0x73, 0x75, 0x62, 0x73, 0x63, 0x72, 0x69, 0x62, 0x65, + 0x46, 0x72, 0x6f, 0x6d, 0x41, 0x6c, 0x6c, 0x42, 0x09, 0x0a, 0x07, 0x72, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x22, 0xca, 0x01, 0x0a, 0x14, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, + 0x6e, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x33, 0x0a, 0x04, 0x63, + 0x68, 0x61, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4a, - 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x4d, - 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0b, 0x6c, 0x65, 0x66, 0x74, 0x5f, 0x6d, 0x65, - 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, - 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x4c, 0x65, 0x66, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x65, 0x66, 0x74, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x18, 0x0e, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, + 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x04, 0x63, 0x68, 0x61, 0x74, + 0x12, 0x36, 0x0a, 0x05, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x1e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x65, 0x6d, 0x6f, 0x74, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, + 0x00, 0x52, 0x05, 0x65, 0x6d, 0x6f, 0x74, 0x65, 0x12, 0x3c, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x66, + 0x69, 0x6c, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x07, 0x70, + 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, 0x22, + 0xb2, 0x34, 0x0a, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x12, + 0x5f, 0x0a, 0x13, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, 0x5f, 0x74, + 0x6f, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x75, 0x69, 0x6c, + 0x64, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x10, + 0x67, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54, 0x6f, 0x4c, 0x69, 0x73, 0x74, + 0x12, 0x6b, 0x0a, 0x17, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x5f, 0x66, 0x72, 0x6f, 0x6d, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x32, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, + 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x48, 0x00, 0x52, 0x14, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x5a, 0x0a, + 0x10, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, + 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, + 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0c, 0x73, 0x65, 0x6e, + 0x74, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, + 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x48, 0x00, 0x52, 0x0b, 0x73, 0x65, + 0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x55, 0x0a, 0x0e, 0x65, 0x64, 0x69, + 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x0d, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x12, 0x57, 0x0a, 0x0f, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6d, 0x65, 0x73, 0x73, + 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, + 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x57, 0x0a, 0x0f, 0x63, 0x72, 0x65, + 0x61, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x07, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, 0x74, 0x79, 0x70, 0x69, - 0x6e, 0x67, 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, - 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, - 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6d, 0x6f, 0x76, 0x65, 0x64, - 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0c, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x12, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, + 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x0e, 0x63, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x12, 0x55, 0x0a, 0x0e, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x65, 0x64, 0x69, 0x74, + 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x12, 0x57, 0x0a, 0x0f, 0x64, 0x65, 0x6c, + 0x65, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x18, 0x09, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, - 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x12, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, + 0x48, 0x00, 0x52, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x12, 0x4f, 0x0a, 0x0c, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x67, 0x75, 0x69, + 0x6c, 0x64, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x10, 0x72, 0x6f, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x73, - 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2e, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, - 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, - 0x65, 0x64, 0x12, 0x60, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x50, 0x65, - 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, - 0x00, 0x52, 0x11, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x12, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, - 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, - 0x64, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x6f, - 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x12, 0x6e, 0x0a, 0x17, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, - 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, - 0x15, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x6f, - 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x0e, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x18, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2b, + 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x47, 0x75, + 0x69, 0x6c, 0x64, 0x12, 0x51, 0x0a, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x65, + 0x64, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x12, 0x51, 0x0a, 0x0d, 0x6a, 0x6f, 0x69, 0x6e, 0x65, 0x64, + 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x6d, + 0x62, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6a, 0x6f, 0x69, + 0x6e, 0x65, 0x64, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x4b, 0x0a, 0x0b, 0x6c, 0x65, 0x66, + 0x74, 0x5f, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, - 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0d, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x5a, 0x0a, 0x10, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x6e, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, - 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x65, 0x66, 0x74, 0x48, 0x00, 0x52, 0x0a, 0x6c, 0x65, 0x66, 0x74, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x3e, 0x0a, 0x06, 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, + 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x48, 0x00, 0x52, 0x06, + 0x74, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x63, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x43, + 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x64, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x18, 0x10, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, + 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x44, + 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x48, 0x0a, 0x0a, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x6d, + 0x6f, 0x76, 0x65, 0x64, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, + 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x09, 0x72, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x76, 0x65, 0x64, + 0x12, 0x4e, 0x0a, 0x0c, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x12, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x6e, 0x70, - 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x5a, 0x0a, 0x10, 0x72, 0x65, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x1a, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x0b, 0x72, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x12, 0x64, 0x0a, 0x12, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x73, 0x5f, 0x75, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x13, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, + 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x6f, 0x6c, 0x65, + 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x10, 0x72, 0x6f, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x73, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x5e, 0x0a, 0x12, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x72, + 0x6f, 0x6c, 0x65, 0x73, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x14, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, - 0x74, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, - 0x61, 0x74, 0x65, 0x64, 0x12, 0x4b, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x61, 0x64, - 0x64, 0x65, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, - 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, - 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, - 0x64, 0x12, 0x51, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x65, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x65, 0x64, 0x12, 0x57, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x72, - 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, - 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x69, - 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x57, 0x0a, - 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, - 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, + 0x74, 0x2e, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x48, 0x00, 0x52, 0x10, 0x75, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x55, + 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x12, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, + 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x70, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x60, 0x0a, 0x12, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x73, 0x5f, 0x72, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x18, 0x16, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, + 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x6f, 0x72, + 0x64, 0x65, 0x72, 0x65, 0x64, 0x48, 0x00, 0x52, 0x11, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x73, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, 0x12, 0x6e, 0x0a, 0x17, 0x65, 0x64, + 0x69, 0x74, 0x65, 0x64, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x34, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, + 0x64, 0x48, 0x00, 0x52, 0x15, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x43, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x54, 0x0a, 0x0e, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x18, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x2b, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, + 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x0d, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, + 0x12, 0x5a, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x75, 0x6e, 0x70, 0x69, + 0x6e, 0x6e, 0x65, 0x64, 0x18, 0x19, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x5a, 0x0a, 0x10, + 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, + 0x18, 0x1a, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x6a, 0x65, - 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x1a, 0xc5, 0x01, 0x0a, 0x0b, 0x4d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x07, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x06, 0x65, 0x63, 0x68, 0x6f, 0x49, - 0x64, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, - 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x33, 0x0a, - 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, - 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x65, 0x63, 0x68, 0x6f, 0x5f, 0x69, 0x64, 0x1a, 0xc8, - 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x65, 0x64, - 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x65, - 0x64, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x40, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x63, - 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, + 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0f, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x4b, 0x0a, 0x0b, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x65, 0x64, 0x18, 0x1b, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x28, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x77, 0x6e, + 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0a, 0x6f, 0x77, 0x6e, 0x65, 0x72, + 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x51, 0x0a, 0x0d, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x5f, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x1c, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, - 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, 0x74, 0x52, 0x0a, 0x6e, - 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x1a, 0x69, 0x0a, 0x0e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x4f, 0x77, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0c, 0x6f, 0x77, 0x6e, 0x65, + 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x57, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x5f, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x18, 0x1d, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, + 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, + 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x48, + 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, + 0x64, 0x12, 0x57, 0x0a, 0x0f, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x6a, 0x65, + 0x63, 0x74, 0x65, 0x64, 0x18, 0x1e, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x53, 0x74, + 0x72, 0x65, 0x61, 0x6d, 0x45, 0x76, 0x65, 0x6e, 0x74, 0x2e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x48, 0x00, 0x52, 0x0e, 0x69, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x1a, 0xc5, 0x01, 0x0a, 0x0b, 0x4d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x6e, 0x74, 0x12, 0x1c, 0x0a, 0x07, 0x65, 0x63, + 0x68, 0x6f, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x06, 0x65, + 0x63, 0x68, 0x6f, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, + 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, + 0x64, 0x12, 0x33, 0x0a, 0x07, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, + 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x07, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x42, 0x0a, 0x0a, 0x08, 0x5f, 0x65, 0x63, 0x68, 0x6f, 0x5f, + 0x69, 0x64, 0x1a, 0xc8, 0x01, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x1b, + 0x0a, 0x09, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x5f, 0x61, 0x74, 0x18, 0x04, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x08, 0x65, 0x64, 0x69, 0x74, 0x65, 0x64, 0x41, 0x74, 0x12, 0x40, 0x0a, 0x0b, 0x6e, + 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, + 0x2e, 0x76, 0x31, 0x2e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x74, 0x65, 0x64, 0x54, 0x65, 0x78, + 0x74, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x43, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x1a, 0x69, 0x0a, + 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, + 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, + 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x1a, 0xa7, 0x02, 0x0a, 0x0e, 0x43, 0x68, 0x61, + 0x6e, 0x6e, 0x65, 0x6c, 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, - 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, - 0x67, 0x65, 0x49, 0x64, 0x1a, 0xa7, 0x02, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, - 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, - 0x76, 0x31, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, 0x04, 0x6b, 0x69, 0x6e, - 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, - 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x12, 0x43, 0x0a, 0x08, - 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, - 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, - 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, - 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xd4, - 0x01, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x08, 0x6e, - 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, - 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4a, 0x0a, 0x0c, 0x6e, - 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, - 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x65, 0x77, 0x5f, - 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x74, - 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xb3, 0x01, 0x0a, 0x16, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x4e, 0x0a, 0x0c, 0x6e, 0x65, - 0x77, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, - 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x74, 0x65, 0x6d, - 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, - 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, - 0x65, 0x77, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x4f, 0x0a, 0x11, 0x43, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x6f, 0x72, 0x64, 0x65, 0x72, 0x65, 0x64, - 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1f, 0x0a, 0x0b, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, - 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x73, 0x1a, 0x4a, 0x0a, 0x0e, - 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, - 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, - 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x1a, 0xe9, 0x01, 0x0a, 0x0c, 0x47, 0x75, 0x69, - 0x6c, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, - 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, - 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, - 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x69, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, 0x0a, 0x6e, 0x65, 0x77, - 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4a, 0x0a, 0x0c, 0x6e, 0x65, - 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, - 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x48, 0x02, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x4d, 0x65, 0x74, 0x61, 0x64, - 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x69, 0x63, 0x74, - 0x75, 0x72, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, - 0x64, 0x61, 0x74, 0x61, 0x1a, 0x29, 0x0a, 0x0c, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x44, 0x65, 0x6c, - 0x65, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x1a, - 0x46, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x6f, 0x69, 0x6e, 0x65, 0x64, 0x12, - 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, - 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x1a, 0x86, 0x01, 0x0a, 0x0a, 0x4d, 0x65, 0x6d, 0x62, - 0x65, 0x72, 0x4c, 0x65, 0x66, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, - 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x40, - 0x0a, 0x0c, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, - 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x65, 0x61, - 0x73, 0x6f, 0x6e, 0x52, 0x0b, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, - 0x1a, 0x4d, 0x0a, 0x10, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64, 0x64, 0x65, 0x64, 0x54, 0x6f, - 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, - 0x1e, 0x0a, 0x0a, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x1a, - 0x51, 0x0a, 0x14, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x46, - 0x72, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x1a, 0xbe, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, - 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, - 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, - 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x41, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, 0x70, 0x61, 0x79, 0x6c, - 0x6f, 0x61, 0x64, 0x1a, 0x8a, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x6c, 0x65, 0x4d, 0x6f, 0x76, 0x65, - 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, - 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, - 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x6f, 0x73, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, + 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x70, 0x6f, 0x73, + 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x41, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, - 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, - 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x6f, 0x6c, - 0x65, 0x49, 0x64, 0x1a, 0x9d, 0x01, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x43, 0x72, 0x65, 0x61, - 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x63, 0x6f, 0x6c, 0x6f, - 0x72, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x6f, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, - 0x52, 0x05, 0x68, 0x6f, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, 0x69, 0x6e, 0x67, 0x61, - 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, 0x69, 0x6e, 0x67, 0x61, - 0x62, 0x6c, 0x65, 0x1a, 0x87, 0x02, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, + 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x31, 0x0a, + 0x04, 0x6b, 0x69, 0x6e, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x43, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x4b, 0x69, 0x6e, 0x64, 0x52, 0x04, 0x6b, 0x69, 0x6e, 0x64, + 0x12, 0x43, 0x0a, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x06, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, + 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x00, 0x52, 0x08, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, + 0x74, 0x61, 0x1a, 0xd4, 0x01, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x55, 0x70, + 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, + 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, + 0x4a, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, + 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, + 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, + 0x2e, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x01, 0x52, 0x0b, 0x6e, 0x65, 0x77, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, + 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x65, 0x77, + 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0xb3, 0x01, 0x0a, 0x16, 0x43, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, + 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, + 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x4e, + 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x49, 0x74, 0x65, 0x6d, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x48, 0x00, 0x52, 0x0b, + 0x6e, 0x65, 0x77, 0x50, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x88, 0x01, 0x01, 0x42, 0x0f, + 0x0a, 0x0d, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, + 0x4f, 0x0a, 0x11, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x73, 0x52, 0x65, 0x6f, 0x72, 0x64, + 0x65, 0x72, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, + 0x1f, 0x0a, 0x0b, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, + 0x20, 0x03, 0x28, 0x04, 0x52, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x73, + 0x1a, 0x4a, 0x0a, 0x0e, 0x43, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x44, 0x65, 0x6c, 0x65, 0x74, + 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, + 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x1a, 0xe9, 0x01, 0x0a, + 0x0c, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, + 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, + 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x24, 0x0a, 0x0b, 0x6e, 0x65, 0x77, 0x5f, + 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x01, 0x52, + 0x0a, 0x6e, 0x65, 0x77, 0x50, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x88, 0x01, 0x01, 0x12, 0x4a, + 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, + 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x48, 0x02, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x4d, + 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, + 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0e, 0x0a, 0x0c, 0x5f, 0x6e, 0x65, 0x77, 0x5f, + 0x70, 0x69, 0x63, 0x74, 0x75, 0x72, 0x65, 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x65, 0x77, 0x5f, + 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x1a, 0x29, 0x0a, 0x0c, 0x47, 0x75, 0x69, 0x6c, + 0x64, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x49, 0x64, 0x1a, 0x46, 0x0a, 0x0c, 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4a, 0x6f, 0x69, + 0x6e, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x1a, 0x86, 0x01, 0x0a, 0x0a, + 0x4d, 0x65, 0x6d, 0x62, 0x65, 0x72, 0x4c, 0x65, 0x66, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x65, + 0x6d, 0x62, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x08, 0x6d, + 0x65, 0x6d, 0x62, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x12, 0x40, 0x0a, 0x0c, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x5f, 0x72, 0x65, 0x61, 0x73, + 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x4c, 0x65, 0x61, 0x76, + 0x65, 0x52, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x52, 0x0b, 0x6c, 0x65, 0x61, 0x76, 0x65, 0x52, 0x65, + 0x61, 0x73, 0x6f, 0x6e, 0x1a, 0x4d, 0x0a, 0x10, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x41, 0x64, 0x64, + 0x65, 0x64, 0x54, 0x6f, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, + 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, + 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x1a, 0x51, 0x0a, 0x14, 0x47, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x6d, 0x6f, + 0x76, 0x65, 0x64, 0x46, 0x72, 0x6f, 0x6d, 0x4c, 0x69, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x68, 0x6f, 0x6d, 0x65, 0x73, 0x65, + 0x72, 0x76, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x68, 0x6f, 0x6d, 0x65, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x1a, 0xbe, 0x01, 0x0a, 0x0f, 0x41, 0x63, 0x74, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x72, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, + 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, + 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, + 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, + 0x65, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, + 0x2e, 0x41, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x50, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x52, 0x07, + 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x1a, 0x8a, 0x01, 0x0a, 0x09, 0x52, 0x6f, 0x6c, 0x65, + 0x4d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, + 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x49, 0x0a, 0x0c, 0x6e, 0x65, 0x77, + 0x5f, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, + 0x26, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, 0x6f, + 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x49, 0x74, 0x65, 0x6d, 0x50, + 0x6f, 0x73, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x6f, 0x73, 0x69, + 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x41, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x44, 0x65, 0x6c, 0x65, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x08, 0x6e, 0x65, 0x77, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x07, 0x6e, 0x65, 0x77, - 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x63, - 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, 0x52, 0x08, 0x6e, 0x65, - 0x77, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x6e, 0x65, 0x77, - 0x5f, 0x68, 0x6f, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x48, 0x02, 0x52, 0x08, - 0x6e, 0x65, 0x77, 0x48, 0x6f, 0x69, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, 0x26, 0x0a, 0x0c, 0x6e, - 0x65, 0x77, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x48, 0x03, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x6c, 0x65, - 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x42, 0x0c, - 0x0a, 0x0a, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x68, 0x6f, 0x69, 0x73, 0x74, 0x42, 0x0f, 0x0a, 0x0d, - 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0xba, 0x01, - 0x0a, 0x16, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, - 0x65, 0x6c, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, - 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, - 0x12, 0x39, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x65, 0x72, 0x6d, 0x73, 0x18, 0x04, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, - 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x50, 0x65, 0x72, 0x6d, 0x73, 0x42, 0x0d, 0x0a, 0x0b, 0x5f, - 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x1a, 0x68, 0x0a, 0x10, 0x55, 0x73, - 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, - 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, - 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, - 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0a, 0x6e, 0x65, 0x77, 0x52, 0x6f, 0x6c, - 0x65, 0x49, 0x64, 0x73, 0x1a, 0x5b, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x69, 0x6e, 0x67, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, - 0x64, 0x1a, 0x87, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x1a, 0x9d, 0x01, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, + 0x43, 0x72, 0x65, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x12, 0x0a, 0x04, 0x6e, + 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, + 0x14, 0x0a, 0x05, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, + 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x12, 0x14, 0x0a, 0x05, 0x68, 0x6f, 0x69, 0x73, 0x74, 0x18, 0x05, + 0x20, 0x01, 0x28, 0x08, 0x52, 0x05, 0x68, 0x6f, 0x69, 0x73, 0x74, 0x12, 0x1a, 0x0a, 0x08, 0x70, + 0x69, 0x6e, 0x67, 0x61, 0x62, 0x6c, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x70, + 0x69, 0x6e, 0x67, 0x61, 0x62, 0x6c, 0x65, 0x1a, 0x87, 0x02, 0x0a, 0x0b, 0x52, 0x6f, 0x6c, 0x65, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, - 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, - 0x6c, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, 0x12, 0x0e, 0x0a, 0x02, - 0x6f, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, 0x42, 0x0d, 0x0a, 0x0b, - 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x1a, 0x68, 0x0a, 0x0d, 0x4d, - 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x72, 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x08, 0x6e, + 0x65, 0x77, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, + 0x07, 0x6e, 0x65, 0x77, 0x4e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, 0x09, 0x6e, + 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6c, 0x6f, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x48, 0x01, + 0x52, 0x08, 0x6e, 0x65, 0x77, 0x43, 0x6f, 0x6c, 0x6f, 0x72, 0x88, 0x01, 0x01, 0x12, 0x20, 0x0a, + 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x68, 0x6f, 0x69, 0x73, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, + 0x48, 0x02, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x48, 0x6f, 0x69, 0x73, 0x74, 0x88, 0x01, 0x01, 0x12, + 0x26, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x6c, 0x65, 0x18, + 0x06, 0x20, 0x01, 0x28, 0x08, 0x48, 0x03, 0x52, 0x0b, 0x6e, 0x65, 0x77, 0x50, 0x69, 0x6e, 0x67, + 0x61, 0x62, 0x6c, 0x65, 0x88, 0x01, 0x01, 0x42, 0x0b, 0x0a, 0x09, 0x5f, 0x6e, 0x65, 0x77, 0x5f, + 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x63, 0x6f, 0x6c, + 0x6f, 0x72, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x68, 0x6f, 0x69, 0x73, 0x74, + 0x42, 0x0f, 0x0a, 0x0d, 0x5f, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x69, 0x6e, 0x67, 0x61, 0x62, 0x6c, + 0x65, 0x1a, 0xba, 0x01, 0x0a, 0x16, 0x52, 0x6f, 0x6c, 0x65, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, + 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, + 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x09, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x17, 0x0a, 0x07, 0x72, + 0x6f, 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x72, 0x6f, + 0x6c, 0x65, 0x49, 0x64, 0x12, 0x39, 0x0a, 0x09, 0x6e, 0x65, 0x77, 0x5f, 0x70, 0x65, 0x72, 0x6d, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, + 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x65, 0x72, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6e, 0x65, 0x77, 0x50, 0x65, 0x72, 0x6d, 0x73, 0x42, + 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x1a, 0x68, + 0x0a, 0x10, 0x55, 0x73, 0x65, 0x72, 0x52, 0x6f, 0x6c, 0x65, 0x73, 0x55, 0x70, 0x64, 0x61, 0x74, + 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x17, 0x0a, + 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, + 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x0c, 0x6e, 0x65, 0x77, 0x5f, 0x72, 0x6f, + 0x6c, 0x65, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x04, 0x52, 0x0a, 0x6e, 0x65, + 0x77, 0x52, 0x6f, 0x6c, 0x65, 0x49, 0x64, 0x73, 0x1a, 0x5b, 0x0a, 0x06, 0x54, 0x79, 0x70, 0x69, + 0x6e, 0x67, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, + 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x1a, 0x87, 0x01, 0x0a, 0x11, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, + 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x22, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x48, 0x00, 0x52, 0x09, 0x63, 0x68, + 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x14, 0x0a, 0x05, 0x71, 0x75, + 0x65, 0x72, 0x79, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x71, 0x75, 0x65, 0x72, 0x79, + 0x12, 0x0e, 0x0a, 0x02, 0x6f, 0x6b, 0x18, 0x04, 0x20, 0x01, 0x28, 0x08, 0x52, 0x02, 0x6f, 0x6b, + 0x42, 0x0d, 0x0a, 0x0b, 0x5f, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x1a, + 0x68, 0x0a, 0x0d, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x50, 0x69, 0x6e, 0x6e, 0x65, 0x64, + 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, + 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, + 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, + 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x1a, 0x6a, 0x0a, 0x0f, 0x4d, 0x65, 0x73, + 0x73, 0x61, 0x67, 0x65, 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, - 0x61, 0x67, 0x65, 0x49, 0x64, 0x1a, 0x6a, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x55, 0x6e, 0x70, 0x69, 0x6e, 0x6e, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, - 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, - 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, - 0x64, 0x1a, 0xa2, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x55, 0x70, - 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, 0x64, - 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x49, 0x64, 0x12, - 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x49, 0x64, 0x12, 0x36, - 0x0a, 0x08, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, - 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x72, 0x65, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x25, 0x0a, 0x0a, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x41, - 0x64, 0x64, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x1a, 0x27, 0x0a, - 0x0c, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x12, 0x17, 0x0a, - 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, - 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x1a, 0x7c, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, - 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, - 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, - 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x76, 0x69, 0x74, - 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x69, 0x6e, 0x76, - 0x69, 0x74, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x72, 0x5f, 0x69, 0x64, 0x1a, 0x61, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, - 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, 0x6c, 0x64, 0x49, - 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x17, - 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, 0x76, 0x65, 0x6e, 0x74, - 0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, - 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x53, 0x74, 0x72, 0x65, 0x61, - 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x2d, 0x64, 0x65, 0x76, - 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x62, 0x73, 0x68, 0x69, - 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, 0x31, 0x3b, 0x63, 0x68, - 0x61, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x58, 0xaa, 0x02, 0x10, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x10, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, 0x43, 0x68, 0x61, 0x74, 0x5c, 0x56, 0x31, - 0xe2, 0x02, 0x1c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, 0x43, 0x68, 0x61, 0x74, - 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, - 0x02, 0x12, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x3a, 0x3a, 0x43, 0x68, 0x61, 0x74, - 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x61, 0x67, 0x65, 0x49, 0x64, 0x1a, 0xa2, 0x01, 0x0a, 0x0f, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, + 0x6f, 0x6e, 0x55, 0x70, 0x64, 0x61, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, 0x69, + 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, 0x69, + 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, 0x6c, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x63, 0x68, 0x61, 0x6e, 0x6e, 0x65, + 0x6c, 0x49, 0x64, 0x12, 0x1d, 0x0a, 0x0a, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x69, + 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, 0x09, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, + 0x49, 0x64, 0x12, 0x36, 0x0a, 0x08, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x2e, 0x52, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x08, 0x72, 0x65, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0x25, 0x0a, 0x0a, 0x4f, 0x77, + 0x6e, 0x65, 0x72, 0x41, 0x64, 0x64, 0x65, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, + 0x64, 0x1a, 0x27, 0x0a, 0x0c, 0x4f, 0x77, 0x6e, 0x65, 0x72, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x65, + 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x1a, 0x7c, 0x0a, 0x0e, 0x49, 0x6e, + 0x76, 0x69, 0x74, 0x65, 0x52, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, + 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x49, 0x64, 0x12, 0x20, 0x0a, 0x09, 0x73, 0x65, 0x72, + 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x08, + 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x49, 0x64, 0x88, 0x01, 0x01, 0x12, 0x1d, 0x0a, 0x0a, 0x69, + 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x04, 0x52, + 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x72, 0x49, 0x64, 0x42, 0x0c, 0x0a, 0x0a, 0x5f, 0x73, + 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x1a, 0x61, 0x0a, 0x0e, 0x49, 0x6e, 0x76, 0x69, + 0x74, 0x65, 0x52, 0x65, 0x6a, 0x65, 0x63, 0x74, 0x65, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x67, 0x75, + 0x69, 0x6c, 0x64, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x67, 0x75, + 0x69, 0x6c, 0x64, 0x49, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, 0x5f, + 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x69, 0x6e, 0x76, 0x69, 0x74, 0x65, + 0x49, 0x64, 0x12, 0x17, 0x0a, 0x07, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x03, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x06, 0x75, 0x73, 0x65, 0x72, 0x49, 0x64, 0x42, 0x07, 0x0a, 0x05, 0x65, + 0x76, 0x65, 0x6e, 0x74, 0x42, 0xc1, 0x01, 0x0a, 0x14, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, + 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x63, 0x68, 0x61, 0x74, 0x2e, 0x76, 0x31, 0x42, 0x0b, 0x53, + 0x74, 0x72, 0x65, 0x61, 0x6d, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x3a, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, + 0x2d, 0x64, 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, + 0x62, 0x73, 0x68, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x63, 0x68, 0x61, 0x74, 0x2f, 0x76, + 0x31, 0x3b, 0x63, 0x68, 0x61, 0x74, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, 0x43, 0x58, 0xaa, 0x02, + 0x10, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x43, 0x68, 0x61, 0x74, 0x2e, 0x56, + 0x31, 0xca, 0x02, 0x10, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, 0x43, 0x68, 0x61, + 0x74, 0x5c, 0x56, 0x31, 0xe2, 0x02, 0x1c, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, + 0x43, 0x68, 0x61, 0x74, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, + 0x61, 0x74, 0x61, 0xea, 0x02, 0x12, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x3a, 0x3a, + 0x43, 0x68, 0x61, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -3459,7 +3524,7 @@ func file_chat_v1_stream_proto_rawDescGZIP() []byte { return file_chat_v1_stream_proto_rawDescData } -var file_chat_v1_stream_proto_msgTypes = make([]protoimpl.MessageInfo, 36) +var file_chat_v1_stream_proto_msgTypes = make([]protoimpl.MessageInfo, 37) var file_chat_v1_stream_proto_goTypes = []interface{}{ (*StreamEventsRequest)(nil), // 0: protocol.chat.v1.StreamEventsRequest (*StreamEventsResponse)(nil), // 1: protocol.chat.v1.StreamEventsResponse @@ -3467,103 +3532,105 @@ var file_chat_v1_stream_proto_goTypes = []interface{}{ (*StreamEventsRequest_SubscribeToGuild)(nil), // 3: protocol.chat.v1.StreamEventsRequest.SubscribeToGuild (*StreamEventsRequest_SubscribeToActions)(nil), // 4: protocol.chat.v1.StreamEventsRequest.SubscribeToActions (*StreamEventsRequest_SubscribeToHomeserverEvents)(nil), // 5: protocol.chat.v1.StreamEventsRequest.SubscribeToHomeserverEvents - (*StreamEvent_MessageSent)(nil), // 6: protocol.chat.v1.StreamEvent.MessageSent - (*StreamEvent_MessageUpdated)(nil), // 7: protocol.chat.v1.StreamEvent.MessageUpdated - (*StreamEvent_MessageDeleted)(nil), // 8: protocol.chat.v1.StreamEvent.MessageDeleted - (*StreamEvent_ChannelCreated)(nil), // 9: protocol.chat.v1.StreamEvent.ChannelCreated - (*StreamEvent_ChannelUpdated)(nil), // 10: protocol.chat.v1.StreamEvent.ChannelUpdated - (*StreamEvent_ChannelPositionUpdated)(nil), // 11: protocol.chat.v1.StreamEvent.ChannelPositionUpdated - (*StreamEvent_ChannelsReordered)(nil), // 12: protocol.chat.v1.StreamEvent.ChannelsReordered - (*StreamEvent_ChannelDeleted)(nil), // 13: protocol.chat.v1.StreamEvent.ChannelDeleted - (*StreamEvent_GuildUpdated)(nil), // 14: protocol.chat.v1.StreamEvent.GuildUpdated - (*StreamEvent_GuildDeleted)(nil), // 15: protocol.chat.v1.StreamEvent.GuildDeleted - (*StreamEvent_MemberJoined)(nil), // 16: protocol.chat.v1.StreamEvent.MemberJoined - (*StreamEvent_MemberLeft)(nil), // 17: protocol.chat.v1.StreamEvent.MemberLeft - (*StreamEvent_GuildAddedToList)(nil), // 18: protocol.chat.v1.StreamEvent.GuildAddedToList - (*StreamEvent_GuildRemovedFromList)(nil), // 19: protocol.chat.v1.StreamEvent.GuildRemovedFromList - (*StreamEvent_ActionPerformed)(nil), // 20: protocol.chat.v1.StreamEvent.ActionPerformed - (*StreamEvent_RoleMoved)(nil), // 21: protocol.chat.v1.StreamEvent.RoleMoved - (*StreamEvent_RoleDeleted)(nil), // 22: protocol.chat.v1.StreamEvent.RoleDeleted - (*StreamEvent_RoleCreated)(nil), // 23: protocol.chat.v1.StreamEvent.RoleCreated - (*StreamEvent_RoleUpdated)(nil), // 24: protocol.chat.v1.StreamEvent.RoleUpdated - (*StreamEvent_RolePermissionsUpdated)(nil), // 25: protocol.chat.v1.StreamEvent.RolePermissionsUpdated - (*StreamEvent_UserRolesUpdated)(nil), // 26: protocol.chat.v1.StreamEvent.UserRolesUpdated - (*StreamEvent_Typing)(nil), // 27: protocol.chat.v1.StreamEvent.Typing - (*StreamEvent_PermissionUpdated)(nil), // 28: protocol.chat.v1.StreamEvent.PermissionUpdated - (*StreamEvent_MessagePinned)(nil), // 29: protocol.chat.v1.StreamEvent.MessagePinned - (*StreamEvent_MessageUnpinned)(nil), // 30: protocol.chat.v1.StreamEvent.MessageUnpinned - (*StreamEvent_ReactionUpdated)(nil), // 31: protocol.chat.v1.StreamEvent.ReactionUpdated - (*StreamEvent_OwnerAdded)(nil), // 32: protocol.chat.v1.StreamEvent.OwnerAdded - (*StreamEvent_OwnerRemoved)(nil), // 33: protocol.chat.v1.StreamEvent.OwnerRemoved - (*StreamEvent_InviteReceived)(nil), // 34: protocol.chat.v1.StreamEvent.InviteReceived - (*StreamEvent_InviteRejected)(nil), // 35: protocol.chat.v1.StreamEvent.InviteRejected - (*v1.StreamEvent)(nil), // 36: protocol.emote.v1.StreamEvent - (*v11.StreamEvent)(nil), // 37: protocol.profile.v1.StreamEvent - (*Message)(nil), // 38: protocol.chat.v1.Message - (*FormattedText)(nil), // 39: protocol.chat.v1.FormattedText - (*v12.ItemPosition)(nil), // 40: protocol.harmonytypes.v1.ItemPosition - (ChannelKind)(0), // 41: protocol.chat.v1.ChannelKind - (*v12.Metadata)(nil), // 42: protocol.harmonytypes.v1.Metadata - (LeaveReason)(0), // 43: protocol.chat.v1.LeaveReason - (*ActionPayload)(nil), // 44: protocol.chat.v1.ActionPayload - (*Permission)(nil), // 45: protocol.chat.v1.Permission - (*Reaction)(nil), // 46: protocol.chat.v1.Reaction + (*StreamEventsRequest_UnsubscribeFromAll)(nil), // 6: protocol.chat.v1.StreamEventsRequest.UnsubscribeFromAll + (*StreamEvent_MessageSent)(nil), // 7: protocol.chat.v1.StreamEvent.MessageSent + (*StreamEvent_MessageUpdated)(nil), // 8: protocol.chat.v1.StreamEvent.MessageUpdated + (*StreamEvent_MessageDeleted)(nil), // 9: protocol.chat.v1.StreamEvent.MessageDeleted + (*StreamEvent_ChannelCreated)(nil), // 10: protocol.chat.v1.StreamEvent.ChannelCreated + (*StreamEvent_ChannelUpdated)(nil), // 11: protocol.chat.v1.StreamEvent.ChannelUpdated + (*StreamEvent_ChannelPositionUpdated)(nil), // 12: protocol.chat.v1.StreamEvent.ChannelPositionUpdated + (*StreamEvent_ChannelsReordered)(nil), // 13: protocol.chat.v1.StreamEvent.ChannelsReordered + (*StreamEvent_ChannelDeleted)(nil), // 14: protocol.chat.v1.StreamEvent.ChannelDeleted + (*StreamEvent_GuildUpdated)(nil), // 15: protocol.chat.v1.StreamEvent.GuildUpdated + (*StreamEvent_GuildDeleted)(nil), // 16: protocol.chat.v1.StreamEvent.GuildDeleted + (*StreamEvent_MemberJoined)(nil), // 17: protocol.chat.v1.StreamEvent.MemberJoined + (*StreamEvent_MemberLeft)(nil), // 18: protocol.chat.v1.StreamEvent.MemberLeft + (*StreamEvent_GuildAddedToList)(nil), // 19: protocol.chat.v1.StreamEvent.GuildAddedToList + (*StreamEvent_GuildRemovedFromList)(nil), // 20: protocol.chat.v1.StreamEvent.GuildRemovedFromList + (*StreamEvent_ActionPerformed)(nil), // 21: protocol.chat.v1.StreamEvent.ActionPerformed + (*StreamEvent_RoleMoved)(nil), // 22: protocol.chat.v1.StreamEvent.RoleMoved + (*StreamEvent_RoleDeleted)(nil), // 23: protocol.chat.v1.StreamEvent.RoleDeleted + (*StreamEvent_RoleCreated)(nil), // 24: protocol.chat.v1.StreamEvent.RoleCreated + (*StreamEvent_RoleUpdated)(nil), // 25: protocol.chat.v1.StreamEvent.RoleUpdated + (*StreamEvent_RolePermissionsUpdated)(nil), // 26: protocol.chat.v1.StreamEvent.RolePermissionsUpdated + (*StreamEvent_UserRolesUpdated)(nil), // 27: protocol.chat.v1.StreamEvent.UserRolesUpdated + (*StreamEvent_Typing)(nil), // 28: protocol.chat.v1.StreamEvent.Typing + (*StreamEvent_PermissionUpdated)(nil), // 29: protocol.chat.v1.StreamEvent.PermissionUpdated + (*StreamEvent_MessagePinned)(nil), // 30: protocol.chat.v1.StreamEvent.MessagePinned + (*StreamEvent_MessageUnpinned)(nil), // 31: protocol.chat.v1.StreamEvent.MessageUnpinned + (*StreamEvent_ReactionUpdated)(nil), // 32: protocol.chat.v1.StreamEvent.ReactionUpdated + (*StreamEvent_OwnerAdded)(nil), // 33: protocol.chat.v1.StreamEvent.OwnerAdded + (*StreamEvent_OwnerRemoved)(nil), // 34: protocol.chat.v1.StreamEvent.OwnerRemoved + (*StreamEvent_InviteReceived)(nil), // 35: protocol.chat.v1.StreamEvent.InviteReceived + (*StreamEvent_InviteRejected)(nil), // 36: protocol.chat.v1.StreamEvent.InviteRejected + (*v1.StreamEvent)(nil), // 37: protocol.emote.v1.StreamEvent + (*v11.StreamEvent)(nil), // 38: protocol.profile.v1.StreamEvent + (*Message)(nil), // 39: protocol.chat.v1.Message + (*FormattedText)(nil), // 40: protocol.chat.v1.FormattedText + (*v12.ItemPosition)(nil), // 41: protocol.harmonytypes.v1.ItemPosition + (ChannelKind)(0), // 42: protocol.chat.v1.ChannelKind + (*v12.Metadata)(nil), // 43: protocol.harmonytypes.v1.Metadata + (LeaveReason)(0), // 44: protocol.chat.v1.LeaveReason + (*ActionPayload)(nil), // 45: protocol.chat.v1.ActionPayload + (*Permission)(nil), // 46: protocol.chat.v1.Permission + (*Reaction)(nil), // 47: protocol.chat.v1.Reaction } var file_chat_v1_stream_proto_depIdxs = []int32{ 3, // 0: protocol.chat.v1.StreamEventsRequest.subscribe_to_guild:type_name -> protocol.chat.v1.StreamEventsRequest.SubscribeToGuild 4, // 1: protocol.chat.v1.StreamEventsRequest.subscribe_to_actions:type_name -> protocol.chat.v1.StreamEventsRequest.SubscribeToActions 5, // 2: protocol.chat.v1.StreamEventsRequest.subscribe_to_homeserver_events:type_name -> protocol.chat.v1.StreamEventsRequest.SubscribeToHomeserverEvents - 2, // 3: protocol.chat.v1.StreamEventsResponse.chat:type_name -> protocol.chat.v1.StreamEvent - 36, // 4: protocol.chat.v1.StreamEventsResponse.emote:type_name -> protocol.emote.v1.StreamEvent - 37, // 5: protocol.chat.v1.StreamEventsResponse.profile:type_name -> protocol.profile.v1.StreamEvent - 18, // 6: protocol.chat.v1.StreamEvent.guild_added_to_list:type_name -> protocol.chat.v1.StreamEvent.GuildAddedToList - 19, // 7: protocol.chat.v1.StreamEvent.guild_removed_from_list:type_name -> protocol.chat.v1.StreamEvent.GuildRemovedFromList - 20, // 8: protocol.chat.v1.StreamEvent.action_performed:type_name -> protocol.chat.v1.StreamEvent.ActionPerformed - 6, // 9: protocol.chat.v1.StreamEvent.sent_message:type_name -> protocol.chat.v1.StreamEvent.MessageSent - 7, // 10: protocol.chat.v1.StreamEvent.edited_message:type_name -> protocol.chat.v1.StreamEvent.MessageUpdated - 8, // 11: protocol.chat.v1.StreamEvent.deleted_message:type_name -> protocol.chat.v1.StreamEvent.MessageDeleted - 9, // 12: protocol.chat.v1.StreamEvent.created_channel:type_name -> protocol.chat.v1.StreamEvent.ChannelCreated - 10, // 13: protocol.chat.v1.StreamEvent.edited_channel:type_name -> protocol.chat.v1.StreamEvent.ChannelUpdated - 13, // 14: protocol.chat.v1.StreamEvent.deleted_channel:type_name -> protocol.chat.v1.StreamEvent.ChannelDeleted - 14, // 15: protocol.chat.v1.StreamEvent.edited_guild:type_name -> protocol.chat.v1.StreamEvent.GuildUpdated - 15, // 16: protocol.chat.v1.StreamEvent.deleted_guild:type_name -> protocol.chat.v1.StreamEvent.GuildDeleted - 16, // 17: protocol.chat.v1.StreamEvent.joined_member:type_name -> protocol.chat.v1.StreamEvent.MemberJoined - 17, // 18: protocol.chat.v1.StreamEvent.left_member:type_name -> protocol.chat.v1.StreamEvent.MemberLeft - 27, // 19: protocol.chat.v1.StreamEvent.typing:type_name -> protocol.chat.v1.StreamEvent.Typing - 23, // 20: protocol.chat.v1.StreamEvent.role_created:type_name -> protocol.chat.v1.StreamEvent.RoleCreated - 22, // 21: protocol.chat.v1.StreamEvent.role_deleted:type_name -> protocol.chat.v1.StreamEvent.RoleDeleted - 21, // 22: protocol.chat.v1.StreamEvent.role_moved:type_name -> protocol.chat.v1.StreamEvent.RoleMoved - 24, // 23: protocol.chat.v1.StreamEvent.role_updated:type_name -> protocol.chat.v1.StreamEvent.RoleUpdated - 25, // 24: protocol.chat.v1.StreamEvent.role_perms_updated:type_name -> protocol.chat.v1.StreamEvent.RolePermissionsUpdated - 26, // 25: protocol.chat.v1.StreamEvent.user_roles_updated:type_name -> protocol.chat.v1.StreamEvent.UserRolesUpdated - 28, // 26: protocol.chat.v1.StreamEvent.permission_updated:type_name -> protocol.chat.v1.StreamEvent.PermissionUpdated - 12, // 27: protocol.chat.v1.StreamEvent.channels_reordered:type_name -> protocol.chat.v1.StreamEvent.ChannelsReordered - 11, // 28: protocol.chat.v1.StreamEvent.edited_channel_position:type_name -> protocol.chat.v1.StreamEvent.ChannelPositionUpdated - 29, // 29: protocol.chat.v1.StreamEvent.message_pinned:type_name -> protocol.chat.v1.StreamEvent.MessagePinned - 30, // 30: protocol.chat.v1.StreamEvent.message_unpinned:type_name -> protocol.chat.v1.StreamEvent.MessageUnpinned - 31, // 31: protocol.chat.v1.StreamEvent.reaction_updated:type_name -> protocol.chat.v1.StreamEvent.ReactionUpdated - 32, // 32: protocol.chat.v1.StreamEvent.owner_added:type_name -> protocol.chat.v1.StreamEvent.OwnerAdded - 33, // 33: protocol.chat.v1.StreamEvent.owner_removed:type_name -> protocol.chat.v1.StreamEvent.OwnerRemoved - 34, // 34: protocol.chat.v1.StreamEvent.invite_received:type_name -> protocol.chat.v1.StreamEvent.InviteReceived - 35, // 35: protocol.chat.v1.StreamEvent.invite_rejected:type_name -> protocol.chat.v1.StreamEvent.InviteRejected - 38, // 36: protocol.chat.v1.StreamEvent.MessageSent.message:type_name -> protocol.chat.v1.Message - 39, // 37: protocol.chat.v1.StreamEvent.MessageUpdated.new_content:type_name -> protocol.chat.v1.FormattedText - 40, // 38: protocol.chat.v1.StreamEvent.ChannelCreated.position:type_name -> protocol.harmonytypes.v1.ItemPosition - 41, // 39: protocol.chat.v1.StreamEvent.ChannelCreated.kind:type_name -> protocol.chat.v1.ChannelKind - 42, // 40: protocol.chat.v1.StreamEvent.ChannelCreated.metadata:type_name -> protocol.harmonytypes.v1.Metadata - 42, // 41: protocol.chat.v1.StreamEvent.ChannelUpdated.new_metadata:type_name -> protocol.harmonytypes.v1.Metadata - 40, // 42: protocol.chat.v1.StreamEvent.ChannelPositionUpdated.new_position:type_name -> protocol.harmonytypes.v1.ItemPosition - 42, // 43: protocol.chat.v1.StreamEvent.GuildUpdated.new_metadata:type_name -> protocol.harmonytypes.v1.Metadata - 43, // 44: protocol.chat.v1.StreamEvent.MemberLeft.leave_reason:type_name -> protocol.chat.v1.LeaveReason - 44, // 45: protocol.chat.v1.StreamEvent.ActionPerformed.payload:type_name -> protocol.chat.v1.ActionPayload - 40, // 46: protocol.chat.v1.StreamEvent.RoleMoved.new_position:type_name -> protocol.harmonytypes.v1.ItemPosition - 45, // 47: protocol.chat.v1.StreamEvent.RolePermissionsUpdated.new_perms:type_name -> protocol.chat.v1.Permission - 46, // 48: protocol.chat.v1.StreamEvent.ReactionUpdated.reaction:type_name -> protocol.chat.v1.Reaction - 49, // [49:49] is the sub-list for method output_type - 49, // [49:49] is the sub-list for method input_type - 49, // [49:49] is the sub-list for extension type_name - 49, // [49:49] is the sub-list for extension extendee - 0, // [0:49] is the sub-list for field type_name + 6, // 3: protocol.chat.v1.StreamEventsRequest.unsubscribe_from_all:type_name -> protocol.chat.v1.StreamEventsRequest.UnsubscribeFromAll + 2, // 4: protocol.chat.v1.StreamEventsResponse.chat:type_name -> protocol.chat.v1.StreamEvent + 37, // 5: protocol.chat.v1.StreamEventsResponse.emote:type_name -> protocol.emote.v1.StreamEvent + 38, // 6: protocol.chat.v1.StreamEventsResponse.profile:type_name -> protocol.profile.v1.StreamEvent + 19, // 7: protocol.chat.v1.StreamEvent.guild_added_to_list:type_name -> protocol.chat.v1.StreamEvent.GuildAddedToList + 20, // 8: protocol.chat.v1.StreamEvent.guild_removed_from_list:type_name -> protocol.chat.v1.StreamEvent.GuildRemovedFromList + 21, // 9: protocol.chat.v1.StreamEvent.action_performed:type_name -> protocol.chat.v1.StreamEvent.ActionPerformed + 7, // 10: protocol.chat.v1.StreamEvent.sent_message:type_name -> protocol.chat.v1.StreamEvent.MessageSent + 8, // 11: protocol.chat.v1.StreamEvent.edited_message:type_name -> protocol.chat.v1.StreamEvent.MessageUpdated + 9, // 12: protocol.chat.v1.StreamEvent.deleted_message:type_name -> protocol.chat.v1.StreamEvent.MessageDeleted + 10, // 13: protocol.chat.v1.StreamEvent.created_channel:type_name -> protocol.chat.v1.StreamEvent.ChannelCreated + 11, // 14: protocol.chat.v1.StreamEvent.edited_channel:type_name -> protocol.chat.v1.StreamEvent.ChannelUpdated + 14, // 15: protocol.chat.v1.StreamEvent.deleted_channel:type_name -> protocol.chat.v1.StreamEvent.ChannelDeleted + 15, // 16: protocol.chat.v1.StreamEvent.edited_guild:type_name -> protocol.chat.v1.StreamEvent.GuildUpdated + 16, // 17: protocol.chat.v1.StreamEvent.deleted_guild:type_name -> protocol.chat.v1.StreamEvent.GuildDeleted + 17, // 18: protocol.chat.v1.StreamEvent.joined_member:type_name -> protocol.chat.v1.StreamEvent.MemberJoined + 18, // 19: protocol.chat.v1.StreamEvent.left_member:type_name -> protocol.chat.v1.StreamEvent.MemberLeft + 28, // 20: protocol.chat.v1.StreamEvent.typing:type_name -> protocol.chat.v1.StreamEvent.Typing + 24, // 21: protocol.chat.v1.StreamEvent.role_created:type_name -> protocol.chat.v1.StreamEvent.RoleCreated + 23, // 22: protocol.chat.v1.StreamEvent.role_deleted:type_name -> protocol.chat.v1.StreamEvent.RoleDeleted + 22, // 23: protocol.chat.v1.StreamEvent.role_moved:type_name -> protocol.chat.v1.StreamEvent.RoleMoved + 25, // 24: protocol.chat.v1.StreamEvent.role_updated:type_name -> protocol.chat.v1.StreamEvent.RoleUpdated + 26, // 25: protocol.chat.v1.StreamEvent.role_perms_updated:type_name -> protocol.chat.v1.StreamEvent.RolePermissionsUpdated + 27, // 26: protocol.chat.v1.StreamEvent.user_roles_updated:type_name -> protocol.chat.v1.StreamEvent.UserRolesUpdated + 29, // 27: protocol.chat.v1.StreamEvent.permission_updated:type_name -> protocol.chat.v1.StreamEvent.PermissionUpdated + 13, // 28: protocol.chat.v1.StreamEvent.channels_reordered:type_name -> protocol.chat.v1.StreamEvent.ChannelsReordered + 12, // 29: protocol.chat.v1.StreamEvent.edited_channel_position:type_name -> protocol.chat.v1.StreamEvent.ChannelPositionUpdated + 30, // 30: protocol.chat.v1.StreamEvent.message_pinned:type_name -> protocol.chat.v1.StreamEvent.MessagePinned + 31, // 31: protocol.chat.v1.StreamEvent.message_unpinned:type_name -> protocol.chat.v1.StreamEvent.MessageUnpinned + 32, // 32: protocol.chat.v1.StreamEvent.reaction_updated:type_name -> protocol.chat.v1.StreamEvent.ReactionUpdated + 33, // 33: protocol.chat.v1.StreamEvent.owner_added:type_name -> protocol.chat.v1.StreamEvent.OwnerAdded + 34, // 34: protocol.chat.v1.StreamEvent.owner_removed:type_name -> protocol.chat.v1.StreamEvent.OwnerRemoved + 35, // 35: protocol.chat.v1.StreamEvent.invite_received:type_name -> protocol.chat.v1.StreamEvent.InviteReceived + 36, // 36: protocol.chat.v1.StreamEvent.invite_rejected:type_name -> protocol.chat.v1.StreamEvent.InviteRejected + 39, // 37: protocol.chat.v1.StreamEvent.MessageSent.message:type_name -> protocol.chat.v1.Message + 40, // 38: protocol.chat.v1.StreamEvent.MessageUpdated.new_content:type_name -> protocol.chat.v1.FormattedText + 41, // 39: protocol.chat.v1.StreamEvent.ChannelCreated.position:type_name -> protocol.harmonytypes.v1.ItemPosition + 42, // 40: protocol.chat.v1.StreamEvent.ChannelCreated.kind:type_name -> protocol.chat.v1.ChannelKind + 43, // 41: protocol.chat.v1.StreamEvent.ChannelCreated.metadata:type_name -> protocol.harmonytypes.v1.Metadata + 43, // 42: protocol.chat.v1.StreamEvent.ChannelUpdated.new_metadata:type_name -> protocol.harmonytypes.v1.Metadata + 41, // 43: protocol.chat.v1.StreamEvent.ChannelPositionUpdated.new_position:type_name -> protocol.harmonytypes.v1.ItemPosition + 43, // 44: protocol.chat.v1.StreamEvent.GuildUpdated.new_metadata:type_name -> protocol.harmonytypes.v1.Metadata + 44, // 45: protocol.chat.v1.StreamEvent.MemberLeft.leave_reason:type_name -> protocol.chat.v1.LeaveReason + 45, // 46: protocol.chat.v1.StreamEvent.ActionPerformed.payload:type_name -> protocol.chat.v1.ActionPayload + 41, // 47: protocol.chat.v1.StreamEvent.RoleMoved.new_position:type_name -> protocol.harmonytypes.v1.ItemPosition + 46, // 48: protocol.chat.v1.StreamEvent.RolePermissionsUpdated.new_perms:type_name -> protocol.chat.v1.Permission + 47, // 49: protocol.chat.v1.StreamEvent.ReactionUpdated.reaction:type_name -> protocol.chat.v1.Reaction + 50, // [50:50] is the sub-list for method output_type + 50, // [50:50] is the sub-list for method input_type + 50, // [50:50] is the sub-list for extension type_name + 50, // [50:50] is the sub-list for extension extendee + 0, // [0:50] is the sub-list for field type_name } func init() { file_chat_v1_stream_proto_init() } @@ -3649,7 +3716,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[6].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_MessageSent); i { + switch v := v.(*StreamEventsRequest_UnsubscribeFromAll); i { case 0: return &v.state case 1: @@ -3661,7 +3728,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[7].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_MessageUpdated); i { + switch v := v.(*StreamEvent_MessageSent); i { case 0: return &v.state case 1: @@ -3673,7 +3740,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[8].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_MessageDeleted); i { + switch v := v.(*StreamEvent_MessageUpdated); i { case 0: return &v.state case 1: @@ -3685,7 +3752,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[9].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_ChannelCreated); i { + switch v := v.(*StreamEvent_MessageDeleted); i { case 0: return &v.state case 1: @@ -3697,7 +3764,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[10].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_ChannelUpdated); i { + switch v := v.(*StreamEvent_ChannelCreated); i { case 0: return &v.state case 1: @@ -3709,7 +3776,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[11].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_ChannelPositionUpdated); i { + switch v := v.(*StreamEvent_ChannelUpdated); i { case 0: return &v.state case 1: @@ -3721,7 +3788,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[12].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_ChannelsReordered); i { + switch v := v.(*StreamEvent_ChannelPositionUpdated); i { case 0: return &v.state case 1: @@ -3733,7 +3800,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[13].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_ChannelDeleted); i { + switch v := v.(*StreamEvent_ChannelsReordered); i { case 0: return &v.state case 1: @@ -3745,7 +3812,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[14].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_GuildUpdated); i { + switch v := v.(*StreamEvent_ChannelDeleted); i { case 0: return &v.state case 1: @@ -3757,7 +3824,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[15].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_GuildDeleted); i { + switch v := v.(*StreamEvent_GuildUpdated); i { case 0: return &v.state case 1: @@ -3769,7 +3836,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[16].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_MemberJoined); i { + switch v := v.(*StreamEvent_GuildDeleted); i { case 0: return &v.state case 1: @@ -3781,7 +3848,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[17].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_MemberLeft); i { + switch v := v.(*StreamEvent_MemberJoined); i { case 0: return &v.state case 1: @@ -3793,7 +3860,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[18].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_GuildAddedToList); i { + switch v := v.(*StreamEvent_MemberLeft); i { case 0: return &v.state case 1: @@ -3805,7 +3872,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[19].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_GuildRemovedFromList); i { + switch v := v.(*StreamEvent_GuildAddedToList); i { case 0: return &v.state case 1: @@ -3817,7 +3884,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[20].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_ActionPerformed); i { + switch v := v.(*StreamEvent_GuildRemovedFromList); i { case 0: return &v.state case 1: @@ -3829,7 +3896,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[21].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_RoleMoved); i { + switch v := v.(*StreamEvent_ActionPerformed); i { case 0: return &v.state case 1: @@ -3841,7 +3908,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[22].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_RoleDeleted); i { + switch v := v.(*StreamEvent_RoleMoved); i { case 0: return &v.state case 1: @@ -3853,7 +3920,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[23].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_RoleCreated); i { + switch v := v.(*StreamEvent_RoleDeleted); i { case 0: return &v.state case 1: @@ -3865,7 +3932,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[24].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_RoleUpdated); i { + switch v := v.(*StreamEvent_RoleCreated); i { case 0: return &v.state case 1: @@ -3877,7 +3944,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[25].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_RolePermissionsUpdated); i { + switch v := v.(*StreamEvent_RoleUpdated); i { case 0: return &v.state case 1: @@ -3889,7 +3956,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[26].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_UserRolesUpdated); i { + switch v := v.(*StreamEvent_RolePermissionsUpdated); i { case 0: return &v.state case 1: @@ -3901,7 +3968,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[27].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_Typing); i { + switch v := v.(*StreamEvent_UserRolesUpdated); i { case 0: return &v.state case 1: @@ -3913,7 +3980,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[28].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_PermissionUpdated); i { + switch v := v.(*StreamEvent_Typing); i { case 0: return &v.state case 1: @@ -3925,7 +3992,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[29].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_MessagePinned); i { + switch v := v.(*StreamEvent_PermissionUpdated); i { case 0: return &v.state case 1: @@ -3937,7 +4004,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[30].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_MessageUnpinned); i { + switch v := v.(*StreamEvent_MessagePinned); i { case 0: return &v.state case 1: @@ -3949,7 +4016,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[31].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_ReactionUpdated); i { + switch v := v.(*StreamEvent_MessageUnpinned); i { case 0: return &v.state case 1: @@ -3961,7 +4028,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[32].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_OwnerAdded); i { + switch v := v.(*StreamEvent_ReactionUpdated); i { case 0: return &v.state case 1: @@ -3973,7 +4040,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[33].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_OwnerRemoved); i { + switch v := v.(*StreamEvent_OwnerAdded); i { case 0: return &v.state case 1: @@ -3985,7 +4052,7 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[34].Exporter = func(v interface{}, i int) interface{} { - switch v := v.(*StreamEvent_InviteReceived); i { + switch v := v.(*StreamEvent_OwnerRemoved); i { case 0: return &v.state case 1: @@ -3997,6 +4064,18 @@ func file_chat_v1_stream_proto_init() { } } file_chat_v1_stream_proto_msgTypes[35].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*StreamEvent_InviteReceived); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_chat_v1_stream_proto_msgTypes[36].Exporter = func(v interface{}, i int) interface{} { switch v := v.(*StreamEvent_InviteRejected); i { case 0: return &v.state @@ -4013,6 +4092,7 @@ func file_chat_v1_stream_proto_init() { (*StreamEventsRequest_SubscribeToGuild_)(nil), (*StreamEventsRequest_SubscribeToActions_)(nil), (*StreamEventsRequest_SubscribeToHomeserverEvents_)(nil), + (*StreamEventsRequest_UnsubscribeFromAll_)(nil), } file_chat_v1_stream_proto_msgTypes[1].OneofWrappers = []interface{}{ (*StreamEventsResponse_Chat)(nil), @@ -4051,22 +4131,22 @@ func file_chat_v1_stream_proto_init() { (*StreamEvent_InviteReceived_)(nil), (*StreamEvent_InviteRejected_)(nil), } - file_chat_v1_stream_proto_msgTypes[6].OneofWrappers = []interface{}{} - file_chat_v1_stream_proto_msgTypes[9].OneofWrappers = []interface{}{} + file_chat_v1_stream_proto_msgTypes[7].OneofWrappers = []interface{}{} file_chat_v1_stream_proto_msgTypes[10].OneofWrappers = []interface{}{} file_chat_v1_stream_proto_msgTypes[11].OneofWrappers = []interface{}{} - file_chat_v1_stream_proto_msgTypes[14].OneofWrappers = []interface{}{} - file_chat_v1_stream_proto_msgTypes[24].OneofWrappers = []interface{}{} + file_chat_v1_stream_proto_msgTypes[12].OneofWrappers = []interface{}{} + file_chat_v1_stream_proto_msgTypes[15].OneofWrappers = []interface{}{} file_chat_v1_stream_proto_msgTypes[25].OneofWrappers = []interface{}{} - file_chat_v1_stream_proto_msgTypes[28].OneofWrappers = []interface{}{} - file_chat_v1_stream_proto_msgTypes[34].OneofWrappers = []interface{}{} + file_chat_v1_stream_proto_msgTypes[26].OneofWrappers = []interface{}{} + file_chat_v1_stream_proto_msgTypes[29].OneofWrappers = []interface{}{} + file_chat_v1_stream_proto_msgTypes[35].OneofWrappers = []interface{}{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_chat_v1_stream_proto_rawDesc, NumEnums: 0, - NumMessages: 36, + NumMessages: 37, NumExtensions: 0, NumServices: 0, }, diff --git a/vendor/github.com/harmony-development/shibshib/gen/profile/v1/appdata.pb.go b/vendor/github.com/harmony-development/shibshib/gen/profile/v1/appdata.pb.go new file mode 100644 index 00000000..38d13d64 --- /dev/null +++ b/vendor/github.com/harmony-development/shibshib/gen/profile/v1/appdata.pb.go @@ -0,0 +1,400 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.23.0 +// protoc v3.17.3 +// source: profile/v1/appdata.proto + +package profilev1 + +import ( + proto "github.com/golang/protobuf/proto" + v1 "github.com/harmony-development/shibshib/gen/harmonytypes/v1" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + reflect "reflect" + sync "sync" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +// This is a compile-time assertion that a sufficiently up-to-date version +// of the legacy proto package is being used. +const _ = proto.ProtoPackageIsVersion4 + +// A tag for an override. This is used as a +// standard shorthand for sending a message with +// an override. If a message starts with before and +// ends with after, clients should send a message +// with the override the tag belongs to, stripping +// the tag indicators. +type OverrideTag struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The portion of the tag before the messge. + Before string `protobuf:"bytes,1,opt,name=before,proto3" json:"before,omitempty"` + // The portion of the tag after the messge. + After string `protobuf:"bytes,2,opt,name=after,proto3" json:"after,omitempty"` +} + +func (x *OverrideTag) Reset() { + *x = OverrideTag{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_v1_appdata_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *OverrideTag) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OverrideTag) ProtoMessage() {} + +func (x *OverrideTag) ProtoReflect() protoreflect.Message { + mi := &file_profile_v1_appdata_proto_msgTypes[0] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OverrideTag.ProtoReflect.Descriptor instead. +func (*OverrideTag) Descriptor() ([]byte, []int) { + return file_profile_v1_appdata_proto_rawDescGZIP(), []int{0} +} + +func (x *OverrideTag) GetBefore() string { + if x != nil { + return x.Before + } + return "" +} + +func (x *OverrideTag) GetAfter() string { + if x != nil { + return x.After + } + return "" +} + +// An individual override +type ProfileOverride struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The username for this override + Username *string `protobuf:"bytes,1,opt,name=username,proto3,oneof" json:"username,omitempty"` + // The avatar for this override + Avatar *string `protobuf:"bytes,2,opt,name=avatar,proto3,oneof" json:"avatar,omitempty"` + // The tags for this override. + Tags []*OverrideTag `protobuf:"bytes,3,rep,name=tags,proto3" json:"tags,omitempty"` + // The reason this override is used + // + // Types that are assignable to Reason: + // *ProfileOverride_UserDefined + // *ProfileOverride_SystemPlurality + Reason isProfileOverride_Reason `protobuf_oneof:"reason"` +} + +func (x *ProfileOverride) Reset() { + *x = ProfileOverride{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_v1_appdata_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *ProfileOverride) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProfileOverride) ProtoMessage() {} + +func (x *ProfileOverride) ProtoReflect() protoreflect.Message { + mi := &file_profile_v1_appdata_proto_msgTypes[1] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProfileOverride.ProtoReflect.Descriptor instead. +func (*ProfileOverride) Descriptor() ([]byte, []int) { + return file_profile_v1_appdata_proto_rawDescGZIP(), []int{1} +} + +func (x *ProfileOverride) GetUsername() string { + if x != nil && x.Username != nil { + return *x.Username + } + return "" +} + +func (x *ProfileOverride) GetAvatar() string { + if x != nil && x.Avatar != nil { + return *x.Avatar + } + return "" +} + +func (x *ProfileOverride) GetTags() []*OverrideTag { + if x != nil { + return x.Tags + } + return nil +} + +func (m *ProfileOverride) GetReason() isProfileOverride_Reason { + if m != nil { + return m.Reason + } + return nil +} + +func (x *ProfileOverride) GetUserDefined() string { + if x, ok := x.GetReason().(*ProfileOverride_UserDefined); ok { + return x.UserDefined + } + return "" +} + +func (x *ProfileOverride) GetSystemPlurality() *v1.Empty { + if x, ok := x.GetReason().(*ProfileOverride_SystemPlurality); ok { + return x.SystemPlurality + } + return nil +} + +type isProfileOverride_Reason interface { + isProfileOverride_Reason() +} + +type ProfileOverride_UserDefined struct { + // a custom reason in case the builtin ones don't fit + UserDefined string `protobuf:"bytes,4,opt,name=user_defined,json=userDefined,proto3,oneof"` +} + +type ProfileOverride_SystemPlurality struct { + // plurality, not system as in computer + SystemPlurality *v1.Empty `protobuf:"bytes,5,opt,name=system_plurality,json=systemPlurality,proto3,oneof"` +} + +func (*ProfileOverride_UserDefined) isProfileOverride_Reason() {} + +func (*ProfileOverride_SystemPlurality) isProfileOverride_Reason() {} + +// The message used for the 'h.overrides' key +// of appdata. +type AppDataOverrides struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + // The list of overrides. + Overrides []*ProfileOverride `protobuf:"bytes,1,rep,name=overrides,proto3" json:"overrides,omitempty"` +} + +func (x *AppDataOverrides) Reset() { + *x = AppDataOverrides{} + if protoimpl.UnsafeEnabled { + mi := &file_profile_v1_appdata_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *AppDataOverrides) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppDataOverrides) ProtoMessage() {} + +func (x *AppDataOverrides) ProtoReflect() protoreflect.Message { + mi := &file_profile_v1_appdata_proto_msgTypes[2] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AppDataOverrides.ProtoReflect.Descriptor instead. +func (*AppDataOverrides) Descriptor() ([]byte, []int) { + return file_profile_v1_appdata_proto_rawDescGZIP(), []int{2} +} + +func (x *AppDataOverrides) GetOverrides() []*ProfileOverride { + if x != nil { + return x.Overrides + } + return nil +} + +var File_profile_v1_appdata_proto protoreflect.FileDescriptor + +var file_profile_v1_appdata_proto_rawDesc = []byte{ + 0x0a, 0x18, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, 0x76, 0x31, 0x2f, 0x61, 0x70, 0x70, + 0x64, 0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x13, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x1a, + 0x1b, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x76, 0x31, + 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x3b, 0x0a, 0x0b, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x61, 0x67, 0x12, 0x16, 0x0a, 0x06, 0x62, + 0x65, 0x66, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x62, 0x65, 0x66, + 0x6f, 0x72, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x05, 0x61, 0x66, 0x74, 0x65, 0x72, 0x22, 0x9a, 0x02, 0x0a, 0x0f, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x12, 0x1f, 0x0a, + 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x48, + 0x01, 0x52, 0x08, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x88, 0x01, 0x01, 0x12, 0x1b, + 0x0a, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x48, 0x02, + 0x52, 0x06, 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x88, 0x01, 0x01, 0x12, 0x34, 0x0a, 0x04, 0x74, + 0x61, 0x67, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x70, 0x72, 0x6f, 0x74, + 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x2e, + 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x54, 0x61, 0x67, 0x52, 0x04, 0x74, 0x61, 0x67, + 0x73, 0x12, 0x23, 0x0a, 0x0c, 0x75, 0x73, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, + 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x48, 0x00, 0x52, 0x0b, 0x75, 0x73, 0x65, 0x72, 0x44, + 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x12, 0x4c, 0x0a, 0x10, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, + 0x5f, 0x70, 0x6c, 0x75, 0x72, 0x61, 0x6c, 0x69, 0x74, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x1f, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x68, 0x61, 0x72, 0x6d, + 0x6f, 0x6e, 0x79, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2e, 0x76, 0x31, 0x2e, 0x45, 0x6d, 0x70, 0x74, + 0x79, 0x48, 0x00, 0x52, 0x0f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x50, 0x6c, 0x75, 0x72, 0x61, + 0x6c, 0x69, 0x74, 0x79, 0x42, 0x08, 0x0a, 0x06, 0x72, 0x65, 0x61, 0x73, 0x6f, 0x6e, 0x42, 0x0b, + 0x0a, 0x09, 0x5f, 0x75, 0x73, 0x65, 0x72, 0x6e, 0x61, 0x6d, 0x65, 0x42, 0x09, 0x0a, 0x07, 0x5f, + 0x61, 0x76, 0x61, 0x74, 0x61, 0x72, 0x22, 0x56, 0x0a, 0x10, 0x41, 0x70, 0x70, 0x44, 0x61, 0x74, + 0x61, 0x4f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x09, 0x6f, 0x76, + 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, + 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, + 0x2e, 0x76, 0x31, 0x2e, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x4f, 0x76, 0x65, 0x72, 0x72, + 0x69, 0x64, 0x65, 0x52, 0x09, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x65, 0x73, 0x42, 0xd7, + 0x01, 0x0a, 0x17, 0x63, 0x6f, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, + 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x76, 0x31, 0x42, 0x0c, 0x41, 0x70, 0x70, 0x64, + 0x61, 0x74, 0x61, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x40, 0x67, 0x69, 0x74, 0x68, + 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x68, 0x61, 0x72, 0x6d, 0x6f, 0x6e, 0x79, 0x2d, 0x64, + 0x65, 0x76, 0x65, 0x6c, 0x6f, 0x70, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x73, 0x68, 0x69, 0x62, 0x73, + 0x68, 0x69, 0x62, 0x2f, 0x67, 0x65, 0x6e, 0x2f, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2f, + 0x76, 0x31, 0x3b, 0x70, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x76, 0x31, 0xa2, 0x02, 0x03, 0x50, + 0x50, 0x58, 0xaa, 0x02, 0x13, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x2e, 0x50, 0x72, + 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x2e, 0x56, 0x31, 0xca, 0x02, 0x13, 0x50, 0x72, 0x6f, 0x74, 0x6f, + 0x63, 0x6f, 0x6c, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, 0x65, 0x5c, 0x56, 0x31, 0xe2, 0x02, + 0x1f, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x5c, 0x50, 0x72, 0x6f, 0x66, 0x69, 0x6c, + 0x65, 0x5c, 0x56, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, + 0xea, 0x02, 0x15, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x63, 0x6f, 0x6c, 0x3a, 0x3a, 0x50, 0x72, 0x6f, + 0x66, 0x69, 0x6c, 0x65, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, +} + +var ( + file_profile_v1_appdata_proto_rawDescOnce sync.Once + file_profile_v1_appdata_proto_rawDescData = file_profile_v1_appdata_proto_rawDesc +) + +func file_profile_v1_appdata_proto_rawDescGZIP() []byte { + file_profile_v1_appdata_proto_rawDescOnce.Do(func() { + file_profile_v1_appdata_proto_rawDescData = protoimpl.X.CompressGZIP(file_profile_v1_appdata_proto_rawDescData) + }) + return file_profile_v1_appdata_proto_rawDescData +} + +var file_profile_v1_appdata_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_profile_v1_appdata_proto_goTypes = []interface{}{ + (*OverrideTag)(nil), // 0: protocol.profile.v1.OverrideTag + (*ProfileOverride)(nil), // 1: protocol.profile.v1.ProfileOverride + (*AppDataOverrides)(nil), // 2: protocol.profile.v1.AppDataOverrides + (*v1.Empty)(nil), // 3: protocol.harmonytypes.v1.Empty +} +var file_profile_v1_appdata_proto_depIdxs = []int32{ + 0, // 0: protocol.profile.v1.ProfileOverride.tags:type_name -> protocol.profile.v1.OverrideTag + 3, // 1: protocol.profile.v1.ProfileOverride.system_plurality:type_name -> protocol.harmonytypes.v1.Empty + 1, // 2: protocol.profile.v1.AppDataOverrides.overrides:type_name -> protocol.profile.v1.ProfileOverride + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_profile_v1_appdata_proto_init() } +func file_profile_v1_appdata_proto_init() { + if File_profile_v1_appdata_proto != nil { + return + } + if !protoimpl.UnsafeEnabled { + file_profile_v1_appdata_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*OverrideTag); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_v1_appdata_proto_msgTypes[1].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*ProfileOverride); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_profile_v1_appdata_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*AppDataOverrides); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + } + file_profile_v1_appdata_proto_msgTypes[1].OneofWrappers = []interface{}{ + (*ProfileOverride_UserDefined)(nil), + (*ProfileOverride_SystemPlurality)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: file_profile_v1_appdata_proto_rawDesc, + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_profile_v1_appdata_proto_goTypes, + DependencyIndexes: file_profile_v1_appdata_proto_depIdxs, + MessageInfos: file_profile_v1_appdata_proto_msgTypes, + }.Build() + File_profile_v1_appdata_proto = out.File + file_profile_v1_appdata_proto_rawDesc = nil + file_profile_v1_appdata_proto_goTypes = nil + file_profile_v1_appdata_proto_depIdxs = nil +} diff --git a/vendor/github.com/kyokomi/emoji/v2/emoji_codemap.go b/vendor/github.com/kyokomi/emoji/v2/emoji_codemap.go index 9a9d73b0..65b6a05f 100644 --- a/vendor/github.com/kyokomi/emoji/v2/emoji_codemap.go +++ b/vendor/github.com/kyokomi/emoji/v2/emoji_codemap.go @@ -253,6 +253,7 @@ func emojiCode() map[string]string { ":beach_umbrella:": "\u26f1", ":beach_with_umbrella:": "\U0001f3d6\ufe0f", ":beaming_face_with_smiling_eyes:": "\U0001f601", + ":beans:": "\U0001fad8", ":bear:": "\U0001f43b", ":bearded_person:": "\U0001f9d4", ":bearded_person_tone1:": "\U0001f9d4\U0001f3fb", @@ -296,6 +297,7 @@ func emojiCode() map[string]string { ":birthday:": "\U0001f382", ":birthday_cake:": "\U0001f382", ":bison:": "\U0001f9ac", + ":biting_lip:": "\U0001fae6", ":black_cat:": "\U0001f408\u200d\u2b1b", ":black_circle:": "\u26ab", ":black_circle_for_record:": "\u23fa\ufe0f", @@ -410,6 +412,7 @@ func emojiCode() map[string]string { ":brown_square:": "\U0001f7eb", ":brunei:": "\U0001f1e7\U0001f1f3", ":bubble_tea:": "\U0001f9cb", + ":bubbles:": "\U0001fae7", ":bucket:": "\U0001faa3", ":bug:": "\U0001f41b", ":building_construction:": "\U0001f3d7\ufe0f", @@ -639,6 +642,7 @@ func emojiCode() map[string]string { ":cool:": "\U0001f192", ":cop:": "\U0001f46e\u200d\u2642\ufe0f", ":copyright:": "\u00a9\ufe0f", + ":coral:": "\U0001fab8", ":corn:": "\U0001f33d", ":costa_rica:": "\U0001f1e8\U0001f1f7", ":cote_divoire:": "\U0001f1e8\U0001f1ee", @@ -647,12 +651,12 @@ func emojiCode() map[string]string { ":counterclockwise_arrows_button:": "\U0001f504", ":couple:": "\U0001f46b", ":couple_mm:": "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468", - ":couple_with_heart:": "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468", + ":couple_with_heart:": "\U0001f491", ":couple_with_heart_man_man:": "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f468", ":couple_with_heart_woman_man:": "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468", ":couple_with_heart_woman_woman:": "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469", ":couple_ww:": "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469", - ":couplekiss:": "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468", + ":couplekiss:": "\U0001f48f", ":couplekiss_man_man:": "\U0001f468\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468", ":couplekiss_man_woman:": "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468", ":couplekiss_woman_woman:": "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469", @@ -680,6 +684,7 @@ func emojiCode() map[string]string { ":crossed_swords:": "\u2694\ufe0f", ":crown:": "\U0001f451", ":cruise_ship:": "\U0001f6f3", + ":crutch:": "\U0001fa7c", ":cry:": "\U0001f622", ":crying_cat:": "\U0001f63f", ":crying_cat_face:": "\U0001f63f", @@ -775,6 +780,7 @@ func emojiCode() map[string]string { ":dominica:": "\U0001f1e9\U0001f1f2", ":dominican_republic:": "\U0001f1e9\U0001f1f4", ":door:": "\U0001f6aa", + ":dotted_line_face:": "\U0001fae5", ":dotted_six-pointed_star:": "\U0001f52f", ":double_curly_loop:": "\u27bf", ":double_exclamation_mark:": "\u203c", @@ -841,6 +847,7 @@ func emojiCode() map[string]string { ":elf_tone5:": "\U0001f9dd\U0001f3ff", ":elf_woman:": "\U0001f9dd\u200d\u2640\ufe0f", ":email:": "\u2709\ufe0f", + ":empty_nest:": "\U0001fab9", ":end:": "\U0001f51a", ":england:": "\U0001f3f4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", ":envelope:": "\u2709", @@ -871,630 +878,635 @@ func emojiCode() map[string]string { ":eyes:": "\U0001f440", ":face_blowing_a_kiss:": "\U0001f618", ":face_exhaling:": "\U0001f62e\u200d\U0001f4a8", + ":face_holding_back_tears:": "\U0001f979", ":face_in_clouds:": "\U0001f636\u200d\U0001f32b\ufe0f", ":face_palm:": "\U0001f926", ":face_savoring_food:": "\U0001f60b", ":face_screaming_in_fear:": "\U0001f631", ":face_vomiting:": "\U0001f92e", ":face_with_cowboy_hat:": "\U0001f920", + ":face_with_crossed-out_eyes:": "\U0001f635", + ":face_with_diagonal_mouth:": "\U0001fae4", ":face_with_hand_over_mouth:": "\U0001f92d", ":face_with_head-bandage:": "\U0001f915", ":face_with_head_bandage:": "\U0001f915", ":face_with_medical_mask:": "\U0001f637", ":face_with_monocle:": "\U0001f9d0", - ":face_with_open_mouth:": "\U0001f62e", - ":face_with_raised_eyebrow:": "\U0001f928", - ":face_with_rolling_eyes:": "\U0001f644", - ":face_with_spiral_eyes:": "\U0001f635\u200d\U0001f4ab", - ":face_with_steam_from_nose:": "\U0001f624", - ":face_with_symbols_on_mouth:": "\U0001f92c", - ":face_with_symbols_over_mouth:": "\U0001f92c", - ":face_with_tears_of_joy:": "\U0001f602", - ":face_with_thermometer:": "\U0001f912", - ":face_with_tongue:": "\U0001f61b", - ":face_without_mouth:": "\U0001f636", - ":facepalm:": "\U0001f926", - ":facepunch:": "\U0001f44a", - ":factory:": "\U0001f3ed", - ":factory_worker:": "\U0001f9d1\u200d\U0001f3ed", - ":fairy:": "\U0001f9da\u200d\u2640\ufe0f", - ":fairy_man:": "\U0001f9da\u200d\u2642\ufe0f", - ":fairy_tone1:": "\U0001f9da\U0001f3fb", - ":fairy_tone2:": "\U0001f9da\U0001f3fc", - ":fairy_tone3:": "\U0001f9da\U0001f3fd", - ":fairy_tone4:": "\U0001f9da\U0001f3fe", - ":fairy_tone5:": "\U0001f9da\U0001f3ff", - ":fairy_woman:": "\U0001f9da\u200d\u2640\ufe0f", - ":falafel:": "\U0001f9c6", - ":falkland_islands:": "\U0001f1eb\U0001f1f0", - ":fallen_leaf:": "\U0001f342", - ":family:": "\U0001f468\u200d\U0001f469\u200d\U0001f466", - ":family_man_boy:": "\U0001f468\u200d\U0001f466", - ":family_man_boy_boy:": "\U0001f468\u200d\U0001f466\u200d\U0001f466", - ":family_man_girl:": "\U0001f468\u200d\U0001f467", - ":family_man_girl_boy:": "\U0001f468\u200d\U0001f467\u200d\U0001f466", - ":family_man_girl_girl:": "\U0001f468\u200d\U0001f467\u200d\U0001f467", - ":family_man_man_boy:": "\U0001f468\u200d\U0001f468\u200d\U0001f466", - ":family_man_man_boy_boy:": "\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f466", - ":family_man_man_girl:": "\U0001f468\u200d\U0001f468\u200d\U0001f467", - ":family_man_man_girl_boy:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f466", - ":family_man_man_girl_girl:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f467", - ":family_man_woman_boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f466", - ":family_man_woman_boy_boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", - ":family_man_woman_girl:": "\U0001f468\u200d\U0001f469\u200d\U0001f467", - ":family_man_woman_girl_boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", - ":family_man_woman_girl_girl:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", - ":family_mmb:": "\U0001f468\u200d\U0001f468\u200d\U0001f466", - ":family_mmbb:": "\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f466", - ":family_mmg:": "\U0001f468\u200d\U0001f468\u200d\U0001f467", - ":family_mmgb:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f466", - ":family_mmgg:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f467", - ":family_mwbb:": "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", - ":family_mwg:": "\U0001f468\u200d\U0001f469\u200d\U0001f467", - ":family_mwgb:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", - ":family_mwgg:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", - ":family_woman_boy:": "\U0001f469\u200d\U0001f466", - ":family_woman_boy_boy:": "\U0001f469\u200d\U0001f466\u200d\U0001f466", - ":family_woman_girl:": "\U0001f469\u200d\U0001f467", - ":family_woman_girl_boy:": "\U0001f469\u200d\U0001f467\u200d\U0001f466", - ":family_woman_girl_girl:": "\U0001f469\u200d\U0001f467\u200d\U0001f467", - ":family_woman_woman_boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f466", - ":family_woman_woman_boy_boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", - ":family_woman_woman_girl:": "\U0001f469\u200d\U0001f469\u200d\U0001f467", - ":family_woman_woman_girl_boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", - ":family_woman_woman_girl_girl:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", - ":family_wwb:": "\U0001f469\u200d\U0001f469\u200d\U0001f466", - ":family_wwbb:": "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", - ":family_wwg:": "\U0001f469\u200d\U0001f469\u200d\U0001f467", - ":family_wwgb:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", - ":family_wwgg:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", - ":farmer:": "\U0001f9d1\u200d\U0001f33e", - ":faroe_islands:": "\U0001f1eb\U0001f1f4", - ":fast-forward_button:": "\u23e9", - ":fast_down_button:": "\u23ec", - ":fast_forward:": "\u23e9", - ":fast_reverse_button:": "\u23ea", - ":fast_up_button:": "\u23eb", - ":fax:": "\U0001f4e0", - ":fax_machine:": "\U0001f4e0", - ":fearful:": "\U0001f628", - ":fearful_face:": "\U0001f628", - ":feather:": "\U0001fab6", - ":feet:": "\U0001f43e", - ":female-artist:": "\U0001f469\u200d\U0001f3a8", - ":female-astronaut:": "\U0001f469\u200d\U0001f680", - ":female-construction-worker:": "\U0001f477\u200d\u2640\ufe0f", - ":female-cook:": "\U0001f469\u200d\U0001f373", - ":female-detective:": "\U0001f575\ufe0f\u200d\u2640\ufe0f", - ":female-doctor:": "\U0001f469\u200d\u2695\ufe0f", - ":female-factory-worker:": "\U0001f469\u200d\U0001f3ed", - ":female-farmer:": "\U0001f469\u200d\U0001f33e", - ":female-firefighter:": "\U0001f469\u200d\U0001f692", - ":female-guard:": "\U0001f482\u200d\u2640\ufe0f", - ":female-judge:": "\U0001f469\u200d\u2696\ufe0f", - ":female-mechanic:": "\U0001f469\u200d\U0001f527", - ":female-office-worker:": "\U0001f469\u200d\U0001f4bc", - ":female-pilot:": "\U0001f469\u200d\u2708\ufe0f", - ":female-police-officer:": "\U0001f46e\u200d\u2640\ufe0f", - ":female-scientist:": "\U0001f469\u200d\U0001f52c", - ":female-singer:": "\U0001f469\u200d\U0001f3a4", - ":female-student:": "\U0001f469\u200d\U0001f393", - ":female-teacher:": "\U0001f469\u200d\U0001f3eb", - ":female-technologist:": "\U0001f469\u200d\U0001f4bb", - ":female_detective:": "\U0001f575\ufe0f\u200d\u2640\ufe0f", - ":female_elf:": "\U0001f9dd\u200d\u2640\ufe0f", - ":female_fairy:": "\U0001f9da\u200d\u2640\ufe0f", - ":female_genie:": "\U0001f9de\u200d\u2640\ufe0f", - ":female_mage:": "\U0001f9d9\u200d\u2640\ufe0f", - ":female_sign:": "\u2640\ufe0f", - ":female_superhero:": "\U0001f9b8\u200d\u2640\ufe0f", - ":female_supervillain:": "\U0001f9b9\u200d\u2640\ufe0f", - ":female_vampire:": "\U0001f9db\u200d\u2640\ufe0f", - ":female_zombie:": "\U0001f9df\u200d\u2640\ufe0f", - ":fencer:": "\U0001f93a", - ":ferris_wheel:": "\U0001f3a1", - ":ferry:": "\u26f4\ufe0f", - ":field_hockey:": "\U0001f3d1", - ":field_hockey_stick_and_ball:": "\U0001f3d1", - ":fiji:": "\U0001f1eb\U0001f1ef", - ":file_cabinet:": "\U0001f5c4\ufe0f", - ":file_folder:": "\U0001f4c1", - ":film_frames:": "\U0001f39e\ufe0f", - ":film_projector:": "\U0001f4fd\ufe0f", - ":film_strip:": "\U0001f39e\ufe0f", - ":fingers_crossed:": "\U0001f91e", - ":fingers_crossed_tone1:": "\U0001f91e\U0001f3fb", - ":fingers_crossed_tone2:": "\U0001f91e\U0001f3fc", - ":fingers_crossed_tone3:": "\U0001f91e\U0001f3fd", - ":fingers_crossed_tone4:": "\U0001f91e\U0001f3fe", - ":fingers_crossed_tone5:": "\U0001f91e\U0001f3ff", - ":finland:": "\U0001f1eb\U0001f1ee", - ":fire:": "\U0001f525", - ":fire_engine:": "\U0001f692", - ":fire_extinguisher:": "\U0001f9ef", - ":firecracker:": "\U0001f9e8", - ":firefighter:": "\U0001f9d1\u200d\U0001f692", - ":fireworks:": "\U0001f386", - ":first_place:": "\U0001f947", - ":first_place_medal:": "\U0001f947", - ":first_quarter_moon:": "\U0001f313", - ":first_quarter_moon_face:": "\U0001f31b", - ":first_quarter_moon_with_face:": "\U0001f31b", - ":fish:": "\U0001f41f", - ":fish_cake:": "\U0001f365", - ":fish_cake_with_swirl:": "\U0001f365", - ":fishing_pole:": "\U0001f3a3", - ":fishing_pole_and_fish:": "\U0001f3a3", - ":fist:": "\u270a", - ":fist_left:": "\U0001f91b", - ":fist_oncoming:": "\U0001f44a", - ":fist_raised:": "\u270a", - ":fist_right:": "\U0001f91c", - ":fist_tone1:": "\u270a\U0001f3fb", - ":fist_tone2:": "\u270a\U0001f3fc", - ":fist_tone3:": "\u270a\U0001f3fd", - ":fist_tone4:": "\u270a\U0001f3fe", - ":fist_tone5:": "\u270a\U0001f3ff", - ":five:": "5\ufe0f\u20e3", - ":five-thirty:": "\U0001f560", - ":five_o’clock:": "\U0001f554", - ":flag-ac:": "\U0001f1e6\U0001f1e8", - ":flag-ad:": "\U0001f1e6\U0001f1e9", - ":flag-ae:": "\U0001f1e6\U0001f1ea", - ":flag-af:": "\U0001f1e6\U0001f1eb", - ":flag-ag:": "\U0001f1e6\U0001f1ec", - ":flag-ai:": "\U0001f1e6\U0001f1ee", - ":flag-al:": "\U0001f1e6\U0001f1f1", - ":flag-am:": "\U0001f1e6\U0001f1f2", - ":flag-ao:": "\U0001f1e6\U0001f1f4", - ":flag-aq:": "\U0001f1e6\U0001f1f6", - ":flag-ar:": "\U0001f1e6\U0001f1f7", - ":flag-as:": "\U0001f1e6\U0001f1f8", - ":flag-at:": "\U0001f1e6\U0001f1f9", - ":flag-au:": "\U0001f1e6\U0001f1fa", - ":flag-aw:": "\U0001f1e6\U0001f1fc", - ":flag-ax:": "\U0001f1e6\U0001f1fd", - ":flag-az:": "\U0001f1e6\U0001f1ff", - ":flag-ba:": "\U0001f1e7\U0001f1e6", - ":flag-bb:": "\U0001f1e7\U0001f1e7", - ":flag-bd:": "\U0001f1e7\U0001f1e9", - ":flag-be:": "\U0001f1e7\U0001f1ea", - ":flag-bf:": "\U0001f1e7\U0001f1eb", - ":flag-bg:": "\U0001f1e7\U0001f1ec", - ":flag-bh:": "\U0001f1e7\U0001f1ed", - ":flag-bi:": "\U0001f1e7\U0001f1ee", - ":flag-bj:": "\U0001f1e7\U0001f1ef", - ":flag-bl:": "\U0001f1e7\U0001f1f1", - ":flag-bm:": "\U0001f1e7\U0001f1f2", - ":flag-bn:": "\U0001f1e7\U0001f1f3", - ":flag-bo:": "\U0001f1e7\U0001f1f4", - ":flag-bq:": "\U0001f1e7\U0001f1f6", - ":flag-br:": "\U0001f1e7\U0001f1f7", - ":flag-bs:": "\U0001f1e7\U0001f1f8", - ":flag-bt:": "\U0001f1e7\U0001f1f9", - ":flag-bv:": "\U0001f1e7\U0001f1fb", - ":flag-bw:": "\U0001f1e7\U0001f1fc", - ":flag-by:": "\U0001f1e7\U0001f1fe", - ":flag-bz:": "\U0001f1e7\U0001f1ff", - ":flag-ca:": "\U0001f1e8\U0001f1e6", - ":flag-cc:": "\U0001f1e8\U0001f1e8", - ":flag-cd:": "\U0001f1e8\U0001f1e9", - ":flag-cf:": "\U0001f1e8\U0001f1eb", - ":flag-cg:": "\U0001f1e8\U0001f1ec", - ":flag-ch:": "\U0001f1e8\U0001f1ed", - ":flag-ci:": "\U0001f1e8\U0001f1ee", - ":flag-ck:": "\U0001f1e8\U0001f1f0", - ":flag-cl:": "\U0001f1e8\U0001f1f1", - ":flag-cm:": "\U0001f1e8\U0001f1f2", - ":flag-co:": "\U0001f1e8\U0001f1f4", - ":flag-cp:": "\U0001f1e8\U0001f1f5", - ":flag-cr:": "\U0001f1e8\U0001f1f7", - ":flag-cu:": "\U0001f1e8\U0001f1fa", - ":flag-cv:": "\U0001f1e8\U0001f1fb", - ":flag-cw:": "\U0001f1e8\U0001f1fc", - ":flag-cx:": "\U0001f1e8\U0001f1fd", - ":flag-cy:": "\U0001f1e8\U0001f1fe", - ":flag-cz:": "\U0001f1e8\U0001f1ff", - ":flag-dg:": "\U0001f1e9\U0001f1ec", - ":flag-dj:": "\U0001f1e9\U0001f1ef", - ":flag-dk:": "\U0001f1e9\U0001f1f0", - ":flag-dm:": "\U0001f1e9\U0001f1f2", - ":flag-do:": "\U0001f1e9\U0001f1f4", - ":flag-dz:": "\U0001f1e9\U0001f1ff", - ":flag-ea:": "\U0001f1ea\U0001f1e6", - ":flag-ec:": "\U0001f1ea\U0001f1e8", - ":flag-ee:": "\U0001f1ea\U0001f1ea", - ":flag-eg:": "\U0001f1ea\U0001f1ec", - ":flag-eh:": "\U0001f1ea\U0001f1ed", - ":flag-england:": "\U0001f3f4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", - ":flag-er:": "\U0001f1ea\U0001f1f7", - ":flag-et:": "\U0001f1ea\U0001f1f9", - ":flag-eu:": "\U0001f1ea\U0001f1fa", - ":flag-fi:": "\U0001f1eb\U0001f1ee", - ":flag-fj:": "\U0001f1eb\U0001f1ef", - ":flag-fk:": "\U0001f1eb\U0001f1f0", - ":flag-fm:": "\U0001f1eb\U0001f1f2", - ":flag-fo:": "\U0001f1eb\U0001f1f4", - ":flag-ga:": "\U0001f1ec\U0001f1e6", - ":flag-gd:": "\U0001f1ec\U0001f1e9", - ":flag-ge:": "\U0001f1ec\U0001f1ea", - ":flag-gf:": "\U0001f1ec\U0001f1eb", - ":flag-gg:": "\U0001f1ec\U0001f1ec", - ":flag-gh:": "\U0001f1ec\U0001f1ed", - ":flag-gi:": "\U0001f1ec\U0001f1ee", - ":flag-gl:": "\U0001f1ec\U0001f1f1", - ":flag-gm:": "\U0001f1ec\U0001f1f2", - ":flag-gn:": "\U0001f1ec\U0001f1f3", - ":flag-gp:": "\U0001f1ec\U0001f1f5", - ":flag-gq:": "\U0001f1ec\U0001f1f6", - ":flag-gr:": "\U0001f1ec\U0001f1f7", - ":flag-gs:": "\U0001f1ec\U0001f1f8", - ":flag-gt:": "\U0001f1ec\U0001f1f9", - ":flag-gu:": "\U0001f1ec\U0001f1fa", - ":flag-gw:": "\U0001f1ec\U0001f1fc", - ":flag-gy:": "\U0001f1ec\U0001f1fe", - ":flag-hk:": "\U0001f1ed\U0001f1f0", - ":flag-hm:": "\U0001f1ed\U0001f1f2", - ":flag-hn:": "\U0001f1ed\U0001f1f3", - ":flag-hr:": "\U0001f1ed\U0001f1f7", - ":flag-ht:": "\U0001f1ed\U0001f1f9", - ":flag-hu:": "\U0001f1ed\U0001f1fa", - ":flag-ic:": "\U0001f1ee\U0001f1e8", - ":flag-id:": "\U0001f1ee\U0001f1e9", - ":flag-ie:": "\U0001f1ee\U0001f1ea", - ":flag-il:": "\U0001f1ee\U0001f1f1", - ":flag-im:": "\U0001f1ee\U0001f1f2", - ":flag-in:": "\U0001f1ee\U0001f1f3", - ":flag-io:": "\U0001f1ee\U0001f1f4", - ":flag-iq:": "\U0001f1ee\U0001f1f6", - ":flag-ir:": "\U0001f1ee\U0001f1f7", - ":flag-is:": "\U0001f1ee\U0001f1f8", - ":flag-je:": "\U0001f1ef\U0001f1ea", - ":flag-jm:": "\U0001f1ef\U0001f1f2", - ":flag-jo:": "\U0001f1ef\U0001f1f4", - ":flag-ke:": "\U0001f1f0\U0001f1ea", - ":flag-kg:": "\U0001f1f0\U0001f1ec", - ":flag-kh:": "\U0001f1f0\U0001f1ed", - ":flag-ki:": "\U0001f1f0\U0001f1ee", - ":flag-km:": "\U0001f1f0\U0001f1f2", - ":flag-kn:": "\U0001f1f0\U0001f1f3", - ":flag-kp:": "\U0001f1f0\U0001f1f5", - ":flag-kw:": "\U0001f1f0\U0001f1fc", - ":flag-ky:": "\U0001f1f0\U0001f1fe", - ":flag-kz:": "\U0001f1f0\U0001f1ff", - ":flag-la:": "\U0001f1f1\U0001f1e6", - ":flag-lb:": "\U0001f1f1\U0001f1e7", - ":flag-lc:": "\U0001f1f1\U0001f1e8", - ":flag-li:": "\U0001f1f1\U0001f1ee", - ":flag-lk:": "\U0001f1f1\U0001f1f0", - ":flag-lr:": "\U0001f1f1\U0001f1f7", - ":flag-ls:": "\U0001f1f1\U0001f1f8", - ":flag-lt:": "\U0001f1f1\U0001f1f9", - ":flag-lu:": "\U0001f1f1\U0001f1fa", - ":flag-lv:": "\U0001f1f1\U0001f1fb", - ":flag-ly:": "\U0001f1f1\U0001f1fe", - ":flag-ma:": "\U0001f1f2\U0001f1e6", - ":flag-mc:": "\U0001f1f2\U0001f1e8", - ":flag-md:": "\U0001f1f2\U0001f1e9", - ":flag-me:": "\U0001f1f2\U0001f1ea", - ":flag-mf:": "\U0001f1f2\U0001f1eb", - ":flag-mg:": "\U0001f1f2\U0001f1ec", - ":flag-mh:": "\U0001f1f2\U0001f1ed", - ":flag-mk:": "\U0001f1f2\U0001f1f0", - ":flag-ml:": "\U0001f1f2\U0001f1f1", - ":flag-mm:": "\U0001f1f2\U0001f1f2", - ":flag-mn:": "\U0001f1f2\U0001f1f3", - ":flag-mo:": "\U0001f1f2\U0001f1f4", - ":flag-mp:": "\U0001f1f2\U0001f1f5", - ":flag-mq:": "\U0001f1f2\U0001f1f6", - ":flag-mr:": "\U0001f1f2\U0001f1f7", - ":flag-ms:": "\U0001f1f2\U0001f1f8", - ":flag-mt:": "\U0001f1f2\U0001f1f9", - ":flag-mu:": "\U0001f1f2\U0001f1fa", - ":flag-mv:": "\U0001f1f2\U0001f1fb", - ":flag-mw:": "\U0001f1f2\U0001f1fc", - ":flag-mx:": "\U0001f1f2\U0001f1fd", - ":flag-my:": "\U0001f1f2\U0001f1fe", - ":flag-mz:": "\U0001f1f2\U0001f1ff", - ":flag-na:": "\U0001f1f3\U0001f1e6", - ":flag-nc:": "\U0001f1f3\U0001f1e8", - ":flag-ne:": "\U0001f1f3\U0001f1ea", - ":flag-nf:": "\U0001f1f3\U0001f1eb", - ":flag-ng:": "\U0001f1f3\U0001f1ec", - ":flag-ni:": "\U0001f1f3\U0001f1ee", - ":flag-nl:": "\U0001f1f3\U0001f1f1", - ":flag-no:": "\U0001f1f3\U0001f1f4", - ":flag-np:": "\U0001f1f3\U0001f1f5", - ":flag-nr:": "\U0001f1f3\U0001f1f7", - ":flag-nu:": "\U0001f1f3\U0001f1fa", - ":flag-nz:": "\U0001f1f3\U0001f1ff", - ":flag-om:": "\U0001f1f4\U0001f1f2", - ":flag-pa:": "\U0001f1f5\U0001f1e6", - ":flag-pe:": "\U0001f1f5\U0001f1ea", - ":flag-pf:": "\U0001f1f5\U0001f1eb", - ":flag-pg:": "\U0001f1f5\U0001f1ec", - ":flag-ph:": "\U0001f1f5\U0001f1ed", - ":flag-pk:": "\U0001f1f5\U0001f1f0", - ":flag-pl:": "\U0001f1f5\U0001f1f1", - ":flag-pm:": "\U0001f1f5\U0001f1f2", - ":flag-pn:": "\U0001f1f5\U0001f1f3", - ":flag-pr:": "\U0001f1f5\U0001f1f7", - ":flag-ps:": "\U0001f1f5\U0001f1f8", - ":flag-pt:": "\U0001f1f5\U0001f1f9", - ":flag-pw:": "\U0001f1f5\U0001f1fc", - ":flag-py:": "\U0001f1f5\U0001f1fe", - ":flag-qa:": "\U0001f1f6\U0001f1e6", - ":flag-re:": "\U0001f1f7\U0001f1ea", - ":flag-ro:": "\U0001f1f7\U0001f1f4", - ":flag-rs:": "\U0001f1f7\U0001f1f8", - ":flag-rw:": "\U0001f1f7\U0001f1fc", - ":flag-sa:": "\U0001f1f8\U0001f1e6", - ":flag-sb:": "\U0001f1f8\U0001f1e7", - ":flag-sc:": "\U0001f1f8\U0001f1e8", - ":flag-scotland:": "\U0001f3f4\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f", - ":flag-sd:": "\U0001f1f8\U0001f1e9", - ":flag-se:": "\U0001f1f8\U0001f1ea", - ":flag-sg:": "\U0001f1f8\U0001f1ec", - ":flag-sh:": "\U0001f1f8\U0001f1ed", - ":flag-si:": "\U0001f1f8\U0001f1ee", - ":flag-sj:": "\U0001f1f8\U0001f1ef", - ":flag-sk:": "\U0001f1f8\U0001f1f0", - ":flag-sl:": "\U0001f1f8\U0001f1f1", - ":flag-sm:": "\U0001f1f8\U0001f1f2", - ":flag-sn:": "\U0001f1f8\U0001f1f3", - ":flag-so:": "\U0001f1f8\U0001f1f4", - ":flag-sr:": "\U0001f1f8\U0001f1f7", - ":flag-ss:": "\U0001f1f8\U0001f1f8", - ":flag-st:": "\U0001f1f8\U0001f1f9", - ":flag-sv:": "\U0001f1f8\U0001f1fb", - ":flag-sx:": "\U0001f1f8\U0001f1fd", - ":flag-sy:": "\U0001f1f8\U0001f1fe", - ":flag-sz:": "\U0001f1f8\U0001f1ff", - ":flag-ta:": "\U0001f1f9\U0001f1e6", - ":flag-tc:": "\U0001f1f9\U0001f1e8", - ":flag-td:": "\U0001f1f9\U0001f1e9", - ":flag-tf:": "\U0001f1f9\U0001f1eb", - ":flag-tg:": "\U0001f1f9\U0001f1ec", - ":flag-th:": "\U0001f1f9\U0001f1ed", - ":flag-tj:": "\U0001f1f9\U0001f1ef", - ":flag-tk:": "\U0001f1f9\U0001f1f0", - ":flag-tl:": "\U0001f1f9\U0001f1f1", - ":flag-tm:": "\U0001f1f9\U0001f1f2", - ":flag-tn:": "\U0001f1f9\U0001f1f3", - ":flag-to:": "\U0001f1f9\U0001f1f4", - ":flag-tr:": "\U0001f1f9\U0001f1f7", - ":flag-tt:": "\U0001f1f9\U0001f1f9", - ":flag-tv:": "\U0001f1f9\U0001f1fb", - ":flag-tw:": "\U0001f1f9\U0001f1fc", - ":flag-tz:": "\U0001f1f9\U0001f1ff", - ":flag-ua:": "\U0001f1fa\U0001f1e6", - ":flag-ug:": "\U0001f1fa\U0001f1ec", - ":flag-um:": "\U0001f1fa\U0001f1f2", - ":flag-un:": "\U0001f1fa\U0001f1f3", - ":flag-uy:": "\U0001f1fa\U0001f1fe", - ":flag-uz:": "\U0001f1fa\U0001f1ff", - ":flag-va:": "\U0001f1fb\U0001f1e6", - ":flag-vc:": "\U0001f1fb\U0001f1e8", - ":flag-ve:": "\U0001f1fb\U0001f1ea", - ":flag-vg:": "\U0001f1fb\U0001f1ec", - ":flag-vi:": "\U0001f1fb\U0001f1ee", - ":flag-vn:": "\U0001f1fb\U0001f1f3", - ":flag-vu:": "\U0001f1fb\U0001f1fa", - ":flag-wales:": "\U0001f3f4\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f", - ":flag-wf:": "\U0001f1fc\U0001f1eb", - ":flag-ws:": "\U0001f1fc\U0001f1f8", - ":flag-xk:": "\U0001f1fd\U0001f1f0", - ":flag-ye:": "\U0001f1fe\U0001f1ea", - ":flag-yt:": "\U0001f1fe\U0001f1f9", - ":flag-za:": "\U0001f1ff\U0001f1e6", - ":flag-zm:": "\U0001f1ff\U0001f1f2", - ":flag-zw:": "\U0001f1ff\U0001f1fc", - ":flag_Afghanistan:": "\U0001f1e6\U0001f1eb", - ":flag_Albania:": "\U0001f1e6\U0001f1f1", - ":flag_Algeria:": "\U0001f1e9\U0001f1ff", - ":flag_American_Samoa:": "\U0001f1e6\U0001f1f8", - ":flag_Andorra:": "\U0001f1e6\U0001f1e9", - ":flag_Angola:": "\U0001f1e6\U0001f1f4", - ":flag_Anguilla:": "\U0001f1e6\U0001f1ee", - ":flag_Antarctica:": "\U0001f1e6\U0001f1f6", - ":flag_Antigua_&_Barbuda:": "\U0001f1e6\U0001f1ec", - ":flag_Argentina:": "\U0001f1e6\U0001f1f7", - ":flag_Armenia:": "\U0001f1e6\U0001f1f2", - ":flag_Aruba:": "\U0001f1e6\U0001f1fc", - ":flag_Ascension_Island:": "\U0001f1e6\U0001f1e8", - ":flag_Australia:": "\U0001f1e6\U0001f1fa", - ":flag_Austria:": "\U0001f1e6\U0001f1f9", - ":flag_Azerbaijan:": "\U0001f1e6\U0001f1ff", - ":flag_Bahamas:": "\U0001f1e7\U0001f1f8", - ":flag_Bahrain:": "\U0001f1e7\U0001f1ed", - ":flag_Bangladesh:": "\U0001f1e7\U0001f1e9", - ":flag_Barbados:": "\U0001f1e7\U0001f1e7", - ":flag_Belarus:": "\U0001f1e7\U0001f1fe", - ":flag_Belgium:": "\U0001f1e7\U0001f1ea", - ":flag_Belize:": "\U0001f1e7\U0001f1ff", - ":flag_Benin:": "\U0001f1e7\U0001f1ef", - ":flag_Bermuda:": "\U0001f1e7\U0001f1f2", - ":flag_Bhutan:": "\U0001f1e7\U0001f1f9", - ":flag_Bolivia:": "\U0001f1e7\U0001f1f4", - ":flag_Bosnia_&_Herzegovina:": "\U0001f1e7\U0001f1e6", - ":flag_Botswana:": "\U0001f1e7\U0001f1fc", - ":flag_Bouvet_Island:": "\U0001f1e7\U0001f1fb", - ":flag_Brazil:": "\U0001f1e7\U0001f1f7", - ":flag_British_Indian_Ocean_Territory:": "\U0001f1ee\U0001f1f4", - ":flag_British_Virgin_Islands:": "\U0001f1fb\U0001f1ec", - ":flag_Brunei:": "\U0001f1e7\U0001f1f3", - ":flag_Bulgaria:": "\U0001f1e7\U0001f1ec", - ":flag_Burkina_Faso:": "\U0001f1e7\U0001f1eb", - ":flag_Burundi:": "\U0001f1e7\U0001f1ee", - ":flag_Cambodia:": "\U0001f1f0\U0001f1ed", - ":flag_Cameroon:": "\U0001f1e8\U0001f1f2", - ":flag_Canada:": "\U0001f1e8\U0001f1e6", - ":flag_Canary_Islands:": "\U0001f1ee\U0001f1e8", - ":flag_Cape_Verde:": "\U0001f1e8\U0001f1fb", - ":flag_Caribbean_Netherlands:": "\U0001f1e7\U0001f1f6", - ":flag_Cayman_Islands:": "\U0001f1f0\U0001f1fe", - ":flag_Central_African_Republic:": "\U0001f1e8\U0001f1eb", - ":flag_Ceuta_&_Melilla:": "\U0001f1ea\U0001f1e6", - ":flag_Chad:": "\U0001f1f9\U0001f1e9", - ":flag_Chile:": "\U0001f1e8\U0001f1f1", - ":flag_China:": "\U0001f1e8\U0001f1f3", - ":flag_Christmas_Island:": "\U0001f1e8\U0001f1fd", - ":flag_Clipperton_Island:": "\U0001f1e8\U0001f1f5", - ":flag_Cocos_(Keeling)_Islands:": "\U0001f1e8\U0001f1e8", - ":flag_Colombia:": "\U0001f1e8\U0001f1f4", - ":flag_Comoros:": "\U0001f1f0\U0001f1f2", - ":flag_Congo_-_Brazzaville:": "\U0001f1e8\U0001f1ec", - ":flag_Congo_-_Kinshasa:": "\U0001f1e8\U0001f1e9", - ":flag_Cook_Islands:": "\U0001f1e8\U0001f1f0", - ":flag_Costa_Rica:": "\U0001f1e8\U0001f1f7", - ":flag_Croatia:": "\U0001f1ed\U0001f1f7", - ":flag_Cuba:": "\U0001f1e8\U0001f1fa", - ":flag_Curaçao:": "\U0001f1e8\U0001f1fc", - ":flag_Cyprus:": "\U0001f1e8\U0001f1fe", - ":flag_Czechia:": "\U0001f1e8\U0001f1ff", - ":flag_Côte_d’Ivoire:": "\U0001f1e8\U0001f1ee", - ":flag_Denmark:": "\U0001f1e9\U0001f1f0", - ":flag_Diego_Garcia:": "\U0001f1e9\U0001f1ec", - ":flag_Djibouti:": "\U0001f1e9\U0001f1ef", - ":flag_Dominica:": "\U0001f1e9\U0001f1f2", - ":flag_Dominican_Republic:": "\U0001f1e9\U0001f1f4", - ":flag_Ecuador:": "\U0001f1ea\U0001f1e8", - ":flag_Egypt:": "\U0001f1ea\U0001f1ec", - ":flag_El_Salvador:": "\U0001f1f8\U0001f1fb", - ":flag_England:": "\U0001f3f4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", - ":flag_Equatorial_Guinea:": "\U0001f1ec\U0001f1f6", - ":flag_Eritrea:": "\U0001f1ea\U0001f1f7", - ":flag_Estonia:": "\U0001f1ea\U0001f1ea", - ":flag_Eswatini:": "\U0001f1f8\U0001f1ff", - ":flag_Ethiopia:": "\U0001f1ea\U0001f1f9", - ":flag_European_Union:": "\U0001f1ea\U0001f1fa", - ":flag_Falkland_Islands:": "\U0001f1eb\U0001f1f0", - ":flag_Faroe_Islands:": "\U0001f1eb\U0001f1f4", - ":flag_Fiji:": "\U0001f1eb\U0001f1ef", - ":flag_Finland:": "\U0001f1eb\U0001f1ee", - ":flag_France:": "\U0001f1eb\U0001f1f7", - ":flag_French_Guiana:": "\U0001f1ec\U0001f1eb", - ":flag_French_Polynesia:": "\U0001f1f5\U0001f1eb", - ":flag_French_Southern_Territories:": "\U0001f1f9\U0001f1eb", - ":flag_Gabon:": "\U0001f1ec\U0001f1e6", - ":flag_Gambia:": "\U0001f1ec\U0001f1f2", - ":flag_Georgia:": "\U0001f1ec\U0001f1ea", - ":flag_Germany:": "\U0001f1e9\U0001f1ea", - ":flag_Ghana:": "\U0001f1ec\U0001f1ed", - ":flag_Gibraltar:": "\U0001f1ec\U0001f1ee", - ":flag_Greece:": "\U0001f1ec\U0001f1f7", - ":flag_Greenland:": "\U0001f1ec\U0001f1f1", - ":flag_Grenada:": "\U0001f1ec\U0001f1e9", - ":flag_Guadeloupe:": "\U0001f1ec\U0001f1f5", - ":flag_Guam:": "\U0001f1ec\U0001f1fa", - ":flag_Guatemala:": "\U0001f1ec\U0001f1f9", - ":flag_Guernsey:": "\U0001f1ec\U0001f1ec", - ":flag_Guinea:": "\U0001f1ec\U0001f1f3", - ":flag_Guinea-Bissau:": "\U0001f1ec\U0001f1fc", - ":flag_Guyana:": "\U0001f1ec\U0001f1fe", - ":flag_Haiti:": "\U0001f1ed\U0001f1f9", - ":flag_Heard_&_McDonald_Islands:": "\U0001f1ed\U0001f1f2", - ":flag_Honduras:": "\U0001f1ed\U0001f1f3", - ":flag_Hong_Kong_SAR_China:": "\U0001f1ed\U0001f1f0", - ":flag_Hungary:": "\U0001f1ed\U0001f1fa", - ":flag_Iceland:": "\U0001f1ee\U0001f1f8", - ":flag_India:": "\U0001f1ee\U0001f1f3", - ":flag_Indonesia:": "\U0001f1ee\U0001f1e9", - ":flag_Iran:": "\U0001f1ee\U0001f1f7", - ":flag_Iraq:": "\U0001f1ee\U0001f1f6", - ":flag_Ireland:": "\U0001f1ee\U0001f1ea", - ":flag_Isle_of_Man:": "\U0001f1ee\U0001f1f2", - ":flag_Israel:": "\U0001f1ee\U0001f1f1", - ":flag_Italy:": "\U0001f1ee\U0001f1f9", - ":flag_Jamaica:": "\U0001f1ef\U0001f1f2", - ":flag_Japan:": "\U0001f1ef\U0001f1f5", - ":flag_Jersey:": "\U0001f1ef\U0001f1ea", - ":flag_Jordan:": "\U0001f1ef\U0001f1f4", - ":flag_Kazakhstan:": "\U0001f1f0\U0001f1ff", - ":flag_Kenya:": "\U0001f1f0\U0001f1ea", - ":flag_Kiribati:": "\U0001f1f0\U0001f1ee", - ":flag_Kosovo:": "\U0001f1fd\U0001f1f0", - ":flag_Kuwait:": "\U0001f1f0\U0001f1fc", - ":flag_Kyrgyzstan:": "\U0001f1f0\U0001f1ec", - ":flag_Laos:": "\U0001f1f1\U0001f1e6", - ":flag_Latvia:": "\U0001f1f1\U0001f1fb", - ":flag_Lebanon:": "\U0001f1f1\U0001f1e7", - ":flag_Lesotho:": "\U0001f1f1\U0001f1f8", - ":flag_Liberia:": "\U0001f1f1\U0001f1f7", - ":flag_Libya:": "\U0001f1f1\U0001f1fe", - ":flag_Liechtenstein:": "\U0001f1f1\U0001f1ee", - ":flag_Lithuania:": "\U0001f1f1\U0001f1f9", - ":flag_Luxembourg:": "\U0001f1f1\U0001f1fa", - ":flag_Macao_SAR_China:": "\U0001f1f2\U0001f1f4", - ":flag_Madagascar:": "\U0001f1f2\U0001f1ec", - ":flag_Malawi:": "\U0001f1f2\U0001f1fc", - ":flag_Malaysia:": "\U0001f1f2\U0001f1fe", - ":flag_Maldives:": "\U0001f1f2\U0001f1fb", - ":flag_Mali:": "\U0001f1f2\U0001f1f1", - ":flag_Malta:": "\U0001f1f2\U0001f1f9", - ":flag_Marshall_Islands:": "\U0001f1f2\U0001f1ed", - ":flag_Martinique:": "\U0001f1f2\U0001f1f6", - ":flag_Mauritania:": "\U0001f1f2\U0001f1f7", - ":flag_Mauritius:": "\U0001f1f2\U0001f1fa", - ":flag_Mayotte:": "\U0001f1fe\U0001f1f9", - ":flag_Mexico:": "\U0001f1f2\U0001f1fd", - ":flag_Micronesia:": "\U0001f1eb\U0001f1f2", - ":flag_Moldova:": "\U0001f1f2\U0001f1e9", - ":flag_Monaco:": "\U0001f1f2\U0001f1e8", - ":flag_Mongolia:": "\U0001f1f2\U0001f1f3", - ":flag_Montenegro:": "\U0001f1f2\U0001f1ea", - ":flag_Montserrat:": "\U0001f1f2\U0001f1f8", - ":flag_Morocco:": "\U0001f1f2\U0001f1e6", - ":flag_Mozambique:": "\U0001f1f2\U0001f1ff", - ":flag_Myanmar_(Burma):": "\U0001f1f2\U0001f1f2", - ":flag_Namibia:": "\U0001f1f3\U0001f1e6", - ":flag_Nauru:": "\U0001f1f3\U0001f1f7", - ":flag_Nepal:": "\U0001f1f3\U0001f1f5", - ":flag_Netherlands:": "\U0001f1f3\U0001f1f1", - ":flag_New_Caledonia:": "\U0001f1f3\U0001f1e8", - ":flag_New_Zealand:": "\U0001f1f3\U0001f1ff", - ":flag_Nicaragua:": "\U0001f1f3\U0001f1ee", - ":flag_Niger:": "\U0001f1f3\U0001f1ea", - ":flag_Nigeria:": "\U0001f1f3\U0001f1ec", - ":flag_Niue:": "\U0001f1f3\U0001f1fa", - ":flag_Norfolk_Island:": "\U0001f1f3\U0001f1eb", - ":flag_North_Korea:": "\U0001f1f0\U0001f1f5", - ":flag_North_Macedonia:": "\U0001f1f2\U0001f1f0", - ":flag_Northern_Mariana_Islands:": "\U0001f1f2\U0001f1f5", - ":flag_Norway:": "\U0001f1f3\U0001f1f4", - ":flag_Oman:": "\U0001f1f4\U0001f1f2", - ":flag_Pakistan:": "\U0001f1f5\U0001f1f0", - ":flag_Palau:": "\U0001f1f5\U0001f1fc", - ":flag_Palestinian_Territories:": "\U0001f1f5\U0001f1f8", - ":flag_Panama:": "\U0001f1f5\U0001f1e6", - ":flag_Papua_New_Guinea:": "\U0001f1f5\U0001f1ec", - ":flag_Paraguay:": "\U0001f1f5\U0001f1fe", - ":flag_Peru:": "\U0001f1f5\U0001f1ea", - ":flag_Philippines:": "\U0001f1f5\U0001f1ed", - ":flag_Pitcairn_Islands:": "\U0001f1f5\U0001f1f3", - ":flag_Poland:": "\U0001f1f5\U0001f1f1", - ":flag_Portugal:": "\U0001f1f5\U0001f1f9", - ":flag_Puerto_Rico:": "\U0001f1f5\U0001f1f7", - ":flag_Qatar:": "\U0001f1f6\U0001f1e6", - ":flag_Romania:": "\U0001f1f7\U0001f1f4", - ":flag_Russia:": "\U0001f1f7\U0001f1fa", - ":flag_Rwanda:": "\U0001f1f7\U0001f1fc", - ":flag_Réunion:": "\U0001f1f7\U0001f1ea", - ":flag_Samoa:": "\U0001f1fc\U0001f1f8", - ":flag_San_Marino:": "\U0001f1f8\U0001f1f2", - ":flag_Saudi_Arabia:": "\U0001f1f8\U0001f1e6", - ":flag_Scotland:": "\U0001f3f4\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f", - ":flag_Senegal:": "\U0001f1f8\U0001f1f3", - ":flag_Serbia:": "\U0001f1f7\U0001f1f8", - ":flag_Seychelles:": "\U0001f1f8\U0001f1e8", - ":flag_Sierra_Leone:": "\U0001f1f8\U0001f1f1", - ":flag_Singapore:": "\U0001f1f8\U0001f1ec", - ":flag_Sint_Maarten:": "\U0001f1f8\U0001f1fd", - ":flag_Slovakia:": "\U0001f1f8\U0001f1f0", - ":flag_Slovenia:": "\U0001f1f8\U0001f1ee", - ":flag_Solomon_Islands:": "\U0001f1f8\U0001f1e7", - ":flag_Somalia:": "\U0001f1f8\U0001f1f4", - ":flag_South_Africa:": "\U0001f1ff\U0001f1e6", + ":face_with_open_eyes_and_hand_over_mouth:": "\U0001fae2", + ":face_with_open_mouth:": "\U0001f62e", + ":face_with_peeking_eye:": "\U0001fae3", + ":face_with_raised_eyebrow:": "\U0001f928", + ":face_with_rolling_eyes:": "\U0001f644", + ":face_with_spiral_eyes:": "\U0001f635\u200d\U0001f4ab", + ":face_with_steam_from_nose:": "\U0001f624", + ":face_with_symbols_on_mouth:": "\U0001f92c", + ":face_with_symbols_over_mouth:": "\U0001f92c", + ":face_with_tears_of_joy:": "\U0001f602", + ":face_with_thermometer:": "\U0001f912", + ":face_with_tongue:": "\U0001f61b", + ":face_without_mouth:": "\U0001f636", + ":facepalm:": "\U0001f926", + ":facepunch:": "\U0001f44a", + ":factory:": "\U0001f3ed", + ":factory_worker:": "\U0001f9d1\u200d\U0001f3ed", + ":fairy:": "\U0001f9da\u200d\u2640\ufe0f", + ":fairy_man:": "\U0001f9da\u200d\u2642\ufe0f", + ":fairy_tone1:": "\U0001f9da\U0001f3fb", + ":fairy_tone2:": "\U0001f9da\U0001f3fc", + ":fairy_tone3:": "\U0001f9da\U0001f3fd", + ":fairy_tone4:": "\U0001f9da\U0001f3fe", + ":fairy_tone5:": "\U0001f9da\U0001f3ff", + ":fairy_woman:": "\U0001f9da\u200d\u2640\ufe0f", + ":falafel:": "\U0001f9c6", + ":falkland_islands:": "\U0001f1eb\U0001f1f0", + ":fallen_leaf:": "\U0001f342", + ":family:": "\U0001f468\u200d\U0001f469\u200d\U0001f466", + ":family_man_boy:": "\U0001f468\u200d\U0001f466", + ":family_man_boy_boy:": "\U0001f468\u200d\U0001f466\u200d\U0001f466", + ":family_man_girl:": "\U0001f468\u200d\U0001f467", + ":family_man_girl_boy:": "\U0001f468\u200d\U0001f467\u200d\U0001f466", + ":family_man_girl_girl:": "\U0001f468\u200d\U0001f467\u200d\U0001f467", + ":family_man_man_boy:": "\U0001f468\u200d\U0001f468\u200d\U0001f466", + ":family_man_man_boy_boy:": "\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f466", + ":family_man_man_girl:": "\U0001f468\u200d\U0001f468\u200d\U0001f467", + ":family_man_man_girl_boy:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f466", + ":family_man_man_girl_girl:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f467", + ":family_man_woman_boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f466", + ":family_man_woman_boy_boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", + ":family_man_woman_girl:": "\U0001f468\u200d\U0001f469\u200d\U0001f467", + ":family_man_woman_girl_boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", + ":family_man_woman_girl_girl:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", + ":family_mmb:": "\U0001f468\u200d\U0001f468\u200d\U0001f466", + ":family_mmbb:": "\U0001f468\u200d\U0001f468\u200d\U0001f466\u200d\U0001f466", + ":family_mmg:": "\U0001f468\u200d\U0001f468\u200d\U0001f467", + ":family_mmgb:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f466", + ":family_mmgg:": "\U0001f468\u200d\U0001f468\u200d\U0001f467\u200d\U0001f467", + ":family_mwbb:": "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", + ":family_mwg:": "\U0001f468\u200d\U0001f469\u200d\U0001f467", + ":family_mwgb:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", + ":family_mwgg:": "\U0001f468\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", + ":family_woman_boy:": "\U0001f469\u200d\U0001f466", + ":family_woman_boy_boy:": "\U0001f469\u200d\U0001f466\u200d\U0001f466", + ":family_woman_girl:": "\U0001f469\u200d\U0001f467", + ":family_woman_girl_boy:": "\U0001f469\u200d\U0001f467\u200d\U0001f466", + ":family_woman_girl_girl:": "\U0001f469\u200d\U0001f467\u200d\U0001f467", + ":family_woman_woman_boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f466", + ":family_woman_woman_boy_boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", + ":family_woman_woman_girl:": "\U0001f469\u200d\U0001f469\u200d\U0001f467", + ":family_woman_woman_girl_boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", + ":family_woman_woman_girl_girl:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", + ":family_wwb:": "\U0001f469\u200d\U0001f469\u200d\U0001f466", + ":family_wwbb:": "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", + ":family_wwg:": "\U0001f469\u200d\U0001f469\u200d\U0001f467", + ":family_wwgb:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f466", + ":family_wwgg:": "\U0001f469\u200d\U0001f469\u200d\U0001f467\u200d\U0001f467", + ":farmer:": "\U0001f9d1\u200d\U0001f33e", + ":faroe_islands:": "\U0001f1eb\U0001f1f4", + ":fast-forward_button:": "\u23e9", + ":fast_down_button:": "\u23ec", + ":fast_forward:": "\u23e9", + ":fast_reverse_button:": "\u23ea", + ":fast_up_button:": "\u23eb", + ":fax:": "\U0001f4e0", + ":fax_machine:": "\U0001f4e0", + ":fearful:": "\U0001f628", + ":fearful_face:": "\U0001f628", + ":feather:": "\U0001fab6", + ":feet:": "\U0001f43e", + ":female-artist:": "\U0001f469\u200d\U0001f3a8", + ":female-astronaut:": "\U0001f469\u200d\U0001f680", + ":female-construction-worker:": "\U0001f477\u200d\u2640\ufe0f", + ":female-cook:": "\U0001f469\u200d\U0001f373", + ":female-detective:": "\U0001f575\ufe0f\u200d\u2640\ufe0f", + ":female-doctor:": "\U0001f469\u200d\u2695\ufe0f", + ":female-factory-worker:": "\U0001f469\u200d\U0001f3ed", + ":female-farmer:": "\U0001f469\u200d\U0001f33e", + ":female-firefighter:": "\U0001f469\u200d\U0001f692", + ":female-guard:": "\U0001f482\u200d\u2640\ufe0f", + ":female-judge:": "\U0001f469\u200d\u2696\ufe0f", + ":female-mechanic:": "\U0001f469\u200d\U0001f527", + ":female-office-worker:": "\U0001f469\u200d\U0001f4bc", + ":female-pilot:": "\U0001f469\u200d\u2708\ufe0f", + ":female-police-officer:": "\U0001f46e\u200d\u2640\ufe0f", + ":female-scientist:": "\U0001f469\u200d\U0001f52c", + ":female-singer:": "\U0001f469\u200d\U0001f3a4", + ":female-student:": "\U0001f469\u200d\U0001f393", + ":female-teacher:": "\U0001f469\u200d\U0001f3eb", + ":female-technologist:": "\U0001f469\u200d\U0001f4bb", + ":female_detective:": "\U0001f575\ufe0f\u200d\u2640\ufe0f", + ":female_elf:": "\U0001f9dd\u200d\u2640\ufe0f", + ":female_fairy:": "\U0001f9da\u200d\u2640\ufe0f", + ":female_genie:": "\U0001f9de\u200d\u2640\ufe0f", + ":female_mage:": "\U0001f9d9\u200d\u2640\ufe0f", + ":female_sign:": "\u2640\ufe0f", + ":female_superhero:": "\U0001f9b8\u200d\u2640\ufe0f", + ":female_supervillain:": "\U0001f9b9\u200d\u2640\ufe0f", + ":female_vampire:": "\U0001f9db\u200d\u2640\ufe0f", + ":female_zombie:": "\U0001f9df\u200d\u2640\ufe0f", + ":fencer:": "\U0001f93a", + ":ferris_wheel:": "\U0001f3a1", + ":ferry:": "\u26f4\ufe0f", + ":field_hockey:": "\U0001f3d1", + ":field_hockey_stick_and_ball:": "\U0001f3d1", + ":fiji:": "\U0001f1eb\U0001f1ef", + ":file_cabinet:": "\U0001f5c4\ufe0f", + ":file_folder:": "\U0001f4c1", + ":film_frames:": "\U0001f39e\ufe0f", + ":film_projector:": "\U0001f4fd\ufe0f", + ":film_strip:": "\U0001f39e\ufe0f", + ":fingers_crossed:": "\U0001f91e", + ":fingers_crossed_tone1:": "\U0001f91e\U0001f3fb", + ":fingers_crossed_tone2:": "\U0001f91e\U0001f3fc", + ":fingers_crossed_tone3:": "\U0001f91e\U0001f3fd", + ":fingers_crossed_tone4:": "\U0001f91e\U0001f3fe", + ":fingers_crossed_tone5:": "\U0001f91e\U0001f3ff", + ":finland:": "\U0001f1eb\U0001f1ee", + ":fire:": "\U0001f525", + ":fire_engine:": "\U0001f692", + ":fire_extinguisher:": "\U0001f9ef", + ":firecracker:": "\U0001f9e8", + ":firefighter:": "\U0001f9d1\u200d\U0001f692", + ":fireworks:": "\U0001f386", + ":first_place:": "\U0001f947", + ":first_place_medal:": "\U0001f947", + ":first_quarter_moon:": "\U0001f313", + ":first_quarter_moon_face:": "\U0001f31b", + ":first_quarter_moon_with_face:": "\U0001f31b", + ":fish:": "\U0001f41f", + ":fish_cake:": "\U0001f365", + ":fish_cake_with_swirl:": "\U0001f365", + ":fishing_pole:": "\U0001f3a3", + ":fishing_pole_and_fish:": "\U0001f3a3", + ":fist:": "\u270a", + ":fist_left:": "\U0001f91b", + ":fist_oncoming:": "\U0001f44a", + ":fist_raised:": "\u270a", + ":fist_right:": "\U0001f91c", + ":fist_tone1:": "\u270a\U0001f3fb", + ":fist_tone2:": "\u270a\U0001f3fc", + ":fist_tone3:": "\u270a\U0001f3fd", + ":fist_tone4:": "\u270a\U0001f3fe", + ":fist_tone5:": "\u270a\U0001f3ff", + ":five:": "5\ufe0f\u20e3", + ":five-thirty:": "\U0001f560", + ":five_o’clock:": "\U0001f554", + ":flag-ac:": "\U0001f1e6\U0001f1e8", + ":flag-ad:": "\U0001f1e6\U0001f1e9", + ":flag-ae:": "\U0001f1e6\U0001f1ea", + ":flag-af:": "\U0001f1e6\U0001f1eb", + ":flag-ag:": "\U0001f1e6\U0001f1ec", + ":flag-ai:": "\U0001f1e6\U0001f1ee", + ":flag-al:": "\U0001f1e6\U0001f1f1", + ":flag-am:": "\U0001f1e6\U0001f1f2", + ":flag-ao:": "\U0001f1e6\U0001f1f4", + ":flag-aq:": "\U0001f1e6\U0001f1f6", + ":flag-ar:": "\U0001f1e6\U0001f1f7", + ":flag-as:": "\U0001f1e6\U0001f1f8", + ":flag-at:": "\U0001f1e6\U0001f1f9", + ":flag-au:": "\U0001f1e6\U0001f1fa", + ":flag-aw:": "\U0001f1e6\U0001f1fc", + ":flag-ax:": "\U0001f1e6\U0001f1fd", + ":flag-az:": "\U0001f1e6\U0001f1ff", + ":flag-ba:": "\U0001f1e7\U0001f1e6", + ":flag-bb:": "\U0001f1e7\U0001f1e7", + ":flag-bd:": "\U0001f1e7\U0001f1e9", + ":flag-be:": "\U0001f1e7\U0001f1ea", + ":flag-bf:": "\U0001f1e7\U0001f1eb", + ":flag-bg:": "\U0001f1e7\U0001f1ec", + ":flag-bh:": "\U0001f1e7\U0001f1ed", + ":flag-bi:": "\U0001f1e7\U0001f1ee", + ":flag-bj:": "\U0001f1e7\U0001f1ef", + ":flag-bl:": "\U0001f1e7\U0001f1f1", + ":flag-bm:": "\U0001f1e7\U0001f1f2", + ":flag-bn:": "\U0001f1e7\U0001f1f3", + ":flag-bo:": "\U0001f1e7\U0001f1f4", + ":flag-bq:": "\U0001f1e7\U0001f1f6", + ":flag-br:": "\U0001f1e7\U0001f1f7", + ":flag-bs:": "\U0001f1e7\U0001f1f8", + ":flag-bt:": "\U0001f1e7\U0001f1f9", + ":flag-bv:": "\U0001f1e7\U0001f1fb", + ":flag-bw:": "\U0001f1e7\U0001f1fc", + ":flag-by:": "\U0001f1e7\U0001f1fe", + ":flag-bz:": "\U0001f1e7\U0001f1ff", + ":flag-ca:": "\U0001f1e8\U0001f1e6", + ":flag-cc:": "\U0001f1e8\U0001f1e8", + ":flag-cd:": "\U0001f1e8\U0001f1e9", + ":flag-cf:": "\U0001f1e8\U0001f1eb", + ":flag-cg:": "\U0001f1e8\U0001f1ec", + ":flag-ch:": "\U0001f1e8\U0001f1ed", + ":flag-ci:": "\U0001f1e8\U0001f1ee", + ":flag-ck:": "\U0001f1e8\U0001f1f0", + ":flag-cl:": "\U0001f1e8\U0001f1f1", + ":flag-cm:": "\U0001f1e8\U0001f1f2", + ":flag-co:": "\U0001f1e8\U0001f1f4", + ":flag-cp:": "\U0001f1e8\U0001f1f5", + ":flag-cr:": "\U0001f1e8\U0001f1f7", + ":flag-cu:": "\U0001f1e8\U0001f1fa", + ":flag-cv:": "\U0001f1e8\U0001f1fb", + ":flag-cw:": "\U0001f1e8\U0001f1fc", + ":flag-cx:": "\U0001f1e8\U0001f1fd", + ":flag-cy:": "\U0001f1e8\U0001f1fe", + ":flag-cz:": "\U0001f1e8\U0001f1ff", + ":flag-dg:": "\U0001f1e9\U0001f1ec", + ":flag-dj:": "\U0001f1e9\U0001f1ef", + ":flag-dk:": "\U0001f1e9\U0001f1f0", + ":flag-dm:": "\U0001f1e9\U0001f1f2", + ":flag-do:": "\U0001f1e9\U0001f1f4", + ":flag-dz:": "\U0001f1e9\U0001f1ff", + ":flag-ea:": "\U0001f1ea\U0001f1e6", + ":flag-ec:": "\U0001f1ea\U0001f1e8", + ":flag-ee:": "\U0001f1ea\U0001f1ea", + ":flag-eg:": "\U0001f1ea\U0001f1ec", + ":flag-eh:": "\U0001f1ea\U0001f1ed", + ":flag-england:": "\U0001f3f4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", + ":flag-er:": "\U0001f1ea\U0001f1f7", + ":flag-et:": "\U0001f1ea\U0001f1f9", + ":flag-eu:": "\U0001f1ea\U0001f1fa", + ":flag-fi:": "\U0001f1eb\U0001f1ee", + ":flag-fj:": "\U0001f1eb\U0001f1ef", + ":flag-fk:": "\U0001f1eb\U0001f1f0", + ":flag-fm:": "\U0001f1eb\U0001f1f2", + ":flag-fo:": "\U0001f1eb\U0001f1f4", + ":flag-ga:": "\U0001f1ec\U0001f1e6", + ":flag-gd:": "\U0001f1ec\U0001f1e9", + ":flag-ge:": "\U0001f1ec\U0001f1ea", + ":flag-gf:": "\U0001f1ec\U0001f1eb", + ":flag-gg:": "\U0001f1ec\U0001f1ec", + ":flag-gh:": "\U0001f1ec\U0001f1ed", + ":flag-gi:": "\U0001f1ec\U0001f1ee", + ":flag-gl:": "\U0001f1ec\U0001f1f1", + ":flag-gm:": "\U0001f1ec\U0001f1f2", + ":flag-gn:": "\U0001f1ec\U0001f1f3", + ":flag-gp:": "\U0001f1ec\U0001f1f5", + ":flag-gq:": "\U0001f1ec\U0001f1f6", + ":flag-gr:": "\U0001f1ec\U0001f1f7", + ":flag-gs:": "\U0001f1ec\U0001f1f8", + ":flag-gt:": "\U0001f1ec\U0001f1f9", + ":flag-gu:": "\U0001f1ec\U0001f1fa", + ":flag-gw:": "\U0001f1ec\U0001f1fc", + ":flag-gy:": "\U0001f1ec\U0001f1fe", + ":flag-hk:": "\U0001f1ed\U0001f1f0", + ":flag-hm:": "\U0001f1ed\U0001f1f2", + ":flag-hn:": "\U0001f1ed\U0001f1f3", + ":flag-hr:": "\U0001f1ed\U0001f1f7", + ":flag-ht:": "\U0001f1ed\U0001f1f9", + ":flag-hu:": "\U0001f1ed\U0001f1fa", + ":flag-ic:": "\U0001f1ee\U0001f1e8", + ":flag-id:": "\U0001f1ee\U0001f1e9", + ":flag-ie:": "\U0001f1ee\U0001f1ea", + ":flag-il:": "\U0001f1ee\U0001f1f1", + ":flag-im:": "\U0001f1ee\U0001f1f2", + ":flag-in:": "\U0001f1ee\U0001f1f3", + ":flag-io:": "\U0001f1ee\U0001f1f4", + ":flag-iq:": "\U0001f1ee\U0001f1f6", + ":flag-ir:": "\U0001f1ee\U0001f1f7", + ":flag-is:": "\U0001f1ee\U0001f1f8", + ":flag-je:": "\U0001f1ef\U0001f1ea", + ":flag-jm:": "\U0001f1ef\U0001f1f2", + ":flag-jo:": "\U0001f1ef\U0001f1f4", + ":flag-ke:": "\U0001f1f0\U0001f1ea", + ":flag-kg:": "\U0001f1f0\U0001f1ec", + ":flag-kh:": "\U0001f1f0\U0001f1ed", + ":flag-ki:": "\U0001f1f0\U0001f1ee", + ":flag-km:": "\U0001f1f0\U0001f1f2", + ":flag-kn:": "\U0001f1f0\U0001f1f3", + ":flag-kp:": "\U0001f1f0\U0001f1f5", + ":flag-kw:": "\U0001f1f0\U0001f1fc", + ":flag-ky:": "\U0001f1f0\U0001f1fe", + ":flag-kz:": "\U0001f1f0\U0001f1ff", + ":flag-la:": "\U0001f1f1\U0001f1e6", + ":flag-lb:": "\U0001f1f1\U0001f1e7", + ":flag-lc:": "\U0001f1f1\U0001f1e8", + ":flag-li:": "\U0001f1f1\U0001f1ee", + ":flag-lk:": "\U0001f1f1\U0001f1f0", + ":flag-lr:": "\U0001f1f1\U0001f1f7", + ":flag-ls:": "\U0001f1f1\U0001f1f8", + ":flag-lt:": "\U0001f1f1\U0001f1f9", + ":flag-lu:": "\U0001f1f1\U0001f1fa", + ":flag-lv:": "\U0001f1f1\U0001f1fb", + ":flag-ly:": "\U0001f1f1\U0001f1fe", + ":flag-ma:": "\U0001f1f2\U0001f1e6", + ":flag-mc:": "\U0001f1f2\U0001f1e8", + ":flag-md:": "\U0001f1f2\U0001f1e9", + ":flag-me:": "\U0001f1f2\U0001f1ea", + ":flag-mf:": "\U0001f1f2\U0001f1eb", + ":flag-mg:": "\U0001f1f2\U0001f1ec", + ":flag-mh:": "\U0001f1f2\U0001f1ed", + ":flag-mk:": "\U0001f1f2\U0001f1f0", + ":flag-ml:": "\U0001f1f2\U0001f1f1", + ":flag-mm:": "\U0001f1f2\U0001f1f2", + ":flag-mn:": "\U0001f1f2\U0001f1f3", + ":flag-mo:": "\U0001f1f2\U0001f1f4", + ":flag-mp:": "\U0001f1f2\U0001f1f5", + ":flag-mq:": "\U0001f1f2\U0001f1f6", + ":flag-mr:": "\U0001f1f2\U0001f1f7", + ":flag-ms:": "\U0001f1f2\U0001f1f8", + ":flag-mt:": "\U0001f1f2\U0001f1f9", + ":flag-mu:": "\U0001f1f2\U0001f1fa", + ":flag-mv:": "\U0001f1f2\U0001f1fb", + ":flag-mw:": "\U0001f1f2\U0001f1fc", + ":flag-mx:": "\U0001f1f2\U0001f1fd", + ":flag-my:": "\U0001f1f2\U0001f1fe", + ":flag-mz:": "\U0001f1f2\U0001f1ff", + ":flag-na:": "\U0001f1f3\U0001f1e6", + ":flag-nc:": "\U0001f1f3\U0001f1e8", + ":flag-ne:": "\U0001f1f3\U0001f1ea", + ":flag-nf:": "\U0001f1f3\U0001f1eb", + ":flag-ng:": "\U0001f1f3\U0001f1ec", + ":flag-ni:": "\U0001f1f3\U0001f1ee", + ":flag-nl:": "\U0001f1f3\U0001f1f1", + ":flag-no:": "\U0001f1f3\U0001f1f4", + ":flag-np:": "\U0001f1f3\U0001f1f5", + ":flag-nr:": "\U0001f1f3\U0001f1f7", + ":flag-nu:": "\U0001f1f3\U0001f1fa", + ":flag-nz:": "\U0001f1f3\U0001f1ff", + ":flag-om:": "\U0001f1f4\U0001f1f2", + ":flag-pa:": "\U0001f1f5\U0001f1e6", + ":flag-pe:": "\U0001f1f5\U0001f1ea", + ":flag-pf:": "\U0001f1f5\U0001f1eb", + ":flag-pg:": "\U0001f1f5\U0001f1ec", + ":flag-ph:": "\U0001f1f5\U0001f1ed", + ":flag-pk:": "\U0001f1f5\U0001f1f0", + ":flag-pl:": "\U0001f1f5\U0001f1f1", + ":flag-pm:": "\U0001f1f5\U0001f1f2", + ":flag-pn:": "\U0001f1f5\U0001f1f3", + ":flag-pr:": "\U0001f1f5\U0001f1f7", + ":flag-ps:": "\U0001f1f5\U0001f1f8", + ":flag-pt:": "\U0001f1f5\U0001f1f9", + ":flag-pw:": "\U0001f1f5\U0001f1fc", + ":flag-py:": "\U0001f1f5\U0001f1fe", + ":flag-qa:": "\U0001f1f6\U0001f1e6", + ":flag-re:": "\U0001f1f7\U0001f1ea", + ":flag-ro:": "\U0001f1f7\U0001f1f4", + ":flag-rs:": "\U0001f1f7\U0001f1f8", + ":flag-rw:": "\U0001f1f7\U0001f1fc", + ":flag-sa:": "\U0001f1f8\U0001f1e6", + ":flag-sb:": "\U0001f1f8\U0001f1e7", + ":flag-sc:": "\U0001f1f8\U0001f1e8", + ":flag-scotland:": "\U0001f3f4\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f", + ":flag-sd:": "\U0001f1f8\U0001f1e9", + ":flag-se:": "\U0001f1f8\U0001f1ea", + ":flag-sg:": "\U0001f1f8\U0001f1ec", + ":flag-sh:": "\U0001f1f8\U0001f1ed", + ":flag-si:": "\U0001f1f8\U0001f1ee", + ":flag-sj:": "\U0001f1f8\U0001f1ef", + ":flag-sk:": "\U0001f1f8\U0001f1f0", + ":flag-sl:": "\U0001f1f8\U0001f1f1", + ":flag-sm:": "\U0001f1f8\U0001f1f2", + ":flag-sn:": "\U0001f1f8\U0001f1f3", + ":flag-so:": "\U0001f1f8\U0001f1f4", + ":flag-sr:": "\U0001f1f8\U0001f1f7", + ":flag-ss:": "\U0001f1f8\U0001f1f8", + ":flag-st:": "\U0001f1f8\U0001f1f9", + ":flag-sv:": "\U0001f1f8\U0001f1fb", + ":flag-sx:": "\U0001f1f8\U0001f1fd", + ":flag-sy:": "\U0001f1f8\U0001f1fe", + ":flag-sz:": "\U0001f1f8\U0001f1ff", + ":flag-ta:": "\U0001f1f9\U0001f1e6", + ":flag-tc:": "\U0001f1f9\U0001f1e8", + ":flag-td:": "\U0001f1f9\U0001f1e9", + ":flag-tf:": "\U0001f1f9\U0001f1eb", + ":flag-tg:": "\U0001f1f9\U0001f1ec", + ":flag-th:": "\U0001f1f9\U0001f1ed", + ":flag-tj:": "\U0001f1f9\U0001f1ef", + ":flag-tk:": "\U0001f1f9\U0001f1f0", + ":flag-tl:": "\U0001f1f9\U0001f1f1", + ":flag-tm:": "\U0001f1f9\U0001f1f2", + ":flag-tn:": "\U0001f1f9\U0001f1f3", + ":flag-to:": "\U0001f1f9\U0001f1f4", + ":flag-tr:": "\U0001f1f9\U0001f1f7", + ":flag-tt:": "\U0001f1f9\U0001f1f9", + ":flag-tv:": "\U0001f1f9\U0001f1fb", + ":flag-tw:": "\U0001f1f9\U0001f1fc", + ":flag-tz:": "\U0001f1f9\U0001f1ff", + ":flag-ua:": "\U0001f1fa\U0001f1e6", + ":flag-ug:": "\U0001f1fa\U0001f1ec", + ":flag-um:": "\U0001f1fa\U0001f1f2", + ":flag-un:": "\U0001f1fa\U0001f1f3", + ":flag-uy:": "\U0001f1fa\U0001f1fe", + ":flag-uz:": "\U0001f1fa\U0001f1ff", + ":flag-va:": "\U0001f1fb\U0001f1e6", + ":flag-vc:": "\U0001f1fb\U0001f1e8", + ":flag-ve:": "\U0001f1fb\U0001f1ea", + ":flag-vg:": "\U0001f1fb\U0001f1ec", + ":flag-vi:": "\U0001f1fb\U0001f1ee", + ":flag-vn:": "\U0001f1fb\U0001f1f3", + ":flag-vu:": "\U0001f1fb\U0001f1fa", + ":flag-wales:": "\U0001f3f4\U000e0067\U000e0062\U000e0077\U000e006c\U000e0073\U000e007f", + ":flag-wf:": "\U0001f1fc\U0001f1eb", + ":flag-ws:": "\U0001f1fc\U0001f1f8", + ":flag-xk:": "\U0001f1fd\U0001f1f0", + ":flag-ye:": "\U0001f1fe\U0001f1ea", + ":flag-yt:": "\U0001f1fe\U0001f1f9", + ":flag-za:": "\U0001f1ff\U0001f1e6", + ":flag-zm:": "\U0001f1ff\U0001f1f2", + ":flag-zw:": "\U0001f1ff\U0001f1fc", + ":flag_Afghanistan:": "\U0001f1e6\U0001f1eb", + ":flag_Albania:": "\U0001f1e6\U0001f1f1", + ":flag_Algeria:": "\U0001f1e9\U0001f1ff", + ":flag_American_Samoa:": "\U0001f1e6\U0001f1f8", + ":flag_Andorra:": "\U0001f1e6\U0001f1e9", + ":flag_Angola:": "\U0001f1e6\U0001f1f4", + ":flag_Anguilla:": "\U0001f1e6\U0001f1ee", + ":flag_Antarctica:": "\U0001f1e6\U0001f1f6", + ":flag_Antigua_&_Barbuda:": "\U0001f1e6\U0001f1ec", + ":flag_Argentina:": "\U0001f1e6\U0001f1f7", + ":flag_Armenia:": "\U0001f1e6\U0001f1f2", + ":flag_Aruba:": "\U0001f1e6\U0001f1fc", + ":flag_Ascension_Island:": "\U0001f1e6\U0001f1e8", + ":flag_Australia:": "\U0001f1e6\U0001f1fa", + ":flag_Austria:": "\U0001f1e6\U0001f1f9", + ":flag_Azerbaijan:": "\U0001f1e6\U0001f1ff", + ":flag_Bahamas:": "\U0001f1e7\U0001f1f8", + ":flag_Bahrain:": "\U0001f1e7\U0001f1ed", + ":flag_Bangladesh:": "\U0001f1e7\U0001f1e9", + ":flag_Barbados:": "\U0001f1e7\U0001f1e7", + ":flag_Belarus:": "\U0001f1e7\U0001f1fe", + ":flag_Belgium:": "\U0001f1e7\U0001f1ea", + ":flag_Belize:": "\U0001f1e7\U0001f1ff", + ":flag_Benin:": "\U0001f1e7\U0001f1ef", + ":flag_Bermuda:": "\U0001f1e7\U0001f1f2", + ":flag_Bhutan:": "\U0001f1e7\U0001f1f9", + ":flag_Bolivia:": "\U0001f1e7\U0001f1f4", + ":flag_Bosnia_&_Herzegovina:": "\U0001f1e7\U0001f1e6", + ":flag_Botswana:": "\U0001f1e7\U0001f1fc", + ":flag_Bouvet_Island:": "\U0001f1e7\U0001f1fb", + ":flag_Brazil:": "\U0001f1e7\U0001f1f7", + ":flag_British_Indian_Ocean_Territory:": "\U0001f1ee\U0001f1f4", + ":flag_British_Virgin_Islands:": "\U0001f1fb\U0001f1ec", + ":flag_Brunei:": "\U0001f1e7\U0001f1f3", + ":flag_Bulgaria:": "\U0001f1e7\U0001f1ec", + ":flag_Burkina_Faso:": "\U0001f1e7\U0001f1eb", + ":flag_Burundi:": "\U0001f1e7\U0001f1ee", + ":flag_Cambodia:": "\U0001f1f0\U0001f1ed", + ":flag_Cameroon:": "\U0001f1e8\U0001f1f2", + ":flag_Canada:": "\U0001f1e8\U0001f1e6", + ":flag_Canary_Islands:": "\U0001f1ee\U0001f1e8", + ":flag_Cape_Verde:": "\U0001f1e8\U0001f1fb", + ":flag_Caribbean_Netherlands:": "\U0001f1e7\U0001f1f6", + ":flag_Cayman_Islands:": "\U0001f1f0\U0001f1fe", + ":flag_Central_African_Republic:": "\U0001f1e8\U0001f1eb", + ":flag_Ceuta_&_Melilla:": "\U0001f1ea\U0001f1e6", + ":flag_Chad:": "\U0001f1f9\U0001f1e9", + ":flag_Chile:": "\U0001f1e8\U0001f1f1", + ":flag_China:": "\U0001f1e8\U0001f1f3", + ":flag_Christmas_Island:": "\U0001f1e8\U0001f1fd", + ":flag_Clipperton_Island:": "\U0001f1e8\U0001f1f5", + ":flag_Cocos_(Keeling)_Islands:": "\U0001f1e8\U0001f1e8", + ":flag_Colombia:": "\U0001f1e8\U0001f1f4", + ":flag_Comoros:": "\U0001f1f0\U0001f1f2", + ":flag_Congo_-_Brazzaville:": "\U0001f1e8\U0001f1ec", + ":flag_Congo_-_Kinshasa:": "\U0001f1e8\U0001f1e9", + ":flag_Cook_Islands:": "\U0001f1e8\U0001f1f0", + ":flag_Costa_Rica:": "\U0001f1e8\U0001f1f7", + ":flag_Croatia:": "\U0001f1ed\U0001f1f7", + ":flag_Cuba:": "\U0001f1e8\U0001f1fa", + ":flag_Curaçao:": "\U0001f1e8\U0001f1fc", + ":flag_Cyprus:": "\U0001f1e8\U0001f1fe", + ":flag_Czechia:": "\U0001f1e8\U0001f1ff", + ":flag_Côte_d’Ivoire:": "\U0001f1e8\U0001f1ee", + ":flag_Denmark:": "\U0001f1e9\U0001f1f0", + ":flag_Diego_Garcia:": "\U0001f1e9\U0001f1ec", + ":flag_Djibouti:": "\U0001f1e9\U0001f1ef", + ":flag_Dominica:": "\U0001f1e9\U0001f1f2", + ":flag_Dominican_Republic:": "\U0001f1e9\U0001f1f4", + ":flag_Ecuador:": "\U0001f1ea\U0001f1e8", + ":flag_Egypt:": "\U0001f1ea\U0001f1ec", + ":flag_El_Salvador:": "\U0001f1f8\U0001f1fb", + ":flag_England:": "\U0001f3f4\U000e0067\U000e0062\U000e0065\U000e006e\U000e0067\U000e007f", + ":flag_Equatorial_Guinea:": "\U0001f1ec\U0001f1f6", + ":flag_Eritrea:": "\U0001f1ea\U0001f1f7", + ":flag_Estonia:": "\U0001f1ea\U0001f1ea", + ":flag_Eswatini:": "\U0001f1f8\U0001f1ff", + ":flag_Ethiopia:": "\U0001f1ea\U0001f1f9", + ":flag_European_Union:": "\U0001f1ea\U0001f1fa", + ":flag_Falkland_Islands:": "\U0001f1eb\U0001f1f0", + ":flag_Faroe_Islands:": "\U0001f1eb\U0001f1f4", + ":flag_Fiji:": "\U0001f1eb\U0001f1ef", + ":flag_Finland:": "\U0001f1eb\U0001f1ee", + ":flag_France:": "\U0001f1eb\U0001f1f7", + ":flag_French_Guiana:": "\U0001f1ec\U0001f1eb", + ":flag_French_Polynesia:": "\U0001f1f5\U0001f1eb", + ":flag_French_Southern_Territories:": "\U0001f1f9\U0001f1eb", + ":flag_Gabon:": "\U0001f1ec\U0001f1e6", + ":flag_Gambia:": "\U0001f1ec\U0001f1f2", + ":flag_Georgia:": "\U0001f1ec\U0001f1ea", + ":flag_Germany:": "\U0001f1e9\U0001f1ea", + ":flag_Ghana:": "\U0001f1ec\U0001f1ed", + ":flag_Gibraltar:": "\U0001f1ec\U0001f1ee", + ":flag_Greece:": "\U0001f1ec\U0001f1f7", + ":flag_Greenland:": "\U0001f1ec\U0001f1f1", + ":flag_Grenada:": "\U0001f1ec\U0001f1e9", + ":flag_Guadeloupe:": "\U0001f1ec\U0001f1f5", + ":flag_Guam:": "\U0001f1ec\U0001f1fa", + ":flag_Guatemala:": "\U0001f1ec\U0001f1f9", + ":flag_Guernsey:": "\U0001f1ec\U0001f1ec", + ":flag_Guinea:": "\U0001f1ec\U0001f1f3", + ":flag_Guinea-Bissau:": "\U0001f1ec\U0001f1fc", + ":flag_Guyana:": "\U0001f1ec\U0001f1fe", + ":flag_Haiti:": "\U0001f1ed\U0001f1f9", + ":flag_Heard_&_McDonald_Islands:": "\U0001f1ed\U0001f1f2", + ":flag_Honduras:": "\U0001f1ed\U0001f1f3", + ":flag_Hong_Kong_SAR_China:": "\U0001f1ed\U0001f1f0", + ":flag_Hungary:": "\U0001f1ed\U0001f1fa", + ":flag_Iceland:": "\U0001f1ee\U0001f1f8", + ":flag_India:": "\U0001f1ee\U0001f1f3", + ":flag_Indonesia:": "\U0001f1ee\U0001f1e9", + ":flag_Iran:": "\U0001f1ee\U0001f1f7", + ":flag_Iraq:": "\U0001f1ee\U0001f1f6", + ":flag_Ireland:": "\U0001f1ee\U0001f1ea", + ":flag_Isle_of_Man:": "\U0001f1ee\U0001f1f2", + ":flag_Israel:": "\U0001f1ee\U0001f1f1", + ":flag_Italy:": "\U0001f1ee\U0001f1f9", + ":flag_Jamaica:": "\U0001f1ef\U0001f1f2", + ":flag_Japan:": "\U0001f1ef\U0001f1f5", + ":flag_Jersey:": "\U0001f1ef\U0001f1ea", + ":flag_Jordan:": "\U0001f1ef\U0001f1f4", + ":flag_Kazakhstan:": "\U0001f1f0\U0001f1ff", + ":flag_Kenya:": "\U0001f1f0\U0001f1ea", + ":flag_Kiribati:": "\U0001f1f0\U0001f1ee", + ":flag_Kosovo:": "\U0001f1fd\U0001f1f0", + ":flag_Kuwait:": "\U0001f1f0\U0001f1fc", + ":flag_Kyrgyzstan:": "\U0001f1f0\U0001f1ec", + ":flag_Laos:": "\U0001f1f1\U0001f1e6", + ":flag_Latvia:": "\U0001f1f1\U0001f1fb", + ":flag_Lebanon:": "\U0001f1f1\U0001f1e7", + ":flag_Lesotho:": "\U0001f1f1\U0001f1f8", + ":flag_Liberia:": "\U0001f1f1\U0001f1f7", + ":flag_Libya:": "\U0001f1f1\U0001f1fe", + ":flag_Liechtenstein:": "\U0001f1f1\U0001f1ee", + ":flag_Lithuania:": "\U0001f1f1\U0001f1f9", + ":flag_Luxembourg:": "\U0001f1f1\U0001f1fa", + ":flag_Macao_SAR_China:": "\U0001f1f2\U0001f1f4", + ":flag_Madagascar:": "\U0001f1f2\U0001f1ec", + ":flag_Malawi:": "\U0001f1f2\U0001f1fc", + ":flag_Malaysia:": "\U0001f1f2\U0001f1fe", + ":flag_Maldives:": "\U0001f1f2\U0001f1fb", + ":flag_Mali:": "\U0001f1f2\U0001f1f1", + ":flag_Malta:": "\U0001f1f2\U0001f1f9", + ":flag_Marshall_Islands:": "\U0001f1f2\U0001f1ed", + ":flag_Martinique:": "\U0001f1f2\U0001f1f6", + ":flag_Mauritania:": "\U0001f1f2\U0001f1f7", + ":flag_Mauritius:": "\U0001f1f2\U0001f1fa", + ":flag_Mayotte:": "\U0001f1fe\U0001f1f9", + ":flag_Mexico:": "\U0001f1f2\U0001f1fd", + ":flag_Micronesia:": "\U0001f1eb\U0001f1f2", + ":flag_Moldova:": "\U0001f1f2\U0001f1e9", + ":flag_Monaco:": "\U0001f1f2\U0001f1e8", + ":flag_Mongolia:": "\U0001f1f2\U0001f1f3", + ":flag_Montenegro:": "\U0001f1f2\U0001f1ea", + ":flag_Montserrat:": "\U0001f1f2\U0001f1f8", + ":flag_Morocco:": "\U0001f1f2\U0001f1e6", + ":flag_Mozambique:": "\U0001f1f2\U0001f1ff", + ":flag_Myanmar_(Burma):": "\U0001f1f2\U0001f1f2", + ":flag_Namibia:": "\U0001f1f3\U0001f1e6", + ":flag_Nauru:": "\U0001f1f3\U0001f1f7", + ":flag_Nepal:": "\U0001f1f3\U0001f1f5", + ":flag_Netherlands:": "\U0001f1f3\U0001f1f1", + ":flag_New_Caledonia:": "\U0001f1f3\U0001f1e8", + ":flag_New_Zealand:": "\U0001f1f3\U0001f1ff", + ":flag_Nicaragua:": "\U0001f1f3\U0001f1ee", + ":flag_Niger:": "\U0001f1f3\U0001f1ea", + ":flag_Nigeria:": "\U0001f1f3\U0001f1ec", + ":flag_Niue:": "\U0001f1f3\U0001f1fa", + ":flag_Norfolk_Island:": "\U0001f1f3\U0001f1eb", + ":flag_North_Korea:": "\U0001f1f0\U0001f1f5", + ":flag_North_Macedonia:": "\U0001f1f2\U0001f1f0", + ":flag_Northern_Mariana_Islands:": "\U0001f1f2\U0001f1f5", + ":flag_Norway:": "\U0001f1f3\U0001f1f4", + ":flag_Oman:": "\U0001f1f4\U0001f1f2", + ":flag_Pakistan:": "\U0001f1f5\U0001f1f0", + ":flag_Palau:": "\U0001f1f5\U0001f1fc", + ":flag_Palestinian_Territories:": "\U0001f1f5\U0001f1f8", + ":flag_Panama:": "\U0001f1f5\U0001f1e6", + ":flag_Papua_New_Guinea:": "\U0001f1f5\U0001f1ec", + ":flag_Paraguay:": "\U0001f1f5\U0001f1fe", + ":flag_Peru:": "\U0001f1f5\U0001f1ea", + ":flag_Philippines:": "\U0001f1f5\U0001f1ed", + ":flag_Pitcairn_Islands:": "\U0001f1f5\U0001f1f3", + ":flag_Poland:": "\U0001f1f5\U0001f1f1", + ":flag_Portugal:": "\U0001f1f5\U0001f1f9", + ":flag_Puerto_Rico:": "\U0001f1f5\U0001f1f7", + ":flag_Qatar:": "\U0001f1f6\U0001f1e6", + ":flag_Romania:": "\U0001f1f7\U0001f1f4", + ":flag_Russia:": "\U0001f1f7\U0001f1fa", + ":flag_Rwanda:": "\U0001f1f7\U0001f1fc", + ":flag_Réunion:": "\U0001f1f7\U0001f1ea", + ":flag_Samoa:": "\U0001f1fc\U0001f1f8", + ":flag_San_Marino:": "\U0001f1f8\U0001f1f2", + ":flag_Saudi_Arabia:": "\U0001f1f8\U0001f1e6", + ":flag_Scotland:": "\U0001f3f4\U000e0067\U000e0062\U000e0073\U000e0063\U000e0074\U000e007f", + ":flag_Senegal:": "\U0001f1f8\U0001f1f3", + ":flag_Serbia:": "\U0001f1f7\U0001f1f8", + ":flag_Seychelles:": "\U0001f1f8\U0001f1e8", + ":flag_Sierra_Leone:": "\U0001f1f8\U0001f1f1", + ":flag_Singapore:": "\U0001f1f8\U0001f1ec", + ":flag_Sint_Maarten:": "\U0001f1f8\U0001f1fd", + ":flag_Slovakia:": "\U0001f1f8\U0001f1f0", + ":flag_Slovenia:": "\U0001f1f8\U0001f1ee", + ":flag_Solomon_Islands:": "\U0001f1f8\U0001f1e7", + ":flag_Somalia:": "\U0001f1f8\U0001f1f4", + ":flag_South_Africa:": "\U0001f1ff\U0001f1e6", ":flag_South_Georgia_&_South_Sandwich_Islands:": "\U0001f1ec\U0001f1f8", ":flag_South_Korea:": "\U0001f1f0\U0001f1f7", ":flag_South_Sudan:": "\U0001f1f8\U0001f1f8", @@ -1973,6 +1985,7 @@ func emojiCode() map[string]string { ":hammer_and_pick:": "\u2692\ufe0f", ":hammer_and_wrench:": "\U0001f6e0\ufe0f", ":hammer_pick:": "\u2692", + ":hamsa:": "\U0001faac", ":hamster:": "\U0001f439", ":hand:": "\u270b", ":hand_over_mouth:": "\U0001f92d", @@ -1982,39 +1995,42 @@ func emojiCode() map[string]string { ":hand_splayed_tone4:": "\U0001f590\U0001f3fe", ":hand_splayed_tone5:": "\U0001f590\U0001f3ff", ":hand_with_fingers_splayed:": "\U0001f590", - ":handbag:": "\U0001f45c", - ":handball:": "\U0001f93e", - ":handball_person:": "\U0001f93e", - ":handshake:": "\U0001f91d", - ":hankey:": "\U0001f4a9", - ":hash:": "#\ufe0f\u20e3", - ":hatched_chick:": "\U0001f425", - ":hatching_chick:": "\U0001f423", - ":head_bandage:": "\U0001f915", - ":headphone:": "\U0001f3a7", - ":headphones:": "\U0001f3a7", - ":headstone:": "\U0001faa6", - ":health_worker:": "\U0001f9d1\u200d\u2695\ufe0f", - ":hear-no-evil_monkey:": "\U0001f649", - ":hear_no_evil:": "\U0001f649", - ":heard_mcdonald_islands:": "\U0001f1ed\U0001f1f2", - ":heart:": "\u2764\ufe0f", - ":heart_decoration:": "\U0001f49f", - ":heart_exclamation:": "\u2763", - ":heart_eyes:": "\U0001f60d", - ":heart_eyes_cat:": "\U0001f63b", - ":heart_on_fire:": "\u2764\ufe0f\u200d\U0001f525", - ":heart_suit:": "\u2665", - ":heart_with_arrow:": "\U0001f498", - ":heart_with_ribbon:": "\U0001f49d", - ":heartbeat:": "\U0001f493", - ":heartpulse:": "\U0001f497", - ":hearts:": "\u2665\ufe0f", - ":heavy_check_mark:": "\u2714\ufe0f", - ":heavy_division_sign:": "\u2797", - ":heavy_dollar_sign:": "\U0001f4b2", - ":heavy_exclamation_mark:": "\u2757", - ":heavy_heart_exclamation:": "\u2763\ufe0f", + ":hand_with_index_finger_and_thumb_crossed:": "\U0001faf0", + ":handbag:": "\U0001f45c", + ":handball:": "\U0001f93e", + ":handball_person:": "\U0001f93e", + ":handshake:": "\U0001f91d", + ":hankey:": "\U0001f4a9", + ":hash:": "#\ufe0f\u20e3", + ":hatched_chick:": "\U0001f425", + ":hatching_chick:": "\U0001f423", + ":head_bandage:": "\U0001f915", + ":headphone:": "\U0001f3a7", + ":headphones:": "\U0001f3a7", + ":headstone:": "\U0001faa6", + ":health_worker:": "\U0001f9d1\u200d\u2695\ufe0f", + ":hear-no-evil_monkey:": "\U0001f649", + ":hear_no_evil:": "\U0001f649", + ":heard_mcdonald_islands:": "\U0001f1ed\U0001f1f2", + ":heart:": "\u2764\ufe0f", + ":heart_decoration:": "\U0001f49f", + ":heart_exclamation:": "\u2763", + ":heart_eyes:": "\U0001f60d", + ":heart_eyes_cat:": "\U0001f63b", + ":heart_hands:": "\U0001faf6", + ":heart_on_fire:": "\u2764\ufe0f\u200d\U0001f525", + ":heart_suit:": "\u2665", + ":heart_with_arrow:": "\U0001f498", + ":heart_with_ribbon:": "\U0001f49d", + ":heartbeat:": "\U0001f493", + ":heartpulse:": "\U0001f497", + ":hearts:": "\u2665\ufe0f", + ":heavy_check_mark:": "\u2714\ufe0f", + ":heavy_division_sign:": "\u2797", + ":heavy_dollar_sign:": "\U0001f4b2", + ":heavy_equals_sign:": "\U0001f7f0", + ":heavy_exclamation_mark:": "\u2757", + ":heavy_heart_exclamation:": "\u2763\ufe0f", ":heavy_heart_exclamation_mark_ornament:": "\u2763\ufe0f", ":heavy_minus_sign:": "\u2796", ":heavy_multiplication_x:": "\u2716\ufe0f", @@ -2088,10 +2104,12 @@ func emojiCode() map[string]string { ":icecream:": "\U0001f366", ":iceland:": "\U0001f1ee\U0001f1f8", ":id:": "\U0001f194", + ":identification_card:": "\U0001faaa", ":ideograph_advantage:": "\U0001f250", ":imp:": "\U0001f47f", ":inbox_tray:": "\U0001f4e5", ":incoming_envelope:": "\U0001f4e8", + ":index_pointing_at_the_viewer:": "\U0001faf5", ":index_pointing_up:": "\u261d", ":india:": "\U0001f1ee\U0001f1f3", ":indonesia:": "\U0001f1ee\U0001f1e9", @@ -2122,6 +2140,7 @@ func emojiCode() map[string]string { ":japanese_castle:": "\U0001f3ef", ":japanese_goblin:": "\U0001f47a", ":japanese_ogre:": "\U0001f479", + ":jar:": "\U0001fad9", ":jeans:": "\U0001f456", ":jersey:": "\U0001f1ef\U0001f1ea", ":jigsaw:": "\U0001f9e9", @@ -2184,7 +2203,6 @@ func emojiCode() map[string]string { ":kneeling_woman:": "\U0001f9ce\u200d\u2640\ufe0f", ":knife:": "\U0001f52a", ":knife_fork_plate:": "\U0001f37d\ufe0f", - ":knocked-out_face:": "\U0001f635", ":knot:": "\U0001faa2", ":koala:": "\U0001f428", ":koko:": "\U0001f201", @@ -2242,6 +2260,7 @@ func emojiCode() map[string]string { ":left_right_arrow:": "\u2194\ufe0f", ":left_speech_bubble:": "\U0001f5e8\ufe0f", ":leftwards_arrow_with_hook:": "\u21a9\ufe0f", + ":leftwards_hand:": "\U0001faf2", ":leg:": "\U0001f9b5", ":lemon:": "\U0001f34b", ":leo:": "\u264c", @@ -2276,6 +2295,7 @@ func emojiCode() map[string]string { ":long_drum:": "\U0001fa98", ":loop:": "\u27bf", ":lotion_bottle:": "\U0001f9f4", + ":lotus:": "\U0001fab7", ":lotus_position:": "\U0001f9d8", ":lotus_position_man:": "\U0001f9d8\u200d\u2642\ufe0f", ":lotus_position_woman:": "\U0001f9d8\u200d\u2640\ufe0f", @@ -2291,6 +2311,7 @@ func emojiCode() map[string]string { ":love_you_gesture_tone3:": "\U0001f91f\U0001f3fd", ":love_you_gesture_tone4:": "\U0001f91f\U0001f3fe", ":love_you_gesture_tone5:": "\U0001f91f\U0001f3ff", + ":low_battery:": "\U0001faab", ":low_brightness:": "\U0001f505", ":lower_left_ballpoint_pen:": "\U0001f58a\ufe0f", ":lower_left_crayon:": "\U0001f58d\ufe0f", @@ -2399,7 +2420,6 @@ func emojiCode() map[string]string { ":man-tipping-hand:": "\U0001f481\u200d\u2642\ufe0f", ":man-walking:": "\U0001f6b6\u200d\u2642\ufe0f", ":man-wearing-turban:": "\U0001f473\u200d\u2642\ufe0f", - ":man-with-bunny-ears-partying:": "\U0001f46f\u200d\u2642\ufe0f", ":man-woman-boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f466", ":man-woman-boy-boy:": "\U0001f468\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", ":man-woman-girl:": "\U0001f468\u200d\U0001f469\u200d\U0001f467", @@ -2765,6 +2785,7 @@ func emojiCode() map[string]string { ":man_wearing_turban_tone4:": "\U0001f473\U0001f3fe\u200d\u2642\ufe0f", ":man_wearing_turban_tone5:": "\U0001f473\U0001f3ff\u200d\u2642\ufe0f", ":man_white_hair:": "\U0001f468\u200d\U0001f9b3", + ":man_with_beard:": "\U0001f9d4\u200d\u2642\ufe0f", ":man_with_chinese_cap:": "\U0001f472", ":man_with_chinese_cap_tone1:": "\U0001f472\U0001f3fb", ":man_with_chinese_cap_tone2:": "\U0001f472\U0001f3fc", @@ -2809,7 +2830,9 @@ func emojiCode() map[string]string { ":mega:": "\U0001f4e3", ":megaphone:": "\U0001f4e3", ":melon:": "\U0001f348", + ":melting_face:": "\U0001fae0", ":memo:": "\U0001f4dd", + ":men-with-bunny-ears-partying:": "\U0001f46f\u200d\u2642\ufe0f", ":men_holding_hands:": "\U0001f46c", ":men_with_bunny_ears:": "\U0001f46f\u200d\u2642\ufe0f", ":men_with_bunny_ears_partying:": "\U0001f46f\u200d\u2642\ufe0f", @@ -2865,6 +2888,7 @@ func emojiCode() map[string]string { ":minidisc:": "\U0001f4bd", ":minus:": "\u2796", ":mirror:": "\U0001fa9e", + ":mirror_ball:": "\U0001faa9", ":moai:": "\U0001f5ff", ":mobile_phone:": "\U0001f4f1", ":mobile_phone_off:": "\U0001f4f4", @@ -2955,6 +2979,7 @@ func emojiCode() map[string]string { ":nepal:": "\U0001f1f3\U0001f1f5", ":nerd:": "\U0001f913", ":nerd_face:": "\U0001f913", + ":nest_with_eggs:": "\U0001faba", ":nesting_dolls:": "\U0001fa86", ":netherlands:": "\U0001f1f3\U0001f1f1", ":neutral_face:": "\U0001f610", @@ -3103,7 +3128,9 @@ func emojiCode() map[string]string { ":pakistan:": "\U0001f1f5\U0001f1f0", ":palau:": "\U0001f1f5\U0001f1fc", ":palestinian_territories:": "\U0001f1f5\U0001f1f8", + ":palm_down_hand:": "\U0001faf3", ":palm_tree:": "\U0001f334", + ":palm_up_hand:": "\U0001faf4", ":palms_up_together:": "\U0001f932", ":palms_up_together_tone1:": "\U0001f932\U0001f3fb", ":palms_up_together_tone2:": "\U0001f932\U0001f3fc", @@ -3355,6 +3382,7 @@ func emojiCode() map[string]string { ":person_white_hair:": "\U0001f9d1\u200d\U0001f9b3", ":person_with_ball:": "\u26f9\ufe0f\u200d\u2642\ufe0f", ":person_with_blond_hair:": "\U0001f471\u200d\u2642\ufe0f", + ":person_with_crown:": "\U0001fac5", ":person_with_headscarf:": "\U0001f9d5", ":person_with_pouting_face:": "\U0001f64e\u200d\u2640\ufe0f", ":person_with_probing_cane:": "\U0001f9d1\u200d\U0001f9af", @@ -3393,6 +3421,7 @@ func emojiCode() map[string]string { ":play_button:": "\u25b6", ":play_or_pause_button:": "\u23ef", ":play_pause:": "\u23ef", + ":playground_slide:": "\U0001f6dd", ":pleading_face:": "\U0001f97a", ":plunger:": "\U0001faa0", ":plus:": "\u2795", @@ -3454,6 +3483,7 @@ func emojiCode() map[string]string { ":poultry_leg:": "\U0001f357", ":pound:": "\U0001f4b7", ":pound_banknote:": "\U0001f4b7", + ":pouring_liquid:": "\U0001fad7", ":pout:": "\U0001f621", ":pouting_cat:": "\U0001f63e", ":pouting_face:": "\U0001f621", @@ -3466,6 +3496,8 @@ func emojiCode() map[string]string { ":pray_tone4:": "\U0001f64f\U0001f3fe", ":pray_tone5:": "\U0001f64f\U0001f3ff", ":prayer_beads:": "\U0001f4ff", + ":pregnant_man:": "\U0001fac3", + ":pregnant_person:": "\U0001fac4", ":pregnant_woman:": "\U0001f930", ":pregnant_woman_tone1:": "\U0001f930\U0001f3fb", ":pregnant_woman_tone2:": "\U0001f930\U0001f3fc", @@ -3608,7 +3640,9 @@ func emojiCode() map[string]string { ":right_facing_fist_tone3:": "\U0001f91c\U0001f3fd", ":right_facing_fist_tone4:": "\U0001f91c\U0001f3fe", ":right_facing_fist_tone5:": "\U0001f91c\U0001f3ff", + ":rightwards_hand:": "\U0001faf1", ":ring:": "\U0001f48d", + ":ring_buoy:": "\U0001f6df", ":ringed_planet:": "\U0001fa90", ":roasted_sweet_potato:": "\U0001f360", ":robot:": "\U0001f916", @@ -3652,6 +3686,7 @@ func emojiCode() map[string]string { ":sake:": "\U0001f376", ":salad:": "\U0001f957", ":salt:": "\U0001f9c2", + ":saluting_face:": "\U0001fae1", ":samoa:": "\U0001f1fc\U0001f1f8", ":san_marino:": "\U0001f1f8\U0001f1f2", ":sandal:": "\U0001f461", @@ -3792,6 +3827,7 @@ func emojiCode() map[string]string { ":smiling_face_with_heart-eyes:": "\U0001f60d", ":smiling_face_with_hearts:": "\U0001f970", ":smiling_face_with_horns:": "\U0001f608", + ":smiling_face_with_open_hands:": "\U0001f917", ":smiling_face_with_smiling_eyes:": "\U0001f60a", ":smiling_face_with_sunglasses:": "\U0001f60e", ":smiling_face_with_tear:": "\U0001f972", @@ -4058,6 +4094,7 @@ func emojiCode() map[string]string { ":trinidad_tobago:": "\U0001f1f9\U0001f1f9", ":tristan_da_cunha:": "\U0001f1f9\U0001f1e6", ":triumph:": "\U0001f624", + ":troll:": "\U0001f9cc", ":trolleybus:": "\U0001f68e", ":trophy:": "\U0001f3c6", ":tropical_drink:": "\U0001f379", @@ -4205,6 +4242,7 @@ func emojiCode() map[string]string { ":western_sahara:": "\U0001f1ea\U0001f1ed", ":whale:": "\U0001f433", ":whale2:": "\U0001f40b", + ":wheel:": "\U0001f6de", ":wheel_of_dharma:": "\u2638\ufe0f", ":wheelchair:": "\u267f", ":wheelchair_symbol:": "\u267f", @@ -4277,7 +4315,6 @@ func emojiCode() map[string]string { ":woman-tipping-hand:": "\U0001f481\u200d\u2640\ufe0f", ":woman-walking:": "\U0001f6b6\u200d\u2640\ufe0f", ":woman-wearing-turban:": "\U0001f473\u200d\u2640\ufe0f", - ":woman-with-bunny-ears-partying:": "\U0001f46f\u200d\u2640\ufe0f", ":woman-woman-boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f466", ":woman-woman-boy-boy:": "\U0001f469\u200d\U0001f469\u200d\U0001f466\u200d\U0001f466", ":woman-woman-girl:": "\U0001f469\u200d\U0001f469\u200d\U0001f467", @@ -4627,6 +4664,7 @@ func emojiCode() map[string]string { ":woman_wearing_turban_tone4:": "\U0001f473\U0001f3fe\u200d\u2640\ufe0f", ":woman_wearing_turban_tone5:": "\U0001f473\U0001f3ff\u200d\u2640\ufe0f", ":woman_white_hair:": "\U0001f469\u200d\U0001f9b3", + ":woman_with_beard:": "\U0001f9d4\u200d\u2640\ufe0f", ":woman_with_headscarf:": "\U0001f9d5", ":woman_with_headscarf_tone1:": "\U0001f9d5\U0001f3fb", ":woman_with_headscarf_tone2:": "\U0001f9d5\U0001f3fc", @@ -4645,6 +4683,7 @@ func emojiCode() map[string]string { ":woman’s_clothes:": "\U0001f45a", ":woman’s_hat:": "\U0001f452", ":woman’s_sandal:": "\U0001f461", + ":women-with-bunny-ears-partying:": "\U0001f46f\u200d\u2640\ufe0f", ":women_holding_hands:": "\U0001f46d", ":women_with_bunny_ears:": "\U0001f46f\u200d\u2640\ufe0f", ":women_with_bunny_ears_partying:": "\U0001f46f\u200d\u2640\ufe0f", @@ -4668,6 +4707,7 @@ func emojiCode() map[string]string { ":writing_hand_tone4:": "\u270d\U0001f3fe", ":writing_hand_tone5:": "\u270d\U0001f3ff", ":x:": "\u274c", + ":x-ray:": "\U0001fa7b", ":yarn:": "\U0001f9f6", ":yawning_face:": "\U0001f971", ":yellow_circle:": "\U0001f7e1", @@ -5819,9 +5859,9 @@ func emojiRevCode() map[string][]string { "\U0001f469\u200d\u2695\ufe0f": {":female-doctor:", ":woman_health_worker:"}, "\U0001f469\u200d\u2696\ufe0f": {":woman_judge:", ":female-judge:"}, "\U0001f469\u200d\u2708\ufe0f": {":woman_pilot:", ":female-pilot:"}, - "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468": {":woman-heart-man:", ":couple_with_heart:", ":couple_with_heart_woman_man:"}, + "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f468": {":woman-heart-man:", ":couple_with_heart_woman_man:"}, "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f469": {":couple_ww:", ":woman-heart-woman:", ":couple_with_heart_woman_woman:"}, - "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468": {":couplekiss:", ":kiss_woman_man:", ":woman-kiss-man:", ":couplekiss_man_woman:"}, + "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f468": {":kiss_woman_man:", ":woman-kiss-man:", ":couplekiss_man_woman:"}, "\U0001f469\u200d\u2764\ufe0f\u200d\U0001f48b\u200d\U0001f469": {":kiss_ww:", ":kiss_woman_woman:", ":woman-kiss-woman:", ":couplekiss_woman_woman:"}, "\U0001f46b": {":couple:", ":man_and_woman_holding_hands:", ":woman_and_man_holding_hands:"}, "\U0001f46c": {":men_holding_hands:", ":two_men_holding_hands:"}, @@ -5845,8 +5885,8 @@ func emojiRevCode() map[string][]string { "\U0001f46e\u200d\u2640\ufe0f": {":policewoman:", ":woman_police_officer:", ":female-police-officer:"}, "\U0001f46e\u200d\u2642\ufe0f": {":cop:", ":policeman:", ":man_police_officer:", ":male-police-officer:"}, "\U0001f46f": {":people_with_bunny_ears:", ":people_with_bunny_ears_partying:"}, - "\U0001f46f\u200d\u2640\ufe0f": {":dancers:", ":dancing_women:", ":women_with_bunny_ears:", ":woman-with-bunny-ears-partying:", ":women_with_bunny_ears_partying:"}, - "\U0001f46f\u200d\u2642\ufe0f": {":dancing_men:", ":men_with_bunny_ears:", ":man-with-bunny-ears-partying:", ":men_with_bunny_ears_partying:"}, + "\U0001f46f\u200d\u2640\ufe0f": {":dancers:", ":dancing_women:", ":women_with_bunny_ears:", ":women-with-bunny-ears-partying:", ":women_with_bunny_ears_partying:"}, + "\U0001f46f\u200d\u2642\ufe0f": {":dancing_men:", ":men_with_bunny_ears:", ":men-with-bunny-ears-partying:", ":men_with_bunny_ears_partying:"}, "\U0001f470": {":bride_with_veil:", ":person_with_veil:"}, "\U0001f470\U0001f3fb": {":bride_with_veil_tone1:"}, "\U0001f470\U0001f3fc": {":bride_with_veil_tone2:"}, @@ -6043,7 +6083,9 @@ func emojiRevCode() map[string][]string { "\U0001f48c": {":love_letter:"}, "\U0001f48d": {":ring:"}, "\U0001f48e": {":gem:", ":gem_stone:"}, + "\U0001f48f": {":couplekiss:"}, "\U0001f490": {":bouquet:"}, + "\U0001f491": {":couple_with_heart:"}, "\U0001f492": {":wedding:"}, "\U0001f493": {":heartbeat:", ":beating_heart:"}, "\U0001f494": {":broken_heart:"}, @@ -6417,7 +6459,7 @@ func emojiRevCode() map[string][]string { "\U0001f632": {":astonished:", ":astonished_face:"}, "\U0001f633": {":flushed:", ":flushed_face:"}, "\U0001f634": {":sleeping:", ":sleeping_face:"}, - "\U0001f635": {":dizzy_face:", ":knocked-out_face:"}, + "\U0001f635": {":dizzy_face:", ":face_with_crossed-out_eyes:"}, "\U0001f635\u200d\U0001f4ab": {":face_with_spiral_eyes:"}, "\U0001f636": {":no_mouth:", ":face_without_mouth:"}, "\U0001f636\u200d\U0001f32b\ufe0f": {":face_in_clouds:"}, @@ -6719,6 +6761,9 @@ func emojiRevCode() map[string][]string { "\U0001f6d5": {":hindu_temple:"}, "\U0001f6d6": {":hut:"}, "\U0001f6d7": {":elevator:"}, + "\U0001f6dd": {":playground_slide:"}, + "\U0001f6de": {":wheel:"}, + "\U0001f6df": {":ring_buoy:"}, "\U0001f6e0": {":tools:"}, "\U0001f6e0\ufe0f": {":hammer_and_wrench:"}, "\U0001f6e1\ufe0f": {":shield:"}, @@ -6757,6 +6802,7 @@ func emojiRevCode() map[string][]string { "\U0001f7e9": {":green_square:", ":large_green_square:"}, "\U0001f7ea": {":purple_square:", ":large_purple_square:"}, "\U0001f7eb": {":brown_square:", ":large_brown_square:"}, + "\U0001f7f0": {":heavy_equals_sign:"}, "\U0001f90c": {":pinched_fingers:"}, "\U0001f90d": {":white_heart:"}, "\U0001f90e": {":brown_heart:"}, @@ -6768,7 +6814,7 @@ func emojiRevCode() map[string][]string { "\U0001f914": {":thinking:", ":thinking_face:"}, "\U0001f915": {":head_bandage:", ":face_with_head-bandage:", ":face_with_head_bandage:"}, "\U0001f916": {":robot:", ":robot_face:"}, - "\U0001f917": {":hugs:", ":hugging:", ":hugging_face:"}, + "\U0001f917": {":hugs:", ":hugging:", ":hugging_face:", ":smiling_face_with_open_hands:"}, "\U0001f918": {":metal:", ":the_horns:", ":sign_of_the_horns:"}, "\U0001f918\U0001f3fb": {":metal_tone1:"}, "\U0001f918\U0001f3fc": {":metal_tone2:"}, @@ -7040,6 +7086,7 @@ func emojiRevCode() map[string][]string { "\U0001f976": {":cold_face:"}, "\U0001f977": {":ninja:"}, "\U0001f978": {":disguised_face:"}, + "\U0001f979": {":face_holding_back_tears:"}, "\U0001f97a": {":pleading_face:"}, "\U0001f97b": {":sari:"}, "\U0001f97c": {":lab_coat:"}, @@ -7126,6 +7173,7 @@ func emojiRevCode() map[string][]string { "\U0001f9c9": {":mate:", ":mate_drink:"}, "\U0001f9ca": {":ice:", ":ice_cube:"}, "\U0001f9cb": {":bubble_tea:"}, + "\U0001f9cc": {":troll:"}, "\U0001f9cd": {":person_standing:", ":standing_person:"}, "\U0001f9cd\u200d\u2640\ufe0f": {":standing_woman:", ":woman_standing:"}, "\U0001f9cd\u200d\u2642\ufe0f": {":man_standing:", ":standing_man:"}, @@ -7186,8 +7234,8 @@ func emojiRevCode() map[string][]string { "\U0001f9d4\U0001f3fd": {":bearded_person_tone3:"}, "\U0001f9d4\U0001f3fe": {":bearded_person_tone4:"}, "\U0001f9d4\U0001f3ff": {":bearded_person_tone5:"}, - "\U0001f9d4\u200d\u2640\ufe0f": {":woman_beard:"}, - "\U0001f9d4\u200d\u2642\ufe0f": {":man_beard:"}, + "\U0001f9d4\u200d\u2640\ufe0f": {":woman_beard:", ":woman_with_beard:"}, + "\U0001f9d4\u200d\u2642\ufe0f": {":man_beard:", ":man_with_beard:"}, "\U0001f9d5": {":woman_with_headscarf:", ":person_with_headscarf:"}, "\U0001f9d5\U0001f3fb": {":woman_with_headscarf_tone1:"}, "\U0001f9d5\U0001f3fc": {":woman_with_headscarf_tone2:"}, @@ -7377,6 +7425,8 @@ func emojiRevCode() map[string][]string { "\U0001fa78": {":drop_of_blood:"}, "\U0001fa79": {":adhesive_bandage:"}, "\U0001fa7a": {":stethoscope:"}, + "\U0001fa7b": {":x-ray:"}, + "\U0001fa7c": {":crutch:"}, "\U0001fa80": {":yo-yo:", ":yo_yo:"}, "\U0001fa81": {":kite:"}, "\U0001fa82": {":parachute:"}, @@ -7409,6 +7459,10 @@ func emojiRevCode() map[string][]string { "\U0001faa6": {":headstone:"}, "\U0001faa7": {":placard:"}, "\U0001faa8": {":rock:"}, + "\U0001faa9": {":mirror_ball:"}, + "\U0001faaa": {":identification_card:"}, + "\U0001faab": {":low_battery:"}, + "\U0001faac": {":hamsa:"}, "\U0001fab0": {":fly:"}, "\U0001fab1": {":worm:"}, "\U0001fab2": {":beetle:"}, @@ -7416,9 +7470,16 @@ func emojiRevCode() map[string][]string { "\U0001fab4": {":potted_plant:"}, "\U0001fab5": {":wood:"}, "\U0001fab6": {":feather:"}, + "\U0001fab7": {":lotus:"}, + "\U0001fab8": {":coral:"}, + "\U0001fab9": {":empty_nest:"}, + "\U0001faba": {":nest_with_eggs:"}, "\U0001fac0": {":anatomical_heart:"}, "\U0001fac1": {":lungs:"}, "\U0001fac2": {":people_hugging:"}, + "\U0001fac3": {":pregnant_man:"}, + "\U0001fac4": {":pregnant_person:"}, + "\U0001fac5": {":person_with_crown:"}, "\U0001fad0": {":blueberries:"}, "\U0001fad1": {":bell_pepper:"}, "\U0001fad2": {":olive:"}, @@ -7426,6 +7487,24 @@ func emojiRevCode() map[string][]string { "\U0001fad4": {":tamale:"}, "\U0001fad5": {":fondue:"}, "\U0001fad6": {":teapot:"}, + "\U0001fad7": {":pouring_liquid:"}, + "\U0001fad8": {":beans:"}, + "\U0001fad9": {":jar:"}, + "\U0001fae0": {":melting_face:"}, + "\U0001fae1": {":saluting_face:"}, + "\U0001fae2": {":face_with_open_eyes_and_hand_over_mouth:"}, + "\U0001fae3": {":face_with_peeking_eye:"}, + "\U0001fae4": {":face_with_diagonal_mouth:"}, + "\U0001fae5": {":dotted_line_face:"}, + "\U0001fae6": {":biting_lip:"}, + "\U0001fae7": {":bubbles:"}, + "\U0001faf0": {":hand_with_index_finger_and_thumb_crossed:"}, + "\U0001faf1": {":rightwards_hand:"}, + "\U0001faf2": {":leftwards_hand:"}, + "\U0001faf3": {":palm_down_hand:"}, + "\U0001faf4": {":palm_up_hand:"}, + "\U0001faf5": {":index_pointing_at_the_viewer:"}, + "\U0001faf6": {":heart_hands:"}, "\u00a9\ufe0f": {":copyright:"}, "\u00ae\ufe0f": {":registered:"}, "\u203c": {":double_exclamation_mark:"}, diff --git a/vendor/github.com/labstack/echo/v4/CHANGELOG.md b/vendor/github.com/labstack/echo/v4/CHANGELOG.md index 372ed13c..461ac89c 100644 --- a/vendor/github.com/labstack/echo/v4/CHANGELOG.md +++ b/vendor/github.com/labstack/echo/v4/CHANGELOG.md @@ -1,5 +1,26 @@ # Changelog +## v4.7.0 - 2022-03-01 + +**Enhancements** + +* Add JWT, KeyAuth, CSRF multivalue extractors [#2060](https://github.com/labstack/echo/pull/2060) +* Add LogErrorFunc to recover middleware [#2072](https://github.com/labstack/echo/pull/2072) +* Add support for HEAD method query params binding [#2027](https://github.com/labstack/echo/pull/2027) +* Improve filesystem support with echo.FileFS, echo.StaticFS, group.FileFS, group.StaticFS [#2064](https://github.com/labstack/echo/pull/2064) + +**Fixes** + +* Fix X-Real-IP bug, improve tests [#2007](https://github.com/labstack/echo/pull/2007) +* Minor syntax fixes [#1994](https://github.com/labstack/echo/pull/1994), [#2102](https://github.com/labstack/echo/pull/2102), [#2102](https://github.com/labstack/echo/pull/2102) + +**General** + +* Add cache-control and connection headers [#2103](https://github.com/labstack/echo/pull/2103) +* Add Retry-After header constant [#2078](https://github.com/labstack/echo/pull/2078) +* Upgrade `go` directive in `go.mod` to 1.17 [#2049](https://github.com/labstack/echo/pull/2049) +* Add Pagoda [#2077](https://github.com/labstack/echo/pull/2077) and Souin [#2069](https://github.com/labstack/echo/pull/2069) to 3rd-party middlewares in README + ## v4.6.3 - 2022-01-10 **Fixes** diff --git a/vendor/github.com/labstack/echo/v4/README.md b/vendor/github.com/labstack/echo/v4/README.md index 930cb034..8b2321f0 100644 --- a/vendor/github.com/labstack/echo/v4/README.md +++ b/vendor/github.com/labstack/echo/v4/README.md @@ -5,7 +5,6 @@ [![Go Report Card](https://goreportcard.com/badge/github.com/labstack/echo?style=flat-square)](https://goreportcard.com/report/github.com/labstack/echo) [![Build Status](http://img.shields.io/travis/labstack/echo.svg?style=flat-square)](https://travis-ci.org/labstack/echo) [![Codecov](https://img.shields.io/codecov/c/github/labstack/echo.svg?style=flat-square)](https://codecov.io/gh/labstack/echo) -[![Join the chat at https://gitter.im/labstack/echo](https://img.shields.io/badge/gitter-join%20chat-brightgreen.svg?style=flat-square)](https://gitter.im/labstack/echo) [![Forum](https://img.shields.io/badge/community-forum-00afd1.svg?style=flat-square)](https://github.com/labstack/echo/discussions) [![Twitter](https://img.shields.io/badge/twitter-@labstack-55acee.svg?style=flat-square)](https://twitter.com/labstack) [![License](http://img.shields.io/badge/license-mit-blue.svg?style=flat-square)](https://raw.githubusercontent.com/labstack/echo/master/LICENSE) @@ -92,10 +91,23 @@ func hello(c echo.Context) error { } ``` +# Third-party middlewares + +| Repository | Description | +|------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| +| [github.com/labstack/echo-contrib](https://github.com/labstack/echo-contrib) | (by Echo team) [casbin](https://github.com/casbin/casbin), [gorilla/sessions](https://github.com/gorilla/sessions), [jaegertracing](github.com/uber/jaeger-client-go), [prometheus](https://github.com/prometheus/client_golang/), [pprof](https://pkg.go.dev/net/http/pprof), [zipkin](https://github.com/openzipkin/zipkin-go) middlewares | +| [deepmap/oapi-codegen](https://github.com/deepmap/oapi-codegen) | Automatically generate RESTful API documentation with [OpenAPI](https://swagger.io/specification/) Client and Server Code Generator | +| [github.com/swaggo/echo-swagger](https://github.com/swaggo/echo-swagger) | Automatically generate RESTful API documentation with [Swagger](https://swagger.io/) 2.0. | +| [github.com/ziflex/lecho](https://github.com/ziflex/lecho) | [Zerolog](https://github.com/rs/zerolog) logging library wrapper for Echo logger interface. | +| [github.com/brpaz/echozap](https://github.com/brpaz/echozap) | Uber´s [Zap](https://github.com/uber-go/zap) logging library wrapper for Echo logger interface. | +| [github.com/darkweak/souin/plugins/echo](https://github.com/darkweak/souin/tree/master/plugins/echo) | HTTP cache system based on [Souin](https://github.com/darkweak/souin) to automatically get your endpoints cached. It supports some distributed and non-distributed storage systems depending your needs. | +| [github.com/mikestefanello/pagoda](https://github.com/mikestefanello/pagoda) | Rapid, easy full-stack web development starter kit built with Echo. + +Please send a PR to add your own library here. + ## Help - [Forum](https://github.com/labstack/echo/discussions) -- [Chat](https://gitter.im/labstack/echo) ## Contribute diff --git a/vendor/github.com/labstack/echo/v4/bind.go b/vendor/github.com/labstack/echo/v4/bind.go index fdf0524c..c841ca01 100644 --- a/vendor/github.com/labstack/echo/v4/bind.go +++ b/vendor/github.com/labstack/echo/v4/bind.go @@ -111,11 +111,11 @@ func (b *DefaultBinder) Bind(i interface{}, c Context) (err error) { if err := b.BindPathParams(c, i); err != nil { return err } - // Issue #1670 - Query params are binded only for GET/DELETE and NOT for usual request with body (POST/PUT/PATCH) - // Reasoning here is that parameters in query and bind destination struct could have UNEXPECTED matches and results due that. - // i.e. is `&id=1&lang=en` from URL same as `{"id":100,"lang":"de"}` request body and which one should have priority when binding. - // This HTTP method check restores pre v4.1.11 behavior and avoids different problems when query is mixed with body - if c.Request().Method == http.MethodGet || c.Request().Method == http.MethodDelete { + // Only bind query parameters for GET/DELETE/HEAD to avoid unexpected behavior with destination struct binding from body. + // For example a request URL `&id=1&lang=en` with body `{"id":100,"lang":"de"}` would lead to precedence issues. + // The HTTP method check restores pre-v4.1.11 behavior to avoid these problems (see issue #1670) + method := c.Request().Method + if method == http.MethodGet || method == http.MethodDelete || method == http.MethodHead { if err = b.BindQueryParams(c, i); err != nil { return err } diff --git a/vendor/github.com/labstack/echo/v4/context.go b/vendor/github.com/labstack/echo/v4/context.go index 91ab6e48..a4ecfadf 100644 --- a/vendor/github.com/labstack/echo/v4/context.go +++ b/vendor/github.com/labstack/echo/v4/context.go @@ -9,8 +9,6 @@ import ( "net" "net/http" "net/url" - "os" - "path/filepath" "strings" "sync" ) @@ -211,6 +209,13 @@ type ( ) const ( + // ContextKeyHeaderAllow is set by Router for getting value for `Allow` header in later stages of handler call chain. + // Allow header is mandatory for status 405 (method not found) and useful for OPTIONS method requests. + // It is added to context only when Router does not find matching method handler for request. + ContextKeyHeaderAllow = "echo_header_allow" +) + +const ( defaultMemory = 32 << 20 // 32 MB indexPage = "index.html" defaultIndent = " " @@ -562,29 +567,6 @@ func (c *context) Stream(code int, contentType string, r io.Reader) (err error) return } -func (c *context) File(file string) (err error) { - f, err := os.Open(file) - if err != nil { - return NotFoundHandler(c) - } - defer f.Close() - - fi, _ := f.Stat() - if fi.IsDir() { - file = filepath.Join(file, indexPage) - f, err = os.Open(file) - if err != nil { - return NotFoundHandler(c) - } - defer f.Close() - if fi, err = f.Stat(); err != nil { - return - } - } - http.ServeContent(c.Response(), c.Request(), fi.Name(), fi.ModTime(), f) - return -} - func (c *context) Attachment(file, name string) error { return c.contentDisposition(file, name, "attachment") } diff --git a/vendor/github.com/labstack/echo/v4/context_fs.go b/vendor/github.com/labstack/echo/v4/context_fs.go new file mode 100644 index 00000000..11ee84bc --- /dev/null +++ b/vendor/github.com/labstack/echo/v4/context_fs.go @@ -0,0 +1,33 @@ +//go:build !go1.16 +// +build !go1.16 + +package echo + +import ( + "net/http" + "os" + "path/filepath" +) + +func (c *context) File(file string) (err error) { + f, err := os.Open(file) + if err != nil { + return NotFoundHandler(c) + } + defer f.Close() + + fi, _ := f.Stat() + if fi.IsDir() { + file = filepath.Join(file, indexPage) + f, err = os.Open(file) + if err != nil { + return NotFoundHandler(c) + } + defer f.Close() + if fi, err = f.Stat(); err != nil { + return + } + } + http.ServeContent(c.Response(), c.Request(), fi.Name(), fi.ModTime(), f) + return +} diff --git a/vendor/github.com/labstack/echo/v4/context_fs_go1.16.go b/vendor/github.com/labstack/echo/v4/context_fs_go1.16.go new file mode 100644 index 00000000..c1c724af --- /dev/null +++ b/vendor/github.com/labstack/echo/v4/context_fs_go1.16.go @@ -0,0 +1,52 @@ +//go:build go1.16 +// +build go1.16 + +package echo + +import ( + "errors" + "io" + "io/fs" + "net/http" + "path/filepath" +) + +func (c *context) File(file string) error { + return fsFile(c, file, c.echo.Filesystem) +} + +// FileFS serves file from given file system. +// +// When dealing with `embed.FS` use `fs := echo.MustSubFS(fs, "rootDirectory") to create sub fs which uses necessary +// prefix for directory path. This is necessary as `//go:embed assets/images` embeds files with paths +// including `assets/images` as their prefix. +func (c *context) FileFS(file string, filesystem fs.FS) error { + return fsFile(c, file, filesystem) +} + +func fsFile(c Context, file string, filesystem fs.FS) error { + f, err := filesystem.Open(file) + if err != nil { + return ErrNotFound + } + defer f.Close() + + fi, _ := f.Stat() + if fi.IsDir() { + file = filepath.ToSlash(filepath.Join(file, indexPage)) // ToSlash is necessary for Windows. fs.Open and os.Open are different in that aspect. + f, err = filesystem.Open(file) + if err != nil { + return ErrNotFound + } + defer f.Close() + if fi, err = f.Stat(); err != nil { + return err + } + } + ff, ok := f.(io.ReadSeeker) + if !ok { + return errors.New("file does not implement io.ReadSeeker") + } + http.ServeContent(c.Response(), c.Request(), fi.Name(), fi.ModTime(), ff) + return nil +} diff --git a/vendor/github.com/labstack/echo/v4/echo.go b/vendor/github.com/labstack/echo/v4/echo.go index 1a60fb07..143f9ffe 100644 --- a/vendor/github.com/labstack/echo/v4/echo.go +++ b/vendor/github.com/labstack/echo/v4/echo.go @@ -47,9 +47,6 @@ import ( stdLog "log" "net" "net/http" - "net/url" - "os" - "path/filepath" "reflect" "runtime" "sync" @@ -66,6 +63,7 @@ import ( type ( // Echo is the top-level framework instance. Echo struct { + filesystem common // startupMutex is mutex to lock Echo instance access during server configuration and startup. Useful for to get // listener address info (on which interface/port was listener binded) without having data races. @@ -77,7 +75,6 @@ type ( maxParam *int router *Router routers map[string]*Router - notFoundHandler HandlerFunc pool sync.Pool Server *http.Server TLSServer *http.Server @@ -113,10 +110,10 @@ type ( } // MiddlewareFunc defines a function to process middleware. - MiddlewareFunc func(HandlerFunc) HandlerFunc + MiddlewareFunc func(next HandlerFunc) HandlerFunc // HandlerFunc defines a function to serve HTTP requests. - HandlerFunc func(Context) error + HandlerFunc func(c Context) error // HTTPErrorHandler is a centralized HTTP error handler. HTTPErrorHandler func(error, Context) @@ -190,8 +187,12 @@ const ( // Headers const ( - HeaderAccept = "Accept" - HeaderAcceptEncoding = "Accept-Encoding" + HeaderAccept = "Accept" + HeaderAcceptEncoding = "Accept-Encoding" + // HeaderAllow is the name of the "Allow" header field used to list the set of methods + // advertised as supported by the target resource. Returning an Allow header is mandatory + // for status 405 (method not found) and useful for the OPTIONS method in responses. + // See RFC 7231: https://datatracker.ietf.org/doc/html/rfc7231#section-7.4.1 HeaderAllow = "Allow" HeaderAuthorization = "Authorization" HeaderContentDisposition = "Content-Disposition" @@ -203,6 +204,7 @@ const ( HeaderIfModifiedSince = "If-Modified-Since" HeaderLastModified = "Last-Modified" HeaderLocation = "Location" + HeaderRetryAfter = "Retry-After" HeaderUpgrade = "Upgrade" HeaderVary = "Vary" HeaderWWWAuthenticate = "WWW-Authenticate" @@ -212,12 +214,14 @@ const ( HeaderXForwardedSsl = "X-Forwarded-Ssl" HeaderXUrlScheme = "X-Url-Scheme" HeaderXHTTPMethodOverride = "X-HTTP-Method-Override" - HeaderXRealIP = "X-Real-IP" - HeaderXRequestID = "X-Request-ID" - HeaderXCorrelationID = "X-Correlation-ID" + HeaderXRealIP = "X-Real-Ip" + HeaderXRequestID = "X-Request-Id" + HeaderXCorrelationID = "X-Correlation-Id" HeaderXRequestedWith = "X-Requested-With" HeaderServer = "Server" HeaderOrigin = "Origin" + HeaderCacheControl = "Cache-Control" + HeaderConnection = "Connection" // Access control HeaderAccessControlRequestMethod = "Access-Control-Request-Method" @@ -242,7 +246,7 @@ const ( const ( // Version of Echo - Version = "4.6.3" + Version = "4.7.0" website = "https://echo.labstack.com" // http://patorjk.com/software/taag/#p=display&f=Small%20Slant&t=Echo banner = ` @@ -302,6 +306,12 @@ var ( } MethodNotAllowedHandler = func(c Context) error { + // See RFC 7231 section 7.4.1: An origin server MUST generate an Allow field in a 405 (Method Not Allowed) + // response and MAY do so in any other response. For disabled resources an empty Allow header may be returned + routerAllowMethods, ok := c.Get(ContextKeyHeaderAllow).(string) + if ok && routerAllowMethods != "" { + c.Response().Header().Set(HeaderAllow, routerAllowMethods) + } return ErrMethodNotAllowed } ) @@ -309,8 +319,9 @@ var ( // New creates an instance of Echo. func New() (e *Echo) { e = &Echo{ - Server: new(http.Server), - TLSServer: new(http.Server), + filesystem: createFilesystem(), + Server: new(http.Server), + TLSServer: new(http.Server), AutoTLSManager: autocert.Manager{ Prompt: autocert.AcceptTOS, }, @@ -489,50 +500,6 @@ func (e *Echo) Match(methods []string, path string, handler HandlerFunc, middlew return routes } -// Static registers a new route with path prefix to serve static files from the -// provided root directory. -func (e *Echo) Static(prefix, root string) *Route { - if root == "" { - root = "." // For security we want to restrict to CWD. - } - return e.static(prefix, root, e.GET) -} - -func (common) static(prefix, root string, get func(string, HandlerFunc, ...MiddlewareFunc) *Route) *Route { - h := func(c Context) error { - p, err := url.PathUnescape(c.Param("*")) - if err != nil { - return err - } - - name := filepath.Join(root, filepath.Clean("/"+p)) // "/"+ for security - fi, err := os.Stat(name) - if err != nil { - // The access path does not exist - return NotFoundHandler(c) - } - - // If the request is for a directory and does not end with "/" - p = c.Request().URL.Path // path must not be empty. - if fi.IsDir() && p[len(p)-1] != '/' { - // Redirect to ends with "/" - return c.Redirect(http.StatusMovedPermanently, p+"/") - } - return c.File(name) - } - // Handle added routes based on trailing slash: - // /prefix => exact route "/prefix" + any route "/prefix/*" - // /prefix/ => only any route "/prefix/*" - if prefix != "" { - if prefix[len(prefix)-1] == '/' { - // Only add any route for intentional trailing slash - return get(prefix+"*", h) - } - get(prefix, h) - } - return get(prefix+"/*", h) -} - func (common) file(path, file string, get func(string, HandlerFunc, ...MiddlewareFunc) *Route, m ...MiddlewareFunc) *Route { return get(path, func(c Context) error { @@ -643,7 +610,7 @@ func (e *Echo) ServeHTTP(w http.ResponseWriter, r *http.Request) { // Acquire context c := e.pool.Get().(*context) c.Reset(r, w) - h := NotFoundHandler + var h func(Context) error if e.premiddleware == nil { e.findRouter(r.Host).Find(r.Method, GetPath(r), c) diff --git a/vendor/github.com/labstack/echo/v4/echo_fs.go b/vendor/github.com/labstack/echo/v4/echo_fs.go new file mode 100644 index 00000000..c3790545 --- /dev/null +++ b/vendor/github.com/labstack/echo/v4/echo_fs.go @@ -0,0 +1,62 @@ +//go:build !go1.16 +// +build !go1.16 + +package echo + +import ( + "net/http" + "net/url" + "os" + "path/filepath" +) + +type filesystem struct { +} + +func createFilesystem() filesystem { + return filesystem{} +} + +// Static registers a new route with path prefix to serve static files from the +// provided root directory. +func (e *Echo) Static(prefix, root string) *Route { + if root == "" { + root = "." // For security we want to restrict to CWD. + } + return e.static(prefix, root, e.GET) +} + +func (common) static(prefix, root string, get func(string, HandlerFunc, ...MiddlewareFunc) *Route) *Route { + h := func(c Context) error { + p, err := url.PathUnescape(c.Param("*")) + if err != nil { + return err + } + + name := filepath.Join(root, filepath.Clean("/"+p)) // "/"+ for security + fi, err := os.Stat(name) + if err != nil { + // The access path does not exist + return NotFoundHandler(c) + } + + // If the request is for a directory and does not end with "/" + p = c.Request().URL.Path // path must not be empty. + if fi.IsDir() && p[len(p)-1] != '/' { + // Redirect to ends with "/" + return c.Redirect(http.StatusMovedPermanently, p+"/") + } + return c.File(name) + } + // Handle added routes based on trailing slash: + // /prefix => exact route "/prefix" + any route "/prefix/*" + // /prefix/ => only any route "/prefix/*" + if prefix != "" { + if prefix[len(prefix)-1] == '/' { + // Only add any route for intentional trailing slash + return get(prefix+"*", h) + } + get(prefix, h) + } + return get(prefix+"/*", h) +} diff --git a/vendor/github.com/labstack/echo/v4/echo_fs_go1.16.go b/vendor/github.com/labstack/echo/v4/echo_fs_go1.16.go new file mode 100644 index 00000000..435459de --- /dev/null +++ b/vendor/github.com/labstack/echo/v4/echo_fs_go1.16.go @@ -0,0 +1,145 @@ +//go:build go1.16 +// +build go1.16 + +package echo + +import ( + "fmt" + "io/fs" + "net/http" + "net/url" + "os" + "path/filepath" + "strings" +) + +type filesystem struct { + // Filesystem is file system used by Static and File handlers to access files. + // Defaults to os.DirFS(".") + // + // When dealing with `embed.FS` use `fs := echo.MustSubFS(fs, "rootDirectory") to create sub fs which uses necessary + // prefix for directory path. This is necessary as `//go:embed assets/images` embeds files with paths + // including `assets/images` as their prefix. + Filesystem fs.FS +} + +func createFilesystem() filesystem { + return filesystem{ + Filesystem: newDefaultFS(), + } +} + +// Static registers a new route with path prefix to serve static files from the provided root directory. +func (e *Echo) Static(pathPrefix, fsRoot string) *Route { + subFs := MustSubFS(e.Filesystem, fsRoot) + return e.Add( + http.MethodGet, + pathPrefix+"*", + StaticDirectoryHandler(subFs, false), + ) +} + +// StaticFS registers a new route with path prefix to serve static files from the provided file system. +// +// When dealing with `embed.FS` use `fs := echo.MustSubFS(fs, "rootDirectory") to create sub fs which uses necessary +// prefix for directory path. This is necessary as `//go:embed assets/images` embeds files with paths +// including `assets/images` as their prefix. +func (e *Echo) StaticFS(pathPrefix string, filesystem fs.FS) *Route { + return e.Add( + http.MethodGet, + pathPrefix+"*", + StaticDirectoryHandler(filesystem, false), + ) +} + +// StaticDirectoryHandler creates handler function to serve files from provided file system +// When disablePathUnescaping is set then file name from path is not unescaped and is served as is. +func StaticDirectoryHandler(fileSystem fs.FS, disablePathUnescaping bool) HandlerFunc { + return func(c Context) error { + p := c.Param("*") + if !disablePathUnescaping { // when router is already unescaping we do not want to do is twice + tmpPath, err := url.PathUnescape(p) + if err != nil { + return fmt.Errorf("failed to unescape path variable: %w", err) + } + p = tmpPath + } + + // fs.FS.Open() already assumes that file names are relative to FS root path and considers name with prefix `/` as invalid + name := filepath.ToSlash(filepath.Clean(strings.TrimPrefix(p, "/"))) + fi, err := fs.Stat(fileSystem, name) + if err != nil { + return ErrNotFound + } + + // If the request is for a directory and does not end with "/" + p = c.Request().URL.Path // path must not be empty. + if fi.IsDir() && len(p) > 0 && p[len(p)-1] != '/' { + // Redirect to ends with "/" + return c.Redirect(http.StatusMovedPermanently, p+"/") + } + return fsFile(c, name, fileSystem) + } +} + +// FileFS registers a new route with path to serve file from the provided file system. +func (e *Echo) FileFS(path, file string, filesystem fs.FS, m ...MiddlewareFunc) *Route { + return e.GET(path, StaticFileHandler(file, filesystem), m...) +} + +// StaticFileHandler creates handler function to serve file from provided file system +func StaticFileHandler(file string, filesystem fs.FS) HandlerFunc { + return func(c Context) error { + return fsFile(c, file, filesystem) + } +} + +// defaultFS emulates os.Open behaviour with filesystem opened by `os.DirFs`. Difference between `os.Open` and `fs.Open` +// is that FS does not allow to open path that start with `..` or `/` etc. For example previously you could have `../images` +// in your application but `fs := os.DirFS("./")` would not allow you to use `fs.Open("../images")` and this would break +// all old applications that rely on being able to traverse up from current executable run path. +// NB: private because you really should use fs.FS implementation instances +type defaultFS struct { + prefix string + fs fs.FS +} + +func newDefaultFS() *defaultFS { + dir, _ := os.Getwd() + return &defaultFS{ + prefix: dir, + fs: os.DirFS(dir), + } +} + +func (fs defaultFS) Open(name string) (fs.File, error) { + return fs.fs.Open(name) +} + +func subFS(currentFs fs.FS, root string) (fs.FS, error) { + root = filepath.ToSlash(filepath.Clean(root)) // note: fs.FS operates only with slashes. `ToSlash` is necessary for Windows + if dFS, ok := currentFs.(*defaultFS); ok { + // we need to make exception for `defaultFS` instances as it interprets root prefix differently from fs.FS to + // allow cases when root is given as `../somepath` which is not valid for fs.FS + root = filepath.Join(dFS.prefix, root) + return &defaultFS{ + prefix: root, + fs: os.DirFS(root), + }, nil + } + return fs.Sub(currentFs, root) +} + +// MustSubFS creates sub FS from current filesystem or panic on failure. +// Panic happens when `fsRoot` contains invalid path according to `fs.ValidPath` rules. +// +// MustSubFS is helpful when dealing with `embed.FS` because for example `//go:embed assets/images` embeds files with +// paths including `assets/images` as their prefix. In that case use `fs := echo.MustSubFS(fs, "rootDirectory") to +// create sub fs which uses necessary prefix for directory path. +func MustSubFS(currentFs fs.FS, fsRoot string) fs.FS { + subFs, err := subFS(currentFs, fsRoot) + if err != nil { + panic(fmt.Errorf("can not create sub FS, invalid root given, err: %w", err)) + } + return subFs +} diff --git a/vendor/github.com/labstack/echo/v4/group.go b/vendor/github.com/labstack/echo/v4/group.go index 426bef9e..bba470ce 100644 --- a/vendor/github.com/labstack/echo/v4/group.go +++ b/vendor/github.com/labstack/echo/v4/group.go @@ -102,11 +102,6 @@ func (g *Group) Group(prefix string, middleware ...MiddlewareFunc) (sg *Group) { return } -// Static implements `Echo#Static()` for sub-routes within the Group. -func (g *Group) Static(prefix, root string) { - g.static(prefix, root, g.GET) -} - // File implements `Echo#File()` for sub-routes within the Group. func (g *Group) File(path, file string) { g.file(path, file, g.GET) diff --git a/vendor/github.com/labstack/echo/v4/group_fs.go b/vendor/github.com/labstack/echo/v4/group_fs.go new file mode 100644 index 00000000..0a1ce4a9 --- /dev/null +++ b/vendor/github.com/labstack/echo/v4/group_fs.go @@ -0,0 +1,9 @@ +//go:build !go1.16 +// +build !go1.16 + +package echo + +// Static implements `Echo#Static()` for sub-routes within the Group. +func (g *Group) Static(prefix, root string) { + g.static(prefix, root, g.GET) +} diff --git a/vendor/github.com/labstack/echo/v4/group_fs_go1.16.go b/vendor/github.com/labstack/echo/v4/group_fs_go1.16.go new file mode 100644 index 00000000..2ba52b5e --- /dev/null +++ b/vendor/github.com/labstack/echo/v4/group_fs_go1.16.go @@ -0,0 +1,33 @@ +//go:build go1.16 +// +build go1.16 + +package echo + +import ( + "io/fs" + "net/http" +) + +// Static implements `Echo#Static()` for sub-routes within the Group. +func (g *Group) Static(pathPrefix, fsRoot string) { + subFs := MustSubFS(g.echo.Filesystem, fsRoot) + g.StaticFS(pathPrefix, subFs) +} + +// StaticFS implements `Echo#StaticFS()` for sub-routes within the Group. +// +// When dealing with `embed.FS` use `fs := echo.MustSubFS(fs, "rootDirectory") to create sub fs which uses necessary +// prefix for directory path. This is necessary as `//go:embed assets/images` embeds files with paths +// including `assets/images` as their prefix. +func (g *Group) StaticFS(pathPrefix string, filesystem fs.FS) { + g.Add( + http.MethodGet, + pathPrefix+"*", + StaticDirectoryHandler(filesystem, false), + ) +} + +// FileFS implements `Echo#FileFS()` for sub-routes within the Group. +func (g *Group) FileFS(path, file string, filesystem fs.FS, m ...MiddlewareFunc) *Route { + return g.GET(path, StaticFileHandler(file, filesystem), m...) +} diff --git a/vendor/github.com/labstack/echo/v4/ip.go b/vendor/github.com/labstack/echo/v4/ip.go index 39cb421f..46d464cf 100644 --- a/vendor/github.com/labstack/echo/v4/ip.go +++ b/vendor/github.com/labstack/echo/v4/ip.go @@ -6,6 +6,130 @@ import ( "strings" ) +/** +By: https://github.com/tmshn (See: https://github.com/labstack/echo/pull/1478 , https://github.com/labstack/echox/pull/134 ) +Source: https://echo.labstack.com/guide/ip-address/ + +IP address plays fundamental role in HTTP; it's used for access control, auditing, geo-based access analysis and more. +Echo provides handy method [`Context#RealIP()`](https://godoc.org/github.com/labstack/echo#Context) for that. + +However, it is not trivial to retrieve the _real_ IP address from requests especially when you put L7 proxies before the application. +In such situation, _real_ IP needs to be relayed on HTTP layer from proxies to your app, but you must not trust HTTP headers unconditionally. +Otherwise, you might give someone a chance of deceiving you. **A security risk!** + +To retrieve IP address reliably/securely, you must let your application be aware of the entire architecture of your infrastructure. +In Echo, this can be done by configuring `Echo#IPExtractor` appropriately. +This guides show you why and how. + +> Note: if you dont' set `Echo#IPExtractor` explicitly, Echo fallback to legacy behavior, which is not a good choice. + +Let's start from two questions to know the right direction: + +1. Do you put any HTTP (L7) proxy in front of the application? + - It includes both cloud solutions (such as AWS ALB or GCP HTTP LB) and OSS ones (such as Nginx, Envoy or Istio ingress gateway). +2. If yes, what HTTP header do your proxies use to pass client IP to the application? + +## Case 1. With no proxy + +If you put no proxy (e.g.: directory facing to the internet), all you need to (and have to) see is IP address from network layer. +Any HTTP header is untrustable because the clients have full control what headers to be set. + +In this case, use `echo.ExtractIPDirect()`. + +```go +e.IPExtractor = echo.ExtractIPDirect() +``` + +## Case 2. With proxies using `X-Forwarded-For` header + +[`X-Forwared-For` (XFF)](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Forwarded-For) is the popular header +to relay clients' IP addresses. +At each hop on the proxies, they append the request IP address at the end of the header. + +Following example diagram illustrates this behavior. + +```text +┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ +│ "Origin" │───────────>│ Proxy 1 │───────────>│ Proxy 2 │───────────>│ Your app │ +│ (IP: a) │ │ (IP: b) │ │ (IP: c) │ │ │ +└──────────┘ └──────────┘ └──────────┘ └──────────┘ + +Case 1. +XFF: "" "a" "a, b" + ~~~~~~ +Case 2. +XFF: "x" "x, a" "x, a, b" + ~~~~~~~~~ + ↑ What your app will see +``` + +In this case, use **first _untrustable_ IP reading from right**. Never use first one reading from left, as it is +configurable by client. Here "trustable" means "you are sure the IP address belongs to your infrastructre". +In above example, if `b` and `c` are trustable, the IP address of the client is `a` for both cases, never be `x`. + +In Echo, use `ExtractIPFromXFFHeader(...TrustOption)`. + +```go +e.IPExtractor = echo.ExtractIPFromXFFHeader() +``` + +By default, it trusts internal IP addresses (loopback, link-local unicast, private-use and unique local address +from [RFC6890](https://tools.ietf.org/html/rfc6890), [RFC4291](https://tools.ietf.org/html/rfc4291) and +[RFC4193](https://tools.ietf.org/html/rfc4193)). +To control this behavior, use [`TrustOption`](https://godoc.org/github.com/labstack/echo#TrustOption)s. + +E.g.: + +```go +e.IPExtractor = echo.ExtractIPFromXFFHeader( + TrustLinkLocal(false), + TrustIPRanges(lbIPRange), +) +``` + +- Ref: https://godoc.org/github.com/labstack/echo#TrustOption + +## Case 3. With proxies using `X-Real-IP` header + +`X-Real-IP` is another HTTP header to relay clients' IP addresses, but it carries only one address unlike XFF. + +If your proxies set this header, use `ExtractIPFromRealIPHeader(...TrustOption)`. + +```go +e.IPExtractor = echo.ExtractIPFromRealIPHeader() +``` + +Again, it trusts internal IP addresses by default (loopback, link-local unicast, private-use and unique local address +from [RFC6890](https://tools.ietf.org/html/rfc6890), [RFC4291](https://tools.ietf.org/html/rfc4291) and +[RFC4193](https://tools.ietf.org/html/rfc4193)). +To control this behavior, use [`TrustOption`](https://godoc.org/github.com/labstack/echo#TrustOption)s. + +- Ref: https://godoc.org/github.com/labstack/echo#TrustOption + +> **Never forget** to configure the outermost proxy (i.e.; at the edge of your infrastructure) **not to pass through incoming headers**. +> Otherwise there is a chance of fraud, as it is what clients can control. + +## About default behavior + +In default behavior, Echo sees all of first XFF header, X-Real-IP header and IP from network layer. + +As you might already notice, after reading this article, this is not good. +Sole reason this is default is just backward compatibility. + +## Private IP ranges + +See: https://en.wikipedia.org/wiki/Private_network + +Private IPv4 address ranges (RFC 1918): +* 10.0.0.0 – 10.255.255.255 (24-bit block) +* 172.16.0.0 – 172.31.255.255 (20-bit block) +* 192.168.0.0 – 192.168.255.255 (16-bit block) + +Private IPv6 address ranges: +* fc00::/7 address block = RFC 4193 Unique Local Addresses (ULA) + +*/ + type ipChecker struct { trustLoopback bool trustLinkLocal bool @@ -52,6 +176,7 @@ func newIPChecker(configs []TrustOption) *ipChecker { return checker } +// Go1.16+ added `ip.IsPrivate()` but until that use this implementation func isPrivateIPRange(ip net.IP) bool { if ip4 := ip.To4(); ip4 != nil { return ip4[0] == 10 || @@ -87,10 +212,12 @@ type IPExtractor func(*http.Request) string // ExtractIPDirect extracts IP address using actual IP address. // Use this if your server faces to internet directory (i.e.: uses no proxy). func ExtractIPDirect() IPExtractor { - return func(req *http.Request) string { - ra, _, _ := net.SplitHostPort(req.RemoteAddr) - return ra - } + return extractIP +} + +func extractIP(req *http.Request) string { + ra, _, _ := net.SplitHostPort(req.RemoteAddr) + return ra } // ExtractIPFromRealIPHeader extracts IP address using x-real-ip header. @@ -98,14 +225,13 @@ func ExtractIPDirect() IPExtractor { func ExtractIPFromRealIPHeader(options ...TrustOption) IPExtractor { checker := newIPChecker(options) return func(req *http.Request) string { - directIP := ExtractIPDirect()(req) realIP := req.Header.Get(HeaderXRealIP) if realIP != "" { - if ip := net.ParseIP(directIP); ip != nil && checker.trust(ip) { + if ip := net.ParseIP(realIP); ip != nil && checker.trust(ip) { return realIP } } - return directIP + return extractIP(req) } } @@ -115,7 +241,7 @@ func ExtractIPFromRealIPHeader(options ...TrustOption) IPExtractor { func ExtractIPFromXFFHeader(options ...TrustOption) IPExtractor { checker := newIPChecker(options) return func(req *http.Request) string { - directIP := ExtractIPDirect()(req) + directIP := extractIP(req) xffs := req.Header[HeaderXForwardedFor] if len(xffs) == 0 { return directIP diff --git a/vendor/github.com/labstack/echo/v4/middleware/cors.go b/vendor/github.com/labstack/echo/v4/middleware/cors.go index d6ef8964..16259512 100644 --- a/vendor/github.com/labstack/echo/v4/middleware/cors.go +++ b/vendor/github.com/labstack/echo/v4/middleware/cors.go @@ -29,6 +29,8 @@ type ( // AllowMethods defines a list methods allowed when accessing the resource. // This is used in response to a preflight request. // Optional. Default value DefaultCORSConfig.AllowMethods. + // If `allowMethods` is left empty will fill for preflight request `Access-Control-Allow-Methods` header value + // from `Allow` header that echo.Router set into context. AllowMethods []string `yaml:"allow_methods"` // AllowHeaders defines a list of request headers that can be used when @@ -41,6 +43,8 @@ type ( // a response to a preflight request, this indicates whether or not the // actual request can be made using credentials. // Optional. Default value false. + // Security: avoid using `AllowCredentials = true` with `AllowOrigins = *`. + // See http://blog.portswigger.net/2016/10/exploiting-cors-misconfigurations-for.html AllowCredentials bool `yaml:"allow_credentials"` // ExposeHeaders defines a whitelist headers that clients are allowed to @@ -80,7 +84,9 @@ func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc { if len(config.AllowOrigins) == 0 { config.AllowOrigins = DefaultCORSConfig.AllowOrigins } + hasCustomAllowMethods := true if len(config.AllowMethods) == 0 { + hasCustomAllowMethods = false config.AllowMethods = DefaultCORSConfig.AllowMethods } @@ -109,10 +115,28 @@ func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc { origin := req.Header.Get(echo.HeaderOrigin) allowOrigin := "" - preflight := req.Method == http.MethodOptions res.Header().Add(echo.HeaderVary, echo.HeaderOrigin) - // No Origin provided + // Preflight request is an OPTIONS request, using three HTTP request headers: Access-Control-Request-Method, + // Access-Control-Request-Headers, and the Origin header. See: https://developer.mozilla.org/en-US/docs/Glossary/Preflight_request + // For simplicity we just consider method type and later `Origin` header. + preflight := req.Method == http.MethodOptions + + // Although router adds special handler in case of OPTIONS method we avoid calling next for OPTIONS in this middleware + // as CORS requests do not have cookies / authentication headers by default, so we could get stuck in auth + // middlewares by calling next(c). + // But we still want to send `Allow` header as response in case of Non-CORS OPTIONS request as router default + // handler does. + routerAllowMethods := "" + if preflight { + tmpAllowMethods, ok := c.Get(echo.ContextKeyHeaderAllow).(string) + if ok && tmpAllowMethods != "" { + routerAllowMethods = tmpAllowMethods + c.Response().Header().Set(echo.HeaderAllow, routerAllowMethods) + } + } + + // No Origin provided. This is (probably) not request from actual browser - proceed executing middleware chain if origin == "" { if !preflight { return next(c) @@ -145,19 +169,15 @@ func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc { } } - // Check allowed origin patterns - for _, re := range allowOriginPatterns { - if allowOrigin == "" { - didx := strings.Index(origin, "://") - if didx == -1 { - continue - } - domAuth := origin[didx+3:] - // to avoid regex cost by invalid long domain - if len(domAuth) > 253 { - break - } - + checkPatterns := false + if allowOrigin == "" { + // to avoid regex cost by invalid (long) domains (253 is domain name max limit) + if len(origin) <= (253+3+5) && strings.Contains(origin, "://") { + checkPatterns = true + } + } + if checkPatterns { + for _, re := range allowOriginPatterns { if match, _ := regexp.MatchString(re, origin); match { allowOrigin = origin break @@ -174,12 +194,13 @@ func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc { return c.NoContent(http.StatusNoContent) } + res.Header().Set(echo.HeaderAccessControlAllowOrigin, allowOrigin) + if config.AllowCredentials { + res.Header().Set(echo.HeaderAccessControlAllowCredentials, "true") + } + // Simple request if !preflight { - res.Header().Set(echo.HeaderAccessControlAllowOrigin, allowOrigin) - if config.AllowCredentials { - res.Header().Set(echo.HeaderAccessControlAllowCredentials, "true") - } if exposeHeaders != "" { res.Header().Set(echo.HeaderAccessControlExposeHeaders, exposeHeaders) } @@ -189,11 +210,13 @@ func CORSWithConfig(config CORSConfig) echo.MiddlewareFunc { // Preflight request res.Header().Add(echo.HeaderVary, echo.HeaderAccessControlRequestMethod) res.Header().Add(echo.HeaderVary, echo.HeaderAccessControlRequestHeaders) - res.Header().Set(echo.HeaderAccessControlAllowOrigin, allowOrigin) - res.Header().Set(echo.HeaderAccessControlAllowMethods, allowMethods) - if config.AllowCredentials { - res.Header().Set(echo.HeaderAccessControlAllowCredentials, "true") + + if !hasCustomAllowMethods && routerAllowMethods != "" { + res.Header().Set(echo.HeaderAccessControlAllowMethods, routerAllowMethods) + } else { + res.Header().Set(echo.HeaderAccessControlAllowMethods, allowMethods) } + if allowHeaders != "" { res.Header().Set(echo.HeaderAccessControlAllowHeaders, allowHeaders) } else { diff --git a/vendor/github.com/labstack/echo/v4/middleware/csrf.go b/vendor/github.com/labstack/echo/v4/middleware/csrf.go index 7804997d..61299f5c 100644 --- a/vendor/github.com/labstack/echo/v4/middleware/csrf.go +++ b/vendor/github.com/labstack/echo/v4/middleware/csrf.go @@ -2,9 +2,7 @@ package middleware import ( "crypto/subtle" - "errors" "net/http" - "strings" "time" "github.com/labstack/echo/v4" @@ -21,13 +19,15 @@ type ( TokenLength uint8 `yaml:"token_length"` // Optional. Default value 32. - // TokenLookup is a string in the form of "<source>:<key>" that is used + // TokenLookup is a string in the form of "<source>:<name>" or "<source>:<name>,<source>:<name>" that is used // to extract token from the request. // Optional. Default value "header:X-CSRF-Token". // Possible values: - // - "header:<name>" - // - "form:<name>" + // - "header:<name>" or "header:<name>:<cut-prefix>" // - "query:<name>" + // - "form:<name>" + // Multiple sources example: + // - "header:X-CSRF-Token,query:csrf" TokenLookup string `yaml:"token_lookup"` // Context key to store generated CSRF token into context. @@ -62,12 +62,11 @@ type ( // Optional. Default value SameSiteDefaultMode. CookieSameSite http.SameSite `yaml:"cookie_same_site"` } - - // csrfTokenExtractor defines a function that takes `echo.Context` and returns - // either a token or an error. - csrfTokenExtractor func(echo.Context) (string, error) ) +// ErrCSRFInvalid is returned when CSRF check fails +var ErrCSRFInvalid = echo.NewHTTPError(http.StatusForbidden, "invalid csrf token") + var ( // DefaultCSRFConfig is the default CSRF middleware config. DefaultCSRFConfig = CSRFConfig{ @@ -114,14 +113,9 @@ func CSRFWithConfig(config CSRFConfig) echo.MiddlewareFunc { config.CookieSecure = true } - // Initialize - parts := strings.Split(config.TokenLookup, ":") - extractor := csrfTokenFromHeader(parts[1]) - switch parts[0] { - case "form": - extractor = csrfTokenFromForm(parts[1]) - case "query": - extractor = csrfTokenFromQuery(parts[1]) + extractors, err := createExtractors(config.TokenLookup, "") + if err != nil { + panic(err) } return func(next echo.HandlerFunc) echo.HandlerFunc { @@ -130,28 +124,50 @@ func CSRFWithConfig(config CSRFConfig) echo.MiddlewareFunc { return next(c) } - req := c.Request() - k, err := c.Cookie(config.CookieName) token := "" - - // Generate token - if err != nil { - token = random.String(config.TokenLength) + if k, err := c.Cookie(config.CookieName); err != nil { + token = random.String(config.TokenLength) // Generate token } else { - // Reuse token - token = k.Value + token = k.Value // Reuse token } - switch req.Method { + switch c.Request().Method { case http.MethodGet, http.MethodHead, http.MethodOptions, http.MethodTrace: default: // Validate token only for requests which are not defined as 'safe' by RFC7231 - clientToken, err := extractor(c) - if err != nil { - return echo.NewHTTPError(http.StatusBadRequest, err.Error()) + var lastExtractorErr error + var lastTokenErr error + outer: + for _, extractor := range extractors { + clientTokens, err := extractor(c) + if err != nil { + lastExtractorErr = err + continue + } + + for _, clientToken := range clientTokens { + if validateCSRFToken(token, clientToken) { + lastTokenErr = nil + lastExtractorErr = nil + break outer + } + lastTokenErr = ErrCSRFInvalid + } } - if !validateCSRFToken(token, clientToken) { - return echo.NewHTTPError(http.StatusForbidden, "invalid csrf token") + if lastTokenErr != nil { + return lastTokenErr + } else if lastExtractorErr != nil { + // ugly part to preserve backwards compatible errors. someone could rely on them + if lastExtractorErr == errQueryExtractorValueMissing { + lastExtractorErr = echo.NewHTTPError(http.StatusBadRequest, "missing csrf token in the query string") + } else if lastExtractorErr == errFormExtractorValueMissing { + lastExtractorErr = echo.NewHTTPError(http.StatusBadRequest, "missing csrf token in the form parameter") + } else if lastExtractorErr == errHeaderExtractorValueMissing { + lastExtractorErr = echo.NewHTTPError(http.StatusBadRequest, "missing csrf token in request header") + } else { + lastExtractorErr = echo.NewHTTPError(http.StatusBadRequest, lastExtractorErr.Error()) + } + return lastExtractorErr } } @@ -184,38 +200,6 @@ func CSRFWithConfig(config CSRFConfig) echo.MiddlewareFunc { } } -// csrfTokenFromForm returns a `csrfTokenExtractor` that extracts token from the -// provided request header. -func csrfTokenFromHeader(header string) csrfTokenExtractor { - return func(c echo.Context) (string, error) { - return c.Request().Header.Get(header), nil - } -} - -// csrfTokenFromForm returns a `csrfTokenExtractor` that extracts token from the -// provided form parameter. -func csrfTokenFromForm(param string) csrfTokenExtractor { - return func(c echo.Context) (string, error) { - token := c.FormValue(param) - if token == "" { - return "", errors.New("missing csrf token in the form parameter") - } - return token, nil - } -} - -// csrfTokenFromQuery returns a `csrfTokenExtractor` that extracts token from the -// provided query parameter. -func csrfTokenFromQuery(param string) csrfTokenExtractor { - return func(c echo.Context) (string, error) { - token := c.QueryParam(param) - if token == "" { - return "", errors.New("missing csrf token in the query string") - } - return token, nil - } -} - func validateCSRFToken(token, clientToken string) bool { return subtle.ConstantTimeCompare([]byte(token), []byte(clientToken)) == 1 } diff --git a/vendor/github.com/labstack/echo/v4/middleware/extractor.go b/vendor/github.com/labstack/echo/v4/middleware/extractor.go new file mode 100644 index 00000000..a57ed4e1 --- /dev/null +++ b/vendor/github.com/labstack/echo/v4/middleware/extractor.go @@ -0,0 +1,184 @@ +package middleware + +import ( + "errors" + "fmt" + "github.com/labstack/echo/v4" + "net/textproto" + "strings" +) + +const ( + // extractorLimit is arbitrary number to limit values extractor can return. this limits possible resource exhaustion + // attack vector + extractorLimit = 20 +) + +var errHeaderExtractorValueMissing = errors.New("missing value in request header") +var errHeaderExtractorValueInvalid = errors.New("invalid value in request header") +var errQueryExtractorValueMissing = errors.New("missing value in the query string") +var errParamExtractorValueMissing = errors.New("missing value in path params") +var errCookieExtractorValueMissing = errors.New("missing value in cookies") +var errFormExtractorValueMissing = errors.New("missing value in the form") + +// ValuesExtractor defines a function for extracting values (keys/tokens) from the given context. +type ValuesExtractor func(c echo.Context) ([]string, error) + +func createExtractors(lookups string, authScheme string) ([]ValuesExtractor, error) { + if lookups == "" { + return nil, nil + } + sources := strings.Split(lookups, ",") + var extractors = make([]ValuesExtractor, 0) + for _, source := range sources { + parts := strings.Split(source, ":") + if len(parts) < 2 { + return nil, fmt.Errorf("extractor source for lookup could not be split into needed parts: %v", source) + } + + switch parts[0] { + case "query": + extractors = append(extractors, valuesFromQuery(parts[1])) + case "param": + extractors = append(extractors, valuesFromParam(parts[1])) + case "cookie": + extractors = append(extractors, valuesFromCookie(parts[1])) + case "form": + extractors = append(extractors, valuesFromForm(parts[1])) + case "header": + prefix := "" + if len(parts) > 2 { + prefix = parts[2] + } else if authScheme != "" && parts[1] == echo.HeaderAuthorization { + // backwards compatibility for JWT and KeyAuth: + // * we only apply this fix to Authorization as header we use and uses prefixes like "Bearer <token-value>" etc + // * previously header extractor assumed that auth-scheme/prefix had a space as suffix we need to retain that + // behaviour for default values and Authorization header. + prefix = authScheme + if !strings.HasSuffix(prefix, " ") { + prefix += " " + } + } + extractors = append(extractors, valuesFromHeader(parts[1], prefix)) + } + } + return extractors, nil +} + +// valuesFromHeader returns a functions that extracts values from the request header. +// valuePrefix is parameter to remove first part (prefix) of the extracted value. This is useful if header value has static +// prefix like `Authorization: <auth-scheme> <authorisation-parameters>` where part that we want to remove is `<auth-scheme> ` +// note the space at the end. In case of basic authentication `Authorization: Basic <credentials>` prefix we want to remove +// is `Basic `. In case of JWT tokens `Authorization: Bearer <token>` prefix is `Bearer `. +// If prefix is left empty the whole value is returned. +func valuesFromHeader(header string, valuePrefix string) ValuesExtractor { + prefixLen := len(valuePrefix) + // standard library parses http.Request header keys in canonical form but we may provide something else so fix this + header = textproto.CanonicalMIMEHeaderKey(header) + return func(c echo.Context) ([]string, error) { + values := c.Request().Header.Values(header) + if len(values) == 0 { + return nil, errHeaderExtractorValueMissing + } + + result := make([]string, 0) + for i, value := range values { + if prefixLen == 0 { + result = append(result, value) + if i >= extractorLimit-1 { + break + } + continue + } + if len(value) > prefixLen && strings.EqualFold(value[:prefixLen], valuePrefix) { + result = append(result, value[prefixLen:]) + if i >= extractorLimit-1 { + break + } + } + } + + if len(result) == 0 { + if prefixLen > 0 { + return nil, errHeaderExtractorValueInvalid + } + return nil, errHeaderExtractorValueMissing + } + return result, nil + } +} + +// valuesFromQuery returns a function that extracts values from the query string. +func valuesFromQuery(param string) ValuesExtractor { + return func(c echo.Context) ([]string, error) { + result := c.QueryParams()[param] + if len(result) == 0 { + return nil, errQueryExtractorValueMissing + } else if len(result) > extractorLimit-1 { + result = result[:extractorLimit] + } + return result, nil + } +} + +// valuesFromParam returns a function that extracts values from the url param string. +func valuesFromParam(param string) ValuesExtractor { + return func(c echo.Context) ([]string, error) { + result := make([]string, 0) + paramVales := c.ParamValues() + for i, p := range c.ParamNames() { + if param == p { + result = append(result, paramVales[i]) + if i >= extractorLimit-1 { + break + } + } + } + if len(result) == 0 { + return nil, errParamExtractorValueMissing + } + return result, nil + } +} + +// valuesFromCookie returns a function that extracts values from the named cookie. +func valuesFromCookie(name string) ValuesExtractor { + return func(c echo.Context) ([]string, error) { + cookies := c.Cookies() + if len(cookies) == 0 { + return nil, errCookieExtractorValueMissing + } + + result := make([]string, 0) + for i, cookie := range cookies { + if name == cookie.Name { + result = append(result, cookie.Value) + if i >= extractorLimit-1 { + break + } + } + } + if len(result) == 0 { + return nil, errCookieExtractorValueMissing + } + return result, nil + } +} + +// valuesFromForm returns a function that extracts values from the form field. +func valuesFromForm(name string) ValuesExtractor { + return func(c echo.Context) ([]string, error) { + if parseErr := c.Request().ParseForm(); parseErr != nil { + return nil, fmt.Errorf("valuesFromForm parse form failed: %w", parseErr) + } + values := c.Request().Form[name] + if len(values) == 0 { + return nil, errFormExtractorValueMissing + } + if len(values) > extractorLimit-1 { + values = values[:extractorLimit] + } + result := append([]string{}, values...) + return result, nil + } +} diff --git a/vendor/github.com/labstack/echo/v4/middleware/jwt.go b/vendor/github.com/labstack/echo/v4/middleware/jwt.go index 21e33ab8..bec5167e 100644 --- a/vendor/github.com/labstack/echo/v4/middleware/jwt.go +++ b/vendor/github.com/labstack/echo/v4/middleware/jwt.go @@ -1,3 +1,4 @@ +//go:build go1.15 // +build go1.15 package middleware @@ -5,12 +6,10 @@ package middleware import ( "errors" "fmt" - "net/http" - "reflect" - "strings" - "github.com/golang-jwt/jwt" "github.com/labstack/echo/v4" + "net/http" + "reflect" ) type ( @@ -22,7 +21,8 @@ type ( // BeforeFunc defines a function which is executed just before the middleware. BeforeFunc BeforeFunc - // SuccessHandler defines a function which is executed for a valid token. + // SuccessHandler defines a function which is executed for a valid token before middleware chain continues with next + // middleware or handler. SuccessHandler JWTSuccessHandler // ErrorHandler defines a function which is executed for an invalid token. @@ -32,6 +32,13 @@ type ( // ErrorHandlerWithContext is almost identical to ErrorHandler, but it's passed the current context. ErrorHandlerWithContext JWTErrorHandlerWithContext + // ContinueOnIgnoredError allows the next middleware/handler to be called when ErrorHandlerWithContext decides to + // ignore the error (by returning `nil`). + // This is useful when parts of your site/api allow public access and some authorized routes provide extra functionality. + // In that case you can use ErrorHandlerWithContext to set a default public JWT token value in the request context + // and continue. Some logic down the remaining execution chain needs to check that (public) token value then. + ContinueOnIgnoredError bool + // Signing key to validate token. // This is one of the three options to provide a token validation key. // The order of precedence is a user-defined KeyFunc, SigningKeys and SigningKey. @@ -61,16 +68,26 @@ type ( // to extract token from the request. // Optional. Default value "header:Authorization". // Possible values: - // - "header:<name>" + // - "header:<name>" or "header:<name>:<cut-prefix>" + // `<cut-prefix>` is argument value to cut/trim prefix of the extracted value. This is useful if header + // value has static prefix like `Authorization: <auth-scheme> <authorisation-parameters>` where part that we + // want to cut is `<auth-scheme> ` note the space at the end. + // In case of JWT tokens `Authorization: Bearer <token>` prefix we cut is `Bearer `. + // If prefix is left empty the whole value is returned. // - "query:<name>" // - "param:<name>" // - "cookie:<name>" // - "form:<name>" - // Multiply sources example: - // - "header: Authorization,cookie: myowncookie" - + // Multiple sources example: + // - "header:Authorization,cookie:myowncookie" TokenLookup string + // TokenLookupFuncs defines a list of user-defined functions that extract JWT token from the given context. + // This is one of the two options to provide a token extractor. + // The order of precedence is user-defined TokenLookupFuncs, and TokenLookup. + // You can also provide both if you want. + TokenLookupFuncs []ValuesExtractor + // AuthScheme to be used in the Authorization header. // Optional. Default value "Bearer". AuthScheme string @@ -95,15 +112,13 @@ type ( } // JWTSuccessHandler defines a function which is executed for a valid token. - JWTSuccessHandler func(echo.Context) + JWTSuccessHandler func(c echo.Context) // JWTErrorHandler defines a function which is executed for an invalid token. - JWTErrorHandler func(error) error + JWTErrorHandler func(err error) error // JWTErrorHandlerWithContext is almost identical to JWTErrorHandler, but it's passed the current context. - JWTErrorHandlerWithContext func(error, echo.Context) error - - jwtExtractor func(echo.Context) (string, error) + JWTErrorHandlerWithContext func(err error, c echo.Context) error ) // Algorithms @@ -120,13 +135,14 @@ var ( var ( // DefaultJWTConfig is the default JWT auth middleware config. DefaultJWTConfig = JWTConfig{ - Skipper: DefaultSkipper, - SigningMethod: AlgorithmHS256, - ContextKey: "user", - TokenLookup: "header:" + echo.HeaderAuthorization, - AuthScheme: "Bearer", - Claims: jwt.MapClaims{}, - KeyFunc: nil, + Skipper: DefaultSkipper, + SigningMethod: AlgorithmHS256, + ContextKey: "user", + TokenLookup: "header:" + echo.HeaderAuthorization, + TokenLookupFuncs: nil, + AuthScheme: "Bearer", + Claims: jwt.MapClaims{}, + KeyFunc: nil, } ) @@ -163,7 +179,7 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc { if config.Claims == nil { config.Claims = DefaultJWTConfig.Claims } - if config.TokenLookup == "" { + if config.TokenLookup == "" && len(config.TokenLookupFuncs) == 0 { config.TokenLookup = DefaultJWTConfig.TokenLookup } if config.AuthScheme == "" { @@ -176,25 +192,12 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc { config.ParseTokenFunc = config.defaultParseToken } - // Initialize - // Split sources - sources := strings.Split(config.TokenLookup, ",") - var extractors []jwtExtractor - for _, source := range sources { - parts := strings.Split(source, ":") - - switch parts[0] { - case "query": - extractors = append(extractors, jwtFromQuery(parts[1])) - case "param": - extractors = append(extractors, jwtFromParam(parts[1])) - case "cookie": - extractors = append(extractors, jwtFromCookie(parts[1])) - case "form": - extractors = append(extractors, jwtFromForm(parts[1])) - case "header": - extractors = append(extractors, jwtFromHeader(parts[1], config.AuthScheme)) - } + extractors, err := createExtractors(config.TokenLookup, config.AuthScheme) + if err != nil { + panic(err) + } + if len(config.TokenLookupFuncs) > 0 { + extractors = append(config.TokenLookupFuncs, extractors...) } return func(next echo.HandlerFunc) echo.HandlerFunc { @@ -206,48 +209,54 @@ func JWTWithConfig(config JWTConfig) echo.MiddlewareFunc { if config.BeforeFunc != nil { config.BeforeFunc(c) } - var auth string - var err error + + var lastExtractorErr error + var lastTokenErr error for _, extractor := range extractors { - // Extract token from extractor, if it's not fail break the loop and - // set auth - auth, err = extractor(c) - if err == nil { - break + auths, err := extractor(c) + if err != nil { + lastExtractorErr = ErrJWTMissing // backwards compatibility: all extraction errors are same (unlike KeyAuth) + continue } - } - // If none of extractor has a token, handle error - if err != nil { - if config.ErrorHandler != nil { - return config.ErrorHandler(err) - } - - if config.ErrorHandlerWithContext != nil { - return config.ErrorHandlerWithContext(err, c) + for _, auth := range auths { + token, err := config.ParseTokenFunc(auth, c) + if err != nil { + lastTokenErr = err + continue + } + // Store user information from token into context. + c.Set(config.ContextKey, token) + if config.SuccessHandler != nil { + config.SuccessHandler(c) + } + return next(c) } - return err } - - token, err := config.ParseTokenFunc(auth, c) - if err == nil { - // Store user information from token into context. - c.Set(config.ContextKey, token) - if config.SuccessHandler != nil { - config.SuccessHandler(c) - } - return next(c) + // we are here only when we did not successfully extract or parse any of the tokens + err := lastTokenErr + if err == nil { // prioritize token errors over extracting errors + err = lastExtractorErr } if config.ErrorHandler != nil { return config.ErrorHandler(err) } if config.ErrorHandlerWithContext != nil { - return config.ErrorHandlerWithContext(err, c) + tmpErr := config.ErrorHandlerWithContext(err, c) + if config.ContinueOnIgnoredError && tmpErr == nil { + return next(c) + } + return tmpErr } - return &echo.HTTPError{ - Code: ErrJWTInvalid.Code, - Message: ErrJWTInvalid.Message, - Internal: err, + + // backwards compatible errors codes + if lastTokenErr != nil { + return &echo.HTTPError{ + Code: ErrJWTInvalid.Code, + Message: ErrJWTInvalid.Message, + Internal: err, + } } + return err // this is lastExtractorErr value } } } @@ -289,59 +298,3 @@ func (config *JWTConfig) defaultKeyFunc(t *jwt.Token) (interface{}, error) { return config.SigningKey, nil } - -// jwtFromHeader returns a `jwtExtractor` that extracts token from the request header. -func jwtFromHeader(header string, authScheme string) jwtExtractor { - return func(c echo.Context) (string, error) { - auth := c.Request().Header.Get(header) - l := len(authScheme) - if len(auth) > l+1 && strings.EqualFold(auth[:l], authScheme) { - return auth[l+1:], nil - } - return "", ErrJWTMissing - } -} - -// jwtFromQuery returns a `jwtExtractor` that extracts token from the query string. -func jwtFromQuery(param string) jwtExtractor { - return func(c echo.Context) (string, error) { - token := c.QueryParam(param) - if token == "" { - return "", ErrJWTMissing - } - return token, nil - } -} - -// jwtFromParam returns a `jwtExtractor` that extracts token from the url param string. -func jwtFromParam(param string) jwtExtractor { - return func(c echo.Context) (string, error) { - token := c.Param(param) - if token == "" { - return "", ErrJWTMissing - } - return token, nil - } -} - -// jwtFromCookie returns a `jwtExtractor` that extracts token from the named cookie. -func jwtFromCookie(name string) jwtExtractor { - return func(c echo.Context) (string, error) { - cookie, err := c.Cookie(name) - if err != nil { - return "", ErrJWTMissing - } - return cookie.Value, nil - } -} - -// jwtFromForm returns a `jwtExtractor` that extracts token from the form field. -func jwtFromForm(name string) jwtExtractor { - return func(c echo.Context) (string, error) { - field := c.FormValue(name) - if field == "" { - return "", ErrJWTMissing - } - return field, nil - } -} diff --git a/vendor/github.com/labstack/echo/v4/middleware/key_auth.go b/vendor/github.com/labstack/echo/v4/middleware/key_auth.go index 54f3b47f..e8a6b085 100644 --- a/vendor/github.com/labstack/echo/v4/middleware/key_auth.go +++ b/vendor/github.com/labstack/echo/v4/middleware/key_auth.go @@ -2,11 +2,8 @@ package middleware import ( "errors" - "fmt" - "net/http" - "strings" - "github.com/labstack/echo/v4" + "net/http" ) type ( @@ -15,15 +12,21 @@ type ( // Skipper defines a function to skip middleware. Skipper Skipper - // KeyLookup is a string in the form of "<source>:<name>" that is used + // KeyLookup is a string in the form of "<source>:<name>" or "<source>:<name>,<source>:<name>" that is used // to extract key from the request. // Optional. Default value "header:Authorization". // Possible values: - // - "header:<name>" + // - "header:<name>" or "header:<name>:<cut-prefix>" + // `<cut-prefix>` is argument value to cut/trim prefix of the extracted value. This is useful if header + // value has static prefix like `Authorization: <auth-scheme> <authorisation-parameters>` where part that we + // want to cut is `<auth-scheme> ` note the space at the end. + // In case of basic authentication `Authorization: Basic <credentials>` prefix we want to remove is `Basic `. // - "query:<name>" // - "form:<name>" // - "cookie:<name>" - KeyLookup string `yaml:"key_lookup"` + // Multiple sources example: + // - "header:Authorization,header:X-Api-Key" + KeyLookup string // AuthScheme to be used in the Authorization header. // Optional. Default value "Bearer". @@ -36,15 +39,20 @@ type ( // ErrorHandler defines a function which is executed for an invalid key. // It may be used to define a custom error. ErrorHandler KeyAuthErrorHandler + + // ContinueOnIgnoredError allows the next middleware/handler to be called when ErrorHandler decides to + // ignore the error (by returning `nil`). + // This is useful when parts of your site/api allow public access and some authorized routes provide extra functionality. + // In that case you can use ErrorHandler to set a default public key auth value in the request context + // and continue. Some logic down the remaining execution chain needs to check that (public) key auth value then. + ContinueOnIgnoredError bool } // KeyAuthValidator defines a function to validate KeyAuth credentials. - KeyAuthValidator func(string, echo.Context) (bool, error) - - keyExtractor func(echo.Context) (string, error) + KeyAuthValidator func(auth string, c echo.Context) (bool, error) // KeyAuthErrorHandler defines a function which is executed for an invalid key. - KeyAuthErrorHandler func(error, echo.Context) error + KeyAuthErrorHandler func(err error, c echo.Context) error ) var ( @@ -56,6 +64,21 @@ var ( } ) +// ErrKeyAuthMissing is error type when KeyAuth middleware is unable to extract value from lookups +type ErrKeyAuthMissing struct { + Err error +} + +// Error returns errors text +func (e *ErrKeyAuthMissing) Error() string { + return e.Err.Error() +} + +// Unwrap unwraps error +func (e *ErrKeyAuthMissing) Unwrap() error { + return e.Err +} + // KeyAuth returns an KeyAuth middleware. // // For valid key it calls the next handler. @@ -85,16 +108,9 @@ func KeyAuthWithConfig(config KeyAuthConfig) echo.MiddlewareFunc { panic("echo: key-auth middleware requires a validator function") } - // Initialize - parts := strings.Split(config.KeyLookup, ":") - extractor := keyFromHeader(parts[1], config.AuthScheme) - switch parts[0] { - case "query": - extractor = keyFromQuery(parts[1]) - case "form": - extractor = keyFromForm(parts[1]) - case "cookie": - extractor = keyFromCookie(parts[1]) + extractors, err := createExtractors(config.KeyLookup, config.AuthScheme) + if err != nil { + panic(err) } return func(next echo.HandlerFunc) echo.HandlerFunc { @@ -103,79 +119,62 @@ func KeyAuthWithConfig(config KeyAuthConfig) echo.MiddlewareFunc { return next(c) } - // Extract and verify key - key, err := extractor(c) - if err != nil { - if config.ErrorHandler != nil { - return config.ErrorHandler(err, c) + var lastExtractorErr error + var lastValidatorErr error + for _, extractor := range extractors { + keys, err := extractor(c) + if err != nil { + lastExtractorErr = err + continue + } + for _, key := range keys { + valid, err := config.Validator(key, c) + if err != nil { + lastValidatorErr = err + continue + } + if valid { + return next(c) + } + lastValidatorErr = errors.New("invalid key") } - return echo.NewHTTPError(http.StatusBadRequest, err.Error()) } - valid, err := config.Validator(key, c) - if err != nil { - if config.ErrorHandler != nil { - return config.ErrorHandler(err, c) + + // we are here only when we did not successfully extract and validate any of keys + err := lastValidatorErr + if err == nil { // prioritize validator errors over extracting errors + // ugly part to preserve backwards compatible errors. someone could rely on them + if lastExtractorErr == errQueryExtractorValueMissing { + err = errors.New("missing key in the query string") + } else if lastExtractorErr == errCookieExtractorValueMissing { + err = errors.New("missing key in cookies") + } else if lastExtractorErr == errFormExtractorValueMissing { + err = errors.New("missing key in the form") + } else if lastExtractorErr == errHeaderExtractorValueMissing { + err = errors.New("missing key in request header") + } else if lastExtractorErr == errHeaderExtractorValueInvalid { + err = errors.New("invalid key in the request header") + } else { + err = lastExtractorErr } + err = &ErrKeyAuthMissing{Err: err} + } + + if config.ErrorHandler != nil { + tmpErr := config.ErrorHandler(err, c) + if config.ContinueOnIgnoredError && tmpErr == nil { + return next(c) + } + return tmpErr + } + if lastValidatorErr != nil { // prioritize validator errors over extracting errors return &echo.HTTPError{ Code: http.StatusUnauthorized, - Message: "invalid key", - Internal: err, + Message: "Unauthorized", + Internal: lastValidatorErr, } - } else if valid { - return next(c) } - return echo.ErrUnauthorized - } - } -} - -// keyFromHeader returns a `keyExtractor` that extracts key from the request header. -func keyFromHeader(header string, authScheme string) keyExtractor { - return func(c echo.Context) (string, error) { - auth := c.Request().Header.Get(header) - if auth == "" { - return "", errors.New("missing key in request header") - } - if header == echo.HeaderAuthorization { - l := len(authScheme) - if len(auth) > l+1 && auth[:l] == authScheme { - return auth[l+1:], nil - } - return "", errors.New("invalid key in the request header") - } - return auth, nil - } -} - -// keyFromQuery returns a `keyExtractor` that extracts key from the query string. -func keyFromQuery(param string) keyExtractor { - return func(c echo.Context) (string, error) { - key := c.QueryParam(param) - if key == "" { - return "", errors.New("missing key in the query string") - } - return key, nil - } -} - -// keyFromForm returns a `keyExtractor` that extracts key from the form. -func keyFromForm(param string) keyExtractor { - return func(c echo.Context) (string, error) { - key := c.FormValue(param) - if key == "" { - return "", errors.New("missing key in the form") - } - return key, nil - } -} - -// keyFromCookie returns a `keyExtractor` that extracts key from the form. -func keyFromCookie(cookieName string) keyExtractor { - return func(c echo.Context) (string, error) { - key, err := c.Cookie(cookieName) - if err != nil { - return "", fmt.Errorf("missing key in cookies: %w", err) + return echo.NewHTTPError(http.StatusBadRequest, err.Error()) } - return key.Value, nil } } diff --git a/vendor/github.com/labstack/echo/v4/middleware/middleware.go b/vendor/github.com/labstack/echo/v4/middleware/middleware.go index a7ad73a5..f250ca49 100644 --- a/vendor/github.com/labstack/echo/v4/middleware/middleware.go +++ b/vendor/github.com/labstack/echo/v4/middleware/middleware.go @@ -12,10 +12,10 @@ import ( type ( // Skipper defines a function to skip middleware. Returning true skips processing // the middleware. - Skipper func(echo.Context) bool + Skipper func(c echo.Context) bool // BeforeFunc defines a function which is executed just before the middleware. - BeforeFunc func(echo.Context) + BeforeFunc func(c echo.Context) ) func captureTokens(pattern *regexp.Regexp, input string) *strings.Replacer { diff --git a/vendor/github.com/labstack/echo/v4/middleware/recover.go b/vendor/github.com/labstack/echo/v4/middleware/recover.go index 0dbe740d..a621a9ef 100644 --- a/vendor/github.com/labstack/echo/v4/middleware/recover.go +++ b/vendor/github.com/labstack/echo/v4/middleware/recover.go @@ -9,6 +9,9 @@ import ( ) type ( + // LogErrorFunc defines a function for custom logging in the middleware. + LogErrorFunc func(c echo.Context, err error, stack []byte) error + // RecoverConfig defines the config for Recover middleware. RecoverConfig struct { // Skipper defines a function to skip middleware. @@ -30,6 +33,10 @@ type ( // LogLevel is log level to printing stack trace. // Optional. Default value 0 (Print). LogLevel log.Lvl + + // LogErrorFunc defines a function for custom logging in the middleware. + // If it's set you don't need to provide LogLevel for config. + LogErrorFunc LogErrorFunc } ) @@ -41,6 +48,7 @@ var ( DisableStackAll: false, DisablePrintStack: false, LogLevel: 0, + LogErrorFunc: nil, } ) @@ -73,9 +81,18 @@ func RecoverWithConfig(config RecoverConfig) echo.MiddlewareFunc { if !ok { err = fmt.Errorf("%v", r) } - stack := make([]byte, config.StackSize) - length := runtime.Stack(stack, !config.DisableStackAll) + var stack []byte + var length int + if !config.DisablePrintStack { + stack = make([]byte, config.StackSize) + length = runtime.Stack(stack, !config.DisableStackAll) + stack = stack[:length] + } + + if config.LogErrorFunc != nil { + err = config.LogErrorFunc(c, err, stack) + } else if !config.DisablePrintStack { msg := fmt.Sprintf("[PANIC RECOVER] %v %s\n", err, stack[:length]) switch config.LogLevel { case log.DEBUG: diff --git a/vendor/github.com/labstack/echo/v4/router.go b/vendor/github.com/labstack/echo/v4/router.go index dc93e29c..a1de2d6e 100644 --- a/vendor/github.com/labstack/echo/v4/router.go +++ b/vendor/github.com/labstack/echo/v4/router.go @@ -1,6 +1,7 @@ package echo import ( + "bytes" "net/http" ) @@ -31,17 +32,18 @@ type ( kind uint8 children []*node methodHandler struct { - connect HandlerFunc - delete HandlerFunc - get HandlerFunc - head HandlerFunc - options HandlerFunc - patch HandlerFunc - post HandlerFunc - propfind HandlerFunc - put HandlerFunc - trace HandlerFunc - report HandlerFunc + connect HandlerFunc + delete HandlerFunc + get HandlerFunc + head HandlerFunc + options HandlerFunc + patch HandlerFunc + post HandlerFunc + propfind HandlerFunc + put HandlerFunc + trace HandlerFunc + report HandlerFunc + allowHeader string } ) @@ -68,6 +70,51 @@ func (m *methodHandler) isHandler() bool { m.report != nil } +func (m *methodHandler) updateAllowHeader() { + buf := new(bytes.Buffer) + buf.WriteString(http.MethodOptions) + + if m.connect != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodConnect) + } + if m.delete != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodDelete) + } + if m.get != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodGet) + } + if m.head != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodHead) + } + if m.patch != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodPatch) + } + if m.post != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodPost) + } + if m.propfind != nil { + buf.WriteString(", PROPFIND") + } + if m.put != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodPut) + } + if m.trace != nil { + buf.WriteString(", ") + buf.WriteString(http.MethodTrace) + } + if m.report != nil { + buf.WriteString(", REPORT") + } + m.allowHeader = buf.String() +} + // NewRouter returns a new Router instance. func NewRouter(e *Echo) *Router { return &Router{ @@ -326,6 +373,7 @@ func (n *node) addHandler(method string, h HandlerFunc) { n.methodHandler.report = h } + n.methodHandler.updateAllowHeader() if h != nil { n.isHandler = true } else { @@ -362,13 +410,14 @@ func (n *node) findHandler(method string) HandlerFunc { } } -func (n *node) checkMethodNotAllowed() HandlerFunc { - for _, m := range methods { - if h := n.findHandler(m); h != nil { - return MethodNotAllowedHandler - } +func optionsMethodHandler(allowMethods string) func(c Context) error { + return func(c Context) error { + // Note: we are not handling most of the CORS headers here. CORS is handled by CORS middleware + // 'OPTIONS' method RFC: https://httpwg.org/specs/rfc7231.html#OPTIONS + // 'Allow' header RFC: https://datatracker.ietf.org/doc/html/rfc7231#section-7.4.1 + c.Response().Header().Add(HeaderAllow, allowMethods) + return c.NoContent(http.StatusNoContent) } - return NotFoundHandler } // Find lookup a handler registered for method and path. It also parses URL for path @@ -563,10 +612,16 @@ func (r *Router) Find(method, path string, c Context) { // use previous match as basis. although we have no matching handler we have path match. // so we can send http.StatusMethodNotAllowed (405) instead of http.StatusNotFound (404) currentNode = previousBestMatchNode - ctx.handler = currentNode.checkMethodNotAllowed() + + ctx.handler = NotFoundHandler + if currentNode.isHandler { + ctx.Set(ContextKeyHeaderAllow, currentNode.methodHandler.allowHeader) + ctx.handler = MethodNotAllowedHandler + if method == http.MethodOptions { + ctx.handler = optionsMethodHandler(currentNode.methodHandler.allowHeader) + } + } } ctx.path = currentNode.ppath ctx.pnames = currentNode.pnames - - return } diff --git a/vendor/github.com/mattermost/mattermost-server/v6/NOTICE.txt b/vendor/github.com/mattermost/mattermost-server/v6/NOTICE.txt index 0d3d8dd9..3f186ef7 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/NOTICE.txt +++ b/vendor/github.com/mattermost/mattermost-server/v6/NOTICE.txt @@ -4494,7 +4494,7 @@ SOFTWARE. This product contains 'archiver' by Matthew Holt -A library to handle direferen archive files (zip, rar, tar.gz...) +A library to handle different archive files (zip, rar, tar.gz...) * HOMEPAGE: * https://github.com/mholt/archiver diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/channel.go b/vendor/github.com/mattermost/mattermost-server/v6/model/channel.go index 20604700..dfa40347 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/channel.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/channel.go @@ -144,9 +144,9 @@ type ChannelSearchOpts struct { } type ChannelMemberCountByGroup struct { - GroupId string `db:"-" json:"group_id"` - ChannelMemberCount int64 `db:"-" json:"channel_member_count"` - ChannelMemberTimezonesCount int64 `db:"-" json:"channel_member_timezones_count"` + GroupId string `json:"group_id"` + ChannelMemberCount int64 `json:"channel_member_count"` + ChannelMemberTimezonesCount int64 `json:"channel_member_timezones_count"` } type ChannelOption func(channel *Channel) diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/channel_count.go b/vendor/github.com/mattermost/mattermost-server/v6/model/channel_count.go index 25329a15..17cea756 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/channel_count.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/channel_count.go @@ -17,7 +17,7 @@ type ChannelCounts struct { } func (o *ChannelCounts) Etag() string { - // we don't include CountsRoot in ETag calculation, since it's a deriviative + // we don't include CountsRoot in ETag calculation, since it's a derivative ids := []string{} for id := range o.Counts { ids = append(ids, id) diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/client4.go b/vendor/github.com/mattermost/mattermost-server/v6/model/client4.go index dd9de4d0..d4213d15 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/client4.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/client4.go @@ -1978,7 +1978,7 @@ func (c *Client4) GetBotsIncludeDeleted(page, perPage int, etag string) ([]*Bot, return bots, BuildResponse(r), nil } -// GetBotsOrphaned fetches the given page of bots, only including orphanded bots. +// GetBotsOrphaned fetches the given page of bots, only including orphaned bots. func (c *Client4) GetBotsOrphaned(page, perPage int, etag string) ([]*Bot, *Response, error) { query := fmt.Sprintf("?page=%v&per_page=%v&only_orphaned="+c.boolString(true), page, perPage) r, err := c.DoAPIGet(c.botsRoute()+query, etag) @@ -4438,6 +4438,9 @@ func (c *Client4) UpdateConfig(config *Config) (*Config, *Response, error) { } // MigrateConfig will migrate existing config to the new one. +// DEPRECATED: The config migrate API has been moved to be a purely +// mmctl --local endpoint. This method will be removed in a +// future major release. func (c *Client4) MigrateConfig(from, to string) (*Response, error) { m := make(map[string]string, 2) m["from"] = from diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/cloud.go b/vendor/github.com/mattermost/mattermost-server/v6/model/cloud.go index 7c63c138..90fc7f94 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/cloud.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/cloud.go @@ -70,6 +70,7 @@ type StripeSetupIntent struct { // ConfirmPaymentMethodRequest contains the fields for the customer payment update API. type ConfirmPaymentMethodRequest struct { StripeSetupIntentID string `json:"stripe_setup_intent_id"` + SubscriptionID string `json:"subscription_id"` } // Customer model represents a customer on the system. @@ -137,24 +138,25 @@ func (s *Subscription) GetWorkSpaceNameFromDNS() string { // Invoice model represents a cloud invoice type Invoice struct { - ID string `json:"id"` - Number string `json:"number"` - CreateAt int64 `json:"create_at"` - Total int64 `json:"total"` - Tax int64 `json:"tax"` - Status string `json:"status"` - Description string `json:"description"` - PeriodStart int64 `json:"period_start"` - PeriodEnd int64 `json:"period_end"` - SubscriptionID string `json:"subscription_id"` - Items []*InvoiceLineItem `json:"line_items"` + ID string `json:"id"` + Number string `json:"number"` + CreateAt int64 `json:"create_at"` + Total int64 `json:"total"` + Tax int64 `json:"tax"` + Status string `json:"status"` + Description string `json:"description"` + PeriodStart int64 `json:"period_start"` + PeriodEnd int64 `json:"period_end"` + SubscriptionID string `json:"subscription_id"` + Items []*InvoiceLineItem `json:"line_items"` + CurrentProductName string `json:"current_product_name"` } // InvoiceLineItem model represents a cloud invoice lineitem tied to an invoice. type InvoiceLineItem struct { PriceID string `json:"price_id"` Total int64 `json:"total"` - Quantity int64 `json:"quantity"` + Quantity float64 `json:"quantity"` PricePerUnit int64 `json:"price_per_unit"` Description string `json:"description"` Type string `json:"type"` diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/config.go b/vendor/github.com/mattermost/mattermost-server/v6/model/config.go index bec5afbe..d70b06b5 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/config.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/config.go @@ -126,7 +126,7 @@ const ( EmailSettingsDefaultFeedbackOrganization = "" - SupportSettingsDefaultTermsOfServiceLink = "https://mattermost.com/terms-of-service/" + SupportSettingsDefaultTermsOfServiceLink = "https://mattermost.com/terms-of-use/" SupportSettingsDefaultPrivacyPolicyLink = "https://mattermost.com/privacy-policy/" SupportSettingsDefaultAboutLink = "https://about.mattermost.com/default-about/" SupportSettingsDefaultHelpLink = "https://about.mattermost.com/default-help/" @@ -202,6 +202,7 @@ const ( DataRetentionSettingsDefaultMessageRetentionDays = 365 DataRetentionSettingsDefaultFileRetentionDays = 365 + DataRetentionSettingsDefaultBoardsRetentionDays = 365 DataRetentionSettingsDefaultDeletionJobStartTime = "02:00" DataRetentionSettingsDefaultBatchSize = 3000 @@ -771,7 +772,7 @@ func (s *ServiceSettings) SetDefaults(isUpdate bool) { } if s.ThreadAutoFollow == nil { - s.ThreadAutoFollow = NewBool(true) + s.ThreadAutoFollow = NewBool(false) } if s.CollapsedThreads == nil { @@ -1074,19 +1075,20 @@ type ReplicaLagSettings struct { } type SqlSettings struct { - DriverName *string `access:"environment_database,write_restrictable,cloud_restrictable"` - DataSource *string `access:"environment_database,write_restrictable,cloud_restrictable"` // telemetry: none - DataSourceReplicas []string `access:"environment_database,write_restrictable,cloud_restrictable"` - DataSourceSearchReplicas []string `access:"environment_database,write_restrictable,cloud_restrictable"` - MaxIdleConns *int `access:"environment_database,write_restrictable,cloud_restrictable"` - ConnMaxLifetimeMilliseconds *int `access:"environment_database,write_restrictable,cloud_restrictable"` - ConnMaxIdleTimeMilliseconds *int `access:"environment_database,write_restrictable,cloud_restrictable"` - MaxOpenConns *int `access:"environment_database,write_restrictable,cloud_restrictable"` - Trace *bool `access:"environment_database,write_restrictable,cloud_restrictable"` - AtRestEncryptKey *string `access:"environment_database,write_restrictable,cloud_restrictable"` // telemetry: none - QueryTimeout *int `access:"environment_database,write_restrictable,cloud_restrictable"` - DisableDatabaseSearch *bool `access:"environment_database,write_restrictable,cloud_restrictable"` - ReplicaLagSettings []*ReplicaLagSettings `access:"environment_database,write_restrictable,cloud_restrictable"` // telemetry: none + DriverName *string `access:"environment_database,write_restrictable,cloud_restrictable"` + DataSource *string `access:"environment_database,write_restrictable,cloud_restrictable"` // telemetry: none + DataSourceReplicas []string `access:"environment_database,write_restrictable,cloud_restrictable"` + DataSourceSearchReplicas []string `access:"environment_database,write_restrictable,cloud_restrictable"` + MaxIdleConns *int `access:"environment_database,write_restrictable,cloud_restrictable"` + ConnMaxLifetimeMilliseconds *int `access:"environment_database,write_restrictable,cloud_restrictable"` + ConnMaxIdleTimeMilliseconds *int `access:"environment_database,write_restrictable,cloud_restrictable"` + MaxOpenConns *int `access:"environment_database,write_restrictable,cloud_restrictable"` + Trace *bool `access:"environment_database,write_restrictable,cloud_restrictable"` + AtRestEncryptKey *string `access:"environment_database,write_restrictable,cloud_restrictable"` // telemetry: none + QueryTimeout *int `access:"environment_database,write_restrictable,cloud_restrictable"` + DisableDatabaseSearch *bool `access:"environment_database,write_restrictable,cloud_restrictable"` + MigrationsStatementTimeoutSeconds *int `access:"environment_database,write_restrictable,cloud_restrictable"` + ReplicaLagSettings []*ReplicaLagSettings `access:"environment_database,write_restrictable,cloud_restrictable"` // telemetry: none } func (s *SqlSettings) SetDefaults(isUpdate bool) { @@ -1144,6 +1146,10 @@ func (s *SqlSettings) SetDefaults(isUpdate bool) { s.DisableDatabaseSearch = NewBool(false) } + if s.MigrationsStatementTimeoutSeconds == nil { + s.MigrationsStatementTimeoutSeconds = NewInt(100000) + } + if s.ReplicaLagSettings == nil { s.ReplicaLagSettings = []*ReplicaLagSettings{} } @@ -2581,8 +2587,10 @@ func (bs *BleveSettings) SetDefaults() { type DataRetentionSettings struct { EnableMessageDeletion *bool `access:"compliance_data_retention_policy"` EnableFileDeletion *bool `access:"compliance_data_retention_policy"` + EnableBoardsDeletion *bool `access:"compliance_data_retention_policy"` MessageRetentionDays *int `access:"compliance_data_retention_policy"` FileRetentionDays *int `access:"compliance_data_retention_policy"` + BoardsRetentionDays *int `access:"compliance_data_retention_policy"` DeletionJobStartTime *string `access:"compliance_data_retention_policy"` BatchSize *int `access:"compliance_data_retention_policy"` } @@ -2596,6 +2604,10 @@ func (s *DataRetentionSettings) SetDefaults() { s.EnableFileDeletion = NewBool(false) } + if s.EnableBoardsDeletion == nil { + s.EnableBoardsDeletion = NewBool(false) + } + if s.MessageRetentionDays == nil { s.MessageRetentionDays = NewInt(DataRetentionSettingsDefaultMessageRetentionDays) } @@ -2604,6 +2616,10 @@ func (s *DataRetentionSettings) SetDefaults() { s.FileRetentionDays = NewInt(DataRetentionSettingsDefaultFileRetentionDays) } + if s.BoardsRetentionDays == nil { + s.BoardsRetentionDays = NewInt(DataRetentionSettingsDefaultBoardsRetentionDays) + } + if s.DeletionJobStartTime == nil { s.DeletionJobStartTime = NewString(DataRetentionSettingsDefaultDeletionJobStartTime) } diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/data_retention_policy.go b/vendor/github.com/mattermost/mattermost-server/v6/model/data_retention_policy.go index 0a1d318e..32102517 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/data_retention_policy.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/data_retention_policy.go @@ -6,8 +6,10 @@ package model type GlobalRetentionPolicy struct { MessageDeletionEnabled bool `json:"message_deletion_enabled"` FileDeletionEnabled bool `json:"file_deletion_enabled"` + BoardsDeletionEnabled bool `json:"boards_deletion_enabled"` MessageRetentionCutoff int64 `json:"message_retention_cutoff"` FileRetentionCutoff int64 `json:"file_retention_cutoff"` + BoardsRetentionCutoff int64 `json:"boards_retention_cutoff"` } type RetentionPolicy struct { diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/feature_flags.go b/vendor/github.com/mattermost/mattermost-server/v6/model/feature_flags.go index a2d53e34..6998a03a 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/feature_flags.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/feature_flags.go @@ -47,9 +47,6 @@ type FeatureFlags struct { // Determine whether when a user gets created, they'll have noisy notifications e.g. Send desktop notifications for all activity NewAccountNoisy bool - // Enable Boards Unfurl Preview - BoardsUnfurl bool - // Enable Calls plugin support in the mobile app CallsMobile bool @@ -70,6 +67,14 @@ type FeatureFlags struct { // A/B test for whether radio buttons or toggle button is more effective in in-screen invite to team modal ("none", "toggle") InviteToTeam string + + // Enable inline post editing + InlinePostEditing bool + + // Enable DataRetention for Boards + BoardsDataRetention bool + + NormalizeLdapDNs bool } func (f *FeatureFlags) SetDefaults() { @@ -86,7 +91,6 @@ func (f *FeatureFlags) SetDefaults() { f.GlobalHeader = true f.AddChannelButton = "by_team_name" f.NewAccountNoisy = false - f.BoardsUnfurl = true f.CallsMobile = false f.AutoTour = "none" f.BoardsFeatureFlags = "" @@ -94,6 +98,9 @@ func (f *FeatureFlags) SetDefaults() { f.GuidedChannelCreation = false f.ResendInviteEmailInterval = "" f.InviteToTeam = "none" + f.InlinePostEditing = false + f.BoardsDataRetention = false + f.NormalizeLdapDNs = false } func (f *FeatureFlags) Plugins() map[string]string { diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/post.go b/vendor/github.com/mattermost/mattermost-server/v6/model/post.go index d13fef0a..87c1f338 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/post.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/post.go @@ -6,6 +6,7 @@ package model import ( "encoding/json" "errors" + "io" "net/http" "regexp" "sort" @@ -227,6 +228,11 @@ func (o *Post) ToJSON() (string, error) { return string(b), err } +func (o *Post) EncodeJSON(w io.Writer) error { + o.StripActionIntegrations() + return json.NewEncoder(w).Encode(o) +} + type GetPostsSinceOptions struct { UserId string ChannelId string diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/post_list.go b/vendor/github.com/mattermost/mattermost-server/v6/model/post_list.go index 933d1f8f..bb28063a 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/post_list.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/post_list.go @@ -5,6 +5,7 @@ package model import ( "encoding/json" + "io" "sort" ) @@ -80,6 +81,11 @@ func (o *PostList) ToJSON() (string, error) { return string(b), err } +func (o *PostList) EncodeJSON(w io.Writer) error { + o.StripActionIntegrations() + return json.NewEncoder(w).Encode(o) +} + func (o *PostList) MakeNonNil() { if o.Order == nil { o.Order = make([]string, 0) diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/post_metadata.go b/vendor/github.com/mattermost/mattermost-server/v6/model/post_metadata.go index 0f9e61d3..6ccc1ebf 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/post_metadata.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/post_metadata.go @@ -14,7 +14,7 @@ type PostMetadata struct { // Files holds information about the file attachments on the post. Files []*FileInfo `json:"files,omitempty"` - // Images holds the dimensions of all external images in the post as a map of the image URL to its diemsnions. + // Images holds the dimensions of all external images in the post as a map of the image URL to its dimensions. // This includes image embeds (when the message contains a plaintext link to an image), Markdown images, images // contained in the OpenGraph metadata, and images contained in message attachments. It does not contain // the dimensions of any file attachments as those are stored in FileInfos. diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/post_search_results.go b/vendor/github.com/mattermost/mattermost-server/v6/model/post_search_results.go index 92e044a7..a3afc723 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/post_search_results.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/post_search_results.go @@ -5,6 +5,7 @@ package model import ( "encoding/json" + "io" ) type PostSearchMatches map[string][]string @@ -27,3 +28,8 @@ func (o *PostSearchResults) ToJSON() (string, error) { b, err := json.Marshal(©) return string(b), err } + +func (o *PostSearchResults) EncodeJSON(w io.Writer) error { + o.PostList.StripActionIntegrations() + return json.NewEncoder(w).Encode(o) +} diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/role.go b/vendor/github.com/mattermost/mattermost-server/v6/model/role.go index b8d75d4b..0dcb405c 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/role.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/role.go @@ -558,7 +558,7 @@ func (r *Role) GetChannelModeratedPermissions(channelType ChannelType) map[strin return moderatedPermissions } -// RolePatchFromChannelModerationsPatch Creates and returns a RolePatch based on a slice of ChannelModerationPatchs, roleName is expected to be either "members" or "guests". +// RolePatchFromChannelModerationsPatch Creates and returns a RolePatch based on a slice of ChannelModerationPatches, roleName is expected to be either "members" or "guests". func (r *Role) RolePatchFromChannelModerationsPatch(channelModerationsPatch []*ChannelModerationPatch, roleName string) *RolePatch { permissionsToAddToPatch := make(map[string]bool) diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/session.go b/vendor/github.com/mattermost/mattermost-server/v6/model/session.go index 72f8d646..36955583 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/session.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/session.go @@ -15,6 +15,7 @@ const ( SessionCookieToken = "MMAUTHTOKEN" SessionCookieUser = "MMUSERID" SessionCookieCsrf = "MMCSRF" + SessionCookieCloudUrl = "MMCLOUDURL" SessionCacheSize = 35000 SessionPropPlatform = "platform" SessionPropOs = "os" diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/team_member.go b/vendor/github.com/mattermost/mattermost-server/v6/model/team_member.go index cec0a6a6..70fd40c4 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/team_member.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/team_member.go @@ -69,6 +69,7 @@ type TeamMembersGetOptions struct { ViewRestrictions *ViewUsersRestrictions } +//msgp:ignore TeamInviteReminderData type TeamInviteReminderData struct { Interval string } diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/user.go b/vendor/github.com/mattermost/mattermost-server/v6/model/user.go index 0b691c6c..5035f9a5 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/user.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/user.go @@ -703,7 +703,7 @@ func IsValidUserRoles(userRoles string) bool { return true } -// Make sure you acually want to use this function. In context.go there are functions to check permissions +// Make sure you actually want to use this function. In context.go there are functions to check permissions // This function should not be used to check permissions. func (u *User) IsGuest() bool { return IsInRole(u.Roles, SystemGuestRoleId) @@ -713,13 +713,13 @@ func (u *User) IsSystemAdmin() bool { return IsInRole(u.Roles, SystemAdminRoleId) } -// Make sure you acually want to use this function. In context.go there are functions to check permissions +// Make sure you actually want to use this function. In context.go there are functions to check permissions // This function should not be used to check permissions. func (u *User) IsInRole(inRole string) bool { return IsInRole(u.Roles, inRole) } -// Make sure you acually want to use this function. In context.go there are functions to check permissions +// Make sure you actually want to use this function. In context.go there are functions to check permissions // This function should not be used to check permissions. func IsInRole(userRoles string, inRole string) bool { roles := strings.Split(userRoles, " ") diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/user_serial_gen.go b/vendor/github.com/mattermost/mattermost-server/v6/model/user_serial_gen.go index fb40b577..3bcb3cf7 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/user_serial_gen.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/user_serial_gen.go @@ -17,8 +17,8 @@ func (z *User) DecodeMsg(dc *msgp.Reader) (err error) { err = msgp.WrapError(err) return } - if zb0001 != 32 { - err = msgp.ArrayError{Wanted: 32, Got: zb0001} + if zb0001 != 33 { + err = msgp.ArrayError{Wanted: 33, Got: zb0001} return } z.Id, err = dc.ReadString() @@ -205,13 +205,18 @@ func (z *User) DecodeMsg(dc *msgp.Reader) (err error) { err = msgp.WrapError(err, "TermsOfServiceCreateAt") return } + z.DisableWelcomeEmail, err = dc.ReadBool() + if err != nil { + err = msgp.WrapError(err, "DisableWelcomeEmail") + return + } return } // EncodeMsg implements msgp.Encodable func (z *User) EncodeMsg(en *msgp.Writer) (err error) { - // array header, size 32 - err = en.Append(0xdc, 0x0, 0x20) + // array header, size 33 + err = en.Append(0xdc, 0x0, 0x21) if err != nil { return } @@ -389,14 +394,19 @@ func (z *User) EncodeMsg(en *msgp.Writer) (err error) { err = msgp.WrapError(err, "TermsOfServiceCreateAt") return } + err = en.WriteBool(z.DisableWelcomeEmail) + if err != nil { + err = msgp.WrapError(err, "DisableWelcomeEmail") + return + } return } // MarshalMsg implements msgp.Marshaler func (z *User) MarshalMsg(b []byte) (o []byte, err error) { o = msgp.Require(b, z.Msgsize()) - // array header, size 32 - o = append(o, 0xdc, 0x0, 0x20) + // array header, size 33 + o = append(o, 0xdc, 0x0, 0x21) o = msgp.AppendString(o, z.Id) o = msgp.AppendInt64(o, z.CreateAt) o = msgp.AppendInt64(o, z.UpdateAt) @@ -449,6 +459,7 @@ func (z *User) MarshalMsg(b []byte) (o []byte, err error) { o = msgp.AppendInt64(o, z.BotLastIconUpdate) o = msgp.AppendString(o, z.TermsOfServiceId) o = msgp.AppendInt64(o, z.TermsOfServiceCreateAt) + o = msgp.AppendBool(o, z.DisableWelcomeEmail) return } @@ -460,8 +471,8 @@ func (z *User) UnmarshalMsg(bts []byte) (o []byte, err error) { err = msgp.WrapError(err) return } - if zb0001 != 32 { - err = msgp.ArrayError{Wanted: 32, Got: zb0001} + if zb0001 != 33 { + err = msgp.ArrayError{Wanted: 33, Got: zb0001} return } z.Id, bts, err = msgp.ReadStringBytes(bts) @@ -646,6 +657,11 @@ func (z *User) UnmarshalMsg(bts []byte) (o []byte, err error) { err = msgp.WrapError(err, "TermsOfServiceCreateAt") return } + z.DisableWelcomeEmail, bts, err = msgp.ReadBoolBytes(bts) + if err != nil { + err = msgp.WrapError(err, "DisableWelcomeEmail") + return + } o = bts return } @@ -664,7 +680,7 @@ func (z *User) Msgsize() (s int) { } else { s += msgp.StringPrefixSize + len(*z.RemoteId) } - s += msgp.Int64Size + msgp.BoolSize + msgp.StringPrefixSize + len(z.BotDescription) + msgp.Int64Size + msgp.StringPrefixSize + len(z.TermsOfServiceId) + msgp.Int64Size + s += msgp.Int64Size + msgp.BoolSize + msgp.StringPrefixSize + len(z.BotDescription) + msgp.Int64Size + msgp.StringPrefixSize + len(z.TermsOfServiceId) + msgp.Int64Size + msgp.BoolSize return } diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/utils.go b/vendor/github.com/mattermost/mattermost-server/v6/model/utils.go index e9170588..c88d9100 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/utils.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/utils.go @@ -76,7 +76,12 @@ func (sa StringArray) Equals(input StringArray) bool { // Value converts StringArray to database value func (sa StringArray) Value() (driver.Value, error) { - return json.Marshal(sa) + j, err := json.Marshal(sa) + if err != nil { + return nil, err + } + // non utf8 characters are not supported https://mattermost.atlassian.net/browse/MM-41066 + return string(j), err } // Scan converts database column value to StringArray @@ -117,6 +122,16 @@ func (m *StringMap) Scan(value interface{}) error { return errors.New("received value is neither a byte slice nor string") } +// Value converts StringMap to database value +func (m StringMap) Value() (driver.Value, error) { + j, err := json.Marshal(m) + if err != nil { + return nil, err + } + // non utf8 characters are not supported https://mattermost.atlassian.net/browse/MM-41066 + return string(j), err +} + func (si *StringInterface) Scan(value interface{}) error { if value == nil { return nil @@ -135,6 +150,16 @@ func (si *StringInterface) Scan(value interface{}) error { return errors.New("received value is neither a byte slice nor string") } +// Value converts StringInterface to database value +func (si StringInterface) Value() (driver.Value, error) { + j, err := json.Marshal(si) + if err != nil { + return nil, err + } + // non utf8 characters are not supported https://mattermost.atlassian.net/browse/MM-41066 + return string(j), err +} + var translateFunc i18n.TranslateFunc var translateFuncOnce sync.Once diff --git a/vendor/github.com/mattermost/mattermost-server/v6/model/version.go b/vendor/github.com/mattermost/mattermost-server/v6/model/version.go index 6020d5f8..673d4be9 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/model/version.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/model/version.go @@ -13,6 +13,9 @@ import ( // It should be maintained in chronological order with most current // release at the front of the list. var versions = []string{ + "6.4.2", + "6.4.1", + "6.4.0", "6.3.0", "6.2.0", "6.1.0", diff --git a/vendor/github.com/mattermost/mattermost-server/v6/shared/filestore/s3_overrides.go b/vendor/github.com/mattermost/mattermost-server/v6/shared/filestore/s3_overrides.go index e7b29b98..697809ee 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/shared/filestore/s3_overrides.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/shared/filestore/s3_overrides.go @@ -23,7 +23,7 @@ type customTransport struct { // RoundTrip implements the http.Roundtripper interface. func (t *customTransport) RoundTrip(req *http.Request) (*http.Response, error) { - // Rountrippers should not modify the original request. + // Roundtrippers should not modify the original request. newReq := req.Clone(context.Background()) *newReq.URL = *req.URL req.URL.Scheme = t.scheme diff --git a/vendor/github.com/mattermost/mattermost-server/v6/shared/mlog/mlog.go b/vendor/github.com/mattermost/mattermost-server/v6/shared/mlog/mlog.go index 0f4cc1fe..9b4bb820 100644 --- a/vendor/github.com/mattermost/mattermost-server/v6/shared/mlog/mlog.go +++ b/vendor/github.com/mattermost/mattermost-server/v6/shared/mlog/mlog.go @@ -352,7 +352,7 @@ func (l *Logger) RedirectStdLog(level Level, fields ...Field) func() { // RemoveTargets safely removes one or more targets based on the filtering method. // `f` should return true to delete the target, false to keep it. // When removing a target, best effort is made to write any queued log records before -// closing, with cxt determining how much time can be spent in total. +// closing, with ctx determining how much time can be spent in total. // Note, keep the timeout short since this method blocks certain logging operations. func (l *Logger) RemoveTargets(ctx context.Context, f func(ti TargetInfo) bool) error { return l.log.Logr().RemoveTargets(ctx, f) @@ -379,7 +379,7 @@ func (l *Logger) Flush() error { return l.log.Logr().FlushWithTimeout(ctx) } -// Flush forces all targets to write out any queued log records with the specfified timeout. +// Flush forces all targets to write out any queued log records with the specified timeout. func (l *Logger) FlushWithTimeout(ctx context.Context) error { return l.log.Logr().FlushWithTimeout(ctx) } diff --git a/vendor/github.com/slack-go/slack/README.md b/vendor/github.com/slack-go/slack/README.md index dbf73d4e..39b04ce8 100644 --- a/vendor/github.com/slack-go/slack/README.md +++ b/vendor/github.com/slack-go/slack/README.md @@ -1,9 +1,9 @@ Slack API in Go [![Go Reference](https://pkg.go.dev/badge/github.com/slack-go/slack.svg)](https://pkg.go.dev/github.com/slack-go/slack) =============== -This is the original Slack library for Go created by Norberto Lopes, transferred to a Github organization. +This is the original Slack library for Go created by Norberto Lopes, transferred to a GitHub organization. -[![Join the chat at https://gitter.im/go-slack/Lobby](https://badges.gitter.im/go-slack/Lobby.svg)](https://gitter.im/go-slack/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) +You can also chat with us on the #slack-go, #slack-go-ja Slack channel on the Gophers Slack. ![logo](logo.png "icon") @@ -70,8 +70,15 @@ func main() { } ``` +## Minimal Socket Mode usage: + +See https://github.com/slack-go/slack/blob/master/examples/socketmode/socketmode.go + + ## Minimal RTM usage: +As mentioned in https://api.slack.com/rtm - for most applications, Socket Mode is a better way to communicate with Slack. + See https://github.com/slack-go/slack/blob/master/examples/websocket/websocket.go diff --git a/vendor/github.com/slack-go/slack/block_conv.go b/vendor/github.com/slack-go/slack/block_conv.go index c5378b60..1a2c57e9 100644 --- a/vendor/github.com/slack-go/slack/block_conv.go +++ b/vendor/github.com/slack-go/slack/block_conv.go @@ -2,9 +2,8 @@ package slack import ( "encoding/json" + "errors" "fmt" - - "github.com/pkg/errors" ) type sumtype struct { diff --git a/vendor/github.com/slack-go/slack/messages.go b/vendor/github.com/slack-go/slack/messages.go index 2f05f6d7..2cc31d5b 100644 --- a/vendor/github.com/slack-go/slack/messages.go +++ b/vendor/github.com/slack-go/slack/messages.go @@ -103,6 +103,7 @@ type Msg struct { ReplyCount int `json:"reply_count,omitempty"` Replies []Reply `json:"replies,omitempty"` ParentUserId string `json:"parent_user_id,omitempty"` + LatestReply string `json:"latest_reply,omitempty"` // file_share, file_comment, file_mention Files []File `json:"files,omitempty"` diff --git a/vendor/github.com/slack-go/slack/oauth.go b/vendor/github.com/slack-go/slack/oauth.go index d9aca5f3..94b6546d 100644 --- a/vendor/github.com/slack-go/slack/oauth.go +++ b/vendor/github.com/slack-go/slack/oauth.go @@ -61,10 +61,12 @@ type OAuthV2ResponseEnterprise struct { // OAuthV2ResponseAuthedUser ... type OAuthV2ResponseAuthedUser struct { - ID string `json:"id"` - Scope string `json:"scope"` - AccessToken string `json:"access_token"` - TokenType string `json:"token_type"` + ID string `json:"id"` + Scope string `json:"scope"` + AccessToken string `json:"access_token"` + ExpiresIn int `json:"expires_in"` + RefreshToken string `json:"refresh_token"` + TokenType string `json:"token_type"` } // GetOAuthToken retrieves an AccessToken diff --git a/vendor/github.com/slack-go/slack/webhooks_go112.go b/vendor/github.com/slack-go/slack/webhooks_go112.go index 4e0db0e4..0eb539ac 100644 --- a/vendor/github.com/slack-go/slack/webhooks_go112.go +++ b/vendor/github.com/slack-go/slack/webhooks_go112.go @@ -1,3 +1,4 @@ +//go:build !go1.13 // +build !go1.13 package slack @@ -6,27 +7,26 @@ import ( "bytes" "context" "encoding/json" + "fmt" "net/http" - - "github.com/pkg/errors" ) func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { raw, err := json.Marshal(msg) if err != nil { - return errors.Wrap(err, "marshal failed") + return fmt.Errorf("marshal failed: %v", err) } req, err := http.NewRequest(http.MethodPost, url, bytes.NewReader(raw)) if err != nil { - return errors.Wrap(err, "failed new request") + return fmt.Errorf("failed new request: %v", err) } req = req.WithContext(ctx) req.Header.Set("Content-Type", "application/json") resp, err := httpClient.Do(req) if err != nil { - return errors.Wrap(err, "failed to post webhook") + return fmt.Errorf("failed to post webhook: %v", err) } defer resp.Body.Close() diff --git a/vendor/github.com/slack-go/slack/webhooks_go113.go b/vendor/github.com/slack-go/slack/webhooks_go113.go index 99c243f5..021eac01 100644 --- a/vendor/github.com/slack-go/slack/webhooks_go113.go +++ b/vendor/github.com/slack-go/slack/webhooks_go113.go @@ -1,3 +1,4 @@ +//go:build go1.13 // +build go1.13 package slack @@ -6,26 +7,25 @@ import ( "bytes" "context" "encoding/json" + "fmt" "net/http" - - "github.com/pkg/errors" ) func PostWebhookCustomHTTPContext(ctx context.Context, url string, httpClient *http.Client, msg *WebhookMessage) error { raw, err := json.Marshal(msg) if err != nil { - return errors.Wrap(err, "marshal failed") + return fmt.Errorf("marshal failed: %w", err) } req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(raw)) if err != nil { - return errors.Wrap(err, "failed new request") + return fmt.Errorf("failed new request: %w", err) } req.Header.Set("Content-Type", "application/json") resp, err := httpClient.Do(req) if err != nil { - return errors.Wrap(err, "failed to post webhook") + return fmt.Errorf("failed to post webhook: %w", err) } defer resp.Body.Close() |