diff --git a/docs/specs/product/compass.md b/docs/specs/product/compass.md index d4fcba69d..48eb48565 100644 --- a/docs/specs/product/compass.md +++ b/docs/specs/product/compass.md @@ -926,6 +926,29 @@ read-modify-write on the message row. - **Then** the server returns not-found — the same result as a nonexistent ask, never a distinct not-authorized error. +### Requirement: An ask may name the issue or pull request it concerns + +An `Ask` MAY carry `ref`, one issue or pull request reference (`RIG-12` or +`owner/repo#12`). The server SHALL store it in canonical form (a forge ref +lowercased) and SHALL reject a `ref` that is not exactly one reference with +invalid-argument, storing nothing. The server SHALL return the stored `ref` on +every read of the ask, and `RespondToAsk` SHALL keep it on the answered ask and +on the answer's ask snapshot. The server SHALL NOT fill a default `ref`. + +#### Scenario: An ask ref survives the answer + +- **Given** an ask posted with `ref` `RigelBuild/Compass#12` +- **When** a member answers it with `RespondToAsk` +- **Then** `ListMessages` returns the ask and the answer snapshot, each with + `ref` `rigelbuild/compass#12`. + +#### Scenario: A malformed ask ref is refused + +- **Given** an ask whose `ref` is `see RIG-12` +- **When** the caller posts it with `PostMessage` +- **Then** the server returns invalid-argument and the channel has no new + message. + ### Requirement: Channel membership carries a separate subscribe opt-in `UpdateChannelMembers` SHALL manage both the channel's member set and each diff --git a/go/gen/compass/v1/comms.pb.go b/go/gen/compass/v1/comms.pb.go index f640eff50..553c6ccc5 100644 --- a/go/gen/compass/v1/comms.pb.go +++ b/go/gen/compass/v1/comms.pb.go @@ -1871,7 +1871,12 @@ type Ask struct { // Server-owned: set only by the server, on RespondToAsk. A value supplied on // an inbound Ask (via PostMessage) is IGNORED — an ask being posted has by // definition not been answered. - Answered bool `protobuf:"varint,3,opt,name=answered,proto3" json:"answered,omitempty"` + Answered bool `protobuf:"varint,3,opt,name=answered,proto3" json:"answered,omitempty"` + // The issue or pull request this ask concerns, as one ref (RIG-12 or + // owner/repo#12). Optional. The server stores it in canonical form and + // rejects a value that is not exactly one ref with invalid_argument. Set only + // by the asker; the server never fills a default. + Ref string `protobuf:"bytes,4,opt,name=ref,proto3" json:"ref,omitempty"` unknownFields protoimpl.UnknownFields sizeCache protoimpl.SizeCache } @@ -1927,6 +1932,13 @@ func (x *Ask) GetAnswered() bool { return false } +func (x *Ask) GetRef() string { + if x != nil { + return x.Ref + } + return "" +} + // One question within an Ask, carrying its own options and answer state. type AskQuestion struct { state protoimpl.MessageState `protogen:"open.v1"` @@ -7405,11 +7417,12 @@ const file_compass_v1_comms_proto_rawDesc = "" + "\x05block\"]\n" + "\x0eAskAnswerBlock\x12!\n" + "\x03ask\x18\x01 \x01(\v2\x0f.compass.v1.AskR\x03ask\x12(\n" + - "\x10asker_account_id\x18\x02 \x01(\tR\x0easkerAccountId\"o\n" + + "\x10asker_account_id\x18\x02 \x01(\tR\x0easkerAccountId\"\x81\x01\n" + "\x03Ask\x12\x15\n" + "\x06ask_id\x18\x01 \x01(\tR\x05askId\x125\n" + "\tquestions\x18\x02 \x03(\v2\x17.compass.v1.AskQuestionR\tquestions\x12\x1a\n" + - "\banswered\x18\x03 \x01(\bR\banswered\"\xdb\x02\n" + + "\banswered\x18\x03 \x01(\bR\banswered\x12\x10\n" + + "\x03ref\x18\x04 \x01(\tR\x03ref\"\xdb\x02\n" + "\vAskQuestion\x12\x1f\n" + "\vquestion_id\x18\x01 \x01(\tR\n" + "questionId\x12\x1a\n" + diff --git a/go/internal/comms/agent_update_helper_pgtest_test.go b/go/internal/comms/agent_update_helper_pgtest_test.go index ceb4039af..77e41c07e 100644 --- a/go/internal/comms/agent_update_helper_pgtest_test.go +++ b/go/internal/comms/agent_update_helper_pgtest_test.go @@ -98,7 +98,12 @@ func updateBlocksFromWire(blocks []*compassv1.MessageBlock) ([]store.MessageBloc if body == nil { return nil, connect.NewError(connect.CodeInvalidArgument, errEmptyBlock) } - out = append(out, store.MessageBlock{Ask: &store.Ask{AskID: body.Ask.GetAskId(), Questions: askQuestionsFromWire(body.Ask)}}) + ask, err := askFromWire(body.Ask) + if err != nil { + return nil, err + } + ask.AskID = body.Ask.GetAskId() + out = append(out, store.MessageBlock{Ask: ask}) case *compassv1.MessageBlock_AskAnswer: return nil, connect.NewError(connect.CodeInvalidArgument, errServerOwnedBlock) default: diff --git a/go/internal/comms/ask_mapping_test.go b/go/internal/comms/ask_mapping_test.go index 4aec9d664..2b18fecc0 100644 --- a/go/internal/comms/ask_mapping_test.go +++ b/go/internal/comms/ask_mapping_test.go @@ -14,6 +14,7 @@ import ( "strconv" "testing" + "connectrpc.com/connect" "google.golang.org/protobuf/reflect/protoreflect" compassv1 "github.com/RigelBuild/compass/go/gen/compass/v1" @@ -40,7 +41,7 @@ func fieldSet(names ...protoreflect.Name) map[protoreflect.Name]struct{} { var ( askOwnership = askFieldOwnership{ - content: fieldSet("questions"), + content: fieldSet("questions", "ref"), serverOwned: fieldSet("ask_id", "answered"), } askQuestionOwnership = askFieldOwnership{ @@ -76,7 +77,14 @@ func TestAskFromWireDropsEveryServerOwnedField(t *testing.T) { t.Fatalf("reflection populated %d questions, want 2", len(wire.GetQuestions())) } - got := askFromWire(wire) + // Reflection fills ref with text that is not a ref; use a valid mixed-case + // one so the content assertion also checks canonicalization. + wire.Ref = "RigelBuild/Compass#12" + + got, err := askFromWire(wire) + if err != nil { + t.Fatalf("askFromWire: %v", err) + } // Server-owned: dropped. if got.AskID != "" { @@ -87,6 +95,9 @@ func TestAskFromWireDropsEveryServerOwnedField(t *testing.T) { } // Content: survives, with the values reflection set. + if got.Ref != "rigelbuild/compass#12" { + t.Errorf("Ref = %q, want the canonical %q", got.Ref, "rigelbuild/compass#12") + } if len(got.Questions) != len(wire.GetQuestions()) { t.Fatalf("Questions length = %d, want %d", len(got.Questions), len(wire.GetQuestions())) } @@ -268,3 +279,35 @@ func nonZeroScalar(t *testing.T, fd protoreflect.FieldDescriptor, suffix string) return protoreflect.Value{} } } + +// TestAskFromWireRef pins the ref edge: an absent ref stays empty, a ref is +// stored canonical, and anything that is not exactly one ref is refused. +func TestAskFromWireRef(t *testing.T) { + for _, tc := range []struct { + name, in, want string + wantErr bool + }{ + {name: "absent", in: "", want: ""}, + {name: "tracker key", in: "RIG-12", want: "RIG-12"}, + {name: "forge ref lowercased", in: "Owner/Repo#7", want: "owner/repo#7"}, + {name: "free text", in: "see RIG-12", wantErr: true}, + {name: "two refs", in: "RIG-12 RIG-13", wantErr: true}, + {name: "url", in: "https://github.com/o/r/pull/1", wantErr: true}, + } { + t.Run(tc.name, func(t *testing.T) { + got, err := askFromWire(&compassv1.Ask{Ref: tc.in}) + if tc.wantErr { + if connect.CodeOf(err) != connect.CodeInvalidArgument { + t.Fatalf("askFromWire(%q) err = %v, want invalid_argument", tc.in, err) + } + return + } + if err != nil { + t.Fatalf("askFromWire(%q): %v", tc.in, err) + } + if got.Ref != tc.want { + t.Fatalf("Ref = %q, want %q", got.Ref, tc.want) + } + }) + } +} diff --git a/go/internal/comms/ask_ref_pgtest_test.go b/go/internal/comms/ask_ref_pgtest_test.go new file mode 100644 index 000000000..40a6674b4 --- /dev/null +++ b/go/internal/comms/ask_ref_pgtest_test.go @@ -0,0 +1,119 @@ +//go:build pgtest + +package comms + +import ( + "context" + "testing" + + "connectrpc.com/connect" + + compassv1 "github.com/RigelBuild/compass/go/gen/compass/v1" + "github.com/RigelBuild/compass/go/internal/store" +) + +func askWithRef(ref string) *compassv1.MessageBlock { + return &compassv1.MessageBlock{Block: &compassv1.MessageBlock_Ask{Ask: &compassv1.Ask{ + Ref: ref, + Questions: []*compassv1.AskQuestion{{ + QuestionId: "q1", + Question: "Ship it?", + Options: []*compassv1.AskOption{{Id: "yes", Label: "yes"}}, + }}, + }}} +} + +// TestAskRefRoundTrip posts an ask with a ref and follows it through the +// ListMessages read and RespondToAsk: the ask and the answer snapshot both +// carry the canonical ref. +func TestAskRefRoundTrip(t *testing.T) { + svc, st := newHandler(t) + ctx := context.Background() + author := mustUser(t, st, "author") + ch, err := st.CreateChannel(ctx, author.ID, store.NewChannel{Name: "room", Kind: store.ChannelKindChannel}) + if err != nil { + t.Fatalf("CreateChannel: %v", err) + } + const want = "rigelbuild/compass#12" + posted, err := svc.PostMessage(WithActor(ctx, author.ID), connect.NewRequest(&compassv1.PostMessageRequest{ + Container: &compassv1.PostMessageRequest_ChannelId{ChannelId: string(ch.ID)}, + Topic: &compassv1.PostMessageRequest_TopicName{TopicName: testTopic}, + CreateTopic: true, + Blocks: []*compassv1.MessageBlock{askWithRef("RigelBuild/Compass#12")}, + })) + if err != nil { + t.Fatalf("PostMessage: %v", err) + } + ask := posted.Msg.GetMessage().GetBlocks()[0].GetAsk() + if ask.GetRef() != want { + t.Fatalf("posted ask ref = %q, want %q", ask.GetRef(), want) + } + + // refsOnWire reads the ask's ref and, once answered, the answer snapshot's + // ref off the ListMessages wire read. + refsOnWire := func() (askRef, answerRef string) { + t.Helper() + list, err := svc.ListMessages(WithActor(ctx, author.ID), connect.NewRequest(&compassv1.ListMessagesRequest{ + Container: &compassv1.ListMessagesRequest_ChannelId{ChannelId: string(ch.ID)}, + })) + if err != nil { + t.Fatalf("ListMessages: %v", err) + } + for _, m := range list.Msg.GetMessages() { + for _, b := range m.GetBlocks() { + if a := b.GetAsk(); a.GetAskId() == ask.GetAskId() { + askRef = a.GetRef() + } + if aa := b.GetAskAnswer(); aa.GetAsk().GetAskId() == ask.GetAskId() { + answerRef = aa.GetAsk().GetRef() + } + } + } + return askRef, answerRef + } + if got, _ := refsOnWire(); got != want { + t.Fatalf("ListMessages ask ref = %q, want %q", got, want) + } + + if _, err := svc.RespondToAsk(WithActor(ctx, author.ID), connect.NewRequest(&compassv1.RespondToAskRequest{ + AskId: ask.GetAskId(), + Answers: []*compassv1.AskQuestionAnswer{{QuestionId: "q1", ChosenOptionIds: []string{"yes"}}}, + })); err != nil { + t.Fatalf("RespondToAsk: %v", err) + } + askRef, answerRef := refsOnWire() + if askRef != want { + t.Fatalf("answered ask ref = %q, want %q", askRef, want) + } + if answerRef != want { + t.Fatalf("answer snapshot ref = %q, want %q", answerRef, want) + } +} + +// TestPostMessageRejectsMalformedAskRef refuses an ask ref that is not exactly +// one ref, and stores nothing. +func TestPostMessageRejectsMalformedAskRef(t *testing.T) { + svc, st := newHandler(t) + ctx := context.Background() + author := mustUser(t, st, "author") + ch, err := st.CreateChannel(ctx, author.ID, store.NewChannel{Name: "room", Kind: store.ChannelKindChannel}) + if err != nil { + t.Fatalf("CreateChannel: %v", err) + } + _, err = svc.PostMessage(WithActor(ctx, author.ID), connect.NewRequest(&compassv1.PostMessageRequest{ + Container: &compassv1.PostMessageRequest_ChannelId{ChannelId: string(ch.ID)}, + Topic: &compassv1.PostMessageRequest_TopicName{TopicName: testTopic}, + CreateTopic: true, + Blocks: []*compassv1.MessageBlock{askWithRef("see RIG-12")}, + })) + connectCodeIs(t, err, connect.CodeInvalidArgument, "post an ask with a malformed ref") + list, err := svc.ListMessages(WithActor(ctx, author.ID), connect.NewRequest(&compassv1.ListMessagesRequest{ + Container: &compassv1.ListMessagesRequest_ChannelId{ChannelId: string(ch.ID)}, + })) + if err != nil { + t.Fatalf("ListMessages: %v", err) + } + if len(list.Msg.GetMessages()) != 0 { + t.Fatalf("ListMessages = %d messages after a refused post, want 0", len(list.Msg.GetMessages())) + } +} diff --git a/go/internal/comms/mapping.go b/go/internal/comms/mapping.go index 32f072f86..340cb6e5c 100644 --- a/go/internal/comms/mapping.go +++ b/go/internal/comms/mapping.go @@ -10,6 +10,7 @@ import ( compassv1 "github.com/RigelBuild/compass/go/gen/compass/v1" "github.com/RigelBuild/compass/go/internal/fabric" + "github.com/RigelBuild/compass/go/internal/refs" "github.com/RigelBuild/compass/go/internal/store" ) @@ -285,7 +286,7 @@ func askToWire(a *store.Ask) *compassv1.Ask { TimedOut: q.TimedOut, } } - return &compassv1.Ask{AskId: a.AskID, Questions: questions, Answered: a.Answered} + return &compassv1.Ask{AskId: a.AskID, Questions: questions, Answered: a.Answered, Ref: a.Ref} } func accountIDsToWire(ids []store.AccountID) []string { @@ -418,7 +419,11 @@ func blocksFromWire(blocks []*compassv1.MessageBlock) ([]store.MessageBlock, err if body == nil { return nil, connect.NewError(connect.CodeInvalidArgument, errEmptyBlock) } - out = append(out, store.MessageBlock{Ask: askFromWire(body.Ask)}) + ask, err := askFromWire(body.Ask) + if err != nil { + return nil, err + } + out = append(out, store.MessageBlock{Ask: ask}) case *compassv1.MessageBlock_AskAnswer: // ask_answer is server-owned: constructed only by RespondToAsk. An // inbound one on the POST path is rejected at this edge — the only @@ -432,12 +437,28 @@ func blocksFromWire(blocks []*compassv1.MessageBlock) ([]store.MessageBlock, err return out, nil } -func askFromWire(a *compassv1.Ask) *store.Ask { +func askFromWire(a *compassv1.Ask) (*store.Ask, error) { + ref, err := askRefFromWire(a.GetRef()) + if err != nil { + return nil, err + } // ask_id is server-owned on the POST path: drop any caller-supplied value so // the store's mintAskIDs assigns a fresh, globally-unique id on append. Honoring // a wire value would let two posts share an ask_id, making RespondToAsk's // containment SELECT match multiple rows and answer a nondeterministic one. - return &store.Ask{AskID: "", Questions: askQuestionsFromWire(a)} + return &store.Ask{AskID: "", Ref: ref, Questions: askQuestionsFromWire(a)}, nil +} + +// askRefFromWire canonicalizes an ask's optional ref; "" means no ref. +func askRefFromWire(raw string) (string, error) { + if raw == "" { + return "", nil + } + r, err := refs.Parse(raw) + if err != nil { + return "", connect.NewError(connect.CodeInvalidArgument, fmt.Errorf("ask ref: %w", err)) + } + return r.String(), nil } // askQuestionsFromWire maps an ask's questions onto store types. diff --git a/packages/compass-agent/src/gen/compass/v1/comms_pb.ts b/packages/compass-agent/src/gen/compass/v1/comms_pb.ts index 569f61c33..18fe2d057 100644 --- a/packages/compass-agent/src/gen/compass/v1/comms_pb.ts +++ b/packages/compass-agent/src/gen/compass/v1/comms_pb.ts @@ -29,7 +29,7 @@ import type { Message as Message$1 } from "@bufbuild/protobuf"; * Describes the file compass/v1/comms.proto. */ export const file_compass_v1_comms: GenFile = /*@__PURE__*/ - fileDesc("ChZjb21wYXNzL3YxL2NvbW1zLnByb3RvEgpjb21wYXNzLnYxIsQBCgdBY2NvdW50EgoKAmlkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSJwoEdXNlchgKIAEoCzIXLmNvbXBhc3MudjEuVXNlckFjY291bnRIABIpCgVhZ2VudBgLIAEoCzIYLmNvbXBhc3MudjEuQWdlbnRBY2NvdW50SAASKwoGc3lzdGVtGAwgASgLMhkuY29tcGFzcy52MS5TeXN0ZW1BY2NvdW50SABCBgoEa2luZCIPCg1TeXN0ZW1BY2NvdW50IjEKC1VzZXJBY2NvdW50EiIKBHJvbGUYASABKA4yFC5jb21wYXNzLnYxLlVzZXJSb2xlIlcKDEFnZW50QWNjb3VudBIVCg1vd25lcl91c2VyX2lkGAEgASgJEhcKD2hvbWVfY2hhbm5lbF9pZBgCIAEoCRIXCg9wYXJlbnRfYWdlbnRfaWQYAyABKAkikAEKDENoYW5uZWxHcm91cBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD3BhcmVudF9ncm91cF9pZBgDIAEoCRIVCg1vd25lcl91c2VyX2lkGAQgASgJEjYKCnZpc2liaWxpdHkYBSABKA4yIi5jb21wYXNzLnYxLkNoYW5uZWxHcm91cFZpc2liaWxpdHkijAMKB0NoYW5uZWwSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghncm91cF9pZBgDIAEoCRIlCgRraW5kGAQgASgOMhcuY29tcGFzcy52MS5DaGFubmVsS2luZBIaChJtZW1iZXJfYWNjb3VudF9pZHMYBSADKAkSHgoWc3Vic2NyaWJlcl9hY2NvdW50X2lkcxgGIAMoCRIyCgtwb3N0X3BvbGljeRgHIAEoDjIdLmNvbXBhc3MudjEuQ2hhbm5lbFBvc3RQb2xpY3kSGAoQb3duZXJfYWNjb3VudF9pZBgIIAEoCRIeChZtYW5kYXRvcnlfc3Vic2NyaXB0aW9uGAkgASgIEi8KDnBpbm5lZF9lbnRyaWVzGAogAygLMhcuY29tcGFzcy52MS5QaW5uZWRFbnRyeRIXCg9wYXJlbnRfYWdlbnRfaWQYCyABKAkSOgoPbWVtYmVyc2hpcF9tb2RlGAwgASgOMiEuY29tcGFzcy52MS5DaGFubmVsTWVtYmVyc2hpcE1vZGUibAoLUGlubmVkRW50cnkSEgoKbWVzc2FnZV9pZBgBIAEoCRIQCghwb3NpdGlvbhgCIAEoBRIZChFwaW5uZWRfYXRfdW5peF9tcxgDIAEoAxIcChRwaW5uZWRfYnlfYWNjb3VudF9pZBgEIAEoCSI2Cg5BZ2VudFdvcmtzcGFjZRIKCgJpZBgBIAEoCRIYChBhZ2VudF9hY2NvdW50X2lkGAIgASgJIvIBCgVUb3BpYxIKCgJpZBgBIAEoCRISCgpjaGFubmVsX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSGgoSY3JlYXRlZF9hdF91bml4X21zGAQgASgDEh0KFWNyZWF0ZWRfYnlfYWNjb3VudF9pZBgFIAEoCRIQCghhcmNoaXZlZBgGIAEoCBIaCg1tZXNzYWdlX2NvdW50GAcgASgESACIAQESJAoXbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMYCCABKANIAYgBAUIQCg5fbWVzc2FnZV9jb3VudEIaChhfbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMiwgEKB01lc3NhZ2USCgoCaWQYASABKAkSEAoIdG9waWNfaWQYAiABKAkSGQoRYXV0aG9yX2FjY291bnRfaWQYAyABKAkSEgoKYXRfdW5peF9tcxgEIAEoAxIoCgZibG9ja3MYBSADKAsyGC5jb21wYXNzLnYxLk1lc3NhZ2VCbG9jaxIVCg1hdXRob3JfaGFuZGxlGAYgASgJEhIKCmNoYW5uZWxfaWQYByABKAkSFQoNdHVybl9zZXF1ZW5jZRgIIAEoBCJ5CgxNZXNzYWdlQmxvY2sSDgoEdGV4dBgBIAEoCUgAEh4KA2FzaxgCIAEoCzIPLmNvbXBhc3MudjEuQXNrSAASMAoKYXNrX2Fuc3dlchgDIAEoCzIaLmNvbXBhc3MudjEuQXNrQW5zd2VyQmxvY2tIAEIHCgVibG9jayJICg5Bc2tBbnN3ZXJCbG9jaxIcCgNhc2sYASABKAsyDy5jb21wYXNzLnYxLkFzaxIYChBhc2tlcl9hY2NvdW50X2lkGAIgASgJIlMKA0FzaxIOCgZhc2tfaWQYASABKAkSKgoJcXVlc3Rpb25zGAIgAygLMhcuY29tcGFzcy52MS5Bc2tRdWVzdGlvbhIQCghhbnN3ZXJlZBgDIAEoCCLxAQoLQXNrUXVlc3Rpb24SEwoLcXVlc3Rpb25faWQYASABKAkSEAoIcXVlc3Rpb24YAiABKAkSDgoGaGVhZGVyGAMgASgJEiYKB29wdGlvbnMYBCADKAsyFS5jb21wYXNzLnYxLkFza09wdGlvbhIWCg5hbGxvd19tdWx0aXBsZRgFIAEoCBIYCgtyZWNvbW1lbmRlZBgGIAEoBUgAiAEBEhkKEWNob3Nlbl9vcHRpb25faWRzGAcgAygJEhMKC2N1c3RvbV90ZXh0GAggASgJEhEKCXRpbWVkX291dBgJIAEoCEIOCgxfcmVjb21tZW5kZWQiTAoJQXNrT3B0aW9uEgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg8KB3ByZXZpZXcYBCABKAkixwUKFlN1YnNjcmliZUNvbW1zUmVzcG9uc2USCwoDc2VxGAEgASgEEhIKCmF0X3VuaXhfbXMYAiABKAMSFgoOaW5zdGFuY2VfZXBvY2gYAyABKAQSFAoMc25hcHNob3Rfc2VxGAQgASgEEjMKDm1lc3NhZ2VfcG9zdGVkGAogASgLMhkuY29tcGFzcy52MS5NZXNzYWdlUG9zdGVkSAASNQoPbWVzc2FnZV91cGRhdGVkGAsgASgLMhouY29tcGFzcy52MS5NZXNzYWdlVXBkYXRlZEgAEjUKD2NoYW5uZWxfY2hhbmdlZBgMIAEoCzIaLmNvbXBhc3MudjEuQ2hhbm5lbENoYW5nZWRIABJAChVjaGFubmVsX2dyb3VwX2NoYW5nZWQYDSABKAsyHy5jb21wYXNzLnYxLkNoYW5uZWxHcm91cENoYW5nZWRIABI1Cg9hY2NvdW50X2NoYW5nZWQYDiABKAsyGi5jb21wYXNzLnYxLkFjY291bnRDaGFuZ2VkSAASRAoXYWdlbnRfd29ya3NwYWNlX2NoYW5nZWQYDyABKAsyIS5jb21wYXNzLnYxLkFnZW50V29ya3NwYWNlQ2hhbmdlZEgAEjoKD3Jlc3luY19yZXF1aXJlZBgQIAEoCzIfLmNvbXBhc3MudjEuQ29tbXNSZXN5bmNSZXF1aXJlZEgAEkIKFmFnZW50X3ByZXNlbmNlX2NoYW5nZWQYESABKAsyIC5jb21wYXNzLnYxLkFnZW50UHJlc2VuY2VDaGFuZ2VkSAASMwoOdG9waWNfdXBzZXJ0ZWQYEiABKAsyGS5jb21wYXNzLnYxLlRvcGljVXBzZXJ0ZWRIABI8ChNhZ2VudF9ib2FyZF9jaGFuZ2VkGBMgASgLMh0uY29tcGFzcy52MS5BZ2VudEJvYXJkQ2hhbmdlZEgAQgkKB3BheWxvYWQiTAoNTWVzc2FnZVBvc3RlZBIkCgdtZXNzYWdlGAEgASgLMhMuY29tcGFzcy52MS5NZXNzYWdlEhUKDXR1cm5fc2VxdWVuY2UYAiABKAQiNgoOTWVzc2FnZVVwZGF0ZWQSJAoHbWVzc2FnZRgBIAEoCzITLmNvbXBhc3MudjEuTWVzc2FnZSIxCg1Ub3BpY1Vwc2VydGVkEiAKBXRvcGljGAEgASgLMhEuY29tcGFzcy52MS5Ub3BpYyJTCg5DaGFubmVsQ2hhbmdlZBIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsEhsKE3JlbW92ZWRfYWNjb3VudF9pZHMYAiADKAkiPgoTQ2hhbm5lbEdyb3VwQ2hhbmdlZBInCgVncm91cBgBIAEoCzIYLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwIjYKDkFjY291bnRDaGFuZ2VkEiQKB2FjY291bnQYASABKAsyEy5jb21wYXNzLnYxLkFjY291bnQiRgoVQWdlbnRXb3Jrc3BhY2VDaGFuZ2VkEi0KCXdvcmtzcGFjZRgBIAEoCzIaLmNvbXBhc3MudjEuQWdlbnRXb3Jrc3BhY2UiFQoTQ29tbXNSZXN5bmNSZXF1aXJlZCJvChRBZ2VudFByZXNlbmNlQ2hhbmdlZBIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEisKCHByZXNlbmNlGAIgASgOMhkuY29tcGFzcy52MS5BZ2VudFByZXNlbmNlEhAKCGFjdGl2aXR5GAMgASgJIncKDEJvYXJkV2FpdGluZxImCgJvbhgBIAEoDjIaLmNvbXBhc3MudjEuQm9hcmRXYWl0aW5nT24SFAoMYWdlbnRfaGFuZGxlGAIgASgJEgwKBHdoYXQYAyABKAkSCwoDcmVmGAQgASgJEg4KBmJsb2NrcxgFIAMoCSKFAQoNQm9hcmRTdWJhZ2VudBIKCgJpZBgBIAEoCRINCgVhZ2VudBgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIOCgZzdGF0dXMYBCABKAkSGgoSc3RhcnRlZF9hdF91bml4X21zGAUgASgDEhgKEGVuZGVkX2F0X3VuaXhfbXMYBiABKAMi+AEKCUJvYXJkVGFzaxILCgNrZXkYASABKAkSDQoFdGl0bGUYAiABKAkSEwoLcHJpbWFyeV9yZWYYAyABKAkSDAoEcmVmcxgEIAMoCRIpCgVzdGF0ZRgFIAEoDjIaLmNvbXBhc3MudjEuQm9hcmRUYXNrU3RhdGUSDAoEbm90ZRgGIAEoCRIpCgd3YWl0aW5nGAcgAygLMhguY29tcGFzcy52MS5Cb2FyZFdhaXRpbmcSLAoJc3ViYWdlbnRzGAggAygLMhkuY29tcGFzcy52MS5Cb2FyZFN1YmFnZW50EhoKEndyaXR0ZW5fYXRfdW5peF9tcxgJIAEoAyIdCgtCb2FyZFJlZnNPcBIOCgZ2YWx1ZXMYASADKAkiOgoOQm9hcmRXYWl0aW5nT3ASKAoGdmFsdWVzGAEgAygLMhguY29tcGFzcy52MS5Cb2FyZFdhaXRpbmcixAIKDkJvYXJkVGFza1BhdGNoEgsKA2tleRgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhgKC3ByaW1hcnlfcmVmGAMgASgJSAGIAQESLgoFc3RhdGUYBCABKA4yGi5jb21wYXNzLnYxLkJvYXJkVGFza1N0YXRlSAKIAQESEQoEbm90ZRgFIAEoCUgDiAEBEiUKBHJlZnMYBiABKAsyFy5jb21wYXNzLnYxLkJvYXJkUmVmc09wEisKB3dhaXRpbmcYByABKAsyGi5jb21wYXNzLnYxLkJvYXJkV2FpdGluZ09wEjMKEHVwc2VydF9zdWJhZ2VudHMYCCADKAsyGS5jb21wYXNzLnYxLkJvYXJkU3ViYWdlbnRCCAoGX3RpdGxlQg4KDF9wcmltYXJ5X3JlZkIICgZfc3RhdGVCBwoFX25vdGUiUQoJQm9hcmRIYWx0EicKBGtpbmQYASABKA4yGS5jb21wYXNzLnYxLkJvYXJkSGFsdEtpbmQSCwoDcmVmGAIgASgJEg4KBnJlYXNvbhgDIAEoCSKPAwoIQm9hcmRSZWYSCwoDcmVmGAEgASgJEiYKBGtpbmQYAiABKA4yGC5jb21wYXNzLnYxLkJvYXJkUmVmS2luZBINCgV0aXRsZRgDIAEoCRILCgN1cmwYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSKwoLaXNzdWVfc3RhdGUYBiABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSDQoFZHJhZnQYByABKAgSFAoMY2hlY2tzX3N0YXRlGAggASgJEiUKBGdhdGUYCSABKA4yFy5jb21wYXNzLnYxLkJvYXJkUHJHYXRlEhUKDXN0YWNrX3RpcF9yZWYYCiABKAkSFgoOc3RhY2tfcG9zaXRpb24YCyABKA0SDQoFb3duZWQYDCABKAgSGwoTb2JzZXJ2ZWRfYXRfdW5peF9tcxgNIAEoAxIZChFtZXJnZV9xdWV1ZV9zdGF0ZRgOIAEoCRIWCg5zdGFsZV9hcHByb3ZhbBgPIAEoCBIWCg50cmFja2VyX3N0YXR1cxgQIAEoCSKMAQoIQm9hcmRBc2sSDgoGYXNrX2lkGAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkSEgoKY2hhbm5lbF9pZBgDIAEoCRILCgNyZWYYBCABKAkSDgoGaGVhZGVyGAUgASgJEhAKCGFuc3dlcmVkGAYgASgIEhkKEXBvc3RlZF9hdF91bml4X21zGAcgASgDItUCCgpBZ2VudEJvYXJkEhgKEGFnZW50X2FjY291bnRfaWQYASABKAkSDgoGaGFuZGxlGAIgASgJEhYKDmZvY3VzX3Rhc2tfa2V5GAMgASgJEiMKBGhhbHQYBCABKAsyFS5jb21wYXNzLnYxLkJvYXJkSGFsdBIkCgV0YXNrcxgFIAMoCzIVLmNvbXBhc3MudjEuQm9hcmRUYXNrEiIKBHJlZnMYBiADKAsyFC5jb21wYXNzLnYxLkJvYXJkUmVmEhYKDnVudHJhY2tlZF9yZWZzGAcgAygJEiIKBGFza3MYCCADKAsyFC5jb21wYXNzLnYxLkJvYXJkQXNrEhQKDHdyaXR0ZW5fdHVybhgJIAEoBBIaChJ3cml0dGVuX2F0X3VuaXhfbXMYCiABKAMSDQoFc3RhbGUYCyABKAgSGQoRbWF0Y2hlZF90YXNrX2tleXMYDCADKAkiowEKEUFnZW50Qm9hcmRTdW1tYXJ5Eg0KBWZvY3VzGAEgASgJEhIKCnRhc2tfY291bnQYAiABKA0SGwoTd2FpdGluZ19vbl9vcGVyYXRvchgDIAEoDRIjCgRoYWx0GAQgASgLMhUuY29tcGFzcy52MS5Cb2FyZEhhbHQSGgoSd3JpdHRlbl9hdF91bml4X21zGAUgASgDEg0KBXN0YWxlGAYgASgIIvgBChdVcGRhdGVBZ2VudEJvYXJkUmVxdWVzdBIwCgx1cHNlcnRfdGFza3MYASADKAsyGi5jb21wYXNzLnYxLkJvYXJkVGFza1BhdGNoEhgKEHJlbW92ZV90YXNrX2tleXMYAiADKAkSGwoOZm9jdXNfdGFza19rZXkYAyABKAlIAIgBARIjCgRoYWx0GAQgASgLMhUuY29tcGFzcy52MS5Cb2FyZEhhbHQSEgoKY2xlYXJfaGFsdBgFIAEoCBIVCg10dXJuX3NlcXVlbmNlGAYgASgEEhEKCWF1dG9tYXRpYxgHIAEoCEIRCg9fZm9jdXNfdGFza19rZXkiQQoYVXBkYXRlQWdlbnRCb2FyZFJlc3BvbnNlEiUKBWJvYXJkGAEgASgLMhYuY29tcGFzcy52MS5BZ2VudEJvYXJkIt4BChZMaXN0QWdlbnRCb2FyZHNSZXF1ZXN0EhUKDWFnZW50X2hhbmRsZXMYASADKAkSDQoFcXVlcnkYAiABKAkSCwoDcmVmGAMgASgJEi4KCndhaXRpbmdfb24YBCABKA4yGi5jb21wYXNzLnYxLkJvYXJkV2FpdGluZ09uEikKBXN0YXRlGAUgASgOMhouY29tcGFzcy52MS5Cb2FyZFRhc2tTdGF0ZRInCgRoYWx0GAYgASgOMhkuY29tcGFzcy52MS5Cb2FyZEhhbHRLaW5kEg0KBWxpbWl0GAcgASgNIkEKF0xpc3RBZ2VudEJvYXJkc1Jlc3BvbnNlEiYKBmJvYXJkcxgBIAMoCzIWLmNvbXBhc3MudjEuQWdlbnRCb2FyZCJUChFBZ2VudEJvYXJkQ2hhbmdlZBIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEiUKBWJvYXJkGAIgASgLMhYuY29tcGFzcy52MS5BZ2VudEJvYXJkIlsKB1BlZXJpbmcSFwoPdXNlcl9hY2NvdW50X2lkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRInCgVzdGF0ZRgDIAEoDjIYLmNvbXBhc3MudjEuUGVlcmluZ1N0YXRlIikKEkFwcHJvdmVQZWVyUmVxdWVzdBITCgtwZWVyX2hhbmRsZRgBIAEoCSI7ChNBcHByb3ZlUGVlclJlc3BvbnNlEiQKB3BlZXJpbmcYASABKAsyEy5jb21wYXNzLnYxLlBlZXJpbmciKAoRUmV2b2tlUGVlclJlcXVlc3QSEwoLcGVlcl9oYW5kbGUYASABKAkiJQoSUmV2b2tlUGVlclJlc3BvbnNlEg8KB2RlbGV0ZWQYASABKAgiEgoQTGlzdFBlZXJzUmVxdWVzdCI6ChFMaXN0UGVlcnNSZXNwb25zZRIlCghwZWVyaW5ncxgBIAMoCzITLmNvbXBhc3MudjEuUGVlcmluZyI5ChFDcmVhdGVVc2VyUmVxdWVzdBIOCgZoYW5kbGUYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJIjoKEkNyZWF0ZVVzZXJSZXNwb25zZRIkCgdhY2NvdW50GAEgASgLMhMuY29tcGFzcy52MS5BY2NvdW50InAKEkNyZWF0ZUFnZW50UmVxdWVzdBIOCgZoYW5kbGUYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEhUKDXBhcmVudF9oYW5kbGUYAyABKAkSDAoEcm9sZRgEIAEoCRIPCgdwZXJzb25hGAUgASgJIjsKE0NyZWF0ZUFnZW50UmVzcG9uc2USJAoHYWNjb3VudBgBIAEoCzITLmNvbXBhc3MudjEuQWNjb3VudCIrChNMaXN0QWNjb3VudHNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCI9ChRMaXN0QWNjb3VudHNSZXNwb25zZRIlCghhY2NvdW50cxgBIAMoCzITLmNvbXBhc3MudjEuQWNjb3VudCKVAQoZQ3JlYXRlQ2hhbm5lbEdyb3VwUmVxdWVzdBIMCgRuYW1lGAEgASgJEhcKD3BhcmVudF9ncm91cF9pZBgCIAEoCRI2Cgp2aXNpYmlsaXR5GAMgASgOMiIuY29tcGFzcy52MS5DaGFubmVsR3JvdXBWaXNpYmlsaXR5EhkKEXBhcmVudF9ncm91cF9uYW1lGAQgASgJIkUKGkNyZWF0ZUNoYW5uZWxHcm91cFJlc3BvbnNlEicKBWdyb3VwGAEgASgLMhguY29tcGFzcy52MS5DaGFubmVsR3JvdXAiMAoYTGlzdENoYW5uZWxHcm91cHNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCJFChlMaXN0Q2hhbm5lbEdyb3Vwc1Jlc3BvbnNlEigKBmdyb3VwcxgBIAMoCzIYLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwIisKE0xpc3RDaGFubmVsc1JlcXVlc3QSFAoMc25hcHNob3Rfc2VxGAEgASgEIj0KFExpc3RDaGFubmVsc1Jlc3BvbnNlEiUKCGNoYW5uZWxzGAEgAygLMhMuY29tcGFzcy52MS5DaGFubmVsIuIBChRDcmVhdGVDaGFubmVsUmVxdWVzdBIMCgRuYW1lGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEiUKBGtpbmQYAyABKA4yFy5jb21wYXNzLnYxLkNoYW5uZWxLaW5kEhYKDm1lbWJlcl9oYW5kbGVzGAQgAygJEhsKE3BhcmVudF9hZ2VudF9oYW5kbGUYBSABKAkSOgoPbWVtYmVyc2hpcF9tb2RlGAYgASgOMiEuY29tcGFzcy52MS5DaGFubmVsTWVtYmVyc2hpcE1vZGUSEgoKZ3JvdXBfbmFtZRgHIAEoCSI9ChVDcmVhdGVDaGFubmVsUmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCLCAQobVXBkYXRlQ2hhbm5lbE1lbWJlcnNSZXF1ZXN0EhIKCmNoYW5uZWxfaWQYASABKAkSGgoSYWRkX21lbWJlcl9oYW5kbGVzGAIgAygJEh0KFXJlbW92ZV9tZW1iZXJfaGFuZGxlcxgDIAMoCRIZChFzdWJzY3JpYmVfaGFuZGxlcxgEIAMoCRIbChN1bnN1YnNjcmliZV9oYW5kbGVzGAUgAygJEhwKFGNvbnZlcnRfY2hhbm5lbF9uYW1lGAYgASgJIkQKHFVwZGF0ZUNoYW5uZWxNZW1iZXJzUmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCIkCg1PcGVuRE1SZXF1ZXN0EhMKC3BlZXJfaGFuZGxlGAEgASgJIkcKDk9wZW5ETVJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwSDwoHY3JlYXRlZBgCIAEoCCJHChRSZXBhcmVudEFnZW50UmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkSGQoRbmV3X3BhcmVudF9oYW5kbGUYAiABKAkiPQoVUmVwYXJlbnRBZ2VudFJlc3BvbnNlEiQKB2FjY291bnQYASABKAsyEy5jb21wYXNzLnYxLkFjY291bnQiTQoWUmVwYXJlbnRDaGFubmVsUmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEh8KF25ld19wYXJlbnRfYWdlbnRfaGFuZGxlGAIgASgJIj8KF1JlcGFyZW50Q2hhbm5lbFJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwilwEKF1NldENoYW5uZWxQb2xpY3lSZXF1ZXN0EhIKCmNoYW5uZWxfaWQYASABKAkSMgoLcG9zdF9wb2xpY3kYAiABKA4yHS5jb21wYXNzLnYxLkNoYW5uZWxQb3N0UG9saWN5EhQKDG93bmVyX2hhbmRsZRgDIAEoCRIeChZtYW5kYXRvcnlfc3Vic2NyaXB0aW9uGAQgASgIIkAKGFNldENoYW5uZWxQb2xpY3lSZXNwb25zZRIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsIlIKEEdldFJvc3RlclJlcXVlc3QSJgoFc2NvcGUYASABKA4yFy5jb21wYXNzLnYxLlJvc3RlclNjb3BlEhYKDnZhbnRhZ2VfaGFuZGxlGAIgASgJIj0KEUdldFJvc3RlclJlc3BvbnNlEigKB2VudHJpZXMYASADKAsyFy5jb21wYXNzLnYxLlJvc3RlckVudHJ5IvABCgtSb3N0ZXJFbnRyeRIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSFwoPcGFyZW50X2FnZW50X2lkGAQgASgJEisKCHByZXNlbmNlGAUgASgOMhkuY29tcGFzcy52MS5BZ2VudFByZXNlbmNlEhAKCGFjdGl2aXR5GAYgASgJEhsKE2FjdGl2aXR5X2F0X3VuaXhfbXMYByABKAMSLAoFYm9hcmQYCCABKAsyHS5jb21wYXNzLnYxLkFnZW50Qm9hcmRTdW1tYXJ5IncKGFVwZGF0ZVBpbm5lZEJvYXJkUmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEiUKA3BpbhgCIAEoCzIWLmNvbXBhc3MudjEuUGluTWVzc2FnZUgAEhoKEHVucGluX21lc3NhZ2VfaWQYAyABKAlIAEIECgJvcCI8CgpQaW5NZXNzYWdlEhIKCm1lc3NhZ2VfaWQYASABKAkSGgoScmVwbGFjZV9tZXNzYWdlX2lkGAIgASgJIkEKGVVwZGF0ZVBpbm5lZEJvYXJkUmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCIxChlPcGVuQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCSJLChpPcGVuQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRItCgl3b3Jrc3BhY2UYASABKAsyGi5jb21wYXNzLnYxLkFnZW50V29ya3NwYWNlIooBChNMaXN0TWVzc2FnZXNSZXF1ZXN0EhQKCmNoYW5uZWxfaWQYASABKAlIABINCgVsaW1pdBgCIAEoDRIZChFiZWZvcmVfbWVzc2FnZV9pZBgDIAEoCRIUCgxzbmFwc2hvdF9zZXEYBCABKAQSEAoIdG9waWNfaWQYBSABKAlCCwoJY29udGFpbmVyIj0KFExpc3RNZXNzYWdlc1Jlc3BvbnNlEiUKCG1lc3NhZ2VzGAEgAygLMhMuY29tcGFzcy52MS5NZXNzYWdlItwBChJQb3N0TWVzc2FnZVJlcXVlc3QSFAoKY2hhbm5lbF9pZBgBIAEoCUgAEigKBmJsb2NrcxgCIAMoCzIYLmNvbXBhc3MudjEuTWVzc2FnZUJsb2NrEhIKCHRvcGljX2lkGAMgASgJSAESFAoKdG9waWNfbmFtZRgEIAEoCUgBEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAUgASgJEhQKDGNyZWF0ZV90b3BpYxgGIAEoCBIVCg10dXJuX3NlcXVlbmNlGAcgASgEQgsKCWNvbnRhaW5lckIHCgV0b3BpYyI7ChNQb3N0TWVzc2FnZVJlc3BvbnNlEiQKB21lc3NhZ2UYASABKAsyEy5jb21wYXNzLnYxLk1lc3NhZ2UiQQoRTGlzdFRvcGljc1JlcXVlc3QSEgoKY2hhbm5lbF9pZBgBIAEoCRIYChBpbmNsdWRlX2FyY2hpdmVkGAIgASgIIjcKEkxpc3RUb3BpY3NSZXNwb25zZRIhCgZ0b3BpY3MYASADKAsyES5jb21wYXNzLnYxLlRvcGljImYKElVwZGF0ZVRvcGljUmVxdWVzdBIQCgh0b3BpY19pZBgBIAEoCRIRCgRuYW1lGAIgASgJSACIAQESFQoIYXJjaGl2ZWQYAyABKAhIAYgBAUIHCgVfbmFtZUILCglfYXJjaGl2ZWQiNwoTVXBkYXRlVG9waWNSZXNwb25zZRIgCgV0b3BpYxgBIAEoCzIRLmNvbXBhc3MudjEuVG9waWMiVQoTUmVzcG9uZFRvQXNrUmVxdWVzdBIOCgZhc2tfaWQYASABKAkSLgoHYW5zd2VycxgCIAMoCzIdLmNvbXBhc3MudjEuQXNrUXVlc3Rpb25BbnN3ZXIiWAoRQXNrUXVlc3Rpb25BbnN3ZXISEwoLcXVlc3Rpb25faWQYASABKAkSGQoRY2hvc2VuX29wdGlvbl9pZHMYAiADKAkSEwoLY3VzdG9tX3RleHQYAyABKAkiFgoUUmVzcG9uZFRvQXNrUmVzcG9uc2UiagoVU2VhcmNoTWVzc2FnZXNSZXF1ZXN0Eg0KBXF1ZXJ5GAEgASgJEhQKCmNoYW5uZWxfaWQYAiABKAlIABINCgVsaW1pdBgDIAEoDRIUCgxzbmFwc2hvdF9zZXEYBCABKARCBwoFc2NvcGUiPwoWU2VhcmNoTWVzc2FnZXNSZXNwb25zZRIlCghtZXNzYWdlcxgBIAMoCzITLmNvbXBhc3MudjEuTWVzc2FnZSJCChVTdWJzY3JpYmVDb21tc1JlcXVlc3QSEQoJc2luY2Vfc2VxGAEgASgEEhYKDmluc3RhbmNlX2Vwb2NoGAIgASgEKjUKCFVzZXJSb2xlEhQKEFVTRVJfUk9MRV9NRU1CRVIQABITCg9VU0VSX1JPTEVfQURNSU4QASphChZDaGFubmVsR3JvdXBWaXNpYmlsaXR5EiIKHkNIQU5ORUxfR1JPVVBfVklTSUJJTElUWV9PV05FUhAAEiMKH0NIQU5ORUxfR1JPVVBfVklTSUJJTElUWV9TSEFSRUQQASpVChFDaGFubmVsUG9zdFBvbGljeRIcChhDSEFOTkVMX1BPU1RfUE9MSUNZX09QRU4QABIiCh5DSEFOTkVMX1BPU1RfUE9MSUNZX09XTkVSX09OTFkQASpfChVDaGFubmVsTWVtYmVyc2hpcE1vZGUSJAogQ0hBTk5FTF9NRU1CRVJTSElQX01PREVfRVhQTElDSVQQABIgChxDSEFOTkVMX01FTUJFUlNISVBfTU9ERV9UUkVFEAEqWwoLQ2hhbm5lbEtpbmQSGAoUQ0hBTk5FTF9LSU5EX0NIQU5ORUwQABITCg9DSEFOTkVMX0tJTkRfRE0QARIdChVDSEFOTkVMX0tJTkRfR1JPVVBfRE0QAhoCCAEqnAEKDUFnZW50UHJlc2VuY2USHgoaQUdFTlRfUFJFU0VOQ0VfVU5TUEVDSUZJRUQQABIXChNBR0VOVF9QUkVTRU5DRV9JRExFEAESGgoWQUdFTlRfUFJFU0VOQ0VfV09SS0lORxACEhoKFkFHRU5UX1BSRVNFTkNFX1dBSVRJTkcQAxIaChZBR0VOVF9QUkVTRU5DRV9PRkZMSU5FEAQqwwEKDkJvYXJkVGFza1N0YXRlEiAKHEJPQVJEX1RBU0tfU1RBVEVfVU5TUEVDSUZJRUQQABIbChdCT0FSRF9UQVNLX1NUQVRFX0FDVElWRRABEhwKGEJPQVJEX1RBU0tfU1RBVEVfQkxPQ0tFRBACEhwKGEJPQVJEX1RBU0tfU1RBVEVfV0FJVElORxADEhsKF0JPQVJEX1RBU0tfU1RBVEVfUEFSS0VEEAQSGQoVQk9BUkRfVEFTS19TVEFURV9ET05FEAUqigEKDUJvYXJkSGFsdEtpbmQSHwobQk9BUkRfSEFMVF9LSU5EX1VOU1BFQ0lGSUVEEAASGAoUQk9BUkRfSEFMVF9LSU5EX0RPTkUQARIbChdCT0FSRF9IQUxUX0tJTkRfQkxPQ0tFRBACEiEKHUJPQVJEX0hBTFRfS0lORF9BV0FJVElOR19VU0VSEAMqjAEKDkJvYXJkV2FpdGluZ09uEiAKHEJPQVJEX1dBSVRJTkdfT05fVU5TUEVDSUZJRUQQABIdChlCT0FSRF9XQUlUSU5HX09OX09QRVJBVE9SEAESGgoWQk9BUkRfV0FJVElOR19PTl9BR0VOVBACEh0KGUJPQVJEX1dBSVRJTkdfT05fRVhURVJOQUwQAyppCgxCb2FyZFJlZktpbmQSHgoaQk9BUkRfUkVGX0tJTkRfVU5TUEVDSUZJRUQQABIYChRCT0FSRF9SRUZfS0lORF9JU1NVRRABEh8KG0JPQVJEX1JFRl9LSU5EX1BVTExfUkVRVUVTVBACKqADCgtCb2FyZFByR2F0ZRIdChlCT0FSRF9QUl9HQVRFX1VOU1BFQ0lGSUVEEAASFwoTQk9BUkRfUFJfR0FURV9EUkFGVBABEiAKHEJPQVJEX1BSX0dBVEVfQ0hFQ0tTX1BFTkRJTkcQAhIfChtCT0FSRF9QUl9HQVRFX0NIRUNLU19GQUlMRUQQAxIjCh9CT0FSRF9QUl9HQVRFX0NIQU5HRVNfUkVRVUVTVEVEEAQSIQodQk9BUkRfUFJfR0FURV9BV0FJVElOR19SRVZJRVcQBRIiCh5CT0FSRF9QUl9HQVRFX0FXQUlUSU5HX0VOUVVFVUUQBhIYChRCT0FSRF9QUl9HQVRFX01FUkdFRBAHEhgKFEJPQVJEX1BSX0dBVEVfQ0xPU0VEEAgSGAoUQk9BUkRfUFJfR0FURV9RVUVVRUQQCRIeChpCT0FSRF9QUl9HQVRFX1FVRVVFX0ZBSUxFRBAKEh8KG0JPQVJEX1BSX0dBVEVfUVVFVUVfUkVNT1ZFRBALEhsKF0JPQVJEX1BSX0dBVEVfQ09ORkxJQ1RTEAwqkQEKDFBlZXJpbmdTdGF0ZRIdChlQRUVSSU5HX1NUQVRFX1VOU1BFQ0lGSUVEEAASIgoeUEVFUklOR19TVEFURV9QRU5ESU5HX09VVEdPSU5HEAESIgoeUEVFUklOR19TVEFURV9QRU5ESU5HX0lOQ09NSU5HEAISGgoWUEVFUklOR19TVEFURV9BUFBST1ZFRBADKl4KC1Jvc3RlclNjb3BlEh0KGVJPU1RFUl9TQ09QRV9ORUlHSEJPUkhPT0QQABIYChRST1NURVJfU0NPUEVfU1VCVFJFRRABEhYKElJPU1RFUl9TQ09QRV9PV05FUhACMuoQCgxDb21tc1NlcnZpY2USSwoKQ3JlYXRlVXNlchIdLmNvbXBhc3MudjEuQ3JlYXRlVXNlclJlcXVlc3QaHi5jb21wYXNzLnYxLkNyZWF0ZVVzZXJSZXNwb25zZRJOCgtDcmVhdGVBZ2VudBIeLmNvbXBhc3MudjEuQ3JlYXRlQWdlbnRSZXF1ZXN0Gh8uY29tcGFzcy52MS5DcmVhdGVBZ2VudFJlc3BvbnNlElEKDExpc3RBY2NvdW50cxIfLmNvbXBhc3MudjEuTGlzdEFjY291bnRzUmVxdWVzdBogLmNvbXBhc3MudjEuTGlzdEFjY291bnRzUmVzcG9uc2USYwoSQ3JlYXRlQ2hhbm5lbEdyb3VwEiUuY29tcGFzcy52MS5DcmVhdGVDaGFubmVsR3JvdXBSZXF1ZXN0GiYuY29tcGFzcy52MS5DcmVhdGVDaGFubmVsR3JvdXBSZXNwb25zZRJgChFMaXN0Q2hhbm5lbEdyb3VwcxIkLmNvbXBhc3MudjEuTGlzdENoYW5uZWxHcm91cHNSZXF1ZXN0GiUuY29tcGFzcy52MS5MaXN0Q2hhbm5lbEdyb3Vwc1Jlc3BvbnNlElEKDExpc3RDaGFubmVscxIfLmNvbXBhc3MudjEuTGlzdENoYW5uZWxzUmVxdWVzdBogLmNvbXBhc3MudjEuTGlzdENoYW5uZWxzUmVzcG9uc2USVAoNQ3JlYXRlQ2hhbm5lbBIgLmNvbXBhc3MudjEuQ3JlYXRlQ2hhbm5lbFJlcXVlc3QaIS5jb21wYXNzLnYxLkNyZWF0ZUNoYW5uZWxSZXNwb25zZRJpChRVcGRhdGVDaGFubmVsTWVtYmVycxInLmNvbXBhc3MudjEuVXBkYXRlQ2hhbm5lbE1lbWJlcnNSZXF1ZXN0GiguY29tcGFzcy52MS5VcGRhdGVDaGFubmVsTWVtYmVyc1Jlc3BvbnNlEj8KBk9wZW5ETRIZLmNvbXBhc3MudjEuT3BlbkRNUmVxdWVzdBoaLmNvbXBhc3MudjEuT3BlbkRNUmVzcG9uc2USVAoNUmVwYXJlbnRBZ2VudBIgLmNvbXBhc3MudjEuUmVwYXJlbnRBZ2VudFJlcXVlc3QaIS5jb21wYXNzLnYxLlJlcGFyZW50QWdlbnRSZXNwb25zZRJaCg9SZXBhcmVudENoYW5uZWwSIi5jb21wYXNzLnYxLlJlcGFyZW50Q2hhbm5lbFJlcXVlc3QaIy5jb21wYXNzLnYxLlJlcGFyZW50Q2hhbm5lbFJlc3BvbnNlEmMKEk9wZW5BZ2VudFdvcmtzcGFjZRIlLmNvbXBhc3MudjEuT3BlbkFnZW50V29ya3NwYWNlUmVxdWVzdBomLmNvbXBhc3MudjEuT3BlbkFnZW50V29ya3NwYWNlUmVzcG9uc2USUQoMTGlzdE1lc3NhZ2VzEh8uY29tcGFzcy52MS5MaXN0TWVzc2FnZXNSZXF1ZXN0GiAuY29tcGFzcy52MS5MaXN0TWVzc2FnZXNSZXNwb25zZRJOCgtQb3N0TWVzc2FnZRIeLmNvbXBhc3MudjEuUG9zdE1lc3NhZ2VSZXF1ZXN0Gh8uY29tcGFzcy52MS5Qb3N0TWVzc2FnZVJlc3BvbnNlEksKCkxpc3RUb3BpY3MSHS5jb21wYXNzLnYxLkxpc3RUb3BpY3NSZXF1ZXN0Gh4uY29tcGFzcy52MS5MaXN0VG9waWNzUmVzcG9uc2USTgoLVXBkYXRlVG9waWMSHi5jb21wYXNzLnYxLlVwZGF0ZVRvcGljUmVxdWVzdBofLmNvbXBhc3MudjEuVXBkYXRlVG9waWNSZXNwb25zZRJRCgxSZXNwb25kVG9Bc2sSHy5jb21wYXNzLnYxLlJlc3BvbmRUb0Fza1JlcXVlc3QaIC5jb21wYXNzLnYxLlJlc3BvbmRUb0Fza1Jlc3BvbnNlElcKDlNlYXJjaE1lc3NhZ2VzEiEuY29tcGFzcy52MS5TZWFyY2hNZXNzYWdlc1JlcXVlc3QaIi5jb21wYXNzLnYxLlNlYXJjaE1lc3NhZ2VzUmVzcG9uc2USXQoQU2V0Q2hhbm5lbFBvbGljeRIjLmNvbXBhc3MudjEuU2V0Q2hhbm5lbFBvbGljeVJlcXVlc3QaJC5jb21wYXNzLnYxLlNldENoYW5uZWxQb2xpY3lSZXNwb25zZRJICglHZXRSb3N0ZXISHC5jb21wYXNzLnYxLkdldFJvc3RlclJlcXVlc3QaHS5jb21wYXNzLnYxLkdldFJvc3RlclJlc3BvbnNlEmAKEVVwZGF0ZVBpbm5lZEJvYXJkEiQuY29tcGFzcy52MS5VcGRhdGVQaW5uZWRCb2FyZFJlcXVlc3QaJS5jb21wYXNzLnYxLlVwZGF0ZVBpbm5lZEJvYXJkUmVzcG9uc2USTgoLQXBwcm92ZVBlZXISHi5jb21wYXNzLnYxLkFwcHJvdmVQZWVyUmVxdWVzdBofLmNvbXBhc3MudjEuQXBwcm92ZVBlZXJSZXNwb25zZRJLCgpSZXZva2VQZWVyEh0uY29tcGFzcy52MS5SZXZva2VQZWVyUmVxdWVzdBoeLmNvbXBhc3MudjEuUmV2b2tlUGVlclJlc3BvbnNlEkgKCUxpc3RQZWVycxIcLmNvbXBhc3MudjEuTGlzdFBlZXJzUmVxdWVzdBodLmNvbXBhc3MudjEuTGlzdFBlZXJzUmVzcG9uc2USWQoOU3Vic2NyaWJlQ29tbXMSIS5jb21wYXNzLnYxLlN1YnNjcmliZUNvbW1zUmVxdWVzdBoiLmNvbXBhc3MudjEuU3Vic2NyaWJlQ29tbXNSZXNwb25zZTABYgZwcm90bzM", [file_compass_v1_compass]); + fileDesc("ChZjb21wYXNzL3YxL2NvbW1zLnByb3RvEgpjb21wYXNzLnYxIsQBCgdBY2NvdW50EgoKAmlkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSJwoEdXNlchgKIAEoCzIXLmNvbXBhc3MudjEuVXNlckFjY291bnRIABIpCgVhZ2VudBgLIAEoCzIYLmNvbXBhc3MudjEuQWdlbnRBY2NvdW50SAASKwoGc3lzdGVtGAwgASgLMhkuY29tcGFzcy52MS5TeXN0ZW1BY2NvdW50SABCBgoEa2luZCIPCg1TeXN0ZW1BY2NvdW50IjEKC1VzZXJBY2NvdW50EiIKBHJvbGUYASABKA4yFC5jb21wYXNzLnYxLlVzZXJSb2xlIlcKDEFnZW50QWNjb3VudBIVCg1vd25lcl91c2VyX2lkGAEgASgJEhcKD2hvbWVfY2hhbm5lbF9pZBgCIAEoCRIXCg9wYXJlbnRfYWdlbnRfaWQYAyABKAkikAEKDENoYW5uZWxHcm91cBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD3BhcmVudF9ncm91cF9pZBgDIAEoCRIVCg1vd25lcl91c2VyX2lkGAQgASgJEjYKCnZpc2liaWxpdHkYBSABKA4yIi5jb21wYXNzLnYxLkNoYW5uZWxHcm91cFZpc2liaWxpdHkijAMKB0NoYW5uZWwSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghncm91cF9pZBgDIAEoCRIlCgRraW5kGAQgASgOMhcuY29tcGFzcy52MS5DaGFubmVsS2luZBIaChJtZW1iZXJfYWNjb3VudF9pZHMYBSADKAkSHgoWc3Vic2NyaWJlcl9hY2NvdW50X2lkcxgGIAMoCRIyCgtwb3N0X3BvbGljeRgHIAEoDjIdLmNvbXBhc3MudjEuQ2hhbm5lbFBvc3RQb2xpY3kSGAoQb3duZXJfYWNjb3VudF9pZBgIIAEoCRIeChZtYW5kYXRvcnlfc3Vic2NyaXB0aW9uGAkgASgIEi8KDnBpbm5lZF9lbnRyaWVzGAogAygLMhcuY29tcGFzcy52MS5QaW5uZWRFbnRyeRIXCg9wYXJlbnRfYWdlbnRfaWQYCyABKAkSOgoPbWVtYmVyc2hpcF9tb2RlGAwgASgOMiEuY29tcGFzcy52MS5DaGFubmVsTWVtYmVyc2hpcE1vZGUibAoLUGlubmVkRW50cnkSEgoKbWVzc2FnZV9pZBgBIAEoCRIQCghwb3NpdGlvbhgCIAEoBRIZChFwaW5uZWRfYXRfdW5peF9tcxgDIAEoAxIcChRwaW5uZWRfYnlfYWNjb3VudF9pZBgEIAEoCSI2Cg5BZ2VudFdvcmtzcGFjZRIKCgJpZBgBIAEoCRIYChBhZ2VudF9hY2NvdW50X2lkGAIgASgJIvIBCgVUb3BpYxIKCgJpZBgBIAEoCRISCgpjaGFubmVsX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSGgoSY3JlYXRlZF9hdF91bml4X21zGAQgASgDEh0KFWNyZWF0ZWRfYnlfYWNjb3VudF9pZBgFIAEoCRIQCghhcmNoaXZlZBgGIAEoCBIaCg1tZXNzYWdlX2NvdW50GAcgASgESACIAQESJAoXbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMYCCABKANIAYgBAUIQCg5fbWVzc2FnZV9jb3VudEIaChhfbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMiwgEKB01lc3NhZ2USCgoCaWQYASABKAkSEAoIdG9waWNfaWQYAiABKAkSGQoRYXV0aG9yX2FjY291bnRfaWQYAyABKAkSEgoKYXRfdW5peF9tcxgEIAEoAxIoCgZibG9ja3MYBSADKAsyGC5jb21wYXNzLnYxLk1lc3NhZ2VCbG9jaxIVCg1hdXRob3JfaGFuZGxlGAYgASgJEhIKCmNoYW5uZWxfaWQYByABKAkSFQoNdHVybl9zZXF1ZW5jZRgIIAEoBCJ5CgxNZXNzYWdlQmxvY2sSDgoEdGV4dBgBIAEoCUgAEh4KA2FzaxgCIAEoCzIPLmNvbXBhc3MudjEuQXNrSAASMAoKYXNrX2Fuc3dlchgDIAEoCzIaLmNvbXBhc3MudjEuQXNrQW5zd2VyQmxvY2tIAEIHCgVibG9jayJICg5Bc2tBbnN3ZXJCbG9jaxIcCgNhc2sYASABKAsyDy5jb21wYXNzLnYxLkFzaxIYChBhc2tlcl9hY2NvdW50X2lkGAIgASgJImAKA0FzaxIOCgZhc2tfaWQYASABKAkSKgoJcXVlc3Rpb25zGAIgAygLMhcuY29tcGFzcy52MS5Bc2tRdWVzdGlvbhIQCghhbnN3ZXJlZBgDIAEoCBILCgNyZWYYBCABKAki8QEKC0Fza1F1ZXN0aW9uEhMKC3F1ZXN0aW9uX2lkGAEgASgJEhAKCHF1ZXN0aW9uGAIgASgJEg4KBmhlYWRlchgDIAEoCRImCgdvcHRpb25zGAQgAygLMhUuY29tcGFzcy52MS5Bc2tPcHRpb24SFgoOYWxsb3dfbXVsdGlwbGUYBSABKAgSGAoLcmVjb21tZW5kZWQYBiABKAVIAIgBARIZChFjaG9zZW5fb3B0aW9uX2lkcxgHIAMoCRITCgtjdXN0b21fdGV4dBgIIAEoCRIRCgl0aW1lZF9vdXQYCSABKAhCDgoMX3JlY29tbWVuZGVkIkwKCUFza09wdGlvbhIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIPCgdwcmV2aWV3GAQgASgJIscFChZTdWJzY3JpYmVDb21tc1Jlc3BvbnNlEgsKA3NlcRgBIAEoBBISCgphdF91bml4X21zGAIgASgDEhYKDmluc3RhbmNlX2Vwb2NoGAMgASgEEhQKDHNuYXBzaG90X3NlcRgEIAEoBBIzCg5tZXNzYWdlX3Bvc3RlZBgKIAEoCzIZLmNvbXBhc3MudjEuTWVzc2FnZVBvc3RlZEgAEjUKD21lc3NhZ2VfdXBkYXRlZBgLIAEoCzIaLmNvbXBhc3MudjEuTWVzc2FnZVVwZGF0ZWRIABI1Cg9jaGFubmVsX2NoYW5nZWQYDCABKAsyGi5jb21wYXNzLnYxLkNoYW5uZWxDaGFuZ2VkSAASQAoVY2hhbm5lbF9ncm91cF9jaGFuZ2VkGA0gASgLMh8uY29tcGFzcy52MS5DaGFubmVsR3JvdXBDaGFuZ2VkSAASNQoPYWNjb3VudF9jaGFuZ2VkGA4gASgLMhouY29tcGFzcy52MS5BY2NvdW50Q2hhbmdlZEgAEkQKF2FnZW50X3dvcmtzcGFjZV9jaGFuZ2VkGA8gASgLMiEuY29tcGFzcy52MS5BZ2VudFdvcmtzcGFjZUNoYW5nZWRIABI6Cg9yZXN5bmNfcmVxdWlyZWQYECABKAsyHy5jb21wYXNzLnYxLkNvbW1zUmVzeW5jUmVxdWlyZWRIABJCChZhZ2VudF9wcmVzZW5jZV9jaGFuZ2VkGBEgASgLMiAuY29tcGFzcy52MS5BZ2VudFByZXNlbmNlQ2hhbmdlZEgAEjMKDnRvcGljX3Vwc2VydGVkGBIgASgLMhkuY29tcGFzcy52MS5Ub3BpY1Vwc2VydGVkSAASPAoTYWdlbnRfYm9hcmRfY2hhbmdlZBgTIAEoCzIdLmNvbXBhc3MudjEuQWdlbnRCb2FyZENoYW5nZWRIAEIJCgdwYXlsb2FkIkwKDU1lc3NhZ2VQb3N0ZWQSJAoHbWVzc2FnZRgBIAEoCzITLmNvbXBhc3MudjEuTWVzc2FnZRIVCg10dXJuX3NlcXVlbmNlGAIgASgEIjYKDk1lc3NhZ2VVcGRhdGVkEiQKB21lc3NhZ2UYASABKAsyEy5jb21wYXNzLnYxLk1lc3NhZ2UiMQoNVG9waWNVcHNlcnRlZBIgCgV0b3BpYxgBIAEoCzIRLmNvbXBhc3MudjEuVG9waWMiUwoOQ2hhbm5lbENoYW5nZWQSJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbBIbChNyZW1vdmVkX2FjY291bnRfaWRzGAIgAygJIj4KE0NoYW5uZWxHcm91cENoYW5nZWQSJwoFZ3JvdXAYASABKAsyGC5jb21wYXNzLnYxLkNoYW5uZWxHcm91cCI2Cg5BY2NvdW50Q2hhbmdlZBIkCgdhY2NvdW50GAEgASgLMhMuY29tcGFzcy52MS5BY2NvdW50IkYKFUFnZW50V29ya3NwYWNlQ2hhbmdlZBItCgl3b3Jrc3BhY2UYASABKAsyGi5jb21wYXNzLnYxLkFnZW50V29ya3NwYWNlIhUKE0NvbW1zUmVzeW5jUmVxdWlyZWQibwoUQWdlbnRQcmVzZW5jZUNoYW5nZWQSGAoQYWdlbnRfYWNjb3VudF9pZBgBIAEoCRIrCghwcmVzZW5jZRgCIAEoDjIZLmNvbXBhc3MudjEuQWdlbnRQcmVzZW5jZRIQCghhY3Rpdml0eRgDIAEoCSJ3CgxCb2FyZFdhaXRpbmcSJgoCb24YASABKA4yGi5jb21wYXNzLnYxLkJvYXJkV2FpdGluZ09uEhQKDGFnZW50X2hhbmRsZRgCIAEoCRIMCgR3aGF0GAMgASgJEgsKA3JlZhgEIAEoCRIOCgZibG9ja3MYBSADKAkihQEKDUJvYXJkU3ViYWdlbnQSCgoCaWQYASABKAkSDQoFYWdlbnQYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDgoGc3RhdHVzGAQgASgJEhoKEnN0YXJ0ZWRfYXRfdW5peF9tcxgFIAEoAxIYChBlbmRlZF9hdF91bml4X21zGAYgASgDIvgBCglCb2FyZFRhc2sSCwoDa2V5GAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC3ByaW1hcnlfcmVmGAMgASgJEgwKBHJlZnMYBCADKAkSKQoFc3RhdGUYBSABKA4yGi5jb21wYXNzLnYxLkJvYXJkVGFza1N0YXRlEgwKBG5vdGUYBiABKAkSKQoHd2FpdGluZxgHIAMoCzIYLmNvbXBhc3MudjEuQm9hcmRXYWl0aW5nEiwKCXN1YmFnZW50cxgIIAMoCzIZLmNvbXBhc3MudjEuQm9hcmRTdWJhZ2VudBIaChJ3cml0dGVuX2F0X3VuaXhfbXMYCSABKAMiHQoLQm9hcmRSZWZzT3ASDgoGdmFsdWVzGAEgAygJIjoKDkJvYXJkV2FpdGluZ09wEigKBnZhbHVlcxgBIAMoCzIYLmNvbXBhc3MudjEuQm9hcmRXYWl0aW5nIsQCCg5Cb2FyZFRhc2tQYXRjaBILCgNrZXkYASABKAkSEgoFdGl0bGUYAiABKAlIAIgBARIYCgtwcmltYXJ5X3JlZhgDIAEoCUgBiAEBEi4KBXN0YXRlGAQgASgOMhouY29tcGFzcy52MS5Cb2FyZFRhc2tTdGF0ZUgCiAEBEhEKBG5vdGUYBSABKAlIA4gBARIlCgRyZWZzGAYgASgLMhcuY29tcGFzcy52MS5Cb2FyZFJlZnNPcBIrCgd3YWl0aW5nGAcgASgLMhouY29tcGFzcy52MS5Cb2FyZFdhaXRpbmdPcBIzChB1cHNlcnRfc3ViYWdlbnRzGAggAygLMhkuY29tcGFzcy52MS5Cb2FyZFN1YmFnZW50QggKBl90aXRsZUIOCgxfcHJpbWFyeV9yZWZCCAoGX3N0YXRlQgcKBV9ub3RlIlEKCUJvYXJkSGFsdBInCgRraW5kGAEgASgOMhkuY29tcGFzcy52MS5Cb2FyZEhhbHRLaW5kEgsKA3JlZhgCIAEoCRIOCgZyZWFzb24YAyABKAkijwMKCEJvYXJkUmVmEgsKA3JlZhgBIAEoCRImCgRraW5kGAIgASgOMhguY29tcGFzcy52MS5Cb2FyZFJlZktpbmQSDQoFdGl0bGUYAyABKAkSCwoDdXJsGAQgASgJEhMKC2ZvcmdlX3N0YXRlGAUgASgJEisKC2lzc3VlX3N0YXRlGAYgASgOMhYuY29tcGFzcy52MS5Jc3N1ZVN0YXRlEg0KBWRyYWZ0GAcgASgIEhQKDGNoZWNrc19zdGF0ZRgIIAEoCRIlCgRnYXRlGAkgASgOMhcuY29tcGFzcy52MS5Cb2FyZFByR2F0ZRIVCg1zdGFja190aXBfcmVmGAogASgJEhYKDnN0YWNrX3Bvc2l0aW9uGAsgASgNEg0KBW93bmVkGAwgASgIEhsKE29ic2VydmVkX2F0X3VuaXhfbXMYDSABKAMSGQoRbWVyZ2VfcXVldWVfc3RhdGUYDiABKAkSFgoOc3RhbGVfYXBwcm92YWwYDyABKAgSFgoOdHJhY2tlcl9zdGF0dXMYECABKAkijAEKCEJvYXJkQXNrEg4KBmFza19pZBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJEhIKCmNoYW5uZWxfaWQYAyABKAkSCwoDcmVmGAQgASgJEg4KBmhlYWRlchgFIAEoCRIQCghhbnN3ZXJlZBgGIAEoCBIZChFwb3N0ZWRfYXRfdW5peF9tcxgHIAEoAyLVAgoKQWdlbnRCb2FyZBIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIWCg5mb2N1c190YXNrX2tleRgDIAEoCRIjCgRoYWx0GAQgASgLMhUuY29tcGFzcy52MS5Cb2FyZEhhbHQSJAoFdGFza3MYBSADKAsyFS5jb21wYXNzLnYxLkJvYXJkVGFzaxIiCgRyZWZzGAYgAygLMhQuY29tcGFzcy52MS5Cb2FyZFJlZhIWCg51bnRyYWNrZWRfcmVmcxgHIAMoCRIiCgRhc2tzGAggAygLMhQuY29tcGFzcy52MS5Cb2FyZEFzaxIUCgx3cml0dGVuX3R1cm4YCSABKAQSGgoSd3JpdHRlbl9hdF91bml4X21zGAogASgDEg0KBXN0YWxlGAsgASgIEhkKEW1hdGNoZWRfdGFza19rZXlzGAwgAygJIqMBChFBZ2VudEJvYXJkU3VtbWFyeRINCgVmb2N1cxgBIAEoCRISCgp0YXNrX2NvdW50GAIgASgNEhsKE3dhaXRpbmdfb25fb3BlcmF0b3IYAyABKA0SIwoEaGFsdBgEIAEoCzIVLmNvbXBhc3MudjEuQm9hcmRIYWx0EhoKEndyaXR0ZW5fYXRfdW5peF9tcxgFIAEoAxINCgVzdGFsZRgGIAEoCCL4AQoXVXBkYXRlQWdlbnRCb2FyZFJlcXVlc3QSMAoMdXBzZXJ0X3Rhc2tzGAEgAygLMhouY29tcGFzcy52MS5Cb2FyZFRhc2tQYXRjaBIYChByZW1vdmVfdGFza19rZXlzGAIgAygJEhsKDmZvY3VzX3Rhc2tfa2V5GAMgASgJSACIAQESIwoEaGFsdBgEIAEoCzIVLmNvbXBhc3MudjEuQm9hcmRIYWx0EhIKCmNsZWFyX2hhbHQYBSABKAgSFQoNdHVybl9zZXF1ZW5jZRgGIAEoBBIRCglhdXRvbWF0aWMYByABKAhCEQoPX2ZvY3VzX3Rhc2tfa2V5IkEKGFVwZGF0ZUFnZW50Qm9hcmRSZXNwb25zZRIlCgVib2FyZBgBIAEoCzIWLmNvbXBhc3MudjEuQWdlbnRCb2FyZCLeAQoWTGlzdEFnZW50Qm9hcmRzUmVxdWVzdBIVCg1hZ2VudF9oYW5kbGVzGAEgAygJEg0KBXF1ZXJ5GAIgASgJEgsKA3JlZhgDIAEoCRIuCgp3YWl0aW5nX29uGAQgASgOMhouY29tcGFzcy52MS5Cb2FyZFdhaXRpbmdPbhIpCgVzdGF0ZRgFIAEoDjIaLmNvbXBhc3MudjEuQm9hcmRUYXNrU3RhdGUSJwoEaGFsdBgGIAEoDjIZLmNvbXBhc3MudjEuQm9hcmRIYWx0S2luZBINCgVsaW1pdBgHIAEoDSJBChdMaXN0QWdlbnRCb2FyZHNSZXNwb25zZRImCgZib2FyZHMYASADKAsyFi5jb21wYXNzLnYxLkFnZW50Qm9hcmQiVAoRQWdlbnRCb2FyZENoYW5nZWQSGAoQYWdlbnRfYWNjb3VudF9pZBgBIAEoCRIlCgVib2FyZBgCIAEoCzIWLmNvbXBhc3MudjEuQWdlbnRCb2FyZCJbCgdQZWVyaW5nEhcKD3VzZXJfYWNjb3VudF9pZBgBIAEoCRIOCgZoYW5kbGUYAiABKAkSJwoFc3RhdGUYAyABKA4yGC5jb21wYXNzLnYxLlBlZXJpbmdTdGF0ZSIpChJBcHByb3ZlUGVlclJlcXVlc3QSEwoLcGVlcl9oYW5kbGUYASABKAkiOwoTQXBwcm92ZVBlZXJSZXNwb25zZRIkCgdwZWVyaW5nGAEgASgLMhMuY29tcGFzcy52MS5QZWVyaW5nIigKEVJldm9rZVBlZXJSZXF1ZXN0EhMKC3BlZXJfaGFuZGxlGAEgASgJIiUKElJldm9rZVBlZXJSZXNwb25zZRIPCgdkZWxldGVkGAEgASgIIhIKEExpc3RQZWVyc1JlcXVlc3QiOgoRTGlzdFBlZXJzUmVzcG9uc2USJQoIcGVlcmluZ3MYASADKAsyEy5jb21wYXNzLnYxLlBlZXJpbmciOQoRQ3JlYXRlVXNlclJlcXVlc3QSDgoGaGFuZGxlGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCSI6ChJDcmVhdGVVc2VyUmVzcG9uc2USJAoHYWNjb3VudBgBIAEoCzITLmNvbXBhc3MudjEuQWNjb3VudCJwChJDcmVhdGVBZ2VudFJlcXVlc3QSDgoGaGFuZGxlGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRIVCg1wYXJlbnRfaGFuZGxlGAMgASgJEgwKBHJvbGUYBCABKAkSDwoHcGVyc29uYRgFIAEoCSI7ChNDcmVhdGVBZ2VudFJlc3BvbnNlEiQKB2FjY291bnQYASABKAsyEy5jb21wYXNzLnYxLkFjY291bnQiKwoTTGlzdEFjY291bnRzUmVxdWVzdBIUCgxzbmFwc2hvdF9zZXEYASABKAQiPQoUTGlzdEFjY291bnRzUmVzcG9uc2USJQoIYWNjb3VudHMYASADKAsyEy5jb21wYXNzLnYxLkFjY291bnQilQEKGUNyZWF0ZUNoYW5uZWxHcm91cFJlcXVlc3QSDAoEbmFtZRgBIAEoCRIXCg9wYXJlbnRfZ3JvdXBfaWQYAiABKAkSNgoKdmlzaWJpbGl0eRgDIAEoDjIiLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwVmlzaWJpbGl0eRIZChFwYXJlbnRfZ3JvdXBfbmFtZRgEIAEoCSJFChpDcmVhdGVDaGFubmVsR3JvdXBSZXNwb25zZRInCgVncm91cBgBIAEoCzIYLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwIjAKGExpc3RDaGFubmVsR3JvdXBzUmVxdWVzdBIUCgxzbmFwc2hvdF9zZXEYASABKAQiRQoZTGlzdENoYW5uZWxHcm91cHNSZXNwb25zZRIoCgZncm91cHMYASADKAsyGC5jb21wYXNzLnYxLkNoYW5uZWxHcm91cCIrChNMaXN0Q2hhbm5lbHNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCI9ChRMaXN0Q2hhbm5lbHNSZXNwb25zZRIlCghjaGFubmVscxgBIAMoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCLiAQoUQ3JlYXRlQ2hhbm5lbFJlcXVlc3QSDAoEbmFtZRgBIAEoCRIQCghncm91cF9pZBgCIAEoCRIlCgRraW5kGAMgASgOMhcuY29tcGFzcy52MS5DaGFubmVsS2luZBIWCg5tZW1iZXJfaGFuZGxlcxgEIAMoCRIbChNwYXJlbnRfYWdlbnRfaGFuZGxlGAUgASgJEjoKD21lbWJlcnNoaXBfbW9kZRgGIAEoDjIhLmNvbXBhc3MudjEuQ2hhbm5lbE1lbWJlcnNoaXBNb2RlEhIKCmdyb3VwX25hbWUYByABKAkiPQoVQ3JlYXRlQ2hhbm5lbFJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwiwgEKG1VwZGF0ZUNoYW5uZWxNZW1iZXJzUmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEhoKEmFkZF9tZW1iZXJfaGFuZGxlcxgCIAMoCRIdChVyZW1vdmVfbWVtYmVyX2hhbmRsZXMYAyADKAkSGQoRc3Vic2NyaWJlX2hhbmRsZXMYBCADKAkSGwoTdW5zdWJzY3JpYmVfaGFuZGxlcxgFIAMoCRIcChRjb252ZXJ0X2NoYW5uZWxfbmFtZRgGIAEoCSJEChxVcGRhdGVDaGFubmVsTWVtYmVyc1Jlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwiJAoNT3BlbkRNUmVxdWVzdBITCgtwZWVyX2hhbmRsZRgBIAEoCSJHCg5PcGVuRE1SZXNwb25zZRIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsEg8KB2NyZWF0ZWQYAiABKAgiRwoUUmVwYXJlbnRBZ2VudFJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEW5ld19wYXJlbnRfaGFuZGxlGAIgASgJIj0KFVJlcGFyZW50QWdlbnRSZXNwb25zZRIkCgdhY2NvdW50GAEgASgLMhMuY29tcGFzcy52MS5BY2NvdW50Ik0KFlJlcGFyZW50Q2hhbm5lbFJlcXVlc3QSEgoKY2hhbm5lbF9pZBgBIAEoCRIfChduZXdfcGFyZW50X2FnZW50X2hhbmRsZRgCIAEoCSI/ChdSZXBhcmVudENoYW5uZWxSZXNwb25zZRIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsIpcBChdTZXRDaGFubmVsUG9saWN5UmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEjIKC3Bvc3RfcG9saWN5GAIgASgOMh0uY29tcGFzcy52MS5DaGFubmVsUG9zdFBvbGljeRIUCgxvd25lcl9oYW5kbGUYAyABKAkSHgoWbWFuZGF0b3J5X3N1YnNjcmlwdGlvbhgEIAEoCCJAChhTZXRDaGFubmVsUG9saWN5UmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCJSChBHZXRSb3N0ZXJSZXF1ZXN0EiYKBXNjb3BlGAEgASgOMhcuY29tcGFzcy52MS5Sb3N0ZXJTY29wZRIWCg52YW50YWdlX2hhbmRsZRgCIAEoCSI9ChFHZXRSb3N0ZXJSZXNwb25zZRIoCgdlbnRyaWVzGAEgAygLMhcuY29tcGFzcy52MS5Sb3N0ZXJFbnRyeSLwAQoLUm9zdGVyRW50cnkSGAoQYWdlbnRfYWNjb3VudF9pZBgBIAEoCRIOCgZoYW5kbGUYAiABKAkSFAoMZGlzcGxheV9uYW1lGAMgASgJEhcKD3BhcmVudF9hZ2VudF9pZBgEIAEoCRIrCghwcmVzZW5jZRgFIAEoDjIZLmNvbXBhc3MudjEuQWdlbnRQcmVzZW5jZRIQCghhY3Rpdml0eRgGIAEoCRIbChNhY3Rpdml0eV9hdF91bml4X21zGAcgASgDEiwKBWJvYXJkGAggASgLMh0uY29tcGFzcy52MS5BZ2VudEJvYXJkU3VtbWFyeSJ3ChhVcGRhdGVQaW5uZWRCb2FyZFJlcXVlc3QSEgoKY2hhbm5lbF9pZBgBIAEoCRIlCgNwaW4YAiABKAsyFi5jb21wYXNzLnYxLlBpbk1lc3NhZ2VIABIaChB1bnBpbl9tZXNzYWdlX2lkGAMgASgJSABCBAoCb3AiPAoKUGluTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEhoKEnJlcGxhY2VfbWVzc2FnZV9pZBgCIAEoCSJBChlVcGRhdGVQaW5uZWRCb2FyZFJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwiMQoZT3BlbkFnZW50V29ya3NwYWNlUmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkiSwoaT3BlbkFnZW50V29ya3NwYWNlUmVzcG9uc2USLQoJd29ya3NwYWNlGAEgASgLMhouY29tcGFzcy52MS5BZ2VudFdvcmtzcGFjZSKKAQoTTGlzdE1lc3NhZ2VzUmVxdWVzdBIUCgpjaGFubmVsX2lkGAEgASgJSAASDQoFbGltaXQYAiABKA0SGQoRYmVmb3JlX21lc3NhZ2VfaWQYAyABKAkSFAoMc25hcHNob3Rfc2VxGAQgASgEEhAKCHRvcGljX2lkGAUgASgJQgsKCWNvbnRhaW5lciI9ChRMaXN0TWVzc2FnZXNSZXNwb25zZRIlCghtZXNzYWdlcxgBIAMoCzITLmNvbXBhc3MudjEuTWVzc2FnZSLcAQoSUG9zdE1lc3NhZ2VSZXF1ZXN0EhQKCmNoYW5uZWxfaWQYASABKAlIABIoCgZibG9ja3MYAiADKAsyGC5jb21wYXNzLnYxLk1lc3NhZ2VCbG9jaxISCgh0b3BpY19pZBgDIAEoCUgBEhQKCnRvcGljX25hbWUYBCABKAlIARIZChFjbGllbnRfcmVxdWVzdF9pZBgFIAEoCRIUCgxjcmVhdGVfdG9waWMYBiABKAgSFQoNdHVybl9zZXF1ZW5jZRgHIAEoBEILCgljb250YWluZXJCBwoFdG9waWMiOwoTUG9zdE1lc3NhZ2VSZXNwb25zZRIkCgdtZXNzYWdlGAEgASgLMhMuY29tcGFzcy52MS5NZXNzYWdlIkEKEUxpc3RUb3BpY3NSZXF1ZXN0EhIKCmNoYW5uZWxfaWQYASABKAkSGAoQaW5jbHVkZV9hcmNoaXZlZBgCIAEoCCI3ChJMaXN0VG9waWNzUmVzcG9uc2USIQoGdG9waWNzGAEgAygLMhEuY29tcGFzcy52MS5Ub3BpYyJmChJVcGRhdGVUb3BpY1JlcXVlc3QSEAoIdG9waWNfaWQYASABKAkSEQoEbmFtZRgCIAEoCUgAiAEBEhUKCGFyY2hpdmVkGAMgASgISAGIAQFCBwoFX25hbWVCCwoJX2FyY2hpdmVkIjcKE1VwZGF0ZVRvcGljUmVzcG9uc2USIAoFdG9waWMYASABKAsyES5jb21wYXNzLnYxLlRvcGljIlUKE1Jlc3BvbmRUb0Fza1JlcXVlc3QSDgoGYXNrX2lkGAEgASgJEi4KB2Fuc3dlcnMYAiADKAsyHS5jb21wYXNzLnYxLkFza1F1ZXN0aW9uQW5zd2VyIlgKEUFza1F1ZXN0aW9uQW5zd2VyEhMKC3F1ZXN0aW9uX2lkGAEgASgJEhkKEWNob3Nlbl9vcHRpb25faWRzGAIgAygJEhMKC2N1c3RvbV90ZXh0GAMgASgJIhYKFFJlc3BvbmRUb0Fza1Jlc3BvbnNlImoKFVNlYXJjaE1lc3NhZ2VzUmVxdWVzdBINCgVxdWVyeRgBIAEoCRIUCgpjaGFubmVsX2lkGAIgASgJSAASDQoFbGltaXQYAyABKA0SFAoMc25hcHNob3Rfc2VxGAQgASgEQgcKBXNjb3BlIj8KFlNlYXJjaE1lc3NhZ2VzUmVzcG9uc2USJQoIbWVzc2FnZXMYASADKAsyEy5jb21wYXNzLnYxLk1lc3NhZ2UiQgoVU3Vic2NyaWJlQ29tbXNSZXF1ZXN0EhEKCXNpbmNlX3NlcRgBIAEoBBIWCg5pbnN0YW5jZV9lcG9jaBgCIAEoBCo1CghVc2VyUm9sZRIUChBVU0VSX1JPTEVfTUVNQkVSEAASEwoPVVNFUl9ST0xFX0FETUlOEAEqYQoWQ2hhbm5lbEdyb3VwVmlzaWJpbGl0eRIiCh5DSEFOTkVMX0dST1VQX1ZJU0lCSUxJVFlfT1dORVIQABIjCh9DSEFOTkVMX0dST1VQX1ZJU0lCSUxJVFlfU0hBUkVEEAEqVQoRQ2hhbm5lbFBvc3RQb2xpY3kSHAoYQ0hBTk5FTF9QT1NUX1BPTElDWV9PUEVOEAASIgoeQ0hBTk5FTF9QT1NUX1BPTElDWV9PV05FUl9PTkxZEAEqXwoVQ2hhbm5lbE1lbWJlcnNoaXBNb2RlEiQKIENIQU5ORUxfTUVNQkVSU0hJUF9NT0RFX0VYUExJQ0lUEAASIAocQ0hBTk5FTF9NRU1CRVJTSElQX01PREVfVFJFRRABKlsKC0NoYW5uZWxLaW5kEhgKFENIQU5ORUxfS0lORF9DSEFOTkVMEAASEwoPQ0hBTk5FTF9LSU5EX0RNEAESHQoVQ0hBTk5FTF9LSU5EX0dST1VQX0RNEAIaAggBKpwBCg1BZ2VudFByZXNlbmNlEh4KGkFHRU5UX1BSRVNFTkNFX1VOU1BFQ0lGSUVEEAASFwoTQUdFTlRfUFJFU0VOQ0VfSURMRRABEhoKFkFHRU5UX1BSRVNFTkNFX1dPUktJTkcQAhIaChZBR0VOVF9QUkVTRU5DRV9XQUlUSU5HEAMSGgoWQUdFTlRfUFJFU0VOQ0VfT0ZGTElORRAEKsMBCg5Cb2FyZFRhc2tTdGF0ZRIgChxCT0FSRF9UQVNLX1NUQVRFX1VOU1BFQ0lGSUVEEAASGwoXQk9BUkRfVEFTS19TVEFURV9BQ1RJVkUQARIcChhCT0FSRF9UQVNLX1NUQVRFX0JMT0NLRUQQAhIcChhCT0FSRF9UQVNLX1NUQVRFX1dBSVRJTkcQAxIbChdCT0FSRF9UQVNLX1NUQVRFX1BBUktFRBAEEhkKFUJPQVJEX1RBU0tfU1RBVEVfRE9ORRAFKooBCg1Cb2FyZEhhbHRLaW5kEh8KG0JPQVJEX0hBTFRfS0lORF9VTlNQRUNJRklFRBAAEhgKFEJPQVJEX0hBTFRfS0lORF9ET05FEAESGwoXQk9BUkRfSEFMVF9LSU5EX0JMT0NLRUQQAhIhCh1CT0FSRF9IQUxUX0tJTkRfQVdBSVRJTkdfVVNFUhADKowBCg5Cb2FyZFdhaXRpbmdPbhIgChxCT0FSRF9XQUlUSU5HX09OX1VOU1BFQ0lGSUVEEAASHQoZQk9BUkRfV0FJVElOR19PTl9PUEVSQVRPUhABEhoKFkJPQVJEX1dBSVRJTkdfT05fQUdFTlQQAhIdChlCT0FSRF9XQUlUSU5HX09OX0VYVEVSTkFMEAMqaQoMQm9hcmRSZWZLaW5kEh4KGkJPQVJEX1JFRl9LSU5EX1VOU1BFQ0lGSUVEEAASGAoUQk9BUkRfUkVGX0tJTkRfSVNTVUUQARIfChtCT0FSRF9SRUZfS0lORF9QVUxMX1JFUVVFU1QQAiqgAwoLQm9hcmRQckdhdGUSHQoZQk9BUkRfUFJfR0FURV9VTlNQRUNJRklFRBAAEhcKE0JPQVJEX1BSX0dBVEVfRFJBRlQQARIgChxCT0FSRF9QUl9HQVRFX0NIRUNLU19QRU5ESU5HEAISHwobQk9BUkRfUFJfR0FURV9DSEVDS1NfRkFJTEVEEAMSIwofQk9BUkRfUFJfR0FURV9DSEFOR0VTX1JFUVVFU1RFRBAEEiEKHUJPQVJEX1BSX0dBVEVfQVdBSVRJTkdfUkVWSUVXEAUSIgoeQk9BUkRfUFJfR0FURV9BV0FJVElOR19FTlFVRVVFEAYSGAoUQk9BUkRfUFJfR0FURV9NRVJHRUQQBxIYChRCT0FSRF9QUl9HQVRFX0NMT1NFRBAIEhgKFEJPQVJEX1BSX0dBVEVfUVVFVUVEEAkSHgoaQk9BUkRfUFJfR0FURV9RVUVVRV9GQUlMRUQQChIfChtCT0FSRF9QUl9HQVRFX1FVRVVFX1JFTU9WRUQQCxIbChdCT0FSRF9QUl9HQVRFX0NPTkZMSUNUUxAMKpEBCgxQZWVyaW5nU3RhdGUSHQoZUEVFUklOR19TVEFURV9VTlNQRUNJRklFRBAAEiIKHlBFRVJJTkdfU1RBVEVfUEVORElOR19PVVRHT0lORxABEiIKHlBFRVJJTkdfU1RBVEVfUEVORElOR19JTkNPTUlORxACEhoKFlBFRVJJTkdfU1RBVEVfQVBQUk9WRUQQAypeCgtSb3N0ZXJTY29wZRIdChlST1NURVJfU0NPUEVfTkVJR0hCT1JIT09EEAASGAoUUk9TVEVSX1NDT1BFX1NVQlRSRUUQARIWChJST1NURVJfU0NPUEVfT1dORVIQAjLqEAoMQ29tbXNTZXJ2aWNlEksKCkNyZWF0ZVVzZXISHS5jb21wYXNzLnYxLkNyZWF0ZVVzZXJSZXF1ZXN0Gh4uY29tcGFzcy52MS5DcmVhdGVVc2VyUmVzcG9uc2USTgoLQ3JlYXRlQWdlbnQSHi5jb21wYXNzLnYxLkNyZWF0ZUFnZW50UmVxdWVzdBofLmNvbXBhc3MudjEuQ3JlYXRlQWdlbnRSZXNwb25zZRJRCgxMaXN0QWNjb3VudHMSHy5jb21wYXNzLnYxLkxpc3RBY2NvdW50c1JlcXVlc3QaIC5jb21wYXNzLnYxLkxpc3RBY2NvdW50c1Jlc3BvbnNlEmMKEkNyZWF0ZUNoYW5uZWxHcm91cBIlLmNvbXBhc3MudjEuQ3JlYXRlQ2hhbm5lbEdyb3VwUmVxdWVzdBomLmNvbXBhc3MudjEuQ3JlYXRlQ2hhbm5lbEdyb3VwUmVzcG9uc2USYAoRTGlzdENoYW5uZWxHcm91cHMSJC5jb21wYXNzLnYxLkxpc3RDaGFubmVsR3JvdXBzUmVxdWVzdBolLmNvbXBhc3MudjEuTGlzdENoYW5uZWxHcm91cHNSZXNwb25zZRJRCgxMaXN0Q2hhbm5lbHMSHy5jb21wYXNzLnYxLkxpc3RDaGFubmVsc1JlcXVlc3QaIC5jb21wYXNzLnYxLkxpc3RDaGFubmVsc1Jlc3BvbnNlElQKDUNyZWF0ZUNoYW5uZWwSIC5jb21wYXNzLnYxLkNyZWF0ZUNoYW5uZWxSZXF1ZXN0GiEuY29tcGFzcy52MS5DcmVhdGVDaGFubmVsUmVzcG9uc2USaQoUVXBkYXRlQ2hhbm5lbE1lbWJlcnMSJy5jb21wYXNzLnYxLlVwZGF0ZUNoYW5uZWxNZW1iZXJzUmVxdWVzdBooLmNvbXBhc3MudjEuVXBkYXRlQ2hhbm5lbE1lbWJlcnNSZXNwb25zZRI/CgZPcGVuRE0SGS5jb21wYXNzLnYxLk9wZW5ETVJlcXVlc3QaGi5jb21wYXNzLnYxLk9wZW5ETVJlc3BvbnNlElQKDVJlcGFyZW50QWdlbnQSIC5jb21wYXNzLnYxLlJlcGFyZW50QWdlbnRSZXF1ZXN0GiEuY29tcGFzcy52MS5SZXBhcmVudEFnZW50UmVzcG9uc2USWgoPUmVwYXJlbnRDaGFubmVsEiIuY29tcGFzcy52MS5SZXBhcmVudENoYW5uZWxSZXF1ZXN0GiMuY29tcGFzcy52MS5SZXBhcmVudENoYW5uZWxSZXNwb25zZRJjChJPcGVuQWdlbnRXb3Jrc3BhY2USJS5jb21wYXNzLnYxLk9wZW5BZ2VudFdvcmtzcGFjZVJlcXVlc3QaJi5jb21wYXNzLnYxLk9wZW5BZ2VudFdvcmtzcGFjZVJlc3BvbnNlElEKDExpc3RNZXNzYWdlcxIfLmNvbXBhc3MudjEuTGlzdE1lc3NhZ2VzUmVxdWVzdBogLmNvbXBhc3MudjEuTGlzdE1lc3NhZ2VzUmVzcG9uc2USTgoLUG9zdE1lc3NhZ2USHi5jb21wYXNzLnYxLlBvc3RNZXNzYWdlUmVxdWVzdBofLmNvbXBhc3MudjEuUG9zdE1lc3NhZ2VSZXNwb25zZRJLCgpMaXN0VG9waWNzEh0uY29tcGFzcy52MS5MaXN0VG9waWNzUmVxdWVzdBoeLmNvbXBhc3MudjEuTGlzdFRvcGljc1Jlc3BvbnNlEk4KC1VwZGF0ZVRvcGljEh4uY29tcGFzcy52MS5VcGRhdGVUb3BpY1JlcXVlc3QaHy5jb21wYXNzLnYxLlVwZGF0ZVRvcGljUmVzcG9uc2USUQoMUmVzcG9uZFRvQXNrEh8uY29tcGFzcy52MS5SZXNwb25kVG9Bc2tSZXF1ZXN0GiAuY29tcGFzcy52MS5SZXNwb25kVG9Bc2tSZXNwb25zZRJXCg5TZWFyY2hNZXNzYWdlcxIhLmNvbXBhc3MudjEuU2VhcmNoTWVzc2FnZXNSZXF1ZXN0GiIuY29tcGFzcy52MS5TZWFyY2hNZXNzYWdlc1Jlc3BvbnNlEl0KEFNldENoYW5uZWxQb2xpY3kSIy5jb21wYXNzLnYxLlNldENoYW5uZWxQb2xpY3lSZXF1ZXN0GiQuY29tcGFzcy52MS5TZXRDaGFubmVsUG9saWN5UmVzcG9uc2USSAoJR2V0Um9zdGVyEhwuY29tcGFzcy52MS5HZXRSb3N0ZXJSZXF1ZXN0Gh0uY29tcGFzcy52MS5HZXRSb3N0ZXJSZXNwb25zZRJgChFVcGRhdGVQaW5uZWRCb2FyZBIkLmNvbXBhc3MudjEuVXBkYXRlUGlubmVkQm9hcmRSZXF1ZXN0GiUuY29tcGFzcy52MS5VcGRhdGVQaW5uZWRCb2FyZFJlc3BvbnNlEk4KC0FwcHJvdmVQZWVyEh4uY29tcGFzcy52MS5BcHByb3ZlUGVlclJlcXVlc3QaHy5jb21wYXNzLnYxLkFwcHJvdmVQZWVyUmVzcG9uc2USSwoKUmV2b2tlUGVlchIdLmNvbXBhc3MudjEuUmV2b2tlUGVlclJlcXVlc3QaHi5jb21wYXNzLnYxLlJldm9rZVBlZXJSZXNwb25zZRJICglMaXN0UGVlcnMSHC5jb21wYXNzLnYxLkxpc3RQZWVyc1JlcXVlc3QaHS5jb21wYXNzLnYxLkxpc3RQZWVyc1Jlc3BvbnNlElkKDlN1YnNjcmliZUNvbW1zEiEuY29tcGFzcy52MS5TdWJzY3JpYmVDb21tc1JlcXVlc3QaIi5jb21wYXNzLnYxLlN1YnNjcmliZUNvbW1zUmVzcG9uc2UwAWIGcHJvdG8z", [file_compass_v1_compass]); /** * An account in the communication layer: a human user or an owned agent. Both @@ -685,6 +685,16 @@ export type Ask = Message$1<"compass.v1.Ask"> & { * @generated from field: bool answered = 3; */ answered: boolean; + + /** + * The issue or pull request this ask concerns, as one ref (RIG-12 or + * owner/repo#12). Optional. The server stores it in canonical form and + * rejects a value that is not exactly one ref with invalid_argument. Set only + * by the asker; the server never fills a default. + * + * @generated from field: string ref = 4; + */ + ref: string; }; /** diff --git a/packages/compass-client/src/gen/compass/v1/comms_pb.ts b/packages/compass-client/src/gen/compass/v1/comms_pb.ts index 569f61c33..18fe2d057 100644 --- a/packages/compass-client/src/gen/compass/v1/comms_pb.ts +++ b/packages/compass-client/src/gen/compass/v1/comms_pb.ts @@ -29,7 +29,7 @@ import type { Message as Message$1 } from "@bufbuild/protobuf"; * Describes the file compass/v1/comms.proto. */ export const file_compass_v1_comms: GenFile = /*@__PURE__*/ - fileDesc("ChZjb21wYXNzL3YxL2NvbW1zLnByb3RvEgpjb21wYXNzLnYxIsQBCgdBY2NvdW50EgoKAmlkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSJwoEdXNlchgKIAEoCzIXLmNvbXBhc3MudjEuVXNlckFjY291bnRIABIpCgVhZ2VudBgLIAEoCzIYLmNvbXBhc3MudjEuQWdlbnRBY2NvdW50SAASKwoGc3lzdGVtGAwgASgLMhkuY29tcGFzcy52MS5TeXN0ZW1BY2NvdW50SABCBgoEa2luZCIPCg1TeXN0ZW1BY2NvdW50IjEKC1VzZXJBY2NvdW50EiIKBHJvbGUYASABKA4yFC5jb21wYXNzLnYxLlVzZXJSb2xlIlcKDEFnZW50QWNjb3VudBIVCg1vd25lcl91c2VyX2lkGAEgASgJEhcKD2hvbWVfY2hhbm5lbF9pZBgCIAEoCRIXCg9wYXJlbnRfYWdlbnRfaWQYAyABKAkikAEKDENoYW5uZWxHcm91cBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD3BhcmVudF9ncm91cF9pZBgDIAEoCRIVCg1vd25lcl91c2VyX2lkGAQgASgJEjYKCnZpc2liaWxpdHkYBSABKA4yIi5jb21wYXNzLnYxLkNoYW5uZWxHcm91cFZpc2liaWxpdHkijAMKB0NoYW5uZWwSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghncm91cF9pZBgDIAEoCRIlCgRraW5kGAQgASgOMhcuY29tcGFzcy52MS5DaGFubmVsS2luZBIaChJtZW1iZXJfYWNjb3VudF9pZHMYBSADKAkSHgoWc3Vic2NyaWJlcl9hY2NvdW50X2lkcxgGIAMoCRIyCgtwb3N0X3BvbGljeRgHIAEoDjIdLmNvbXBhc3MudjEuQ2hhbm5lbFBvc3RQb2xpY3kSGAoQb3duZXJfYWNjb3VudF9pZBgIIAEoCRIeChZtYW5kYXRvcnlfc3Vic2NyaXB0aW9uGAkgASgIEi8KDnBpbm5lZF9lbnRyaWVzGAogAygLMhcuY29tcGFzcy52MS5QaW5uZWRFbnRyeRIXCg9wYXJlbnRfYWdlbnRfaWQYCyABKAkSOgoPbWVtYmVyc2hpcF9tb2RlGAwgASgOMiEuY29tcGFzcy52MS5DaGFubmVsTWVtYmVyc2hpcE1vZGUibAoLUGlubmVkRW50cnkSEgoKbWVzc2FnZV9pZBgBIAEoCRIQCghwb3NpdGlvbhgCIAEoBRIZChFwaW5uZWRfYXRfdW5peF9tcxgDIAEoAxIcChRwaW5uZWRfYnlfYWNjb3VudF9pZBgEIAEoCSI2Cg5BZ2VudFdvcmtzcGFjZRIKCgJpZBgBIAEoCRIYChBhZ2VudF9hY2NvdW50X2lkGAIgASgJIvIBCgVUb3BpYxIKCgJpZBgBIAEoCRISCgpjaGFubmVsX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSGgoSY3JlYXRlZF9hdF91bml4X21zGAQgASgDEh0KFWNyZWF0ZWRfYnlfYWNjb3VudF9pZBgFIAEoCRIQCghhcmNoaXZlZBgGIAEoCBIaCg1tZXNzYWdlX2NvdW50GAcgASgESACIAQESJAoXbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMYCCABKANIAYgBAUIQCg5fbWVzc2FnZV9jb3VudEIaChhfbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMiwgEKB01lc3NhZ2USCgoCaWQYASABKAkSEAoIdG9waWNfaWQYAiABKAkSGQoRYXV0aG9yX2FjY291bnRfaWQYAyABKAkSEgoKYXRfdW5peF9tcxgEIAEoAxIoCgZibG9ja3MYBSADKAsyGC5jb21wYXNzLnYxLk1lc3NhZ2VCbG9jaxIVCg1hdXRob3JfaGFuZGxlGAYgASgJEhIKCmNoYW5uZWxfaWQYByABKAkSFQoNdHVybl9zZXF1ZW5jZRgIIAEoBCJ5CgxNZXNzYWdlQmxvY2sSDgoEdGV4dBgBIAEoCUgAEh4KA2FzaxgCIAEoCzIPLmNvbXBhc3MudjEuQXNrSAASMAoKYXNrX2Fuc3dlchgDIAEoCzIaLmNvbXBhc3MudjEuQXNrQW5zd2VyQmxvY2tIAEIHCgVibG9jayJICg5Bc2tBbnN3ZXJCbG9jaxIcCgNhc2sYASABKAsyDy5jb21wYXNzLnYxLkFzaxIYChBhc2tlcl9hY2NvdW50X2lkGAIgASgJIlMKA0FzaxIOCgZhc2tfaWQYASABKAkSKgoJcXVlc3Rpb25zGAIgAygLMhcuY29tcGFzcy52MS5Bc2tRdWVzdGlvbhIQCghhbnN3ZXJlZBgDIAEoCCLxAQoLQXNrUXVlc3Rpb24SEwoLcXVlc3Rpb25faWQYASABKAkSEAoIcXVlc3Rpb24YAiABKAkSDgoGaGVhZGVyGAMgASgJEiYKB29wdGlvbnMYBCADKAsyFS5jb21wYXNzLnYxLkFza09wdGlvbhIWCg5hbGxvd19tdWx0aXBsZRgFIAEoCBIYCgtyZWNvbW1lbmRlZBgGIAEoBUgAiAEBEhkKEWNob3Nlbl9vcHRpb25faWRzGAcgAygJEhMKC2N1c3RvbV90ZXh0GAggASgJEhEKCXRpbWVkX291dBgJIAEoCEIOCgxfcmVjb21tZW5kZWQiTAoJQXNrT3B0aW9uEgoKAmlkGAEgASgJEg0KBWxhYmVsGAIgASgJEhMKC2Rlc2NyaXB0aW9uGAMgASgJEg8KB3ByZXZpZXcYBCABKAkixwUKFlN1YnNjcmliZUNvbW1zUmVzcG9uc2USCwoDc2VxGAEgASgEEhIKCmF0X3VuaXhfbXMYAiABKAMSFgoOaW5zdGFuY2VfZXBvY2gYAyABKAQSFAoMc25hcHNob3Rfc2VxGAQgASgEEjMKDm1lc3NhZ2VfcG9zdGVkGAogASgLMhkuY29tcGFzcy52MS5NZXNzYWdlUG9zdGVkSAASNQoPbWVzc2FnZV91cGRhdGVkGAsgASgLMhouY29tcGFzcy52MS5NZXNzYWdlVXBkYXRlZEgAEjUKD2NoYW5uZWxfY2hhbmdlZBgMIAEoCzIaLmNvbXBhc3MudjEuQ2hhbm5lbENoYW5nZWRIABJAChVjaGFubmVsX2dyb3VwX2NoYW5nZWQYDSABKAsyHy5jb21wYXNzLnYxLkNoYW5uZWxHcm91cENoYW5nZWRIABI1Cg9hY2NvdW50X2NoYW5nZWQYDiABKAsyGi5jb21wYXNzLnYxLkFjY291bnRDaGFuZ2VkSAASRAoXYWdlbnRfd29ya3NwYWNlX2NoYW5nZWQYDyABKAsyIS5jb21wYXNzLnYxLkFnZW50V29ya3NwYWNlQ2hhbmdlZEgAEjoKD3Jlc3luY19yZXF1aXJlZBgQIAEoCzIfLmNvbXBhc3MudjEuQ29tbXNSZXN5bmNSZXF1aXJlZEgAEkIKFmFnZW50X3ByZXNlbmNlX2NoYW5nZWQYESABKAsyIC5jb21wYXNzLnYxLkFnZW50UHJlc2VuY2VDaGFuZ2VkSAASMwoOdG9waWNfdXBzZXJ0ZWQYEiABKAsyGS5jb21wYXNzLnYxLlRvcGljVXBzZXJ0ZWRIABI8ChNhZ2VudF9ib2FyZF9jaGFuZ2VkGBMgASgLMh0uY29tcGFzcy52MS5BZ2VudEJvYXJkQ2hhbmdlZEgAQgkKB3BheWxvYWQiTAoNTWVzc2FnZVBvc3RlZBIkCgdtZXNzYWdlGAEgASgLMhMuY29tcGFzcy52MS5NZXNzYWdlEhUKDXR1cm5fc2VxdWVuY2UYAiABKAQiNgoOTWVzc2FnZVVwZGF0ZWQSJAoHbWVzc2FnZRgBIAEoCzITLmNvbXBhc3MudjEuTWVzc2FnZSIxCg1Ub3BpY1Vwc2VydGVkEiAKBXRvcGljGAEgASgLMhEuY29tcGFzcy52MS5Ub3BpYyJTCg5DaGFubmVsQ2hhbmdlZBIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsEhsKE3JlbW92ZWRfYWNjb3VudF9pZHMYAiADKAkiPgoTQ2hhbm5lbEdyb3VwQ2hhbmdlZBInCgVncm91cBgBIAEoCzIYLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwIjYKDkFjY291bnRDaGFuZ2VkEiQKB2FjY291bnQYASABKAsyEy5jb21wYXNzLnYxLkFjY291bnQiRgoVQWdlbnRXb3Jrc3BhY2VDaGFuZ2VkEi0KCXdvcmtzcGFjZRgBIAEoCzIaLmNvbXBhc3MudjEuQWdlbnRXb3Jrc3BhY2UiFQoTQ29tbXNSZXN5bmNSZXF1aXJlZCJvChRBZ2VudFByZXNlbmNlQ2hhbmdlZBIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEisKCHByZXNlbmNlGAIgASgOMhkuY29tcGFzcy52MS5BZ2VudFByZXNlbmNlEhAKCGFjdGl2aXR5GAMgASgJIncKDEJvYXJkV2FpdGluZxImCgJvbhgBIAEoDjIaLmNvbXBhc3MudjEuQm9hcmRXYWl0aW5nT24SFAoMYWdlbnRfaGFuZGxlGAIgASgJEgwKBHdoYXQYAyABKAkSCwoDcmVmGAQgASgJEg4KBmJsb2NrcxgFIAMoCSKFAQoNQm9hcmRTdWJhZ2VudBIKCgJpZBgBIAEoCRINCgVhZ2VudBgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIOCgZzdGF0dXMYBCABKAkSGgoSc3RhcnRlZF9hdF91bml4X21zGAUgASgDEhgKEGVuZGVkX2F0X3VuaXhfbXMYBiABKAMi+AEKCUJvYXJkVGFzaxILCgNrZXkYASABKAkSDQoFdGl0bGUYAiABKAkSEwoLcHJpbWFyeV9yZWYYAyABKAkSDAoEcmVmcxgEIAMoCRIpCgVzdGF0ZRgFIAEoDjIaLmNvbXBhc3MudjEuQm9hcmRUYXNrU3RhdGUSDAoEbm90ZRgGIAEoCRIpCgd3YWl0aW5nGAcgAygLMhguY29tcGFzcy52MS5Cb2FyZFdhaXRpbmcSLAoJc3ViYWdlbnRzGAggAygLMhkuY29tcGFzcy52MS5Cb2FyZFN1YmFnZW50EhoKEndyaXR0ZW5fYXRfdW5peF9tcxgJIAEoAyIdCgtCb2FyZFJlZnNPcBIOCgZ2YWx1ZXMYASADKAkiOgoOQm9hcmRXYWl0aW5nT3ASKAoGdmFsdWVzGAEgAygLMhguY29tcGFzcy52MS5Cb2FyZFdhaXRpbmcixAIKDkJvYXJkVGFza1BhdGNoEgsKA2tleRgBIAEoCRISCgV0aXRsZRgCIAEoCUgAiAEBEhgKC3ByaW1hcnlfcmVmGAMgASgJSAGIAQESLgoFc3RhdGUYBCABKA4yGi5jb21wYXNzLnYxLkJvYXJkVGFza1N0YXRlSAKIAQESEQoEbm90ZRgFIAEoCUgDiAEBEiUKBHJlZnMYBiABKAsyFy5jb21wYXNzLnYxLkJvYXJkUmVmc09wEisKB3dhaXRpbmcYByABKAsyGi5jb21wYXNzLnYxLkJvYXJkV2FpdGluZ09wEjMKEHVwc2VydF9zdWJhZ2VudHMYCCADKAsyGS5jb21wYXNzLnYxLkJvYXJkU3ViYWdlbnRCCAoGX3RpdGxlQg4KDF9wcmltYXJ5X3JlZkIICgZfc3RhdGVCBwoFX25vdGUiUQoJQm9hcmRIYWx0EicKBGtpbmQYASABKA4yGS5jb21wYXNzLnYxLkJvYXJkSGFsdEtpbmQSCwoDcmVmGAIgASgJEg4KBnJlYXNvbhgDIAEoCSKPAwoIQm9hcmRSZWYSCwoDcmVmGAEgASgJEiYKBGtpbmQYAiABKA4yGC5jb21wYXNzLnYxLkJvYXJkUmVmS2luZBINCgV0aXRsZRgDIAEoCRILCgN1cmwYBCABKAkSEwoLZm9yZ2Vfc3RhdGUYBSABKAkSKwoLaXNzdWVfc3RhdGUYBiABKA4yFi5jb21wYXNzLnYxLklzc3VlU3RhdGUSDQoFZHJhZnQYByABKAgSFAoMY2hlY2tzX3N0YXRlGAggASgJEiUKBGdhdGUYCSABKA4yFy5jb21wYXNzLnYxLkJvYXJkUHJHYXRlEhUKDXN0YWNrX3RpcF9yZWYYCiABKAkSFgoOc3RhY2tfcG9zaXRpb24YCyABKA0SDQoFb3duZWQYDCABKAgSGwoTb2JzZXJ2ZWRfYXRfdW5peF9tcxgNIAEoAxIZChFtZXJnZV9xdWV1ZV9zdGF0ZRgOIAEoCRIWCg5zdGFsZV9hcHByb3ZhbBgPIAEoCBIWCg50cmFja2VyX3N0YXR1cxgQIAEoCSKMAQoIQm9hcmRBc2sSDgoGYXNrX2lkGAEgASgJEhIKCm1lc3NhZ2VfaWQYAiABKAkSEgoKY2hhbm5lbF9pZBgDIAEoCRILCgNyZWYYBCABKAkSDgoGaGVhZGVyGAUgASgJEhAKCGFuc3dlcmVkGAYgASgIEhkKEXBvc3RlZF9hdF91bml4X21zGAcgASgDItUCCgpBZ2VudEJvYXJkEhgKEGFnZW50X2FjY291bnRfaWQYASABKAkSDgoGaGFuZGxlGAIgASgJEhYKDmZvY3VzX3Rhc2tfa2V5GAMgASgJEiMKBGhhbHQYBCABKAsyFS5jb21wYXNzLnYxLkJvYXJkSGFsdBIkCgV0YXNrcxgFIAMoCzIVLmNvbXBhc3MudjEuQm9hcmRUYXNrEiIKBHJlZnMYBiADKAsyFC5jb21wYXNzLnYxLkJvYXJkUmVmEhYKDnVudHJhY2tlZF9yZWZzGAcgAygJEiIKBGFza3MYCCADKAsyFC5jb21wYXNzLnYxLkJvYXJkQXNrEhQKDHdyaXR0ZW5fdHVybhgJIAEoBBIaChJ3cml0dGVuX2F0X3VuaXhfbXMYCiABKAMSDQoFc3RhbGUYCyABKAgSGQoRbWF0Y2hlZF90YXNrX2tleXMYDCADKAkiowEKEUFnZW50Qm9hcmRTdW1tYXJ5Eg0KBWZvY3VzGAEgASgJEhIKCnRhc2tfY291bnQYAiABKA0SGwoTd2FpdGluZ19vbl9vcGVyYXRvchgDIAEoDRIjCgRoYWx0GAQgASgLMhUuY29tcGFzcy52MS5Cb2FyZEhhbHQSGgoSd3JpdHRlbl9hdF91bml4X21zGAUgASgDEg0KBXN0YWxlGAYgASgIIvgBChdVcGRhdGVBZ2VudEJvYXJkUmVxdWVzdBIwCgx1cHNlcnRfdGFza3MYASADKAsyGi5jb21wYXNzLnYxLkJvYXJkVGFza1BhdGNoEhgKEHJlbW92ZV90YXNrX2tleXMYAiADKAkSGwoOZm9jdXNfdGFza19rZXkYAyABKAlIAIgBARIjCgRoYWx0GAQgASgLMhUuY29tcGFzcy52MS5Cb2FyZEhhbHQSEgoKY2xlYXJfaGFsdBgFIAEoCBIVCg10dXJuX3NlcXVlbmNlGAYgASgEEhEKCWF1dG9tYXRpYxgHIAEoCEIRCg9fZm9jdXNfdGFza19rZXkiQQoYVXBkYXRlQWdlbnRCb2FyZFJlc3BvbnNlEiUKBWJvYXJkGAEgASgLMhYuY29tcGFzcy52MS5BZ2VudEJvYXJkIt4BChZMaXN0QWdlbnRCb2FyZHNSZXF1ZXN0EhUKDWFnZW50X2hhbmRsZXMYASADKAkSDQoFcXVlcnkYAiABKAkSCwoDcmVmGAMgASgJEi4KCndhaXRpbmdfb24YBCABKA4yGi5jb21wYXNzLnYxLkJvYXJkV2FpdGluZ09uEikKBXN0YXRlGAUgASgOMhouY29tcGFzcy52MS5Cb2FyZFRhc2tTdGF0ZRInCgRoYWx0GAYgASgOMhkuY29tcGFzcy52MS5Cb2FyZEhhbHRLaW5kEg0KBWxpbWl0GAcgASgNIkEKF0xpc3RBZ2VudEJvYXJkc1Jlc3BvbnNlEiYKBmJvYXJkcxgBIAMoCzIWLmNvbXBhc3MudjEuQWdlbnRCb2FyZCJUChFBZ2VudEJvYXJkQ2hhbmdlZBIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEiUKBWJvYXJkGAIgASgLMhYuY29tcGFzcy52MS5BZ2VudEJvYXJkIlsKB1BlZXJpbmcSFwoPdXNlcl9hY2NvdW50X2lkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRInCgVzdGF0ZRgDIAEoDjIYLmNvbXBhc3MudjEuUGVlcmluZ1N0YXRlIikKEkFwcHJvdmVQZWVyUmVxdWVzdBITCgtwZWVyX2hhbmRsZRgBIAEoCSI7ChNBcHByb3ZlUGVlclJlc3BvbnNlEiQKB3BlZXJpbmcYASABKAsyEy5jb21wYXNzLnYxLlBlZXJpbmciKAoRUmV2b2tlUGVlclJlcXVlc3QSEwoLcGVlcl9oYW5kbGUYASABKAkiJQoSUmV2b2tlUGVlclJlc3BvbnNlEg8KB2RlbGV0ZWQYASABKAgiEgoQTGlzdFBlZXJzUmVxdWVzdCI6ChFMaXN0UGVlcnNSZXNwb25zZRIlCghwZWVyaW5ncxgBIAMoCzITLmNvbXBhc3MudjEuUGVlcmluZyI5ChFDcmVhdGVVc2VyUmVxdWVzdBIOCgZoYW5kbGUYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJIjoKEkNyZWF0ZVVzZXJSZXNwb25zZRIkCgdhY2NvdW50GAEgASgLMhMuY29tcGFzcy52MS5BY2NvdW50InAKEkNyZWF0ZUFnZW50UmVxdWVzdBIOCgZoYW5kbGUYASABKAkSFAoMZGlzcGxheV9uYW1lGAIgASgJEhUKDXBhcmVudF9oYW5kbGUYAyABKAkSDAoEcm9sZRgEIAEoCRIPCgdwZXJzb25hGAUgASgJIjsKE0NyZWF0ZUFnZW50UmVzcG9uc2USJAoHYWNjb3VudBgBIAEoCzITLmNvbXBhc3MudjEuQWNjb3VudCIrChNMaXN0QWNjb3VudHNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCI9ChRMaXN0QWNjb3VudHNSZXNwb25zZRIlCghhY2NvdW50cxgBIAMoCzITLmNvbXBhc3MudjEuQWNjb3VudCKVAQoZQ3JlYXRlQ2hhbm5lbEdyb3VwUmVxdWVzdBIMCgRuYW1lGAEgASgJEhcKD3BhcmVudF9ncm91cF9pZBgCIAEoCRI2Cgp2aXNpYmlsaXR5GAMgASgOMiIuY29tcGFzcy52MS5DaGFubmVsR3JvdXBWaXNpYmlsaXR5EhkKEXBhcmVudF9ncm91cF9uYW1lGAQgASgJIkUKGkNyZWF0ZUNoYW5uZWxHcm91cFJlc3BvbnNlEicKBWdyb3VwGAEgASgLMhguY29tcGFzcy52MS5DaGFubmVsR3JvdXAiMAoYTGlzdENoYW5uZWxHcm91cHNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCJFChlMaXN0Q2hhbm5lbEdyb3Vwc1Jlc3BvbnNlEigKBmdyb3VwcxgBIAMoCzIYLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwIisKE0xpc3RDaGFubmVsc1JlcXVlc3QSFAoMc25hcHNob3Rfc2VxGAEgASgEIj0KFExpc3RDaGFubmVsc1Jlc3BvbnNlEiUKCGNoYW5uZWxzGAEgAygLMhMuY29tcGFzcy52MS5DaGFubmVsIuIBChRDcmVhdGVDaGFubmVsUmVxdWVzdBIMCgRuYW1lGAEgASgJEhAKCGdyb3VwX2lkGAIgASgJEiUKBGtpbmQYAyABKA4yFy5jb21wYXNzLnYxLkNoYW5uZWxLaW5kEhYKDm1lbWJlcl9oYW5kbGVzGAQgAygJEhsKE3BhcmVudF9hZ2VudF9oYW5kbGUYBSABKAkSOgoPbWVtYmVyc2hpcF9tb2RlGAYgASgOMiEuY29tcGFzcy52MS5DaGFubmVsTWVtYmVyc2hpcE1vZGUSEgoKZ3JvdXBfbmFtZRgHIAEoCSI9ChVDcmVhdGVDaGFubmVsUmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCLCAQobVXBkYXRlQ2hhbm5lbE1lbWJlcnNSZXF1ZXN0EhIKCmNoYW5uZWxfaWQYASABKAkSGgoSYWRkX21lbWJlcl9oYW5kbGVzGAIgAygJEh0KFXJlbW92ZV9tZW1iZXJfaGFuZGxlcxgDIAMoCRIZChFzdWJzY3JpYmVfaGFuZGxlcxgEIAMoCRIbChN1bnN1YnNjcmliZV9oYW5kbGVzGAUgAygJEhwKFGNvbnZlcnRfY2hhbm5lbF9uYW1lGAYgASgJIkQKHFVwZGF0ZUNoYW5uZWxNZW1iZXJzUmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCIkCg1PcGVuRE1SZXF1ZXN0EhMKC3BlZXJfaGFuZGxlGAEgASgJIkcKDk9wZW5ETVJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwSDwoHY3JlYXRlZBgCIAEoCCJHChRSZXBhcmVudEFnZW50UmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkSGQoRbmV3X3BhcmVudF9oYW5kbGUYAiABKAkiPQoVUmVwYXJlbnRBZ2VudFJlc3BvbnNlEiQKB2FjY291bnQYASABKAsyEy5jb21wYXNzLnYxLkFjY291bnQiTQoWUmVwYXJlbnRDaGFubmVsUmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEh8KF25ld19wYXJlbnRfYWdlbnRfaGFuZGxlGAIgASgJIj8KF1JlcGFyZW50Q2hhbm5lbFJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwilwEKF1NldENoYW5uZWxQb2xpY3lSZXF1ZXN0EhIKCmNoYW5uZWxfaWQYASABKAkSMgoLcG9zdF9wb2xpY3kYAiABKA4yHS5jb21wYXNzLnYxLkNoYW5uZWxQb3N0UG9saWN5EhQKDG93bmVyX2hhbmRsZRgDIAEoCRIeChZtYW5kYXRvcnlfc3Vic2NyaXB0aW9uGAQgASgIIkAKGFNldENoYW5uZWxQb2xpY3lSZXNwb25zZRIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsIlIKEEdldFJvc3RlclJlcXVlc3QSJgoFc2NvcGUYASABKA4yFy5jb21wYXNzLnYxLlJvc3RlclNjb3BlEhYKDnZhbnRhZ2VfaGFuZGxlGAIgASgJIj0KEUdldFJvc3RlclJlc3BvbnNlEigKB2VudHJpZXMYASADKAsyFy5jb21wYXNzLnYxLlJvc3RlckVudHJ5IvABCgtSb3N0ZXJFbnRyeRIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSFwoPcGFyZW50X2FnZW50X2lkGAQgASgJEisKCHByZXNlbmNlGAUgASgOMhkuY29tcGFzcy52MS5BZ2VudFByZXNlbmNlEhAKCGFjdGl2aXR5GAYgASgJEhsKE2FjdGl2aXR5X2F0X3VuaXhfbXMYByABKAMSLAoFYm9hcmQYCCABKAsyHS5jb21wYXNzLnYxLkFnZW50Qm9hcmRTdW1tYXJ5IncKGFVwZGF0ZVBpbm5lZEJvYXJkUmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEiUKA3BpbhgCIAEoCzIWLmNvbXBhc3MudjEuUGluTWVzc2FnZUgAEhoKEHVucGluX21lc3NhZ2VfaWQYAyABKAlIAEIECgJvcCI8CgpQaW5NZXNzYWdlEhIKCm1lc3NhZ2VfaWQYASABKAkSGgoScmVwbGFjZV9tZXNzYWdlX2lkGAIgASgJIkEKGVVwZGF0ZVBpbm5lZEJvYXJkUmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCIxChlPcGVuQWdlbnRXb3Jrc3BhY2VSZXF1ZXN0EhQKDGFnZW50X2hhbmRsZRgBIAEoCSJLChpPcGVuQWdlbnRXb3Jrc3BhY2VSZXNwb25zZRItCgl3b3Jrc3BhY2UYASABKAsyGi5jb21wYXNzLnYxLkFnZW50V29ya3NwYWNlIooBChNMaXN0TWVzc2FnZXNSZXF1ZXN0EhQKCmNoYW5uZWxfaWQYASABKAlIABINCgVsaW1pdBgCIAEoDRIZChFiZWZvcmVfbWVzc2FnZV9pZBgDIAEoCRIUCgxzbmFwc2hvdF9zZXEYBCABKAQSEAoIdG9waWNfaWQYBSABKAlCCwoJY29udGFpbmVyIj0KFExpc3RNZXNzYWdlc1Jlc3BvbnNlEiUKCG1lc3NhZ2VzGAEgAygLMhMuY29tcGFzcy52MS5NZXNzYWdlItwBChJQb3N0TWVzc2FnZVJlcXVlc3QSFAoKY2hhbm5lbF9pZBgBIAEoCUgAEigKBmJsb2NrcxgCIAMoCzIYLmNvbXBhc3MudjEuTWVzc2FnZUJsb2NrEhIKCHRvcGljX2lkGAMgASgJSAESFAoKdG9waWNfbmFtZRgEIAEoCUgBEhkKEWNsaWVudF9yZXF1ZXN0X2lkGAUgASgJEhQKDGNyZWF0ZV90b3BpYxgGIAEoCBIVCg10dXJuX3NlcXVlbmNlGAcgASgEQgsKCWNvbnRhaW5lckIHCgV0b3BpYyI7ChNQb3N0TWVzc2FnZVJlc3BvbnNlEiQKB21lc3NhZ2UYASABKAsyEy5jb21wYXNzLnYxLk1lc3NhZ2UiQQoRTGlzdFRvcGljc1JlcXVlc3QSEgoKY2hhbm5lbF9pZBgBIAEoCRIYChBpbmNsdWRlX2FyY2hpdmVkGAIgASgIIjcKEkxpc3RUb3BpY3NSZXNwb25zZRIhCgZ0b3BpY3MYASADKAsyES5jb21wYXNzLnYxLlRvcGljImYKElVwZGF0ZVRvcGljUmVxdWVzdBIQCgh0b3BpY19pZBgBIAEoCRIRCgRuYW1lGAIgASgJSACIAQESFQoIYXJjaGl2ZWQYAyABKAhIAYgBAUIHCgVfbmFtZUILCglfYXJjaGl2ZWQiNwoTVXBkYXRlVG9waWNSZXNwb25zZRIgCgV0b3BpYxgBIAEoCzIRLmNvbXBhc3MudjEuVG9waWMiVQoTUmVzcG9uZFRvQXNrUmVxdWVzdBIOCgZhc2tfaWQYASABKAkSLgoHYW5zd2VycxgCIAMoCzIdLmNvbXBhc3MudjEuQXNrUXVlc3Rpb25BbnN3ZXIiWAoRQXNrUXVlc3Rpb25BbnN3ZXISEwoLcXVlc3Rpb25faWQYASABKAkSGQoRY2hvc2VuX29wdGlvbl9pZHMYAiADKAkSEwoLY3VzdG9tX3RleHQYAyABKAkiFgoUUmVzcG9uZFRvQXNrUmVzcG9uc2UiagoVU2VhcmNoTWVzc2FnZXNSZXF1ZXN0Eg0KBXF1ZXJ5GAEgASgJEhQKCmNoYW5uZWxfaWQYAiABKAlIABINCgVsaW1pdBgDIAEoDRIUCgxzbmFwc2hvdF9zZXEYBCABKARCBwoFc2NvcGUiPwoWU2VhcmNoTWVzc2FnZXNSZXNwb25zZRIlCghtZXNzYWdlcxgBIAMoCzITLmNvbXBhc3MudjEuTWVzc2FnZSJCChVTdWJzY3JpYmVDb21tc1JlcXVlc3QSEQoJc2luY2Vfc2VxGAEgASgEEhYKDmluc3RhbmNlX2Vwb2NoGAIgASgEKjUKCFVzZXJSb2xlEhQKEFVTRVJfUk9MRV9NRU1CRVIQABITCg9VU0VSX1JPTEVfQURNSU4QASphChZDaGFubmVsR3JvdXBWaXNpYmlsaXR5EiIKHkNIQU5ORUxfR1JPVVBfVklTSUJJTElUWV9PV05FUhAAEiMKH0NIQU5ORUxfR1JPVVBfVklTSUJJTElUWV9TSEFSRUQQASpVChFDaGFubmVsUG9zdFBvbGljeRIcChhDSEFOTkVMX1BPU1RfUE9MSUNZX09QRU4QABIiCh5DSEFOTkVMX1BPU1RfUE9MSUNZX09XTkVSX09OTFkQASpfChVDaGFubmVsTWVtYmVyc2hpcE1vZGUSJAogQ0hBTk5FTF9NRU1CRVJTSElQX01PREVfRVhQTElDSVQQABIgChxDSEFOTkVMX01FTUJFUlNISVBfTU9ERV9UUkVFEAEqWwoLQ2hhbm5lbEtpbmQSGAoUQ0hBTk5FTF9LSU5EX0NIQU5ORUwQABITCg9DSEFOTkVMX0tJTkRfRE0QARIdChVDSEFOTkVMX0tJTkRfR1JPVVBfRE0QAhoCCAEqnAEKDUFnZW50UHJlc2VuY2USHgoaQUdFTlRfUFJFU0VOQ0VfVU5TUEVDSUZJRUQQABIXChNBR0VOVF9QUkVTRU5DRV9JRExFEAESGgoWQUdFTlRfUFJFU0VOQ0VfV09SS0lORxACEhoKFkFHRU5UX1BSRVNFTkNFX1dBSVRJTkcQAxIaChZBR0VOVF9QUkVTRU5DRV9PRkZMSU5FEAQqwwEKDkJvYXJkVGFza1N0YXRlEiAKHEJPQVJEX1RBU0tfU1RBVEVfVU5TUEVDSUZJRUQQABIbChdCT0FSRF9UQVNLX1NUQVRFX0FDVElWRRABEhwKGEJPQVJEX1RBU0tfU1RBVEVfQkxPQ0tFRBACEhwKGEJPQVJEX1RBU0tfU1RBVEVfV0FJVElORxADEhsKF0JPQVJEX1RBU0tfU1RBVEVfUEFSS0VEEAQSGQoVQk9BUkRfVEFTS19TVEFURV9ET05FEAUqigEKDUJvYXJkSGFsdEtpbmQSHwobQk9BUkRfSEFMVF9LSU5EX1VOU1BFQ0lGSUVEEAASGAoUQk9BUkRfSEFMVF9LSU5EX0RPTkUQARIbChdCT0FSRF9IQUxUX0tJTkRfQkxPQ0tFRBACEiEKHUJPQVJEX0hBTFRfS0lORF9BV0FJVElOR19VU0VSEAMqjAEKDkJvYXJkV2FpdGluZ09uEiAKHEJPQVJEX1dBSVRJTkdfT05fVU5TUEVDSUZJRUQQABIdChlCT0FSRF9XQUlUSU5HX09OX09QRVJBVE9SEAESGgoWQk9BUkRfV0FJVElOR19PTl9BR0VOVBACEh0KGUJPQVJEX1dBSVRJTkdfT05fRVhURVJOQUwQAyppCgxCb2FyZFJlZktpbmQSHgoaQk9BUkRfUkVGX0tJTkRfVU5TUEVDSUZJRUQQABIYChRCT0FSRF9SRUZfS0lORF9JU1NVRRABEh8KG0JPQVJEX1JFRl9LSU5EX1BVTExfUkVRVUVTVBACKqADCgtCb2FyZFByR2F0ZRIdChlCT0FSRF9QUl9HQVRFX1VOU1BFQ0lGSUVEEAASFwoTQk9BUkRfUFJfR0FURV9EUkFGVBABEiAKHEJPQVJEX1BSX0dBVEVfQ0hFQ0tTX1BFTkRJTkcQAhIfChtCT0FSRF9QUl9HQVRFX0NIRUNLU19GQUlMRUQQAxIjCh9CT0FSRF9QUl9HQVRFX0NIQU5HRVNfUkVRVUVTVEVEEAQSIQodQk9BUkRfUFJfR0FURV9BV0FJVElOR19SRVZJRVcQBRIiCh5CT0FSRF9QUl9HQVRFX0FXQUlUSU5HX0VOUVVFVUUQBhIYChRCT0FSRF9QUl9HQVRFX01FUkdFRBAHEhgKFEJPQVJEX1BSX0dBVEVfQ0xPU0VEEAgSGAoUQk9BUkRfUFJfR0FURV9RVUVVRUQQCRIeChpCT0FSRF9QUl9HQVRFX1FVRVVFX0ZBSUxFRBAKEh8KG0JPQVJEX1BSX0dBVEVfUVVFVUVfUkVNT1ZFRBALEhsKF0JPQVJEX1BSX0dBVEVfQ09ORkxJQ1RTEAwqkQEKDFBlZXJpbmdTdGF0ZRIdChlQRUVSSU5HX1NUQVRFX1VOU1BFQ0lGSUVEEAASIgoeUEVFUklOR19TVEFURV9QRU5ESU5HX09VVEdPSU5HEAESIgoeUEVFUklOR19TVEFURV9QRU5ESU5HX0lOQ09NSU5HEAISGgoWUEVFUklOR19TVEFURV9BUFBST1ZFRBADKl4KC1Jvc3RlclNjb3BlEh0KGVJPU1RFUl9TQ09QRV9ORUlHSEJPUkhPT0QQABIYChRST1NURVJfU0NPUEVfU1VCVFJFRRABEhYKElJPU1RFUl9TQ09QRV9PV05FUhACMuoQCgxDb21tc1NlcnZpY2USSwoKQ3JlYXRlVXNlchIdLmNvbXBhc3MudjEuQ3JlYXRlVXNlclJlcXVlc3QaHi5jb21wYXNzLnYxLkNyZWF0ZVVzZXJSZXNwb25zZRJOCgtDcmVhdGVBZ2VudBIeLmNvbXBhc3MudjEuQ3JlYXRlQWdlbnRSZXF1ZXN0Gh8uY29tcGFzcy52MS5DcmVhdGVBZ2VudFJlc3BvbnNlElEKDExpc3RBY2NvdW50cxIfLmNvbXBhc3MudjEuTGlzdEFjY291bnRzUmVxdWVzdBogLmNvbXBhc3MudjEuTGlzdEFjY291bnRzUmVzcG9uc2USYwoSQ3JlYXRlQ2hhbm5lbEdyb3VwEiUuY29tcGFzcy52MS5DcmVhdGVDaGFubmVsR3JvdXBSZXF1ZXN0GiYuY29tcGFzcy52MS5DcmVhdGVDaGFubmVsR3JvdXBSZXNwb25zZRJgChFMaXN0Q2hhbm5lbEdyb3VwcxIkLmNvbXBhc3MudjEuTGlzdENoYW5uZWxHcm91cHNSZXF1ZXN0GiUuY29tcGFzcy52MS5MaXN0Q2hhbm5lbEdyb3Vwc1Jlc3BvbnNlElEKDExpc3RDaGFubmVscxIfLmNvbXBhc3MudjEuTGlzdENoYW5uZWxzUmVxdWVzdBogLmNvbXBhc3MudjEuTGlzdENoYW5uZWxzUmVzcG9uc2USVAoNQ3JlYXRlQ2hhbm5lbBIgLmNvbXBhc3MudjEuQ3JlYXRlQ2hhbm5lbFJlcXVlc3QaIS5jb21wYXNzLnYxLkNyZWF0ZUNoYW5uZWxSZXNwb25zZRJpChRVcGRhdGVDaGFubmVsTWVtYmVycxInLmNvbXBhc3MudjEuVXBkYXRlQ2hhbm5lbE1lbWJlcnNSZXF1ZXN0GiguY29tcGFzcy52MS5VcGRhdGVDaGFubmVsTWVtYmVyc1Jlc3BvbnNlEj8KBk9wZW5ETRIZLmNvbXBhc3MudjEuT3BlbkRNUmVxdWVzdBoaLmNvbXBhc3MudjEuT3BlbkRNUmVzcG9uc2USVAoNUmVwYXJlbnRBZ2VudBIgLmNvbXBhc3MudjEuUmVwYXJlbnRBZ2VudFJlcXVlc3QaIS5jb21wYXNzLnYxLlJlcGFyZW50QWdlbnRSZXNwb25zZRJaCg9SZXBhcmVudENoYW5uZWwSIi5jb21wYXNzLnYxLlJlcGFyZW50Q2hhbm5lbFJlcXVlc3QaIy5jb21wYXNzLnYxLlJlcGFyZW50Q2hhbm5lbFJlc3BvbnNlEmMKEk9wZW5BZ2VudFdvcmtzcGFjZRIlLmNvbXBhc3MudjEuT3BlbkFnZW50V29ya3NwYWNlUmVxdWVzdBomLmNvbXBhc3MudjEuT3BlbkFnZW50V29ya3NwYWNlUmVzcG9uc2USUQoMTGlzdE1lc3NhZ2VzEh8uY29tcGFzcy52MS5MaXN0TWVzc2FnZXNSZXF1ZXN0GiAuY29tcGFzcy52MS5MaXN0TWVzc2FnZXNSZXNwb25zZRJOCgtQb3N0TWVzc2FnZRIeLmNvbXBhc3MudjEuUG9zdE1lc3NhZ2VSZXF1ZXN0Gh8uY29tcGFzcy52MS5Qb3N0TWVzc2FnZVJlc3BvbnNlEksKCkxpc3RUb3BpY3MSHS5jb21wYXNzLnYxLkxpc3RUb3BpY3NSZXF1ZXN0Gh4uY29tcGFzcy52MS5MaXN0VG9waWNzUmVzcG9uc2USTgoLVXBkYXRlVG9waWMSHi5jb21wYXNzLnYxLlVwZGF0ZVRvcGljUmVxdWVzdBofLmNvbXBhc3MudjEuVXBkYXRlVG9waWNSZXNwb25zZRJRCgxSZXNwb25kVG9Bc2sSHy5jb21wYXNzLnYxLlJlc3BvbmRUb0Fza1JlcXVlc3QaIC5jb21wYXNzLnYxLlJlc3BvbmRUb0Fza1Jlc3BvbnNlElcKDlNlYXJjaE1lc3NhZ2VzEiEuY29tcGFzcy52MS5TZWFyY2hNZXNzYWdlc1JlcXVlc3QaIi5jb21wYXNzLnYxLlNlYXJjaE1lc3NhZ2VzUmVzcG9uc2USXQoQU2V0Q2hhbm5lbFBvbGljeRIjLmNvbXBhc3MudjEuU2V0Q2hhbm5lbFBvbGljeVJlcXVlc3QaJC5jb21wYXNzLnYxLlNldENoYW5uZWxQb2xpY3lSZXNwb25zZRJICglHZXRSb3N0ZXISHC5jb21wYXNzLnYxLkdldFJvc3RlclJlcXVlc3QaHS5jb21wYXNzLnYxLkdldFJvc3RlclJlc3BvbnNlEmAKEVVwZGF0ZVBpbm5lZEJvYXJkEiQuY29tcGFzcy52MS5VcGRhdGVQaW5uZWRCb2FyZFJlcXVlc3QaJS5jb21wYXNzLnYxLlVwZGF0ZVBpbm5lZEJvYXJkUmVzcG9uc2USTgoLQXBwcm92ZVBlZXISHi5jb21wYXNzLnYxLkFwcHJvdmVQZWVyUmVxdWVzdBofLmNvbXBhc3MudjEuQXBwcm92ZVBlZXJSZXNwb25zZRJLCgpSZXZva2VQZWVyEh0uY29tcGFzcy52MS5SZXZva2VQZWVyUmVxdWVzdBoeLmNvbXBhc3MudjEuUmV2b2tlUGVlclJlc3BvbnNlEkgKCUxpc3RQZWVycxIcLmNvbXBhc3MudjEuTGlzdFBlZXJzUmVxdWVzdBodLmNvbXBhc3MudjEuTGlzdFBlZXJzUmVzcG9uc2USWQoOU3Vic2NyaWJlQ29tbXMSIS5jb21wYXNzLnYxLlN1YnNjcmliZUNvbW1zUmVxdWVzdBoiLmNvbXBhc3MudjEuU3Vic2NyaWJlQ29tbXNSZXNwb25zZTABYgZwcm90bzM", [file_compass_v1_compass]); + fileDesc("ChZjb21wYXNzL3YxL2NvbW1zLnByb3RvEgpjb21wYXNzLnYxIsQBCgdBY2NvdW50EgoKAmlkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIUCgxkaXNwbGF5X25hbWUYAyABKAkSJwoEdXNlchgKIAEoCzIXLmNvbXBhc3MudjEuVXNlckFjY291bnRIABIpCgVhZ2VudBgLIAEoCzIYLmNvbXBhc3MudjEuQWdlbnRBY2NvdW50SAASKwoGc3lzdGVtGAwgASgLMhkuY29tcGFzcy52MS5TeXN0ZW1BY2NvdW50SABCBgoEa2luZCIPCg1TeXN0ZW1BY2NvdW50IjEKC1VzZXJBY2NvdW50EiIKBHJvbGUYASABKA4yFC5jb21wYXNzLnYxLlVzZXJSb2xlIlcKDEFnZW50QWNjb3VudBIVCg1vd25lcl91c2VyX2lkGAEgASgJEhcKD2hvbWVfY2hhbm5lbF9pZBgCIAEoCRIXCg9wYXJlbnRfYWdlbnRfaWQYAyABKAkikAEKDENoYW5uZWxHcm91cBIKCgJpZBgBIAEoCRIMCgRuYW1lGAIgASgJEhcKD3BhcmVudF9ncm91cF9pZBgDIAEoCRIVCg1vd25lcl91c2VyX2lkGAQgASgJEjYKCnZpc2liaWxpdHkYBSABKA4yIi5jb21wYXNzLnYxLkNoYW5uZWxHcm91cFZpc2liaWxpdHkijAMKB0NoYW5uZWwSCgoCaWQYASABKAkSDAoEbmFtZRgCIAEoCRIQCghncm91cF9pZBgDIAEoCRIlCgRraW5kGAQgASgOMhcuY29tcGFzcy52MS5DaGFubmVsS2luZBIaChJtZW1iZXJfYWNjb3VudF9pZHMYBSADKAkSHgoWc3Vic2NyaWJlcl9hY2NvdW50X2lkcxgGIAMoCRIyCgtwb3N0X3BvbGljeRgHIAEoDjIdLmNvbXBhc3MudjEuQ2hhbm5lbFBvc3RQb2xpY3kSGAoQb3duZXJfYWNjb3VudF9pZBgIIAEoCRIeChZtYW5kYXRvcnlfc3Vic2NyaXB0aW9uGAkgASgIEi8KDnBpbm5lZF9lbnRyaWVzGAogAygLMhcuY29tcGFzcy52MS5QaW5uZWRFbnRyeRIXCg9wYXJlbnRfYWdlbnRfaWQYCyABKAkSOgoPbWVtYmVyc2hpcF9tb2RlGAwgASgOMiEuY29tcGFzcy52MS5DaGFubmVsTWVtYmVyc2hpcE1vZGUibAoLUGlubmVkRW50cnkSEgoKbWVzc2FnZV9pZBgBIAEoCRIQCghwb3NpdGlvbhgCIAEoBRIZChFwaW5uZWRfYXRfdW5peF9tcxgDIAEoAxIcChRwaW5uZWRfYnlfYWNjb3VudF9pZBgEIAEoCSI2Cg5BZ2VudFdvcmtzcGFjZRIKCgJpZBgBIAEoCRIYChBhZ2VudF9hY2NvdW50X2lkGAIgASgJIvIBCgVUb3BpYxIKCgJpZBgBIAEoCRISCgpjaGFubmVsX2lkGAIgASgJEgwKBG5hbWUYAyABKAkSGgoSY3JlYXRlZF9hdF91bml4X21zGAQgASgDEh0KFWNyZWF0ZWRfYnlfYWNjb3VudF9pZBgFIAEoCRIQCghhcmNoaXZlZBgGIAEoCBIaCg1tZXNzYWdlX2NvdW50GAcgASgESACIAQESJAoXbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMYCCABKANIAYgBAUIQCg5fbWVzc2FnZV9jb3VudEIaChhfbGFzdF9tZXNzYWdlX2F0X3VuaXhfbXMiwgEKB01lc3NhZ2USCgoCaWQYASABKAkSEAoIdG9waWNfaWQYAiABKAkSGQoRYXV0aG9yX2FjY291bnRfaWQYAyABKAkSEgoKYXRfdW5peF9tcxgEIAEoAxIoCgZibG9ja3MYBSADKAsyGC5jb21wYXNzLnYxLk1lc3NhZ2VCbG9jaxIVCg1hdXRob3JfaGFuZGxlGAYgASgJEhIKCmNoYW5uZWxfaWQYByABKAkSFQoNdHVybl9zZXF1ZW5jZRgIIAEoBCJ5CgxNZXNzYWdlQmxvY2sSDgoEdGV4dBgBIAEoCUgAEh4KA2FzaxgCIAEoCzIPLmNvbXBhc3MudjEuQXNrSAASMAoKYXNrX2Fuc3dlchgDIAEoCzIaLmNvbXBhc3MudjEuQXNrQW5zd2VyQmxvY2tIAEIHCgVibG9jayJICg5Bc2tBbnN3ZXJCbG9jaxIcCgNhc2sYASABKAsyDy5jb21wYXNzLnYxLkFzaxIYChBhc2tlcl9hY2NvdW50X2lkGAIgASgJImAKA0FzaxIOCgZhc2tfaWQYASABKAkSKgoJcXVlc3Rpb25zGAIgAygLMhcuY29tcGFzcy52MS5Bc2tRdWVzdGlvbhIQCghhbnN3ZXJlZBgDIAEoCBILCgNyZWYYBCABKAki8QEKC0Fza1F1ZXN0aW9uEhMKC3F1ZXN0aW9uX2lkGAEgASgJEhAKCHF1ZXN0aW9uGAIgASgJEg4KBmhlYWRlchgDIAEoCRImCgdvcHRpb25zGAQgAygLMhUuY29tcGFzcy52MS5Bc2tPcHRpb24SFgoOYWxsb3dfbXVsdGlwbGUYBSABKAgSGAoLcmVjb21tZW5kZWQYBiABKAVIAIgBARIZChFjaG9zZW5fb3B0aW9uX2lkcxgHIAMoCRITCgtjdXN0b21fdGV4dBgIIAEoCRIRCgl0aW1lZF9vdXQYCSABKAhCDgoMX3JlY29tbWVuZGVkIkwKCUFza09wdGlvbhIKCgJpZBgBIAEoCRINCgVsYWJlbBgCIAEoCRITCgtkZXNjcmlwdGlvbhgDIAEoCRIPCgdwcmV2aWV3GAQgASgJIscFChZTdWJzY3JpYmVDb21tc1Jlc3BvbnNlEgsKA3NlcRgBIAEoBBISCgphdF91bml4X21zGAIgASgDEhYKDmluc3RhbmNlX2Vwb2NoGAMgASgEEhQKDHNuYXBzaG90X3NlcRgEIAEoBBIzCg5tZXNzYWdlX3Bvc3RlZBgKIAEoCzIZLmNvbXBhc3MudjEuTWVzc2FnZVBvc3RlZEgAEjUKD21lc3NhZ2VfdXBkYXRlZBgLIAEoCzIaLmNvbXBhc3MudjEuTWVzc2FnZVVwZGF0ZWRIABI1Cg9jaGFubmVsX2NoYW5nZWQYDCABKAsyGi5jb21wYXNzLnYxLkNoYW5uZWxDaGFuZ2VkSAASQAoVY2hhbm5lbF9ncm91cF9jaGFuZ2VkGA0gASgLMh8uY29tcGFzcy52MS5DaGFubmVsR3JvdXBDaGFuZ2VkSAASNQoPYWNjb3VudF9jaGFuZ2VkGA4gASgLMhouY29tcGFzcy52MS5BY2NvdW50Q2hhbmdlZEgAEkQKF2FnZW50X3dvcmtzcGFjZV9jaGFuZ2VkGA8gASgLMiEuY29tcGFzcy52MS5BZ2VudFdvcmtzcGFjZUNoYW5nZWRIABI6Cg9yZXN5bmNfcmVxdWlyZWQYECABKAsyHy5jb21wYXNzLnYxLkNvbW1zUmVzeW5jUmVxdWlyZWRIABJCChZhZ2VudF9wcmVzZW5jZV9jaGFuZ2VkGBEgASgLMiAuY29tcGFzcy52MS5BZ2VudFByZXNlbmNlQ2hhbmdlZEgAEjMKDnRvcGljX3Vwc2VydGVkGBIgASgLMhkuY29tcGFzcy52MS5Ub3BpY1Vwc2VydGVkSAASPAoTYWdlbnRfYm9hcmRfY2hhbmdlZBgTIAEoCzIdLmNvbXBhc3MudjEuQWdlbnRCb2FyZENoYW5nZWRIAEIJCgdwYXlsb2FkIkwKDU1lc3NhZ2VQb3N0ZWQSJAoHbWVzc2FnZRgBIAEoCzITLmNvbXBhc3MudjEuTWVzc2FnZRIVCg10dXJuX3NlcXVlbmNlGAIgASgEIjYKDk1lc3NhZ2VVcGRhdGVkEiQKB21lc3NhZ2UYASABKAsyEy5jb21wYXNzLnYxLk1lc3NhZ2UiMQoNVG9waWNVcHNlcnRlZBIgCgV0b3BpYxgBIAEoCzIRLmNvbXBhc3MudjEuVG9waWMiUwoOQ2hhbm5lbENoYW5nZWQSJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbBIbChNyZW1vdmVkX2FjY291bnRfaWRzGAIgAygJIj4KE0NoYW5uZWxHcm91cENoYW5nZWQSJwoFZ3JvdXAYASABKAsyGC5jb21wYXNzLnYxLkNoYW5uZWxHcm91cCI2Cg5BY2NvdW50Q2hhbmdlZBIkCgdhY2NvdW50GAEgASgLMhMuY29tcGFzcy52MS5BY2NvdW50IkYKFUFnZW50V29ya3NwYWNlQ2hhbmdlZBItCgl3b3Jrc3BhY2UYASABKAsyGi5jb21wYXNzLnYxLkFnZW50V29ya3NwYWNlIhUKE0NvbW1zUmVzeW5jUmVxdWlyZWQibwoUQWdlbnRQcmVzZW5jZUNoYW5nZWQSGAoQYWdlbnRfYWNjb3VudF9pZBgBIAEoCRIrCghwcmVzZW5jZRgCIAEoDjIZLmNvbXBhc3MudjEuQWdlbnRQcmVzZW5jZRIQCghhY3Rpdml0eRgDIAEoCSJ3CgxCb2FyZFdhaXRpbmcSJgoCb24YASABKA4yGi5jb21wYXNzLnYxLkJvYXJkV2FpdGluZ09uEhQKDGFnZW50X2hhbmRsZRgCIAEoCRIMCgR3aGF0GAMgASgJEgsKA3JlZhgEIAEoCRIOCgZibG9ja3MYBSADKAkihQEKDUJvYXJkU3ViYWdlbnQSCgoCaWQYASABKAkSDQoFYWdlbnQYAiABKAkSEwoLZGVzY3JpcHRpb24YAyABKAkSDgoGc3RhdHVzGAQgASgJEhoKEnN0YXJ0ZWRfYXRfdW5peF9tcxgFIAEoAxIYChBlbmRlZF9hdF91bml4X21zGAYgASgDIvgBCglCb2FyZFRhc2sSCwoDa2V5GAEgASgJEg0KBXRpdGxlGAIgASgJEhMKC3ByaW1hcnlfcmVmGAMgASgJEgwKBHJlZnMYBCADKAkSKQoFc3RhdGUYBSABKA4yGi5jb21wYXNzLnYxLkJvYXJkVGFza1N0YXRlEgwKBG5vdGUYBiABKAkSKQoHd2FpdGluZxgHIAMoCzIYLmNvbXBhc3MudjEuQm9hcmRXYWl0aW5nEiwKCXN1YmFnZW50cxgIIAMoCzIZLmNvbXBhc3MudjEuQm9hcmRTdWJhZ2VudBIaChJ3cml0dGVuX2F0X3VuaXhfbXMYCSABKAMiHQoLQm9hcmRSZWZzT3ASDgoGdmFsdWVzGAEgAygJIjoKDkJvYXJkV2FpdGluZ09wEigKBnZhbHVlcxgBIAMoCzIYLmNvbXBhc3MudjEuQm9hcmRXYWl0aW5nIsQCCg5Cb2FyZFRhc2tQYXRjaBILCgNrZXkYASABKAkSEgoFdGl0bGUYAiABKAlIAIgBARIYCgtwcmltYXJ5X3JlZhgDIAEoCUgBiAEBEi4KBXN0YXRlGAQgASgOMhouY29tcGFzcy52MS5Cb2FyZFRhc2tTdGF0ZUgCiAEBEhEKBG5vdGUYBSABKAlIA4gBARIlCgRyZWZzGAYgASgLMhcuY29tcGFzcy52MS5Cb2FyZFJlZnNPcBIrCgd3YWl0aW5nGAcgASgLMhouY29tcGFzcy52MS5Cb2FyZFdhaXRpbmdPcBIzChB1cHNlcnRfc3ViYWdlbnRzGAggAygLMhkuY29tcGFzcy52MS5Cb2FyZFN1YmFnZW50QggKBl90aXRsZUIOCgxfcHJpbWFyeV9yZWZCCAoGX3N0YXRlQgcKBV9ub3RlIlEKCUJvYXJkSGFsdBInCgRraW5kGAEgASgOMhkuY29tcGFzcy52MS5Cb2FyZEhhbHRLaW5kEgsKA3JlZhgCIAEoCRIOCgZyZWFzb24YAyABKAkijwMKCEJvYXJkUmVmEgsKA3JlZhgBIAEoCRImCgRraW5kGAIgASgOMhguY29tcGFzcy52MS5Cb2FyZFJlZktpbmQSDQoFdGl0bGUYAyABKAkSCwoDdXJsGAQgASgJEhMKC2ZvcmdlX3N0YXRlGAUgASgJEisKC2lzc3VlX3N0YXRlGAYgASgOMhYuY29tcGFzcy52MS5Jc3N1ZVN0YXRlEg0KBWRyYWZ0GAcgASgIEhQKDGNoZWNrc19zdGF0ZRgIIAEoCRIlCgRnYXRlGAkgASgOMhcuY29tcGFzcy52MS5Cb2FyZFByR2F0ZRIVCg1zdGFja190aXBfcmVmGAogASgJEhYKDnN0YWNrX3Bvc2l0aW9uGAsgASgNEg0KBW93bmVkGAwgASgIEhsKE29ic2VydmVkX2F0X3VuaXhfbXMYDSABKAMSGQoRbWVyZ2VfcXVldWVfc3RhdGUYDiABKAkSFgoOc3RhbGVfYXBwcm92YWwYDyABKAgSFgoOdHJhY2tlcl9zdGF0dXMYECABKAkijAEKCEJvYXJkQXNrEg4KBmFza19pZBgBIAEoCRISCgptZXNzYWdlX2lkGAIgASgJEhIKCmNoYW5uZWxfaWQYAyABKAkSCwoDcmVmGAQgASgJEg4KBmhlYWRlchgFIAEoCRIQCghhbnN3ZXJlZBgGIAEoCBIZChFwb3N0ZWRfYXRfdW5peF9tcxgHIAEoAyLVAgoKQWdlbnRCb2FyZBIYChBhZ2VudF9hY2NvdW50X2lkGAEgASgJEg4KBmhhbmRsZRgCIAEoCRIWCg5mb2N1c190YXNrX2tleRgDIAEoCRIjCgRoYWx0GAQgASgLMhUuY29tcGFzcy52MS5Cb2FyZEhhbHQSJAoFdGFza3MYBSADKAsyFS5jb21wYXNzLnYxLkJvYXJkVGFzaxIiCgRyZWZzGAYgAygLMhQuY29tcGFzcy52MS5Cb2FyZFJlZhIWCg51bnRyYWNrZWRfcmVmcxgHIAMoCRIiCgRhc2tzGAggAygLMhQuY29tcGFzcy52MS5Cb2FyZEFzaxIUCgx3cml0dGVuX3R1cm4YCSABKAQSGgoSd3JpdHRlbl9hdF91bml4X21zGAogASgDEg0KBXN0YWxlGAsgASgIEhkKEW1hdGNoZWRfdGFza19rZXlzGAwgAygJIqMBChFBZ2VudEJvYXJkU3VtbWFyeRINCgVmb2N1cxgBIAEoCRISCgp0YXNrX2NvdW50GAIgASgNEhsKE3dhaXRpbmdfb25fb3BlcmF0b3IYAyABKA0SIwoEaGFsdBgEIAEoCzIVLmNvbXBhc3MudjEuQm9hcmRIYWx0EhoKEndyaXR0ZW5fYXRfdW5peF9tcxgFIAEoAxINCgVzdGFsZRgGIAEoCCL4AQoXVXBkYXRlQWdlbnRCb2FyZFJlcXVlc3QSMAoMdXBzZXJ0X3Rhc2tzGAEgAygLMhouY29tcGFzcy52MS5Cb2FyZFRhc2tQYXRjaBIYChByZW1vdmVfdGFza19rZXlzGAIgAygJEhsKDmZvY3VzX3Rhc2tfa2V5GAMgASgJSACIAQESIwoEaGFsdBgEIAEoCzIVLmNvbXBhc3MudjEuQm9hcmRIYWx0EhIKCmNsZWFyX2hhbHQYBSABKAgSFQoNdHVybl9zZXF1ZW5jZRgGIAEoBBIRCglhdXRvbWF0aWMYByABKAhCEQoPX2ZvY3VzX3Rhc2tfa2V5IkEKGFVwZGF0ZUFnZW50Qm9hcmRSZXNwb25zZRIlCgVib2FyZBgBIAEoCzIWLmNvbXBhc3MudjEuQWdlbnRCb2FyZCLeAQoWTGlzdEFnZW50Qm9hcmRzUmVxdWVzdBIVCg1hZ2VudF9oYW5kbGVzGAEgAygJEg0KBXF1ZXJ5GAIgASgJEgsKA3JlZhgDIAEoCRIuCgp3YWl0aW5nX29uGAQgASgOMhouY29tcGFzcy52MS5Cb2FyZFdhaXRpbmdPbhIpCgVzdGF0ZRgFIAEoDjIaLmNvbXBhc3MudjEuQm9hcmRUYXNrU3RhdGUSJwoEaGFsdBgGIAEoDjIZLmNvbXBhc3MudjEuQm9hcmRIYWx0S2luZBINCgVsaW1pdBgHIAEoDSJBChdMaXN0QWdlbnRCb2FyZHNSZXNwb25zZRImCgZib2FyZHMYASADKAsyFi5jb21wYXNzLnYxLkFnZW50Qm9hcmQiVAoRQWdlbnRCb2FyZENoYW5nZWQSGAoQYWdlbnRfYWNjb3VudF9pZBgBIAEoCRIlCgVib2FyZBgCIAEoCzIWLmNvbXBhc3MudjEuQWdlbnRCb2FyZCJbCgdQZWVyaW5nEhcKD3VzZXJfYWNjb3VudF9pZBgBIAEoCRIOCgZoYW5kbGUYAiABKAkSJwoFc3RhdGUYAyABKA4yGC5jb21wYXNzLnYxLlBlZXJpbmdTdGF0ZSIpChJBcHByb3ZlUGVlclJlcXVlc3QSEwoLcGVlcl9oYW5kbGUYASABKAkiOwoTQXBwcm92ZVBlZXJSZXNwb25zZRIkCgdwZWVyaW5nGAEgASgLMhMuY29tcGFzcy52MS5QZWVyaW5nIigKEVJldm9rZVBlZXJSZXF1ZXN0EhMKC3BlZXJfaGFuZGxlGAEgASgJIiUKElJldm9rZVBlZXJSZXNwb25zZRIPCgdkZWxldGVkGAEgASgIIhIKEExpc3RQZWVyc1JlcXVlc3QiOgoRTGlzdFBlZXJzUmVzcG9uc2USJQoIcGVlcmluZ3MYASADKAsyEy5jb21wYXNzLnYxLlBlZXJpbmciOQoRQ3JlYXRlVXNlclJlcXVlc3QSDgoGaGFuZGxlGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCSI6ChJDcmVhdGVVc2VyUmVzcG9uc2USJAoHYWNjb3VudBgBIAEoCzITLmNvbXBhc3MudjEuQWNjb3VudCJwChJDcmVhdGVBZ2VudFJlcXVlc3QSDgoGaGFuZGxlGAEgASgJEhQKDGRpc3BsYXlfbmFtZRgCIAEoCRIVCg1wYXJlbnRfaGFuZGxlGAMgASgJEgwKBHJvbGUYBCABKAkSDwoHcGVyc29uYRgFIAEoCSI7ChNDcmVhdGVBZ2VudFJlc3BvbnNlEiQKB2FjY291bnQYASABKAsyEy5jb21wYXNzLnYxLkFjY291bnQiKwoTTGlzdEFjY291bnRzUmVxdWVzdBIUCgxzbmFwc2hvdF9zZXEYASABKAQiPQoUTGlzdEFjY291bnRzUmVzcG9uc2USJQoIYWNjb3VudHMYASADKAsyEy5jb21wYXNzLnYxLkFjY291bnQilQEKGUNyZWF0ZUNoYW5uZWxHcm91cFJlcXVlc3QSDAoEbmFtZRgBIAEoCRIXCg9wYXJlbnRfZ3JvdXBfaWQYAiABKAkSNgoKdmlzaWJpbGl0eRgDIAEoDjIiLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwVmlzaWJpbGl0eRIZChFwYXJlbnRfZ3JvdXBfbmFtZRgEIAEoCSJFChpDcmVhdGVDaGFubmVsR3JvdXBSZXNwb25zZRInCgVncm91cBgBIAEoCzIYLmNvbXBhc3MudjEuQ2hhbm5lbEdyb3VwIjAKGExpc3RDaGFubmVsR3JvdXBzUmVxdWVzdBIUCgxzbmFwc2hvdF9zZXEYASABKAQiRQoZTGlzdENoYW5uZWxHcm91cHNSZXNwb25zZRIoCgZncm91cHMYASADKAsyGC5jb21wYXNzLnYxLkNoYW5uZWxHcm91cCIrChNMaXN0Q2hhbm5lbHNSZXF1ZXN0EhQKDHNuYXBzaG90X3NlcRgBIAEoBCI9ChRMaXN0Q2hhbm5lbHNSZXNwb25zZRIlCghjaGFubmVscxgBIAMoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCLiAQoUQ3JlYXRlQ2hhbm5lbFJlcXVlc3QSDAoEbmFtZRgBIAEoCRIQCghncm91cF9pZBgCIAEoCRIlCgRraW5kGAMgASgOMhcuY29tcGFzcy52MS5DaGFubmVsS2luZBIWCg5tZW1iZXJfaGFuZGxlcxgEIAMoCRIbChNwYXJlbnRfYWdlbnRfaGFuZGxlGAUgASgJEjoKD21lbWJlcnNoaXBfbW9kZRgGIAEoDjIhLmNvbXBhc3MudjEuQ2hhbm5lbE1lbWJlcnNoaXBNb2RlEhIKCmdyb3VwX25hbWUYByABKAkiPQoVQ3JlYXRlQ2hhbm5lbFJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwiwgEKG1VwZGF0ZUNoYW5uZWxNZW1iZXJzUmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEhoKEmFkZF9tZW1iZXJfaGFuZGxlcxgCIAMoCRIdChVyZW1vdmVfbWVtYmVyX2hhbmRsZXMYAyADKAkSGQoRc3Vic2NyaWJlX2hhbmRsZXMYBCADKAkSGwoTdW5zdWJzY3JpYmVfaGFuZGxlcxgFIAMoCRIcChRjb252ZXJ0X2NoYW5uZWxfbmFtZRgGIAEoCSJEChxVcGRhdGVDaGFubmVsTWVtYmVyc1Jlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwiJAoNT3BlbkRNUmVxdWVzdBITCgtwZWVyX2hhbmRsZRgBIAEoCSJHCg5PcGVuRE1SZXNwb25zZRIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsEg8KB2NyZWF0ZWQYAiABKAgiRwoUUmVwYXJlbnRBZ2VudFJlcXVlc3QSFAoMYWdlbnRfaGFuZGxlGAEgASgJEhkKEW5ld19wYXJlbnRfaGFuZGxlGAIgASgJIj0KFVJlcGFyZW50QWdlbnRSZXNwb25zZRIkCgdhY2NvdW50GAEgASgLMhMuY29tcGFzcy52MS5BY2NvdW50Ik0KFlJlcGFyZW50Q2hhbm5lbFJlcXVlc3QSEgoKY2hhbm5lbF9pZBgBIAEoCRIfChduZXdfcGFyZW50X2FnZW50X2hhbmRsZRgCIAEoCSI/ChdSZXBhcmVudENoYW5uZWxSZXNwb25zZRIkCgdjaGFubmVsGAEgASgLMhMuY29tcGFzcy52MS5DaGFubmVsIpcBChdTZXRDaGFubmVsUG9saWN5UmVxdWVzdBISCgpjaGFubmVsX2lkGAEgASgJEjIKC3Bvc3RfcG9saWN5GAIgASgOMh0uY29tcGFzcy52MS5DaGFubmVsUG9zdFBvbGljeRIUCgxvd25lcl9oYW5kbGUYAyABKAkSHgoWbWFuZGF0b3J5X3N1YnNjcmlwdGlvbhgEIAEoCCJAChhTZXRDaGFubmVsUG9saWN5UmVzcG9uc2USJAoHY2hhbm5lbBgBIAEoCzITLmNvbXBhc3MudjEuQ2hhbm5lbCJSChBHZXRSb3N0ZXJSZXF1ZXN0EiYKBXNjb3BlGAEgASgOMhcuY29tcGFzcy52MS5Sb3N0ZXJTY29wZRIWCg52YW50YWdlX2hhbmRsZRgCIAEoCSI9ChFHZXRSb3N0ZXJSZXNwb25zZRIoCgdlbnRyaWVzGAEgAygLMhcuY29tcGFzcy52MS5Sb3N0ZXJFbnRyeSLwAQoLUm9zdGVyRW50cnkSGAoQYWdlbnRfYWNjb3VudF9pZBgBIAEoCRIOCgZoYW5kbGUYAiABKAkSFAoMZGlzcGxheV9uYW1lGAMgASgJEhcKD3BhcmVudF9hZ2VudF9pZBgEIAEoCRIrCghwcmVzZW5jZRgFIAEoDjIZLmNvbXBhc3MudjEuQWdlbnRQcmVzZW5jZRIQCghhY3Rpdml0eRgGIAEoCRIbChNhY3Rpdml0eV9hdF91bml4X21zGAcgASgDEiwKBWJvYXJkGAggASgLMh0uY29tcGFzcy52MS5BZ2VudEJvYXJkU3VtbWFyeSJ3ChhVcGRhdGVQaW5uZWRCb2FyZFJlcXVlc3QSEgoKY2hhbm5lbF9pZBgBIAEoCRIlCgNwaW4YAiABKAsyFi5jb21wYXNzLnYxLlBpbk1lc3NhZ2VIABIaChB1bnBpbl9tZXNzYWdlX2lkGAMgASgJSABCBAoCb3AiPAoKUGluTWVzc2FnZRISCgptZXNzYWdlX2lkGAEgASgJEhoKEnJlcGxhY2VfbWVzc2FnZV9pZBgCIAEoCSJBChlVcGRhdGVQaW5uZWRCb2FyZFJlc3BvbnNlEiQKB2NoYW5uZWwYASABKAsyEy5jb21wYXNzLnYxLkNoYW5uZWwiMQoZT3BlbkFnZW50V29ya3NwYWNlUmVxdWVzdBIUCgxhZ2VudF9oYW5kbGUYASABKAkiSwoaT3BlbkFnZW50V29ya3NwYWNlUmVzcG9uc2USLQoJd29ya3NwYWNlGAEgASgLMhouY29tcGFzcy52MS5BZ2VudFdvcmtzcGFjZSKKAQoTTGlzdE1lc3NhZ2VzUmVxdWVzdBIUCgpjaGFubmVsX2lkGAEgASgJSAASDQoFbGltaXQYAiABKA0SGQoRYmVmb3JlX21lc3NhZ2VfaWQYAyABKAkSFAoMc25hcHNob3Rfc2VxGAQgASgEEhAKCHRvcGljX2lkGAUgASgJQgsKCWNvbnRhaW5lciI9ChRMaXN0TWVzc2FnZXNSZXNwb25zZRIlCghtZXNzYWdlcxgBIAMoCzITLmNvbXBhc3MudjEuTWVzc2FnZSLcAQoSUG9zdE1lc3NhZ2VSZXF1ZXN0EhQKCmNoYW5uZWxfaWQYASABKAlIABIoCgZibG9ja3MYAiADKAsyGC5jb21wYXNzLnYxLk1lc3NhZ2VCbG9jaxISCgh0b3BpY19pZBgDIAEoCUgBEhQKCnRvcGljX25hbWUYBCABKAlIARIZChFjbGllbnRfcmVxdWVzdF9pZBgFIAEoCRIUCgxjcmVhdGVfdG9waWMYBiABKAgSFQoNdHVybl9zZXF1ZW5jZRgHIAEoBEILCgljb250YWluZXJCBwoFdG9waWMiOwoTUG9zdE1lc3NhZ2VSZXNwb25zZRIkCgdtZXNzYWdlGAEgASgLMhMuY29tcGFzcy52MS5NZXNzYWdlIkEKEUxpc3RUb3BpY3NSZXF1ZXN0EhIKCmNoYW5uZWxfaWQYASABKAkSGAoQaW5jbHVkZV9hcmNoaXZlZBgCIAEoCCI3ChJMaXN0VG9waWNzUmVzcG9uc2USIQoGdG9waWNzGAEgAygLMhEuY29tcGFzcy52MS5Ub3BpYyJmChJVcGRhdGVUb3BpY1JlcXVlc3QSEAoIdG9waWNfaWQYASABKAkSEQoEbmFtZRgCIAEoCUgAiAEBEhUKCGFyY2hpdmVkGAMgASgISAGIAQFCBwoFX25hbWVCCwoJX2FyY2hpdmVkIjcKE1VwZGF0ZVRvcGljUmVzcG9uc2USIAoFdG9waWMYASABKAsyES5jb21wYXNzLnYxLlRvcGljIlUKE1Jlc3BvbmRUb0Fza1JlcXVlc3QSDgoGYXNrX2lkGAEgASgJEi4KB2Fuc3dlcnMYAiADKAsyHS5jb21wYXNzLnYxLkFza1F1ZXN0aW9uQW5zd2VyIlgKEUFza1F1ZXN0aW9uQW5zd2VyEhMKC3F1ZXN0aW9uX2lkGAEgASgJEhkKEWNob3Nlbl9vcHRpb25faWRzGAIgAygJEhMKC2N1c3RvbV90ZXh0GAMgASgJIhYKFFJlc3BvbmRUb0Fza1Jlc3BvbnNlImoKFVNlYXJjaE1lc3NhZ2VzUmVxdWVzdBINCgVxdWVyeRgBIAEoCRIUCgpjaGFubmVsX2lkGAIgASgJSAASDQoFbGltaXQYAyABKA0SFAoMc25hcHNob3Rfc2VxGAQgASgEQgcKBXNjb3BlIj8KFlNlYXJjaE1lc3NhZ2VzUmVzcG9uc2USJQoIbWVzc2FnZXMYASADKAsyEy5jb21wYXNzLnYxLk1lc3NhZ2UiQgoVU3Vic2NyaWJlQ29tbXNSZXF1ZXN0EhEKCXNpbmNlX3NlcRgBIAEoBBIWCg5pbnN0YW5jZV9lcG9jaBgCIAEoBCo1CghVc2VyUm9sZRIUChBVU0VSX1JPTEVfTUVNQkVSEAASEwoPVVNFUl9ST0xFX0FETUlOEAEqYQoWQ2hhbm5lbEdyb3VwVmlzaWJpbGl0eRIiCh5DSEFOTkVMX0dST1VQX1ZJU0lCSUxJVFlfT1dORVIQABIjCh9DSEFOTkVMX0dST1VQX1ZJU0lCSUxJVFlfU0hBUkVEEAEqVQoRQ2hhbm5lbFBvc3RQb2xpY3kSHAoYQ0hBTk5FTF9QT1NUX1BPTElDWV9PUEVOEAASIgoeQ0hBTk5FTF9QT1NUX1BPTElDWV9PV05FUl9PTkxZEAEqXwoVQ2hhbm5lbE1lbWJlcnNoaXBNb2RlEiQKIENIQU5ORUxfTUVNQkVSU0hJUF9NT0RFX0VYUExJQ0lUEAASIAocQ0hBTk5FTF9NRU1CRVJTSElQX01PREVfVFJFRRABKlsKC0NoYW5uZWxLaW5kEhgKFENIQU5ORUxfS0lORF9DSEFOTkVMEAASEwoPQ0hBTk5FTF9LSU5EX0RNEAESHQoVQ0hBTk5FTF9LSU5EX0dST1VQX0RNEAIaAggBKpwBCg1BZ2VudFByZXNlbmNlEh4KGkFHRU5UX1BSRVNFTkNFX1VOU1BFQ0lGSUVEEAASFwoTQUdFTlRfUFJFU0VOQ0VfSURMRRABEhoKFkFHRU5UX1BSRVNFTkNFX1dPUktJTkcQAhIaChZBR0VOVF9QUkVTRU5DRV9XQUlUSU5HEAMSGgoWQUdFTlRfUFJFU0VOQ0VfT0ZGTElORRAEKsMBCg5Cb2FyZFRhc2tTdGF0ZRIgChxCT0FSRF9UQVNLX1NUQVRFX1VOU1BFQ0lGSUVEEAASGwoXQk9BUkRfVEFTS19TVEFURV9BQ1RJVkUQARIcChhCT0FSRF9UQVNLX1NUQVRFX0JMT0NLRUQQAhIcChhCT0FSRF9UQVNLX1NUQVRFX1dBSVRJTkcQAxIbChdCT0FSRF9UQVNLX1NUQVRFX1BBUktFRBAEEhkKFUJPQVJEX1RBU0tfU1RBVEVfRE9ORRAFKooBCg1Cb2FyZEhhbHRLaW5kEh8KG0JPQVJEX0hBTFRfS0lORF9VTlNQRUNJRklFRBAAEhgKFEJPQVJEX0hBTFRfS0lORF9ET05FEAESGwoXQk9BUkRfSEFMVF9LSU5EX0JMT0NLRUQQAhIhCh1CT0FSRF9IQUxUX0tJTkRfQVdBSVRJTkdfVVNFUhADKowBCg5Cb2FyZFdhaXRpbmdPbhIgChxCT0FSRF9XQUlUSU5HX09OX1VOU1BFQ0lGSUVEEAASHQoZQk9BUkRfV0FJVElOR19PTl9PUEVSQVRPUhABEhoKFkJPQVJEX1dBSVRJTkdfT05fQUdFTlQQAhIdChlCT0FSRF9XQUlUSU5HX09OX0VYVEVSTkFMEAMqaQoMQm9hcmRSZWZLaW5kEh4KGkJPQVJEX1JFRl9LSU5EX1VOU1BFQ0lGSUVEEAASGAoUQk9BUkRfUkVGX0tJTkRfSVNTVUUQARIfChtCT0FSRF9SRUZfS0lORF9QVUxMX1JFUVVFU1QQAiqgAwoLQm9hcmRQckdhdGUSHQoZQk9BUkRfUFJfR0FURV9VTlNQRUNJRklFRBAAEhcKE0JPQVJEX1BSX0dBVEVfRFJBRlQQARIgChxCT0FSRF9QUl9HQVRFX0NIRUNLU19QRU5ESU5HEAISHwobQk9BUkRfUFJfR0FURV9DSEVDS1NfRkFJTEVEEAMSIwofQk9BUkRfUFJfR0FURV9DSEFOR0VTX1JFUVVFU1RFRBAEEiEKHUJPQVJEX1BSX0dBVEVfQVdBSVRJTkdfUkVWSUVXEAUSIgoeQk9BUkRfUFJfR0FURV9BV0FJVElOR19FTlFVRVVFEAYSGAoUQk9BUkRfUFJfR0FURV9NRVJHRUQQBxIYChRCT0FSRF9QUl9HQVRFX0NMT1NFRBAIEhgKFEJPQVJEX1BSX0dBVEVfUVVFVUVEEAkSHgoaQk9BUkRfUFJfR0FURV9RVUVVRV9GQUlMRUQQChIfChtCT0FSRF9QUl9HQVRFX1FVRVVFX1JFTU9WRUQQCxIbChdCT0FSRF9QUl9HQVRFX0NPTkZMSUNUUxAMKpEBCgxQZWVyaW5nU3RhdGUSHQoZUEVFUklOR19TVEFURV9VTlNQRUNJRklFRBAAEiIKHlBFRVJJTkdfU1RBVEVfUEVORElOR19PVVRHT0lORxABEiIKHlBFRVJJTkdfU1RBVEVfUEVORElOR19JTkNPTUlORxACEhoKFlBFRVJJTkdfU1RBVEVfQVBQUk9WRUQQAypeCgtSb3N0ZXJTY29wZRIdChlST1NURVJfU0NPUEVfTkVJR0hCT1JIT09EEAASGAoUUk9TVEVSX1NDT1BFX1NVQlRSRUUQARIWChJST1NURVJfU0NPUEVfT1dORVIQAjLqEAoMQ29tbXNTZXJ2aWNlEksKCkNyZWF0ZVVzZXISHS5jb21wYXNzLnYxLkNyZWF0ZVVzZXJSZXF1ZXN0Gh4uY29tcGFzcy52MS5DcmVhdGVVc2VyUmVzcG9uc2USTgoLQ3JlYXRlQWdlbnQSHi5jb21wYXNzLnYxLkNyZWF0ZUFnZW50UmVxdWVzdBofLmNvbXBhc3MudjEuQ3JlYXRlQWdlbnRSZXNwb25zZRJRCgxMaXN0QWNjb3VudHMSHy5jb21wYXNzLnYxLkxpc3RBY2NvdW50c1JlcXVlc3QaIC5jb21wYXNzLnYxLkxpc3RBY2NvdW50c1Jlc3BvbnNlEmMKEkNyZWF0ZUNoYW5uZWxHcm91cBIlLmNvbXBhc3MudjEuQ3JlYXRlQ2hhbm5lbEdyb3VwUmVxdWVzdBomLmNvbXBhc3MudjEuQ3JlYXRlQ2hhbm5lbEdyb3VwUmVzcG9uc2USYAoRTGlzdENoYW5uZWxHcm91cHMSJC5jb21wYXNzLnYxLkxpc3RDaGFubmVsR3JvdXBzUmVxdWVzdBolLmNvbXBhc3MudjEuTGlzdENoYW5uZWxHcm91cHNSZXNwb25zZRJRCgxMaXN0Q2hhbm5lbHMSHy5jb21wYXNzLnYxLkxpc3RDaGFubmVsc1JlcXVlc3QaIC5jb21wYXNzLnYxLkxpc3RDaGFubmVsc1Jlc3BvbnNlElQKDUNyZWF0ZUNoYW5uZWwSIC5jb21wYXNzLnYxLkNyZWF0ZUNoYW5uZWxSZXF1ZXN0GiEuY29tcGFzcy52MS5DcmVhdGVDaGFubmVsUmVzcG9uc2USaQoUVXBkYXRlQ2hhbm5lbE1lbWJlcnMSJy5jb21wYXNzLnYxLlVwZGF0ZUNoYW5uZWxNZW1iZXJzUmVxdWVzdBooLmNvbXBhc3MudjEuVXBkYXRlQ2hhbm5lbE1lbWJlcnNSZXNwb25zZRI/CgZPcGVuRE0SGS5jb21wYXNzLnYxLk9wZW5ETVJlcXVlc3QaGi5jb21wYXNzLnYxLk9wZW5ETVJlc3BvbnNlElQKDVJlcGFyZW50QWdlbnQSIC5jb21wYXNzLnYxLlJlcGFyZW50QWdlbnRSZXF1ZXN0GiEuY29tcGFzcy52MS5SZXBhcmVudEFnZW50UmVzcG9uc2USWgoPUmVwYXJlbnRDaGFubmVsEiIuY29tcGFzcy52MS5SZXBhcmVudENoYW5uZWxSZXF1ZXN0GiMuY29tcGFzcy52MS5SZXBhcmVudENoYW5uZWxSZXNwb25zZRJjChJPcGVuQWdlbnRXb3Jrc3BhY2USJS5jb21wYXNzLnYxLk9wZW5BZ2VudFdvcmtzcGFjZVJlcXVlc3QaJi5jb21wYXNzLnYxLk9wZW5BZ2VudFdvcmtzcGFjZVJlc3BvbnNlElEKDExpc3RNZXNzYWdlcxIfLmNvbXBhc3MudjEuTGlzdE1lc3NhZ2VzUmVxdWVzdBogLmNvbXBhc3MudjEuTGlzdE1lc3NhZ2VzUmVzcG9uc2USTgoLUG9zdE1lc3NhZ2USHi5jb21wYXNzLnYxLlBvc3RNZXNzYWdlUmVxdWVzdBofLmNvbXBhc3MudjEuUG9zdE1lc3NhZ2VSZXNwb25zZRJLCgpMaXN0VG9waWNzEh0uY29tcGFzcy52MS5MaXN0VG9waWNzUmVxdWVzdBoeLmNvbXBhc3MudjEuTGlzdFRvcGljc1Jlc3BvbnNlEk4KC1VwZGF0ZVRvcGljEh4uY29tcGFzcy52MS5VcGRhdGVUb3BpY1JlcXVlc3QaHy5jb21wYXNzLnYxLlVwZGF0ZVRvcGljUmVzcG9uc2USUQoMUmVzcG9uZFRvQXNrEh8uY29tcGFzcy52MS5SZXNwb25kVG9Bc2tSZXF1ZXN0GiAuY29tcGFzcy52MS5SZXNwb25kVG9Bc2tSZXNwb25zZRJXCg5TZWFyY2hNZXNzYWdlcxIhLmNvbXBhc3MudjEuU2VhcmNoTWVzc2FnZXNSZXF1ZXN0GiIuY29tcGFzcy52MS5TZWFyY2hNZXNzYWdlc1Jlc3BvbnNlEl0KEFNldENoYW5uZWxQb2xpY3kSIy5jb21wYXNzLnYxLlNldENoYW5uZWxQb2xpY3lSZXF1ZXN0GiQuY29tcGFzcy52MS5TZXRDaGFubmVsUG9saWN5UmVzcG9uc2USSAoJR2V0Um9zdGVyEhwuY29tcGFzcy52MS5HZXRSb3N0ZXJSZXF1ZXN0Gh0uY29tcGFzcy52MS5HZXRSb3N0ZXJSZXNwb25zZRJgChFVcGRhdGVQaW5uZWRCb2FyZBIkLmNvbXBhc3MudjEuVXBkYXRlUGlubmVkQm9hcmRSZXF1ZXN0GiUuY29tcGFzcy52MS5VcGRhdGVQaW5uZWRCb2FyZFJlc3BvbnNlEk4KC0FwcHJvdmVQZWVyEh4uY29tcGFzcy52MS5BcHByb3ZlUGVlclJlcXVlc3QaHy5jb21wYXNzLnYxLkFwcHJvdmVQZWVyUmVzcG9uc2USSwoKUmV2b2tlUGVlchIdLmNvbXBhc3MudjEuUmV2b2tlUGVlclJlcXVlc3QaHi5jb21wYXNzLnYxLlJldm9rZVBlZXJSZXNwb25zZRJICglMaXN0UGVlcnMSHC5jb21wYXNzLnYxLkxpc3RQZWVyc1JlcXVlc3QaHS5jb21wYXNzLnYxLkxpc3RQZWVyc1Jlc3BvbnNlElkKDlN1YnNjcmliZUNvbW1zEiEuY29tcGFzcy52MS5TdWJzY3JpYmVDb21tc1JlcXVlc3QaIi5jb21wYXNzLnYxLlN1YnNjcmliZUNvbW1zUmVzcG9uc2UwAWIGcHJvdG8z", [file_compass_v1_compass]); /** * An account in the communication layer: a human user or an owned agent. Both @@ -685,6 +685,16 @@ export type Ask = Message$1<"compass.v1.Ask"> & { * @generated from field: bool answered = 3; */ answered: boolean; + + /** + * The issue or pull request this ask concerns, as one ref (RIG-12 or + * owner/repo#12). Optional. The server stores it in canonical form and + * rejects a value that is not exactly one ref with invalid_argument. Set only + * by the asker; the server never fills a default. + * + * @generated from field: string ref = 4; + */ + ref: string; }; /** diff --git a/proto/compass/v1/comms.proto b/proto/compass/v1/comms.proto index 4aa3396e2..2795da8a7 100644 --- a/proto/compass/v1/comms.proto +++ b/proto/compass/v1/comms.proto @@ -451,6 +451,11 @@ message Ask { // an inbound Ask (via PostMessage) is IGNORED — an ask being posted has by // definition not been answered. bool answered = 3; + // The issue or pull request this ask concerns, as one ref (RIG-12 or + // owner/repo#12). Optional. The server stores it in canonical form and + // rejects a value that is not exactly one ref with invalid_argument. Set only + // by the asker; the server never fills a default. + string ref = 4; } // One question within an Ask, carrying its own options and answer state.