From 844b95598e92350ceadccf06e643e016bc334c7c Mon Sep 17 00:00:00 2001 From: Nishad Musthafa Date: Sun, 29 Jun 2025 22:53:36 -0700 Subject: [PATCH 1/4] Adding support for dynamic dispatch rules 1. Adding the capability for dispatch rule to have a url and http method 2. Allowing the user to respond with a dynamic response for the url 3. Allowing three types of dispatch actions(answer, hangup and transfer) --- livekit/sip.go | 11 ++ livekit/sip_test.go | 86 ++++++++ protobufs/livekit_sip.proto | 88 ++++++++- sip/sip.go | 137 ++++++++++++- sip/sip_test.go | 377 ++++++++++++++++++++++++++++++++++++ 5 files changed, 694 insertions(+), 5 deletions(-) diff --git a/livekit/sip.go b/livekit/sip.go index e9928105..cc9ba6f0 100644 --- a/livekit/sip.go +++ b/livekit/sip.go @@ -579,6 +579,17 @@ func (p *SIPDispatchRuleInfo) Validate() error { if p.Rule == nil { return errors.New("missing rule") } + + // Validate dynamic dispatch rule URL must be HTTPS + if dynamicRule := p.Rule.GetDispatchRuleDynamic(); dynamicRule != nil { + if dynamicRule.Url == "" { + return errors.New("dynamic dispatch rule URL cannot be empty") + } + if !strings.HasPrefix(dynamicRule.Url, "https://") { + return errors.New("dynamic dispatch rule URL must use HTTPS protocol") + } + } + return nil } diff --git a/livekit/sip_test.go b/livekit/sip_test.go index 4ffcf812..6f118d53 100644 --- a/livekit/sip_test.go +++ b/livekit/sip_test.go @@ -509,3 +509,89 @@ func TestDispatchRuleUpdate(t *testing.T) { require.True(t, r2 != out) require.True(t, proto.Equal(r2, out)) } + +func TestSIPDispatchRuleInfo_Validate_DynamicURL(t *testing.T) { + tests := []struct { + name string + rule *SIPDispatchRuleInfo + wantErr bool + errMsg string + }{ + { + name: "valid HTTPS URL", + rule: &SIPDispatchRuleInfo{ + Rule: &SIPDispatchRule{ + Rule: &SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &SIPDispatchRuleDynamic{ + Url: "https://example.com/webhook", + }, + }, + }, + }, + wantErr: false, + }, + { + name: "HTTP URL should fail", + rule: &SIPDispatchRuleInfo{ + Rule: &SIPDispatchRule{ + Rule: &SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &SIPDispatchRuleDynamic{ + Url: "http://example.com/webhook", + }, + }, + }, + }, + wantErr: true, + errMsg: "dynamic dispatch rule URL must use HTTPS protocol", + }, + { + name: "empty URL should fail", + rule: &SIPDispatchRuleInfo{ + Rule: &SIPDispatchRule{ + Rule: &SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &SIPDispatchRuleDynamic{ + Url: "", + }, + }, + }, + }, + wantErr: true, + errMsg: "dynamic dispatch rule URL cannot be empty", + }, + { + name: "non-dynamic rule should pass", + rule: &SIPDispatchRuleInfo{ + Rule: &SIPDispatchRule{ + Rule: &SIPDispatchRule_DispatchRuleDirect{ + DispatchRuleDirect: &SIPDispatchRuleDirect{ + RoomName: "test-room", + }, + }, + }, + }, + wantErr: false, + }, + { + name: "nil rule should fail", + rule: &SIPDispatchRuleInfo{ + Rule: nil, + }, + wantErr: true, + errMsg: "missing rule", + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + err := tt.rule.Validate() + if tt.wantErr { + require.Error(t, err) + if tt.errMsg != "" { + require.Contains(t, err.Error(), tt.errMsg) + } + } else { + require.NoError(t, err) + } + }) + } +} diff --git a/protobufs/livekit_sip.proto b/protobufs/livekit_sip.proto index a21ae08d..ee8f8391 100644 --- a/protobufs/livekit_sip.proto +++ b/protobufs/livekit_sip.proto @@ -470,6 +470,68 @@ message SIPDispatchRuleCallee { bool randomize = 3; } +message SIPDispatchRuleDynamic { + string url = 1; + string method = 2; +} + +// Defines the type of action for a SIP call +enum DispatchAction { + // Answer the call and connect to a LiveKit room + ACTION_ANSWER = 0; + + // Reject the call + ACTION_REJECT = 1; + + // Transfer the call to another destination + ACTION_TRANSFER = 2; +} + +// SIPDispatchRuleDynamicResponse is the response from the webhook URL. +message SIPDispatchRuleDynamicResponse { + // Type of action to take + DispatchAction action = 1; + + // Fields used when action is ACTION_ANSWER + // ----------------------------------- + // Room name to connect to + string room_name = 2; + // Optional pin required to enter room + string pin = 3; + // Cloud-only, config preset to use + string room_preset = 4; + // RoomConfiguration to use if the participant initiates the room + RoomConfiguration room_config = 5; + //valid for only cloud + bool krisp_enabled = 6; + SIPMediaEncryption media_encryption = 7; + + // Fields used when action is ACTION_REJECT + // ----------------------------------- + // Status code to reject with + SIPStatusCode reject_status_code = 8; + // Optional reason message for rejection + string reject_reason = 9; + + // Fields used when action is ACTION_TRANSFER + // ----------------------------------- + // Destination to transfer to e.g. phone number + string transfer_to = 10; + // Optional human-readable name or department for transfer + string destination_name = 11; + // Max time to wait for transfer to be answered + google.protobuf.Duration transfer_ringing_timeout = 12; + + // Common fields that apply to any action type + // ----------------------------------- + // User-defined metadata. + // Participants created by this rule will inherit this metadata. + string metadata = 13; + // User-defined attributes. + // Participants created by this rule will inherit these attributes. + map attributes = 14; +} + message SIPDispatchRule { oneof rule { // SIPDispatchRuleDirect is a `SIP Dispatch Rule` that puts a user directly into a room @@ -482,6 +544,11 @@ message SIPDispatchRule { // SIPDispatchRuleCallee is a `SIP Dispatch Rule` that creates a new room for each callee. SIPDispatchRuleCallee dispatch_rule_callee = 3; + + // SIPDispatchRuleDynamic is a webhook-based dispatch rule. SIP will send a request to + // a webhook URL that you must implement. You can return information about how the call + // should be dispatched. + SIPDispatchRuleDynamic dispatch_rule_dynamic = 4; } } @@ -552,7 +619,26 @@ message SIPDispatchRuleInfo { bool krisp_enabled = 11; SIPMediaEncryption media_encryption = 12; - // NEXT ID: 13 + + // Fields from SIPDispatchRuleDynamicResponse for dynamic rules + // Type of action to take + DispatchAction action = 13; + + // Fields used when action is ACTION_REJECT + // Status code to reject with + SIPStatusCode reject_status_code = 14; + // Optional reason message for rejection + string reject_reason = 15; + + // Fields used when action is ACTION_TRANSFER + // Destination to transfer to e.g. phone number + string transfer_to = 16; + // Optional human-readable name or department for transfer + string destination_name = 17; + // Max time to wait for transfer to be answered + google.protobuf.Duration transfer_ringing_timeout = 18; + + // NEXT ID: 19 } message SIPDispatchRuleUpdate { diff --git a/sip/sip.go b/sip/sip.go index f1f1d9f1..177e9d7c 100644 --- a/sip/sip.go +++ b/sip/sip.go @@ -15,12 +15,15 @@ package sip import ( + "bytes" "crypto/sha256" "encoding/hex" + "encoding/json" "fmt" "io" "maps" "math" + "net/http" "net/netip" "regexp" "sort" @@ -29,6 +32,7 @@ import ( "github.com/dennwc/iters" "github.com/twitchtv/twirp" "golang.org/x/exp/slices" + durationpb "google.golang.org/protobuf/types/known/durationpb" "github.com/livekit/protocol/livekit" "github.com/livekit/protocol/logger" @@ -98,6 +102,9 @@ func DispatchRulePriority(info *livekit.SIPDispatchRuleInfo) int32 { } else { priority = 102 } + case *livekit.SIPDispatchRule_DispatchRuleDynamic: + // Dynamic rules have highest priority (lowest number) since they can make runtime decisions + priority = -1 } if len(info.InboundNumbers) == 0 { priority += 1000 @@ -264,6 +271,10 @@ func GetPinAndRoom(info *livekit.SIPDispatchRuleInfo) (room, pin string, err err case *livekit.SIPDispatchRule_DispatchRuleCallee: pin = rule.DispatchRuleCallee.GetPin() room = rule.DispatchRuleCallee.GetRoomPrefix() + case *livekit.SIPDispatchRule_DispatchRuleDynamic: + // For dynamic rules, we can't determine pin/room statically + // These are resolved at runtime via webhook + return "", "", nil } return room, pin, nil } @@ -744,6 +755,7 @@ func MatchDispatchRuleIter(trunk *livekit.SIPInboundTrunkInfo, rules iters.Iter[ sentPin := req.GetPin() for { info, err := rules.Next() + if err == io.EOF { break } else if err != nil { @@ -810,6 +822,8 @@ func MatchDispatchRuleIter(trunk *livekit.SIPInboundTrunkInfo, rules iters.Iter[ // EvaluateDispatchRule checks a selected Dispatch Rule against the provided request. func EvaluateDispatchRule(projectID string, trunk *livekit.SIPInboundTrunkInfo, rule *livekit.SIPDispatchRuleInfo, req *rpc.EvaluateSIPDispatchRulesRequest) (*rpc.EvaluateSIPDispatchRulesResponse, error) { + log := logger.GetLogger() + log.Debugw("Evaluating dispatch rule dailamooooo", "rule", rule) call := req.SIPCall() sentPin := req.GetPin() @@ -831,6 +845,125 @@ func EvaluateDispatchRule(projectID string, trunk *livekit.SIPInboundTrunkInfo, attrs[livekit.AttrSIPCallID] = call.LkCallId attrs[livekit.AttrSIPTrunkID] = trunkID + var ( + room string + rulePin string + err error + ) + + switch dynamicRule := rule.GetRule().GetRule().(type) { + default: + room, rulePin, err = GetPinAndRoom(rule) + if err != nil { + return nil, twirp.WrapError(twirp.NewError(twirp.Internal, "Failed to get room and pin"), err) + } + case *livekit.SIPDispatchRule_DispatchRuleDynamic: + type dynamicDispatchRequest struct { + ProjectID string `json:"project_id"` + TrunkID string `json:"trunk_id"` + CallID string `json:"call_id"` + FromUser string `json:"from_user"` + FromHost string `json:"from_host"` + ToUser string `json:"to_user"` + ToHost string `json:"to_host"` + } + + type dynamicDispatchResponse struct { + DispatchAction string `json:"dispatch_action"` // "accept", "reject", "transfer" + RoomName string `json:"room_name"` + Pin string `json:"pin"` + Metadata string `json:"metadata"` + Attributes map[string]string `json:"attributes"` + MediaEncryption string `json:"media_encryption"` + RejectReason string `json:"reject_reason"` + TransferTo string `json:"transfer_to"` + DestinationName string `json:"destination_name"` + TransferRingingTimeout int64 `json:"transfer_ringing_timeout"` + } + + reqBody := dynamicDispatchRequest{ + ProjectID: projectID, + TrunkID: trunkID, + CallID: call.LkCallId, + FromUser: call.From.User, + FromHost: call.From.Host, + ToUser: call.To.User, + ToHost: call.To.Host, + } + + reqBytes, err := json.Marshal(reqBody) + if err != nil { + return nil, twirp.WrapError(twirp.NewError(twirp.Internal, "Failed to marshal request"), err) + } + + resp, err := http.Post(dynamicRule.DispatchRuleDynamic.GetUrl(), "application/json", bytes.NewReader(reqBytes)) + if err != nil { + return nil, twirp.WrapError(twirp.NewError(twirp.Internal, "Failed to make HTTP request"), err) + } + defer resp.Body.Close() + + if resp.StatusCode != http.StatusOK { + return nil, twirp.NewError(twirp.Internal, fmt.Sprintf("Webhook returned non-200 status: %d", resp.StatusCode)) + } + + var dynamicResp dynamicDispatchResponse + if err := json.NewDecoder(resp.Body).Decode(&dynamicResp); err != nil { + return nil, twirp.WrapError(twirp.NewError(twirp.Internal, "Failed to decode response"), err) + } + + // Set values in the rule based on the response + switch strings.ToLower(dynamicResp.DispatchAction) { + case "accept": + room = dynamicResp.RoomName + rulePin = dynamicResp.Pin + if dynamicResp.Metadata != "" { + rule.Metadata = dynamicResp.Metadata + } + if len(dynamicResp.Attributes) > 0 { + for k, v := range dynamicResp.Attributes { + attrs[k] = v + } + } + if dynamicResp.MediaEncryption != "" { + switch strings.ToUpper(dynamicResp.MediaEncryption) { + case "SRTP": + rule.MediaEncryption = livekit.SIPMediaEncryption_SIP_MEDIA_ENCRYPT_REQUIRE + case "DISABLE": + rule.MediaEncryption = livekit.SIPMediaEncryption_SIP_MEDIA_ENCRYPT_DISABLE + } + } + // Continue with normal dispatch rule evaluation to handle PIN validation + + case "reject": + rule.Action = livekit.DispatchAction_ACTION_REJECT + rule.RejectReason = dynamicResp.RejectReason + return &rpc.EvaluateSIPDispatchRulesResponse{ + ProjectId: projectID, + SipTrunkId: trunkID, + SipDispatchRuleId: rule.SipDispatchRuleId, + Result: rpc.SIPDispatchResult_REJECT, + ParticipantMetadata: dynamicResp.RejectReason, + }, nil + + case "transfer": + rule.Action = livekit.DispatchAction_ACTION_TRANSFER + rule.TransferTo = dynamicResp.TransferTo + rule.DestinationName = dynamicResp.DestinationName + if dynamicResp.TransferRingingTimeout > 0 { + rule.TransferRingingTimeout = &durationpb.Duration{ + Seconds: dynamicResp.TransferRingingTimeout, + } + } + return &rpc.EvaluateSIPDispatchRulesResponse{ + ProjectId: projectID, + SipTrunkId: trunkID, + SipDispatchRuleId: rule.SipDispatchRuleId, + Result: rpc.SIPDispatchResult_DROP, + ParticipantMetadata: dynamicResp.TransferTo, + }, nil + } + } + to := call.To.User from := call.From.User fromName := "Phone " + from @@ -852,10 +985,6 @@ func EvaluateDispatchRule(projectID string, trunk *livekit.SIPInboundTrunkInfo, attrs[livekit.AttrSIPTrunkNumber] = call.To.User } - room, rulePin, err := GetPinAndRoom(rule) - if err != nil { - return nil, err - } if rulePin != "" { if sentPin == "" { return &rpc.EvaluateSIPDispatchRulesResponse{ diff --git a/sip/sip_test.go b/sip/sip_test.go index 196fa311..1ea4ac17 100644 --- a/sip/sip_test.go +++ b/sip/sip_test.go @@ -15,7 +15,10 @@ package sip import ( + "encoding/json" "fmt" + "net/http" + "net/http/httptest" "net/netip" "strconv" "testing" @@ -699,6 +702,380 @@ func TestEvaluateDispatchRule(t *testing.T) { }, res) } +func TestEvaluateDispatchRuleDynamic(t *testing.T) { + // Test dynamic dispatch rule with accept action + t.Run("dynamic_accept", func(t *testing.T) { + // Create a test server to mock the webhook + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + require.Equal(t, "POST", r.Method) + require.Equal(t, "application/json", r.Header.Get("Content-Type")) + + // Verify request body + var reqBody map[string]interface{} + err := json.NewDecoder(r.Body).Decode(&reqBody) + require.NoError(t, err) + + require.Equal(t, "p_123", reqBody["project_id"]) + require.Equal(t, "trunk", reqBody["trunk_id"]) + require.Equal(t, "call-id", reqBody["call_id"]) + require.Equal(t, "+11112222", reqBody["from_user"]) + require.Equal(t, "sip.example.com", reqBody["from_host"]) + require.Equal(t, "+3333", reqBody["to_user"]) + require.Equal(t, "sip.example.com", reqBody["to_host"]) + + // Return accept response + response := map[string]interface{}{ + "dispatch_action": "accept", + "room_name": "dynamic-room", + "pin": "1234", + "metadata": "dynamic-meta", + "attributes": map[string]string{ + "dynamic-attr": "value", + }, + "media_encryption": "SRTP", + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(response) + })) + defer server.Close() + + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: server.URL, + }, + }, + }, + Attributes: map[string]string{ + "rule-attr": "1", + }, + } + + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + Pin: "1234", + ExtraAttributes: map[string]string{ + "prov-attr": "1", + }, + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + res, err := EvaluateDispatchRule("p_123", tr, d, r) + require.NoError(t, err) + require.Equal(t, &rpc.EvaluateSIPDispatchRulesResponse{ + ProjectId: "p_123", + Result: rpc.SIPDispatchResult_ACCEPT, + SipTrunkId: "trunk", + SipDispatchRuleId: "dynamic-rule", + RoomName: "dynamic-room", + ParticipantIdentity: "sip_+11112222", + ParticipantName: "Phone +11112222", + ParticipantMetadata: "dynamic-meta", + ParticipantAttributes: map[string]string{ + "rule-attr": "1", + "prov-attr": "1", + "dynamic-attr": "value", + livekit.AttrSIPCallID: "call-id", + livekit.AttrSIPTrunkID: "trunk", + livekit.AttrSIPDispatchRuleID: "dynamic-rule", + livekit.AttrSIPPhoneNumber: "+11112222", + livekit.AttrSIPTrunkNumber: "+3333", + livekit.AttrSIPHostName: "sip.example.com", + }, + MediaEncryption: livekit.SIPMediaEncryption_SIP_MEDIA_ENCRYPT_REQUIRE, + }, res) + }) + + // Test dynamic dispatch rule with reject action + t.Run("dynamic_reject", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + response := map[string]interface{}{ + "dispatch_action": "reject", + "reject_reason": "Call not allowed", + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(response) + })) + defer server.Close() + + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: server.URL, + }, + }, + }, + } + + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + res, err := EvaluateDispatchRule("p_123", tr, d, r) + require.NoError(t, err) + require.Equal(t, &rpc.EvaluateSIPDispatchRulesResponse{ + ProjectId: "p_123", + SipTrunkId: "trunk", + SipDispatchRuleId: "dynamic-rule", + Result: rpc.SIPDispatchResult_REJECT, + ParticipantMetadata: "Call not allowed", + }, res) + }) + + // Test dynamic dispatch rule with transfer action + t.Run("dynamic_transfer", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + response := map[string]interface{}{ + "dispatch_action": "transfer", + "transfer_to": "+55556666", + "destination_name": "Support Desk", + "transfer_ringing_timeout": 30, + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(response) + })) + defer server.Close() + + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: server.URL, + }, + }, + }, + } + + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + res, err := EvaluateDispatchRule("p_123", tr, d, r) + require.NoError(t, err) + require.Equal(t, &rpc.EvaluateSIPDispatchRulesResponse{ + ProjectId: "p_123", + SipTrunkId: "trunk", + SipDispatchRuleId: "dynamic-rule", + Result: rpc.SIPDispatchResult_DROP, + ParticipantMetadata: "+55556666", + }, res) + }) + + // Test webhook HTTP error + t.Run("webhook_http_error", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusInternalServerError) + })) + defer server.Close() + + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: server.URL, + }, + }, + }, + } + + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + _, err := EvaluateDispatchRule("p_123", tr, d, r) + require.Error(t, err) + require.Contains(t, err.Error(), "Webhook returned non-200 status: 500") + }) + + // Test webhook network error + t.Run("webhook_network_error", func(t *testing.T) { + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: "http://invalid-url-that-does-not-exist.com/webhook", + }, + }, + }, + } + + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + _, err := EvaluateDispatchRule("p_123", tr, d, r) + require.Error(t, err) + require.Contains(t, err.Error(), "Failed to make HTTP request") + }) + + // Test invalid JSON response + t.Run("invalid_json_response", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.Write([]byte("invalid json")) + })) + defer server.Close() + + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: server.URL, + }, + }, + }, + } + + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + _, err := EvaluateDispatchRule("p_123", tr, d, r) + require.Error(t, err) + require.Contains(t, err.Error(), "Failed to decode response") + }) + + // Test unknown dispatch action + t.Run("unknown_dispatch_action", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + response := map[string]interface{}{ + "dispatch_action": "unknown_action", + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(response) + })) + defer server.Close() + + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: server.URL, + }, + }, + }, + } + + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + // Should continue with normal dispatch rule evaluation + res, err := EvaluateDispatchRule("p_123", tr, d, r) + require.NoError(t, err) + require.Equal(t, rpc.SIPDispatchResult_ACCEPT, res.Result) + }) + + // Test dynamic dispatch with PIN validation + t.Run("dynamic_with_pin_validation", func(t *testing.T) { + server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + response := map[string]interface{}{ + "dispatch_action": "accept", + "room_name": "pin-room", + "pin": "5678", + } + + w.Header().Set("Content-Type", "application/json") + json.NewEncoder(w).Encode(response) + })) + defer server.Close() + + d := &livekit.SIPDispatchRuleInfo{ + SipDispatchRuleId: "dynamic-rule", + Rule: &livekit.SIPDispatchRule{ + Rule: &livekit.SIPDispatchRule_DispatchRuleDynamic{ + DispatchRuleDynamic: &livekit.SIPDispatchRuleDynamic{ + Url: server.URL, + }, + }, + }, + } + + // Test without PIN - should request PIN + r := &rpc.EvaluateSIPDispatchRulesRequest{ + SipCallId: "call-id", + CallingNumber: "+11112222", + CallingHost: "sip.example.com", + CalledNumber: "+3333", + CalledHost: "sip.example.com", + } + + tr := &livekit.SIPInboundTrunkInfo{SipTrunkId: "trunk"} + + res, err := EvaluateDispatchRule("p_123", tr, d, r) + require.NoError(t, err) + require.Equal(t, rpc.SIPDispatchResult_REQUEST_PIN, res.Result) + require.True(t, res.RequestPin) + + // Test with correct PIN + r.Pin = "5678" + res, err = EvaluateDispatchRule("p_123", tr, d, r) + require.NoError(t, err) + require.Equal(t, rpc.SIPDispatchResult_ACCEPT, res.Result) + require.Equal(t, "pin-room", res.RoomName) + + // Test with incorrect PIN - should return permission denied error + r.Pin = "9999" + _, err = EvaluateDispatchRule("p_123", tr, d, r) + require.Error(t, err) + require.Contains(t, err.Error(), "Incorrect PIN for SIP room") + }) +} + func TestMatchIP(t *testing.T) { cases := []struct { addr string From b8e766726cdd8ebb9268daa255a721dece76cca7 Mon Sep 17 00:00:00 2001 From: Nishad Musthafa Date: Sun, 29 Jun 2025 23:00:15 -0700 Subject: [PATCH 2/4] Adding generated protobufs --- infra/link.pb.go | 2 +- infra/link_grpc.pb.go | 2 +- livekit/livekit_agent.pb.go | 2 +- livekit/livekit_agent_dispatch.pb.go | 2 +- livekit/livekit_analytics.pb.go | 2 +- livekit/livekit_cloud_agent.pb.go | 2 +- livekit/livekit_egress.pb.go | 2 +- livekit/livekit_ingress.pb.go | 2 +- livekit/livekit_internal.pb.go | 2 +- livekit/livekit_metrics.pb.go | 2 +- livekit/livekit_models.pb.go | 2 +- livekit/livekit_room.pb.go | 2 +- livekit/livekit_rtc.pb.go | 2 +- livekit/livekit_sip.pb.go | 929 +++++++++++++++++++-------- livekit/livekit_sip.twirp.go | 577 +++++++++-------- livekit/livekit_webhook.pb.go | 2 +- replay/cloud_replay.pb.go | 2 +- rpc/agent.pb.go | 2 +- rpc/agent_dispatch.pb.go | 2 +- rpc/analytics.pb.go | 2 +- rpc/analytics_grpc.pb.go | 2 +- rpc/egress.pb.go | 2 +- rpc/ingress.pb.go | 2 +- rpc/io.pb.go | 2 +- rpc/keepalive.pb.go | 2 +- rpc/participant.pb.go | 2 +- rpc/rest_signal.pb.go | 2 +- rpc/room.pb.go | 2 +- rpc/roommanager.pb.go | 2 +- rpc/signal.pb.go | 2 +- rpc/sip.pb.go | 2 +- 31 files changed, 994 insertions(+), 570 deletions(-) diff --git a/infra/link.pb.go b/infra/link.pb.go index 3f515496..a6f0840f 100644 --- a/infra/link.pb.go +++ b/infra/link.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: infra/link.proto package infra diff --git a/infra/link_grpc.pb.go b/infra/link_grpc.pb.go index 281cec95..6cacc86d 100644 --- a/infra/link_grpc.pb.go +++ b/infra/link_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.5.1 -// - protoc v4.23.4 +// - protoc v5.29.3 // source: infra/link.proto package infra diff --git a/livekit/livekit_agent.pb.go b/livekit/livekit_agent.pb.go index 262000f9..f9abf9f5 100644 --- a/livekit/livekit_agent.pb.go +++ b/livekit/livekit_agent.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_agent.proto package livekit diff --git a/livekit/livekit_agent_dispatch.pb.go b/livekit/livekit_agent_dispatch.pb.go index 1d3e88ff..a61bc8d2 100644 --- a/livekit/livekit_agent_dispatch.pb.go +++ b/livekit/livekit_agent_dispatch.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_agent_dispatch.proto package livekit diff --git a/livekit/livekit_analytics.pb.go b/livekit/livekit_analytics.pb.go index e26aa158..e8c4a847 100644 --- a/livekit/livekit_analytics.pb.go +++ b/livekit/livekit_analytics.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_analytics.proto package livekit diff --git a/livekit/livekit_cloud_agent.pb.go b/livekit/livekit_cloud_agent.pb.go index 5e651996..21d80c00 100644 --- a/livekit/livekit_cloud_agent.pb.go +++ b/livekit/livekit_cloud_agent.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_cloud_agent.proto package livekit diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index b0e9b64d..ce4f880e 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_egress.proto package livekit diff --git a/livekit/livekit_ingress.pb.go b/livekit/livekit_ingress.pb.go index d89b90b8..5fbd4402 100644 --- a/livekit/livekit_ingress.pb.go +++ b/livekit/livekit_ingress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_ingress.proto package livekit diff --git a/livekit/livekit_internal.pb.go b/livekit/livekit_internal.pb.go index 7c5de6e4..8756cbed 100644 --- a/livekit/livekit_internal.pb.go +++ b/livekit/livekit_internal.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_internal.proto package livekit diff --git a/livekit/livekit_metrics.pb.go b/livekit/livekit_metrics.pb.go index 24107c91..50da8ea7 100644 --- a/livekit/livekit_metrics.pb.go +++ b/livekit/livekit_metrics.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_metrics.proto package livekit diff --git a/livekit/livekit_models.pb.go b/livekit/livekit_models.pb.go index 8d5af8b2..e4eedd98 100644 --- a/livekit/livekit_models.pb.go +++ b/livekit/livekit_models.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_models.proto package livekit diff --git a/livekit/livekit_room.pb.go b/livekit/livekit_room.pb.go index 4da30539..3fa04846 100644 --- a/livekit/livekit_room.pb.go +++ b/livekit/livekit_room.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_room.proto package livekit diff --git a/livekit/livekit_rtc.pb.go b/livekit/livekit_rtc.pb.go index 94efef7c..68df1869 100644 --- a/livekit/livekit_rtc.pb.go +++ b/livekit/livekit_rtc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_rtc.proto package livekit diff --git a/livekit/livekit_sip.pb.go b/livekit/livekit_sip.pb.go index e772b8ea..7f5c170c 100644 --- a/livekit/livekit_sip.pb.go +++ b/livekit/livekit_sip.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_sip.proto package livekit @@ -374,6 +374,59 @@ func (SIPMediaEncryption) EnumDescriptor() ([]byte, []int) { return file_livekit_sip_proto_rawDescGZIP(), []int{3} } +// Defines the type of action for a SIP call +type DispatchAction int32 + +const ( + // Answer the call and connect to a LiveKit room + DispatchAction_ACTION_ANSWER DispatchAction = 0 + // Reject the call + DispatchAction_ACTION_REJECT DispatchAction = 1 + // Transfer the call to another destination + DispatchAction_ACTION_TRANSFER DispatchAction = 2 +) + +// Enum value maps for DispatchAction. +var ( + DispatchAction_name = map[int32]string{ + 0: "ACTION_ANSWER", + 1: "ACTION_REJECT", + 2: "ACTION_TRANSFER", + } + DispatchAction_value = map[string]int32{ + "ACTION_ANSWER": 0, + "ACTION_REJECT": 1, + "ACTION_TRANSFER": 2, + } +) + +func (x DispatchAction) Enum() *DispatchAction { + p := new(DispatchAction) + *p = x + return p +} + +func (x DispatchAction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DispatchAction) Descriptor() protoreflect.EnumDescriptor { + return file_livekit_sip_proto_enumTypes[4].Descriptor() +} + +func (DispatchAction) Type() protoreflect.EnumType { + return &file_livekit_sip_proto_enumTypes[4] +} + +func (x DispatchAction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Use DispatchAction.Descriptor instead. +func (DispatchAction) EnumDescriptor() ([]byte, []int) { + return file_livekit_sip_proto_rawDescGZIP(), []int{4} +} + type SIPCallStatus int32 const ( @@ -413,11 +466,11 @@ func (x SIPCallStatus) String() string { } func (SIPCallStatus) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_sip_proto_enumTypes[4].Descriptor() + return file_livekit_sip_proto_enumTypes[5].Descriptor() } func (SIPCallStatus) Type() protoreflect.EnumType { - return &file_livekit_sip_proto_enumTypes[4] + return &file_livekit_sip_proto_enumTypes[5] } func (x SIPCallStatus) Number() protoreflect.EnumNumber { @@ -426,7 +479,7 @@ func (x SIPCallStatus) Number() protoreflect.EnumNumber { // Deprecated: Use SIPCallStatus.Descriptor instead. func (SIPCallStatus) EnumDescriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{4} + return file_livekit_sip_proto_rawDescGZIP(), []int{5} } type SIPTransferStatus int32 @@ -462,11 +515,11 @@ func (x SIPTransferStatus) String() string { } func (SIPTransferStatus) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_sip_proto_enumTypes[5].Descriptor() + return file_livekit_sip_proto_enumTypes[6].Descriptor() } func (SIPTransferStatus) Type() protoreflect.EnumType { - return &file_livekit_sip_proto_enumTypes[5] + return &file_livekit_sip_proto_enumTypes[6] } func (x SIPTransferStatus) Number() protoreflect.EnumNumber { @@ -475,7 +528,7 @@ func (x SIPTransferStatus) Number() protoreflect.EnumNumber { // Deprecated: Use SIPTransferStatus.Descriptor instead. func (SIPTransferStatus) EnumDescriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{5} + return file_livekit_sip_proto_rawDescGZIP(), []int{6} } type SIPFeature int32 @@ -508,11 +561,11 @@ func (x SIPFeature) String() string { } func (SIPFeature) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_sip_proto_enumTypes[6].Descriptor() + return file_livekit_sip_proto_enumTypes[7].Descriptor() } func (SIPFeature) Type() protoreflect.EnumType { - return &file_livekit_sip_proto_enumTypes[6] + return &file_livekit_sip_proto_enumTypes[7] } func (x SIPFeature) Number() protoreflect.EnumNumber { @@ -521,7 +574,7 @@ func (x SIPFeature) Number() protoreflect.EnumNumber { // Deprecated: Use SIPFeature.Descriptor instead. func (SIPFeature) EnumDescriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{6} + return file_livekit_sip_proto_rawDescGZIP(), []int{7} } type SIPCallDirection int32 @@ -557,11 +610,11 @@ func (x SIPCallDirection) String() string { } func (SIPCallDirection) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_sip_proto_enumTypes[7].Descriptor() + return file_livekit_sip_proto_enumTypes[8].Descriptor() } func (SIPCallDirection) Type() protoreflect.EnumType { - return &file_livekit_sip_proto_enumTypes[7] + return &file_livekit_sip_proto_enumTypes[8] } func (x SIPCallDirection) Number() protoreflect.EnumNumber { @@ -570,7 +623,7 @@ func (x SIPCallDirection) Number() protoreflect.EnumNumber { // Deprecated: Use SIPCallDirection.Descriptor instead. func (SIPCallDirection) EnumDescriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{7} + return file_livekit_sip_proto_rawDescGZIP(), []int{8} } type SIPTrunkInfo_TrunkKind int32 @@ -606,11 +659,11 @@ func (x SIPTrunkInfo_TrunkKind) String() string { } func (SIPTrunkInfo_TrunkKind) Descriptor() protoreflect.EnumDescriptor { - return file_livekit_sip_proto_enumTypes[8].Descriptor() + return file_livekit_sip_proto_enumTypes[9].Descriptor() } func (SIPTrunkInfo_TrunkKind) Type() protoreflect.EnumType { - return &file_livekit_sip_proto_enumTypes[8] + return &file_livekit_sip_proto_enumTypes[9] } func (x SIPTrunkInfo_TrunkKind) Number() protoreflect.EnumNumber { @@ -2504,6 +2557,230 @@ func (x *SIPDispatchRuleCallee) GetRandomize() bool { return false } +type SIPDispatchRuleDynamic struct { + state protoimpl.MessageState `protogen:"open.v1"` + Url string `protobuf:"bytes,1,opt,name=url,proto3" json:"url,omitempty"` + Method string `protobuf:"bytes,2,opt,name=method,proto3" json:"method,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SIPDispatchRuleDynamic) Reset() { + *x = SIPDispatchRuleDynamic{} + mi := &file_livekit_sip_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SIPDispatchRuleDynamic) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SIPDispatchRuleDynamic) ProtoMessage() {} + +func (x *SIPDispatchRuleDynamic) ProtoReflect() protoreflect.Message { + mi := &file_livekit_sip_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SIPDispatchRuleDynamic.ProtoReflect.Descriptor instead. +func (*SIPDispatchRuleDynamic) Descriptor() ([]byte, []int) { + return file_livekit_sip_proto_rawDescGZIP(), []int{25} +} + +func (x *SIPDispatchRuleDynamic) GetUrl() string { + if x != nil { + return x.Url + } + return "" +} + +func (x *SIPDispatchRuleDynamic) GetMethod() string { + if x != nil { + return x.Method + } + return "" +} + +// SIPDispatchRuleDynamicResponse is the response from the webhook URL. +type SIPDispatchRuleDynamicResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Type of action to take + Action DispatchAction `protobuf:"varint,1,opt,name=action,proto3,enum=livekit.DispatchAction" json:"action,omitempty"` + // Fields used when action is ACTION_ANSWER + // ----------------------------------- + // Room name to connect to + RoomName string `protobuf:"bytes,2,opt,name=room_name,json=roomName,proto3" json:"room_name,omitempty"` + // Optional pin required to enter room + Pin string `protobuf:"bytes,3,opt,name=pin,proto3" json:"pin,omitempty"` + // Cloud-only, config preset to use + RoomPreset string `protobuf:"bytes,4,opt,name=room_preset,json=roomPreset,proto3" json:"room_preset,omitempty"` + // RoomConfiguration to use if the participant initiates the room + RoomConfig *RoomConfiguration `protobuf:"bytes,5,opt,name=room_config,json=roomConfig,proto3" json:"room_config,omitempty"` + // valid for only cloud + KrispEnabled bool `protobuf:"varint,6,opt,name=krisp_enabled,json=krispEnabled,proto3" json:"krisp_enabled,omitempty"` + MediaEncryption SIPMediaEncryption `protobuf:"varint,7,opt,name=media_encryption,json=mediaEncryption,proto3,enum=livekit.SIPMediaEncryption" json:"media_encryption,omitempty"` + // Fields used when action is ACTION_REJECT + // ----------------------------------- + // Status code to reject with + RejectStatusCode SIPStatusCode `protobuf:"varint,8,opt,name=reject_status_code,json=rejectStatusCode,proto3,enum=livekit.SIPStatusCode" json:"reject_status_code,omitempty"` + // Optional reason message for rejection + RejectReason string `protobuf:"bytes,9,opt,name=reject_reason,json=rejectReason,proto3" json:"reject_reason,omitempty"` + // Fields used when action is ACTION_TRANSFER + // ----------------------------------- + // Destination to transfer to e.g. phone number + TransferTo string `protobuf:"bytes,10,opt,name=transfer_to,json=transferTo,proto3" json:"transfer_to,omitempty"` + // Optional human-readable name or department for transfer + DestinationName string `protobuf:"bytes,11,opt,name=destination_name,json=destinationName,proto3" json:"destination_name,omitempty"` + // Max time to wait for transfer to be answered + TransferRingingTimeout *durationpb.Duration `protobuf:"bytes,12,opt,name=transfer_ringing_timeout,json=transferRingingTimeout,proto3" json:"transfer_ringing_timeout,omitempty"` + // Common fields that apply to any action type + // ----------------------------------- + // User-defined metadata. + // Participants created by this rule will inherit this metadata. + Metadata string `protobuf:"bytes,13,opt,name=metadata,proto3" json:"metadata,omitempty"` + // User-defined attributes. + // Participants created by this rule will inherit these attributes. + Attributes map[string]string `protobuf:"bytes,14,rep,name=attributes,proto3" json:"attributes,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SIPDispatchRuleDynamicResponse) Reset() { + *x = SIPDispatchRuleDynamicResponse{} + mi := &file_livekit_sip_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SIPDispatchRuleDynamicResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SIPDispatchRuleDynamicResponse) ProtoMessage() {} + +func (x *SIPDispatchRuleDynamicResponse) ProtoReflect() protoreflect.Message { + mi := &file_livekit_sip_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SIPDispatchRuleDynamicResponse.ProtoReflect.Descriptor instead. +func (*SIPDispatchRuleDynamicResponse) Descriptor() ([]byte, []int) { + return file_livekit_sip_proto_rawDescGZIP(), []int{26} +} + +func (x *SIPDispatchRuleDynamicResponse) GetAction() DispatchAction { + if x != nil { + return x.Action + } + return DispatchAction_ACTION_ANSWER +} + +func (x *SIPDispatchRuleDynamicResponse) GetRoomName() string { + if x != nil { + return x.RoomName + } + return "" +} + +func (x *SIPDispatchRuleDynamicResponse) GetPin() string { + if x != nil { + return x.Pin + } + return "" +} + +func (x *SIPDispatchRuleDynamicResponse) GetRoomPreset() string { + if x != nil { + return x.RoomPreset + } + return "" +} + +func (x *SIPDispatchRuleDynamicResponse) GetRoomConfig() *RoomConfiguration { + if x != nil { + return x.RoomConfig + } + return nil +} + +func (x *SIPDispatchRuleDynamicResponse) GetKrispEnabled() bool { + if x != nil { + return x.KrispEnabled + } + return false +} + +func (x *SIPDispatchRuleDynamicResponse) GetMediaEncryption() SIPMediaEncryption { + if x != nil { + return x.MediaEncryption + } + return SIPMediaEncryption_SIP_MEDIA_ENCRYPT_DISABLE +} + +func (x *SIPDispatchRuleDynamicResponse) GetRejectStatusCode() SIPStatusCode { + if x != nil { + return x.RejectStatusCode + } + return SIPStatusCode_SIP_STATUS_UNKNOWN +} + +func (x *SIPDispatchRuleDynamicResponse) GetRejectReason() string { + if x != nil { + return x.RejectReason + } + return "" +} + +func (x *SIPDispatchRuleDynamicResponse) GetTransferTo() string { + if x != nil { + return x.TransferTo + } + return "" +} + +func (x *SIPDispatchRuleDynamicResponse) GetDestinationName() string { + if x != nil { + return x.DestinationName + } + return "" +} + +func (x *SIPDispatchRuleDynamicResponse) GetTransferRingingTimeout() *durationpb.Duration { + if x != nil { + return x.TransferRingingTimeout + } + return nil +} + +func (x *SIPDispatchRuleDynamicResponse) GetMetadata() string { + if x != nil { + return x.Metadata + } + return "" +} + +func (x *SIPDispatchRuleDynamicResponse) GetAttributes() map[string]string { + if x != nil { + return x.Attributes + } + return nil +} + type SIPDispatchRule struct { state protoimpl.MessageState `protogen:"open.v1"` // Types that are valid to be assigned to Rule: @@ -2511,6 +2788,7 @@ type SIPDispatchRule struct { // *SIPDispatchRule_DispatchRuleDirect // *SIPDispatchRule_DispatchRuleIndividual // *SIPDispatchRule_DispatchRuleCallee + // *SIPDispatchRule_DispatchRuleDynamic Rule isSIPDispatchRule_Rule `protobuf_oneof:"rule"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache @@ -2518,7 +2796,7 @@ type SIPDispatchRule struct { func (x *SIPDispatchRule) Reset() { *x = SIPDispatchRule{} - mi := &file_livekit_sip_proto_msgTypes[25] + mi := &file_livekit_sip_proto_msgTypes[27] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2530,7 +2808,7 @@ func (x *SIPDispatchRule) String() string { func (*SIPDispatchRule) ProtoMessage() {} func (x *SIPDispatchRule) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[25] + mi := &file_livekit_sip_proto_msgTypes[27] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2543,7 +2821,7 @@ func (x *SIPDispatchRule) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPDispatchRule.ProtoReflect.Descriptor instead. func (*SIPDispatchRule) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{25} + return file_livekit_sip_proto_rawDescGZIP(), []int{27} } func (x *SIPDispatchRule) GetRule() isSIPDispatchRule_Rule { @@ -2580,6 +2858,15 @@ func (x *SIPDispatchRule) GetDispatchRuleCallee() *SIPDispatchRuleCallee { return nil } +func (x *SIPDispatchRule) GetDispatchRuleDynamic() *SIPDispatchRuleDynamic { + if x != nil { + if x, ok := x.Rule.(*SIPDispatchRule_DispatchRuleDynamic); ok { + return x.DispatchRuleDynamic + } + } + return nil +} + type isSIPDispatchRule_Rule interface { isSIPDispatchRule_Rule() } @@ -2601,12 +2888,21 @@ type SIPDispatchRule_DispatchRuleCallee struct { DispatchRuleCallee *SIPDispatchRuleCallee `protobuf:"bytes,3,opt,name=dispatch_rule_callee,json=dispatchRuleCallee,proto3,oneof"` } +type SIPDispatchRule_DispatchRuleDynamic struct { + // SIPDispatchRuleDynamic is a webhook-based dispatch rule. SIP will send a request to + // a webhook URL that you must implement. You can return information about how the call + // should be dispatched. + DispatchRuleDynamic *SIPDispatchRuleDynamic `protobuf:"bytes,4,opt,name=dispatch_rule_dynamic,json=dispatchRuleDynamic,proto3,oneof"` +} + func (*SIPDispatchRule_DispatchRuleDirect) isSIPDispatchRule_Rule() {} func (*SIPDispatchRule_DispatchRuleIndividual) isSIPDispatchRule_Rule() {} func (*SIPDispatchRule_DispatchRuleCallee) isSIPDispatchRule_Rule() {} +func (*SIPDispatchRule_DispatchRuleDynamic) isSIPDispatchRule_Rule() {} + type CreateSIPDispatchRuleRequest struct { state protoimpl.MessageState `protogen:"open.v1"` DispatchRule *SIPDispatchRuleInfo `protobuf:"bytes,10,opt,name=dispatch_rule,json=dispatchRule,proto3" json:"dispatch_rule,omitempty"` // Rule ID is ignored @@ -2654,7 +2950,7 @@ type CreateSIPDispatchRuleRequest struct { func (x *CreateSIPDispatchRuleRequest) Reset() { *x = CreateSIPDispatchRuleRequest{} - mi := &file_livekit_sip_proto_msgTypes[26] + mi := &file_livekit_sip_proto_msgTypes[28] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2666,7 +2962,7 @@ func (x *CreateSIPDispatchRuleRequest) String() string { func (*CreateSIPDispatchRuleRequest) ProtoMessage() {} func (x *CreateSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[26] + mi := &file_livekit_sip_proto_msgTypes[28] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2679,7 +2975,7 @@ func (x *CreateSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateSIPDispatchRuleRequest.ProtoReflect.Descriptor instead. func (*CreateSIPDispatchRuleRequest) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{26} + return file_livekit_sip_proto_rawDescGZIP(), []int{28} } func (x *CreateSIPDispatchRuleRequest) GetDispatchRule() *SIPDispatchRuleInfo { @@ -2775,7 +3071,7 @@ type UpdateSIPDispatchRuleRequest struct { func (x *UpdateSIPDispatchRuleRequest) Reset() { *x = UpdateSIPDispatchRuleRequest{} - mi := &file_livekit_sip_proto_msgTypes[27] + mi := &file_livekit_sip_proto_msgTypes[29] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2787,7 +3083,7 @@ func (x *UpdateSIPDispatchRuleRequest) String() string { func (*UpdateSIPDispatchRuleRequest) ProtoMessage() {} func (x *UpdateSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[27] + mi := &file_livekit_sip_proto_msgTypes[29] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2800,7 +3096,7 @@ func (x *UpdateSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use UpdateSIPDispatchRuleRequest.ProtoReflect.Descriptor instead. func (*UpdateSIPDispatchRuleRequest) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{27} + return file_livekit_sip_proto_rawDescGZIP(), []int{29} } func (x *UpdateSIPDispatchRuleRequest) GetSipDispatchRuleId() string { @@ -2872,14 +3168,29 @@ type SIPDispatchRuleInfo struct { // RoomConfiguration to use if the participant initiates the room RoomConfig *RoomConfiguration `protobuf:"bytes,10,opt,name=room_config,json=roomConfig,proto3" json:"room_config,omitempty"` KrispEnabled bool `protobuf:"varint,11,opt,name=krisp_enabled,json=krispEnabled,proto3" json:"krisp_enabled,omitempty"` - MediaEncryption SIPMediaEncryption `protobuf:"varint,12,opt,name=media_encryption,json=mediaEncryption,proto3,enum=livekit.SIPMediaEncryption" json:"media_encryption,omitempty"` // NEXT ID: 13 - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache + MediaEncryption SIPMediaEncryption `protobuf:"varint,12,opt,name=media_encryption,json=mediaEncryption,proto3,enum=livekit.SIPMediaEncryption" json:"media_encryption,omitempty"` + // Fields from SIPDispatchRuleDynamicResponse for dynamic rules + // Type of action to take + Action DispatchAction `protobuf:"varint,13,opt,name=action,proto3,enum=livekit.DispatchAction" json:"action,omitempty"` + // Fields used when action is ACTION_REJECT + // Status code to reject with + RejectStatusCode SIPStatusCode `protobuf:"varint,14,opt,name=reject_status_code,json=rejectStatusCode,proto3,enum=livekit.SIPStatusCode" json:"reject_status_code,omitempty"` + // Optional reason message for rejection + RejectReason string `protobuf:"bytes,15,opt,name=reject_reason,json=rejectReason,proto3" json:"reject_reason,omitempty"` + // Fields used when action is ACTION_TRANSFER + // Destination to transfer to e.g. phone number + TransferTo string `protobuf:"bytes,16,opt,name=transfer_to,json=transferTo,proto3" json:"transfer_to,omitempty"` + // Optional human-readable name or department for transfer + DestinationName string `protobuf:"bytes,17,opt,name=destination_name,json=destinationName,proto3" json:"destination_name,omitempty"` + // Max time to wait for transfer to be answered + TransferRingingTimeout *durationpb.Duration `protobuf:"bytes,18,opt,name=transfer_ringing_timeout,json=transferRingingTimeout,proto3" json:"transfer_ringing_timeout,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SIPDispatchRuleInfo) Reset() { *x = SIPDispatchRuleInfo{} - mi := &file_livekit_sip_proto_msgTypes[28] + mi := &file_livekit_sip_proto_msgTypes[30] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -2891,7 +3202,7 @@ func (x *SIPDispatchRuleInfo) String() string { func (*SIPDispatchRuleInfo) ProtoMessage() {} func (x *SIPDispatchRuleInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[28] + mi := &file_livekit_sip_proto_msgTypes[30] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -2904,7 +3215,7 @@ func (x *SIPDispatchRuleInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPDispatchRuleInfo.ProtoReflect.Descriptor instead. func (*SIPDispatchRuleInfo) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{28} + return file_livekit_sip_proto_rawDescGZIP(), []int{30} } func (x *SIPDispatchRuleInfo) GetSipDispatchRuleId() string { @@ -2991,6 +3302,48 @@ func (x *SIPDispatchRuleInfo) GetMediaEncryption() SIPMediaEncryption { return SIPMediaEncryption_SIP_MEDIA_ENCRYPT_DISABLE } +func (x *SIPDispatchRuleInfo) GetAction() DispatchAction { + if x != nil { + return x.Action + } + return DispatchAction_ACTION_ANSWER +} + +func (x *SIPDispatchRuleInfo) GetRejectStatusCode() SIPStatusCode { + if x != nil { + return x.RejectStatusCode + } + return SIPStatusCode_SIP_STATUS_UNKNOWN +} + +func (x *SIPDispatchRuleInfo) GetRejectReason() string { + if x != nil { + return x.RejectReason + } + return "" +} + +func (x *SIPDispatchRuleInfo) GetTransferTo() string { + if x != nil { + return x.TransferTo + } + return "" +} + +func (x *SIPDispatchRuleInfo) GetDestinationName() string { + if x != nil { + return x.DestinationName + } + return "" +} + +func (x *SIPDispatchRuleInfo) GetTransferRingingTimeout() *durationpb.Duration { + if x != nil { + return x.TransferRingingTimeout + } + return nil +} + type SIPDispatchRuleUpdate struct { state protoimpl.MessageState `protogen:"open.v1"` TrunkIds *ListUpdate `protobuf:"bytes,1,opt,name=trunk_ids,json=trunkIds,proto3" json:"trunk_ids,omitempty"` @@ -3005,7 +3358,7 @@ type SIPDispatchRuleUpdate struct { func (x *SIPDispatchRuleUpdate) Reset() { *x = SIPDispatchRuleUpdate{} - mi := &file_livekit_sip_proto_msgTypes[29] + mi := &file_livekit_sip_proto_msgTypes[31] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3017,7 +3370,7 @@ func (x *SIPDispatchRuleUpdate) String() string { func (*SIPDispatchRuleUpdate) ProtoMessage() {} func (x *SIPDispatchRuleUpdate) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[29] + mi := &file_livekit_sip_proto_msgTypes[31] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3030,7 +3383,7 @@ func (x *SIPDispatchRuleUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPDispatchRuleUpdate.ProtoReflect.Descriptor instead. func (*SIPDispatchRuleUpdate) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{29} + return file_livekit_sip_proto_rawDescGZIP(), []int{31} } func (x *SIPDispatchRuleUpdate) GetTrunkIds() *ListUpdate { @@ -3090,7 +3443,7 @@ type ListSIPDispatchRuleRequest struct { func (x *ListSIPDispatchRuleRequest) Reset() { *x = ListSIPDispatchRuleRequest{} - mi := &file_livekit_sip_proto_msgTypes[30] + mi := &file_livekit_sip_proto_msgTypes[32] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3102,7 +3455,7 @@ func (x *ListSIPDispatchRuleRequest) String() string { func (*ListSIPDispatchRuleRequest) ProtoMessage() {} func (x *ListSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[30] + mi := &file_livekit_sip_proto_msgTypes[32] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3115,7 +3468,7 @@ func (x *ListSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSIPDispatchRuleRequest.ProtoReflect.Descriptor instead. func (*ListSIPDispatchRuleRequest) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{30} + return file_livekit_sip_proto_rawDescGZIP(), []int{32} } func (x *ListSIPDispatchRuleRequest) GetPage() *Pagination { @@ -3148,7 +3501,7 @@ type ListSIPDispatchRuleResponse struct { func (x *ListSIPDispatchRuleResponse) Reset() { *x = ListSIPDispatchRuleResponse{} - mi := &file_livekit_sip_proto_msgTypes[31] + mi := &file_livekit_sip_proto_msgTypes[33] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3160,7 +3513,7 @@ func (x *ListSIPDispatchRuleResponse) String() string { func (*ListSIPDispatchRuleResponse) ProtoMessage() {} func (x *ListSIPDispatchRuleResponse) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[31] + mi := &file_livekit_sip_proto_msgTypes[33] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3173,7 +3526,7 @@ func (x *ListSIPDispatchRuleResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use ListSIPDispatchRuleResponse.ProtoReflect.Descriptor instead. func (*ListSIPDispatchRuleResponse) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{31} + return file_livekit_sip_proto_rawDescGZIP(), []int{33} } func (x *ListSIPDispatchRuleResponse) GetItems() []*SIPDispatchRuleInfo { @@ -3192,7 +3545,7 @@ type DeleteSIPDispatchRuleRequest struct { func (x *DeleteSIPDispatchRuleRequest) Reset() { *x = DeleteSIPDispatchRuleRequest{} - mi := &file_livekit_sip_proto_msgTypes[32] + mi := &file_livekit_sip_proto_msgTypes[34] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3204,7 +3557,7 @@ func (x *DeleteSIPDispatchRuleRequest) String() string { func (*DeleteSIPDispatchRuleRequest) ProtoMessage() {} func (x *DeleteSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[32] + mi := &file_livekit_sip_proto_msgTypes[34] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3217,7 +3570,7 @@ func (x *DeleteSIPDispatchRuleRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use DeleteSIPDispatchRuleRequest.ProtoReflect.Descriptor instead. func (*DeleteSIPDispatchRuleRequest) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{32} + return file_livekit_sip_proto_rawDescGZIP(), []int{34} } func (x *DeleteSIPDispatchRuleRequest) GetSipDispatchRuleId() string { @@ -3251,7 +3604,7 @@ type SIPOutboundConfig struct { func (x *SIPOutboundConfig) Reset() { *x = SIPOutboundConfig{} - mi := &file_livekit_sip_proto_msgTypes[33] + mi := &file_livekit_sip_proto_msgTypes[35] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3263,7 +3616,7 @@ func (x *SIPOutboundConfig) String() string { func (*SIPOutboundConfig) ProtoMessage() {} func (x *SIPOutboundConfig) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[33] + mi := &file_livekit_sip_proto_msgTypes[35] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3276,7 +3629,7 @@ func (x *SIPOutboundConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPOutboundConfig.ProtoReflect.Descriptor instead. func (*SIPOutboundConfig) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{33} + return file_livekit_sip_proto_rawDescGZIP(), []int{35} } func (x *SIPOutboundConfig) GetHostname() string { @@ -3384,7 +3737,7 @@ type CreateSIPParticipantRequest struct { func (x *CreateSIPParticipantRequest) Reset() { *x = CreateSIPParticipantRequest{} - mi := &file_livekit_sip_proto_msgTypes[34] + mi := &file_livekit_sip_proto_msgTypes[36] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3396,7 +3749,7 @@ func (x *CreateSIPParticipantRequest) String() string { func (*CreateSIPParticipantRequest) ProtoMessage() {} func (x *CreateSIPParticipantRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[34] + mi := &file_livekit_sip_proto_msgTypes[36] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3409,7 +3762,7 @@ func (x *CreateSIPParticipantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use CreateSIPParticipantRequest.ProtoReflect.Descriptor instead. func (*CreateSIPParticipantRequest) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{34} + return file_livekit_sip_proto_rawDescGZIP(), []int{36} } func (x *CreateSIPParticipantRequest) GetSipTrunkId() string { @@ -3565,7 +3918,7 @@ type SIPParticipantInfo struct { func (x *SIPParticipantInfo) Reset() { *x = SIPParticipantInfo{} - mi := &file_livekit_sip_proto_msgTypes[35] + mi := &file_livekit_sip_proto_msgTypes[37] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3577,7 +3930,7 @@ func (x *SIPParticipantInfo) String() string { func (*SIPParticipantInfo) ProtoMessage() {} func (x *SIPParticipantInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[35] + mi := &file_livekit_sip_proto_msgTypes[37] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3590,7 +3943,7 @@ func (x *SIPParticipantInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPParticipantInfo.ProtoReflect.Descriptor instead. func (*SIPParticipantInfo) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{35} + return file_livekit_sip_proto_rawDescGZIP(), []int{37} } func (x *SIPParticipantInfo) GetParticipantId() string { @@ -3638,7 +3991,7 @@ type TransferSIPParticipantRequest struct { func (x *TransferSIPParticipantRequest) Reset() { *x = TransferSIPParticipantRequest{} - mi := &file_livekit_sip_proto_msgTypes[36] + mi := &file_livekit_sip_proto_msgTypes[38] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3650,7 +4003,7 @@ func (x *TransferSIPParticipantRequest) String() string { func (*TransferSIPParticipantRequest) ProtoMessage() {} func (x *TransferSIPParticipantRequest) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[36] + mi := &file_livekit_sip_proto_msgTypes[38] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3663,7 +4016,7 @@ func (x *TransferSIPParticipantRequest) ProtoReflect() protoreflect.Message { // Deprecated: Use TransferSIPParticipantRequest.ProtoReflect.Descriptor instead. func (*TransferSIPParticipantRequest) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{36} + return file_livekit_sip_proto_rawDescGZIP(), []int{38} } func (x *TransferSIPParticipantRequest) GetParticipantIdentity() string { @@ -3743,7 +4096,7 @@ type SIPCallInfo struct { func (x *SIPCallInfo) Reset() { *x = SIPCallInfo{} - mi := &file_livekit_sip_proto_msgTypes[37] + mi := &file_livekit_sip_proto_msgTypes[39] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3755,7 +4108,7 @@ func (x *SIPCallInfo) String() string { func (*SIPCallInfo) ProtoMessage() {} func (x *SIPCallInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[37] + mi := &file_livekit_sip_proto_msgTypes[39] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3768,7 +4121,7 @@ func (x *SIPCallInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPCallInfo.ProtoReflect.Descriptor instead. func (*SIPCallInfo) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{37} + return file_livekit_sip_proto_rawDescGZIP(), []int{39} } func (x *SIPCallInfo) GetCallId() string { @@ -3958,7 +4311,7 @@ type SIPTransferInfo struct { func (x *SIPTransferInfo) Reset() { *x = SIPTransferInfo{} - mi := &file_livekit_sip_proto_msgTypes[38] + mi := &file_livekit_sip_proto_msgTypes[40] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -3970,7 +4323,7 @@ func (x *SIPTransferInfo) String() string { func (*SIPTransferInfo) ProtoMessage() {} func (x *SIPTransferInfo) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[38] + mi := &file_livekit_sip_proto_msgTypes[40] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -3983,7 +4336,7 @@ func (x *SIPTransferInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPTransferInfo.ProtoReflect.Descriptor instead. func (*SIPTransferInfo) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{38} + return file_livekit_sip_proto_rawDescGZIP(), []int{40} } func (x *SIPTransferInfo) GetTransferId() string { @@ -4055,7 +4408,7 @@ type SIPUri struct { func (x *SIPUri) Reset() { *x = SIPUri{} - mi := &file_livekit_sip_proto_msgTypes[39] + mi := &file_livekit_sip_proto_msgTypes[41] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -4067,7 +4420,7 @@ func (x *SIPUri) String() string { func (*SIPUri) ProtoMessage() {} func (x *SIPUri) ProtoReflect() protoreflect.Message { - mi := &file_livekit_sip_proto_msgTypes[39] + mi := &file_livekit_sip_proto_msgTypes[41] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -4080,7 +4433,7 @@ func (x *SIPUri) ProtoReflect() protoreflect.Message { // Deprecated: Use SIPUri.ProtoReflect.Descriptor instead. func (*SIPUri) Descriptor() ([]byte, []int) { - return file_livekit_sip_proto_rawDescGZIP(), []int{39} + return file_livekit_sip_proto_rawDescGZIP(), []int{41} } func (x *SIPUri) GetUser() string { @@ -4304,11 +4657,39 @@ const file_livekit_sip_proto_rawDesc = "" + "\vroom_prefix\x18\x01 \x01(\tR\n" + "roomPrefix\x12\x10\n" + "\x03pin\x18\x02 \x01(\tR\x03pin\x12\x1c\n" + - "\trandomize\x18\x03 \x01(\bR\trandomize\"\xa1\x02\n" + + "\trandomize\x18\x03 \x01(\bR\trandomize\"B\n" + + "\x16SIPDispatchRuleDynamic\x12\x10\n" + + "\x03url\x18\x01 \x01(\tR\x03url\x12\x16\n" + + "\x06method\x18\x02 \x01(\tR\x06method\"\x8b\x06\n" + + "\x1eSIPDispatchRuleDynamicResponse\x12/\n" + + "\x06action\x18\x01 \x01(\x0e2\x17.livekit.DispatchActionR\x06action\x12\x1b\n" + + "\troom_name\x18\x02 \x01(\tR\broomName\x12\x10\n" + + "\x03pin\x18\x03 \x01(\tR\x03pin\x12\x1f\n" + + "\vroom_preset\x18\x04 \x01(\tR\n" + + "roomPreset\x12;\n" + + "\vroom_config\x18\x05 \x01(\v2\x1a.livekit.RoomConfigurationR\n" + + "roomConfig\x12#\n" + + "\rkrisp_enabled\x18\x06 \x01(\bR\fkrispEnabled\x12F\n" + + "\x10media_encryption\x18\a \x01(\x0e2\x1b.livekit.SIPMediaEncryptionR\x0fmediaEncryption\x12D\n" + + "\x12reject_status_code\x18\b \x01(\x0e2\x16.livekit.SIPStatusCodeR\x10rejectStatusCode\x12#\n" + + "\rreject_reason\x18\t \x01(\tR\frejectReason\x12\x1f\n" + + "\vtransfer_to\x18\n" + + " \x01(\tR\n" + + "transferTo\x12)\n" + + "\x10destination_name\x18\v \x01(\tR\x0fdestinationName\x12S\n" + + "\x18transfer_ringing_timeout\x18\f \x01(\v2\x19.google.protobuf.DurationR\x16transferRingingTimeout\x12\x1a\n" + + "\bmetadata\x18\r \x01(\tR\bmetadata\x12W\n" + + "\n" + + "attributes\x18\x0e \x03(\v27.livekit.SIPDispatchRuleDynamicResponse.AttributesEntryR\n" + + "attributes\x1a=\n" + + "\x0fAttributesEntry\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xf8\x02\n" + "\x0fSIPDispatchRule\x12R\n" + "\x14dispatch_rule_direct\x18\x01 \x01(\v2\x1e.livekit.SIPDispatchRuleDirectH\x00R\x12dispatchRuleDirect\x12^\n" + "\x18dispatch_rule_individual\x18\x02 \x01(\v2\".livekit.SIPDispatchRuleIndividualH\x00R\x16dispatchRuleIndividual\x12R\n" + - "\x14dispatch_rule_callee\x18\x03 \x01(\v2\x1e.livekit.SIPDispatchRuleCalleeH\x00R\x12dispatchRuleCalleeB\x06\n" + + "\x14dispatch_rule_callee\x18\x03 \x01(\v2\x1e.livekit.SIPDispatchRuleCalleeH\x00R\x12dispatchRuleCallee\x12U\n" + + "\x15dispatch_rule_dynamic\x18\x04 \x01(\v2\x1f.livekit.SIPDispatchRuleDynamicH\x00R\x13dispatchRuleDynamicB\x06\n" + "\x04rule\"\xc9\x04\n" + "\x1cCreateSIPDispatchRuleRequest\x12A\n" + "\rdispatch_rule\x18\n" + @@ -4333,7 +4714,7 @@ const file_livekit_sip_proto_rawDesc = "" + "\x14sip_dispatch_rule_id\x18\x01 \x01(\tR\x11sipDispatchRuleId\x128\n" + "\areplace\x18\x02 \x01(\v2\x1c.livekit.SIPDispatchRuleInfoH\x00R\areplace\x128\n" + "\x06update\x18\x03 \x01(\v2\x1e.livekit.SIPDispatchRuleUpdateH\x00R\x06updateB\b\n" + - "\x06action\"\xee\x04\n" + + "\x06action\"\xab\a\n" + "\x13SIPDispatchRuleInfo\x12/\n" + "\x14sip_dispatch_rule_id\x18\x01 \x01(\tR\x11sipDispatchRuleId\x12,\n" + "\x04rule\x18\x02 \x01(\v2\x18.livekit.SIPDispatchRuleR\x04rule\x12\x1b\n" + @@ -4351,7 +4732,14 @@ const file_livekit_sip_proto_rawDesc = "" + " \x01(\v2\x1a.livekit.RoomConfigurationR\n" + "roomConfig\x12#\n" + "\rkrisp_enabled\x18\v \x01(\bR\fkrispEnabled\x12F\n" + - "\x10media_encryption\x18\f \x01(\x0e2\x1b.livekit.SIPMediaEncryptionR\x0fmediaEncryption\x1a=\n" + + "\x10media_encryption\x18\f \x01(\x0e2\x1b.livekit.SIPMediaEncryptionR\x0fmediaEncryption\x12/\n" + + "\x06action\x18\r \x01(\x0e2\x17.livekit.DispatchActionR\x06action\x12D\n" + + "\x12reject_status_code\x18\x0e \x01(\x0e2\x16.livekit.SIPStatusCodeR\x10rejectStatusCode\x12#\n" + + "\rreject_reason\x18\x0f \x01(\tR\frejectReason\x12\x1f\n" + + "\vtransfer_to\x18\x10 \x01(\tR\n" + + "transferTo\x12)\n" + + "\x10destination_name\x18\x11 \x01(\tR\x0fdestinationName\x12S\n" + + "\x18transfer_ringing_timeout\x18\x12 \x01(\v2\x19.google.protobuf.DurationR\x16transferRingingTimeout\x1a=\n" + "\x0fAttributesEntry\x12\x10\n" + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + "\x05value\x18\x02 \x01(\tR\x05value:\x028\x01\"\xb8\x03\n" + @@ -4550,7 +4938,11 @@ const file_livekit_sip_proto_rawDesc = "" + "\x12SIPMediaEncryption\x12\x1d\n" + "\x19SIP_MEDIA_ENCRYPT_DISABLE\x10\x00\x12\x1b\n" + "\x17SIP_MEDIA_ENCRYPT_ALLOW\x10\x01\x12\x1d\n" + - "\x19SIP_MEDIA_ENCRYPT_REQUIRE\x10\x02*w\n" + + "\x19SIP_MEDIA_ENCRYPT_REQUIRE\x10\x02*K\n" + + "\x0eDispatchAction\x12\x11\n" + + "\rACTION_ANSWER\x10\x00\x12\x11\n" + + "\rACTION_REJECT\x10\x01\x12\x13\n" + + "\x0fACTION_TRANSFER\x10\x02*w\n" + "\rSIPCallStatus\x12\x15\n" + "\x11SCS_CALL_INCOMING\x10\x00\x12\x1a\n" + "\x16SCS_PARTICIPANT_JOINED\x10\x01\x12\x0e\n" + @@ -4600,197 +4992,211 @@ func file_livekit_sip_proto_rawDescGZIP() []byte { return file_livekit_sip_proto_rawDescData } -var file_livekit_sip_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_livekit_sip_proto_msgTypes = make([]protoimpl.MessageInfo, 55) +var file_livekit_sip_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_livekit_sip_proto_msgTypes = make([]protoimpl.MessageInfo, 58) var file_livekit_sip_proto_goTypes = []any{ - (SIPStatusCode)(0), // 0: livekit.SIPStatusCode - (SIPTransport)(0), // 1: livekit.SIPTransport - (SIPHeaderOptions)(0), // 2: livekit.SIPHeaderOptions - (SIPMediaEncryption)(0), // 3: livekit.SIPMediaEncryption - (SIPCallStatus)(0), // 4: livekit.SIPCallStatus - (SIPTransferStatus)(0), // 5: livekit.SIPTransferStatus - (SIPFeature)(0), // 6: livekit.SIPFeature - (SIPCallDirection)(0), // 7: livekit.SIPCallDirection - (SIPTrunkInfo_TrunkKind)(0), // 8: livekit.SIPTrunkInfo.TrunkKind - (*SIPStatus)(nil), // 9: livekit.SIPStatus - (*CreateSIPTrunkRequest)(nil), // 10: livekit.CreateSIPTrunkRequest - (*SIPTrunkInfo)(nil), // 11: livekit.SIPTrunkInfo - (*CreateSIPInboundTrunkRequest)(nil), // 12: livekit.CreateSIPInboundTrunkRequest - (*UpdateSIPInboundTrunkRequest)(nil), // 13: livekit.UpdateSIPInboundTrunkRequest - (*SIPInboundTrunkInfo)(nil), // 14: livekit.SIPInboundTrunkInfo - (*SIPInboundTrunkUpdate)(nil), // 15: livekit.SIPInboundTrunkUpdate - (*CreateSIPOutboundTrunkRequest)(nil), // 16: livekit.CreateSIPOutboundTrunkRequest - (*UpdateSIPOutboundTrunkRequest)(nil), // 17: livekit.UpdateSIPOutboundTrunkRequest - (*SIPOutboundTrunkInfo)(nil), // 18: livekit.SIPOutboundTrunkInfo - (*SIPOutboundTrunkUpdate)(nil), // 19: livekit.SIPOutboundTrunkUpdate - (*GetSIPInboundTrunkRequest)(nil), // 20: livekit.GetSIPInboundTrunkRequest - (*GetSIPInboundTrunkResponse)(nil), // 21: livekit.GetSIPInboundTrunkResponse - (*GetSIPOutboundTrunkRequest)(nil), // 22: livekit.GetSIPOutboundTrunkRequest - (*GetSIPOutboundTrunkResponse)(nil), // 23: livekit.GetSIPOutboundTrunkResponse - (*ListSIPTrunkRequest)(nil), // 24: livekit.ListSIPTrunkRequest - (*ListSIPTrunkResponse)(nil), // 25: livekit.ListSIPTrunkResponse - (*ListSIPInboundTrunkRequest)(nil), // 26: livekit.ListSIPInboundTrunkRequest - (*ListSIPInboundTrunkResponse)(nil), // 27: livekit.ListSIPInboundTrunkResponse - (*ListSIPOutboundTrunkRequest)(nil), // 28: livekit.ListSIPOutboundTrunkRequest - (*ListSIPOutboundTrunkResponse)(nil), // 29: livekit.ListSIPOutboundTrunkResponse - (*DeleteSIPTrunkRequest)(nil), // 30: livekit.DeleteSIPTrunkRequest - (*SIPDispatchRuleDirect)(nil), // 31: livekit.SIPDispatchRuleDirect - (*SIPDispatchRuleIndividual)(nil), // 32: livekit.SIPDispatchRuleIndividual - (*SIPDispatchRuleCallee)(nil), // 33: livekit.SIPDispatchRuleCallee - (*SIPDispatchRule)(nil), // 34: livekit.SIPDispatchRule - (*CreateSIPDispatchRuleRequest)(nil), // 35: livekit.CreateSIPDispatchRuleRequest - (*UpdateSIPDispatchRuleRequest)(nil), // 36: livekit.UpdateSIPDispatchRuleRequest - (*SIPDispatchRuleInfo)(nil), // 37: livekit.SIPDispatchRuleInfo - (*SIPDispatchRuleUpdate)(nil), // 38: livekit.SIPDispatchRuleUpdate - (*ListSIPDispatchRuleRequest)(nil), // 39: livekit.ListSIPDispatchRuleRequest - (*ListSIPDispatchRuleResponse)(nil), // 40: livekit.ListSIPDispatchRuleResponse - (*DeleteSIPDispatchRuleRequest)(nil), // 41: livekit.DeleteSIPDispatchRuleRequest - (*SIPOutboundConfig)(nil), // 42: livekit.SIPOutboundConfig - (*CreateSIPParticipantRequest)(nil), // 43: livekit.CreateSIPParticipantRequest - (*SIPParticipantInfo)(nil), // 44: livekit.SIPParticipantInfo - (*TransferSIPParticipantRequest)(nil), // 45: livekit.TransferSIPParticipantRequest - (*SIPCallInfo)(nil), // 46: livekit.SIPCallInfo - (*SIPTransferInfo)(nil), // 47: livekit.SIPTransferInfo - (*SIPUri)(nil), // 48: livekit.SIPUri - nil, // 49: livekit.SIPInboundTrunkInfo.HeadersEntry - nil, // 50: livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry - nil, // 51: livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry - nil, // 52: livekit.SIPOutboundTrunkInfo.HeadersEntry - nil, // 53: livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry - nil, // 54: livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry - nil, // 55: livekit.CreateSIPDispatchRuleRequest.AttributesEntry - nil, // 56: livekit.SIPDispatchRuleInfo.AttributesEntry - nil, // 57: livekit.SIPDispatchRuleUpdate.AttributesEntry - nil, // 58: livekit.SIPOutboundConfig.HeadersToAttributesEntry - nil, // 59: livekit.SIPOutboundConfig.AttributesToHeadersEntry - nil, // 60: livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry - nil, // 61: livekit.CreateSIPParticipantRequest.HeadersEntry - nil, // 62: livekit.TransferSIPParticipantRequest.HeadersEntry - nil, // 63: livekit.SIPCallInfo.ParticipantAttributesEntry - (*durationpb.Duration)(nil), // 64: google.protobuf.Duration - (*ListUpdate)(nil), // 65: livekit.ListUpdate - (*Pagination)(nil), // 66: livekit.Pagination - (*RoomConfiguration)(nil), // 67: livekit.RoomConfiguration - (DisconnectReason)(0), // 68: livekit.DisconnectReason - (*emptypb.Empty)(nil), // 69: google.protobuf.Empty + (SIPStatusCode)(0), // 0: livekit.SIPStatusCode + (SIPTransport)(0), // 1: livekit.SIPTransport + (SIPHeaderOptions)(0), // 2: livekit.SIPHeaderOptions + (SIPMediaEncryption)(0), // 3: livekit.SIPMediaEncryption + (DispatchAction)(0), // 4: livekit.DispatchAction + (SIPCallStatus)(0), // 5: livekit.SIPCallStatus + (SIPTransferStatus)(0), // 6: livekit.SIPTransferStatus + (SIPFeature)(0), // 7: livekit.SIPFeature + (SIPCallDirection)(0), // 8: livekit.SIPCallDirection + (SIPTrunkInfo_TrunkKind)(0), // 9: livekit.SIPTrunkInfo.TrunkKind + (*SIPStatus)(nil), // 10: livekit.SIPStatus + (*CreateSIPTrunkRequest)(nil), // 11: livekit.CreateSIPTrunkRequest + (*SIPTrunkInfo)(nil), // 12: livekit.SIPTrunkInfo + (*CreateSIPInboundTrunkRequest)(nil), // 13: livekit.CreateSIPInboundTrunkRequest + (*UpdateSIPInboundTrunkRequest)(nil), // 14: livekit.UpdateSIPInboundTrunkRequest + (*SIPInboundTrunkInfo)(nil), // 15: livekit.SIPInboundTrunkInfo + (*SIPInboundTrunkUpdate)(nil), // 16: livekit.SIPInboundTrunkUpdate + (*CreateSIPOutboundTrunkRequest)(nil), // 17: livekit.CreateSIPOutboundTrunkRequest + (*UpdateSIPOutboundTrunkRequest)(nil), // 18: livekit.UpdateSIPOutboundTrunkRequest + (*SIPOutboundTrunkInfo)(nil), // 19: livekit.SIPOutboundTrunkInfo + (*SIPOutboundTrunkUpdate)(nil), // 20: livekit.SIPOutboundTrunkUpdate + (*GetSIPInboundTrunkRequest)(nil), // 21: livekit.GetSIPInboundTrunkRequest + (*GetSIPInboundTrunkResponse)(nil), // 22: livekit.GetSIPInboundTrunkResponse + (*GetSIPOutboundTrunkRequest)(nil), // 23: livekit.GetSIPOutboundTrunkRequest + (*GetSIPOutboundTrunkResponse)(nil), // 24: livekit.GetSIPOutboundTrunkResponse + (*ListSIPTrunkRequest)(nil), // 25: livekit.ListSIPTrunkRequest + (*ListSIPTrunkResponse)(nil), // 26: livekit.ListSIPTrunkResponse + (*ListSIPInboundTrunkRequest)(nil), // 27: livekit.ListSIPInboundTrunkRequest + (*ListSIPInboundTrunkResponse)(nil), // 28: livekit.ListSIPInboundTrunkResponse + (*ListSIPOutboundTrunkRequest)(nil), // 29: livekit.ListSIPOutboundTrunkRequest + (*ListSIPOutboundTrunkResponse)(nil), // 30: livekit.ListSIPOutboundTrunkResponse + (*DeleteSIPTrunkRequest)(nil), // 31: livekit.DeleteSIPTrunkRequest + (*SIPDispatchRuleDirect)(nil), // 32: livekit.SIPDispatchRuleDirect + (*SIPDispatchRuleIndividual)(nil), // 33: livekit.SIPDispatchRuleIndividual + (*SIPDispatchRuleCallee)(nil), // 34: livekit.SIPDispatchRuleCallee + (*SIPDispatchRuleDynamic)(nil), // 35: livekit.SIPDispatchRuleDynamic + (*SIPDispatchRuleDynamicResponse)(nil), // 36: livekit.SIPDispatchRuleDynamicResponse + (*SIPDispatchRule)(nil), // 37: livekit.SIPDispatchRule + (*CreateSIPDispatchRuleRequest)(nil), // 38: livekit.CreateSIPDispatchRuleRequest + (*UpdateSIPDispatchRuleRequest)(nil), // 39: livekit.UpdateSIPDispatchRuleRequest + (*SIPDispatchRuleInfo)(nil), // 40: livekit.SIPDispatchRuleInfo + (*SIPDispatchRuleUpdate)(nil), // 41: livekit.SIPDispatchRuleUpdate + (*ListSIPDispatchRuleRequest)(nil), // 42: livekit.ListSIPDispatchRuleRequest + (*ListSIPDispatchRuleResponse)(nil), // 43: livekit.ListSIPDispatchRuleResponse + (*DeleteSIPDispatchRuleRequest)(nil), // 44: livekit.DeleteSIPDispatchRuleRequest + (*SIPOutboundConfig)(nil), // 45: livekit.SIPOutboundConfig + (*CreateSIPParticipantRequest)(nil), // 46: livekit.CreateSIPParticipantRequest + (*SIPParticipantInfo)(nil), // 47: livekit.SIPParticipantInfo + (*TransferSIPParticipantRequest)(nil), // 48: livekit.TransferSIPParticipantRequest + (*SIPCallInfo)(nil), // 49: livekit.SIPCallInfo + (*SIPTransferInfo)(nil), // 50: livekit.SIPTransferInfo + (*SIPUri)(nil), // 51: livekit.SIPUri + nil, // 52: livekit.SIPInboundTrunkInfo.HeadersEntry + nil, // 53: livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry + nil, // 54: livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry + nil, // 55: livekit.SIPOutboundTrunkInfo.HeadersEntry + nil, // 56: livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry + nil, // 57: livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry + nil, // 58: livekit.SIPDispatchRuleDynamicResponse.AttributesEntry + nil, // 59: livekit.CreateSIPDispatchRuleRequest.AttributesEntry + nil, // 60: livekit.SIPDispatchRuleInfo.AttributesEntry + nil, // 61: livekit.SIPDispatchRuleUpdate.AttributesEntry + nil, // 62: livekit.SIPOutboundConfig.HeadersToAttributesEntry + nil, // 63: livekit.SIPOutboundConfig.AttributesToHeadersEntry + nil, // 64: livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry + nil, // 65: livekit.CreateSIPParticipantRequest.HeadersEntry + nil, // 66: livekit.TransferSIPParticipantRequest.HeadersEntry + nil, // 67: livekit.SIPCallInfo.ParticipantAttributesEntry + (*durationpb.Duration)(nil), // 68: google.protobuf.Duration + (*ListUpdate)(nil), // 69: livekit.ListUpdate + (*Pagination)(nil), // 70: livekit.Pagination + (*RoomConfiguration)(nil), // 71: livekit.RoomConfiguration + (DisconnectReason)(0), // 72: livekit.DisconnectReason + (*emptypb.Empty)(nil), // 73: google.protobuf.Empty } var file_livekit_sip_proto_depIdxs = []int32{ - 0, // 0: livekit.SIPStatus.code:type_name -> livekit.SIPStatusCode - 8, // 1: livekit.SIPTrunkInfo.kind:type_name -> livekit.SIPTrunkInfo.TrunkKind - 1, // 2: livekit.SIPTrunkInfo.transport:type_name -> livekit.SIPTransport - 14, // 3: livekit.CreateSIPInboundTrunkRequest.trunk:type_name -> livekit.SIPInboundTrunkInfo - 14, // 4: livekit.UpdateSIPInboundTrunkRequest.replace:type_name -> livekit.SIPInboundTrunkInfo - 15, // 5: livekit.UpdateSIPInboundTrunkRequest.update:type_name -> livekit.SIPInboundTrunkUpdate - 49, // 6: livekit.SIPInboundTrunkInfo.headers:type_name -> livekit.SIPInboundTrunkInfo.HeadersEntry - 50, // 7: livekit.SIPInboundTrunkInfo.headers_to_attributes:type_name -> livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry - 51, // 8: livekit.SIPInboundTrunkInfo.attributes_to_headers:type_name -> livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry - 2, // 9: livekit.SIPInboundTrunkInfo.include_headers:type_name -> livekit.SIPHeaderOptions - 64, // 10: livekit.SIPInboundTrunkInfo.ringing_timeout:type_name -> google.protobuf.Duration - 64, // 11: livekit.SIPInboundTrunkInfo.max_call_duration:type_name -> google.protobuf.Duration - 3, // 12: livekit.SIPInboundTrunkInfo.media_encryption:type_name -> livekit.SIPMediaEncryption - 65, // 13: livekit.SIPInboundTrunkUpdate.numbers:type_name -> livekit.ListUpdate - 65, // 14: livekit.SIPInboundTrunkUpdate.allowed_addresses:type_name -> livekit.ListUpdate - 65, // 15: livekit.SIPInboundTrunkUpdate.allowed_numbers:type_name -> livekit.ListUpdate - 3, // 16: livekit.SIPInboundTrunkUpdate.media_encryption:type_name -> livekit.SIPMediaEncryption - 18, // 17: livekit.CreateSIPOutboundTrunkRequest.trunk:type_name -> livekit.SIPOutboundTrunkInfo - 18, // 18: livekit.UpdateSIPOutboundTrunkRequest.replace:type_name -> livekit.SIPOutboundTrunkInfo - 19, // 19: livekit.UpdateSIPOutboundTrunkRequest.update:type_name -> livekit.SIPOutboundTrunkUpdate - 1, // 20: livekit.SIPOutboundTrunkInfo.transport:type_name -> livekit.SIPTransport - 52, // 21: livekit.SIPOutboundTrunkInfo.headers:type_name -> livekit.SIPOutboundTrunkInfo.HeadersEntry - 53, // 22: livekit.SIPOutboundTrunkInfo.headers_to_attributes:type_name -> livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry - 54, // 23: livekit.SIPOutboundTrunkInfo.attributes_to_headers:type_name -> livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry - 2, // 24: livekit.SIPOutboundTrunkInfo.include_headers:type_name -> livekit.SIPHeaderOptions - 3, // 25: livekit.SIPOutboundTrunkInfo.media_encryption:type_name -> livekit.SIPMediaEncryption - 1, // 26: livekit.SIPOutboundTrunkUpdate.transport:type_name -> livekit.SIPTransport - 65, // 27: livekit.SIPOutboundTrunkUpdate.numbers:type_name -> livekit.ListUpdate - 3, // 28: livekit.SIPOutboundTrunkUpdate.media_encryption:type_name -> livekit.SIPMediaEncryption - 14, // 29: livekit.GetSIPInboundTrunkResponse.trunk:type_name -> livekit.SIPInboundTrunkInfo - 18, // 30: livekit.GetSIPOutboundTrunkResponse.trunk:type_name -> livekit.SIPOutboundTrunkInfo - 66, // 31: livekit.ListSIPTrunkRequest.page:type_name -> livekit.Pagination - 11, // 32: livekit.ListSIPTrunkResponse.items:type_name -> livekit.SIPTrunkInfo - 66, // 33: livekit.ListSIPInboundTrunkRequest.page:type_name -> livekit.Pagination - 14, // 34: livekit.ListSIPInboundTrunkResponse.items:type_name -> livekit.SIPInboundTrunkInfo - 66, // 35: livekit.ListSIPOutboundTrunkRequest.page:type_name -> livekit.Pagination - 18, // 36: livekit.ListSIPOutboundTrunkResponse.items:type_name -> livekit.SIPOutboundTrunkInfo - 31, // 37: livekit.SIPDispatchRule.dispatch_rule_direct:type_name -> livekit.SIPDispatchRuleDirect - 32, // 38: livekit.SIPDispatchRule.dispatch_rule_individual:type_name -> livekit.SIPDispatchRuleIndividual - 33, // 39: livekit.SIPDispatchRule.dispatch_rule_callee:type_name -> livekit.SIPDispatchRuleCallee - 37, // 40: livekit.CreateSIPDispatchRuleRequest.dispatch_rule:type_name -> livekit.SIPDispatchRuleInfo - 34, // 41: livekit.CreateSIPDispatchRuleRequest.rule:type_name -> livekit.SIPDispatchRule - 55, // 42: livekit.CreateSIPDispatchRuleRequest.attributes:type_name -> livekit.CreateSIPDispatchRuleRequest.AttributesEntry - 67, // 43: livekit.CreateSIPDispatchRuleRequest.room_config:type_name -> livekit.RoomConfiguration - 37, // 44: livekit.UpdateSIPDispatchRuleRequest.replace:type_name -> livekit.SIPDispatchRuleInfo - 38, // 45: livekit.UpdateSIPDispatchRuleRequest.update:type_name -> livekit.SIPDispatchRuleUpdate - 34, // 46: livekit.SIPDispatchRuleInfo.rule:type_name -> livekit.SIPDispatchRule - 56, // 47: livekit.SIPDispatchRuleInfo.attributes:type_name -> livekit.SIPDispatchRuleInfo.AttributesEntry - 67, // 48: livekit.SIPDispatchRuleInfo.room_config:type_name -> livekit.RoomConfiguration - 3, // 49: livekit.SIPDispatchRuleInfo.media_encryption:type_name -> livekit.SIPMediaEncryption - 65, // 50: livekit.SIPDispatchRuleUpdate.trunk_ids:type_name -> livekit.ListUpdate - 34, // 51: livekit.SIPDispatchRuleUpdate.rule:type_name -> livekit.SIPDispatchRule - 57, // 52: livekit.SIPDispatchRuleUpdate.attributes:type_name -> livekit.SIPDispatchRuleUpdate.AttributesEntry - 3, // 53: livekit.SIPDispatchRuleUpdate.media_encryption:type_name -> livekit.SIPMediaEncryption - 66, // 54: livekit.ListSIPDispatchRuleRequest.page:type_name -> livekit.Pagination - 37, // 55: livekit.ListSIPDispatchRuleResponse.items:type_name -> livekit.SIPDispatchRuleInfo - 1, // 56: livekit.SIPOutboundConfig.transport:type_name -> livekit.SIPTransport - 58, // 57: livekit.SIPOutboundConfig.headers_to_attributes:type_name -> livekit.SIPOutboundConfig.HeadersToAttributesEntry - 59, // 58: livekit.SIPOutboundConfig.attributes_to_headers:type_name -> livekit.SIPOutboundConfig.AttributesToHeadersEntry - 42, // 59: livekit.CreateSIPParticipantRequest.trunk:type_name -> livekit.SIPOutboundConfig - 60, // 60: livekit.CreateSIPParticipantRequest.participant_attributes:type_name -> livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry - 61, // 61: livekit.CreateSIPParticipantRequest.headers:type_name -> livekit.CreateSIPParticipantRequest.HeadersEntry - 2, // 62: livekit.CreateSIPParticipantRequest.include_headers:type_name -> livekit.SIPHeaderOptions - 64, // 63: livekit.CreateSIPParticipantRequest.ringing_timeout:type_name -> google.protobuf.Duration - 64, // 64: livekit.CreateSIPParticipantRequest.max_call_duration:type_name -> google.protobuf.Duration - 3, // 65: livekit.CreateSIPParticipantRequest.media_encryption:type_name -> livekit.SIPMediaEncryption - 62, // 66: livekit.TransferSIPParticipantRequest.headers:type_name -> livekit.TransferSIPParticipantRequest.HeadersEntry - 64, // 67: livekit.TransferSIPParticipantRequest.ringing_timeout:type_name -> google.protobuf.Duration - 63, // 68: livekit.SIPCallInfo.participant_attributes:type_name -> livekit.SIPCallInfo.ParticipantAttributesEntry - 48, // 69: livekit.SIPCallInfo.from_uri:type_name -> livekit.SIPUri - 48, // 70: livekit.SIPCallInfo.to_uri:type_name -> livekit.SIPUri - 6, // 71: livekit.SIPCallInfo.enabled_features:type_name -> livekit.SIPFeature - 7, // 72: livekit.SIPCallInfo.call_direction:type_name -> livekit.SIPCallDirection - 4, // 73: livekit.SIPCallInfo.call_status:type_name -> livekit.SIPCallStatus - 68, // 74: livekit.SIPCallInfo.disconnect_reason:type_name -> livekit.DisconnectReason - 9, // 75: livekit.SIPCallInfo.call_status_code:type_name -> livekit.SIPStatus - 5, // 76: livekit.SIPTransferInfo.transfer_status:type_name -> livekit.SIPTransferStatus - 9, // 77: livekit.SIPTransferInfo.transfer_status_code:type_name -> livekit.SIPStatus - 1, // 78: livekit.SIPUri.transport:type_name -> livekit.SIPTransport - 24, // 79: livekit.SIP.ListSIPTrunk:input_type -> livekit.ListSIPTrunkRequest - 12, // 80: livekit.SIP.CreateSIPInboundTrunk:input_type -> livekit.CreateSIPInboundTrunkRequest - 16, // 81: livekit.SIP.CreateSIPOutboundTrunk:input_type -> livekit.CreateSIPOutboundTrunkRequest - 13, // 82: livekit.SIP.UpdateSIPInboundTrunk:input_type -> livekit.UpdateSIPInboundTrunkRequest - 17, // 83: livekit.SIP.UpdateSIPOutboundTrunk:input_type -> livekit.UpdateSIPOutboundTrunkRequest - 20, // 84: livekit.SIP.GetSIPInboundTrunk:input_type -> livekit.GetSIPInboundTrunkRequest - 22, // 85: livekit.SIP.GetSIPOutboundTrunk:input_type -> livekit.GetSIPOutboundTrunkRequest - 26, // 86: livekit.SIP.ListSIPInboundTrunk:input_type -> livekit.ListSIPInboundTrunkRequest - 28, // 87: livekit.SIP.ListSIPOutboundTrunk:input_type -> livekit.ListSIPOutboundTrunkRequest - 30, // 88: livekit.SIP.DeleteSIPTrunk:input_type -> livekit.DeleteSIPTrunkRequest - 35, // 89: livekit.SIP.CreateSIPDispatchRule:input_type -> livekit.CreateSIPDispatchRuleRequest - 36, // 90: livekit.SIP.UpdateSIPDispatchRule:input_type -> livekit.UpdateSIPDispatchRuleRequest - 39, // 91: livekit.SIP.ListSIPDispatchRule:input_type -> livekit.ListSIPDispatchRuleRequest - 41, // 92: livekit.SIP.DeleteSIPDispatchRule:input_type -> livekit.DeleteSIPDispatchRuleRequest - 43, // 93: livekit.SIP.CreateSIPParticipant:input_type -> livekit.CreateSIPParticipantRequest - 45, // 94: livekit.SIP.TransferSIPParticipant:input_type -> livekit.TransferSIPParticipantRequest - 25, // 95: livekit.SIP.ListSIPTrunk:output_type -> livekit.ListSIPTrunkResponse - 14, // 96: livekit.SIP.CreateSIPInboundTrunk:output_type -> livekit.SIPInboundTrunkInfo - 18, // 97: livekit.SIP.CreateSIPOutboundTrunk:output_type -> livekit.SIPOutboundTrunkInfo - 14, // 98: livekit.SIP.UpdateSIPInboundTrunk:output_type -> livekit.SIPInboundTrunkInfo - 18, // 99: livekit.SIP.UpdateSIPOutboundTrunk:output_type -> livekit.SIPOutboundTrunkInfo - 21, // 100: livekit.SIP.GetSIPInboundTrunk:output_type -> livekit.GetSIPInboundTrunkResponse - 23, // 101: livekit.SIP.GetSIPOutboundTrunk:output_type -> livekit.GetSIPOutboundTrunkResponse - 27, // 102: livekit.SIP.ListSIPInboundTrunk:output_type -> livekit.ListSIPInboundTrunkResponse - 29, // 103: livekit.SIP.ListSIPOutboundTrunk:output_type -> livekit.ListSIPOutboundTrunkResponse - 11, // 104: livekit.SIP.DeleteSIPTrunk:output_type -> livekit.SIPTrunkInfo - 37, // 105: livekit.SIP.CreateSIPDispatchRule:output_type -> livekit.SIPDispatchRuleInfo - 37, // 106: livekit.SIP.UpdateSIPDispatchRule:output_type -> livekit.SIPDispatchRuleInfo - 40, // 107: livekit.SIP.ListSIPDispatchRule:output_type -> livekit.ListSIPDispatchRuleResponse - 37, // 108: livekit.SIP.DeleteSIPDispatchRule:output_type -> livekit.SIPDispatchRuleInfo - 44, // 109: livekit.SIP.CreateSIPParticipant:output_type -> livekit.SIPParticipantInfo - 69, // 110: livekit.SIP.TransferSIPParticipant:output_type -> google.protobuf.Empty - 95, // [95:111] is the sub-list for method output_type - 79, // [79:95] is the sub-list for method input_type - 79, // [79:79] is the sub-list for extension type_name - 79, // [79:79] is the sub-list for extension extendee - 0, // [0:79] is the sub-list for field type_name + 0, // 0: livekit.SIPStatus.code:type_name -> livekit.SIPStatusCode + 9, // 1: livekit.SIPTrunkInfo.kind:type_name -> livekit.SIPTrunkInfo.TrunkKind + 1, // 2: livekit.SIPTrunkInfo.transport:type_name -> livekit.SIPTransport + 15, // 3: livekit.CreateSIPInboundTrunkRequest.trunk:type_name -> livekit.SIPInboundTrunkInfo + 15, // 4: livekit.UpdateSIPInboundTrunkRequest.replace:type_name -> livekit.SIPInboundTrunkInfo + 16, // 5: livekit.UpdateSIPInboundTrunkRequest.update:type_name -> livekit.SIPInboundTrunkUpdate + 52, // 6: livekit.SIPInboundTrunkInfo.headers:type_name -> livekit.SIPInboundTrunkInfo.HeadersEntry + 53, // 7: livekit.SIPInboundTrunkInfo.headers_to_attributes:type_name -> livekit.SIPInboundTrunkInfo.HeadersToAttributesEntry + 54, // 8: livekit.SIPInboundTrunkInfo.attributes_to_headers:type_name -> livekit.SIPInboundTrunkInfo.AttributesToHeadersEntry + 2, // 9: livekit.SIPInboundTrunkInfo.include_headers:type_name -> livekit.SIPHeaderOptions + 68, // 10: livekit.SIPInboundTrunkInfo.ringing_timeout:type_name -> google.protobuf.Duration + 68, // 11: livekit.SIPInboundTrunkInfo.max_call_duration:type_name -> google.protobuf.Duration + 3, // 12: livekit.SIPInboundTrunkInfo.media_encryption:type_name -> livekit.SIPMediaEncryption + 69, // 13: livekit.SIPInboundTrunkUpdate.numbers:type_name -> livekit.ListUpdate + 69, // 14: livekit.SIPInboundTrunkUpdate.allowed_addresses:type_name -> livekit.ListUpdate + 69, // 15: livekit.SIPInboundTrunkUpdate.allowed_numbers:type_name -> livekit.ListUpdate + 3, // 16: livekit.SIPInboundTrunkUpdate.media_encryption:type_name -> livekit.SIPMediaEncryption + 19, // 17: livekit.CreateSIPOutboundTrunkRequest.trunk:type_name -> livekit.SIPOutboundTrunkInfo + 19, // 18: livekit.UpdateSIPOutboundTrunkRequest.replace:type_name -> livekit.SIPOutboundTrunkInfo + 20, // 19: livekit.UpdateSIPOutboundTrunkRequest.update:type_name -> livekit.SIPOutboundTrunkUpdate + 1, // 20: livekit.SIPOutboundTrunkInfo.transport:type_name -> livekit.SIPTransport + 55, // 21: livekit.SIPOutboundTrunkInfo.headers:type_name -> livekit.SIPOutboundTrunkInfo.HeadersEntry + 56, // 22: livekit.SIPOutboundTrunkInfo.headers_to_attributes:type_name -> livekit.SIPOutboundTrunkInfo.HeadersToAttributesEntry + 57, // 23: livekit.SIPOutboundTrunkInfo.attributes_to_headers:type_name -> livekit.SIPOutboundTrunkInfo.AttributesToHeadersEntry + 2, // 24: livekit.SIPOutboundTrunkInfo.include_headers:type_name -> livekit.SIPHeaderOptions + 3, // 25: livekit.SIPOutboundTrunkInfo.media_encryption:type_name -> livekit.SIPMediaEncryption + 1, // 26: livekit.SIPOutboundTrunkUpdate.transport:type_name -> livekit.SIPTransport + 69, // 27: livekit.SIPOutboundTrunkUpdate.numbers:type_name -> livekit.ListUpdate + 3, // 28: livekit.SIPOutboundTrunkUpdate.media_encryption:type_name -> livekit.SIPMediaEncryption + 15, // 29: livekit.GetSIPInboundTrunkResponse.trunk:type_name -> livekit.SIPInboundTrunkInfo + 19, // 30: livekit.GetSIPOutboundTrunkResponse.trunk:type_name -> livekit.SIPOutboundTrunkInfo + 70, // 31: livekit.ListSIPTrunkRequest.page:type_name -> livekit.Pagination + 12, // 32: livekit.ListSIPTrunkResponse.items:type_name -> livekit.SIPTrunkInfo + 70, // 33: livekit.ListSIPInboundTrunkRequest.page:type_name -> livekit.Pagination + 15, // 34: livekit.ListSIPInboundTrunkResponse.items:type_name -> livekit.SIPInboundTrunkInfo + 70, // 35: livekit.ListSIPOutboundTrunkRequest.page:type_name -> livekit.Pagination + 19, // 36: livekit.ListSIPOutboundTrunkResponse.items:type_name -> livekit.SIPOutboundTrunkInfo + 4, // 37: livekit.SIPDispatchRuleDynamicResponse.action:type_name -> livekit.DispatchAction + 71, // 38: livekit.SIPDispatchRuleDynamicResponse.room_config:type_name -> livekit.RoomConfiguration + 3, // 39: livekit.SIPDispatchRuleDynamicResponse.media_encryption:type_name -> livekit.SIPMediaEncryption + 0, // 40: livekit.SIPDispatchRuleDynamicResponse.reject_status_code:type_name -> livekit.SIPStatusCode + 68, // 41: livekit.SIPDispatchRuleDynamicResponse.transfer_ringing_timeout:type_name -> google.protobuf.Duration + 58, // 42: livekit.SIPDispatchRuleDynamicResponse.attributes:type_name -> livekit.SIPDispatchRuleDynamicResponse.AttributesEntry + 32, // 43: livekit.SIPDispatchRule.dispatch_rule_direct:type_name -> livekit.SIPDispatchRuleDirect + 33, // 44: livekit.SIPDispatchRule.dispatch_rule_individual:type_name -> livekit.SIPDispatchRuleIndividual + 34, // 45: livekit.SIPDispatchRule.dispatch_rule_callee:type_name -> livekit.SIPDispatchRuleCallee + 35, // 46: livekit.SIPDispatchRule.dispatch_rule_dynamic:type_name -> livekit.SIPDispatchRuleDynamic + 40, // 47: livekit.CreateSIPDispatchRuleRequest.dispatch_rule:type_name -> livekit.SIPDispatchRuleInfo + 37, // 48: livekit.CreateSIPDispatchRuleRequest.rule:type_name -> livekit.SIPDispatchRule + 59, // 49: livekit.CreateSIPDispatchRuleRequest.attributes:type_name -> livekit.CreateSIPDispatchRuleRequest.AttributesEntry + 71, // 50: livekit.CreateSIPDispatchRuleRequest.room_config:type_name -> livekit.RoomConfiguration + 40, // 51: livekit.UpdateSIPDispatchRuleRequest.replace:type_name -> livekit.SIPDispatchRuleInfo + 41, // 52: livekit.UpdateSIPDispatchRuleRequest.update:type_name -> livekit.SIPDispatchRuleUpdate + 37, // 53: livekit.SIPDispatchRuleInfo.rule:type_name -> livekit.SIPDispatchRule + 60, // 54: livekit.SIPDispatchRuleInfo.attributes:type_name -> livekit.SIPDispatchRuleInfo.AttributesEntry + 71, // 55: livekit.SIPDispatchRuleInfo.room_config:type_name -> livekit.RoomConfiguration + 3, // 56: livekit.SIPDispatchRuleInfo.media_encryption:type_name -> livekit.SIPMediaEncryption + 4, // 57: livekit.SIPDispatchRuleInfo.action:type_name -> livekit.DispatchAction + 0, // 58: livekit.SIPDispatchRuleInfo.reject_status_code:type_name -> livekit.SIPStatusCode + 68, // 59: livekit.SIPDispatchRuleInfo.transfer_ringing_timeout:type_name -> google.protobuf.Duration + 69, // 60: livekit.SIPDispatchRuleUpdate.trunk_ids:type_name -> livekit.ListUpdate + 37, // 61: livekit.SIPDispatchRuleUpdate.rule:type_name -> livekit.SIPDispatchRule + 61, // 62: livekit.SIPDispatchRuleUpdate.attributes:type_name -> livekit.SIPDispatchRuleUpdate.AttributesEntry + 3, // 63: livekit.SIPDispatchRuleUpdate.media_encryption:type_name -> livekit.SIPMediaEncryption + 70, // 64: livekit.ListSIPDispatchRuleRequest.page:type_name -> livekit.Pagination + 40, // 65: livekit.ListSIPDispatchRuleResponse.items:type_name -> livekit.SIPDispatchRuleInfo + 1, // 66: livekit.SIPOutboundConfig.transport:type_name -> livekit.SIPTransport + 62, // 67: livekit.SIPOutboundConfig.headers_to_attributes:type_name -> livekit.SIPOutboundConfig.HeadersToAttributesEntry + 63, // 68: livekit.SIPOutboundConfig.attributes_to_headers:type_name -> livekit.SIPOutboundConfig.AttributesToHeadersEntry + 45, // 69: livekit.CreateSIPParticipantRequest.trunk:type_name -> livekit.SIPOutboundConfig + 64, // 70: livekit.CreateSIPParticipantRequest.participant_attributes:type_name -> livekit.CreateSIPParticipantRequest.ParticipantAttributesEntry + 65, // 71: livekit.CreateSIPParticipantRequest.headers:type_name -> livekit.CreateSIPParticipantRequest.HeadersEntry + 2, // 72: livekit.CreateSIPParticipantRequest.include_headers:type_name -> livekit.SIPHeaderOptions + 68, // 73: livekit.CreateSIPParticipantRequest.ringing_timeout:type_name -> google.protobuf.Duration + 68, // 74: livekit.CreateSIPParticipantRequest.max_call_duration:type_name -> google.protobuf.Duration + 3, // 75: livekit.CreateSIPParticipantRequest.media_encryption:type_name -> livekit.SIPMediaEncryption + 66, // 76: livekit.TransferSIPParticipantRequest.headers:type_name -> livekit.TransferSIPParticipantRequest.HeadersEntry + 68, // 77: livekit.TransferSIPParticipantRequest.ringing_timeout:type_name -> google.protobuf.Duration + 67, // 78: livekit.SIPCallInfo.participant_attributes:type_name -> livekit.SIPCallInfo.ParticipantAttributesEntry + 51, // 79: livekit.SIPCallInfo.from_uri:type_name -> livekit.SIPUri + 51, // 80: livekit.SIPCallInfo.to_uri:type_name -> livekit.SIPUri + 7, // 81: livekit.SIPCallInfo.enabled_features:type_name -> livekit.SIPFeature + 8, // 82: livekit.SIPCallInfo.call_direction:type_name -> livekit.SIPCallDirection + 5, // 83: livekit.SIPCallInfo.call_status:type_name -> livekit.SIPCallStatus + 72, // 84: livekit.SIPCallInfo.disconnect_reason:type_name -> livekit.DisconnectReason + 10, // 85: livekit.SIPCallInfo.call_status_code:type_name -> livekit.SIPStatus + 6, // 86: livekit.SIPTransferInfo.transfer_status:type_name -> livekit.SIPTransferStatus + 10, // 87: livekit.SIPTransferInfo.transfer_status_code:type_name -> livekit.SIPStatus + 1, // 88: livekit.SIPUri.transport:type_name -> livekit.SIPTransport + 25, // 89: livekit.SIP.ListSIPTrunk:input_type -> livekit.ListSIPTrunkRequest + 13, // 90: livekit.SIP.CreateSIPInboundTrunk:input_type -> livekit.CreateSIPInboundTrunkRequest + 17, // 91: livekit.SIP.CreateSIPOutboundTrunk:input_type -> livekit.CreateSIPOutboundTrunkRequest + 14, // 92: livekit.SIP.UpdateSIPInboundTrunk:input_type -> livekit.UpdateSIPInboundTrunkRequest + 18, // 93: livekit.SIP.UpdateSIPOutboundTrunk:input_type -> livekit.UpdateSIPOutboundTrunkRequest + 21, // 94: livekit.SIP.GetSIPInboundTrunk:input_type -> livekit.GetSIPInboundTrunkRequest + 23, // 95: livekit.SIP.GetSIPOutboundTrunk:input_type -> livekit.GetSIPOutboundTrunkRequest + 27, // 96: livekit.SIP.ListSIPInboundTrunk:input_type -> livekit.ListSIPInboundTrunkRequest + 29, // 97: livekit.SIP.ListSIPOutboundTrunk:input_type -> livekit.ListSIPOutboundTrunkRequest + 31, // 98: livekit.SIP.DeleteSIPTrunk:input_type -> livekit.DeleteSIPTrunkRequest + 38, // 99: livekit.SIP.CreateSIPDispatchRule:input_type -> livekit.CreateSIPDispatchRuleRequest + 39, // 100: livekit.SIP.UpdateSIPDispatchRule:input_type -> livekit.UpdateSIPDispatchRuleRequest + 42, // 101: livekit.SIP.ListSIPDispatchRule:input_type -> livekit.ListSIPDispatchRuleRequest + 44, // 102: livekit.SIP.DeleteSIPDispatchRule:input_type -> livekit.DeleteSIPDispatchRuleRequest + 46, // 103: livekit.SIP.CreateSIPParticipant:input_type -> livekit.CreateSIPParticipantRequest + 48, // 104: livekit.SIP.TransferSIPParticipant:input_type -> livekit.TransferSIPParticipantRequest + 26, // 105: livekit.SIP.ListSIPTrunk:output_type -> livekit.ListSIPTrunkResponse + 15, // 106: livekit.SIP.CreateSIPInboundTrunk:output_type -> livekit.SIPInboundTrunkInfo + 19, // 107: livekit.SIP.CreateSIPOutboundTrunk:output_type -> livekit.SIPOutboundTrunkInfo + 15, // 108: livekit.SIP.UpdateSIPInboundTrunk:output_type -> livekit.SIPInboundTrunkInfo + 19, // 109: livekit.SIP.UpdateSIPOutboundTrunk:output_type -> livekit.SIPOutboundTrunkInfo + 22, // 110: livekit.SIP.GetSIPInboundTrunk:output_type -> livekit.GetSIPInboundTrunkResponse + 24, // 111: livekit.SIP.GetSIPOutboundTrunk:output_type -> livekit.GetSIPOutboundTrunkResponse + 28, // 112: livekit.SIP.ListSIPInboundTrunk:output_type -> livekit.ListSIPInboundTrunkResponse + 30, // 113: livekit.SIP.ListSIPOutboundTrunk:output_type -> livekit.ListSIPOutboundTrunkResponse + 12, // 114: livekit.SIP.DeleteSIPTrunk:output_type -> livekit.SIPTrunkInfo + 40, // 115: livekit.SIP.CreateSIPDispatchRule:output_type -> livekit.SIPDispatchRuleInfo + 40, // 116: livekit.SIP.UpdateSIPDispatchRule:output_type -> livekit.SIPDispatchRuleInfo + 43, // 117: livekit.SIP.ListSIPDispatchRule:output_type -> livekit.ListSIPDispatchRuleResponse + 40, // 118: livekit.SIP.DeleteSIPDispatchRule:output_type -> livekit.SIPDispatchRuleInfo + 47, // 119: livekit.SIP.CreateSIPParticipant:output_type -> livekit.SIPParticipantInfo + 73, // 120: livekit.SIP.TransferSIPParticipant:output_type -> google.protobuf.Empty + 105, // [105:121] is the sub-list for method output_type + 89, // [89:105] is the sub-list for method input_type + 89, // [89:89] is the sub-list for extension type_name + 89, // [89:89] is the sub-list for extension extendee + 0, // [0:89] is the sub-list for field type_name } func init() { file_livekit_sip_proto_init() } @@ -4810,23 +5216,24 @@ func file_livekit_sip_proto_init() { (*UpdateSIPOutboundTrunkRequest_Update)(nil), } file_livekit_sip_proto_msgTypes[10].OneofWrappers = []any{} - file_livekit_sip_proto_msgTypes[25].OneofWrappers = []any{ + file_livekit_sip_proto_msgTypes[27].OneofWrappers = []any{ (*SIPDispatchRule_DispatchRuleDirect)(nil), (*SIPDispatchRule_DispatchRuleIndividual)(nil), (*SIPDispatchRule_DispatchRuleCallee)(nil), + (*SIPDispatchRule_DispatchRuleDynamic)(nil), } - file_livekit_sip_proto_msgTypes[27].OneofWrappers = []any{ + file_livekit_sip_proto_msgTypes[29].OneofWrappers = []any{ (*UpdateSIPDispatchRuleRequest_Replace)(nil), (*UpdateSIPDispatchRuleRequest_Update)(nil), } - file_livekit_sip_proto_msgTypes[29].OneofWrappers = []any{} + file_livekit_sip_proto_msgTypes[31].OneofWrappers = []any{} type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_livekit_sip_proto_rawDesc), len(file_livekit_sip_proto_rawDesc)), - NumEnums: 9, - NumMessages: 55, + NumEnums: 10, + NumMessages: 58, NumExtensions: 0, NumServices: 1, }, diff --git a/livekit/livekit_sip.twirp.go b/livekit/livekit_sip.twirp.go index 8e39e673..b2672e26 100644 --- a/livekit/livekit_sip.twirp.go +++ b/livekit/livekit_sip.twirp.go @@ -4704,284 +4704,301 @@ func (s *sIPServer) PathPrefix() string { } var twirpFileDescriptor4 = []byte{ - // 4464 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x5c, 0x59, 0x8c, 0x1b, 0x5b, - 0x5a, 0x8e, 0x5d, 0x6e, 0xb7, 0xfd, 0xbb, 0x97, 0xea, 0xd3, 0x4b, 0x1c, 0x27, 0x9d, 0x64, 0x9c, - 0xbb, 0x24, 0x7d, 0x87, 0xce, 0x9d, 0x04, 0x66, 0xee, 0x0d, 0xb3, 0x95, 0xed, 0xea, 0xee, 0x22, - 0xee, 0x2a, 0xdf, 0xaa, 0x72, 0x92, 0x1e, 0x0d, 0x14, 0x15, 0x57, 0x75, 0xa7, 0x26, 0xb6, 0xcb, - 0xd8, 0xe5, 0xe4, 0x06, 0xc1, 0x03, 0x12, 0x0f, 0x97, 0x17, 0xc4, 0xbe, 0x49, 0x6c, 0x62, 0x93, - 0x40, 0x20, 0x81, 0xd8, 0x9e, 0x90, 0x06, 0xf1, 0x00, 0x48, 0x3c, 0x83, 0xc4, 0x22, 0x18, 0x56, - 0xf1, 0x00, 0x3c, 0xb0, 0x3e, 0x81, 0xce, 0x52, 0xab, 0xcb, 0x4b, 0x27, 0x19, 0x09, 0xc1, 0x5b, - 0xd5, 0x7f, 0xfe, 0xf3, 0x9f, 0xff, 0x9c, 0xf3, 0xfd, 0xcb, 0xf9, 0xeb, 0xd8, 0xb0, 0xd1, 0x75, - 0x9e, 0xd9, 0x4f, 0x1d, 0xcf, 0x18, 0x39, 0x83, 0xfd, 0xc1, 0xd0, 0xf5, 0x5c, 0xb4, 0xcc, 0x48, - 0x95, 0xab, 0x67, 0xae, 0x7b, 0xd6, 0xb5, 0x6f, 0x13, 0xf2, 0xe3, 0xf1, 0xe9, 0x6d, 0x6b, 0x3c, - 0x34, 0x3d, 0xc7, 0xed, 0x53, 0xc6, 0xca, 0xe5, 0x64, 0xbb, 0xdd, 0x1b, 0x78, 0x2f, 0x58, 0xe3, - 0x96, 0x2f, 0xb8, 0xe7, 0x5a, 0x76, 0x77, 0xc4, 0xa8, 0xc8, 0xa7, 0x0e, 0x5d, 0xb7, 0x47, 0x69, - 0x55, 0x05, 0x8a, 0x9a, 0xd4, 0xd2, 0x3c, 0xd3, 0x1b, 0x8f, 0xd0, 0x1e, 0xe4, 0x3a, 0xae, 0x65, - 0x97, 0x33, 0xd7, 0x33, 0x37, 0xd7, 0xee, 0xec, 0xec, 0x33, 0xfe, 0xfd, 0x80, 0xa3, 0xee, 0x5a, - 0xb6, 0x4a, 0x78, 0xd0, 0x0e, 0xe4, 0x47, 0x84, 0x56, 0xce, 0x5e, 0xcf, 0xdc, 0x2c, 0xaa, 0xec, - 0xad, 0xfa, 0xe7, 0x1c, 0x6c, 0xd7, 0x87, 0xb6, 0xe9, 0xd9, 0x9a, 0xd4, 0xd2, 0x87, 0xe3, 0xfe, - 0x53, 0xd5, 0xfe, 0x96, 0xb1, 0x3d, 0xf2, 0xd0, 0x3b, 0xb0, 0xe1, 0xf4, 0x1f, 0xbb, 0xe3, 0xbe, - 0x65, 0x98, 0x96, 0x35, 0xb4, 0x47, 0x23, 0x7b, 0x54, 0xce, 0x5c, 0xe7, 0x6e, 0x16, 0x55, 0x9e, - 0x35, 0x08, 0x3e, 0x1d, 0xdd, 0x02, 0xde, 0x1d, 0x7b, 0x31, 0x6e, 0x36, 0xd0, 0xba, 0x4f, 0x67, - 0xcc, 0xe8, 0x6d, 0x08, 0x48, 0x46, 0x7f, 0xdc, 0x7b, 0x6c, 0x0f, 0xcb, 0x1c, 0xe1, 0x5c, 0xf3, - 0xc9, 0x32, 0xa1, 0xa2, 0x4f, 0xc2, 0xb6, 0xaf, 0x00, 0xe5, 0x1b, 0x19, 0x43, 0xfb, 0xcc, 0xfe, - 0xb0, 0x9c, 0xc3, 0x4a, 0xd4, 0xb2, 0xe5, 0x8c, 0xba, 0xc9, 0x18, 0x68, 0x8f, 0x91, 0x8a, 0x9b, - 0xf1, 0x00, 0x89, 0x7e, 0xe5, 0x22, 0x51, 0x7b, 0x2d, 0xce, 0x8d, 0x95, 0xf6, 0x19, 0xc7, 0x23, - 0x7b, 0xd8, 0x37, 0x7b, 0x76, 0x79, 0x89, 0x2a, 0xcd, 0xe8, 0x6d, 0x46, 0x8e, 0xb2, 0x0e, 0xcc, - 0xd1, 0xe8, 0xb9, 0x3b, 0xb4, 0xca, 0xf9, 0x18, 0x6b, 0x8b, 0x91, 0xf1, 0xba, 0x05, 0xf3, 0x0b, - 0xc4, 0x2e, 0x13, 0xde, 0x60, 0x8d, 0x02, 0xb9, 0x51, 0xe6, 0x40, 0x70, 0x21, 0xce, 0x1c, 0x48, - 0x46, 0x90, 0x23, 0xc2, 0x80, 0xb4, 0x93, 0x67, 0x54, 0x81, 0x42, 0xcf, 0xf6, 0x4c, 0xcb, 0xf4, - 0xcc, 0x72, 0x89, 0xd0, 0x83, 0xf7, 0x7b, 0xd9, 0x72, 0xa6, 0xfa, 0xf3, 0x4b, 0xb0, 0xe2, 0xef, - 0xac, 0xd4, 0x3f, 0x75, 0xd1, 0x75, 0x58, 0x19, 0x39, 0x03, 0xc3, 0xc3, 0x04, 0xc3, 0xb1, 0x08, - 0x78, 0x8a, 0x2a, 0x8c, 0x9c, 0x01, 0xe5, 0xb1, 0xd0, 0x5d, 0xc8, 0x3d, 0x75, 0xfa, 0x56, 0x79, - 0x8d, 0xc0, 0xea, 0x5a, 0x14, 0x56, 0x81, 0x98, 0x7d, 0xf2, 0x74, 0xdf, 0xe9, 0x5b, 0x2a, 0x61, - 0x4e, 0x47, 0x4b, 0xf6, 0x1c, 0x68, 0xe1, 0x16, 0x46, 0x4b, 0x2e, 0x15, 0x2d, 0x77, 0xa1, 0xe8, - 0x0d, 0xcd, 0xfe, 0x68, 0xe0, 0x0e, 0xbd, 0xf2, 0x2a, 0x51, 0x7d, 0x3b, 0xae, 0x3a, 0x6b, 0x54, - 0x43, 0xbe, 0xe9, 0x10, 0x5b, 0x3a, 0x37, 0xc4, 0x60, 0x61, 0x88, 0xe5, 0x17, 0x87, 0xd8, 0xf2, - 0x39, 0x20, 0x56, 0x38, 0x0f, 0xc4, 0x8a, 0x73, 0x20, 0x56, 0x9a, 0x02, 0xb1, 0x95, 0x38, 0xc4, - 0xaa, 0x0d, 0x28, 0x06, 0x48, 0x40, 0x3c, 0xac, 0xe8, 0x6a, 0x5b, 0xbe, 0x6f, 0x34, 0xc5, 0x43, - 0xa1, 0x7e, 0xc2, 0x5f, 0x40, 0x1b, 0xb0, 0x4a, 0x29, 0x92, 0x5c, 0x53, 0xda, 0x72, 0x83, 0xcf, - 0x20, 0x04, 0x6b, 0x94, 0xa4, 0xb4, 0x75, 0x4a, 0xcb, 0x12, 0xa0, 0xaa, 0x70, 0x25, 0xf0, 0x43, - 0x12, 0x9d, 0x6f, 0xcc, 0x1d, 0xdd, 0x81, 0x25, 0x82, 0x59, 0x02, 0xd8, 0xd2, 0x9d, 0x2b, 0xd1, - 0xbd, 0x8d, 0xf2, 0x63, 0x74, 0xaa, 0x94, 0xb5, 0xfa, 0x3b, 0x19, 0xb8, 0xd2, 0x1e, 0x58, 0xd3, - 0x85, 0xce, 0x37, 0x86, 0xf7, 0x60, 0x79, 0x68, 0x0f, 0xba, 0x66, 0xc7, 0x26, 0xfe, 0x6c, 0xce, - 0xc0, 0x47, 0x17, 0x54, 0x9f, 0x1d, 0xbd, 0x07, 0xf9, 0x31, 0x19, 0x9b, 0x40, 0xbb, 0x74, 0xe7, - 0xea, 0xb4, 0x8e, 0x54, 0xc3, 0xa3, 0x0b, 0x2a, 0xe3, 0xaf, 0x15, 0x20, 0x6f, 0x76, 0x70, 0xec, - 0xa8, 0xfe, 0x5e, 0x01, 0x36, 0x53, 0x86, 0x59, 0x40, 0x6f, 0x7f, 0x23, 0xb3, 0x53, 0x36, 0x92, - 0x8b, 0x6f, 0x24, 0x2a, 0xc3, 0xb2, 0x8f, 0x64, 0xe2, 0x5e, 0x55, 0xff, 0x15, 0xe3, 0xc7, 0xec, - 0x76, 0xdd, 0xe7, 0x76, 0xd4, 0xb2, 0x97, 0xa8, 0x65, 0xb3, 0x86, 0xd0, 0xb2, 0xdf, 0x86, 0x75, - 0x9f, 0xd9, 0x17, 0x97, 0xa7, 0x86, 0xc1, 0xc8, 0xbe, 0x61, 0xdc, 0x80, 0x55, 0x73, 0xec, 0x3d, - 0x49, 0x7a, 0xc8, 0x15, 0x4c, 0x0c, 0xa0, 0xeb, 0x33, 0x25, 0x3c, 0x23, 0x61, 0x0a, 0x20, 0x5b, - 0x87, 0xe5, 0x27, 0xb6, 0x69, 0xf9, 0x6e, 0xbe, 0x74, 0xe7, 0xd6, 0xac, 0x1d, 0xda, 0x3f, 0xa2, - 0xbc, 0x62, 0xdf, 0x1b, 0xbe, 0x50, 0xfd, 0x9e, 0xc8, 0x81, 0x6d, 0xf6, 0x68, 0x78, 0xae, 0x61, - 0x7a, 0xde, 0xd0, 0x79, 0x3c, 0xf6, 0x6c, 0x6a, 0xd6, 0xa5, 0x3b, 0x5f, 0xb7, 0x88, 0x48, 0xdd, - 0x15, 0x82, 0x7e, 0x54, 0xfc, 0xe6, 0x93, 0xc9, 0x16, 0x3c, 0x54, 0x28, 0x1f, 0x8f, 0xe6, 0x6b, - 0xbf, 0xb6, 0xc0, 0x50, 0xa1, 0x1c, 0xdd, 0x8d, 0xcd, 0x64, 0xd3, 0x9c, 0x6c, 0x41, 0x35, 0xec, - 0xa6, 0x3a, 0xdd, 0xb1, 0x65, 0x07, 0x83, 0xac, 0x13, 0xcf, 0x78, 0x29, 0x3a, 0x08, 0xe5, 0x56, - 0x06, 0x18, 0x71, 0x23, 0xec, 0xc1, 0x48, 0x8f, 0x88, 0x8c, 0xa1, 0xd3, 0x3f, 0x73, 0xfa, 0x67, - 0x86, 0xe7, 0xf4, 0x6c, 0x77, 0xec, 0x11, 0xe7, 0x50, 0xba, 0x73, 0x69, 0x9f, 0xa6, 0x34, 0xfb, - 0x7e, 0x4a, 0xb3, 0xdf, 0x60, 0x29, 0x8f, 0xba, 0xc6, 0x7a, 0xe8, 0xb4, 0x03, 0x12, 0x61, 0xa3, - 0x67, 0x7e, 0x68, 0x74, 0xcc, 0x6e, 0xd7, 0xf0, 0xf3, 0x22, 0xe2, 0x4a, 0x66, 0x4a, 0x59, 0xef, - 0x99, 0x1f, 0xd6, 0xcd, 0x6e, 0xd7, 0x27, 0x60, 0x38, 0x3c, 0x1d, 0x3a, 0xa3, 0x81, 0x61, 0xf7, - 0xcd, 0xc7, 0x5d, 0xdb, 0x22, 0x6e, 0xbe, 0xa0, 0xae, 0x10, 0xa2, 0x48, 0x69, 0xe8, 0x00, 0xf8, - 0x9e, 0x6d, 0x39, 0xa6, 0x61, 0xf7, 0x3b, 0xc3, 0x17, 0x64, 0x52, 0x65, 0x9e, 0x4c, 0xfa, 0x72, - 0x74, 0xd2, 0xc7, 0x98, 0x47, 0x0c, 0x58, 0xd4, 0xf5, 0x5e, 0x9c, 0x50, 0xb9, 0x07, 0x2b, 0xd1, - 0x05, 0x46, 0x3c, 0x70, 0x4f, 0xed, 0x17, 0xcc, 0xd2, 0xf0, 0x23, 0xda, 0x82, 0xa5, 0x67, 0x66, - 0x77, 0xec, 0xdb, 0x18, 0x7d, 0xb9, 0x97, 0x7d, 0x2f, 0x53, 0x39, 0x80, 0xf2, 0x34, 0x4c, 0x9c, - 0x57, 0xce, 0xb4, 0x0d, 0x3f, 0x8f, 0x9c, 0xea, 0xbf, 0x70, 0xb0, 0x9d, 0xea, 0x74, 0xd0, 0xd7, - 0x84, 0x66, 0x4f, 0xfd, 0xea, 0x66, 0xb0, 0x48, 0x4d, 0x67, 0xe4, 0x51, 0xae, 0xd0, 0x17, 0x7c, - 0x3e, 0xcd, 0x17, 0x64, 0xa7, 0x77, 0x9c, 0x74, 0x10, 0x9f, 0x9e, 0x74, 0x10, 0xdc, 0xf4, 0xfe, - 0x49, 0xaf, 0x71, 0x33, 0xe9, 0x35, 0x48, 0x2e, 0x70, 0x74, 0x21, 0xee, 0x37, 0x3e, 0xca, 0x64, - 0x02, 0xce, 0xc0, 0x75, 0x90, 0xc4, 0xee, 0x28, 0x13, 0x77, 0x1e, 0x98, 0xf3, 0x22, 0xf3, 0x94, - 0x24, 0x2c, 0x1f, 0x65, 0xa9, 0xaf, 0xc4, 0x0d, 0xd7, 0x22, 0xee, 0x92, 0x78, 0xa7, 0x23, 0x2e, - 0x74, 0x98, 0x98, 0xe1, 0x7e, 0x0a, 0xd4, 0x0a, 0x73, 0xa1, 0x76, 0x94, 0x9b, 0x00, 0xdb, 0x47, - 0x99, 0x4c, 0x8d, 0x87, 0x35, 0x23, 0x36, 0xb7, 0x90, 0xe2, 0xcf, 0xa1, 0xb6, 0x0c, 0x4b, 0x06, - 0x69, 0x2a, 0x41, 0xd1, 0xf0, 0x35, 0xa9, 0x6d, 0xc2, 0x86, 0x91, 0xd4, 0xa3, 0xaa, 0xc3, 0x6e, - 0x10, 0x4e, 0x15, 0x16, 0xe5, 0x63, 0xa1, 0xef, 0x6e, 0x3c, 0x9e, 0xee, 0x46, 0x35, 0x8e, 0x75, - 0x88, 0x06, 0xd4, 0x2f, 0x67, 0x60, 0x37, 0x08, 0xa8, 0xa9, 0x62, 0xe7, 0x47, 0xa6, 0xf7, 0x93, - 0x11, 0x75, 0xf6, 0xd0, 0xd1, 0x90, 0xfa, 0x7e, 0x22, 0xa4, 0x5e, 0x9b, 0xda, 0x73, 0x46, 0x4c, - 0xfd, 0xdd, 0x65, 0xd8, 0x4a, 0x1b, 0xe8, 0xab, 0x13, 0x54, 0xfd, 0xf4, 0x96, 0x26, 0xad, 0xfe, - 0x2b, 0xba, 0x0d, 0x9b, 0x96, 0x3d, 0xf2, 0x9c, 0x3e, 0xf1, 0x6c, 0x46, 0xc7, 0x1d, 0x63, 0xa3, - 0x26, 0x29, 0x77, 0x51, 0x45, 0x91, 0xa6, 0x3a, 0x6d, 0x89, 0xa7, 0xb7, 0x4b, 0x0b, 0xa6, 0xb7, - 0x91, 0xa0, 0x9e, 0x8f, 0x07, 0xf5, 0xd7, 0x17, 0x7e, 0x1b, 0xc9, 0xf0, 0xbb, 0x37, 0x73, 0x3b, - 0xa7, 0xc4, 0xdf, 0x2f, 0xcd, 0x8e, 0xbf, 0x9f, 0x5c, 0x48, 0xe6, 0x82, 0x01, 0xf8, 0x4b, 0xd3, - 0x02, 0x70, 0x69, 0x91, 0xb1, 0x5e, 0x39, 0x02, 0xaf, 0x9c, 0x37, 0x02, 0xa7, 0x45, 0xb4, 0xd5, - 0xff, 0xe7, 0x11, 0xed, 0xd7, 0x72, 0xb0, 0x93, 0x6e, 0xf3, 0x68, 0x37, 0x34, 0xba, 0x0c, 0x8b, - 0x0e, 0x3e, 0x01, 0x3b, 0xed, 0xf7, 0xa2, 0x86, 0x94, 0x9d, 0x61, 0x48, 0x47, 0x99, 0x88, 0x29, - 0xe1, 0x9e, 0x5f, 0x9b, 0x6e, 0xb3, 0x45, 0x16, 0x37, 0x52, 0xac, 0x16, 0xf7, 0x8a, 0x44, 0x58, - 0x6e, 0x81, 0x08, 0x3b, 0x25, 0xc2, 0x71, 0x0b, 0x47, 0xb8, 0xdc, 0xbc, 0x08, 0xb7, 0x34, 0x2b, - 0xc2, 0xe5, 0x5f, 0x4b, 0x84, 0x5b, 0x4e, 0x8d, 0x70, 0x00, 0x05, 0x3f, 0x6b, 0xa8, 0xad, 0x00, - 0x18, 0xc1, 0xe2, 0xd6, 0x76, 0x60, 0xcb, 0x48, 0x59, 0xda, 0xd7, 0x1d, 0x13, 0x3f, 0x03, 0x97, - 0x0e, 0x6d, 0xef, 0x65, 0x8f, 0x82, 0xd5, 0x16, 0x54, 0xd2, 0xba, 0x8f, 0x06, 0x6e, 0x7f, 0x64, - 0xbf, 0xd4, 0xf9, 0xf4, 0xb3, 0xbe, 0xc4, 0x97, 0x0b, 0xa5, 0x55, 0x15, 0x2e, 0xa7, 0xf6, 0x67, - 0x2a, 0xbd, 0x54, 0x88, 0xaf, 0xc1, 0x26, 0xc6, 0x65, 0xb2, 0x1a, 0xf8, 0x36, 0xe4, 0x06, 0xe6, - 0x99, 0x3d, 0x91, 0x25, 0xb6, 0xcc, 0x33, 0xb6, 0x6b, 0x2a, 0x61, 0x20, 0x67, 0xf9, 0x43, 0xd8, - 0x8a, 0xcb, 0x60, 0x0a, 0xbd, 0x03, 0x4b, 0x8e, 0x67, 0xf7, 0x68, 0x19, 0xb1, 0x94, 0xb4, 0xbb, - 0x40, 0x11, 0xc2, 0x43, 0x04, 0x7d, 0x1b, 0x54, 0x98, 0xa0, 0xb4, 0x2d, 0xf3, 0x75, 0xe2, 0xe6, - 0xe8, 0x84, 0x2e, 0x63, 0x9b, 0xa7, 0xab, 0xe8, 0x97, 0x30, 0x0b, 0x1e, 0x5d, 0xc3, 0x51, 0x34, - 0x48, 0x66, 0x63, 0x41, 0xb2, 0xfa, 0x01, 0x5c, 0x4e, 0x1d, 0x3d, 0xdc, 0xf1, 0xe8, 0x6c, 0xe6, - 0xec, 0x38, 0x61, 0xad, 0x7e, 0x7b, 0x20, 0x32, 0x75, 0xcb, 0xbf, 0xda, 0x33, 0xd2, 0xe0, 0x4a, - 0xfa, 0xf0, 0x21, 0x62, 0xa2, 0x53, 0x9a, 0x87, 0x18, 0x3a, 0xa7, 0xf7, 0x61, 0xbb, 0x61, 0x77, - 0xed, 0xc9, 0x0a, 0xf2, 0x7c, 0x00, 0x1f, 0x90, 0x73, 0x49, 0xc3, 0x19, 0x0d, 0x4c, 0xaf, 0xf3, - 0x44, 0x1d, 0x77, 0xed, 0x86, 0x33, 0xb4, 0x3b, 0x1e, 0x9e, 0xdf, 0xd0, 0x75, 0x7b, 0xc4, 0xb2, - 0x59, 0xbf, 0x02, 0x26, 0xc8, 0x38, 0x2f, 0xe1, 0x81, 0x1b, 0x38, 0x7d, 0x16, 0x14, 0xf0, 0x63, - 0x55, 0x86, 0x4b, 0x09, 0x39, 0x52, 0xdf, 0x72, 0x9e, 0x39, 0xd6, 0xd8, 0xec, 0xa2, 0x6b, 0x50, - 0x22, 0xb2, 0x06, 0x43, 0xfb, 0xd4, 0xf9, 0xd0, 0xd7, 0x02, 0x93, 0x5a, 0x84, 0x92, 0x22, 0xef, - 0xc9, 0x84, 0x5e, 0xf8, 0x20, 0x6a, 0xdb, 0x2f, 0x21, 0x0b, 0x5d, 0x81, 0xe2, 0xd0, 0xec, 0x5b, - 0x6e, 0xcf, 0xf9, 0x56, 0xba, 0xb1, 0x05, 0x35, 0x24, 0x54, 0x7f, 0x3a, 0x0b, 0xeb, 0x89, 0xa1, - 0x90, 0x0a, 0x5b, 0x16, 0x7b, 0x37, 0x86, 0xe3, 0xae, 0x6d, 0x58, 0x64, 0x51, 0x98, 0xed, 0xc5, - 0xea, 0x48, 0x93, 0x4b, 0x77, 0x74, 0x41, 0x45, 0xd6, 0xe4, 0x82, 0x7e, 0x13, 0x94, 0xe3, 0x32, - 0x9d, 0x60, 0x81, 0x58, 0x1a, 0x5e, 0x9d, 0x26, 0x37, 0x5c, 0xca, 0xa3, 0x0b, 0xea, 0x8e, 0x95, - 0xbe, 0xc8, 0x13, 0x3a, 0x77, 0xc8, 0x82, 0xa5, 0xd5, 0xbe, 0x26, 0x97, 0x35, 0xa9, 0x33, 0xa5, - 0xd6, 0xf2, 0x90, 0xc3, 0xa2, 0xaa, 0x7f, 0x90, 0x8b, 0xd4, 0x06, 0xa3, 0xbd, 0x7d, 0xa0, 0x09, - 0xb0, 0x1a, 0x1b, 0x9c, 0x54, 0xc8, 0x13, 0x16, 0x19, 0x9f, 0xd1, 0xa9, 0xab, 0xae, 0x44, 0x47, - 0x44, 0xef, 0xd2, 0xb1, 0xd8, 0x1a, 0x97, 0xa7, 0xf5, 0x24, 0x25, 0x61, 0xc2, 0x89, 0xae, 0x45, - 0x4d, 0x30, 0x1b, 0xd4, 0x8b, 0x43, 0x33, 0xdc, 0x87, 0x8d, 0x27, 0x8e, 0x65, 0x1b, 0x83, 0x27, - 0x6e, 0xdf, 0x8e, 0x7e, 0xea, 0x28, 0x10, 0xc6, 0x75, 0xdc, 0xd8, 0xc2, 0x6d, 0xac, 0x82, 0xfd, - 0xce, 0x64, 0x51, 0x39, 0x1f, 0x88, 0x4d, 0x16, 0x96, 0x77, 0x58, 0x4c, 0x27, 0xe9, 0x01, 0xd5, - 0x8a, 0xe4, 0xec, 0x57, 0x23, 0x21, 0x7d, 0x29, 0x68, 0x0b, 0x8f, 0x24, 0x27, 0x00, 0x91, 0xec, - 0x7a, 0x39, 0x51, 0x72, 0x9a, 0xb5, 0xca, 0xfb, 0x89, 0xbc, 0x8f, 0x08, 0x8e, 0x08, 0x43, 0x37, - 0x42, 0xdb, 0x18, 0xd9, 0x1e, 0x3d, 0x2c, 0x50, 0x26, 0x66, 0x1f, 0x23, 0xdb, 0x43, 0x9f, 0x63, - 0x4c, 0x1d, 0xb7, 0x7f, 0xea, 0x9c, 0x91, 0xe4, 0xa9, 0x74, 0xa7, 0x12, 0x28, 0xa0, 0xba, 0x6e, - 0xaf, 0x4e, 0x9a, 0x58, 0xd1, 0x27, 0x14, 0x40, 0xc9, 0x95, 0xcf, 0xc0, 0xfa, 0x2b, 0x24, 0xa0, - 0xd5, 0x3f, 0x8a, 0x96, 0x84, 0xd3, 0xb0, 0x74, 0x1b, 0xb6, 0xb0, 0xd3, 0x4a, 0x18, 0x8b, 0xef, - 0xbc, 0x36, 0x46, 0xce, 0x20, 0x86, 0xa4, 0x79, 0x15, 0xe2, 0x24, 0xec, 0x16, 0xae, 0x10, 0x47, - 0x3b, 0xce, 0x38, 0xcd, 0xfe, 0x53, 0x8e, 0x54, 0x88, 0x93, 0xc3, 0x9c, 0x7f, 0x1a, 0x1f, 0x67, - 0x06, 0x90, 0x9d, 0x6d, 0x00, 0x0c, 0xfc, 0xb1, 0xf8, 0xc3, 0x25, 0xe2, 0xcf, 0x5e, 0x1a, 0xf0, - 0x73, 0xc4, 0xf3, 0x4d, 0x80, 0x3e, 0xe5, 0x4b, 0xca, 0x72, 0xea, 0x97, 0x14, 0xff, 0xec, 0xbd, - 0x34, 0xe5, 0xec, 0x9d, 0x4f, 0x9c, 0xbd, 0x9b, 0x31, 0xa0, 0x17, 0x08, 0xd0, 0x3f, 0x3e, 0x6b, - 0x67, 0x92, 0xf8, 0x8e, 0x61, 0xfb, 0x5a, 0x1c, 0xdb, 0xc5, 0x98, 0xdf, 0xc7, 0xb8, 0xfe, 0xfa, - 0x38, 0xae, 0x61, 0x1e, 0xae, 0xa3, 0x98, 0x9e, 0x2c, 0x6c, 0x96, 0x16, 0x2c, 0x6c, 0xae, 0xbc, - 0xc4, 0x31, 0xf0, 0x15, 0x0d, 0xe8, 0xb7, 0xb9, 0x89, 0xd8, 0xc8, 0x0e, 0x5e, 0xef, 0xc6, 0x73, - 0x92, 0xa9, 0x67, 0x9d, 0x10, 0x28, 0xe7, 0xc3, 0x9c, 0x7f, 0x8c, 0xe1, 0xd8, 0xa9, 0x2e, 0xf5, - 0x18, 0x93, 0x63, 0x65, 0xbe, 0xd8, 0x31, 0x46, 0x8e, 0x61, 0x61, 0x89, 0x60, 0x61, 0x7f, 0xb6, - 0xb1, 0xcd, 0x44, 0x43, 0xda, 0xb1, 0x28, 0x3f, 0xff, 0x58, 0x94, 0x4d, 0x3b, 0x16, 0xbd, 0xe2, - 0x7e, 0x9c, 0xe7, 0xfc, 0xf3, 0xdd, 0x99, 0x20, 0x9d, 0x4e, 0xf3, 0x7c, 0x0b, 0x27, 0x9f, 0x7b, - 0xb0, 0x91, 0xf4, 0x2b, 0x7e, 0x12, 0xba, 0x1e, 0x4b, 0x0f, 0xac, 0x51, 0xdc, 0x51, 0x64, 0xe3, - 0x8e, 0x22, 0x92, 0x60, 0xc7, 0xf5, 0x59, 0x20, 0xc1, 0x9e, 0x08, 0xe7, 0x2c, 0x19, 0x55, 0xe0, - 0x4a, 0x90, 0x8c, 0xbe, 0x0e, 0xf7, 0x5e, 0xfd, 0x72, 0x0e, 0x36, 0x22, 0xd9, 0x2f, 0xb3, 0xd8, - 0x0a, 0x14, 0x9e, 0xb8, 0x23, 0x2f, 0x9a, 0x9e, 0xfa, 0xef, 0xd3, 0x6a, 0x7b, 0xcb, 0x8b, 0xd5, - 0xf6, 0xb2, 0x0b, 0xd6, 0xf6, 0x26, 0x2a, 0x78, 0xdc, 0x22, 0x15, 0xbc, 0x5c, 0x4a, 0x05, 0xef, - 0x6c, 0x5a, 0xed, 0x8d, 0x1a, 0xca, 0xdd, 0xb4, 0x43, 0x00, 0x5d, 0x86, 0x73, 0x16, 0xde, 0xce, - 0xa6, 0x15, 0xde, 0xf2, 0x73, 0x07, 0x3a, 0x57, 0xd5, 0xed, 0x7f, 0x5d, 0xb5, 0xea, 0x67, 0x8a, - 0x70, 0x39, 0x48, 0xad, 0x5a, 0xe6, 0xd0, 0x73, 0x3a, 0xce, 0xc0, 0xec, 0x7b, 0x8b, 0x17, 0xcd, - 0xdf, 0xf5, 0x8f, 0xf2, 0x5b, 0x89, 0xc0, 0x32, 0xb1, 0x54, 0xec, 0x1c, 0x8f, 0xae, 0x42, 0x09, - 0xcb, 0x24, 0xdf, 0xdc, 0x3c, 0x97, 0xe9, 0x54, 0x1c, 0x39, 0x03, 0x9c, 0x5c, 0xeb, 0x2e, 0xda, - 0x05, 0x2c, 0xdf, 0x8f, 0xce, 0xeb, 0x41, 0x33, 0x8b, 0xcb, 0xb1, 0x03, 0x18, 0x97, 0x38, 0x80, - 0x7d, 0x02, 0xb6, 0x06, 0xe1, 0x2c, 0x0c, 0xc7, 0xb2, 0xfb, 0x9e, 0xe3, 0xbd, 0x60, 0xe8, 0xda, - 0x8c, 0xb4, 0x49, 0xac, 0x09, 0xdd, 0x02, 0x3e, 0xda, 0x25, 0x52, 0x73, 0x5e, 0x8f, 0xd0, 0xd3, - 0xa4, 0x07, 0xae, 0xbd, 0x30, 0x21, 0xfd, 0xd8, 0x0f, 0xf6, 0xcf, 0x60, 0x27, 0xda, 0x25, 0x82, - 0x61, 0x5a, 0x93, 0xfe, 0xdc, 0x64, 0x86, 0x3b, 0xb9, 0x0d, 0xfb, 0x11, 0x52, 0x12, 0xcf, 0xdb, - 0x83, 0xb4, 0x36, 0x9c, 0x94, 0x58, 0x5e, 0xef, 0xd4, 0x4f, 0x4a, 0xf0, 0x33, 0x7a, 0x1b, 0x56, - 0x07, 0x5d, 0xf3, 0x85, 0x31, 0x74, 0xfa, 0x67, 0x9e, 0xdb, 0xa7, 0x65, 0x37, 0x9a, 0xf2, 0xaf, - 0xe0, 0x06, 0x95, 0xd1, 0xb1, 0x71, 0x12, 0x46, 0xcb, 0x31, 0xbb, 0x84, 0x91, 0x7d, 0xce, 0xc4, - 0xc4, 0x06, 0xa3, 0xa5, 0xe7, 0x52, 0x90, 0x9e, 0x4b, 0xdd, 0x0f, 0x4b, 0xf1, 0x3c, 0x99, 0xf6, - 0x27, 0x16, 0x9a, 0x76, 0x7a, 0x45, 0x3e, 0xa5, 0x72, 0xbd, 0xf1, 0x7f, 0xe9, 0xdb, 0xf1, 0xda, - 0x82, 0x29, 0x16, 0x3a, 0x7f, 0x8a, 0x85, 0xf6, 0x61, 0xf3, 0xb9, 0xe9, 0x78, 0xc6, 0xb8, 0xef, - 0x39, 0x5d, 0xc3, 0xec, 0x8f, 0x9e, 0xdb, 0x43, 0xdb, 0x2a, 0x6f, 0x92, 0x21, 0x37, 0x70, 0x53, - 0x1b, 0xb7, 0x08, 0xac, 0xa1, 0x72, 0x04, 0x95, 0xe9, 0xd8, 0x3b, 0x97, 0xc7, 0x7a, 0x85, 0x1a, - 0x7f, 0xf5, 0x97, 0x32, 0x80, 0xe2, 0x08, 0x21, 0x27, 0x89, 0x37, 0x61, 0x2d, 0x6e, 0xec, 0x4c, - 0xda, 0x6a, 0xcc, 0xcc, 0xa7, 0xfa, 0x84, 0xec, 0x74, 0x9f, 0x30, 0xd3, 0xc7, 0x44, 0xfd, 0x97, - 0xe3, 0x07, 0x2e, 0xdf, 0x7f, 0x49, 0x56, 0xf5, 0x3b, 0x39, 0xd8, 0x25, 0x81, 0xf1, 0xd4, 0x1e, - 0xa6, 0x7b, 0xd5, 0x69, 0x1a, 0x65, 0x16, 0xd4, 0x28, 0x9b, 0xd0, 0xe8, 0x1a, 0x94, 0x3c, 0x36, - 0x20, 0xf6, 0xa8, 0x54, 0x61, 0xf0, 0x49, 0xba, 0x3b, 0x69, 0xd0, 0xb9, 0x14, 0x83, 0x3e, 0x0e, - 0x8d, 0x34, 0x19, 0x5f, 0x67, 0x4e, 0x67, 0xba, 0x99, 0x26, 0x4d, 0x2c, 0x7f, 0x4e, 0x13, 0x7b, - 0x25, 0xd0, 0x7c, 0xa5, 0x00, 0x25, 0x4d, 0x6a, 0x91, 0x4d, 0xc1, 0x68, 0xb9, 0x08, 0xcb, 0xfe, - 0x96, 0xd1, 0xfe, 0xf9, 0x0e, 0xd9, 0x2f, 0x74, 0x09, 0x0a, 0x41, 0x7c, 0xa3, 0x52, 0x96, 0x59, - 0x1e, 0x88, 0x6e, 0x02, 0x3f, 0x91, 0x8f, 0xf1, 0xf4, 0x92, 0x5f, 0x3c, 0x9d, 0x44, 0x3b, 0x90, - 0x1f, 0xda, 0x67, 0xd8, 0x2c, 0x37, 0xa8, 0x70, 0xfa, 0x36, 0x1b, 0x49, 0x17, 0x61, 0x99, 0x34, - 0x06, 0x28, 0xca, 0xe3, 0xd7, 0x19, 0x90, 0x5d, 0x9a, 0x0e, 0x90, 0xd3, 0xa9, 0x81, 0x06, 0x91, - 0xcd, 0xbc, 0x1d, 0xf5, 0x13, 0xfe, 0xa2, 0xbc, 0x44, 0x60, 0xd9, 0x83, 0xc2, 0xe9, 0xd0, 0xed, - 0x19, 0xe3, 0xa1, 0xc3, 0xf6, 0x73, 0x3d, 0x2a, 0xb9, 0x3d, 0x74, 0xd4, 0x65, 0xcc, 0xd0, 0x1e, - 0x3a, 0xe8, 0x2d, 0xc8, 0x7b, 0x2e, 0xe1, 0x5c, 0x4e, 0xe7, 0x5c, 0xf2, 0x5c, 0xcc, 0xf7, 0x31, - 0x80, 0x0e, 0x09, 0x03, 0x96, 0x61, 0xd2, 0x23, 0x2c, 0x47, 0xa2, 0x52, 0x91, 0x51, 0x05, 0x0f, - 0xb3, 0x8c, 0x3c, 0x73, 0xc8, 0x58, 0x20, 0x64, 0x61, 0x54, 0xc1, 0x43, 0xbb, 0x50, 0xb0, 0xfb, - 0x16, 0x65, 0x28, 0x05, 0x0c, 0xcb, 0x84, 0x26, 0x78, 0xe8, 0xb3, 0xc0, 0x33, 0x0f, 0x6b, 0x9c, - 0xda, 0xa6, 0x37, 0x1e, 0xda, 0xf4, 0x62, 0xd3, 0x5a, 0xe4, 0x40, 0xa1, 0x49, 0xad, 0x03, 0xda, - 0xa6, 0xae, 0x33, 0x66, 0xf6, 0x3e, 0x42, 0x9f, 0x87, 0x35, 0xea, 0xea, 0x49, 0xd9, 0x12, 0xef, - 0x74, 0xca, 0x8d, 0x25, 0xe2, 0xd9, 0x7d, 0x06, 0x75, 0xb5, 0x13, 0x7d, 0x45, 0x9f, 0x82, 0x12, - 0x91, 0xc0, 0xae, 0x3b, 0x17, 0x26, 0x2f, 0x47, 0xe3, 0xee, 0xf4, 0x82, 0xb4, 0x0a, 0x9d, 0xe0, - 0x19, 0x55, 0x61, 0x35, 0x5c, 0x1f, 0xa3, 0x3f, 0x2a, 0xef, 0xe0, 0xe9, 0xa9, 0xa5, 0x60, 0x79, - 0x64, 0xc2, 0x13, 0x2e, 0x10, 0xe6, 0xb9, 0x48, 0x79, 0x82, 0xf5, 0x91, 0x47, 0xd8, 0x73, 0xf9, - 0x2b, 0x84, 0x39, 0xca, 0x84, 0xa3, 0xc8, 0x16, 0x48, 0x1e, 0xa1, 0x03, 0x72, 0x7c, 0xea, 0xb8, - 0xfd, 0xbe, 0xdd, 0xf1, 0x8c, 0xa1, 0x6d, 0x8e, 0x82, 0x93, 0x7c, 0x38, 0xcb, 0x46, 0xc0, 0xa1, - 0x12, 0x06, 0x95, 0xb7, 0x12, 0x14, 0x6c, 0x94, 0xf6, 0x70, 0xe8, 0x0e, 0x49, 0xde, 0x50, 0x54, - 0xe9, 0x0b, 0xfa, 0x34, 0xf0, 0x91, 0xe9, 0x1b, 0xe4, 0x82, 0xf8, 0x26, 0xc1, 0x05, 0x9a, 0xbc, - 0x20, 0xae, 0xae, 0x85, 0xf3, 0xaf, 0xbb, 0x16, 0xf1, 0x71, 0xe6, 0xd8, 0x72, 0x5c, 0xd2, 0xaf, - 0x43, 0xb2, 0xcd, 0xa2, 0x0a, 0x84, 0x84, 0xdb, 0x3b, 0x38, 0x8f, 0x9b, 0x08, 0x91, 0xdb, 0x34, - 0x8f, 0x4b, 0x16, 0x1a, 0x5e, 0x5b, 0x54, 0xab, 0xfe, 0x37, 0x2d, 0x92, 0xfb, 0xfe, 0x91, 0x38, - 0x9a, 0xa8, 0x37, 0x0e, 0x53, 0x66, 0x9f, 0x24, 0x59, 0x51, 0x4f, 0x94, 0x8d, 0x79, 0xa2, 0xb9, - 0x7e, 0xfc, 0x53, 0x50, 0x0e, 0x45, 0xf7, 0x1d, 0xcf, 0x89, 0x60, 0x22, 0x47, 0x76, 0x73, 0x3b, - 0x18, 0xc7, 0x6f, 0x26, 0x3b, 0x1b, 0xed, 0xd8, 0x71, 0x7b, 0x03, 0x7c, 0x0e, 0xf5, 0x3b, 0x2e, - 0xc5, 0x3b, 0xd6, 0xfd, 0x66, 0xd2, 0xb1, 0x0e, 0xeb, 0x41, 0x47, 0x86, 0x5b, 0x5a, 0x4f, 0xa8, - 0x4c, 0x9c, 0x03, 0x71, 0x7c, 0x60, 0x7b, 0xe7, 0xc5, 0xde, 0x43, 0x3c, 0x2c, 0x47, 0xf1, 0xd0, - 0x80, 0xad, 0x84, 0x68, 0x8a, 0x89, 0xc2, 0x54, 0x4c, 0xa0, 0xb8, 0x5c, 0xbc, 0xef, 0xd5, 0xef, - 0xca, 0x40, 0x9e, 0x7a, 0x13, 0x9c, 0xf3, 0xe2, 0x33, 0x27, 0x5b, 0x71, 0xf2, 0x8c, 0x69, 0xf8, - 0xf8, 0xeb, 0x5f, 0x8c, 0xc1, 0xcf, 0x68, 0x0d, 0xb2, 0xce, 0x80, 0xad, 0x6e, 0xd6, 0x19, 0x60, - 0x1e, 0x72, 0xc0, 0xc5, 0x2b, 0xb8, 0xaa, 0x92, 0xe7, 0x97, 0xba, 0xd5, 0xb2, 0xf7, 0xcf, 0x2b, - 0xb0, 0x1a, 0xfb, 0x89, 0x03, 0xda, 0x21, 0x89, 0x8b, 0xa1, 0xe9, 0x82, 0xde, 0xd6, 0x8c, 0xb6, - 0x7c, 0x5f, 0x56, 0x1e, 0xca, 0xfc, 0x05, 0xb4, 0x4d, 0x8e, 0xee, 0x3e, 0x5d, 0x57, 0x4f, 0x24, - 0xf9, 0x90, 0xc7, 0xc8, 0x88, 0xb2, 0xab, 0x92, 0x7c, 0x88, 0xe9, 0xbf, 0x9e, 0x41, 0x1f, 0x83, - 0x2b, 0x91, 0x86, 0xba, 0xd0, 0x6c, 0x1a, 0x92, 0x66, 0x1c, 0x28, 0xea, 0x43, 0x41, 0x6d, 0x88, - 0x0d, 0xfe, 0x37, 0x32, 0x68, 0x27, 0x26, 0xf2, 0x83, 0xb6, 0xd8, 0x16, 0x1b, 0xfc, 0x6f, 0x66, - 0xd0, 0x75, 0xb8, 0x1c, 0xa1, 0x6b, 0xa2, 0xa6, 0x49, 0x8a, 0x6c, 0xb4, 0x54, 0xe5, 0x50, 0x15, - 0x35, 0x8d, 0xff, 0xad, 0x0c, 0x42, 0x44, 0x6b, 0x9f, 0x43, 0xb9, 0xcf, 0xff, 0x7e, 0x06, 0x95, - 0x49, 0xf1, 0xd6, 0xa7, 0x09, 0xf5, 0xba, 0xd8, 0xd2, 0xc5, 0x06, 0xff, 0x87, 0x49, 0x55, 0x8e, - 0x95, 0x07, 0x62, 0xc3, 0x68, 0x89, 0xea, 0xb1, 0x20, 0x8b, 0xb2, 0xde, 0x3c, 0xe1, 0x7f, 0x39, - 0x9b, 0xca, 0xa2, 0x8b, 0xc7, 0x2d, 0x45, 0x15, 0x54, 0xa9, 0x79, 0xc2, 0xff, 0x4a, 0x16, 0x5d, - 0x22, 0x57, 0x9d, 0x82, 0x85, 0xd1, 0x44, 0xac, 0xd1, 0xa3, 0x13, 0xfe, 0x57, 0xb3, 0xe8, 0x32, - 0xb9, 0x40, 0xe1, 0x37, 0xd5, 0x84, 0x86, 0xa1, 0x8a, 0x1f, 0xb4, 0x45, 0x4d, 0xe7, 0xbf, 0x87, - 0x43, 0x57, 0xe0, 0x62, 0x6c, 0x41, 0x85, 0xb6, 0x7e, 0xa4, 0xa8, 0xd2, 0x17, 0xc4, 0x06, 0xff, - 0xbd, 0x5c, 0x62, 0xae, 0x2d, 0xe1, 0xe4, 0x58, 0x94, 0x75, 0xd2, 0x5d, 0x52, 0xc5, 0x06, 0xff, - 0x7d, 0x5c, 0x62, 0xdc, 0x03, 0x45, 0xad, 0x49, 0x8d, 0x86, 0x28, 0xf3, 0xdf, 0xcf, 0x25, 0xa6, - 0x2c, 0x2b, 0xfa, 0x01, 0xb9, 0x04, 0xfe, 0x03, 0x1c, 0xaa, 0xc2, 0x6e, 0x74, 0x3e, 0xa2, 0x7e, - 0xa4, 0x34, 0x30, 0x83, 0x21, 0x34, 0x9b, 0xca, 0x43, 0xb1, 0xc1, 0xff, 0x20, 0x87, 0xae, 0x92, - 0x0f, 0x7d, 0x91, 0xde, 0x6c, 0xd1, 0x84, 0x5a, 0x53, 0xe4, 0x7f, 0x88, 0x43, 0x37, 0xe0, 0x6a, - 0x54, 0x35, 0x3c, 0x59, 0x03, 0x2b, 0x1f, 0x6a, 0xf7, 0xc3, 0x1c, 0xba, 0x06, 0x95, 0xe8, 0xfe, - 0xd3, 0x69, 0x1b, 0xba, 0x74, 0x2c, 0x2a, 0x6d, 0x9d, 0xff, 0x91, 0xa4, 0x8e, 0x75, 0x45, 0x3e, - 0x68, 0x4a, 0x75, 0x9d, 0xff, 0x51, 0x0e, 0x6d, 0x11, 0x47, 0xe4, 0xb7, 0x1c, 0x2a, 0xb2, 0xc8, - 0xff, 0x18, 0x87, 0x6e, 0xc2, 0x8d, 0x14, 0x81, 0xa2, 0xac, 0x4b, 0xfa, 0x89, 0xa1, 0x2b, 0x8a, - 0xd1, 0x14, 0xd4, 0x43, 0x91, 0xff, 0x71, 0x0e, 0xbd, 0x01, 0xd7, 0x52, 0x38, 0xdb, 0xaa, 0x44, - 0xd9, 0x14, 0xf9, 0x90, 0xff, 0x09, 0x0e, 0xbd, 0x05, 0x1f, 0x8b, 0x2d, 0xbf, 0xd6, 0x6e, 0xb5, - 0x14, 0x55, 0x17, 0x1b, 0xc6, 0xb1, 0xd8, 0x90, 0x04, 0x43, 0x3f, 0x69, 0x89, 0xfc, 0x4f, 0x72, - 0xe8, 0x36, 0xec, 0x4d, 0x4a, 0x13, 0x1b, 0x86, 0x2a, 0xc8, 0x87, 0x22, 0x59, 0x1d, 0x4d, 0xd0, - 0x25, 0xed, 0x40, 0x22, 0xcb, 0xf3, 0x53, 0x1c, 0xda, 0x85, 0x72, 0x62, 0xd3, 0xc5, 0x47, 0xba, - 0x28, 0x63, 0xac, 0xf2, 0x3f, 0x9b, 0xdc, 0x81, 0xa0, 0x29, 0x5c, 0xbc, 0x9f, 0x4b, 0xf2, 0x48, - 0xb2, 0x2e, 0xaa, 0x0f, 0x84, 0x26, 0x51, 0xbf, 0xa6, 0x4a, 0xe2, 0x01, 0xff, 0x0b, 0x1c, 0x7a, - 0x1b, 0xaa, 0x51, 0xbb, 0x0b, 0x31, 0x89, 0xa1, 0xf4, 0x40, 0x90, 0x9a, 0x44, 0x9f, 0xbf, 0xe4, - 0xd0, 0xbb, 0xf0, 0x4e, 0xd2, 0xe0, 0x74, 0x55, 0x90, 0x35, 0xa1, 0xae, 0xe3, 0x71, 0x1b, 0x8a, - 0x48, 0x37, 0x59, 0x7c, 0x24, 0x69, 0xba, 0xc6, 0xff, 0x55, 0x72, 0x06, 0x4d, 0x45, 0x69, 0x19, - 0x0d, 0x51, 0x17, 0xeb, 0xd8, 0x6c, 0xbe, 0x92, 0x6c, 0xc6, 0x4a, 0x1d, 0x0b, 0xf2, 0x89, 0x71, - 0xa4, 0xb4, 0x34, 0xfe, 0xaf, 0x93, 0xca, 0x0b, 0x8d, 0x06, 0x36, 0x4e, 0x43, 0x92, 0xeb, 0xca, - 0x71, 0xab, 0x29, 0xea, 0x22, 0xff, 0x37, 0x49, 0xec, 0x0a, 0xc7, 0x35, 0xe9, 0xb0, 0xad, 0xb4, - 0x35, 0xfe, 0x6f, 0x93, 0x4d, 0xb5, 0xb6, 0x76, 0x62, 0x1c, 0x89, 0xaa, 0xc8, 0xff, 0x5d, 0x52, - 0x72, 0x80, 0x29, 0x51, 0x3d, 0x96, 0x64, 0x01, 0x2b, 0xf7, 0xf7, 0x49, 0x70, 0xc6, 0xc1, 0x4b, - 0x05, 0xfd, 0x03, 0x87, 0xde, 0x84, 0xeb, 0xc9, 0xf5, 0x95, 0x85, 0xa6, 0xa1, 0x89, 0xea, 0x03, - 0x51, 0x35, 0x44, 0x55, 0x55, 0x54, 0xfe, 0x5f, 0x93, 0x18, 0xc6, 0xb2, 0x24, 0x3c, 0x05, 0x6c, - 0x89, 0x62, 0x83, 0xff, 0x37, 0x2e, 0xc5, 0xbe, 0x0f, 0x05, 0x5d, 0x7c, 0x28, 0x9c, 0xf0, 0xff, - 0x9e, 0xd4, 0x04, 0xcb, 0x96, 0xea, 0x62, 0x6c, 0x73, 0xfe, 0x23, 0x39, 0x04, 0xeb, 0x1d, 0x98, - 0xc9, 0x7f, 0x26, 0x55, 0x7d, 0x20, 0xaa, 0x04, 0x2c, 0x04, 0x76, 0x3e, 0x60, 0xf9, 0xff, 0xe2, - 0x92, 0x7e, 0x4a, 0xd4, 0x34, 0xe1, 0x50, 0x8c, 0x98, 0xc5, 0x77, 0xe4, 0x12, 0x80, 0x3f, 0x6c, - 0x2a, 0x35, 0xa1, 0x49, 0xd7, 0x57, 0x7c, 0x20, 0xaa, 0x27, 0x0f, 0xc9, 0xe2, 0xfc, 0x49, 0x2e, - 0x61, 0xfe, 0x8c, 0xaf, 0x21, 0xd6, 0x9b, 0x92, 0x2c, 0xf2, 0x7f, 0x9a, 0x43, 0xfb, 0x70, 0x2b, - 0xa5, 0x3d, 0x86, 0x22, 0x43, 0x90, 0x99, 0xbc, 0x3f, 0xcb, 0x25, 0x66, 0xc0, 0xf8, 0x13, 0x5e, - 0xe5, 0x2f, 0x72, 0x7b, 0x4f, 0xd9, 0x6f, 0xa8, 0xfc, 0xda, 0x2b, 0x8b, 0x37, 0x04, 0xaa, 0x78, - 0x9e, 0xd8, 0xc5, 0x28, 0x61, 0xbc, 0x09, 0xe9, 0xed, 0x46, 0x8b, 0xcf, 0x4c, 0x92, 0xf5, 0x7a, - 0x8b, 0xcf, 0xa6, 0x90, 0x9b, 0x1a, 0xcf, 0xed, 0xc9, 0xc0, 0x27, 0x0b, 0x2b, 0x08, 0xc1, 0x1a, - 0x66, 0x95, 0x15, 0xe3, 0x48, 0x14, 0x1a, 0xa2, 0xaa, 0xd1, 0xdf, 0xd6, 0x60, 0xda, 0xa3, 0x80, - 0x94, 0x41, 0x9b, 0xd4, 0x3b, 0x61, 0x33, 0xf2, 0x89, 0xd9, 0x3d, 0x97, 0x28, 0x9b, 0xa8, 0x59, - 0xa0, 0x5d, 0xba, 0x92, 0xd4, 0x9f, 0x88, 0x72, 0x5d, 0x3d, 0x69, 0xe9, 0x46, 0x43, 0xd2, 0xc8, - 0x94, 0x2f, 0xa0, 0xcb, 0x34, 0x00, 0xc4, 0x9b, 0x89, 0x1f, 0xe6, 0x33, 0xe9, 0x7d, 0x99, 0x8f, - 0xe0, 0xb3, 0x7b, 0xcf, 0x89, 0x62, 0x61, 0x92, 0x4d, 0x26, 0x5a, 0xf7, 0xe3, 0x29, 0xb6, 0x35, - 0x1c, 0x6e, 0x2f, 0xa0, 0x0a, 0xec, 0x60, 0x72, 0x4b, 0x50, 0x75, 0xa9, 0x2e, 0xb5, 0x04, 0x59, - 0x37, 0xbe, 0x41, 0x91, 0x64, 0xb1, 0xc1, 0x67, 0xd0, 0x1a, 0x00, 0x6e, 0xc3, 0x7e, 0xe0, 0x81, - 0xc8, 0x67, 0xd1, 0x16, 0xf0, 0xf8, 0xbd, 0x21, 0x69, 0x75, 0x45, 0x96, 0xa9, 0xb9, 0x73, 0x68, - 0x15, 0x8a, 0x98, 0x4a, 0x8d, 0x22, 0xb7, 0xd7, 0x21, 0x0b, 0x1a, 0xcf, 0x92, 0x50, 0x19, 0xb6, - 0x34, 0x5d, 0xa3, 0xab, 0x7c, 0x20, 0xaa, 0x86, 0x22, 0x1f, 0x2a, 0x74, 0xfc, 0x8b, 0xb0, 0x19, - 0x6b, 0x39, 0x10, 0xa4, 0x26, 0x19, 0x1c, 0x4f, 0x3e, 0xda, 0xa0, 0xb5, 0xeb, 0x75, 0x51, 0xd3, - 0x0e, 0xda, 0x4d, 0x3e, 0xbb, 0x77, 0x0b, 0x20, 0x3c, 0xbf, 0xa0, 0x02, 0xe4, 0x64, 0x1c, 0x04, - 0xc8, 0x76, 0xdc, 0x57, 0x25, 0xad, 0x65, 0x88, 0x32, 0x5e, 0xc3, 0x06, 0x9f, 0xd9, 0x3b, 0x20, - 0x3b, 0x19, 0x3b, 0xac, 0xa0, 0x75, 0x28, 0x69, 0xf5, 0x46, 0x24, 0x47, 0x61, 0x84, 0xf0, 0x07, - 0x52, 0x3c, 0xac, 0x60, 0x42, 0xf8, 0xf3, 0xa8, 0x3b, 0x7f, 0x5c, 0x02, 0x4e, 0x93, 0x5a, 0xa8, - 0x05, 0x2b, 0xd1, 0x6b, 0x55, 0xe8, 0x4a, 0xec, 0xeb, 0x5a, 0xe2, 0xf6, 0x4d, 0x65, 0x77, 0x4a, - 0x2b, 0xfd, 0xb8, 0x52, 0xe5, 0x3e, 0xca, 0x66, 0xd0, 0x17, 0x23, 0x3f, 0xfe, 0x8c, 0x5e, 0x59, - 0x42, 0x6f, 0x4e, 0x56, 0x0e, 0x53, 0x6e, 0x60, 0x55, 0x66, 0xde, 0x79, 0x42, 0x06, 0xec, 0xa4, - 0xdf, 0x41, 0x47, 0x6f, 0x4d, 0x8a, 0x4f, 0xbb, 0x0f, 0x55, 0x99, 0x7d, 0x01, 0x09, 0xab, 0x9f, - 0xfa, 0xf3, 0xae, 0x88, 0xfa, 0xb3, 0x7e, 0xfe, 0x35, 0x5f, 0xfd, 0xf4, 0xbb, 0xee, 0x11, 0xf5, - 0x67, 0x5e, 0x86, 0x9f, 0xa7, 0xfe, 0x37, 0x02, 0x9a, 0xbc, 0x50, 0x88, 0xc2, 0x7b, 0x38, 0x53, - 0x2f, 0x2b, 0x56, 0x6e, 0xcc, 0xe4, 0x61, 0x9f, 0xcf, 0xbe, 0x19, 0x36, 0x53, 0x6e, 0x07, 0xa2, - 0x64, 0xdf, 0x54, 0xcd, 0xdf, 0x98, 0xcd, 0x14, 0x8e, 0x90, 0x72, 0x41, 0x2e, 0x32, 0xc2, 0xf4, - 0xcb, 0x7b, 0x91, 0x11, 0x66, 0xdd, 0xb1, 0xeb, 0x04, 0x37, 0x09, 0xe3, 0x93, 0x98, 0xe8, 0x9d, - 0x3a, 0x8b, 0x37, 0xe7, 0x70, 0xb1, 0x41, 0x0e, 0x61, 0x2d, 0x7e, 0x81, 0x0d, 0x85, 0x37, 0x31, - 0x52, 0x6f, 0xb6, 0x55, 0xd2, 0x6f, 0x2e, 0xc6, 0xcc, 0x29, 0x76, 0xa3, 0xeb, 0xcd, 0x85, 0x6e, - 0xd8, 0x54, 0x66, 0x7e, 0xe1, 0x8c, 0xa1, 0x7d, 0x8a, 0xf4, 0x59, 0x37, 0x5b, 0xe6, 0x48, 0x0f, - 0xf7, 0x32, 0x26, 0x7b, 0x62, 0x2f, 0xd3, 0x24, 0xbf, 0x31, 0x9b, 0x89, 0x2d, 0xf3, 0x17, 0x23, - 0xf7, 0x04, 0xa7, 0xe8, 0x3f, 0xeb, 0xd3, 0xed, 0x1c, 0xfd, 0x4f, 0x60, 0x2b, 0xed, 0x23, 0x47, - 0x04, 0x29, 0x33, 0xbe, 0x81, 0x54, 0x62, 0xf5, 0xfd, 0x64, 0x05, 0xfc, 0x11, 0xec, 0xa4, 0x97, - 0x66, 0x23, 0x8e, 0x60, 0x66, 0xed, 0xb6, 0xb2, 0x33, 0x51, 0x8c, 0x15, 0x7b, 0x03, 0xef, 0x45, - 0xed, 0xe0, 0x0b, 0x37, 0xce, 0x1c, 0xef, 0xc9, 0xf8, 0xf1, 0x7e, 0xc7, 0xed, 0xdd, 0x66, 0xb2, - 0xe8, 0x7f, 0x04, 0x74, 0xdc, 0xae, 0x4f, 0xf8, 0xc5, 0xec, 0x6a, 0xd3, 0x79, 0x66, 0xdf, 0x77, - 0xbc, 0xfd, 0x16, 0x6e, 0xfa, 0xc7, 0xec, 0x1a, 0x7b, 0xbf, 0x77, 0x8f, 0x10, 0x1e, 0xe7, 0x49, - 0x97, 0xbb, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0xe2, 0x0c, 0x40, 0x6a, 0xa2, 0x40, 0x00, 0x00, + // 4727 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xe4, 0x3c, 0x59, 0x8c, 0x1b, 0xd9, + 0x56, 0xb1, 0xcb, 0x6d, 0xbb, 0x8f, 0xbb, 0xdd, 0xd5, 0xb7, 0x97, 0x38, 0x4e, 0x3a, 0xc9, 0x38, + 0xb3, 0x64, 0x7a, 0x1e, 0x9d, 0x79, 0x19, 0x78, 0xb3, 0xf0, 0xb6, 0xb2, 0x5d, 0xdd, 0x5d, 0x2f, + 0xee, 0xb2, 0xa7, 0xaa, 0x9c, 0x4c, 0x3f, 0x3d, 0x28, 0x2a, 0x76, 0xa5, 0x53, 0x13, 0xdb, 0x65, + 0xec, 0xf2, 0xcc, 0x04, 0xc1, 0x07, 0x12, 0x1f, 0x83, 0x90, 0x10, 0xfb, 0x26, 0xb1, 0x48, 0x6c, + 0x12, 0x4f, 0x20, 0x81, 0xd8, 0xbe, 0x90, 0x1e, 0xe2, 0x03, 0x90, 0xf8, 0x06, 0x89, 0x45, 0xf0, + 0x58, 0xc5, 0x0f, 0x7c, 0xb0, 0x3c, 0xbe, 0x40, 0x77, 0xa9, 0xaa, 0x5b, 0xe5, 0xf2, 0xd2, 0x9d, + 0x3c, 0x09, 0xc1, 0x5f, 0xd7, 0xb9, 0xe7, 0x9e, 0x7b, 0xee, 0xb9, 0x67, 0xbb, 0xe7, 0x5c, 0x37, + 0x6c, 0xf6, 0x9c, 0x0f, 0xec, 0x27, 0x8e, 0x67, 0x8e, 0x9d, 0xe1, 0xc1, 0x70, 0xe4, 0x7a, 0x2e, + 0xca, 0x31, 0x50, 0xf9, 0xfa, 0x99, 0xeb, 0x9e, 0xf5, 0xec, 0x3b, 0x04, 0xfc, 0x70, 0xf2, 0xe8, + 0x4e, 0x77, 0x32, 0xb2, 0x3c, 0xc7, 0x1d, 0x50, 0xc4, 0xf2, 0xd5, 0xf8, 0xb8, 0xdd, 0x1f, 0x7a, + 0x4f, 0xd9, 0xe0, 0xb6, 0x4f, 0xb8, 0xef, 0x76, 0xed, 0xde, 0x98, 0x41, 0x91, 0x0f, 0x1d, 0xb9, + 0x6e, 0x9f, 0xc2, 0x2a, 0x4d, 0x58, 0xd5, 0x95, 0x96, 0xee, 0x59, 0xde, 0x64, 0x8c, 0xf6, 0x21, + 0xd3, 0x71, 0xbb, 0x76, 0x29, 0x75, 0x33, 0x75, 0xbb, 0x78, 0x77, 0xf7, 0x80, 0xe1, 0x1f, 0x04, + 0x18, 0x35, 0xb7, 0x6b, 0x6b, 0x04, 0x07, 0xed, 0x42, 0x76, 0x4c, 0x60, 0xa5, 0xf4, 0xcd, 0xd4, + 0xed, 0x55, 0x8d, 0x7d, 0x55, 0xfe, 0x52, 0x80, 0x9d, 0xda, 0xc8, 0xb6, 0x3c, 0x5b, 0x57, 0x5a, + 0xc6, 0x68, 0x32, 0x78, 0xa2, 0xd9, 0xdf, 0x3e, 0xb1, 0xc7, 0x1e, 0x7a, 0x0d, 0x36, 0x9d, 0xc1, + 0x43, 0x77, 0x32, 0xe8, 0x9a, 0x56, 0xb7, 0x3b, 0xb2, 0xc7, 0x63, 0x7b, 0x5c, 0x4a, 0xdd, 0x14, + 0x6e, 0xaf, 0x6a, 0x22, 0x1b, 0x90, 0x7c, 0x38, 0x7a, 0x15, 0x44, 0x77, 0xe2, 0x45, 0xb0, 0xd9, + 0x42, 0x1b, 0x3e, 0x9c, 0x21, 0xa3, 0x57, 0x20, 0x00, 0x99, 0x83, 0x49, 0xff, 0xa1, 0x3d, 0x2a, + 0x09, 0x04, 0xb3, 0xe8, 0x83, 0x55, 0x02, 0x45, 0x9f, 0x82, 0x1d, 0x9f, 0x01, 0x8a, 0x37, 0x36, + 0x47, 0xf6, 0x99, 0xfd, 0x51, 0x29, 0x83, 0x99, 0xa8, 0xa6, 0x4b, 0x29, 0x6d, 0x8b, 0x21, 0xd0, + 0x19, 0x63, 0x0d, 0x0f, 0xe3, 0x05, 0x62, 0xf3, 0x4a, 0xab, 0x84, 0xed, 0x62, 0x14, 0x1b, 0x33, + 0xed, 0x23, 0x4e, 0xc6, 0xf6, 0x68, 0x60, 0xf5, 0xed, 0xd2, 0x0a, 0x65, 0x9a, 0xc1, 0xdb, 0x0c, + 0xcc, 0xa3, 0x0e, 0xad, 0xf1, 0xf8, 0x43, 0x77, 0xd4, 0x2d, 0x65, 0x23, 0xa8, 0x2d, 0x06, 0xc6, + 0x72, 0x0b, 0xf6, 0x17, 0x90, 0xcd, 0x11, 0xdc, 0x40, 0x46, 0x01, 0x5d, 0x1e, 0x39, 0x20, 0x9c, + 0x8f, 0x22, 0x07, 0x94, 0x11, 0x64, 0x08, 0x31, 0x20, 0xe3, 0xe4, 0x6f, 0x54, 0x86, 0x7c, 0xdf, + 0xf6, 0xac, 0xae, 0xe5, 0x59, 0xa5, 0x02, 0x81, 0x07, 0xdf, 0xef, 0xa4, 0x4b, 0xa9, 0xca, 0x2f, + 0xad, 0xc0, 0x9a, 0x7f, 0xb2, 0xca, 0xe0, 0x91, 0x8b, 0x6e, 0xc2, 0xda, 0xd8, 0x19, 0x9a, 0x1e, + 0x06, 0x98, 0x4e, 0x97, 0x28, 0xcf, 0xaa, 0x06, 0x63, 0x67, 0x48, 0x71, 0xba, 0xe8, 0x0d, 0xc8, + 0x3c, 0x71, 0x06, 0xdd, 0x52, 0x91, 0xa8, 0xd5, 0x0d, 0x5e, 0xad, 0x02, 0x32, 0x07, 0xe4, 0xaf, + 0x7b, 0xce, 0xa0, 0xab, 0x11, 0xe4, 0x64, 0x6d, 0x49, 0x9f, 0x43, 0x5b, 0x84, 0xa5, 0xb5, 0x25, + 0x93, 0xa8, 0x2d, 0x6f, 0xc0, 0xaa, 0x37, 0xb2, 0x06, 0xe3, 0xa1, 0x3b, 0xf2, 0x4a, 0xeb, 0x84, + 0xf5, 0x9d, 0x28, 0xeb, 0x6c, 0x50, 0x0b, 0xf1, 0x66, 0xab, 0xd8, 0xca, 0xb9, 0x55, 0x0c, 0x96, + 0x56, 0xb1, 0xec, 0xf2, 0x2a, 0x96, 0x3b, 0x87, 0x8a, 0xe5, 0xcf, 0xa3, 0x62, 0xab, 0x0b, 0x54, + 0xac, 0x30, 0x43, 0xc5, 0xd6, 0xa2, 0x2a, 0x56, 0xa9, 0xc3, 0x6a, 0xa0, 0x09, 0x48, 0x84, 0x35, + 0x43, 0x6b, 0xab, 0xf7, 0xcc, 0x86, 0x7c, 0x24, 0xd5, 0x4e, 0xc5, 0x4b, 0x68, 0x13, 0xd6, 0x29, + 0x44, 0x51, 0xab, 0xcd, 0xb6, 0x5a, 0x17, 0x53, 0x08, 0x41, 0x91, 0x82, 0x9a, 0x6d, 0x83, 0xc2, + 0xd2, 0x44, 0x51, 0x35, 0xb8, 0x16, 0xf8, 0x21, 0x85, 0xee, 0x37, 0xe2, 0x8e, 0xee, 0xc2, 0x0a, + 0xd1, 0x59, 0xa2, 0xb0, 0x85, 0xbb, 0xd7, 0xf8, 0xb3, 0xe5, 0xf1, 0xb1, 0x76, 0x6a, 0x14, 0xb5, + 0xf2, 0x7b, 0x29, 0xb8, 0xd6, 0x1e, 0x76, 0x67, 0x13, 0x5d, 0x6c, 0x0c, 0x6f, 0x41, 0x6e, 0x64, + 0x0f, 0x7b, 0x56, 0xc7, 0x26, 0xfe, 0x6c, 0xc1, 0xc2, 0xc7, 0x97, 0x34, 0x1f, 0x1d, 0xbd, 0x05, + 0xd9, 0x09, 0x59, 0x9b, 0xa8, 0x76, 0xe1, 0xee, 0xf5, 0x59, 0x13, 0x29, 0x87, 0xc7, 0x97, 0x34, + 0x86, 0x5f, 0xcd, 0x43, 0xd6, 0xea, 0xe0, 0xd8, 0x51, 0xf9, 0x83, 0x3c, 0x6c, 0x25, 0x2c, 0xb3, + 0x04, 0xdf, 0xfe, 0x41, 0xa6, 0x67, 0x1c, 0xa4, 0x10, 0x3d, 0x48, 0x54, 0x82, 0x9c, 0xaf, 0xc9, + 0xc4, 0xbd, 0x6a, 0xfe, 0x27, 0xd6, 0x1f, 0xab, 0xd7, 0x73, 0x3f, 0xb4, 0x79, 0xcb, 0x5e, 0xa1, + 0x96, 0xcd, 0x06, 0x42, 0xcb, 0x7e, 0x05, 0x36, 0x7c, 0x64, 0x9f, 0x5c, 0x96, 0x1a, 0x06, 0x03, + 0xfb, 0x86, 0x71, 0x0b, 0xd6, 0xad, 0x89, 0xf7, 0x38, 0xee, 0x21, 0xd7, 0x30, 0x30, 0x50, 0x5d, + 0x1f, 0x29, 0xe6, 0x19, 0x09, 0x52, 0xa0, 0xb2, 0x35, 0xc8, 0x3d, 0xb6, 0xad, 0xae, 0xef, 0xe6, + 0x0b, 0x77, 0x5f, 0x9d, 0x77, 0x42, 0x07, 0xc7, 0x14, 0x57, 0x1e, 0x78, 0xa3, 0xa7, 0x9a, 0x3f, + 0x13, 0x39, 0xb0, 0xc3, 0xfe, 0x34, 0x3d, 0xd7, 0xb4, 0x3c, 0x6f, 0xe4, 0x3c, 0x9c, 0x78, 0x36, + 0x35, 0xeb, 0xc2, 0xdd, 0x6f, 0x5a, 0x86, 0xa4, 0xe1, 0x4a, 0xc1, 0x3c, 0x4a, 0x7e, 0xeb, 0xf1, + 0xf4, 0x08, 0x5e, 0x2a, 0xa4, 0x8f, 0x57, 0xf3, 0xb9, 0x2f, 0x2e, 0xb1, 0x54, 0x48, 0xc7, 0x70, + 0x23, 0x3b, 0xd9, 0xb2, 0xa6, 0x47, 0x50, 0x15, 0xbb, 0xa9, 0x4e, 0x6f, 0xd2, 0xb5, 0x83, 0x45, + 0x36, 0x88, 0x67, 0xbc, 0xc2, 0x2f, 0x42, 0xb1, 0x9b, 0x43, 0xac, 0x71, 0x63, 0xec, 0xc1, 0xc8, + 0x0c, 0x8e, 0xc6, 0xc8, 0x19, 0x9c, 0x39, 0x83, 0x33, 0xd3, 0x73, 0xfa, 0xb6, 0x3b, 0xf1, 0x88, + 0x73, 0x28, 0xdc, 0xbd, 0x72, 0x40, 0x53, 0x9a, 0x03, 0x3f, 0xa5, 0x39, 0xa8, 0xb3, 0x94, 0x47, + 0x2b, 0xb2, 0x19, 0x06, 0x9d, 0x80, 0x64, 0xd8, 0xec, 0x5b, 0x1f, 0x99, 0x1d, 0xab, 0xd7, 0x33, + 0xfd, 0xbc, 0x88, 0xb8, 0x92, 0xb9, 0x54, 0x36, 0xfa, 0xd6, 0x47, 0x35, 0xab, 0xd7, 0xf3, 0x01, + 0x58, 0x1d, 0x9e, 0x8c, 0x9c, 0xf1, 0xd0, 0xb4, 0x07, 0xd6, 0xc3, 0x9e, 0xdd, 0x25, 0x6e, 0x3e, + 0xaf, 0xad, 0x11, 0xa0, 0x4c, 0x61, 0xe8, 0x10, 0xc4, 0xbe, 0xdd, 0x75, 0x2c, 0xd3, 0x1e, 0x74, + 0x46, 0x4f, 0xc9, 0xa6, 0x4a, 0x22, 0xd9, 0xf4, 0x55, 0x7e, 0xd3, 0x27, 0x18, 0x47, 0x0e, 0x50, + 0xb4, 0x8d, 0x7e, 0x14, 0x50, 0x7e, 0x07, 0xd6, 0x78, 0x01, 0x23, 0x11, 0x84, 0x27, 0xf6, 0x53, + 0x66, 0x69, 0xf8, 0x4f, 0xb4, 0x0d, 0x2b, 0x1f, 0x58, 0xbd, 0x89, 0x6f, 0x63, 0xf4, 0xe3, 0x9d, + 0xf4, 0x5b, 0xa9, 0xf2, 0x21, 0x94, 0x66, 0xe9, 0xc4, 0x79, 0xe9, 0xcc, 0x3a, 0xf0, 0xf3, 0xd0, + 0xa9, 0xfc, 0xab, 0x00, 0x3b, 0x89, 0x4e, 0x07, 0x7d, 0x43, 0x68, 0xf6, 0xd4, 0xaf, 0x6e, 0x05, + 0x42, 0x6a, 0x38, 0x63, 0x8f, 0x62, 0x85, 0xbe, 0xe0, 0xf3, 0x49, 0xbe, 0x20, 0x3d, 0x7b, 0xe2, + 0xb4, 0x83, 0xf8, 0xf4, 0xb4, 0x83, 0x10, 0x66, 0xcf, 0x8f, 0x7b, 0x8d, 0xdb, 0x71, 0xaf, 0x41, + 0x72, 0x81, 0xe3, 0x4b, 0x51, 0xbf, 0xf1, 0x71, 0x2a, 0x15, 0x60, 0x06, 0xae, 0x83, 0x24, 0x76, + 0xc7, 0xa9, 0xa8, 0xf3, 0xc0, 0x98, 0x97, 0x99, 0xa7, 0x24, 0x61, 0xf9, 0x38, 0x4d, 0x7d, 0x25, + 0x1e, 0xb8, 0xc1, 0xb9, 0x4b, 0xe2, 0x9d, 0x8e, 0x85, 0xd0, 0x61, 0x62, 0x84, 0x7b, 0x09, 0xaa, + 0x96, 0x5f, 0xa8, 0x6a, 0xc7, 0x99, 0x29, 0x65, 0xfb, 0x38, 0x95, 0xaa, 0x8a, 0x50, 0x34, 0x23, + 0x7b, 0x0b, 0x21, 0xfe, 0x1e, 0xaa, 0x39, 0x58, 0x31, 0xc9, 0x50, 0x01, 0x56, 0x4d, 0x9f, 0x93, + 0xea, 0x16, 0x6c, 0x9a, 0x71, 0x3e, 0x2a, 0x06, 0xec, 0x05, 0xe1, 0xb4, 0xc9, 0xa2, 0x7c, 0x24, + 0xf4, 0xbd, 0x11, 0x8d, 0xa7, 0x7b, 0x3c, 0xc7, 0x91, 0x09, 0x7c, 0x40, 0xfd, 0x4a, 0x0a, 0xf6, + 0x82, 0x80, 0x9a, 0x48, 0x76, 0x71, 0x64, 0x7a, 0x3b, 0x1e, 0x51, 0xe7, 0x2f, 0xcd, 0x87, 0xd4, + 0xb7, 0x63, 0x21, 0xf5, 0xc6, 0xcc, 0x99, 0x73, 0x62, 0xea, 0xef, 0xe7, 0x60, 0x3b, 0x69, 0xa1, + 0xaf, 0x4f, 0x50, 0xf5, 0xd3, 0x5b, 0x9a, 0xb4, 0xfa, 0x9f, 0xe8, 0x0e, 0x6c, 0x75, 0xed, 0xb1, + 0xe7, 0x0c, 0x88, 0x67, 0x33, 0x3b, 0xee, 0x04, 0x1b, 0x35, 0x49, 0xb9, 0x57, 0x35, 0xc4, 0x0d, + 0xd5, 0xe8, 0x48, 0x34, 0xbd, 0x5d, 0x59, 0x32, 0xbd, 0xe5, 0x82, 0x7a, 0x36, 0x1a, 0xd4, 0x9f, + 0x5f, 0xf8, 0xad, 0xc7, 0xc3, 0xef, 0xfe, 0xdc, 0xe3, 0x9c, 0x11, 0x7f, 0xdf, 0x9f, 0x1f, 0x7f, + 0x3f, 0xb5, 0x14, 0xcd, 0x25, 0x03, 0xf0, 0xfb, 0xb3, 0x02, 0x70, 0x61, 0x99, 0xb5, 0x9e, 0x39, + 0x02, 0xaf, 0x9d, 0x37, 0x02, 0x27, 0x45, 0xb4, 0xf5, 0xff, 0xe7, 0x11, 0xed, 0x37, 0x32, 0xb0, + 0x9b, 0x6c, 0xf3, 0x68, 0x2f, 0x34, 0xba, 0x14, 0x8b, 0x0e, 0x3e, 0x00, 0x3b, 0xed, 0xb7, 0x78, + 0x43, 0x4a, 0xcf, 0x31, 0xa4, 0xe3, 0x14, 0x67, 0x4a, 0x78, 0xe6, 0x37, 0x26, 0xdb, 0xec, 0x2a, + 0x8b, 0x1b, 0x09, 0x56, 0x8b, 0x67, 0x71, 0x11, 0x56, 0x58, 0x22, 0xc2, 0xce, 0x88, 0x70, 0xc2, + 0xd2, 0x11, 0x2e, 0xb3, 0x28, 0xc2, 0xad, 0xcc, 0x8b, 0x70, 0xd9, 0xe7, 0x12, 0xe1, 0x72, 0x89, + 0x11, 0x0e, 0x20, 0xef, 0x67, 0x0d, 0xd5, 0x35, 0x00, 0x33, 0x10, 0x6e, 0x75, 0x17, 0xb6, 0xcd, + 0x04, 0xd1, 0x3e, 0xef, 0x98, 0xf8, 0x19, 0xb8, 0x72, 0x64, 0x7b, 0x17, 0xbd, 0x0a, 0x56, 0x5a, + 0x50, 0x4e, 0x9a, 0x3e, 0x1e, 0xba, 0x83, 0xb1, 0x7d, 0xa1, 0xfb, 0xe9, 0x67, 0x7d, 0x8a, 0x17, + 0x0b, 0xa5, 0x15, 0x0d, 0xae, 0x26, 0xce, 0x67, 0x2c, 0x5d, 0x28, 0xc4, 0x57, 0x61, 0x0b, 0xeb, + 0x65, 0xbc, 0x1a, 0xf8, 0x0a, 0x64, 0x86, 0xd6, 0x99, 0x3d, 0x95, 0x25, 0xb6, 0xac, 0x33, 0x76, + 0x6a, 0x1a, 0x41, 0x20, 0x77, 0xf9, 0x23, 0xd8, 0x8e, 0xd2, 0x60, 0x0c, 0xbd, 0x06, 0x2b, 0x8e, + 0x67, 0xf7, 0x69, 0x19, 0xb1, 0x10, 0xb7, 0xbb, 0x80, 0x11, 0x82, 0x43, 0x08, 0x7d, 0x27, 0x94, + 0x19, 0xa1, 0xa4, 0x23, 0xf3, 0x79, 0x12, 0x16, 0xf0, 0x84, 0xae, 0x62, 0x9b, 0xa7, 0x52, 0xf4, + 0x4b, 0x98, 0x79, 0x8f, 0xca, 0x70, 0xcc, 0x07, 0xc9, 0x74, 0x24, 0x48, 0x56, 0xde, 0x85, 0xab, + 0x89, 0xab, 0x87, 0x27, 0xce, 0xef, 0x66, 0xc1, 0x89, 0x13, 0xd4, 0xca, 0x77, 0x05, 0x24, 0x13, + 0x8f, 0xfc, 0xeb, 0xbd, 0x23, 0x1d, 0xae, 0x25, 0x2f, 0x1f, 0x6a, 0x0c, 0xbf, 0xa5, 0x45, 0x1a, + 0x43, 0xf7, 0xf4, 0x36, 0xec, 0xd4, 0xed, 0x9e, 0x3d, 0x5d, 0x41, 0x5e, 0xac, 0xc0, 0x87, 0xe4, + 0x5e, 0x52, 0x77, 0xc6, 0x43, 0xcb, 0xeb, 0x3c, 0xd6, 0x26, 0x3d, 0xbb, 0xee, 0x8c, 0xec, 0x8e, + 0x87, 0xf7, 0x37, 0x72, 0xdd, 0x3e, 0xb1, 0x6c, 0x36, 0x2f, 0x8f, 0x01, 0x2a, 0xce, 0x4b, 0x44, + 0x10, 0x86, 0xce, 0x80, 0x05, 0x05, 0xfc, 0x67, 0x45, 0x85, 0x2b, 0x31, 0x3a, 0xca, 0xa0, 0xeb, + 0x7c, 0xe0, 0x74, 0x27, 0x56, 0x0f, 0xdd, 0x80, 0x02, 0xa1, 0x35, 0x1c, 0xd9, 0x8f, 0x9c, 0x8f, + 0x7c, 0x2e, 0x30, 0xa8, 0x45, 0x20, 0x09, 0xf4, 0x1e, 0x4f, 0xf1, 0x85, 0x2f, 0xa2, 0xb6, 0x7d, + 0x01, 0x5a, 0xe8, 0x1a, 0xac, 0x8e, 0xac, 0x41, 0xd7, 0xed, 0x3b, 0xdf, 0x41, 0x0f, 0x36, 0xaf, + 0x85, 0x80, 0x4a, 0x95, 0xc4, 0xb1, 0x88, 0x04, 0x9e, 0x0e, 0xac, 0xbe, 0xd3, 0xc1, 0x94, 0x26, + 0xa3, 0x9e, 0x1f, 0x0e, 0x27, 0xa3, 0x1e, 0xda, 0x85, 0x6c, 0xdf, 0xf6, 0x1e, 0xbb, 0x5d, 0xbf, + 0x86, 0x4f, 0xbf, 0x2a, 0xdf, 0x97, 0x85, 0xeb, 0xc9, 0x44, 0x82, 0x83, 0xbd, 0xe3, 0xa7, 0xbf, + 0xac, 0x59, 0x70, 0x39, 0x38, 0x59, 0x7f, 0x96, 0x44, 0x86, 0x35, 0x86, 0x16, 0x3d, 0x80, 0x74, + 0xf2, 0x01, 0x08, 0xe1, 0x26, 0x39, 0xb9, 0x8c, 0x6d, 0x8f, 0x65, 0xbb, 0xbe, 0x5c, 0xc6, 0xb6, + 0x87, 0xbe, 0x99, 0x21, 0x74, 0xdc, 0xc1, 0x23, 0xe7, 0x8c, 0xc4, 0xaa, 0xc2, 0xdd, 0x72, 0xc0, + 0x85, 0xe6, 0xba, 0xfd, 0x1a, 0x19, 0xf2, 0x6f, 0xff, 0x64, 0x32, 0x05, 0x4d, 0x5f, 0xfc, 0xb3, + 0x4b, 0x5e, 0xfc, 0x73, 0xe7, 0x4f, 0x93, 0x50, 0x1d, 0xd0, 0xc8, 0x7e, 0xdf, 0xee, 0x78, 0x26, + 0x6d, 0x91, 0x98, 0xa4, 0xc7, 0x92, 0x9f, 0xdb, 0x63, 0x11, 0xe9, 0x8c, 0x10, 0x82, 0x59, 0x66, + 0x54, 0x46, 0xb6, 0x35, 0x76, 0x07, 0xac, 0xe2, 0xba, 0x46, 0x81, 0x1a, 0x81, 0x61, 0xa9, 0x91, + 0x20, 0xf8, 0xc8, 0x1e, 0x99, 0x9e, 0xcb, 0xea, 0xfa, 0xe0, 0x83, 0x0c, 0x17, 0xbd, 0x0a, 0x22, + 0x1f, 0x17, 0xb9, 0xd2, 0xec, 0x06, 0x07, 0x27, 0x67, 0xa2, 0x43, 0x29, 0xa0, 0x15, 0x2f, 0xd8, + 0x2c, 0x2c, 0xb5, 0xec, 0xfa, 0x53, 0xb5, 0x68, 0xe1, 0x86, 0xbf, 0xdc, 0xac, 0xc7, 0x2e, 0x37, + 0x0f, 0x00, 0xb8, 0x3c, 0x9d, 0x16, 0xaf, 0xde, 0xe4, 0xe5, 0x33, 0x47, 0x1f, 0x0f, 0xe2, 0x89, + 0x3a, 0x47, 0xaa, 0xfc, 0x19, 0xd8, 0x78, 0x86, 0x14, 0xb3, 0xf2, 0xb5, 0x34, 0x6c, 0xc4, 0x56, + 0x47, 0x1a, 0x6c, 0x77, 0xd9, 0xb7, 0x39, 0x9a, 0xf4, 0x6c, 0xb3, 0x4b, 0xdc, 0x0c, 0x8b, 0x66, + 0xd7, 0x67, 0x72, 0x4d, 0xb0, 0x8e, 0x2f, 0x69, 0xa8, 0x3b, 0xed, 0xa2, 0xbe, 0x15, 0x4a, 0x51, + 0x9a, 0x4e, 0xe0, 0x72, 0xd8, 0xc5, 0xb6, 0x32, 0x8b, 0x6e, 0xe8, 0x9c, 0x8e, 0x2f, 0x69, 0xbb, + 0xdd, 0x64, 0xb7, 0x35, 0xc5, 0x73, 0x87, 0xb8, 0xa0, 0xa4, 0x6a, 0xf2, 0xb4, 0xa3, 0x8a, 0xf3, + 0xcc, 0xdc, 0x57, 0x1b, 0x76, 0x62, 0x72, 0xa0, 0xe7, 0x42, 0x0c, 0x36, 0x76, 0x9f, 0x4e, 0x38, + 0xbe, 0xe3, 0x4b, 0xda, 0x56, 0x77, 0x1a, 0x5c, 0xcd, 0x42, 0x06, 0x53, 0xab, 0xfc, 0x51, 0x86, + 0x2b, 0xe2, 0xf3, 0xf3, 0xfd, 0x88, 0x20, 0xc1, 0x7a, 0x64, 0x7d, 0xa2, 0xf2, 0xb1, 0xd0, 0x19, + 0x15, 0xd4, 0x23, 0x57, 0x5b, 0xe3, 0x97, 0x44, 0xaf, 0xd3, 0xb5, 0xd8, 0xd1, 0x95, 0x66, 0xcd, + 0x24, 0xbd, 0x1b, 0x82, 0x89, 0x6e, 0xf0, 0xb1, 0x32, 0x1d, 0x34, 0x76, 0xc2, 0x78, 0x79, 0x00, + 0x9b, 0x8f, 0x9d, 0xae, 0x6d, 0x0e, 0x1f, 0xbb, 0x03, 0x9b, 0xef, 0x49, 0xe6, 0x09, 0xe2, 0x06, + 0x1e, 0x6c, 0xe1, 0x31, 0xd6, 0x6a, 0x7a, 0x6d, 0xba, 0xfb, 0x93, 0x0d, 0xc8, 0xc6, 0x3b, 0x40, + 0xbb, 0x2c, 0xf9, 0x26, 0x2e, 0x91, 0x72, 0x45, 0x2e, 0xd7, 0xd7, 0x39, 0xd3, 0x5a, 0x09, 0xc6, + 0x42, 0xf3, 0x3a, 0x8d, 0x98, 0x57, 0x2e, 0x56, 0x1b, 0x9e, 0x27, 0xe5, 0xb8, 0x71, 0x11, 0xc2, + 0x1c, 0x31, 0x74, 0x2b, 0xea, 0xac, 0xf3, 0xc1, 0xea, 0xbc, 0xc3, 0xfe, 0x5c, 0xd4, 0x61, 0xaf, + 0x2e, 0x72, 0xd8, 0x21, 0x01, 0x0a, 0x7e, 0x56, 0x33, 0xfe, 0x13, 0xbe, 0x77, 0x93, 0xa4, 0x4b, + 0x77, 0x60, 0x1b, 0x67, 0x17, 0x31, 0x1b, 0xf4, 0xb3, 0x8c, 0xcd, 0xb1, 0x33, 0x8c, 0x68, 0xd2, + 0xa2, 0x56, 0x4e, 0x5c, 0xed, 0x96, 0x6e, 0xe5, 0xf0, 0x13, 0xe7, 0x94, 0x9d, 0xbe, 0x9c, 0x23, + 0xad, 0x9c, 0xf8, 0x32, 0xe7, 0xdf, 0xc6, 0x27, 0x98, 0x01, 0xa4, 0xe7, 0x1b, 0x00, 0x53, 0xfe, + 0x48, 0xa2, 0x28, 0xc4, 0x12, 0xc5, 0xfd, 0x24, 0xc5, 0xcf, 0x90, 0xd8, 0x3a, 0xa5, 0xf4, 0x09, + 0x2d, 0xcf, 0x5c, 0x62, 0xcb, 0xd3, 0x2f, 0x92, 0xad, 0xcc, 0x28, 0x92, 0x65, 0x63, 0x71, 0xa4, + 0x11, 0x51, 0xf4, 0x3c, 0x51, 0xf4, 0x4f, 0xcc, 0x3b, 0x99, 0x79, 0xc1, 0x23, 0x9e, 0x88, 0xac, + 0x2e, 0x4a, 0x44, 0xe0, 0xd9, 0x12, 0x91, 0xc2, 0x92, 0x89, 0xc8, 0xda, 0x05, 0x12, 0x91, 0x30, + 0x67, 0x5b, 0x5f, 0x2e, 0x67, 0x4b, 0xce, 0x5c, 0x8a, 0xcf, 0x9a, 0xb9, 0x6c, 0x2c, 0xce, 0x5c, + 0xc4, 0xa5, 0x32, 0x97, 0xcd, 0xf3, 0x67, 0x2e, 0xe8, 0x82, 0x99, 0xcb, 0xb3, 0x7a, 0x9f, 0xdf, + 0x15, 0xa6, 0x6e, 0x00, 0xac, 0xbc, 0xf4, 0x7a, 0xf4, 0xe6, 0x35, 0xb3, 0xa2, 0x13, 0x5a, 0xd9, + 0xf9, 0x0c, 0xd6, 0x2f, 0xd6, 0x08, 0xac, 0x76, 0x95, 0x58, 0xac, 0xc9, 0xb0, 0x66, 0x46, 0xa4, + 0x58, 0xa3, 0x46, 0x0c, 0x69, 0x85, 0x18, 0xd2, 0xc1, 0x7c, 0x4f, 0x35, 0xd7, 0x94, 0x92, 0x8a, + 0x3f, 0xd9, 0xc5, 0xc5, 0x9f, 0x74, 0x52, 0xf1, 0xe7, 0x19, 0xcf, 0xe3, 0x3c, 0x55, 0x9e, 0xef, + 0x4f, 0x05, 0x45, 0x83, 0xa4, 0xb0, 0xb1, 0xf4, 0x15, 0x7b, 0x1f, 0x36, 0xe3, 0x4e, 0xd9, 0xbf, + 0x6a, 0x6f, 0x44, 0x52, 0xb6, 0xee, 0x38, 0xea, 0x65, 0xd3, 0x51, 0x2f, 0xcb, 0x95, 0x11, 0xa2, + 0xfc, 0x2c, 0x51, 0x46, 0x98, 0xca, 0x85, 0xd8, 0x95, 0xbb, 0x09, 0xd7, 0x82, 0x2b, 0xf7, 0xf3, + 0x88, 0x8d, 0x95, 0xaf, 0x64, 0x60, 0x93, 0xbb, 0xe3, 0x33, 0x77, 0x57, 0x86, 0xfc, 0x63, 0x77, + 0xec, 0xf1, 0x97, 0x70, 0xff, 0x7b, 0x56, 0x07, 0x23, 0xb7, 0x5c, 0x07, 0x23, 0xbd, 0x64, 0x07, + 0x63, 0xaa, 0x4f, 0x21, 0x2c, 0xd3, 0xa7, 0xc8, 0x24, 0xf4, 0x29, 0xce, 0x66, 0x75, 0x18, 0xa8, + 0xa1, 0xbc, 0x91, 0x54, 0xea, 0xa0, 0x62, 0x38, 0x67, 0x7b, 0xe1, 0x6c, 0x56, 0x7b, 0x21, 0xbb, + 0x70, 0xa1, 0x73, 0xf5, 0x16, 0xfe, 0xd7, 0xd5, 0xe4, 0x7f, 0x7e, 0x15, 0xae, 0x06, 0x79, 0x69, + 0xcb, 0x1a, 0x79, 0x4e, 0xc7, 0x19, 0x5a, 0x03, 0x6f, 0xf9, 0xd6, 0xe0, 0xeb, 0x7e, 0xc1, 0x72, + 0x3b, 0x16, 0x95, 0xa7, 0x44, 0xc5, 0xaa, 0x95, 0xe8, 0x3a, 0x14, 0x30, 0x4d, 0xf2, 0xb2, 0xc0, + 0x73, 0x19, 0x4f, 0xab, 0x63, 0x67, 0x88, 0x2f, 0x3c, 0x86, 0x8b, 0xf6, 0x00, 0xd3, 0xf7, 0x53, + 0x9b, 0x8d, 0x60, 0x98, 0x25, 0x35, 0x91, 0x2a, 0x87, 0x10, 0xab, 0x72, 0x7c, 0x12, 0xb6, 0x87, + 0xe1, 0x2e, 0x4c, 0xa7, 0x6b, 0x0f, 0x3c, 0xc7, 0x7b, 0xca, 0xb4, 0x6b, 0x8b, 0x1b, 0x53, 0xd8, + 0x10, 0x8e, 0x7a, 0xfc, 0x14, 0xae, 0xb3, 0xb6, 0xc1, 0xc1, 0x93, 0xa8, 0x07, 0xae, 0x3d, 0x3f, + 0x45, 0xfd, 0xc4, 0xcf, 0x94, 0x3e, 0x80, 0x5d, 0x7e, 0x0a, 0xa7, 0xc3, 0xb4, 0xf3, 0xf6, 0xb9, + 0xe9, 0xeb, 0xc1, 0xf4, 0x31, 0x1c, 0x70, 0xa0, 0xb8, 0x3e, 0xef, 0x0c, 0x93, 0xc6, 0x70, 0x46, + 0xd7, 0xf5, 0xfa, 0x8f, 0xfc, 0x8c, 0x0e, 0xff, 0x8d, 0x5e, 0x81, 0xf5, 0x61, 0xcf, 0x7a, 0x4a, + 0x02, 0xb6, 0xe7, 0x0e, 0x68, 0x73, 0x81, 0xde, 0x97, 0xd6, 0xf0, 0x80, 0xc6, 0xe0, 0xd8, 0x38, + 0x09, 0x62, 0xd7, 0xb1, 0x7a, 0x04, 0x91, 0x3d, 0xda, 0xc0, 0xc0, 0x3a, 0x83, 0x25, 0x27, 0xa2, + 0x90, 0x9c, 0x88, 0xde, 0x0b, 0x1b, 0x8e, 0x22, 0xd9, 0xf6, 0x27, 0x97, 0xda, 0x76, 0x72, 0xdf, + 0x31, 0xa1, 0x3f, 0xb7, 0xf9, 0x7f, 0xe9, 0x85, 0x4c, 0x71, 0xc9, 0xfc, 0x14, 0x5d, 0x20, 0x3f, + 0x3d, 0x80, 0xad, 0x0f, 0x2d, 0xc7, 0x33, 0x27, 0x03, 0xcf, 0xe9, 0x99, 0xd6, 0x60, 0xfc, 0xa1, + 0x3d, 0xb2, 0xbb, 0xa5, 0x2d, 0xb2, 0xe4, 0x26, 0x1e, 0x6a, 0xe3, 0x11, 0x89, 0x0d, 0x94, 0x8f, + 0xa1, 0x3c, 0x5b, 0xf7, 0xce, 0xe5, 0xb1, 0x9e, 0xa1, 0x93, 0x59, 0xf9, 0x72, 0x0a, 0x50, 0x54, + 0x43, 0xc8, 0x35, 0xec, 0x25, 0x28, 0x46, 0x8d, 0x9d, 0x51, 0x5b, 0x8f, 0x98, 0xf9, 0x4c, 0x9f, + 0x90, 0x9e, 0xed, 0x13, 0xe6, 0xfa, 0x18, 0xde, 0x7f, 0x39, 0x7e, 0xe0, 0xf2, 0xfd, 0x97, 0xd2, + 0xad, 0x7c, 0x8f, 0x00, 0x7b, 0x06, 0xcb, 0x70, 0x93, 0xbd, 0xea, 0x2c, 0x8e, 0x52, 0x4b, 0x72, + 0x14, 0xaf, 0xed, 0xc6, 0x32, 0x7b, 0x61, 0x2a, 0xb3, 0x9f, 0x32, 0xe8, 0x4c, 0x82, 0x41, 0x9f, + 0x84, 0x46, 0x1a, 0x8f, 0xaf, 0x73, 0xb7, 0x33, 0xdb, 0x4c, 0xe3, 0x26, 0x96, 0x3d, 0xa7, 0x89, + 0x3d, 0x93, 0xd2, 0x7c, 0x35, 0x0f, 0x05, 0x5d, 0x69, 0x91, 0x43, 0xc1, 0xda, 0x72, 0x19, 0x72, + 0xfe, 0x91, 0xd1, 0xf9, 0xd9, 0x0e, 0x39, 0x2f, 0x74, 0x05, 0xf2, 0x41, 0x7c, 0xa3, 0x54, 0x72, + 0x2c, 0x0f, 0x44, 0xb7, 0x41, 0x9c, 0xca, 0xc7, 0xe8, 0xbd, 0xa9, 0x18, 0x4d, 0x27, 0xd1, 0x2e, + 0x64, 0x47, 0xf6, 0x19, 0x36, 0x4b, 0x7a, 0x63, 0x62, 0x5f, 0xf3, 0x35, 0xe9, 0x32, 0xe4, 0xc8, + 0x60, 0xa0, 0x45, 0x59, 0xfc, 0x39, 0x47, 0x65, 0x57, 0x66, 0x2b, 0xc8, 0xa3, 0x99, 0x81, 0x06, + 0x91, 0xc3, 0xbc, 0xc3, 0xfb, 0x09, 0x5f, 0x28, 0x17, 0x08, 0x2c, 0xfb, 0x90, 0x7f, 0x34, 0x72, + 0xfb, 0xe6, 0x64, 0xe4, 0xb0, 0xf3, 0xdc, 0xe0, 0x29, 0xb7, 0x47, 0x8e, 0x96, 0xc3, 0x08, 0xed, + 0x91, 0x83, 0x5e, 0x86, 0xac, 0xe7, 0x12, 0xcc, 0x5c, 0x32, 0xe6, 0x8a, 0xe7, 0x62, 0xbc, 0x17, + 0x00, 0x3a, 0x24, 0x0c, 0x74, 0x4d, 0x8b, 0xde, 0xff, 0x05, 0x12, 0x95, 0x56, 0x19, 0x54, 0xf2, + 0x30, 0xca, 0xd8, 0xb3, 0x46, 0x0c, 0x05, 0x42, 0x14, 0x06, 0x95, 0x3c, 0xb4, 0x07, 0x79, 0x7b, + 0xd0, 0xa5, 0x08, 0x85, 0x00, 0x21, 0x47, 0x60, 0x92, 0x87, 0x3e, 0x0b, 0x22, 0xf3, 0xb0, 0xe6, + 0x23, 0xdb, 0xf2, 0x26, 0x23, 0x56, 0x01, 0x2f, 0x72, 0x17, 0x0a, 0x5d, 0x69, 0x1d, 0xd2, 0x31, + 0x6d, 0x83, 0x21, 0xb3, 0xef, 0x31, 0xfa, 0x3c, 0x14, 0xa9, 0xab, 0x27, 0xa5, 0x64, 0x87, 0x5d, + 0xb2, 0x63, 0x51, 0x87, 0x78, 0x76, 0x1f, 0x41, 0x5b, 0xef, 0xf0, 0x9f, 0xe8, 0x4d, 0x28, 0x10, + 0x0a, 0xec, 0x47, 0x1d, 0x09, 0xed, 0x09, 0x3c, 0x9d, 0x5e, 0xeb, 0x35, 0xe8, 0x04, 0x7f, 0xa3, + 0x0a, 0xac, 0x87, 0xf2, 0x31, 0x07, 0xe3, 0xd2, 0x2e, 0xde, 0x9e, 0x56, 0x08, 0xc4, 0xa3, 0x12, + 0x9c, 0x50, 0x40, 0x18, 0xe7, 0x32, 0xc5, 0x09, 0xe4, 0xa3, 0x8e, 0xb1, 0xe7, 0xf2, 0x25, 0x84, + 0x31, 0x4a, 0x04, 0x63, 0x95, 0x09, 0x48, 0x1d, 0xa3, 0x43, 0x72, 0x7d, 0xea, 0xb8, 0x83, 0x01, + 0x57, 0x4a, 0x88, 0xbf, 0x7d, 0xa9, 0x07, 0x18, 0xb4, 0xae, 0xa0, 0x89, 0xdd, 0x18, 0x04, 0x1b, + 0xa5, 0x3d, 0x1a, 0xb9, 0x23, 0xd6, 0x7f, 0xa0, 0x1f, 0xe8, 0xd3, 0x20, 0x72, 0xdb, 0xa7, 0x85, + 0x8e, 0x2d, 0xa2, 0x17, 0x68, 0xba, 0xd0, 0xa1, 0x15, 0xc3, 0xfd, 0x93, 0x12, 0xc7, 0x0d, 0x28, + 0x58, 0x93, 0xae, 0xe3, 0x92, 0x79, 0x1d, 0x92, 0x6d, 0xae, 0x6a, 0x40, 0x40, 0x78, 0xbc, 0x83, + 0xf3, 0xb8, 0xa9, 0x10, 0xb9, 0x43, 0xf3, 0xb8, 0xf8, 0xab, 0x9a, 0xe7, 0x16, 0xd5, 0x2a, 0xff, + 0x4d, 0x1b, 0x17, 0xbe, 0x7f, 0x24, 0x8e, 0x86, 0xf7, 0xc6, 0x61, 0xca, 0xec, 0x83, 0x94, 0x2e, + 0xef, 0x89, 0xd2, 0x11, 0x4f, 0xb4, 0xd0, 0x8f, 0xbf, 0xc9, 0x95, 0x5d, 0x9c, 0x81, 0xe3, 0x39, + 0x9c, 0x4e, 0x64, 0xc8, 0x69, 0xee, 0x04, 0xeb, 0xf8, 0xc3, 0xe4, 0x64, 0xf9, 0x89, 0x1d, 0xb7, + 0x3f, 0xc4, 0xf7, 0x50, 0x7f, 0xe2, 0x4a, 0x74, 0x62, 0xcd, 0x1f, 0x26, 0x13, 0x6b, 0xb0, 0x11, + 0x4c, 0x64, 0x7a, 0x4b, 0xeb, 0x09, 0xe5, 0xa9, 0x7b, 0x20, 0x8e, 0x0f, 0xec, 0xec, 0xbc, 0xc8, + 0x77, 0xa8, 0x0f, 0x39, 0x5e, 0x1f, 0xea, 0xb0, 0x1d, 0x23, 0x1d, 0xb6, 0xed, 0x92, 0x75, 0x02, + 0x45, 0xe9, 0xe2, 0x73, 0xaf, 0x7c, 0x6f, 0x0a, 0xb2, 0xd4, 0x9b, 0xe0, 0x9c, 0x17, 0xdf, 0x39, + 0x99, 0xc4, 0xc9, 0xdf, 0x18, 0x86, 0xaf, 0xbf, 0xfe, 0xf3, 0x3f, 0xfc, 0x37, 0x2a, 0x42, 0xda, + 0x19, 0x32, 0xe9, 0xa6, 0x9d, 0x21, 0xc6, 0x21, 0x17, 0x5c, 0x2c, 0xc1, 0x75, 0x8d, 0xfc, 0x7d, + 0xa1, 0xb7, 0x7b, 0xfb, 0xff, 0xb2, 0x06, 0xeb, 0x91, 0x52, 0x1d, 0xda, 0x25, 0x89, 0x8b, 0xa9, + 0x1b, 0x92, 0xd1, 0xd6, 0xcd, 0xb6, 0x7a, 0x4f, 0x6d, 0x3e, 0x50, 0xc5, 0x4b, 0x68, 0x87, 0x5c, + 0xdd, 0x7d, 0xb8, 0xa1, 0x9d, 0x2a, 0xea, 0x91, 0x88, 0x35, 0x83, 0x47, 0xd7, 0x14, 0xf5, 0x08, + 0xc3, 0x7f, 0x33, 0x85, 0x5e, 0x80, 0x6b, 0xdc, 0x40, 0x4d, 0x6a, 0x34, 0x4c, 0x45, 0x37, 0x0f, + 0x9b, 0xda, 0x03, 0x49, 0xab, 0xcb, 0x75, 0xf1, 0xb7, 0x52, 0x68, 0x37, 0x42, 0xf2, 0xdd, 0xb6, + 0xdc, 0x96, 0xeb, 0xe2, 0x6f, 0xa7, 0xd0, 0x4d, 0xb8, 0xca, 0xc1, 0x75, 0x59, 0xd7, 0x95, 0xa6, + 0x6a, 0xb6, 0xb4, 0xe6, 0x91, 0x26, 0xeb, 0xba, 0xf8, 0x3b, 0x29, 0x84, 0x08, 0xd7, 0x3e, 0x46, + 0xf3, 0x9e, 0xf8, 0x87, 0x29, 0x54, 0x22, 0x95, 0x6f, 0x1f, 0x26, 0xd5, 0x6a, 0x72, 0xcb, 0x90, + 0xeb, 0xe2, 0x1f, 0xc7, 0x59, 0x39, 0x69, 0xde, 0x97, 0xeb, 0x66, 0x4b, 0xd6, 0x4e, 0x24, 0x55, + 0x56, 0x8d, 0xc6, 0xa9, 0xf8, 0xab, 0xe9, 0x44, 0x14, 0x43, 0x3e, 0x69, 0x35, 0x35, 0x49, 0x53, + 0x1a, 0xa7, 0xe2, 0xaf, 0xa5, 0xd1, 0x15, 0xf2, 0xa0, 0x33, 0x10, 0x8c, 0x2e, 0x63, 0x8e, 0xde, + 0x3b, 0x15, 0x7f, 0x3d, 0x8d, 0xae, 0x92, 0xf6, 0xba, 0x3f, 0x54, 0x95, 0xea, 0xa6, 0x26, 0xbf, + 0xdb, 0x96, 0x75, 0x43, 0xfc, 0x01, 0x01, 0x5d, 0x83, 0xcb, 0x11, 0x81, 0x4a, 0x6d, 0xe3, 0xb8, + 0xa9, 0x29, 0x5f, 0x94, 0xeb, 0xe2, 0x0f, 0x0a, 0xb1, 0xbd, 0xb6, 0xa4, 0xd3, 0x13, 0x59, 0x35, + 0xc8, 0x74, 0x45, 0x93, 0xeb, 0xe2, 0x0f, 0x09, 0xb1, 0x75, 0x0f, 0x9b, 0x5a, 0x55, 0xa9, 0xd7, + 0x65, 0x55, 0xfc, 0x61, 0x21, 0xb6, 0x65, 0xb5, 0x69, 0x1c, 0x92, 0x9f, 0xba, 0xfc, 0x88, 0x80, + 0x2a, 0xb0, 0xc7, 0xef, 0x47, 0x36, 0x8e, 0x9b, 0x75, 0x8c, 0x60, 0x4a, 0x8d, 0x46, 0xf3, 0x81, + 0x5c, 0x17, 0x7f, 0x54, 0x40, 0xd7, 0xc9, 0x73, 0x06, 0x6e, 0x36, 0x13, 0x9a, 0x54, 0x6d, 0xc8, + 0xe2, 0x8f, 0x09, 0xe8, 0x16, 0xe9, 0xf7, 0x07, 0xac, 0xe1, 0xcd, 0x9a, 0x98, 0xf9, 0x90, 0xbb, + 0x1f, 0x17, 0xd0, 0x0d, 0x28, 0xf3, 0xe7, 0x4f, 0xb7, 0x6d, 0x1a, 0xca, 0x89, 0xdc, 0x6c, 0x1b, + 0xe2, 0x4f, 0xc4, 0x79, 0xac, 0x35, 0xd5, 0xc3, 0x86, 0x52, 0x33, 0xc4, 0x9f, 0x14, 0xd0, 0x36, + 0x71, 0x44, 0xfe, 0xc8, 0x51, 0x53, 0x95, 0xc5, 0x9f, 0x12, 0xd0, 0x6d, 0xb8, 0x95, 0x40, 0x50, + 0x56, 0x0d, 0xc5, 0x38, 0x35, 0x8d, 0x66, 0xd3, 0x6c, 0x48, 0xda, 0x91, 0x2c, 0xfe, 0xb4, 0x80, + 0x5e, 0x84, 0x1b, 0x09, 0x98, 0x6d, 0x4d, 0xa1, 0x68, 0x4d, 0xf5, 0x48, 0xfc, 0x19, 0x01, 0xbd, + 0x0c, 0x2f, 0x44, 0xc4, 0xaf, 0xb7, 0x5b, 0xad, 0xa6, 0x66, 0xc8, 0x75, 0xf3, 0x44, 0xae, 0x2b, + 0x92, 0x69, 0x9c, 0xb6, 0x64, 0xf1, 0x67, 0x05, 0x74, 0x07, 0xf6, 0xa7, 0xa9, 0xc9, 0x75, 0x53, + 0x93, 0xd4, 0x23, 0x99, 0x48, 0x47, 0x97, 0x0c, 0x45, 0x3f, 0x54, 0x88, 0x78, 0x7e, 0x4e, 0x40, + 0x7b, 0x50, 0x8a, 0x1d, 0xba, 0xfc, 0x9e, 0x21, 0xab, 0x58, 0x57, 0xc5, 0x5f, 0x88, 0x9f, 0x40, + 0x30, 0x14, 0x0a, 0xef, 0x17, 0xe3, 0x38, 0x8a, 0x6a, 0xc8, 0xda, 0x7d, 0xa9, 0x41, 0xd8, 0xaf, + 0x6a, 0x8a, 0x7c, 0x28, 0xfe, 0xb2, 0x80, 0x5e, 0x81, 0x0a, 0x6f, 0x77, 0xa1, 0x4e, 0x62, 0x55, + 0xba, 0x2f, 0x29, 0x0d, 0xc2, 0xcf, 0x5f, 0x0b, 0xe8, 0x75, 0x78, 0x2d, 0x6e, 0x70, 0x86, 0x26, + 0xa9, 0xba, 0x54, 0x33, 0xf0, 0xba, 0xf5, 0xa6, 0x4c, 0x0f, 0x59, 0x7e, 0x4f, 0xd1, 0x0d, 0x5d, + 0xfc, 0x9b, 0xf8, 0x0e, 0x1a, 0xcd, 0x66, 0xcb, 0xac, 0xcb, 0x86, 0x5c, 0xc3, 0x66, 0xf3, 0xd5, + 0xf8, 0x30, 0x66, 0xea, 0x44, 0x52, 0x4f, 0xcd, 0xe3, 0x66, 0x4b, 0x17, 0xff, 0x36, 0xce, 0xbc, + 0x54, 0xaf, 0x63, 0xe3, 0x34, 0x15, 0xb5, 0xd6, 0x3c, 0x69, 0x35, 0x64, 0x43, 0x16, 0xff, 0x2e, + 0xae, 0xbb, 0xd2, 0x49, 0x55, 0x39, 0x6a, 0x37, 0xdb, 0xba, 0xf8, 0xf7, 0xf1, 0xa1, 0x6a, 0x5b, + 0x3f, 0x35, 0x8f, 0x65, 0x4d, 0x16, 0xff, 0x21, 0x4e, 0x39, 0xd0, 0x29, 0x59, 0x3b, 0x51, 0x54, + 0x09, 0x33, 0xf7, 0x8f, 0x71, 0xe5, 0x8c, 0x2a, 0x2f, 0x25, 0xf4, 0x4f, 0x02, 0x7a, 0x09, 0x6e, + 0xc6, 0xe5, 0xab, 0x4a, 0x0d, 0x53, 0x97, 0xb5, 0xfb, 0xb2, 0x66, 0xca, 0x9a, 0xd6, 0xd4, 0xc4, + 0x7f, 0x8b, 0xeb, 0x30, 0xa6, 0xa5, 0xe0, 0x2d, 0x60, 0x4b, 0x94, 0xeb, 0xe2, 0xbf, 0x0b, 0x09, + 0xf6, 0x7d, 0x24, 0x19, 0xf2, 0x03, 0xe9, 0x54, 0xfc, 0x8f, 0x38, 0x27, 0x98, 0xb6, 0x52, 0x93, + 0x23, 0x87, 0xf3, 0x9f, 0xf1, 0x25, 0xd8, 0xec, 0xc0, 0x4c, 0xbe, 0x16, 0x67, 0xf5, 0xbe, 0xac, + 0x11, 0x65, 0x21, 0x6a, 0xe7, 0x2b, 0xac, 0xf8, 0x5f, 0x42, 0xdc, 0x4f, 0xc9, 0xba, 0x2e, 0x1d, + 0xc9, 0x9c, 0x59, 0x7c, 0x77, 0x26, 0xa6, 0xf0, 0x47, 0x8d, 0x66, 0x55, 0x6a, 0x50, 0xf9, 0xca, + 0xf7, 0x65, 0xed, 0xf4, 0x01, 0x11, 0xce, 0x9f, 0x65, 0x62, 0xe6, 0xcf, 0xf0, 0xea, 0x72, 0xad, + 0xa1, 0xa8, 0xb2, 0xf8, 0xe7, 0x19, 0x74, 0x00, 0xaf, 0x26, 0x8c, 0x47, 0xb4, 0xc8, 0x94, 0x54, + 0x46, 0xef, 0x2f, 0x32, 0xb1, 0x1d, 0x30, 0xfc, 0x98, 0x57, 0xf9, 0xab, 0xcc, 0xfe, 0x13, 0xf6, + 0x4b, 0x51, 0xbf, 0xf6, 0xca, 0xe2, 0x0d, 0x51, 0x55, 0xbc, 0x4f, 0xec, 0x62, 0x9a, 0x61, 0xbc, + 0x09, 0xe1, 0xed, 0x7a, 0x4b, 0x4c, 0x4d, 0x83, 0x8d, 0x5a, 0x4b, 0x4c, 0x27, 0x80, 0x1b, 0xba, + 0x28, 0xec, 0xab, 0x20, 0xc6, 0x0b, 0x2b, 0x08, 0x41, 0x11, 0xa3, 0xaa, 0x4d, 0xf3, 0x58, 0x96, + 0xea, 0xb2, 0xa6, 0xd3, 0x5f, 0x10, 0x62, 0xd8, 0x7b, 0x01, 0x28, 0x85, 0xb6, 0xa8, 0x77, 0xc2, + 0x66, 0xe4, 0x03, 0xd3, 0xfb, 0x2e, 0x61, 0x36, 0x56, 0xb3, 0x40, 0x7b, 0x54, 0x92, 0xd4, 0x9f, + 0xc8, 0x6a, 0x4d, 0x3b, 0x6d, 0x19, 0x66, 0x5d, 0xd1, 0xc9, 0x96, 0x2f, 0xa1, 0xab, 0x34, 0x00, + 0x44, 0x87, 0x89, 0x1f, 0x16, 0x53, 0xc9, 0x73, 0x99, 0x8f, 0x10, 0xd3, 0xfb, 0xf7, 0xa0, 0x18, + 0x6d, 0xc3, 0x61, 0x56, 0x99, 0x45, 0x4b, 0xaa, 0xfe, 0x40, 0xd6, 0x28, 0xf7, 0x0c, 0xa4, 0xc9, + 0x5f, 0x90, 0x6b, 0x06, 0xe5, 0x9e, 0x81, 0x88, 0x48, 0x0e, 0x65, 0x4d, 0x4c, 0xef, 0x7f, 0x48, + 0x76, 0x19, 0x66, 0xec, 0x44, 0x6a, 0x35, 0x3f, 0x38, 0x63, 0xc3, 0xc5, 0xb1, 0xfb, 0x12, 0x2a, + 0xc3, 0x2e, 0x06, 0xb7, 0x24, 0xcd, 0x50, 0x6a, 0x4a, 0x4b, 0x52, 0x0d, 0xf3, 0x0b, 0x4d, 0x45, + 0x95, 0xeb, 0x62, 0x0a, 0x15, 0x01, 0xf0, 0x18, 0x26, 0x7e, 0x5f, 0x16, 0xd3, 0x68, 0x1b, 0x44, + 0xfc, 0x5d, 0x57, 0xf4, 0x5a, 0x53, 0x55, 0xa9, 0xef, 0x10, 0xd0, 0x3a, 0xac, 0x62, 0x28, 0xb5, + 0xb0, 0xcc, 0x7e, 0x87, 0x9c, 0x4e, 0x34, 0xe5, 0x42, 0x25, 0xd8, 0xd6, 0x0d, 0x3d, 0xe0, 0xcf, + 0x6c, 0xaa, 0x47, 0x4d, 0xba, 0xfe, 0x65, 0xd8, 0x8a, 0x8c, 0x1c, 0x4a, 0x4a, 0x83, 0x2c, 0x8e, + 0x25, 0xc9, 0x0f, 0xe8, 0xed, 0x5a, 0x4d, 0xd6, 0xf5, 0xc3, 0x76, 0x43, 0x4c, 0xef, 0xbf, 0x0a, + 0x10, 0x5e, 0x86, 0x50, 0x1e, 0x32, 0x2a, 0x8e, 0x28, 0x44, 0x3a, 0xf7, 0x34, 0x45, 0x6f, 0x99, + 0xb2, 0x8a, 0x0f, 0xa4, 0x2e, 0xa6, 0xf6, 0x0f, 0x89, 0x5a, 0x44, 0x6e, 0x3e, 0x68, 0x03, 0x0a, + 0x7a, 0xad, 0xce, 0x25, 0x3c, 0x0c, 0x10, 0xfe, 0xa6, 0x54, 0x84, 0x35, 0x0c, 0x08, 0x7f, 0x51, + 0x7a, 0xf7, 0x4f, 0x0b, 0x20, 0xe8, 0x4a, 0x0b, 0xb5, 0x60, 0x8d, 0x7f, 0x89, 0x8a, 0xae, 0x45, + 0x5a, 0x75, 0xb1, 0x07, 0x8b, 0xe5, 0xbd, 0x19, 0xa3, 0xb4, 0x53, 0x53, 0x11, 0x3e, 0x4e, 0xa7, + 0xd0, 0x97, 0xb8, 0xdf, 0xcb, 0xf3, 0xaf, 0x3c, 0xd1, 0x4b, 0xd3, 0x65, 0xc8, 0x84, 0x47, 0xab, + 0xe5, 0xb9, 0xcf, 0x44, 0x91, 0x09, 0xbb, 0xc9, 0x3f, 0xdb, 0x41, 0x2f, 0x4f, 0x93, 0x4f, 0x7a, + 0x42, 0x5a, 0x9e, 0xff, 0x66, 0x13, 0xb3, 0x9f, 0xf8, 0x8b, 0x58, 0x8e, 0xfd, 0x79, 0xbf, 0x98, + 0x5d, 0xcc, 0x7e, 0xf2, 0xcf, 0x83, 0x38, 0xf6, 0xe7, 0xfe, 0x7e, 0x68, 0x11, 0xfb, 0xdf, 0x02, + 0x68, 0xfa, 0x0d, 0x36, 0x0a, 0x1f, 0x5a, 0xcd, 0x7c, 0xdf, 0x5d, 0xbe, 0x35, 0x17, 0x87, 0xf5, + 0xe2, 0xbe, 0x0d, 0xb6, 0x12, 0x1e, 0x54, 0xa3, 0xf8, 0xdc, 0x44, 0xce, 0x5f, 0x9c, 0x8f, 0x14, + 0xae, 0x90, 0xf0, 0xa6, 0x98, 0x5b, 0x61, 0xf6, 0x7b, 0x67, 0x6e, 0x85, 0x79, 0xcf, 0x92, 0x3b, + 0xc1, 0xe3, 0xeb, 0xe8, 0x26, 0xa6, 0x66, 0x27, 0xee, 0xe2, 0xa5, 0x05, 0x58, 0x6c, 0x91, 0x23, + 0x28, 0x46, 0xdf, 0xfc, 0xa2, 0xf0, 0x4d, 0x4c, 0xe2, 0x63, 0xe0, 0x72, 0xf2, 0x63, 0xef, 0x88, + 0x39, 0x45, 0x9e, 0xec, 0xbd, 0xb4, 0xd4, 0x5b, 0xa7, 0xf2, 0xdc, 0x76, 0x69, 0x44, 0xdb, 0x67, + 0x50, 0x9f, 0xf7, 0xc6, 0x68, 0x01, 0xf5, 0xf0, 0x2c, 0x23, 0xb4, 0xa7, 0xce, 0x32, 0x89, 0xf2, + 0x8b, 0xf3, 0x91, 0x98, 0x98, 0xbf, 0xc4, 0x3d, 0xad, 0x9e, 0xc1, 0xff, 0xbc, 0x3e, 0xf0, 0x02, + 0xfe, 0x4f, 0x61, 0x3b, 0xa9, 0x63, 0xc2, 0x69, 0xca, 0x9c, 0x86, 0x4a, 0x39, 0xd2, 0x2c, 0x88, + 0x97, 0xd3, 0xdf, 0x83, 0xdd, 0xe4, 0x3a, 0x2f, 0xe7, 0x08, 0xe6, 0x16, 0x82, 0xcb, 0xbb, 0x53, + 0x95, 0x5d, 0xb9, 0x3f, 0xf4, 0x9e, 0x56, 0x0f, 0xbf, 0x78, 0xeb, 0xcc, 0xf1, 0x1e, 0x4f, 0x1e, + 0x1e, 0x74, 0xdc, 0xfe, 0x1d, 0x46, 0x8b, 0xfe, 0x5b, 0x95, 0x8e, 0xdb, 0xf3, 0x01, 0xbf, 0x92, + 0x5e, 0x6f, 0x38, 0x1f, 0xd8, 0xf7, 0x1c, 0xef, 0xa0, 0x85, 0x87, 0xfe, 0x39, 0x5d, 0x64, 0xdf, + 0xef, 0xbc, 0x43, 0x00, 0x0f, 0xb3, 0x64, 0xca, 0x1b, 0xff, 0x13, 0x00, 0x00, 0xff, 0xff, 0x96, + 0x6d, 0x75, 0x5c, 0xd5, 0x45, 0x00, 0x00, } diff --git a/livekit/livekit_webhook.pb.go b/livekit/livekit_webhook.pb.go index 4966b69d..21251508 100644 --- a/livekit/livekit_webhook.pb.go +++ b/livekit/livekit_webhook.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: livekit_webhook.proto package livekit diff --git a/replay/cloud_replay.pb.go b/replay/cloud_replay.pb.go index 79f0fa20..25326c20 100644 --- a/replay/cloud_replay.pb.go +++ b/replay/cloud_replay.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: cloud_replay.proto package replay diff --git a/rpc/agent.pb.go b/rpc/agent.pb.go index ff74d5cc..71db5934 100644 --- a/rpc/agent.pb.go +++ b/rpc/agent.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/agent.proto package rpc diff --git a/rpc/agent_dispatch.pb.go b/rpc/agent_dispatch.pb.go index 8bf02b5a..c06b3631 100644 --- a/rpc/agent_dispatch.pb.go +++ b/rpc/agent_dispatch.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/agent_dispatch.proto package rpc diff --git a/rpc/analytics.pb.go b/rpc/analytics.pb.go index 0dfb4b27..655d51ae 100644 --- a/rpc/analytics.pb.go +++ b/rpc/analytics.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/analytics.proto package rpc diff --git a/rpc/analytics_grpc.pb.go b/rpc/analytics_grpc.pb.go index 6217bb43..f59684f3 100644 --- a/rpc/analytics_grpc.pb.go +++ b/rpc/analytics_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.5.1 -// - protoc v4.23.4 +// - protoc v5.29.3 // source: rpc/analytics.proto package rpc diff --git a/rpc/egress.pb.go b/rpc/egress.pb.go index a8bb36c6..cd5d763a 100644 --- a/rpc/egress.pb.go +++ b/rpc/egress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/egress.proto package rpc diff --git a/rpc/ingress.pb.go b/rpc/ingress.pb.go index a423e58e..72ce9d47 100644 --- a/rpc/ingress.pb.go +++ b/rpc/ingress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/ingress.proto package rpc diff --git a/rpc/io.pb.go b/rpc/io.pb.go index 63e13128..d82a71dc 100644 --- a/rpc/io.pb.go +++ b/rpc/io.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/io.proto package rpc diff --git a/rpc/keepalive.pb.go b/rpc/keepalive.pb.go index 4343fe09..e5509237 100644 --- a/rpc/keepalive.pb.go +++ b/rpc/keepalive.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/keepalive.proto package rpc diff --git a/rpc/participant.pb.go b/rpc/participant.pb.go index 30bc4652..36920980 100644 --- a/rpc/participant.pb.go +++ b/rpc/participant.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/participant.proto package rpc diff --git a/rpc/rest_signal.pb.go b/rpc/rest_signal.pb.go index 5cd0515f..7f4cbba2 100644 --- a/rpc/rest_signal.pb.go +++ b/rpc/rest_signal.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/rest_signal.proto package rpc diff --git a/rpc/room.pb.go b/rpc/room.pb.go index 1f30939c..95468f44 100644 --- a/rpc/room.pb.go +++ b/rpc/room.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/room.proto package rpc diff --git a/rpc/roommanager.pb.go b/rpc/roommanager.pb.go index 9c6b087c..5b3a7b36 100644 --- a/rpc/roommanager.pb.go +++ b/rpc/roommanager.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/roommanager.proto package rpc diff --git a/rpc/signal.pb.go b/rpc/signal.pb.go index 836c731e..26d31046 100644 --- a/rpc/signal.pb.go +++ b/rpc/signal.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/signal.proto package rpc diff --git a/rpc/sip.pb.go b/rpc/sip.pb.go index f3e26ebb..fa65dd2b 100644 --- a/rpc/sip.pb.go +++ b/rpc/sip.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v4.23.4 +// protoc v5.29.3 // source: rpc/sip.proto package rpc From 6eb1a765efb4f6d3f3bf711d540e496b78eb3e2e Mon Sep 17 00:00:00 2001 From: Nishad Musthafa Date: Sun, 29 Jun 2025 23:01:49 -0700 Subject: [PATCH 3/4] Adding changeset --- .changeset/tidy-spoons-raise.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/tidy-spoons-raise.md diff --git a/.changeset/tidy-spoons-raise.md b/.changeset/tidy-spoons-raise.md new file mode 100644 index 00000000..cde5032f --- /dev/null +++ b/.changeset/tidy-spoons-raise.md @@ -0,0 +1,5 @@ +--- +"github.com/livekit/protocol": major +--- + +Adding support for dynamic dispatch rules From c71f9553b08afccaf733290e3ebc59bdc6182b64 Mon Sep 17 00:00:00 2001 From: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Date: Mon, 30 Jun 2025 06:03:03 +0000 Subject: [PATCH 4/4] generated protobuf --- infra/link.pb.go | 2 +- infra/link_grpc.pb.go | 2 +- livekit/livekit_agent.pb.go | 2 +- livekit/livekit_agent_dispatch.pb.go | 2 +- livekit/livekit_analytics.pb.go | 2 +- livekit/livekit_cloud_agent.pb.go | 2 +- livekit/livekit_egress.pb.go | 2 +- livekit/livekit_ingress.pb.go | 2 +- livekit/livekit_internal.pb.go | 2 +- livekit/livekit_metrics.pb.go | 2 +- livekit/livekit_models.pb.go | 2 +- livekit/livekit_room.pb.go | 2 +- livekit/livekit_rtc.pb.go | 2 +- livekit/livekit_sip.pb.go | 2 +- livekit/livekit_webhook.pb.go | 2 +- replay/cloud_replay.pb.go | 2 +- rpc/agent.pb.go | 2 +- rpc/agent_dispatch.pb.go | 2 +- rpc/analytics.pb.go | 2 +- rpc/analytics_grpc.pb.go | 2 +- rpc/egress.pb.go | 2 +- rpc/ingress.pb.go | 2 +- rpc/io.pb.go | 2 +- rpc/keepalive.pb.go | 2 +- rpc/participant.pb.go | 2 +- rpc/rest_signal.pb.go | 2 +- rpc/room.pb.go | 2 +- rpc/roommanager.pb.go | 2 +- rpc/signal.pb.go | 2 +- rpc/sip.pb.go | 2 +- 30 files changed, 30 insertions(+), 30 deletions(-) diff --git a/infra/link.pb.go b/infra/link.pb.go index a6f0840f..3f515496 100644 --- a/infra/link.pb.go +++ b/infra/link.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: infra/link.proto package infra diff --git a/infra/link_grpc.pb.go b/infra/link_grpc.pb.go index 6cacc86d..281cec95 100644 --- a/infra/link_grpc.pb.go +++ b/infra/link_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.5.1 -// - protoc v5.29.3 +// - protoc v4.23.4 // source: infra/link.proto package infra diff --git a/livekit/livekit_agent.pb.go b/livekit/livekit_agent.pb.go index f9abf9f5..262000f9 100644 --- a/livekit/livekit_agent.pb.go +++ b/livekit/livekit_agent.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_agent.proto package livekit diff --git a/livekit/livekit_agent_dispatch.pb.go b/livekit/livekit_agent_dispatch.pb.go index a61bc8d2..1d3e88ff 100644 --- a/livekit/livekit_agent_dispatch.pb.go +++ b/livekit/livekit_agent_dispatch.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_agent_dispatch.proto package livekit diff --git a/livekit/livekit_analytics.pb.go b/livekit/livekit_analytics.pb.go index e8c4a847..e26aa158 100644 --- a/livekit/livekit_analytics.pb.go +++ b/livekit/livekit_analytics.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_analytics.proto package livekit diff --git a/livekit/livekit_cloud_agent.pb.go b/livekit/livekit_cloud_agent.pb.go index 21d80c00..5e651996 100644 --- a/livekit/livekit_cloud_agent.pb.go +++ b/livekit/livekit_cloud_agent.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_cloud_agent.proto package livekit diff --git a/livekit/livekit_egress.pb.go b/livekit/livekit_egress.pb.go index ce4f880e..b0e9b64d 100644 --- a/livekit/livekit_egress.pb.go +++ b/livekit/livekit_egress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_egress.proto package livekit diff --git a/livekit/livekit_ingress.pb.go b/livekit/livekit_ingress.pb.go index 5fbd4402..d89b90b8 100644 --- a/livekit/livekit_ingress.pb.go +++ b/livekit/livekit_ingress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_ingress.proto package livekit diff --git a/livekit/livekit_internal.pb.go b/livekit/livekit_internal.pb.go index 8756cbed..7c5de6e4 100644 --- a/livekit/livekit_internal.pb.go +++ b/livekit/livekit_internal.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_internal.proto package livekit diff --git a/livekit/livekit_metrics.pb.go b/livekit/livekit_metrics.pb.go index 50da8ea7..24107c91 100644 --- a/livekit/livekit_metrics.pb.go +++ b/livekit/livekit_metrics.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_metrics.proto package livekit diff --git a/livekit/livekit_models.pb.go b/livekit/livekit_models.pb.go index e4eedd98..8d5af8b2 100644 --- a/livekit/livekit_models.pb.go +++ b/livekit/livekit_models.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_models.proto package livekit diff --git a/livekit/livekit_room.pb.go b/livekit/livekit_room.pb.go index 3fa04846..4da30539 100644 --- a/livekit/livekit_room.pb.go +++ b/livekit/livekit_room.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_room.proto package livekit diff --git a/livekit/livekit_rtc.pb.go b/livekit/livekit_rtc.pb.go index 68df1869..94efef7c 100644 --- a/livekit/livekit_rtc.pb.go +++ b/livekit/livekit_rtc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_rtc.proto package livekit diff --git a/livekit/livekit_sip.pb.go b/livekit/livekit_sip.pb.go index 7f5c170c..08eb23e1 100644 --- a/livekit/livekit_sip.pb.go +++ b/livekit/livekit_sip.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_sip.proto package livekit diff --git a/livekit/livekit_webhook.pb.go b/livekit/livekit_webhook.pb.go index 21251508..4966b69d 100644 --- a/livekit/livekit_webhook.pb.go +++ b/livekit/livekit_webhook.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: livekit_webhook.proto package livekit diff --git a/replay/cloud_replay.pb.go b/replay/cloud_replay.pb.go index 25326c20..79f0fa20 100644 --- a/replay/cloud_replay.pb.go +++ b/replay/cloud_replay.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: cloud_replay.proto package replay diff --git a/rpc/agent.pb.go b/rpc/agent.pb.go index 71db5934..ff74d5cc 100644 --- a/rpc/agent.pb.go +++ b/rpc/agent.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/agent.proto package rpc diff --git a/rpc/agent_dispatch.pb.go b/rpc/agent_dispatch.pb.go index c06b3631..8bf02b5a 100644 --- a/rpc/agent_dispatch.pb.go +++ b/rpc/agent_dispatch.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/agent_dispatch.proto package rpc diff --git a/rpc/analytics.pb.go b/rpc/analytics.pb.go index 655d51ae..0dfb4b27 100644 --- a/rpc/analytics.pb.go +++ b/rpc/analytics.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/analytics.proto package rpc diff --git a/rpc/analytics_grpc.pb.go b/rpc/analytics_grpc.pb.go index f59684f3..6217bb43 100644 --- a/rpc/analytics_grpc.pb.go +++ b/rpc/analytics_grpc.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.5.1 -// - protoc v5.29.3 +// - protoc v4.23.4 // source: rpc/analytics.proto package rpc diff --git a/rpc/egress.pb.go b/rpc/egress.pb.go index cd5d763a..a8bb36c6 100644 --- a/rpc/egress.pb.go +++ b/rpc/egress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/egress.proto package rpc diff --git a/rpc/ingress.pb.go b/rpc/ingress.pb.go index 72ce9d47..a423e58e 100644 --- a/rpc/ingress.pb.go +++ b/rpc/ingress.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/ingress.proto package rpc diff --git a/rpc/io.pb.go b/rpc/io.pb.go index d82a71dc..63e13128 100644 --- a/rpc/io.pb.go +++ b/rpc/io.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/io.proto package rpc diff --git a/rpc/keepalive.pb.go b/rpc/keepalive.pb.go index e5509237..4343fe09 100644 --- a/rpc/keepalive.pb.go +++ b/rpc/keepalive.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/keepalive.proto package rpc diff --git a/rpc/participant.pb.go b/rpc/participant.pb.go index 36920980..30bc4652 100644 --- a/rpc/participant.pb.go +++ b/rpc/participant.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/participant.proto package rpc diff --git a/rpc/rest_signal.pb.go b/rpc/rest_signal.pb.go index 7f4cbba2..5cd0515f 100644 --- a/rpc/rest_signal.pb.go +++ b/rpc/rest_signal.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/rest_signal.proto package rpc diff --git a/rpc/room.pb.go b/rpc/room.pb.go index 95468f44..1f30939c 100644 --- a/rpc/room.pb.go +++ b/rpc/room.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/room.proto package rpc diff --git a/rpc/roommanager.pb.go b/rpc/roommanager.pb.go index 5b3a7b36..9c6b087c 100644 --- a/rpc/roommanager.pb.go +++ b/rpc/roommanager.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/roommanager.proto package rpc diff --git a/rpc/signal.pb.go b/rpc/signal.pb.go index 26d31046..836c731e 100644 --- a/rpc/signal.pb.go +++ b/rpc/signal.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/signal.proto package rpc diff --git a/rpc/sip.pb.go b/rpc/sip.pb.go index fa65dd2b..f3e26ebb 100644 --- a/rpc/sip.pb.go +++ b/rpc/sip.pb.go @@ -15,7 +15,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.36.6 -// protoc v5.29.3 +// protoc v4.23.4 // source: rpc/sip.proto package rpc