From 5d9331ab566add288fe7f1666c5a4e74251eea56 Mon Sep 17 00:00:00 2001 From: Nick Pupko Date: Mon, 15 Jun 2026 22:23:16 +0300 Subject: [PATCH] schema: Add Odin language Add Odin (https://odin-lang.org/) to the Language enum as value 111, reusing the reserved NextLanguage slot, and bump NextLanguage to 112. Regenerated all bindings and docs via `nix run .#proto-generate`. --- bindings/go/scip/scip.pb.go | 8 +- bindings/haskell/src/Proto/Scip.hs | 284 +++---- .../java/org/scip_code/scip/Language.java | 21 +- .../java/org/scip_code/scip/ScipProto.java | 32 +- bindings/rust/src/generated/scip.rs | 738 +++++++++--------- bindings/typescript/scip_pb.ts | 11 +- docs/scip.md | 3 +- scip.proto | 3 +- 8 files changed, 576 insertions(+), 524 deletions(-) diff --git a/bindings/go/scip/scip.pb.go b/bindings/go/scip/scip.pb.go index ee0452f7..44ffccff 100644 --- a/bindings/go/scip/scip.pb.go +++ b/bindings/go/scip/scip.pb.go @@ -655,6 +655,7 @@ const ( Language_OCaml Language = 41 Language_Objective_C Language = 36 Language_Objective_CPP Language = 37 + Language_Odin Language = 111 // https://odin-lang.org/ Language_Pascal Language = 99 Language_PHP Language = 19 Language_PLSQL Language = 70 @@ -770,6 +771,7 @@ var ( 41: "OCaml", 36: "Objective_C", 37: "Objective_CPP", + 111: "Odin", 99: "Pascal", 19: "PHP", 70: "PLSQL", @@ -882,6 +884,7 @@ var ( "OCaml": 41, "Objective_C": 36, "Objective_CPP": 37, + "Odin": 111, "Pascal": 99, "PHP": 19, "PLSQL": 70, @@ -3119,7 +3122,7 @@ const file_scip_proto_rawDesc = "" + "\x18UnspecifiedDiagnosticTag\x10\x00\x12\x0f\n" + "\vUnnecessary\x10\x01\x12\x0e\n" + "\n" + - "Deprecated\x10\x02*\x9b\n" + + "Deprecated\x10\x02*\xa5\n" + "\n" + "\bLanguage\x12\x17\n" + "\x13UnspecifiedLanguage\x10\x00\x12\b\n" + @@ -3205,7 +3208,8 @@ const file_scip_proto_rawDesc = "" + "\x03Nix\x10M\x12\t\n" + "\x05OCaml\x10)\x12\x0f\n" + "\vObjective_C\x10$\x12\x11\n" + - "\rObjective_CPP\x10%\x12\n" + + "\rObjective_CPP\x10%\x12\b\n" + + "\x04Odin\x10o\x12\n" + "\n" + "\x06Pascal\x10c\x12\a\n" + "\x03PHP\x10\x13\x12\t\n" + diff --git a/bindings/haskell/src/Proto/Scip.hs b/bindings/haskell/src/Proto/Scip.hs index 8d3f6fff..12e792c5 100644 --- a/bindings/haskell/src/Proto/Scip.hs +++ b/bindings/haskell/src/Proto/Scip.hs @@ -1568,6 +1568,7 @@ data Language Luau | Justfile | Nickel | + Odin | Language'Unrecognized !Language'UnrecognizedValue deriving stock (Prelude.Show, Prelude.Eq, Prelude.Ord) instance Data.ProtoLens.MessageEnum Language where @@ -1681,6 +1682,7 @@ instance Data.ProtoLens.MessageEnum Language where maybeToEnum 108 = Prelude.Just Luau maybeToEnum 109 = Prelude.Just Justfile maybeToEnum 110 = Prelude.Just Nickel + maybeToEnum 111 = Prelude.Just Odin maybeToEnum k = Prelude.Just (Language'Unrecognized @@ -1751,6 +1753,7 @@ instance Data.ProtoLens.MessageEnum Language where showEnum OCaml = "OCaml" showEnum Objective_C = "Objective_C" showEnum Objective_CPP = "Objective_CPP" + showEnum Odin = "Odin" showEnum Pascal = "Pascal" showEnum PHP = "PHP" showEnum PLSQL = "PLSQL" @@ -1865,6 +1868,7 @@ instance Data.ProtoLens.MessageEnum Language where | (Prelude.==) k "OCaml" = Prelude.Just OCaml | (Prelude.==) k "Objective_C" = Prelude.Just Objective_C | (Prelude.==) k "Objective_CPP" = Prelude.Just Objective_CPP + | (Prelude.==) k "Odin" = Prelude.Just Odin | (Prelude.==) k "Pascal" = Prelude.Just Pascal | (Prelude.==) k "PHP" = Prelude.Just PHP | (Prelude.==) k "PLSQL" = Prelude.Just PLSQL @@ -1913,7 +1917,7 @@ instance Data.ProtoLens.MessageEnum Language where = (Prelude.>>=) (Text.Read.readMaybe k) Data.ProtoLens.maybeToEnum instance Prelude.Bounded Language where minBound = UnspecifiedLanguage - maxBound = Nickel + maxBound = Odin instance Prelude.Enum Language where toEnum k__ = Prelude.maybe @@ -2031,11 +2035,12 @@ instance Prelude.Enum Language where fromEnum Luau = 108 fromEnum Justfile = 109 fromEnum Nickel = 110 + fromEnum Odin = 111 fromEnum (Language'Unrecognized (Language'UnrecognizedValue k)) = Prelude.fromIntegral k - succ Nickel + succ Odin = Prelude.error - "Language.succ: bad argument Nickel. This value would be out of bounds." + "Language.succ: bad argument Odin. This value would be out of bounds." succ UnspecifiedLanguage = CSharp succ CSharp = Swift succ Swift = Dart @@ -2145,6 +2150,7 @@ instance Prelude.Enum Language where succ Slang = Luau succ Luau = Justfile succ Justfile = Nickel + succ Nickel = Odin succ (Language'Unrecognized _) = Prelude.error "Language.succ: bad argument: unrecognized value" pred UnspecifiedLanguage @@ -2259,6 +2265,7 @@ instance Prelude.Enum Language where pred Luau = Slang pred Justfile = Luau pred Nickel = Justfile + pred Odin = Nickel pred (Language'Unrecognized _) = Prelude.error "Language.pred: bad argument: unrecognized value" enumFrom = Data.ProtoLens.Message.Enum.messageEnumFrom @@ -7314,7 +7321,7 @@ packedFileDescriptor \\CANUnspecifiedDiagnosticTag\DLE\NUL\DC2\SI\n\ \\vUnnecessary\DLE\SOH\DC2\SO\n\ \\n\ - \Deprecated\DLE\STX*\155\n\ + \Deprecated\DLE\STX*\165\n\ \\n\ \\bLanguage\DC2\ETB\n\ \\DC3UnspecifiedLanguage\DLE\NUL\DC2\b\n\ @@ -7400,7 +7407,8 @@ packedFileDescriptor \\ETXNix\DLEM\DC2\t\n\ \\ENQOCaml\DLE)\DC2\SI\n\ \\vObjective_C\DLE$\DC2\DC1\n\ - \\rObjective_CPP\DLE%\DC2\n\ + \\rObjective_CPP\DLE%\DC2\b\n\ + \\EOTOdin\DLEo\DC2\n\ \\n\ \\ACKPascal\DLEc\DC2\a\n\ \\ETXPHP\DLE\DC3\DC2\t\n\ @@ -7455,9 +7463,9 @@ packedFileDescriptor \\ETXXSL\DLE \DC2\b\n\ \\EOTYAML\DLEJ\DC2\a\n\ \\ETXZig\DLE&BN\n\ - \\DC2org.scip_code.scipB\tScipProtoP\SOHZ+github.com/scip-code/scip/bindings/go/scip/J\194\213\STX\n\ + \\DC2org.scip_code.scipB\tScipProtoP\SOHZ+github.com/scip-code/scip/bindings/go/scip/J\135\214\STX\n\ \\a\DC2\ENQ\n\ - \\NUL\192\a\SOH\n\ + \\NUL\193\a\SOH\n\ \\130\EOT\n\ \\SOH\f\DC2\ETX\n\ \\NUL\DC22\247\ETX An index contains one or more pieces of information about a given piece of\n\ @@ -9715,7 +9723,7 @@ packedFileDescriptor \\r\n\ \\ENQ\ENQ\ACK\STX\STX\STX\DC2\EOT\193\ACK\SI\DLE\n\ \\208\ETX\n\ - \\STX\ENQ\a\DC2\ACK\202\ACK\NUL\192\a\SOH\SUB\193\ETX Language standardises names of common programming languages that can be used\n\ + \\STX\ENQ\a\DC2\ACK\202\ACK\NUL\193\a\SOH\SUB\193\ETX Language standardises names of common programming languages that can be used\n\ \ for the `Document.language` field. The primary purpose of this enum is to\n\ \ prevent a situation where we have a single programming language ends up with\n\ \ multiple string representations. For example, the C++ language uses the name\n\ @@ -10147,94 +10155,94 @@ packedFileDescriptor \\r\n\ \\ENQ\ENQ\a\STXA\STX\DC2\EOT\140\a\DC2\DC4\n\ \\r\n\ - \\ENQ\ENQ\a\STXB\SOH\DC2\EOT\141\a\STX\b\n\ + \\ENQ\ENQ\a\STXB\SOH\DC2\EOT\141\a\STX\ACK\n\ + \%\n\ + \\EOT\ENQ\a\STXB\DC2\EOT\141\a\STX\r\"\ETB https://odin-lang.org/\n\ + \\r\n\ + \\ENQ\ENQ\a\STXB\STX\DC2\EOT\141\a\t\f\n\ + \\r\n\ + \\ENQ\ENQ\a\STXC\SOH\DC2\EOT\142\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXB\DC2\EOT\141\a\STX\SO\n\ + \\EOT\ENQ\a\STXC\DC2\EOT\142\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXB\STX\DC2\EOT\141\a\v\r\n\ + \\ENQ\ENQ\a\STXC\STX\DC2\EOT\142\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXC\SOH\DC2\EOT\142\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXD\SOH\DC2\EOT\143\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXC\DC2\EOT\142\a\STX\v\n\ + \\EOT\ENQ\a\STXD\DC2\EOT\143\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXC\STX\DC2\EOT\142\a\b\n\ + \\ENQ\ENQ\a\STXD\STX\DC2\EOT\143\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXD\SOH\DC2\EOT\143\a\STX\a\n\ + \\ENQ\ENQ\a\STXE\SOH\DC2\EOT\144\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXD\DC2\EOT\143\a\STX\r\n\ + \\EOT\ENQ\a\STXE\DC2\EOT\144\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXD\STX\DC2\EOT\143\a\n\ + \\ENQ\ENQ\a\STXE\STX\DC2\EOT\144\a\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXE\SOH\DC2\EOT\144\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXF\SOH\DC2\EOT\145\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXE\DC2\EOT\144\a\STX\f\n\ + \\EOT\ENQ\a\STXF\DC2\EOT\145\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXE\STX\DC2\EOT\144\a\t\v\n\ + \\ENQ\ENQ\a\STXF\STX\DC2\EOT\145\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXF\SOH\DC2\EOT\145\a\STX\f\n\ + \\ENQ\ENQ\a\STXG\SOH\DC2\EOT\146\a\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STXF\DC2\EOT\145\a\STX\DC2\n\ + \\EOT\ENQ\a\STXG\DC2\EOT\146\a\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXF\STX\DC2\EOT\145\a\SI\DC1\n\ + \\ENQ\ENQ\a\STXG\STX\DC2\EOT\146\a\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXG\SOH\DC2\EOT\146\a\STX\b\n\ + \\ENQ\ENQ\a\STXH\SOH\DC2\EOT\147\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXG\DC2\EOT\146\a\STX\SO\n\ + \\EOT\ENQ\a\STXH\DC2\EOT\147\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXG\STX\DC2\EOT\146\a\v\r\n\ + \\ENQ\ENQ\a\STXH\STX\DC2\EOT\147\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXH\SOH\DC2\EOT\147\a\STX\n\ + \\ENQ\ENQ\a\STXI\SOH\DC2\EOT\148\a\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STXH\DC2\EOT\147\a\STX\DC1\n\ + \\EOT\ENQ\a\STXI\DC2\EOT\148\a\STX\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXH\STX\DC2\EOT\147\a\r\DLE\n\ + \\ENQ\ENQ\a\STXI\STX\DC2\EOT\148\a\r\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STXI\SOH\DC2\EOT\148\a\STX\b\n\ + \\ENQ\ENQ\a\STXJ\SOH\DC2\EOT\149\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXI\DC2\EOT\148\a\STX\SO\n\ + \\EOT\ENQ\a\STXJ\DC2\EOT\149\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXI\STX\DC2\EOT\148\a\v\r\n\ + \\ENQ\ENQ\a\STXJ\STX\DC2\EOT\149\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXJ\SOH\DC2\EOT\149\a\STX\ETX\n\ + \\ENQ\ENQ\a\STXK\SOH\DC2\EOT\150\a\STX\ETX\n\ \\f\n\ - \\EOT\ENQ\a\STXJ\DC2\EOT\149\a\STX\t\n\ + \\EOT\ENQ\a\STXK\DC2\EOT\150\a\STX\t\n\ \\r\n\ - \\ENQ\ENQ\a\STXJ\STX\DC2\EOT\149\a\ACK\b\n\ + \\ENQ\ENQ\a\STXK\STX\DC2\EOT\150\a\ACK\b\n\ \\r\n\ - \\ENQ\ENQ\a\STXK\SOH\DC2\EOT\150\a\STX\b\n\ + \\ENQ\ENQ\a\STXL\SOH\DC2\EOT\151\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXK\DC2\EOT\150\a\STX\SO\n\ + \\EOT\ENQ\a\STXL\DC2\EOT\151\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXK\STX\DC2\EOT\150\a\v\r\n\ + \\ENQ\ENQ\a\STXL\STX\DC2\EOT\151\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXL\SOH\DC2\EOT\151\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXM\SOH\DC2\EOT\152\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXL\DC2\EOT\151\a\STX\f\n\ + \\EOT\ENQ\a\STXM\DC2\EOT\152\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXL\STX\DC2\EOT\151\a\t\v\n\ + \\ENQ\ENQ\a\STXM\STX\DC2\EOT\152\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXM\SOH\DC2\EOT\152\a\STX\a\n\ + \\ENQ\ENQ\a\STXN\SOH\DC2\EOT\153\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STXM\DC2\EOT\152\a\STX\r\n\ + \\EOT\ENQ\a\STXN\DC2\EOT\153\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXM\STX\DC2\EOT\152\a\n\ + \\ENQ\ENQ\a\STXN\STX\DC2\EOT\153\a\n\ \\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXN\SOH\DC2\EOT\153\a\STX\a\n\ + \\ENQ\ENQ\a\STXO\SOH\DC2\EOT\154\a\STX\a\n\ \1\n\ - \\EOT\ENQ\a\STXN\DC2\EOT\153\a\STX\SO\"# Internal language for testing SCIP\n\ - \\r\n\ - \\ENQ\ENQ\a\STXN\STX\DC2\EOT\153\a\n\ - \\r\n\ + \\EOT\ENQ\a\STXO\DC2\EOT\154\a\STX\SO\"# Internal language for testing SCIP\n\ \\r\n\ - \\ENQ\ENQ\a\STXO\SOH\DC2\EOT\154\a\STX\ACK\n\ - \\f\n\ - \\EOT\ENQ\a\STXO\DC2\EOT\154\a\STX\f\n\ + \\ENQ\ENQ\a\STXO\STX\DC2\EOT\154\a\n\ \\r\n\ - \\ENQ\ENQ\a\STXO\STX\DC2\EOT\154\a\t\v\n\ \\r\n\ \\ENQ\ENQ\a\STXP\SOH\DC2\EOT\155\a\STX\ACK\n\ \\f\n\ @@ -10248,25 +10256,24 @@ packedFileDescriptor \\r\n\ \\ENQ\ENQ\a\STXQ\STX\DC2\EOT\156\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXR\SOH\DC2\EOT\157\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXR\SOH\DC2\EOT\157\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXR\DC2\EOT\157\a\STX\v\n\ + \\EOT\ENQ\a\STXR\DC2\EOT\157\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXR\STX\DC2\EOT\157\a\b\n\ - \\n\ + \\ENQ\ENQ\a\STXR\STX\DC2\EOT\157\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXS\SOH\DC2\EOT\158\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXS\SOH\DC2\EOT\158\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXS\DC2\EOT\158\a\STX\f\n\ + \\EOT\ENQ\a\STXS\DC2\EOT\158\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXS\STX\DC2\EOT\158\a\t\v\n\ + \\ENQ\ENQ\a\STXS\STX\DC2\EOT\158\a\b\n\ + \\n\ \\r\n\ - \\ENQ\ENQ\a\STXT\SOH\DC2\EOT\159\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXT\SOH\DC2\EOT\159\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXT\DC2\EOT\159\a\STX\v\n\ + \\EOT\ENQ\a\STXT\DC2\EOT\159\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXT\STX\DC2\EOT\159\a\b\n\ - \\n\ + \\ENQ\ENQ\a\STXT\STX\DC2\EOT\159\a\t\v\n\ \\r\n\ \\ENQ\ENQ\a\STXU\SOH\DC2\EOT\160\a\STX\ENQ\n\ \\f\n\ @@ -10275,155 +10282,162 @@ packedFileDescriptor \\ENQ\ENQ\a\STXU\STX\DC2\EOT\160\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXV\SOH\DC2\EOT\161\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXV\SOH\DC2\EOT\161\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXV\DC2\EOT\161\a\STX\f\n\ + \\EOT\ENQ\a\STXV\DC2\EOT\161\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXV\STX\DC2\EOT\161\a\t\v\n\ + \\ENQ\ENQ\a\STXV\STX\DC2\EOT\161\a\b\n\ + \\n\ \\r\n\ - \\ENQ\ENQ\a\STXW\SOH\DC2\EOT\162\a\STX\a\n\ + \\ENQ\ENQ\a\STXW\SOH\DC2\EOT\162\a\STX\ACK\n\ \\f\n\ \\EOT\ENQ\a\STXW\DC2\EOT\162\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXW\STX\DC2\EOT\162\a\n\ + \\ENQ\ENQ\a\STXW\STX\DC2\EOT\162\a\t\v\n\ + \\r\n\ + \\ENQ\ENQ\a\STXX\SOH\DC2\EOT\163\a\STX\a\n\ + \\f\n\ + \\EOT\ENQ\a\STXX\DC2\EOT\163\a\STX\f\n\ + \\r\n\ + \\ENQ\ENQ\a\STXX\STX\DC2\EOT\163\a\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXX\SOH\DC2\EOT\163\a\STX\b\n\ + \\ENQ\ENQ\a\STXY\SOH\DC2\EOT\164\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXX\DC2\EOT\163\a\STX\SO\n\ + \\EOT\ENQ\a\STXY\DC2\EOT\164\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXX\STX\DC2\EOT\163\a\v\r\n\ + \\ENQ\ENQ\a\STXY\STX\DC2\EOT\164\a\v\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXY\SOH\DC2\EOT\164\a\STX\r\n\ + \\ENQ\ENQ\a\STXZ\SOH\DC2\EOT\165\a\STX\r\n\ \\DC3\n\ - \\EOT\ENQ\a\STXY\DC2\EOT\164\a\STX\DC3\"\ENQ Bash\n\ + \\EOT\ENQ\a\STXZ\DC2\EOT\165\a\STX\DC3\"\ENQ Bash\n\ \\r\n\ - \\ENQ\ENQ\a\STXY\STX\DC2\EOT\164\a\DLE\DC2\n\ + \\ENQ\ENQ\a\STXZ\STX\DC2\EOT\165\a\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXZ\SOH\DC2\EOT\165\a\STX\t\n\ + \\ENQ\ENQ\a\STX[\SOH\DC2\EOT\166\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXZ\DC2\EOT\165\a\STX\SI\n\ + \\EOT\ENQ\a\STX[\DC2\EOT\166\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXZ\STX\DC2\EOT\165\a\f\SO\n\ + \\ENQ\ENQ\a\STX[\STX\DC2\EOT\166\a\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX[\SOH\DC2\EOT\166\a\STX\a\n\ + \\ENQ\ENQ\a\STX\\\SOH\DC2\EOT\167\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX[\DC2\EOT\166\a\STX\SO\n\ + \\EOT\ENQ\a\STX\\\DC2\EOT\167\a\STX\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX[\STX\DC2\EOT\166\a\n\ + \\ENQ\ENQ\a\STX\\\STX\DC2\EOT\167\a\n\ \\r\n\ \\r\n\ - \\ENQ\ENQ\a\STX\\\SOH\DC2\EOT\167\a\STX\n\ + \\ENQ\ENQ\a\STX]\SOH\DC2\EOT\168\a\STX\n\ \\n\ \\f\n\ - \\EOT\ENQ\a\STX\\\DC2\EOT\167\a\STX\DLE\n\ + \\EOT\ENQ\a\STX]\DC2\EOT\168\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STX\\\STX\DC2\EOT\167\a\r\SI\n\ + \\ENQ\ENQ\a\STX]\STX\DC2\EOT\168\a\r\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX]\SOH\DC2\EOT\168\a\STX\b\n\ + \\ENQ\ENQ\a\STX^\SOH\DC2\EOT\169\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STX]\DC2\EOT\168\a\STX\SI\n\ + \\EOT\ENQ\a\STX^\DC2\EOT\169\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STX]\STX\DC2\EOT\168\a\v\SO\n\ + \\ENQ\ENQ\a\STX^\STX\DC2\EOT\169\a\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STX^\SOH\DC2\EOT\169\a\STX\a\n\ + \\ENQ\ENQ\a\STX_\SOH\DC2\EOT\170\a\STX\a\n\ \\f\n\ - \\EOT\ENQ\a\STX^\DC2\EOT\169\a\STX\f\n\ + \\EOT\ENQ\a\STX_\DC2\EOT\170\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX^\STX\DC2\EOT\169\a\n\ + \\ENQ\ENQ\a\STX_\STX\DC2\EOT\170\a\n\ \\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX_\SOH\DC2\EOT\170\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STX`\SOH\DC2\EOT\171\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STX_\DC2\EOT\170\a\STX\f\n\ + \\EOT\ENQ\a\STX`\DC2\EOT\171\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX_\STX\DC2\EOT\170\a\b\v\n\ + \\ENQ\ENQ\a\STX`\STX\DC2\EOT\171\a\b\v\n\ \\r\n\ - \\ENQ\ENQ\a\STX`\SOH\DC2\EOT\171\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXa\SOH\DC2\EOT\172\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STX`\DC2\EOT\171\a\STX\f\n\ + \\EOT\ENQ\a\STXa\DC2\EOT\172\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STX`\STX\DC2\EOT\171\a\t\v\n\ + \\ENQ\ENQ\a\STXa\STX\DC2\EOT\172\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXa\SOH\DC2\EOT\172\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXb\SOH\DC2\EOT\173\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXa\DC2\EOT\172\a\STX\v\n\ + \\EOT\ENQ\a\STXb\DC2\EOT\173\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXa\STX\DC2\EOT\172\a\b\n\ + \\ENQ\ENQ\a\STXb\STX\DC2\EOT\173\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXb\SOH\DC2\EOT\173\a\STX\b\n\ + \\ENQ\ENQ\a\STXc\SOH\DC2\EOT\174\a\STX\b\n\ \\f\n\ - \\EOT\ENQ\a\STXb\DC2\EOT\173\a\STX\SI\n\ + \\EOT\ENQ\a\STXc\DC2\EOT\174\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXb\STX\DC2\EOT\173\a\v\SO\n\ + \\ENQ\ENQ\a\STXc\STX\DC2\EOT\174\a\v\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXc\SOH\DC2\EOT\174\a\STX\f\n\ + \\ENQ\ENQ\a\STXd\SOH\DC2\EOT\175\a\STX\f\n\ \\f\n\ - \\EOT\ENQ\a\STXc\DC2\EOT\174\a\STX\DC2\n\ + \\EOT\ENQ\a\STXd\DC2\EOT\175\a\STX\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXc\STX\DC2\EOT\174\a\SI\DC1\n\ + \\ENQ\ENQ\a\STXd\STX\DC2\EOT\175\a\SI\DC1\n\ \\r\n\ - \\ENQ\ENQ\a\STXd\SOH\DC2\EOT\175\a\STX\DC1\n\ + \\ENQ\ENQ\a\STXe\SOH\DC2\EOT\176\a\STX\DC1\n\ \\f\n\ - \\EOT\ENQ\a\STXd\DC2\EOT\175\a\STX\ETB\n\ + \\EOT\ENQ\a\STXe\DC2\EOT\176\a\STX\ETB\n\ \\r\n\ - \\ENQ\ENQ\a\STXd\STX\DC2\EOT\175\a\DC4\SYN\n\ + \\ENQ\ENQ\a\STXe\STX\DC2\EOT\176\a\DC4\SYN\n\ \\r\n\ - \\ENQ\ENQ\a\STXe\SOH\DC2\EOT\176\a\STX\t\n\ + \\ENQ\ENQ\a\STXf\SOH\DC2\EOT\177\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXe\DC2\EOT\176\a\STX\DLE\n\ + \\EOT\ENQ\a\STXf\DC2\EOT\177\a\STX\DLE\n\ \\r\n\ - \\ENQ\ENQ\a\STXe\STX\DC2\EOT\176\a\f\SI\n\ + \\ENQ\ENQ\a\STXf\STX\DC2\EOT\177\a\f\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXf\SOH\DC2\EOT\177\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXg\SOH\DC2\EOT\178\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXf\DC2\EOT\177\a\STX\r\n\ + \\EOT\ENQ\a\STXg\DC2\EOT\178\a\STX\r\n\ \\r\n\ - \\ENQ\ENQ\a\STXf\STX\DC2\EOT\177\a\t\f\n\ + \\ENQ\ENQ\a\STXg\STX\DC2\EOT\178\a\t\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXg\SOH\DC2\EOT\178\a\STX\r\n\ + \\ENQ\ENQ\a\STXh\SOH\DC2\EOT\179\a\STX\r\n\ \\f\n\ - \\EOT\ENQ\a\STXg\DC2\EOT\178\a\STX\DC3\n\ + \\EOT\ENQ\a\STXh\DC2\EOT\179\a\STX\DC3\n\ \\r\n\ - \\ENQ\ENQ\a\STXg\STX\DC2\EOT\178\a\DLE\DC2\n\ + \\ENQ\ENQ\a\STXh\STX\DC2\EOT\179\a\DLE\DC2\n\ \\r\n\ - \\ENQ\ENQ\a\STXh\SOH\DC2\EOT\179\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXi\SOH\DC2\EOT\180\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXh\DC2\EOT\179\a\STX\v\n\ + \\EOT\ENQ\a\STXi\DC2\EOT\180\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXh\STX\DC2\EOT\179\a\b\n\ + \\ENQ\ENQ\a\STXi\STX\DC2\EOT\180\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXi\SOH\DC2\EOT\180\a\STX\t\n\ + \\ENQ\ENQ\a\STXj\SOH\DC2\EOT\181\a\STX\t\n\ \\f\n\ - \\EOT\ENQ\a\STXi\DC2\EOT\180\a\STX\SI\n\ + \\EOT\ENQ\a\STXj\DC2\EOT\181\a\STX\SI\n\ \\r\n\ - \\ENQ\ENQ\a\STXi\STX\DC2\EOT\180\a\f\SO\n\ + \\ENQ\ENQ\a\STXj\STX\DC2\EOT\181\a\f\SO\n\ \\r\n\ - \\ENQ\ENQ\a\STXj\SOH\DC2\EOT\181\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXk\SOH\DC2\EOT\182\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXj\DC2\EOT\181\a\STX\v\n\ + \\EOT\ENQ\a\STXk\DC2\EOT\182\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXj\STX\DC2\EOT\181\a\b\n\ + \\ENQ\ENQ\a\STXk\STX\DC2\EOT\182\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXk\SOH\DC2\EOT\182\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXl\SOH\DC2\EOT\183\a\STX\ENQ\n\ \\f\n\ - \\EOT\ENQ\a\STXk\DC2\EOT\182\a\STX\v\n\ + \\EOT\ENQ\a\STXl\DC2\EOT\183\a\STX\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXk\STX\DC2\EOT\182\a\b\n\ + \\ENQ\ENQ\a\STXl\STX\DC2\EOT\183\a\b\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXl\SOH\DC2\EOT\183\a\STX\ACK\n\ + \\ENQ\ENQ\a\STXm\SOH\DC2\EOT\184\a\STX\ACK\n\ \\f\n\ - \\EOT\ENQ\a\STXl\DC2\EOT\183\a\STX\f\n\ + \\EOT\ENQ\a\STXm\DC2\EOT\184\a\STX\f\n\ \\r\n\ - \\ENQ\ENQ\a\STXl\STX\DC2\EOT\183\a\t\v\n\ + \\ENQ\ENQ\a\STXm\STX\DC2\EOT\184\a\t\v\n\ \\r\n\ - \\ENQ\ENQ\a\STXm\SOH\DC2\EOT\184\a\STX\ENQ\n\ + \\ENQ\ENQ\a\STXn\SOH\DC2\EOT\185\a\STX\ENQ\n\ \\147\ETX\n\ - \\EOT\ENQ\a\STXm\DC2\EOT\184\a\STX\v\"\132\ETX NextLanguage = 111;\n\ + \\EOT\ENQ\a\STXn\DC2\EOT\185\a\STX\v\"\132\ETX NextLanguage = 112;\n\ \ Steps add a new language:\n\ \ 1. Copy-paste the \"NextLanguage = N\" line above\n\ \ 2. Increment \"NextLanguage = N\" to \"NextLanguage = N+1\"\n\ @@ -10432,5 +10446,5 @@ packedFileDescriptor \ 5. (optional) Add a brief comment behind the language if the name is not self-explanatory\n\ \\n\ \\r\n\ - \\ENQ\ENQ\a\STXm\STX\DC2\EOT\184\a\b\n\ + \\ENQ\ENQ\a\STXn\STX\DC2\EOT\185\a\b\n\ \b\ACKproto3" \ No newline at end of file diff --git a/bindings/java/src/main/java/org/scip_code/scip/Language.java b/bindings/java/src/main/java/org/scip_code/scip/Language.java index f9734e89..69c616eb 100644 --- a/bindings/java/src/main/java/org/scip_code/scip/Language.java +++ b/bindings/java/src/main/java/org/scip_code/scip/Language.java @@ -292,6 +292,14 @@ public enum Language * Objective_CPP = 37; */ Objective_CPP(37), + /** + *
+   * https://odin-lang.org/
+   * 
+ * + * Odin = 111; + */ + Odin(111), /** * Pascal = 99; */ @@ -474,7 +482,7 @@ public enum Language YAML(74), /** *
-   * NextLanguage = 111;
+   * NextLanguage = 112;
    * Steps add a new language:
    * 1. Copy-paste the "NextLanguage = N" line above
    * 2. Increment "NextLanguage = N" to "NextLanguage = N+1"
@@ -770,6 +778,14 @@ public enum Language
    * Objective_CPP = 37;
    */
   public static final int Objective_CPP_VALUE = 37;
+  /**
+   * 
+   * https://odin-lang.org/
+   * 
+ * + * Odin = 111; + */ + public static final int Odin_VALUE = 111; /** * Pascal = 99; */ @@ -952,7 +968,7 @@ public enum Language public static final int YAML_VALUE = 74; /** *
-   * NextLanguage = 111;
+   * NextLanguage = 112;
    * Steps add a new language:
    * 1. Copy-paste the "NextLanguage = N" line above
    * 2. Increment "NextLanguage = N" to "NextLanguage = N+1"
@@ -1056,6 +1072,7 @@ public static Language forNumber(int value) {
       case 41: return OCaml;
       case 36: return Objective_C;
       case 37: return Objective_CPP;
+      case 111: return Odin;
       case 99: return Pascal;
       case 19: return PHP;
       case 70: return PLSQL;
diff --git a/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java b/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java
index 4da1ed80..0770e8a5 100644
--- a/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java
+++ b/bindings/java/src/main/java/org/scip_code/scip/ScipProto.java
@@ -249,7 +249,7 @@ public static void registerAllExtensions(
       "nspecifiedSeverity\020\000\022\t\n\005Error\020\001\022\013\n\007Warni" +
       "ng\020\002\022\017\n\013Information\020\003\022\010\n\004Hint\020\004*N\n\rDiagn" +
       "osticTag\022\034\n\030UnspecifiedDiagnosticTag\020\000\022\017" +
-      "\n\013Unnecessary\020\001\022\016\n\nDeprecated\020\002*\233\n\n\010Lang" +
+      "\n\013Unnecessary\020\001\022\016\n\nDeprecated\020\002*\245\n\n\010Lang" +
       "uage\022\027\n\023UnspecifiedLanguage\020\000\022\010\n\004ABAP\020<\022" +
       "\010\n\004Apex\020`\022\007\n\003APL\0201\022\007\n\003Ada\020\'\022\010\n\004Agda\020-\022\014\n" +
       "\010AsciiDoc\020V\022\014\n\010Assembly\020:\022\007\n\003Awk\020B\022\007\n\003Ba" +
@@ -270,21 +270,21 @@ public static void registerAllExtensions(
       "\020\014\022\010\n\004Luau\020l\022\014\n\010Makefile\020O\022\014\n\010Markdown\020T" +
       "\022\n\n\006Matlab\0204\022\n\n\006Nickel\020n\022\007\n\003Nix\020M\022\t\n\005OCa" +
       "ml\020)\022\017\n\013Objective_C\020$\022\021\n\rObjective_CPP\020%" +
-      "\022\n\n\006Pascal\020c\022\007\n\003PHP\020\023\022\t\n\005PLSQL\020F\022\010\n\004Perl" +
-      "\020\r\022\016\n\nPowerShell\020C\022\n\n\006Prolog\020G\022\014\n\010Protob" +
-      "uf\020d\022\n\n\006Python\020\017\022\005\n\001R\0206\022\n\n\006Racket\020\013\022\010\n\004R" +
-      "aku\020\016\022\t\n\005Razor\020>\022\t\n\005Repro\020f\022\010\n\004ReST\020U\022\010\n" +
-      "\004Ruby\020\020\022\010\n\004Rust\020(\022\007\n\003SAS\020=\022\010\n\004SCSS\020\035\022\007\n\003" +
-      "SML\020+\022\007\n\003SQL\020E\022\010\n\004Sass\020\034\022\t\n\005Scala\020\005\022\n\n\006S" +
-      "cheme\020\n\022\017\n\013ShellScript\020@\022\013\n\007Skylark\020N\022\t\n" +
-      "\005Slang\020k\022\014\n\010Solidity\020_\022\n\n\006Svelte\020j\022\t\n\005Sw" +
-      "ift\020\002\022\007\n\003Tcl\020e\022\010\n\004TOML\020I\022\007\n\003TeX\020R\022\n\n\006Thr" +
-      "ift\020g\022\016\n\nTypeScript\020\027\022\023\n\017TypeScriptReact" +
-      "\020^\022\013\n\007Verilog\020h\022\010\n\004VHDL\020i\022\017\n\013VisualBasic" +
-      "\020?\022\007\n\003Vue\020\031\022\013\n\007Wolfram\0205\022\007\n\003XML\020\037\022\007\n\003XSL" +
-      "\020 \022\010\n\004YAML\020J\022\007\n\003Zig\020&BN\n\022org.scip_code.s" +
-      "cipB\tScipProtoP\001Z+github.com/scip-code/s" +
-      "cip/bindings/go/scip/b\006proto3"
+      "\022\010\n\004Odin\020o\022\n\n\006Pascal\020c\022\007\n\003PHP\020\023\022\t\n\005PLSQL" +
+      "\020F\022\010\n\004Perl\020\r\022\016\n\nPowerShell\020C\022\n\n\006Prolog\020G" +
+      "\022\014\n\010Protobuf\020d\022\n\n\006Python\020\017\022\005\n\001R\0206\022\n\n\006Rac" +
+      "ket\020\013\022\010\n\004Raku\020\016\022\t\n\005Razor\020>\022\t\n\005Repro\020f\022\010\n" +
+      "\004ReST\020U\022\010\n\004Ruby\020\020\022\010\n\004Rust\020(\022\007\n\003SAS\020=\022\010\n\004" +
+      "SCSS\020\035\022\007\n\003SML\020+\022\007\n\003SQL\020E\022\010\n\004Sass\020\034\022\t\n\005Sc" +
+      "ala\020\005\022\n\n\006Scheme\020\n\022\017\n\013ShellScript\020@\022\013\n\007Sk" +
+      "ylark\020N\022\t\n\005Slang\020k\022\014\n\010Solidity\020_\022\n\n\006Svel" +
+      "te\020j\022\t\n\005Swift\020\002\022\007\n\003Tcl\020e\022\010\n\004TOML\020I\022\007\n\003Te" +
+      "X\020R\022\n\n\006Thrift\020g\022\016\n\nTypeScript\020\027\022\023\n\017TypeS" +
+      "criptReact\020^\022\013\n\007Verilog\020h\022\010\n\004VHDL\020i\022\017\n\013V" +
+      "isualBasic\020?\022\007\n\003Vue\020\031\022\013\n\007Wolfram\0205\022\007\n\003XM" +
+      "L\020\037\022\007\n\003XSL\020 \022\010\n\004YAML\020J\022\007\n\003Zig\020&BN\n\022org.s" +
+      "cip_code.scipB\tScipProtoP\001Z+github.com/s" +
+      "cip-code/scip/bindings/go/scip/b\006proto3"
     };
     descriptor = com.google.protobuf.Descriptors.FileDescriptor
       .internalBuildGeneratedFileFrom(descriptorData,
diff --git a/bindings/rust/src/generated/scip.rs b/bindings/rust/src/generated/scip.rs
index eaffd711..5d9c11fd 100644
--- a/bindings/rust/src/generated/scip.rs
+++ b/bindings/rust/src/generated/scip.rs
@@ -4800,6 +4800,8 @@ pub enum Language {
     Objective_C = 36,
     // @@protoc_insertion_point(enum_value:scip.Language.Objective_CPP)
     Objective_CPP = 37,
+    // @@protoc_insertion_point(enum_value:scip.Language.Odin)
+    Odin = 111,
     // @@protoc_insertion_point(enum_value:scip.Language.Pascal)
     Pascal = 99,
     // @@protoc_insertion_point(enum_value:scip.Language.PHP)
@@ -4965,6 +4967,7 @@ impl ::protobuf::Enum for Language {
             41 => ::std::option::Option::Some(Language::OCaml),
             36 => ::std::option::Option::Some(Language::Objective_C),
             37 => ::std::option::Option::Some(Language::Objective_CPP),
+            111 => ::std::option::Option::Some(Language::Odin),
             99 => ::std::option::Option::Some(Language::Pascal),
             19 => ::std::option::Option::Some(Language::PHP),
             70 => ::std::option::Option::Some(Language::PLSQL),
@@ -5081,6 +5084,7 @@ impl ::protobuf::Enum for Language {
             "OCaml" => ::std::option::Option::Some(Language::OCaml),
             "Objective_C" => ::std::option::Option::Some(Language::Objective_C),
             "Objective_CPP" => ::std::option::Option::Some(Language::Objective_CPP),
+            "Odin" => ::std::option::Option::Some(Language::Odin),
             "Pascal" => ::std::option::Option::Some(Language::Pascal),
             "PHP" => ::std::option::Option::Some(Language::PHP),
             "PLSQL" => ::std::option::Option::Some(Language::PLSQL),
@@ -5196,6 +5200,7 @@ impl ::protobuf::Enum for Language {
         Language::OCaml,
         Language::Objective_C,
         Language::Objective_CPP,
+        Language::Odin,
         Language::Pascal,
         Language::PHP,
         Language::PLSQL,
@@ -5317,50 +5322,51 @@ impl ::protobuf::EnumFull for Language {
             Language::OCaml => 63,
             Language::Objective_C => 64,
             Language::Objective_CPP => 65,
-            Language::Pascal => 66,
-            Language::PHP => 67,
-            Language::PLSQL => 68,
-            Language::Perl => 69,
-            Language::PowerShell => 70,
-            Language::Prolog => 71,
-            Language::Protobuf => 72,
-            Language::Python => 73,
-            Language::R => 74,
-            Language::Racket => 75,
-            Language::Raku => 76,
-            Language::Razor => 77,
-            Language::Repro => 78,
-            Language::ReST => 79,
-            Language::Ruby => 80,
-            Language::Rust => 81,
-            Language::SAS => 82,
-            Language::SCSS => 83,
-            Language::SML => 84,
-            Language::SQL => 85,
-            Language::Sass => 86,
-            Language::Scala => 87,
-            Language::Scheme => 88,
-            Language::ShellScript => 89,
-            Language::Skylark => 90,
-            Language::Slang => 91,
-            Language::Solidity => 92,
-            Language::Svelte => 93,
-            Language::Swift => 94,
-            Language::Tcl => 95,
-            Language::TOML => 96,
-            Language::TeX => 97,
-            Language::Thrift => 98,
-            Language::TypeScript => 99,
-            Language::TypeScriptReact => 100,
-            Language::Verilog => 101,
-            Language::VHDL => 102,
-            Language::VisualBasic => 103,
-            Language::Vue => 104,
-            Language::Wolfram => 105,
-            Language::XML => 106,
-            Language::XSL => 107,
-            Language::YAML => 108,
-            Language::Zig => 109,
+            Language::Odin => 66,
+            Language::Pascal => 67,
+            Language::PHP => 68,
+            Language::PLSQL => 69,
+            Language::Perl => 70,
+            Language::PowerShell => 71,
+            Language::Prolog => 72,
+            Language::Protobuf => 73,
+            Language::Python => 74,
+            Language::R => 75,
+            Language::Racket => 76,
+            Language::Raku => 77,
+            Language::Razor => 78,
+            Language::Repro => 79,
+            Language::ReST => 80,
+            Language::Ruby => 81,
+            Language::Rust => 82,
+            Language::SAS => 83,
+            Language::SCSS => 84,
+            Language::SML => 85,
+            Language::SQL => 86,
+            Language::Sass => 87,
+            Language::Scala => 88,
+            Language::Scheme => 89,
+            Language::ShellScript => 90,
+            Language::Skylark => 91,
+            Language::Slang => 92,
+            Language::Solidity => 93,
+            Language::Svelte => 94,
+            Language::Swift => 95,
+            Language::Tcl => 96,
+            Language::TOML => 97,
+            Language::TeX => 98,
+            Language::Thrift => 99,
+            Language::TypeScript => 100,
+            Language::TypeScriptReact => 101,
+            Language::Verilog => 102,
+            Language::VHDL => 103,
+            Language::VisualBasic => 104,
+            Language::Vue => 105,
+            Language::Wolfram => 106,
+            Language::XML => 107,
+            Language::XSL => 108,
+            Language::YAML => 109,
+            Language::Zig => 110,
         };
         Self::enum_descriptor().value_by_index(index)
     }
@@ -5519,7 +5525,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     rror\x10\x01\x12\x0b\n\x07Warning\x10\x02\x12\x0f\n\x0bInformation\x10\
     \x03\x12\x08\n\x04Hint\x10\x04*N\n\rDiagnosticTag\x12\x1c\n\x18Unspecifi\
     edDiagnosticTag\x10\0\x12\x0f\n\x0bUnnecessary\x10\x01\x12\x0e\n\nDeprec\
-    ated\x10\x02*\x9b\n\n\x08Language\x12\x17\n\x13UnspecifiedLanguage\x10\0\
+    ated\x10\x02*\xa5\n\n\x08Language\x12\x17\n\x13UnspecifiedLanguage\x10\0\
     \x12\x08\n\x04ABAP\x10<\x12\x08\n\x04Apex\x10`\x12\x07\n\x03APL\x101\x12\
     \x07\n\x03Ada\x10'\x12\x08\n\x04Agda\x10-\x12\x0c\n\x08AsciiDoc\x10V\x12\
     \x0c\n\x08Assembly\x10:\x12\x07\n\x03Awk\x10B\x12\x07\n\x03Bat\x10D\x12\
@@ -5542,222 +5548,222 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     \x10\x1b\x12\x07\n\x03Lua\x10\x0c\x12\x08\n\x04Luau\x10l\x12\x0c\n\x08Ma\
     kefile\x10O\x12\x0c\n\x08Markdown\x10T\x12\n\n\x06Matlab\x104\x12\n\n\
     \x06Nickel\x10n\x12\x07\n\x03Nix\x10M\x12\t\n\x05OCaml\x10)\x12\x0f\n\
-    \x0bObjective_C\x10$\x12\x11\n\rObjective_CPP\x10%\x12\n\n\x06Pascal\x10\
-    c\x12\x07\n\x03PHP\x10\x13\x12\t\n\x05PLSQL\x10F\x12\x08\n\x04Perl\x10\r\
-    \x12\x0e\n\nPowerShell\x10C\x12\n\n\x06Prolog\x10G\x12\x0c\n\x08Protobuf\
-    \x10d\x12\n\n\x06Python\x10\x0f\x12\x05\n\x01R\x106\x12\n\n\x06Racket\
-    \x10\x0b\x12\x08\n\x04Raku\x10\x0e\x12\t\n\x05Razor\x10>\x12\t\n\x05Repr\
-    o\x10f\x12\x08\n\x04ReST\x10U\x12\x08\n\x04Ruby\x10\x10\x12\x08\n\x04Rus\
-    t\x10(\x12\x07\n\x03SAS\x10=\x12\x08\n\x04SCSS\x10\x1d\x12\x07\n\x03SML\
-    \x10+\x12\x07\n\x03SQL\x10E\x12\x08\n\x04Sass\x10\x1c\x12\t\n\x05Scala\
-    \x10\x05\x12\n\n\x06Scheme\x10\n\x12\x0f\n\x0bShellScript\x10@\x12\x0b\n\
-    \x07Skylark\x10N\x12\t\n\x05Slang\x10k\x12\x0c\n\x08Solidity\x10_\x12\n\
-    \n\x06Svelte\x10j\x12\t\n\x05Swift\x10\x02\x12\x07\n\x03Tcl\x10e\x12\x08\
-    \n\x04TOML\x10I\x12\x07\n\x03TeX\x10R\x12\n\n\x06Thrift\x10g\x12\x0e\n\n\
-    TypeScript\x10\x17\x12\x13\n\x0fTypeScriptReact\x10^\x12\x0b\n\x07Verilo\
-    g\x10h\x12\x08\n\x04VHDL\x10i\x12\x0f\n\x0bVisualBasic\x10?\x12\x07\n\
-    \x03Vue\x10\x19\x12\x0b\n\x07Wolfram\x105\x12\x07\n\x03XML\x10\x1f\x12\
-    \x07\n\x03XSL\x10\x20\x12\x08\n\x04YAML\x10J\x12\x07\n\x03Zig\x10&BN\n\
-    \x12org.scip_code.scipB\tScipProtoP\x01Z+github.com/scip-code/scip/bindi\
-    ngs/go/scip/J\xc2\xd5\x02\n\x07\x12\x05\n\0\xc0\x07\x01\n\x82\x04\n\x01\
-    \x0c\x12\x03\n\0\x122\xf7\x03\x20An\x20index\x20contains\x20one\x20or\
-    \x20more\x20pieces\x20of\x20information\x20about\x20a\x20given\x20piece\
-    \x20of\n\x20source\x20code\x20or\x20software\x20artifact.\x20Complementa\
-    ry\x20information\x20can\x20be\x20merged\n\x20together\x20from\x20multip\
-    le\x20sources\x20to\x20provide\x20a\x20unified\x20code\x20intelligence\n\
-    \x20experience.\n\n\x20Programs\x20producing\x20a\x20file\x20of\x20this\
-    \x20format\x20is\x20an\x20\"indexer\"\x20and\x20may\x20operate\n\x20some\
-    where\x20on\x20the\x20spectrum\x20between\x20precision,\x20such\x20as\
-    \x20indexes\x20produced\x20by\n\x20compiler-backed\x20indexers,\x20and\
-    \x20heurstics,\x20such\x20as\x20indexes\x20produced\x20by\x20local\n\x20\
-    syntax-directed\x20analysis\x20for\x20scope\x20rules.\n\n\x08\n\x01\x02\
-    \x12\x03\x0c\0\r\n\x08\n\x01\x08\x12\x03\x0e\0B\n\t\n\x02\x08\x0b\x12\
-    \x03\x0e\0B\n\x08\n\x01\x08\x12\x03\x0f\0\"\n\t\n\x02\x08\n\x12\x03\x0f\
-    \0\"\n\x08\n\x01\x08\x12\x03\x10\0*\n\t\n\x02\x08\x08\x12\x03\x10\0*\n\
-    \x08\n\x01\x08\x12\x03\x11\0+\n\t\n\x02\x08\x01\x12\x03\x11\0+\n\xd0\x03\
-    \n\x02\x04\0\x12\x04\x19\0&\x01\x1a\xc3\x03\x20Index\x20represents\x20a\
-    \x20complete\x20SCIP\x20index\x20for\x20a\x20workspace\x20this\x20is\x20\
-    rooted\x20at\x20a\n\x20single\x20directory.\x20An\x20Index\x20message\
-    \x20payload\x20can\x20have\x20a\x20large\x20memory\x20footprint\n\x20and\
-    \x20it's\x20therefore\x20recommended\x20to\x20emit\x20and\x20consume\x20\
-    an\x20Index\x20payload\x20one\x20field\n\x20value\x20at\x20a\x20time.\
-    \x20To\x20permit\x20streaming\x20consumption\x20of\x20an\x20Index\x20pay\
-    load,\x20the\n\x20`metadata`\x20field\x20must\x20appear\x20at\x20the\x20\
-    start\x20of\x20the\x20stream\x20and\x20must\x20only\x20appear\n\x20once\
-    \x20in\x20the\x20stream.\x20Other\x20field\x20values\x20may\x20appear\
-    \x20in\x20any\x20order.\n\n\n\n\x03\x04\0\x01\x12\x03\x19\x08\r\n\x0c\n\
-    \x05\x04\0\x02\0\x06\x12\x03\x1b\x02\n\n)\n\x04\x04\0\x02\0\x12\x03\x1b\
-    \x02\x18\x1a\x1c\x20Metadata\x20about\x20this\x20index.\n\n\x0c\n\x05\
-    \x04\0\x02\0\x01\x12\x03\x1b\x0b\x13\n\x0c\n\x05\x04\0\x02\0\x03\x12\x03\
-    \x1b\x16\x17\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x03\x1d\x02\n\n3\n\x04\
-    \x04\0\x02\x01\x12\x03\x1d\x02\"\x1a&\x20Documents\x20that\x20belong\x20\
-    to\x20this\x20index.\n\n\x0c\n\x05\x04\0\x02\x01\x06\x12\x03\x1d\x0b\x13\
-    \n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x1d\x14\x1d\n\x0c\n\x05\x04\0\x02\
-    \x01\x03\x12\x03\x1d\x20!\n\x0c\n\x05\x04\0\x02\x02\x04\x12\x03#\x02\n\n\
-    \xf6\x03\n\x04\x04\0\x02\x02\x12\x03#\x022\x1a\xe9\x02\x20(optional)\x20\
-    Symbols\x20that\x20are\x20referenced\x20from\x20this\x20index\x20but\x20\
-    are\x20defined\x20in\n\x20an\x20external\x20package\x20(a\x20separate\
-    \x20`Index`\x20message).\x20Leave\x20this\x20field\x20empty\n\x20if\x20y\
-    ou\x20assume\x20the\x20external\x20package\x20will\x20get\x20indexed\x20\
-    separately.\x20If\x20the\n\x20external\x20package\x20won't\x20get\x20ind\
-    exed\x20for\x20some\x20reason\x20then\x20you\x20can\x20use\x20this\n\x20\
-    field\x20to\x20provide\x20hover\x20documentation\x20for\x20those\x20exte\
-    rnal\x20symbols.\n\"}\x20IMPORTANT:\x20When\x20adding\x20a\x20new\x20fie\
-    ld\x20to\x20`Index`\x20here,\x20add\x20a\x20matching\n\x20function\x20in\
-    \x20`IndexVisitor`\x20and\x20update\x20`ParseStreaming`.\n\n\x0c\n\x05\
-    \x04\0\x02\x02\x06\x12\x03#\x0b\x1c\n\x0c\n\x05\x04\0\x02\x02\x01\x12\
-    \x03#\x1d-\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03#01\n\n\n\x02\x04\x01\
-    \x12\x04(\05\x01\n\n\n\x03\x04\x01\x01\x12\x03(\x08\x10\n\x0c\n\x05\x04\
-    \x01\x02\0\x06\x12\x03*\x02\x11\nN\n\x04\x04\x01\x02\0\x12\x03*\x02\x1e\
-    \x1aA\x20Which\x20version\x20of\x20this\x20protocol\x20was\x20used\x20to\
-    \x20generate\x20this\x20index?\n\n\x0c\n\x05\x04\x01\x02\0\x01\x12\x03*\
-    \x12\x19\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03*\x1c\x1d\n\x0c\n\x05\x04\
-    \x01\x02\x01\x06\x12\x03,\x02\n\nC\n\x04\x04\x01\x02\x01\x12\x03,\x02\
-    \x19\x1a6\x20Information\x20about\x20the\x20tool\x20that\x20produced\x20\
-    this\x20index.\n\n\x0c\n\x05\x04\x01\x02\x01\x01\x12\x03,\x0b\x14\n\x0c\
-    \n\x05\x04\x01\x02\x01\x03\x12\x03,\x17\x18\n\x0c\n\x05\x04\x01\x02\x02\
-    \x05\x12\x030\x02\x08\n\xa2\x01\n\x04\x04\x01\x02\x02\x12\x030\x02\x1a\
-    \x1a\x94\x01\x20URI-encoded\x20absolute\x20path\x20to\x20the\x20root\x20\
-    directory\x20of\x20this\x20index.\x20All\n\x20documents\x20in\x20this\
-    \x20index\x20must\x20appear\x20in\x20a\x20subdirectory\x20of\x20this\x20\
-    root\n\x20directory.\n\n\x0c\n\x05\x04\x01\x02\x02\x01\x12\x030\t\x15\n\
-    \x0c\n\x05\x04\x01\x02\x02\x03\x12\x030\x18\x19\n\x0c\n\x05\x04\x01\x02\
-    \x03\x06\x12\x034\x02\x0e\n\xe0\x01\n\x04\x04\x01\x02\x03\x12\x034\x02*\
-    \x1a\xd2\x01\x20Text\x20encoding\x20of\x20the\x20source\x20files\x20on\
-    \x20disk\x20that\x20are\x20referenced\x20from\n\x20`Document.relative_pa\
-    th`.\x20This\x20value\x20is\x20unrelated\x20to\x20the\x20`Document.text`\
-    \n\x20field,\x20which\x20is\x20a\x20Protobuf\x20string\x20and\x20hence\
-    \x20must\x20be\x20UTF-8\x20encoded.\n\n\x0c\n\x05\x04\x01\x02\x03\x01\
-    \x12\x034\x0f%\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x034()\n\n\n\x02\x05\
-    \0\x12\x047\09\x01\n\n\n\x03\x05\0\x01\x12\x037\x05\x14\n\x0c\n\x05\x05\
-    \0\x02\0\x01\x12\x038\x02\x1c\n\x0b\n\x04\x05\0\x02\0\x12\x038\x02!\n\
-    \x0c\n\x05\x05\0\x02\0\x02\x12\x038\x1f\x20\n\n\n\x02\x05\x01\x12\x04;\0\
-    ?\x01\n\n\n\x03\x05\x01\x01\x12\x03;\x05\x11\n\x0c\n\x05\x05\x01\x02\0\
-    \x01\x12\x03<\x02\x19\n\x0b\n\x04\x05\x01\x02\0\x12\x03<\x02\x1e\n\x0c\n\
-    \x05\x05\x01\x02\0\x02\x12\x03<\x1c\x1d\n\x0c\n\x05\x05\x01\x02\x01\x01\
-    \x12\x03=\x02\x06\n\x0b\n\x04\x05\x01\x02\x01\x12\x03=\x02\x0b\n\x0c\n\
-    \x05\x05\x01\x02\x01\x02\x12\x03=\t\n\n\x0c\n\x05\x05\x01\x02\x02\x01\
-    \x12\x03>\x02\x07\n\x0b\n\x04\x05\x01\x02\x02\x12\x03>\x02\x0c\n\x0c\n\
-    \x05\x05\x01\x02\x02\x02\x12\x03>\n\x0b\n\n\n\x02\x04\x02\x12\x04A\0H\
-    \x01\n\n\n\x03\x04\x02\x01\x12\x03A\x08\x10\n\x0c\n\x05\x04\x02\x02\0\
-    \x05\x12\x03C\x02\x08\n<\n\x04\x04\x02\x02\0\x12\x03C\x02\x12\x1a/\x20Na\
-    me\x20of\x20the\x20indexer\x20that\x20produced\x20this\x20index.\n\n\x0c\
-    \n\x05\x04\x02\x02\0\x01\x12\x03C\t\r\n\x0c\n\x05\x04\x02\x02\0\x03\x12\
-    \x03C\x10\x11\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03E\x02\x08\n?\n\x04\
-    \x04\x02\x02\x01\x12\x03E\x02\x15\x1a2\x20Version\x20of\x20the\x20indexe\
-    r\x20that\x20produced\x20this\x20index.\n\n\x0c\n\x05\x04\x02\x02\x01\
-    \x01\x12\x03E\t\x10\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\x03E\x13\x14\n\
-    \x0c\n\x05\x04\x02\x02\x02\x04\x12\x03G\x02\n\nL\n\x04\x04\x02\x02\x02\
-    \x12\x03G\x02\x20\x1a?\x20Command-line\x20arguments\x20that\x20were\x20u\
-    sed\x20to\x20invoke\x20this\x20indexer.\n\n\x0c\n\x05\x04\x02\x02\x02\
-    \x05\x12\x03G\x0b\x11\n\x0c\n\x05\x04\x02\x02\x02\x01\x12\x03G\x12\x1b\n\
-    \x0c\n\x05\x04\x02\x02\x02\x03\x12\x03G\x1e\x1f\nH\n\x02\x04\x03\x12\x04\
-    K\0v\x01\x1a<\x20Document\x20defines\x20the\x20metadata\x20about\x20a\
-    \x20source\x20file\x20on\x20disk.\n\n\n\n\x03\x04\x03\x01\x12\x03K\x08\
-    \x10\n\x0c\n\x05\x04\x03\x02\0\x05\x12\x03P\x02\x08\n\xa5\x02\n\x04\x04\
-    \x03\x02\0\x12\x03P\x02\x16\x1a\x97\x02\x20The\x20string\x20ID\x20for\
-    \x20the\x20programming\x20language\x20this\x20file\x20is\x20written\x20i\
-    n.\n\x20The\x20`Language`\x20enum\x20contains\x20the\x20names\x20of\x20m\
-    ost\x20common\x20programming\x20languages.\n\x20This\x20field\x20is\x20t\
-    yped\x20as\x20a\x20string\x20to\x20permit\x20any\x20programming\x20langu\
-    age,\x20including\n\x20ones\x20that\x20are\x20not\x20specified\x20by\x20\
-    the\x20`Language`\x20enum.\n\n\x0c\n\x05\x04\x03\x02\0\x01\x12\x03P\t\
-    \x11\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03P\x14\x15\n\x0c\n\x05\x04\x03\
-    \x02\x01\x05\x12\x03Z\x02\x08\n\xb5\x03\n\x04\x04\x03\x02\x01\x12\x03Z\
-    \x02\x1b\x1a\xa7\x03\x20(Required)\x20Unique\x20path\x20to\x20the\x20tex\
-    t\x20document.\n\n\x201.\x20The\x20path\x20must\x20be\x20relative\x20to\
-    \x20the\x20directory\x20supplied\x20in\x20the\x20associated\n\x20\x20\
-    \x20\x20`Metadata.project_root`.\n\x202.\x20The\x20path\x20must\x20not\
-    \x20begin\x20with\x20a\x20leading\x20'/'.\n\x203.\x20The\x20path\x20must\
-    \x20point\x20to\x20a\x20regular\x20file,\x20not\x20a\x20symbolic\x20link\
-    .\n\x204.\x20The\x20path\x20must\x20use\x20'/'\x20as\x20the\x20separator\
-    ,\x20including\x20on\x20Windows.\n\x205.\x20The\x20path\x20must\x20be\
-    \x20canonical;\x20it\x20cannot\x20include\x20empty\x20components\x20('//\
-    '),\n\x20\x20\x20\x20or\x20'.'\x20or\x20'..'.\n\n\x0c\n\x05\x04\x03\x02\
-    \x01\x01\x12\x03Z\t\x16\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x03Z\x19\x1a\
-    \n\x0c\n\x05\x04\x03\x02\x02\x04\x12\x03\\\x02\n\n4\n\x04\x04\x03\x02\
-    \x02\x12\x03\\\x02&\x1a'\x20Occurrences\x20that\x20appear\x20in\x20this\
-    \x20file.\n\n\x0c\n\x05\x04\x03\x02\x02\x06\x12\x03\\\x0b\x15\n\x0c\n\
-    \x05\x04\x03\x02\x02\x01\x12\x03\\\x16!\n\x0c\n\x05\x04\x03\x02\x02\x03\
-    \x12\x03\\$%\n\x0c\n\x05\x04\x03\x02\x03\x04\x12\x03b\x02\n\n\xea\x01\n\
-    \x04\x04\x03\x02\x03\x12\x03b\x02)\x1a\xdc\x01\x20Symbols\x20that\x20are\
-    \x20\"defined\"\x20within\x20this\x20document.\n\n\x20This\x20should\x20\
-    include\x20symbols\x20which\x20technically\x20do\x20not\x20have\x20any\
-    \x20definition,\n\x20but\x20have\x20a\x20reference\x20and\x20are\x20defi\
-    ned\x20by\x20some\x20other\x20symbol\x20(see\n\x20Relationship.is_defini\
-    tion).\n\n\x0c\n\x05\x04\x03\x02\x03\x06\x12\x03b\x0b\x1c\n\x0c\n\x05\
-    \x04\x03\x02\x03\x01\x12\x03b\x1d$\n\x0c\n\x05\x04\x03\x02\x03\x03\x12\
-    \x03b'(\n\x0c\n\x05\x04\x03\x02\x04\x05\x12\x03i\x02\x08\n\x80\x03\n\x04\
-    \x04\x03\x02\x04\x12\x03i\x02\x12\x1a\xf2\x02\x20(optional)\x20Text\x20c\
-    ontents\x20of\x20this\x20document.\x20Indexers\x20are\x20not\x20expected\
-    \x20to\n\x20include\x20the\x20text\x20by\x20default.\x20It's\x20preferab\
-    le\x20that\x20clients\x20read\x20the\x20text\n\x20contents\x20from\x20th\
-    e\x20file\x20system\x20by\x20resolving\x20the\x20absolute\x20path\x20fro\
-    m\x20joining\n\x20`Index.metadata.project_root`\x20and\x20`Document.rela\
-    tive_path`.\x20This\x20field\n\x20can\x20be\x20useful\x20for\x20testing\
-    \x20or\x20when\x20working\x20with\x20virtual/in-memory\x20documents.\n\n\
-    \x0c\n\x05\x04\x03\x02\x04\x01\x12\x03i\t\r\n\x0c\n\x05\x04\x03\x02\x04\
-    \x03\x12\x03i\x10\x11\n\x0c\n\x05\x04\x03\x02\x05\x06\x12\x03u\x02\x12\n\
-    \xe7\x03\n\x04\x04\x03\x02\x05\x12\x03u\x02)\x1a\xd9\x03\x20Specifies\
-    \x20the\x20encoding\x20used\x20for\x20source\x20ranges\x20in\x20this\x20\
-    Document.\n\n\x20Usually,\x20this\x20will\x20match\x20the\x20type\x20use\
-    d\x20to\x20index\x20the\x20string\x20type\n\x20in\x20the\x20indexer's\
-    \x20implementation\x20language\x20in\x20O(1)\x20time.\n\x20-\x20For\x20a\
-    n\x20indexer\x20implemented\x20in\x20JVM/.NET\x20language\x20or\x20JavaS\
-    cript/TypeScript,\n\x20\x20\x20use\x20UTF16CodeUnitOffsetFromLineStart.\
-    \n\x20-\x20For\x20an\x20indexer\x20implemented\x20in\x20Python,\n\x20\
-    \x20\x20use\x20UTF32CodeUnitOffsetFromLineStart.\n\x20-\x20For\x20an\x20\
-    indexer\x20implemented\x20in\x20Go,\x20Rust\x20or\x20C++,\n\x20\x20\x20u\
-    se\x20UTF8ByteOffsetFromLineStart.\n\n\x0c\n\x05\x04\x03\x02\x05\x01\x12\
-    \x03u\x13$\n\x0c\n\x05\x04\x03\x02\x05\x03\x12\x03u'(\nQ\n\x02\x05\x02\
-    \x12\x05y\0\x91\x01\x01\x1aD\x20Encoding\x20used\x20to\x20interpret\x20t\
-    he\x20'character'\x20value\x20in\x20source\x20ranges.\n\n\n\n\x03\x05\
-    \x02\x01\x12\x03y\x05\x15\n\x0c\n\x05\x05\x02\x02\0\x01\x12\x03|\x02\x1d\
-    \n\x93\x01\n\x04\x05\x02\x02\0\x12\x03|\x02\"\x1a\x85\x01\x20Default\x20\
-    value.\x20This\x20value\x20should\x20not\x20be\x20used\x20by\x20new\x20S\
-    CIP\x20indexers\n\x20so\x20that\x20a\x20consumer\x20can\x20process\x20th\
-    e\x20SCIP\x20index\x20without\x20ambiguity.\n\n\x0c\n\x05\x05\x02\x02\0\
-    \x02\x12\x03|\x20!\n\r\n\x05\x05\x02\x02\x01\x01\x12\x04\x83\x01\x02!\n\
-    \xf7\x01\n\x04\x05\x02\x02\x01\x12\x04\x83\x01\x02&\x1a\xe8\x01\x20The\
-    \x20'character'\x20value\x20is\x20interpreted\x20as\x20an\x20offset\x20i\
-    n\x20terms\n\x20of\x20UTF-8\x20code\x20units\x20(i.e.\x20bytes).\n\n\x20\
-    Example:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\"\x20in\
-    \x20UTF-8,\x20the\x20bytes\x20are\n\x20[240,\x20159,\x20154,\x20128,\x20\
-    32,\x2087,\x20111,\x20111],\x20so\x20the\x20offset\x20for\x20'W'\n\x20wo\
-    uld\x20be\x205.\n\n\r\n\x05\x05\x02\x02\x01\x02\x12\x04\x83\x01$%\n\r\n\
-    \x05\x05\x02\x02\x02\x01\x12\x04\x8a\x01\x02\"\n\x82\x02\n\x04\x05\x02\
-    \x02\x02\x12\x04\x8a\x01\x02'\x1a\xf3\x01\x20The\x20'character'\x20value\
-    \x20is\x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\x20of\x20UT\
-    F-16\x20code\x20units\x20(each\x20is\x202\x20bytes).\n\n\x20Example:\x20\
-    For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\x20UTF-16\
-    \x20code\x20units\x20are\n\x20['\\ud83d',\x20'\\ude80',\x20'\x20',\x20'W\
-    ',\x20'o',\x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\n\x20would\x20b\
-    e\x203.\n\n\r\n\x05\x05\x02\x02\x02\x02\x12\x04\x8a\x01%&\n\r\n\x05\x05\
-    \x02\x02\x03\x01\x12\x04\x90\x01\x02\"\n\xf5\x01\n\x04\x05\x02\x02\x03\
-    \x12\x04\x90\x01\x02'\x1a\xe6\x01\x20The\x20'character'\x20value\x20is\
-    \x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\x20of\x20UTF-32\
-    \x20code\x20units\x20(each\x20is\x204\x20bytes).\n\n\x20Example:\x20For\
-    \x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\x20UTF-32\x20co\
-    de\x20units\x20are\n\x20['\xf0\x9f\x9a\x80',\x20'\x20',\x20'W',\x20'o',\
-    \x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\x20would\x20be\x202.\n\n\
-    \r\n\x05\x05\x02\x02\x03\x02\x12\x04\x90\x01%&\n\xcc\x12\n\x02\x04\x04\
-    \x12\x06\xbd\x01\0\xc1\x01\x01\x1a\xbd\x12\x20Symbol\x20is\x20similar\
-    \x20to\x20a\x20URI,\x20it\x20identifies\x20a\x20class,\x20method,\x20or\
-    \x20a\x20local\n\x20variable.\x20`SymbolInformation`\x20contains\x20rich\
-    \x20metadata\x20about\x20symbols\x20such\x20as\n\x20the\x20docstring.\n\
-    \n\x20Symbol\x20has\x20a\x20standardized\x20string\x20representation,\
-    \x20which\x20can\x20be\x20used\n\x20interchangeably\x20with\x20`Symbol`.\
-    \x20The\x20syntax\x20for\x20Symbol\x20is\x20the\x20following:\n\x20```\n\
-    \x20#\x20()+\x20stands\x20for\x20one\x20or\x20more\x20repetitions\x20\
-    of\x20\n\x20#\x20()?\x20stands\x20for\x20zero\x20or\x20one\x20occu\
-    rrence\x20of\x20\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\
-    \x20\x20\x20\x20\x20\x20::=\x20\x20'\x20'\x20\x20'\x20'\
-    \x20()+\x20|\x20'local\x20'\x20\n\x20\x20\
-    \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20\x20\
-    '\x20'\x20\x20'\x20'\x20\n\x20\x20\x20\
-    \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20any\x20UTF-8,\
-    \x20escape\x20spaces\x20with\x20double\x20space.\x20Must\x20not\x20be\
-    \x20empty\x20nor\x20start\x20with\x20'local'\n\x20\x20\x20\x20\
+    \x0bObjective_C\x10$\x12\x11\n\rObjective_CPP\x10%\x12\x08\n\x04Odin\x10\
+    o\x12\n\n\x06Pascal\x10c\x12\x07\n\x03PHP\x10\x13\x12\t\n\x05PLSQL\x10F\
+    \x12\x08\n\x04Perl\x10\r\x12\x0e\n\nPowerShell\x10C\x12\n\n\x06Prolog\
+    \x10G\x12\x0c\n\x08Protobuf\x10d\x12\n\n\x06Python\x10\x0f\x12\x05\n\x01\
+    R\x106\x12\n\n\x06Racket\x10\x0b\x12\x08\n\x04Raku\x10\x0e\x12\t\n\x05Ra\
+    zor\x10>\x12\t\n\x05Repro\x10f\x12\x08\n\x04ReST\x10U\x12\x08\n\x04Ruby\
+    \x10\x10\x12\x08\n\x04Rust\x10(\x12\x07\n\x03SAS\x10=\x12\x08\n\x04SCSS\
+    \x10\x1d\x12\x07\n\x03SML\x10+\x12\x07\n\x03SQL\x10E\x12\x08\n\x04Sass\
+    \x10\x1c\x12\t\n\x05Scala\x10\x05\x12\n\n\x06Scheme\x10\n\x12\x0f\n\x0bS\
+    hellScript\x10@\x12\x0b\n\x07Skylark\x10N\x12\t\n\x05Slang\x10k\x12\x0c\
+    \n\x08Solidity\x10_\x12\n\n\x06Svelte\x10j\x12\t\n\x05Swift\x10\x02\x12\
+    \x07\n\x03Tcl\x10e\x12\x08\n\x04TOML\x10I\x12\x07\n\x03TeX\x10R\x12\n\n\
+    \x06Thrift\x10g\x12\x0e\n\nTypeScript\x10\x17\x12\x13\n\x0fTypeScriptRea\
+    ct\x10^\x12\x0b\n\x07Verilog\x10h\x12\x08\n\x04VHDL\x10i\x12\x0f\n\x0bVi\
+    sualBasic\x10?\x12\x07\n\x03Vue\x10\x19\x12\x0b\n\x07Wolfram\x105\x12\
+    \x07\n\x03XML\x10\x1f\x12\x07\n\x03XSL\x10\x20\x12\x08\n\x04YAML\x10J\
+    \x12\x07\n\x03Zig\x10&BN\n\x12org.scip_code.scipB\tScipProtoP\x01Z+githu\
+    b.com/scip-code/scip/bindings/go/scip/J\x87\xd6\x02\n\x07\x12\x05\n\0\
+    \xc1\x07\x01\n\x82\x04\n\x01\x0c\x12\x03\n\0\x122\xf7\x03\x20An\x20index\
+    \x20contains\x20one\x20or\x20more\x20pieces\x20of\x20information\x20abou\
+    t\x20a\x20given\x20piece\x20of\n\x20source\x20code\x20or\x20software\x20\
+    artifact.\x20Complementary\x20information\x20can\x20be\x20merged\n\x20to\
+    gether\x20from\x20multiple\x20sources\x20to\x20provide\x20a\x20unified\
+    \x20code\x20intelligence\n\x20experience.\n\n\x20Programs\x20producing\
+    \x20a\x20file\x20of\x20this\x20format\x20is\x20an\x20\"indexer\"\x20and\
+    \x20may\x20operate\n\x20somewhere\x20on\x20the\x20spectrum\x20between\
+    \x20precision,\x20such\x20as\x20indexes\x20produced\x20by\n\x20compiler-\
+    backed\x20indexers,\x20and\x20heurstics,\x20such\x20as\x20indexes\x20pro\
+    duced\x20by\x20local\n\x20syntax-directed\x20analysis\x20for\x20scope\
+    \x20rules.\n\n\x08\n\x01\x02\x12\x03\x0c\0\r\n\x08\n\x01\x08\x12\x03\x0e\
+    \0B\n\t\n\x02\x08\x0b\x12\x03\x0e\0B\n\x08\n\x01\x08\x12\x03\x0f\0\"\n\t\
+    \n\x02\x08\n\x12\x03\x0f\0\"\n\x08\n\x01\x08\x12\x03\x10\0*\n\t\n\x02\
+    \x08\x08\x12\x03\x10\0*\n\x08\n\x01\x08\x12\x03\x11\0+\n\t\n\x02\x08\x01\
+    \x12\x03\x11\0+\n\xd0\x03\n\x02\x04\0\x12\x04\x19\0&\x01\x1a\xc3\x03\x20\
+    Index\x20represents\x20a\x20complete\x20SCIP\x20index\x20for\x20a\x20wor\
+    kspace\x20this\x20is\x20rooted\x20at\x20a\n\x20single\x20directory.\x20A\
+    n\x20Index\x20message\x20payload\x20can\x20have\x20a\x20large\x20memory\
+    \x20footprint\n\x20and\x20it's\x20therefore\x20recommended\x20to\x20emit\
+    \x20and\x20consume\x20an\x20Index\x20payload\x20one\x20field\n\x20value\
+    \x20at\x20a\x20time.\x20To\x20permit\x20streaming\x20consumption\x20of\
+    \x20an\x20Index\x20payload,\x20the\n\x20`metadata`\x20field\x20must\x20a\
+    ppear\x20at\x20the\x20start\x20of\x20the\x20stream\x20and\x20must\x20onl\
+    y\x20appear\n\x20once\x20in\x20the\x20stream.\x20Other\x20field\x20value\
+    s\x20may\x20appear\x20in\x20any\x20order.\n\n\n\n\x03\x04\0\x01\x12\x03\
+    \x19\x08\r\n\x0c\n\x05\x04\0\x02\0\x06\x12\x03\x1b\x02\n\n)\n\x04\x04\0\
+    \x02\0\x12\x03\x1b\x02\x18\x1a\x1c\x20Metadata\x20about\x20this\x20index\
+    .\n\n\x0c\n\x05\x04\0\x02\0\x01\x12\x03\x1b\x0b\x13\n\x0c\n\x05\x04\0\
+    \x02\0\x03\x12\x03\x1b\x16\x17\n\x0c\n\x05\x04\0\x02\x01\x04\x12\x03\x1d\
+    \x02\n\n3\n\x04\x04\0\x02\x01\x12\x03\x1d\x02\"\x1a&\x20Documents\x20tha\
+    t\x20belong\x20to\x20this\x20index.\n\n\x0c\n\x05\x04\0\x02\x01\x06\x12\
+    \x03\x1d\x0b\x13\n\x0c\n\x05\x04\0\x02\x01\x01\x12\x03\x1d\x14\x1d\n\x0c\
+    \n\x05\x04\0\x02\x01\x03\x12\x03\x1d\x20!\n\x0c\n\x05\x04\0\x02\x02\x04\
+    \x12\x03#\x02\n\n\xf6\x03\n\x04\x04\0\x02\x02\x12\x03#\x022\x1a\xe9\x02\
+    \x20(optional)\x20Symbols\x20that\x20are\x20referenced\x20from\x20this\
+    \x20index\x20but\x20are\x20defined\x20in\n\x20an\x20external\x20package\
+    \x20(a\x20separate\x20`Index`\x20message).\x20Leave\x20this\x20field\x20\
+    empty\n\x20if\x20you\x20assume\x20the\x20external\x20package\x20will\x20\
+    get\x20indexed\x20separately.\x20If\x20the\n\x20external\x20package\x20w\
+    on't\x20get\x20indexed\x20for\x20some\x20reason\x20then\x20you\x20can\
+    \x20use\x20this\n\x20field\x20to\x20provide\x20hover\x20documentation\
+    \x20for\x20those\x20external\x20symbols.\n\"}\x20IMPORTANT:\x20When\x20a\
+    dding\x20a\x20new\x20field\x20to\x20`Index`\x20here,\x20add\x20a\x20matc\
+    hing\n\x20function\x20in\x20`IndexVisitor`\x20and\x20update\x20`ParseStr\
+    eaming`.\n\n\x0c\n\x05\x04\0\x02\x02\x06\x12\x03#\x0b\x1c\n\x0c\n\x05\
+    \x04\0\x02\x02\x01\x12\x03#\x1d-\n\x0c\n\x05\x04\0\x02\x02\x03\x12\x03#0\
+    1\n\n\n\x02\x04\x01\x12\x04(\05\x01\n\n\n\x03\x04\x01\x01\x12\x03(\x08\
+    \x10\n\x0c\n\x05\x04\x01\x02\0\x06\x12\x03*\x02\x11\nN\n\x04\x04\x01\x02\
+    \0\x12\x03*\x02\x1e\x1aA\x20Which\x20version\x20of\x20this\x20protocol\
+    \x20was\x20used\x20to\x20generate\x20this\x20index?\n\n\x0c\n\x05\x04\
+    \x01\x02\0\x01\x12\x03*\x12\x19\n\x0c\n\x05\x04\x01\x02\0\x03\x12\x03*\
+    \x1c\x1d\n\x0c\n\x05\x04\x01\x02\x01\x06\x12\x03,\x02\n\nC\n\x04\x04\x01\
+    \x02\x01\x12\x03,\x02\x19\x1a6\x20Information\x20about\x20the\x20tool\
+    \x20that\x20produced\x20this\x20index.\n\n\x0c\n\x05\x04\x01\x02\x01\x01\
+    \x12\x03,\x0b\x14\n\x0c\n\x05\x04\x01\x02\x01\x03\x12\x03,\x17\x18\n\x0c\
+    \n\x05\x04\x01\x02\x02\x05\x12\x030\x02\x08\n\xa2\x01\n\x04\x04\x01\x02\
+    \x02\x12\x030\x02\x1a\x1a\x94\x01\x20URI-encoded\x20absolute\x20path\x20\
+    to\x20the\x20root\x20directory\x20of\x20this\x20index.\x20All\n\x20docum\
+    ents\x20in\x20this\x20index\x20must\x20appear\x20in\x20a\x20subdirectory\
+    \x20of\x20this\x20root\n\x20directory.\n\n\x0c\n\x05\x04\x01\x02\x02\x01\
+    \x12\x030\t\x15\n\x0c\n\x05\x04\x01\x02\x02\x03\x12\x030\x18\x19\n\x0c\n\
+    \x05\x04\x01\x02\x03\x06\x12\x034\x02\x0e\n\xe0\x01\n\x04\x04\x01\x02\
+    \x03\x12\x034\x02*\x1a\xd2\x01\x20Text\x20encoding\x20of\x20the\x20sourc\
+    e\x20files\x20on\x20disk\x20that\x20are\x20referenced\x20from\n\x20`Docu\
+    ment.relative_path`.\x20This\x20value\x20is\x20unrelated\x20to\x20the\
+    \x20`Document.text`\n\x20field,\x20which\x20is\x20a\x20Protobuf\x20strin\
+    g\x20and\x20hence\x20must\x20be\x20UTF-8\x20encoded.\n\n\x0c\n\x05\x04\
+    \x01\x02\x03\x01\x12\x034\x0f%\n\x0c\n\x05\x04\x01\x02\x03\x03\x12\x034(\
+    )\n\n\n\x02\x05\0\x12\x047\09\x01\n\n\n\x03\x05\0\x01\x12\x037\x05\x14\n\
+    \x0c\n\x05\x05\0\x02\0\x01\x12\x038\x02\x1c\n\x0b\n\x04\x05\0\x02\0\x12\
+    \x038\x02!\n\x0c\n\x05\x05\0\x02\0\x02\x12\x038\x1f\x20\n\n\n\x02\x05\
+    \x01\x12\x04;\0?\x01\n\n\n\x03\x05\x01\x01\x12\x03;\x05\x11\n\x0c\n\x05\
+    \x05\x01\x02\0\x01\x12\x03<\x02\x19\n\x0b\n\x04\x05\x01\x02\0\x12\x03<\
+    \x02\x1e\n\x0c\n\x05\x05\x01\x02\0\x02\x12\x03<\x1c\x1d\n\x0c\n\x05\x05\
+    \x01\x02\x01\x01\x12\x03=\x02\x06\n\x0b\n\x04\x05\x01\x02\x01\x12\x03=\
+    \x02\x0b\n\x0c\n\x05\x05\x01\x02\x01\x02\x12\x03=\t\n\n\x0c\n\x05\x05\
+    \x01\x02\x02\x01\x12\x03>\x02\x07\n\x0b\n\x04\x05\x01\x02\x02\x12\x03>\
+    \x02\x0c\n\x0c\n\x05\x05\x01\x02\x02\x02\x12\x03>\n\x0b\n\n\n\x02\x04\
+    \x02\x12\x04A\0H\x01\n\n\n\x03\x04\x02\x01\x12\x03A\x08\x10\n\x0c\n\x05\
+    \x04\x02\x02\0\x05\x12\x03C\x02\x08\n<\n\x04\x04\x02\x02\0\x12\x03C\x02\
+    \x12\x1a/\x20Name\x20of\x20the\x20indexer\x20that\x20produced\x20this\
+    \x20index.\n\n\x0c\n\x05\x04\x02\x02\0\x01\x12\x03C\t\r\n\x0c\n\x05\x04\
+    \x02\x02\0\x03\x12\x03C\x10\x11\n\x0c\n\x05\x04\x02\x02\x01\x05\x12\x03E\
+    \x02\x08\n?\n\x04\x04\x02\x02\x01\x12\x03E\x02\x15\x1a2\x20Version\x20of\
+    \x20the\x20indexer\x20that\x20produced\x20this\x20index.\n\n\x0c\n\x05\
+    \x04\x02\x02\x01\x01\x12\x03E\t\x10\n\x0c\n\x05\x04\x02\x02\x01\x03\x12\
+    \x03E\x13\x14\n\x0c\n\x05\x04\x02\x02\x02\x04\x12\x03G\x02\n\nL\n\x04\
+    \x04\x02\x02\x02\x12\x03G\x02\x20\x1a?\x20Command-line\x20arguments\x20t\
+    hat\x20were\x20used\x20to\x20invoke\x20this\x20indexer.\n\n\x0c\n\x05\
+    \x04\x02\x02\x02\x05\x12\x03G\x0b\x11\n\x0c\n\x05\x04\x02\x02\x02\x01\
+    \x12\x03G\x12\x1b\n\x0c\n\x05\x04\x02\x02\x02\x03\x12\x03G\x1e\x1f\nH\n\
+    \x02\x04\x03\x12\x04K\0v\x01\x1a<\x20Document\x20defines\x20the\x20metad\
+    ata\x20about\x20a\x20source\x20file\x20on\x20disk.\n\n\n\n\x03\x04\x03\
+    \x01\x12\x03K\x08\x10\n\x0c\n\x05\x04\x03\x02\0\x05\x12\x03P\x02\x08\n\
+    \xa5\x02\n\x04\x04\x03\x02\0\x12\x03P\x02\x16\x1a\x97\x02\x20The\x20stri\
+    ng\x20ID\x20for\x20the\x20programming\x20language\x20this\x20file\x20is\
+    \x20written\x20in.\n\x20The\x20`Language`\x20enum\x20contains\x20the\x20\
+    names\x20of\x20most\x20common\x20programming\x20languages.\n\x20This\x20\
+    field\x20is\x20typed\x20as\x20a\x20string\x20to\x20permit\x20any\x20prog\
+    ramming\x20language,\x20including\n\x20ones\x20that\x20are\x20not\x20spe\
+    cified\x20by\x20the\x20`Language`\x20enum.\n\n\x0c\n\x05\x04\x03\x02\0\
+    \x01\x12\x03P\t\x11\n\x0c\n\x05\x04\x03\x02\0\x03\x12\x03P\x14\x15\n\x0c\
+    \n\x05\x04\x03\x02\x01\x05\x12\x03Z\x02\x08\n\xb5\x03\n\x04\x04\x03\x02\
+    \x01\x12\x03Z\x02\x1b\x1a\xa7\x03\x20(Required)\x20Unique\x20path\x20to\
+    \x20the\x20text\x20document.\n\n\x201.\x20The\x20path\x20must\x20be\x20r\
+    elative\x20to\x20the\x20directory\x20supplied\x20in\x20the\x20associated\
+    \n\x20\x20\x20\x20`Metadata.project_root`.\n\x202.\x20The\x20path\x20mus\
+    t\x20not\x20begin\x20with\x20a\x20leading\x20'/'.\n\x203.\x20The\x20path\
+    \x20must\x20point\x20to\x20a\x20regular\x20file,\x20not\x20a\x20symbolic\
+    \x20link.\n\x204.\x20The\x20path\x20must\x20use\x20'/'\x20as\x20the\x20s\
+    eparator,\x20including\x20on\x20Windows.\n\x205.\x20The\x20path\x20must\
+    \x20be\x20canonical;\x20it\x20cannot\x20include\x20empty\x20components\
+    \x20('//'),\n\x20\x20\x20\x20or\x20'.'\x20or\x20'..'.\n\n\x0c\n\x05\x04\
+    \x03\x02\x01\x01\x12\x03Z\t\x16\n\x0c\n\x05\x04\x03\x02\x01\x03\x12\x03Z\
+    \x19\x1a\n\x0c\n\x05\x04\x03\x02\x02\x04\x12\x03\\\x02\n\n4\n\x04\x04\
+    \x03\x02\x02\x12\x03\\\x02&\x1a'\x20Occurrences\x20that\x20appear\x20in\
+    \x20this\x20file.\n\n\x0c\n\x05\x04\x03\x02\x02\x06\x12\x03\\\x0b\x15\n\
+    \x0c\n\x05\x04\x03\x02\x02\x01\x12\x03\\\x16!\n\x0c\n\x05\x04\x03\x02\
+    \x02\x03\x12\x03\\$%\n\x0c\n\x05\x04\x03\x02\x03\x04\x12\x03b\x02\n\n\
+    \xea\x01\n\x04\x04\x03\x02\x03\x12\x03b\x02)\x1a\xdc\x01\x20Symbols\x20t\
+    hat\x20are\x20\"defined\"\x20within\x20this\x20document.\n\n\x20This\x20\
+    should\x20include\x20symbols\x20which\x20technically\x20do\x20not\x20hav\
+    e\x20any\x20definition,\n\x20but\x20have\x20a\x20reference\x20and\x20are\
+    \x20defined\x20by\x20some\x20other\x20symbol\x20(see\n\x20Relationship.i\
+    s_definition).\n\n\x0c\n\x05\x04\x03\x02\x03\x06\x12\x03b\x0b\x1c\n\x0c\
+    \n\x05\x04\x03\x02\x03\x01\x12\x03b\x1d$\n\x0c\n\x05\x04\x03\x02\x03\x03\
+    \x12\x03b'(\n\x0c\n\x05\x04\x03\x02\x04\x05\x12\x03i\x02\x08\n\x80\x03\n\
+    \x04\x04\x03\x02\x04\x12\x03i\x02\x12\x1a\xf2\x02\x20(optional)\x20Text\
+    \x20contents\x20of\x20this\x20document.\x20Indexers\x20are\x20not\x20exp\
+    ected\x20to\n\x20include\x20the\x20text\x20by\x20default.\x20It's\x20pre\
+    ferable\x20that\x20clients\x20read\x20the\x20text\n\x20contents\x20from\
+    \x20the\x20file\x20system\x20by\x20resolving\x20the\x20absolute\x20path\
+    \x20from\x20joining\n\x20`Index.metadata.project_root`\x20and\x20`Docume\
+    nt.relative_path`.\x20This\x20field\n\x20can\x20be\x20useful\x20for\x20t\
+    esting\x20or\x20when\x20working\x20with\x20virtual/in-memory\x20document\
+    s.\n\n\x0c\n\x05\x04\x03\x02\x04\x01\x12\x03i\t\r\n\x0c\n\x05\x04\x03\
+    \x02\x04\x03\x12\x03i\x10\x11\n\x0c\n\x05\x04\x03\x02\x05\x06\x12\x03u\
+    \x02\x12\n\xe7\x03\n\x04\x04\x03\x02\x05\x12\x03u\x02)\x1a\xd9\x03\x20Sp\
+    ecifies\x20the\x20encoding\x20used\x20for\x20source\x20ranges\x20in\x20t\
+    his\x20Document.\n\n\x20Usually,\x20this\x20will\x20match\x20the\x20type\
+    \x20used\x20to\x20index\x20the\x20string\x20type\n\x20in\x20the\x20index\
+    er's\x20implementation\x20language\x20in\x20O(1)\x20time.\n\x20-\x20For\
+    \x20an\x20indexer\x20implemented\x20in\x20JVM/.NET\x20language\x20or\x20\
+    JavaScript/TypeScript,\n\x20\x20\x20use\x20UTF16CodeUnitOffsetFromLineSt\
+    art.\n\x20-\x20For\x20an\x20indexer\x20implemented\x20in\x20Python,\n\
+    \x20\x20\x20use\x20UTF32CodeUnitOffsetFromLineStart.\n\x20-\x20For\x20an\
+    \x20indexer\x20implemented\x20in\x20Go,\x20Rust\x20or\x20C++,\n\x20\x20\
+    \x20use\x20UTF8ByteOffsetFromLineStart.\n\n\x0c\n\x05\x04\x03\x02\x05\
+    \x01\x12\x03u\x13$\n\x0c\n\x05\x04\x03\x02\x05\x03\x12\x03u'(\nQ\n\x02\
+    \x05\x02\x12\x05y\0\x91\x01\x01\x1aD\x20Encoding\x20used\x20to\x20interp\
+    ret\x20the\x20'character'\x20value\x20in\x20source\x20ranges.\n\n\n\n\
+    \x03\x05\x02\x01\x12\x03y\x05\x15\n\x0c\n\x05\x05\x02\x02\0\x01\x12\x03|\
+    \x02\x1d\n\x93\x01\n\x04\x05\x02\x02\0\x12\x03|\x02\"\x1a\x85\x01\x20Def\
+    ault\x20value.\x20This\x20value\x20should\x20not\x20be\x20used\x20by\x20\
+    new\x20SCIP\x20indexers\n\x20so\x20that\x20a\x20consumer\x20can\x20proce\
+    ss\x20the\x20SCIP\x20index\x20without\x20ambiguity.\n\n\x0c\n\x05\x05\
+    \x02\x02\0\x02\x12\x03|\x20!\n\r\n\x05\x05\x02\x02\x01\x01\x12\x04\x83\
+    \x01\x02!\n\xf7\x01\n\x04\x05\x02\x02\x01\x12\x04\x83\x01\x02&\x1a\xe8\
+    \x01\x20The\x20'character'\x20value\x20is\x20interpreted\x20as\x20an\x20\
+    offset\x20in\x20terms\n\x20of\x20UTF-8\x20code\x20units\x20(i.e.\x20byte\
+    s).\n\n\x20Example:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\
+    \"\x20in\x20UTF-8,\x20the\x20bytes\x20are\n\x20[240,\x20159,\x20154,\x20\
+    128,\x2032,\x2087,\x20111,\x20111],\x20so\x20the\x20offset\x20for\x20'W'\
+    \n\x20would\x20be\x205.\n\n\r\n\x05\x05\x02\x02\x01\x02\x12\x04\x83\x01$\
+    %\n\r\n\x05\x05\x02\x02\x02\x01\x12\x04\x8a\x01\x02\"\n\x82\x02\n\x04\
+    \x05\x02\x02\x02\x12\x04\x8a\x01\x02'\x1a\xf3\x01\x20The\x20'character'\
+    \x20value\x20is\x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\
+    \x20of\x20UTF-16\x20code\x20units\x20(each\x20is\x202\x20bytes).\n\n\x20\
+    Example:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\
+    \x20UTF-16\x20code\x20units\x20are\n\x20['\\ud83d',\x20'\\ude80',\x20'\
+    \x20',\x20'W',\x20'o',\x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\n\
+    \x20would\x20be\x203.\n\n\r\n\x05\x05\x02\x02\x02\x02\x12\x04\x8a\x01%&\
+    \n\r\n\x05\x05\x02\x02\x03\x01\x12\x04\x90\x01\x02\"\n\xf5\x01\n\x04\x05\
+    \x02\x02\x03\x12\x04\x90\x01\x02'\x1a\xe6\x01\x20The\x20'character'\x20v\
+    alue\x20is\x20interpreted\x20as\x20an\x20offset\x20in\x20terms\n\x20of\
+    \x20UTF-32\x20code\x20units\x20(each\x20is\x204\x20bytes).\n\n\x20Exampl\
+    e:\x20For\x20the\x20string\x20\"\xf0\x9f\x9a\x80\x20Woo\",\x20the\x20UTF\
+    -32\x20code\x20units\x20are\n\x20['\xf0\x9f\x9a\x80',\x20'\x20',\x20'W',\
+    \x20'o',\x20'o'],\x20so\x20the\x20offset\x20for\x20'W'\x20would\x20be\
+    \x202.\n\n\r\n\x05\x05\x02\x02\x03\x02\x12\x04\x90\x01%&\n\xcc\x12\n\x02\
+    \x04\x04\x12\x06\xbd\x01\0\xc1\x01\x01\x1a\xbd\x12\x20Symbol\x20is\x20si\
+    milar\x20to\x20a\x20URI,\x20it\x20identifies\x20a\x20class,\x20method,\
+    \x20or\x20a\x20local\n\x20variable.\x20`SymbolInformation`\x20contains\
+    \x20rich\x20metadata\x20about\x20symbols\x20such\x20as\n\x20the\x20docst\
+    ring.\n\n\x20Symbol\x20has\x20a\x20standardized\x20string\x20representat\
+    ion,\x20which\x20can\x20be\x20used\n\x20interchangeably\x20with\x20`Symb\
+    ol`.\x20The\x20syntax\x20for\x20Symbol\x20is\x20the\x20following:\n\x20`\
+    ``\n\x20#\x20()+\x20stands\x20for\x20one\x20or\x20more\x20repetitions\
+    \x20of\x20\n\x20#\x20()?\x20stands\x20for\x20zero\x20or\x20one\x20\
+    occurrence\x20of\x20\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\
+    \x20\x20\x20\x20\x20\x20\x20::=\x20\x20'\x20'\x20\x20'\
+    \x20'\x20()+\x20|\x20'local\x20'\x20\n\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20\x20'\x20'\x20\x20'\x20'\x20\n\x20\x20\
+    \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20any\x20UT\
+    F-8,\x20escape\x20spaces\x20with\x20double\x20space.\x20Must\x20not\x20b\
+    e\x20empty\x20nor\x20start\x20with\x20'local'\n\x20\x20\x20\x20\
     \x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20::=\x20any\x20UTF-8,\x20esca\
     pe\x20spaces\x20with\x20double\x20space.\x20Use\x20the\x20placeholder\
     \x20'.'\x20to\x20indicate\x20an\x20empty\x20value\n\x20\
@@ -6732,7 +6738,7 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     \x02\x12\x04\xc0\x06\x10\x11\n\r\n\x05\x05\x06\x02\x02\x01\x12\x04\xc1\
     \x06\x02\x0c\n\x0c\n\x04\x05\x06\x02\x02\x12\x04\xc1\x06\x02\x11\n\r\n\
     \x05\x05\x06\x02\x02\x02\x12\x04\xc1\x06\x0f\x10\n\xd0\x03\n\x02\x05\x07\
-    \x12\x06\xca\x06\0\xc0\x07\x01\x1a\xc1\x03\x20Language\x20standardises\
+    \x12\x06\xca\x06\0\xc1\x07\x01\x1a\xc1\x03\x20Language\x20standardises\
     \x20names\x20of\x20common\x20programming\x20languages\x20that\x20can\x20\
     be\x20used\n\x20for\x20the\x20`Document.language`\x20field.\x20The\x20pr\
     imary\x20purpose\x20of\x20this\x20enum\x20is\x20to\n\x20prevent\x20a\x20\
@@ -6887,109 +6893,111 @@ static file_descriptor_proto_data: &'static [u8] = b"\
     \n\r\n\x05\x05\x07\x02@\x02\x12\x04\x8b\x07\x10\x12\n\r\n\x05\x05\x07\
     \x02A\x01\x12\x04\x8c\x07\x02\x0f\n\x0c\n\x04\x05\x07\x02A\x12\x04\x8c\
     \x07\x02\x15\n\r\n\x05\x05\x07\x02A\x02\x12\x04\x8c\x07\x12\x14\n\r\n\
-    \x05\x05\x07\x02B\x01\x12\x04\x8d\x07\x02\x08\n\x0c\n\x04\x05\x07\x02B\
-    \x12\x04\x8d\x07\x02\x0e\n\r\n\x05\x05\x07\x02B\x02\x12\x04\x8d\x07\x0b\
-    \r\n\r\n\x05\x05\x07\x02C\x01\x12\x04\x8e\x07\x02\x05\n\x0c\n\x04\x05\
-    \x07\x02C\x12\x04\x8e\x07\x02\x0b\n\r\n\x05\x05\x07\x02C\x02\x12\x04\x8e\
-    \x07\x08\n\n\r\n\x05\x05\x07\x02D\x01\x12\x04\x8f\x07\x02\x07\n\x0c\n\
-    \x04\x05\x07\x02D\x12\x04\x8f\x07\x02\r\n\r\n\x05\x05\x07\x02D\x02\x12\
-    \x04\x8f\x07\n\x0c\n\r\n\x05\x05\x07\x02E\x01\x12\x04\x90\x07\x02\x06\n\
-    \x0c\n\x04\x05\x07\x02E\x12\x04\x90\x07\x02\x0c\n\r\n\x05\x05\x07\x02E\
-    \x02\x12\x04\x90\x07\t\x0b\n\r\n\x05\x05\x07\x02F\x01\x12\x04\x91\x07\
-    \x02\x0c\n\x0c\n\x04\x05\x07\x02F\x12\x04\x91\x07\x02\x12\n\r\n\x05\x05\
-    \x07\x02F\x02\x12\x04\x91\x07\x0f\x11\n\r\n\x05\x05\x07\x02G\x01\x12\x04\
-    \x92\x07\x02\x08\n\x0c\n\x04\x05\x07\x02G\x12\x04\x92\x07\x02\x0e\n\r\n\
-    \x05\x05\x07\x02G\x02\x12\x04\x92\x07\x0b\r\n\r\n\x05\x05\x07\x02H\x01\
-    \x12\x04\x93\x07\x02\n\n\x0c\n\x04\x05\x07\x02H\x12\x04\x93\x07\x02\x11\
-    \n\r\n\x05\x05\x07\x02H\x02\x12\x04\x93\x07\r\x10\n\r\n\x05\x05\x07\x02I\
-    \x01\x12\x04\x94\x07\x02\x08\n\x0c\n\x04\x05\x07\x02I\x12\x04\x94\x07\
-    \x02\x0e\n\r\n\x05\x05\x07\x02I\x02\x12\x04\x94\x07\x0b\r\n\r\n\x05\x05\
-    \x07\x02J\x01\x12\x04\x95\x07\x02\x03\n\x0c\n\x04\x05\x07\x02J\x12\x04\
-    \x95\x07\x02\t\n\r\n\x05\x05\x07\x02J\x02\x12\x04\x95\x07\x06\x08\n\r\n\
-    \x05\x05\x07\x02K\x01\x12\x04\x96\x07\x02\x08\n\x0c\n\x04\x05\x07\x02K\
-    \x12\x04\x96\x07\x02\x0e\n\r\n\x05\x05\x07\x02K\x02\x12\x04\x96\x07\x0b\
-    \r\n\r\n\x05\x05\x07\x02L\x01\x12\x04\x97\x07\x02\x06\n\x0c\n\x04\x05\
-    \x07\x02L\x12\x04\x97\x07\x02\x0c\n\r\n\x05\x05\x07\x02L\x02\x12\x04\x97\
-    \x07\t\x0b\n\r\n\x05\x05\x07\x02M\x01\x12\x04\x98\x07\x02\x07\n\x0c\n\
-    \x04\x05\x07\x02M\x12\x04\x98\x07\x02\r\n\r\n\x05\x05\x07\x02M\x02\x12\
-    \x04\x98\x07\n\x0c\n\r\n\x05\x05\x07\x02N\x01\x12\x04\x99\x07\x02\x07\n1\
-    \n\x04\x05\x07\x02N\x12\x04\x99\x07\x02\x0e\"#\x20Internal\x20language\
-    \x20for\x20testing\x20SCIP\n\r\n\x05\x05\x07\x02N\x02\x12\x04\x99\x07\n\
-    \r\n\r\n\x05\x05\x07\x02O\x01\x12\x04\x9a\x07\x02\x06\n\x0c\n\x04\x05\
-    \x07\x02O\x12\x04\x9a\x07\x02\x0c\n\r\n\x05\x05\x07\x02O\x02\x12\x04\x9a\
-    \x07\t\x0b\n\r\n\x05\x05\x07\x02P\x01\x12\x04\x9b\x07\x02\x06\n\x0c\n\
-    \x04\x05\x07\x02P\x12\x04\x9b\x07\x02\x0c\n\r\n\x05\x05\x07\x02P\x02\x12\
-    \x04\x9b\x07\t\x0b\n\r\n\x05\x05\x07\x02Q\x01\x12\x04\x9c\x07\x02\x06\n\
-    \x0c\n\x04\x05\x07\x02Q\x12\x04\x9c\x07\x02\x0c\n\r\n\x05\x05\x07\x02Q\
-    \x02\x12\x04\x9c\x07\t\x0b\n\r\n\x05\x05\x07\x02R\x01\x12\x04\x9d\x07\
-    \x02\x05\n\x0c\n\x04\x05\x07\x02R\x12\x04\x9d\x07\x02\x0b\n\r\n\x05\x05\
-    \x07\x02R\x02\x12\x04\x9d\x07\x08\n\n\r\n\x05\x05\x07\x02S\x01\x12\x04\
-    \x9e\x07\x02\x06\n\x0c\n\x04\x05\x07\x02S\x12\x04\x9e\x07\x02\x0c\n\r\n\
-    \x05\x05\x07\x02S\x02\x12\x04\x9e\x07\t\x0b\n\r\n\x05\x05\x07\x02T\x01\
-    \x12\x04\x9f\x07\x02\x05\n\x0c\n\x04\x05\x07\x02T\x12\x04\x9f\x07\x02\
-    \x0b\n\r\n\x05\x05\x07\x02T\x02\x12\x04\x9f\x07\x08\n\n\r\n\x05\x05\x07\
-    \x02U\x01\x12\x04\xa0\x07\x02\x05\n\x0c\n\x04\x05\x07\x02U\x12\x04\xa0\
-    \x07\x02\x0b\n\r\n\x05\x05\x07\x02U\x02\x12\x04\xa0\x07\x08\n\n\r\n\x05\
-    \x05\x07\x02V\x01\x12\x04\xa1\x07\x02\x06\n\x0c\n\x04\x05\x07\x02V\x12\
-    \x04\xa1\x07\x02\x0c\n\r\n\x05\x05\x07\x02V\x02\x12\x04\xa1\x07\t\x0b\n\
-    \r\n\x05\x05\x07\x02W\x01\x12\x04\xa2\x07\x02\x07\n\x0c\n\x04\x05\x07\
-    \x02W\x12\x04\xa2\x07\x02\x0c\n\r\n\x05\x05\x07\x02W\x02\x12\x04\xa2\x07\
-    \n\x0b\n\r\n\x05\x05\x07\x02X\x01\x12\x04\xa3\x07\x02\x08\n\x0c\n\x04\
-    \x05\x07\x02X\x12\x04\xa3\x07\x02\x0e\n\r\n\x05\x05\x07\x02X\x02\x12\x04\
-    \xa3\x07\x0b\r\n\r\n\x05\x05\x07\x02Y\x01\x12\x04\xa4\x07\x02\r\n\x13\n\
-    \x04\x05\x07\x02Y\x12\x04\xa4\x07\x02\x13\"\x05\x20Bash\n\r\n\x05\x05\
-    \x07\x02Y\x02\x12\x04\xa4\x07\x10\x12\n\r\n\x05\x05\x07\x02Z\x01\x12\x04\
-    \xa5\x07\x02\t\n\x0c\n\x04\x05\x07\x02Z\x12\x04\xa5\x07\x02\x0f\n\r\n\
-    \x05\x05\x07\x02Z\x02\x12\x04\xa5\x07\x0c\x0e\n\r\n\x05\x05\x07\x02[\x01\
-    \x12\x04\xa6\x07\x02\x07\n\x0c\n\x04\x05\x07\x02[\x12\x04\xa6\x07\x02\
-    \x0e\n\r\n\x05\x05\x07\x02[\x02\x12\x04\xa6\x07\n\r\n\r\n\x05\x05\x07\
-    \x02\\\x01\x12\x04\xa7\x07\x02\n\n\x0c\n\x04\x05\x07\x02\\\x12\x04\xa7\
-    \x07\x02\x10\n\r\n\x05\x05\x07\x02\\\x02\x12\x04\xa7\x07\r\x0f\n\r\n\x05\
-    \x05\x07\x02]\x01\x12\x04\xa8\x07\x02\x08\n\x0c\n\x04\x05\x07\x02]\x12\
-    \x04\xa8\x07\x02\x0f\n\r\n\x05\x05\x07\x02]\x02\x12\x04\xa8\x07\x0b\x0e\
-    \n\r\n\x05\x05\x07\x02^\x01\x12\x04\xa9\x07\x02\x07\n\x0c\n\x04\x05\x07\
-    \x02^\x12\x04\xa9\x07\x02\x0c\n\r\n\x05\x05\x07\x02^\x02\x12\x04\xa9\x07\
-    \n\x0b\n\r\n\x05\x05\x07\x02_\x01\x12\x04\xaa\x07\x02\x05\n\x0c\n\x04\
-    \x05\x07\x02_\x12\x04\xaa\x07\x02\x0c\n\r\n\x05\x05\x07\x02_\x02\x12\x04\
-    \xaa\x07\x08\x0b\n\r\n\x05\x05\x07\x02`\x01\x12\x04\xab\x07\x02\x06\n\
-    \x0c\n\x04\x05\x07\x02`\x12\x04\xab\x07\x02\x0c\n\r\n\x05\x05\x07\x02`\
-    \x02\x12\x04\xab\x07\t\x0b\n\r\n\x05\x05\x07\x02a\x01\x12\x04\xac\x07\
-    \x02\x05\n\x0c\n\x04\x05\x07\x02a\x12\x04\xac\x07\x02\x0b\n\r\n\x05\x05\
-    \x07\x02a\x02\x12\x04\xac\x07\x08\n\n\r\n\x05\x05\x07\x02b\x01\x12\x04\
-    \xad\x07\x02\x08\n\x0c\n\x04\x05\x07\x02b\x12\x04\xad\x07\x02\x0f\n\r\n\
-    \x05\x05\x07\x02b\x02\x12\x04\xad\x07\x0b\x0e\n\r\n\x05\x05\x07\x02c\x01\
-    \x12\x04\xae\x07\x02\x0c\n\x0c\n\x04\x05\x07\x02c\x12\x04\xae\x07\x02\
-    \x12\n\r\n\x05\x05\x07\x02c\x02\x12\x04\xae\x07\x0f\x11\n\r\n\x05\x05\
-    \x07\x02d\x01\x12\x04\xaf\x07\x02\x11\n\x0c\n\x04\x05\x07\x02d\x12\x04\
-    \xaf\x07\x02\x17\n\r\n\x05\x05\x07\x02d\x02\x12\x04\xaf\x07\x14\x16\n\r\
-    \n\x05\x05\x07\x02e\x01\x12\x04\xb0\x07\x02\t\n\x0c\n\x04\x05\x07\x02e\
-    \x12\x04\xb0\x07\x02\x10\n\r\n\x05\x05\x07\x02e\x02\x12\x04\xb0\x07\x0c\
-    \x0f\n\r\n\x05\x05\x07\x02f\x01\x12\x04\xb1\x07\x02\x06\n\x0c\n\x04\x05\
-    \x07\x02f\x12\x04\xb1\x07\x02\r\n\r\n\x05\x05\x07\x02f\x02\x12\x04\xb1\
-    \x07\t\x0c\n\r\n\x05\x05\x07\x02g\x01\x12\x04\xb2\x07\x02\r\n\x0c\n\x04\
-    \x05\x07\x02g\x12\x04\xb2\x07\x02\x13\n\r\n\x05\x05\x07\x02g\x02\x12\x04\
-    \xb2\x07\x10\x12\n\r\n\x05\x05\x07\x02h\x01\x12\x04\xb3\x07\x02\x05\n\
-    \x0c\n\x04\x05\x07\x02h\x12\x04\xb3\x07\x02\x0b\n\r\n\x05\x05\x07\x02h\
-    \x02\x12\x04\xb3\x07\x08\n\n\r\n\x05\x05\x07\x02i\x01\x12\x04\xb4\x07\
-    \x02\t\n\x0c\n\x04\x05\x07\x02i\x12\x04\xb4\x07\x02\x0f\n\r\n\x05\x05\
-    \x07\x02i\x02\x12\x04\xb4\x07\x0c\x0e\n\r\n\x05\x05\x07\x02j\x01\x12\x04\
-    \xb5\x07\x02\x05\n\x0c\n\x04\x05\x07\x02j\x12\x04\xb5\x07\x02\x0b\n\r\n\
-    \x05\x05\x07\x02j\x02\x12\x04\xb5\x07\x08\n\n\r\n\x05\x05\x07\x02k\x01\
-    \x12\x04\xb6\x07\x02\x05\n\x0c\n\x04\x05\x07\x02k\x12\x04\xb6\x07\x02\
-    \x0b\n\r\n\x05\x05\x07\x02k\x02\x12\x04\xb6\x07\x08\n\n\r\n\x05\x05\x07\
-    \x02l\x01\x12\x04\xb7\x07\x02\x06\n\x0c\n\x04\x05\x07\x02l\x12\x04\xb7\
-    \x07\x02\x0c\n\r\n\x05\x05\x07\x02l\x02\x12\x04\xb7\x07\t\x0b\n\r\n\x05\
-    \x05\x07\x02m\x01\x12\x04\xb8\x07\x02\x05\n\x93\x03\n\x04\x05\x07\x02m\
-    \x12\x04\xb8\x07\x02\x0b\"\x84\x03\x20NextLanguage\x20=\x20111;\n\x20Ste\
-    ps\x20add\x20a\x20new\x20language:\n\x201.\x20Copy-paste\x20the\x20\"Nex\
-    tLanguage\x20=\x20N\"\x20line\x20above\n\x202.\x20Increment\x20\"NextLan\
-    guage\x20=\x20N\"\x20to\x20\"NextLanguage\x20=\x20N+1\"\n\x203.\x20Repla\
-    ce\x20\"NextLanguage\x20=\x20N\"\x20with\x20the\x20name\x20of\x20the\x20\
-    new\x20language.\n\x204.\x20Move\x20the\x20new\x20language\x20to\x20the\
-    \x20correct\x20line\x20above\x20using\x20alphabetical\x20order\n\x205.\
-    \x20(optional)\x20Add\x20a\x20brief\x20comment\x20behind\x20the\x20langu\
-    age\x20if\x20the\x20name\x20is\x20not\x20self-explanatory\n\n\r\n\x05\
-    \x05\x07\x02m\x02\x12\x04\xb8\x07\x08\nb\x06proto3\
+    \x05\x05\x07\x02B\x01\x12\x04\x8d\x07\x02\x06\n%\n\x04\x05\x07\x02B\x12\
+    \x04\x8d\x07\x02\r\"\x17\x20https://odin-lang.org/\n\r\n\x05\x05\x07\x02\
+    B\x02\x12\x04\x8d\x07\t\x0c\n\r\n\x05\x05\x07\x02C\x01\x12\x04\x8e\x07\
+    \x02\x08\n\x0c\n\x04\x05\x07\x02C\x12\x04\x8e\x07\x02\x0e\n\r\n\x05\x05\
+    \x07\x02C\x02\x12\x04\x8e\x07\x0b\r\n\r\n\x05\x05\x07\x02D\x01\x12\x04\
+    \x8f\x07\x02\x05\n\x0c\n\x04\x05\x07\x02D\x12\x04\x8f\x07\x02\x0b\n\r\n\
+    \x05\x05\x07\x02D\x02\x12\x04\x8f\x07\x08\n\n\r\n\x05\x05\x07\x02E\x01\
+    \x12\x04\x90\x07\x02\x07\n\x0c\n\x04\x05\x07\x02E\x12\x04\x90\x07\x02\r\
+    \n\r\n\x05\x05\x07\x02E\x02\x12\x04\x90\x07\n\x0c\n\r\n\x05\x05\x07\x02F\
+    \x01\x12\x04\x91\x07\x02\x06\n\x0c\n\x04\x05\x07\x02F\x12\x04\x91\x07\
+    \x02\x0c\n\r\n\x05\x05\x07\x02F\x02\x12\x04\x91\x07\t\x0b\n\r\n\x05\x05\
+    \x07\x02G\x01\x12\x04\x92\x07\x02\x0c\n\x0c\n\x04\x05\x07\x02G\x12\x04\
+    \x92\x07\x02\x12\n\r\n\x05\x05\x07\x02G\x02\x12\x04\x92\x07\x0f\x11\n\r\
+    \n\x05\x05\x07\x02H\x01\x12\x04\x93\x07\x02\x08\n\x0c\n\x04\x05\x07\x02H\
+    \x12\x04\x93\x07\x02\x0e\n\r\n\x05\x05\x07\x02H\x02\x12\x04\x93\x07\x0b\
+    \r\n\r\n\x05\x05\x07\x02I\x01\x12\x04\x94\x07\x02\n\n\x0c\n\x04\x05\x07\
+    \x02I\x12\x04\x94\x07\x02\x11\n\r\n\x05\x05\x07\x02I\x02\x12\x04\x94\x07\
+    \r\x10\n\r\n\x05\x05\x07\x02J\x01\x12\x04\x95\x07\x02\x08\n\x0c\n\x04\
+    \x05\x07\x02J\x12\x04\x95\x07\x02\x0e\n\r\n\x05\x05\x07\x02J\x02\x12\x04\
+    \x95\x07\x0b\r\n\r\n\x05\x05\x07\x02K\x01\x12\x04\x96\x07\x02\x03\n\x0c\
+    \n\x04\x05\x07\x02K\x12\x04\x96\x07\x02\t\n\r\n\x05\x05\x07\x02K\x02\x12\
+    \x04\x96\x07\x06\x08\n\r\n\x05\x05\x07\x02L\x01\x12\x04\x97\x07\x02\x08\
+    \n\x0c\n\x04\x05\x07\x02L\x12\x04\x97\x07\x02\x0e\n\r\n\x05\x05\x07\x02L\
+    \x02\x12\x04\x97\x07\x0b\r\n\r\n\x05\x05\x07\x02M\x01\x12\x04\x98\x07\
+    \x02\x06\n\x0c\n\x04\x05\x07\x02M\x12\x04\x98\x07\x02\x0c\n\r\n\x05\x05\
+    \x07\x02M\x02\x12\x04\x98\x07\t\x0b\n\r\n\x05\x05\x07\x02N\x01\x12\x04\
+    \x99\x07\x02\x07\n\x0c\n\x04\x05\x07\x02N\x12\x04\x99\x07\x02\r\n\r\n\
+    \x05\x05\x07\x02N\x02\x12\x04\x99\x07\n\x0c\n\r\n\x05\x05\x07\x02O\x01\
+    \x12\x04\x9a\x07\x02\x07\n1\n\x04\x05\x07\x02O\x12\x04\x9a\x07\x02\x0e\"\
+    #\x20Internal\x20language\x20for\x20testing\x20SCIP\n\r\n\x05\x05\x07\
+    \x02O\x02\x12\x04\x9a\x07\n\r\n\r\n\x05\x05\x07\x02P\x01\x12\x04\x9b\x07\
+    \x02\x06\n\x0c\n\x04\x05\x07\x02P\x12\x04\x9b\x07\x02\x0c\n\r\n\x05\x05\
+    \x07\x02P\x02\x12\x04\x9b\x07\t\x0b\n\r\n\x05\x05\x07\x02Q\x01\x12\x04\
+    \x9c\x07\x02\x06\n\x0c\n\x04\x05\x07\x02Q\x12\x04\x9c\x07\x02\x0c\n\r\n\
+    \x05\x05\x07\x02Q\x02\x12\x04\x9c\x07\t\x0b\n\r\n\x05\x05\x07\x02R\x01\
+    \x12\x04\x9d\x07\x02\x06\n\x0c\n\x04\x05\x07\x02R\x12\x04\x9d\x07\x02\
+    \x0c\n\r\n\x05\x05\x07\x02R\x02\x12\x04\x9d\x07\t\x0b\n\r\n\x05\x05\x07\
+    \x02S\x01\x12\x04\x9e\x07\x02\x05\n\x0c\n\x04\x05\x07\x02S\x12\x04\x9e\
+    \x07\x02\x0b\n\r\n\x05\x05\x07\x02S\x02\x12\x04\x9e\x07\x08\n\n\r\n\x05\
+    \x05\x07\x02T\x01\x12\x04\x9f\x07\x02\x06\n\x0c\n\x04\x05\x07\x02T\x12\
+    \x04\x9f\x07\x02\x0c\n\r\n\x05\x05\x07\x02T\x02\x12\x04\x9f\x07\t\x0b\n\
+    \r\n\x05\x05\x07\x02U\x01\x12\x04\xa0\x07\x02\x05\n\x0c\n\x04\x05\x07\
+    \x02U\x12\x04\xa0\x07\x02\x0b\n\r\n\x05\x05\x07\x02U\x02\x12\x04\xa0\x07\
+    \x08\n\n\r\n\x05\x05\x07\x02V\x01\x12\x04\xa1\x07\x02\x05\n\x0c\n\x04\
+    \x05\x07\x02V\x12\x04\xa1\x07\x02\x0b\n\r\n\x05\x05\x07\x02V\x02\x12\x04\
+    \xa1\x07\x08\n\n\r\n\x05\x05\x07\x02W\x01\x12\x04\xa2\x07\x02\x06\n\x0c\
+    \n\x04\x05\x07\x02W\x12\x04\xa2\x07\x02\x0c\n\r\n\x05\x05\x07\x02W\x02\
+    \x12\x04\xa2\x07\t\x0b\n\r\n\x05\x05\x07\x02X\x01\x12\x04\xa3\x07\x02\
+    \x07\n\x0c\n\x04\x05\x07\x02X\x12\x04\xa3\x07\x02\x0c\n\r\n\x05\x05\x07\
+    \x02X\x02\x12\x04\xa3\x07\n\x0b\n\r\n\x05\x05\x07\x02Y\x01\x12\x04\xa4\
+    \x07\x02\x08\n\x0c\n\x04\x05\x07\x02Y\x12\x04\xa4\x07\x02\x0e\n\r\n\x05\
+    \x05\x07\x02Y\x02\x12\x04\xa4\x07\x0b\r\n\r\n\x05\x05\x07\x02Z\x01\x12\
+    \x04\xa5\x07\x02\r\n\x13\n\x04\x05\x07\x02Z\x12\x04\xa5\x07\x02\x13\"\
+    \x05\x20Bash\n\r\n\x05\x05\x07\x02Z\x02\x12\x04\xa5\x07\x10\x12\n\r\n\
+    \x05\x05\x07\x02[\x01\x12\x04\xa6\x07\x02\t\n\x0c\n\x04\x05\x07\x02[\x12\
+    \x04\xa6\x07\x02\x0f\n\r\n\x05\x05\x07\x02[\x02\x12\x04\xa6\x07\x0c\x0e\
+    \n\r\n\x05\x05\x07\x02\\\x01\x12\x04\xa7\x07\x02\x07\n\x0c\n\x04\x05\x07\
+    \x02\\\x12\x04\xa7\x07\x02\x0e\n\r\n\x05\x05\x07\x02\\\x02\x12\x04\xa7\
+    \x07\n\r\n\r\n\x05\x05\x07\x02]\x01\x12\x04\xa8\x07\x02\n\n\x0c\n\x04\
+    \x05\x07\x02]\x12\x04\xa8\x07\x02\x10\n\r\n\x05\x05\x07\x02]\x02\x12\x04\
+    \xa8\x07\r\x0f\n\r\n\x05\x05\x07\x02^\x01\x12\x04\xa9\x07\x02\x08\n\x0c\
+    \n\x04\x05\x07\x02^\x12\x04\xa9\x07\x02\x0f\n\r\n\x05\x05\x07\x02^\x02\
+    \x12\x04\xa9\x07\x0b\x0e\n\r\n\x05\x05\x07\x02_\x01\x12\x04\xaa\x07\x02\
+    \x07\n\x0c\n\x04\x05\x07\x02_\x12\x04\xaa\x07\x02\x0c\n\r\n\x05\x05\x07\
+    \x02_\x02\x12\x04\xaa\x07\n\x0b\n\r\n\x05\x05\x07\x02`\x01\x12\x04\xab\
+    \x07\x02\x05\n\x0c\n\x04\x05\x07\x02`\x12\x04\xab\x07\x02\x0c\n\r\n\x05\
+    \x05\x07\x02`\x02\x12\x04\xab\x07\x08\x0b\n\r\n\x05\x05\x07\x02a\x01\x12\
+    \x04\xac\x07\x02\x06\n\x0c\n\x04\x05\x07\x02a\x12\x04\xac\x07\x02\x0c\n\
+    \r\n\x05\x05\x07\x02a\x02\x12\x04\xac\x07\t\x0b\n\r\n\x05\x05\x07\x02b\
+    \x01\x12\x04\xad\x07\x02\x05\n\x0c\n\x04\x05\x07\x02b\x12\x04\xad\x07\
+    \x02\x0b\n\r\n\x05\x05\x07\x02b\x02\x12\x04\xad\x07\x08\n\n\r\n\x05\x05\
+    \x07\x02c\x01\x12\x04\xae\x07\x02\x08\n\x0c\n\x04\x05\x07\x02c\x12\x04\
+    \xae\x07\x02\x0f\n\r\n\x05\x05\x07\x02c\x02\x12\x04\xae\x07\x0b\x0e\n\r\
+    \n\x05\x05\x07\x02d\x01\x12\x04\xaf\x07\x02\x0c\n\x0c\n\x04\x05\x07\x02d\
+    \x12\x04\xaf\x07\x02\x12\n\r\n\x05\x05\x07\x02d\x02\x12\x04\xaf\x07\x0f\
+    \x11\n\r\n\x05\x05\x07\x02e\x01\x12\x04\xb0\x07\x02\x11\n\x0c\n\x04\x05\
+    \x07\x02e\x12\x04\xb0\x07\x02\x17\n\r\n\x05\x05\x07\x02e\x02\x12\x04\xb0\
+    \x07\x14\x16\n\r\n\x05\x05\x07\x02f\x01\x12\x04\xb1\x07\x02\t\n\x0c\n\
+    \x04\x05\x07\x02f\x12\x04\xb1\x07\x02\x10\n\r\n\x05\x05\x07\x02f\x02\x12\
+    \x04\xb1\x07\x0c\x0f\n\r\n\x05\x05\x07\x02g\x01\x12\x04\xb2\x07\x02\x06\
+    \n\x0c\n\x04\x05\x07\x02g\x12\x04\xb2\x07\x02\r\n\r\n\x05\x05\x07\x02g\
+    \x02\x12\x04\xb2\x07\t\x0c\n\r\n\x05\x05\x07\x02h\x01\x12\x04\xb3\x07\
+    \x02\r\n\x0c\n\x04\x05\x07\x02h\x12\x04\xb3\x07\x02\x13\n\r\n\x05\x05\
+    \x07\x02h\x02\x12\x04\xb3\x07\x10\x12\n\r\n\x05\x05\x07\x02i\x01\x12\x04\
+    \xb4\x07\x02\x05\n\x0c\n\x04\x05\x07\x02i\x12\x04\xb4\x07\x02\x0b\n\r\n\
+    \x05\x05\x07\x02i\x02\x12\x04\xb4\x07\x08\n\n\r\n\x05\x05\x07\x02j\x01\
+    \x12\x04\xb5\x07\x02\t\n\x0c\n\x04\x05\x07\x02j\x12\x04\xb5\x07\x02\x0f\
+    \n\r\n\x05\x05\x07\x02j\x02\x12\x04\xb5\x07\x0c\x0e\n\r\n\x05\x05\x07\
+    \x02k\x01\x12\x04\xb6\x07\x02\x05\n\x0c\n\x04\x05\x07\x02k\x12\x04\xb6\
+    \x07\x02\x0b\n\r\n\x05\x05\x07\x02k\x02\x12\x04\xb6\x07\x08\n\n\r\n\x05\
+    \x05\x07\x02l\x01\x12\x04\xb7\x07\x02\x05\n\x0c\n\x04\x05\x07\x02l\x12\
+    \x04\xb7\x07\x02\x0b\n\r\n\x05\x05\x07\x02l\x02\x12\x04\xb7\x07\x08\n\n\
+    \r\n\x05\x05\x07\x02m\x01\x12\x04\xb8\x07\x02\x06\n\x0c\n\x04\x05\x07\
+    \x02m\x12\x04\xb8\x07\x02\x0c\n\r\n\x05\x05\x07\x02m\x02\x12\x04\xb8\x07\
+    \t\x0b\n\r\n\x05\x05\x07\x02n\x01\x12\x04\xb9\x07\x02\x05\n\x93\x03\n\
+    \x04\x05\x07\x02n\x12\x04\xb9\x07\x02\x0b\"\x84\x03\x20NextLanguage\x20=\
+    \x20112;\n\x20Steps\x20add\x20a\x20new\x20language:\n\x201.\x20Copy-past\
+    e\x20the\x20\"NextLanguage\x20=\x20N\"\x20line\x20above\n\x202.\x20Incre\
+    ment\x20\"NextLanguage\x20=\x20N\"\x20to\x20\"NextLanguage\x20=\x20N+1\"\
+    \n\x203.\x20Replace\x20\"NextLanguage\x20=\x20N\"\x20with\x20the\x20name\
+    \x20of\x20the\x20new\x20language.\n\x204.\x20Move\x20the\x20new\x20langu\
+    age\x20to\x20the\x20correct\x20line\x20above\x20using\x20alphabetical\
+    \x20order\n\x205.\x20(optional)\x20Add\x20a\x20brief\x20comment\x20behin\
+    d\x20the\x20language\x20if\x20the\x20name\x20is\x20not\x20self-explanato\
+    ry\n\n\r\n\x05\x05\x07\x02n\x02\x12\x04\xb9\x07\x08\nb\x06proto3\
 ";
 
 /// `FileDescriptorProto` object which was a source for this generated file
diff --git a/bindings/typescript/scip_pb.ts b/bindings/typescript/scip_pb.ts
index d0689e79..1e380183 100644
--- a/bindings/typescript/scip_pb.ts
+++ b/bindings/typescript/scip_pb.ts
@@ -20,7 +20,7 @@ import type { Message } from "@bufbuild/protobuf";
  * Describes the file scip.proto.
  */
 export const file_scip: GenFile = /*@__PURE__*/
-  fileDesc("CgpzY2lwLnByb3RvEgRzY2lwIn8KBUluZGV4EiAKCG1ldGFkYXRhGAEgASgLMg4uc2NpcC5NZXRhZGF0YRIhCglkb2N1bWVudHMYAiADKAsyDi5zY2lwLkRvY3VtZW50EjEKEGV4dGVybmFsX3N5bWJvbHMYAyADKAsyFy5zY2lwLlN5bWJvbEluZm9ybWF0aW9uIp8BCghNZXRhZGF0YRImCgd2ZXJzaW9uGAEgASgOMhUuc2NpcC5Qcm90b2NvbFZlcnNpb24SIQoJdG9vbF9pbmZvGAIgASgLMg4uc2NpcC5Ub29sSW5mbxIUCgxwcm9qZWN0X3Jvb3QYAyABKAkSMgoWdGV4dF9kb2N1bWVudF9lbmNvZGluZxgEIAEoDjISLnNjaXAuVGV4dEVuY29kaW5nIjwKCFRvb2xJbmZvEgwKBG5hbWUYASABKAkSDwoHdmVyc2lvbhgCIAEoCRIRCglhcmd1bWVudHMYAyADKAkixQEKCERvY3VtZW50EhAKCGxhbmd1YWdlGAQgASgJEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSJQoLb2NjdXJyZW5jZXMYAiADKAsyEC5zY2lwLk9jY3VycmVuY2USKAoHc3ltYm9scxgDIAMoCzIXLnNjaXAuU3ltYm9sSW5mb3JtYXRpb24SDAoEdGV4dBgFIAEoCRIxChFwb3NpdGlvbl9lbmNvZGluZxgGIAEoDjIWLnNjaXAuUG9zaXRpb25FbmNvZGluZyJfCgZTeW1ib2wSDgoGc2NoZW1lGAEgASgJEh4KB3BhY2thZ2UYAiABKAsyDS5zY2lwLlBhY2thZ2USJQoLZGVzY3JpcHRvcnMYAyADKAsyEC5zY2lwLkRlc2NyaXB0b3IiOQoHUGFja2FnZRIPCgdtYW5hZ2VyGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoCSKCAgoKRGVzY3JpcHRvchIMCgRuYW1lGAEgASgJEhUKDWRpc2FtYmlndWF0b3IYAiABKAkSJwoGc3VmZml4GAMgASgOMhcuc2NpcC5EZXNjcmlwdG9yLlN1ZmZpeCKlAQoGU3VmZml4EhUKEVVuc3BlY2lmaWVkU3VmZml4EAASDQoJTmFtZXNwYWNlEAESDwoHUGFja2FnZRABGgIIARIICgRUeXBlEAISCAoEVGVybRADEgoKBk1ldGhvZBAEEhEKDVR5cGVQYXJhbWV0ZXIQBRINCglQYXJhbWV0ZXIQBhIICgRNZXRhEAcSCQoFTG9jYWwQCBIJCgVNYWNybxAJGgIQASJkCglTaWduYXR1cmUSEAoIbGFuZ3VhZ2UYBCABKAkSDAoEdGV4dBgFIAEoCRIlCgtvY2N1cnJlbmNlcxgCIAMoCzIQLnNjaXAuT2NjdXJyZW5jZUoECAEQAkoECAMQBEoECAYQByLxCwoRU3ltYm9sSW5mb3JtYXRpb24SDgoGc3ltYm9sGAEgASgJEhUKDWRvY3VtZW50YXRpb24YAyADKAkSKQoNcmVsYXRpb25zaGlwcxgEIAMoCzISLnNjaXAuUmVsYXRpb25zaGlwEioKBGtpbmQYBSABKA4yHC5zY2lwLlN5bWJvbEluZm9ybWF0aW9uLktpbmQSFAoMZGlzcGxheV9uYW1lGAYgASgJEjAKF3NpZ25hdHVyZV9kb2N1bWVudGF0aW9uGAcgASgLMg8uc2NpcC5TaWduYXR1cmUSGAoQZW5jbG9zaW5nX3N5bWJvbBgIIAEoCSL7CQoES2luZBITCg9VbnNwZWNpZmllZEtpbmQQABISCg5BYnN0cmFjdE1ldGhvZBBCEgwKCEFjY2Vzc29yEEgSCQoFQXJyYXkQARINCglBc3NlcnRpb24QAhISCg5Bc3NvY2lhdGVkVHlwZRADEg0KCUF0dHJpYnV0ZRAEEgkKBUF4aW9tEAUSCwoHQm9vbGVhbhAGEgkKBUNsYXNzEAcSCwoHQ29uY2VwdBBWEgwKCENvbnN0YW50EAgSDwoLQ29uc3RydWN0b3IQCRIMCghDb250cmFjdBA+Eg4KCkRhdGFGYW1pbHkQChIMCghEZWxlZ2F0ZRBJEggKBEVudW0QCxIOCgpFbnVtTWVtYmVyEAwSCQoFRXJyb3IQPxIJCgVFdmVudBANEg0KCUV4dGVuc2lvbhBUEggKBEZhY3QQDhIJCgVGaWVsZBAPEggKBEZpbGUQEBIMCghGdW5jdGlvbhAREgoKBkdldHRlchASEgsKB0dyYW1tYXIQExIMCghJbnN0YW5jZRAUEg0KCUludGVyZmFjZRAVEgcKA0tleRAWEggKBExhbmcQFxIJCgVMZW1tYRAYEgsKB0xpYnJhcnkQQBIJCgVNYWNybxAZEgoKBk1ldGhvZBAaEg8KC01ldGhvZEFsaWFzEEoSEgoOTWV0aG9kUmVjZWl2ZXIQGxIXChNNZXRob2RTcGVjaWZpY2F0aW9uEEMSCwoHTWVzc2FnZRAcEgkKBU1peGluEFUSDAoITW9kaWZpZXIQQRIKCgZNb2R1bGUQHRINCglOYW1lc3BhY2UQHhIICgROdWxsEB8SCgoGTnVtYmVyECASCgoGT2JqZWN0ECESDAoIT3BlcmF0b3IQIhILCgdQYWNrYWdlECMSEQoNUGFja2FnZU9iamVjdBAkEg0KCVBhcmFtZXRlchAlEhIKDlBhcmFtZXRlckxhYmVsECYSCwoHUGF0dGVybhAnEg0KCVByZWRpY2F0ZRAoEgwKCFByb3BlcnR5ECkSDAoIUHJvdG9jb2wQKhISCg5Qcm90b2NvbE1ldGhvZBBEEhUKEVB1cmVWaXJ0dWFsTWV0aG9kEEUSDwoLUXVhc2lxdW90ZXIQKxIRCg1TZWxmUGFyYW1ldGVyECwSCgoGU2V0dGVyEC0SDQoJU2lnbmF0dXJlEC4SEgoOU2luZ2xldG9uQ2xhc3MQSxITCg9TaW5nbGV0b25NZXRob2QQTBIUChBTdGF0aWNEYXRhTWVtYmVyEE0SDwoLU3RhdGljRXZlbnQQThIPCgtTdGF0aWNGaWVsZBBPEhAKDFN0YXRpY01ldGhvZBBQEhIKDlN0YXRpY1Byb3BlcnR5EFESEgoOU3RhdGljVmFyaWFibGUQUhIKCgZTdHJpbmcQMBIKCgZTdHJ1Y3QQMRINCglTdWJzY3JpcHQQLxIKCgZUYWN0aWMQMhILCgdUaGVvcmVtEDMSEQoNVGhpc1BhcmFtZXRlchA0EgkKBVRyYWl0EDUSDwoLVHJhaXRNZXRob2QQRhIICgRUeXBlEDYSDQoJVHlwZUFsaWFzEDcSDQoJVHlwZUNsYXNzEDgSEwoPVHlwZUNsYXNzTWV0aG9kEEcSDgoKVHlwZUZhbWlseRA5EhEKDVR5cGVQYXJhbWV0ZXIQOhIJCgVVbmlvbhA7EgkKBVZhbHVlEDwSDAoIVmFyaWFibGUQPSKCAQoMUmVsYXRpb25zaGlwEg4KBnN5bWJvbBgBIAEoCRIUCgxpc19yZWZlcmVuY2UYAiABKAgSGQoRaXNfaW1wbGVtZW50YXRpb24YAyABKAgSGgoSaXNfdHlwZV9kZWZpbml0aW9uGAQgASgIEhUKDWlzX2RlZmluaXRpb24YBSABKAgiTwoPU2luZ2xlTGluZVJhbmdlEgwKBGxpbmUYASABKAUSFwoPc3RhcnRfY2hhcmFjdGVyGAIgASgFEhUKDWVuZF9jaGFyYWN0ZXIYAyABKAUiZgoOTXVsdGlMaW5lUmFuZ2USEgoKc3RhcnRfbGluZRgBIAEoBRIXCg9zdGFydF9jaGFyYWN0ZXIYAiABKAUSEAoIZW5kX2xpbmUYAyABKAUSFQoNZW5kX2NoYXJhY3RlchgEIAEoBSLYAwoKT2NjdXJyZW5jZRIRCgVyYW5nZRgBIAMoBUICGAESMgoRc2luZ2xlX2xpbmVfcmFuZ2UYCCABKAsyFS5zY2lwLlNpbmdsZUxpbmVSYW5nZUgAEjAKEG11bHRpX2xpbmVfcmFuZ2UYCSABKAsyFC5zY2lwLk11bHRpTGluZVJhbmdlSAASDgoGc3ltYm9sGAIgASgJEhQKDHN5bWJvbF9yb2xlcxgDIAEoBRIeChZvdmVycmlkZV9kb2N1bWVudGF0aW9uGAQgAygJEiUKC3N5bnRheF9raW5kGAUgASgOMhAuc2NpcC5TeW50YXhLaW5kEiUKC2RpYWdub3N0aWNzGAYgAygLMhAuc2NpcC5EaWFnbm9zdGljEhsKD2VuY2xvc2luZ19yYW5nZRgHIAMoBUICGAESPAobc2luZ2xlX2xpbmVfZW5jbG9zaW5nX3JhbmdlGAogASgLMhUuc2NpcC5TaW5nbGVMaW5lUmFuZ2VIARI6ChptdWx0aV9saW5lX2VuY2xvc2luZ19yYW5nZRgLIAEoCzIULnNjaXAuTXVsdGlMaW5lUmFuZ2VIAUINCgt0eXBlZF9yYW5nZUIXChV0eXBlZF9lbmNsb3NpbmdfcmFuZ2UigAEKCkRpYWdub3N0aWMSIAoIc2V2ZXJpdHkYASABKA4yDi5zY2lwLlNldmVyaXR5EgwKBGNvZGUYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIOCgZzb3VyY2UYBCABKAkSIQoEdGFncxgFIAMoDjITLnNjaXAuRGlhZ25vc3RpY1RhZyoxCg9Qcm90b2NvbFZlcnNpb24SHgoaVW5zcGVjaWZpZWRQcm90b2NvbFZlcnNpb24QACpACgxUZXh0RW5jb2RpbmcSGwoXVW5zcGVjaWZpZWRUZXh0RW5jb2RpbmcQABIICgRVVEY4EAESCQoFVVRGMTYQAiqkAQoQUG9zaXRpb25FbmNvZGluZxIfChtVbnNwZWNpZmllZFBvc2l0aW9uRW5jb2RpbmcQABIjCh9VVEY4Q29kZVVuaXRPZmZzZXRGcm9tTGluZVN0YXJ0EAESJAogVVRGMTZDb2RlVW5pdE9mZnNldEZyb21MaW5lU3RhcnQQAhIkCiBVVEYzMkNvZGVVbml0T2Zmc2V0RnJvbUxpbmVTdGFydBADKpQBCgpTeW1ib2xSb2xlEhkKFVVuc3BlY2lmaWVkU3ltYm9sUm9sZRAAEg4KCkRlZmluaXRpb24QARIKCgZJbXBvcnQQAhIPCgtXcml0ZUFjY2VzcxAEEg4KClJlYWRBY2Nlc3MQCBINCglHZW5lcmF0ZWQQEBIICgRUZXN0ECASFQoRRm9yd2FyZERlZmluaXRpb24QQCrqBgoKU3ludGF4S2luZBIZChVVbnNwZWNpZmllZFN5bnRheEtpbmQQABILCgdDb21tZW50EAESGAoUUHVuY3R1YXRpb25EZWxpbWl0ZXIQAhIWChJQdW5jdHVhdGlvbkJyYWNrZXQQAxILCgdLZXl3b3JkEAQSGQoRSWRlbnRpZmllcktleXdvcmQQBBoCCAESFgoSSWRlbnRpZmllck9wZXJhdG9yEAUSDgoKSWRlbnRpZmllchAGEhUKEUlkZW50aWZpZXJCdWlsdGluEAcSEgoOSWRlbnRpZmllck51bGwQCBIWChJJZGVudGlmaWVyQ29uc3RhbnQQCRIbChdJZGVudGlmaWVyTXV0YWJsZUdsb2JhbBAKEhcKE0lkZW50aWZpZXJQYXJhbWV0ZXIQCxITCg9JZGVudGlmaWVyTG9jYWwQDBIWChJJZGVudGlmaWVyU2hhZG93ZWQQDRIXChNJZGVudGlmaWVyTmFtZXNwYWNlEA4SGAoQSWRlbnRpZmllck1vZHVsZRAOGgIIARIWChJJZGVudGlmaWVyRnVuY3Rpb24QDxIgChxJZGVudGlmaWVyRnVuY3Rpb25EZWZpbml0aW9uEBASEwoPSWRlbnRpZmllck1hY3JvEBESHQoZSWRlbnRpZmllck1hY3JvRGVmaW5pdGlvbhASEhIKDklkZW50aWZpZXJUeXBlEBMSGQoVSWRlbnRpZmllckJ1aWx0aW5UeXBlEBQSFwoTSWRlbnRpZmllckF0dHJpYnV0ZRAVEg8KC1JlZ2V4RXNjYXBlEBYSEQoNUmVnZXhSZXBlYXRlZBAXEhEKDVJlZ2V4V2lsZGNhcmQQGBISCg5SZWdleERlbGltaXRlchAZEg0KCVJlZ2V4Sm9pbhAaEhEKDVN0cmluZ0xpdGVyYWwQGxIXChNTdHJpbmdMaXRlcmFsRXNjYXBlEBwSGAoUU3RyaW5nTGl0ZXJhbFNwZWNpYWwQHRIUChBTdHJpbmdMaXRlcmFsS2V5EB4SFAoQQ2hhcmFjdGVyTGl0ZXJhbBAfEhIKDk51bWVyaWNMaXRlcmFsECASEgoOQm9vbGVhbkxpdGVyYWwQIRIHCgNUYWcQIhIQCgxUYWdBdHRyaWJ1dGUQIxIQCgxUYWdEZWxpbWl0ZXIQJBoCEAEqVgoIU2V2ZXJpdHkSFwoTVW5zcGVjaWZpZWRTZXZlcml0eRAAEgkKBUVycm9yEAESCwoHV2FybmluZxACEg8KC0luZm9ybWF0aW9uEAMSCAoESGludBAEKk4KDURpYWdub3N0aWNUYWcSHAoYVW5zcGVjaWZpZWREaWFnbm9zdGljVGFnEAASDwoLVW5uZWNlc3NhcnkQARIOCgpEZXByZWNhdGVkEAIqmwoKCExhbmd1YWdlEhcKE1Vuc3BlY2lmaWVkTGFuZ3VhZ2UQABIICgRBQkFQEDwSCAoEQXBleBBgEgcKA0FQTBAxEgcKA0FkYRAnEggKBEFnZGEQLRIMCghBc2NpaURvYxBWEgwKCEFzc2VtYmx5EDoSBwoDQXdrEEISBwoDQmF0EEQSCgoGQmliVGVYEFESBQoBQxAiEgkKBUNPQk9MEDsSBwoDQ1BQECMSBwoDQ1NTEBoSCgoGQ1NoYXJwEAESCwoHQ2xvanVyZRAIEhAKDENvZmZlZXNjcmlwdBAVEg4KCkNvbW1vbkxpc3AQCRIHCgNDb3EQLxIICgRDVURBEGESCAoERGFydBADEgoKBkRlbHBoaRA5EggKBERpZmYQWBIOCgpEb2NrZXJmaWxlEFASCgoGRHlhbG9nEDISCgoGRWxpeGlyEBESCgoGRXJsYW5nEBISCgoGRlNoYXJwECoSCAoERmlzaBBBEggKBEZsb3cQGBILCgdGb3J0cmFuEDgSDgoKR2l0X0NvbW1pdBBbEg4KCkdpdF9Db25maWcQWRIOCgpHaXRfUmViYXNlEFwSBgoCR28QIRILCgdHcmFwaFFMEGISCgoGR3Jvb3Z5EAcSCAoESFRNTBAeEggKBEhhY2sQFBIOCgpIYW5kbGViYXJzEFoSCwoHSGFza2VsbBAsEgkKBUlkcmlzEC4SBwoDSW5pEEgSBQoBShAzEggKBEpTT04QSxIICgRKYXZhEAYSDgoKSmF2YVNjcmlwdBAWEhMKD0phdmFTY3JpcHRSZWFjdBBdEgsKB0pzb25uZXQQTBIJCgVKdWxpYRA3EgwKCEp1c3RmaWxlEG0SCgoGS290bGluEAQSCQoFTGFUZVgQUxIICgRMZWFuEDASCAoETGVzcxAbEgcKA0x1YRAMEggKBEx1YXUQbBIMCghNYWtlZmlsZRBPEgwKCE1hcmtkb3duEFQSCgoGTWF0bGFiEDQSCgoGTmlja2VsEG4SBwoDTml4EE0SCQoFT0NhbWwQKRIPCgtPYmplY3RpdmVfQxAkEhEKDU9iamVjdGl2ZV9DUFAQJRIKCgZQYXNjYWwQYxIHCgNQSFAQExIJCgVQTFNRTBBGEggKBFBlcmwQDRIOCgpQb3dlclNoZWxsEEMSCgoGUHJvbG9nEEcSDAoIUHJvdG9idWYQZBIKCgZQeXRob24QDxIFCgFSEDYSCgoGUmFja2V0EAsSCAoEUmFrdRAOEgkKBVJhem9yED4SCQoFUmVwcm8QZhIICgRSZVNUEFUSCAoEUnVieRAQEggKBFJ1c3QQKBIHCgNTQVMQPRIICgRTQ1NTEB0SBwoDU01MECsSBwoDU1FMEEUSCAoEU2FzcxAcEgkKBVNjYWxhEAUSCgoGU2NoZW1lEAoSDwoLU2hlbGxTY3JpcHQQQBILCgdTa3lsYXJrEE4SCQoFU2xhbmcQaxIMCghTb2xpZGl0eRBfEgoKBlN2ZWx0ZRBqEgkKBVN3aWZ0EAISBwoDVGNsEGUSCAoEVE9NTBBJEgcKA1RlWBBSEgoKBlRocmlmdBBnEg4KClR5cGVTY3JpcHQQFxITCg9UeXBlU2NyaXB0UmVhY3QQXhILCgdWZXJpbG9nEGgSCAoEVkhETBBpEg8KC1Zpc3VhbEJhc2ljED8SBwoDVnVlEBkSCwoHV29sZnJhbRA1EgcKA1hNTBAfEgcKA1hTTBAgEggKBFlBTUwQShIHCgNaaWcQJkJOChJvcmcuc2NpcF9jb2RlLnNjaXBCCVNjaXBQcm90b1ABWitnaXRodWIuY29tL3NjaXAtY29kZS9zY2lwL2JpbmRpbmdzL2dvL3NjaXAvYgZwcm90bzM");
+  fileDesc("CgpzY2lwLnByb3RvEgRzY2lwIn8KBUluZGV4EiAKCG1ldGFkYXRhGAEgASgLMg4uc2NpcC5NZXRhZGF0YRIhCglkb2N1bWVudHMYAiADKAsyDi5zY2lwLkRvY3VtZW50EjEKEGV4dGVybmFsX3N5bWJvbHMYAyADKAsyFy5zY2lwLlN5bWJvbEluZm9ybWF0aW9uIp8BCghNZXRhZGF0YRImCgd2ZXJzaW9uGAEgASgOMhUuc2NpcC5Qcm90b2NvbFZlcnNpb24SIQoJdG9vbF9pbmZvGAIgASgLMg4uc2NpcC5Ub29sSW5mbxIUCgxwcm9qZWN0X3Jvb3QYAyABKAkSMgoWdGV4dF9kb2N1bWVudF9lbmNvZGluZxgEIAEoDjISLnNjaXAuVGV4dEVuY29kaW5nIjwKCFRvb2xJbmZvEgwKBG5hbWUYASABKAkSDwoHdmVyc2lvbhgCIAEoCRIRCglhcmd1bWVudHMYAyADKAkixQEKCERvY3VtZW50EhAKCGxhbmd1YWdlGAQgASgJEhUKDXJlbGF0aXZlX3BhdGgYASABKAkSJQoLb2NjdXJyZW5jZXMYAiADKAsyEC5zY2lwLk9jY3VycmVuY2USKAoHc3ltYm9scxgDIAMoCzIXLnNjaXAuU3ltYm9sSW5mb3JtYXRpb24SDAoEdGV4dBgFIAEoCRIxChFwb3NpdGlvbl9lbmNvZGluZxgGIAEoDjIWLnNjaXAuUG9zaXRpb25FbmNvZGluZyJfCgZTeW1ib2wSDgoGc2NoZW1lGAEgASgJEh4KB3BhY2thZ2UYAiABKAsyDS5zY2lwLlBhY2thZ2USJQoLZGVzY3JpcHRvcnMYAyADKAsyEC5zY2lwLkRlc2NyaXB0b3IiOQoHUGFja2FnZRIPCgdtYW5hZ2VyGAEgASgJEgwKBG5hbWUYAiABKAkSDwoHdmVyc2lvbhgDIAEoCSKCAgoKRGVzY3JpcHRvchIMCgRuYW1lGAEgASgJEhUKDWRpc2FtYmlndWF0b3IYAiABKAkSJwoGc3VmZml4GAMgASgOMhcuc2NpcC5EZXNjcmlwdG9yLlN1ZmZpeCKlAQoGU3VmZml4EhUKEVVuc3BlY2lmaWVkU3VmZml4EAASDQoJTmFtZXNwYWNlEAESDwoHUGFja2FnZRABGgIIARIICgRUeXBlEAISCAoEVGVybRADEgoKBk1ldGhvZBAEEhEKDVR5cGVQYXJhbWV0ZXIQBRINCglQYXJhbWV0ZXIQBhIICgRNZXRhEAcSCQoFTG9jYWwQCBIJCgVNYWNybxAJGgIQASJkCglTaWduYXR1cmUSEAoIbGFuZ3VhZ2UYBCABKAkSDAoEdGV4dBgFIAEoCRIlCgtvY2N1cnJlbmNlcxgCIAMoCzIQLnNjaXAuT2NjdXJyZW5jZUoECAEQAkoECAMQBEoECAYQByLxCwoRU3ltYm9sSW5mb3JtYXRpb24SDgoGc3ltYm9sGAEgASgJEhUKDWRvY3VtZW50YXRpb24YAyADKAkSKQoNcmVsYXRpb25zaGlwcxgEIAMoCzISLnNjaXAuUmVsYXRpb25zaGlwEioKBGtpbmQYBSABKA4yHC5zY2lwLlN5bWJvbEluZm9ybWF0aW9uLktpbmQSFAoMZGlzcGxheV9uYW1lGAYgASgJEjAKF3NpZ25hdHVyZV9kb2N1bWVudGF0aW9uGAcgASgLMg8uc2NpcC5TaWduYXR1cmUSGAoQZW5jbG9zaW5nX3N5bWJvbBgIIAEoCSL7CQoES2luZBITCg9VbnNwZWNpZmllZEtpbmQQABISCg5BYnN0cmFjdE1ldGhvZBBCEgwKCEFjY2Vzc29yEEgSCQoFQXJyYXkQARINCglBc3NlcnRpb24QAhISCg5Bc3NvY2lhdGVkVHlwZRADEg0KCUF0dHJpYnV0ZRAEEgkKBUF4aW9tEAUSCwoHQm9vbGVhbhAGEgkKBUNsYXNzEAcSCwoHQ29uY2VwdBBWEgwKCENvbnN0YW50EAgSDwoLQ29uc3RydWN0b3IQCRIMCghDb250cmFjdBA+Eg4KCkRhdGFGYW1pbHkQChIMCghEZWxlZ2F0ZRBJEggKBEVudW0QCxIOCgpFbnVtTWVtYmVyEAwSCQoFRXJyb3IQPxIJCgVFdmVudBANEg0KCUV4dGVuc2lvbhBUEggKBEZhY3QQDhIJCgVGaWVsZBAPEggKBEZpbGUQEBIMCghGdW5jdGlvbhAREgoKBkdldHRlchASEgsKB0dyYW1tYXIQExIMCghJbnN0YW5jZRAUEg0KCUludGVyZmFjZRAVEgcKA0tleRAWEggKBExhbmcQFxIJCgVMZW1tYRAYEgsKB0xpYnJhcnkQQBIJCgVNYWNybxAZEgoKBk1ldGhvZBAaEg8KC01ldGhvZEFsaWFzEEoSEgoOTWV0aG9kUmVjZWl2ZXIQGxIXChNNZXRob2RTcGVjaWZpY2F0aW9uEEMSCwoHTWVzc2FnZRAcEgkKBU1peGluEFUSDAoITW9kaWZpZXIQQRIKCgZNb2R1bGUQHRINCglOYW1lc3BhY2UQHhIICgROdWxsEB8SCgoGTnVtYmVyECASCgoGT2JqZWN0ECESDAoIT3BlcmF0b3IQIhILCgdQYWNrYWdlECMSEQoNUGFja2FnZU9iamVjdBAkEg0KCVBhcmFtZXRlchAlEhIKDlBhcmFtZXRlckxhYmVsECYSCwoHUGF0dGVybhAnEg0KCVByZWRpY2F0ZRAoEgwKCFByb3BlcnR5ECkSDAoIUHJvdG9jb2wQKhISCg5Qcm90b2NvbE1ldGhvZBBEEhUKEVB1cmVWaXJ0dWFsTWV0aG9kEEUSDwoLUXVhc2lxdW90ZXIQKxIRCg1TZWxmUGFyYW1ldGVyECwSCgoGU2V0dGVyEC0SDQoJU2lnbmF0dXJlEC4SEgoOU2luZ2xldG9uQ2xhc3MQSxITCg9TaW5nbGV0b25NZXRob2QQTBIUChBTdGF0aWNEYXRhTWVtYmVyEE0SDwoLU3RhdGljRXZlbnQQThIPCgtTdGF0aWNGaWVsZBBPEhAKDFN0YXRpY01ldGhvZBBQEhIKDlN0YXRpY1Byb3BlcnR5EFESEgoOU3RhdGljVmFyaWFibGUQUhIKCgZTdHJpbmcQMBIKCgZTdHJ1Y3QQMRINCglTdWJzY3JpcHQQLxIKCgZUYWN0aWMQMhILCgdUaGVvcmVtEDMSEQoNVGhpc1BhcmFtZXRlchA0EgkKBVRyYWl0EDUSDwoLVHJhaXRNZXRob2QQRhIICgRUeXBlEDYSDQoJVHlwZUFsaWFzEDcSDQoJVHlwZUNsYXNzEDgSEwoPVHlwZUNsYXNzTWV0aG9kEEcSDgoKVHlwZUZhbWlseRA5EhEKDVR5cGVQYXJhbWV0ZXIQOhIJCgVVbmlvbhA7EgkKBVZhbHVlEDwSDAoIVmFyaWFibGUQPSKCAQoMUmVsYXRpb25zaGlwEg4KBnN5bWJvbBgBIAEoCRIUCgxpc19yZWZlcmVuY2UYAiABKAgSGQoRaXNfaW1wbGVtZW50YXRpb24YAyABKAgSGgoSaXNfdHlwZV9kZWZpbml0aW9uGAQgASgIEhUKDWlzX2RlZmluaXRpb24YBSABKAgiTwoPU2luZ2xlTGluZVJhbmdlEgwKBGxpbmUYASABKAUSFwoPc3RhcnRfY2hhcmFjdGVyGAIgASgFEhUKDWVuZF9jaGFyYWN0ZXIYAyABKAUiZgoOTXVsdGlMaW5lUmFuZ2USEgoKc3RhcnRfbGluZRgBIAEoBRIXCg9zdGFydF9jaGFyYWN0ZXIYAiABKAUSEAoIZW5kX2xpbmUYAyABKAUSFQoNZW5kX2NoYXJhY3RlchgEIAEoBSLYAwoKT2NjdXJyZW5jZRIRCgVyYW5nZRgBIAMoBUICGAESMgoRc2luZ2xlX2xpbmVfcmFuZ2UYCCABKAsyFS5zY2lwLlNpbmdsZUxpbmVSYW5nZUgAEjAKEG11bHRpX2xpbmVfcmFuZ2UYCSABKAsyFC5zY2lwLk11bHRpTGluZVJhbmdlSAASDgoGc3ltYm9sGAIgASgJEhQKDHN5bWJvbF9yb2xlcxgDIAEoBRIeChZvdmVycmlkZV9kb2N1bWVudGF0aW9uGAQgAygJEiUKC3N5bnRheF9raW5kGAUgASgOMhAuc2NpcC5TeW50YXhLaW5kEiUKC2RpYWdub3N0aWNzGAYgAygLMhAuc2NpcC5EaWFnbm9zdGljEhsKD2VuY2xvc2luZ19yYW5nZRgHIAMoBUICGAESPAobc2luZ2xlX2xpbmVfZW5jbG9zaW5nX3JhbmdlGAogASgLMhUuc2NpcC5TaW5nbGVMaW5lUmFuZ2VIARI6ChptdWx0aV9saW5lX2VuY2xvc2luZ19yYW5nZRgLIAEoCzIULnNjaXAuTXVsdGlMaW5lUmFuZ2VIAUINCgt0eXBlZF9yYW5nZUIXChV0eXBlZF9lbmNsb3NpbmdfcmFuZ2UigAEKCkRpYWdub3N0aWMSIAoIc2V2ZXJpdHkYASABKA4yDi5zY2lwLlNldmVyaXR5EgwKBGNvZGUYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIOCgZzb3VyY2UYBCABKAkSIQoEdGFncxgFIAMoDjITLnNjaXAuRGlhZ25vc3RpY1RhZyoxCg9Qcm90b2NvbFZlcnNpb24SHgoaVW5zcGVjaWZpZWRQcm90b2NvbFZlcnNpb24QACpACgxUZXh0RW5jb2RpbmcSGwoXVW5zcGVjaWZpZWRUZXh0RW5jb2RpbmcQABIICgRVVEY4EAESCQoFVVRGMTYQAiqkAQoQUG9zaXRpb25FbmNvZGluZxIfChtVbnNwZWNpZmllZFBvc2l0aW9uRW5jb2RpbmcQABIjCh9VVEY4Q29kZVVuaXRPZmZzZXRGcm9tTGluZVN0YXJ0EAESJAogVVRGMTZDb2RlVW5pdE9mZnNldEZyb21MaW5lU3RhcnQQAhIkCiBVVEYzMkNvZGVVbml0T2Zmc2V0RnJvbUxpbmVTdGFydBADKpQBCgpTeW1ib2xSb2xlEhkKFVVuc3BlY2lmaWVkU3ltYm9sUm9sZRAAEg4KCkRlZmluaXRpb24QARIKCgZJbXBvcnQQAhIPCgtXcml0ZUFjY2VzcxAEEg4KClJlYWRBY2Nlc3MQCBINCglHZW5lcmF0ZWQQEBIICgRUZXN0ECASFQoRRm9yd2FyZERlZmluaXRpb24QQCrqBgoKU3ludGF4S2luZBIZChVVbnNwZWNpZmllZFN5bnRheEtpbmQQABILCgdDb21tZW50EAESGAoUUHVuY3R1YXRpb25EZWxpbWl0ZXIQAhIWChJQdW5jdHVhdGlvbkJyYWNrZXQQAxILCgdLZXl3b3JkEAQSGQoRSWRlbnRpZmllcktleXdvcmQQBBoCCAESFgoSSWRlbnRpZmllck9wZXJhdG9yEAUSDgoKSWRlbnRpZmllchAGEhUKEUlkZW50aWZpZXJCdWlsdGluEAcSEgoOSWRlbnRpZmllck51bGwQCBIWChJJZGVudGlmaWVyQ29uc3RhbnQQCRIbChdJZGVudGlmaWVyTXV0YWJsZUdsb2JhbBAKEhcKE0lkZW50aWZpZXJQYXJhbWV0ZXIQCxITCg9JZGVudGlmaWVyTG9jYWwQDBIWChJJZGVudGlmaWVyU2hhZG93ZWQQDRIXChNJZGVudGlmaWVyTmFtZXNwYWNlEA4SGAoQSWRlbnRpZmllck1vZHVsZRAOGgIIARIWChJJZGVudGlmaWVyRnVuY3Rpb24QDxIgChxJZGVudGlmaWVyRnVuY3Rpb25EZWZpbml0aW9uEBASEwoPSWRlbnRpZmllck1hY3JvEBESHQoZSWRlbnRpZmllck1hY3JvRGVmaW5pdGlvbhASEhIKDklkZW50aWZpZXJUeXBlEBMSGQoVSWRlbnRpZmllckJ1aWx0aW5UeXBlEBQSFwoTSWRlbnRpZmllckF0dHJpYnV0ZRAVEg8KC1JlZ2V4RXNjYXBlEBYSEQoNUmVnZXhSZXBlYXRlZBAXEhEKDVJlZ2V4V2lsZGNhcmQQGBISCg5SZWdleERlbGltaXRlchAZEg0KCVJlZ2V4Sm9pbhAaEhEKDVN0cmluZ0xpdGVyYWwQGxIXChNTdHJpbmdMaXRlcmFsRXNjYXBlEBwSGAoUU3RyaW5nTGl0ZXJhbFNwZWNpYWwQHRIUChBTdHJpbmdMaXRlcmFsS2V5EB4SFAoQQ2hhcmFjdGVyTGl0ZXJhbBAfEhIKDk51bWVyaWNMaXRlcmFsECASEgoOQm9vbGVhbkxpdGVyYWwQIRIHCgNUYWcQIhIQCgxUYWdBdHRyaWJ1dGUQIxIQCgxUYWdEZWxpbWl0ZXIQJBoCEAEqVgoIU2V2ZXJpdHkSFwoTVW5zcGVjaWZpZWRTZXZlcml0eRAAEgkKBUVycm9yEAESCwoHV2FybmluZxACEg8KC0luZm9ybWF0aW9uEAMSCAoESGludBAEKk4KDURpYWdub3N0aWNUYWcSHAoYVW5zcGVjaWZpZWREaWFnbm9zdGljVGFnEAASDwoLVW5uZWNlc3NhcnkQARIOCgpEZXByZWNhdGVkEAIqpQoKCExhbmd1YWdlEhcKE1Vuc3BlY2lmaWVkTGFuZ3VhZ2UQABIICgRBQkFQEDwSCAoEQXBleBBgEgcKA0FQTBAxEgcKA0FkYRAnEggKBEFnZGEQLRIMCghBc2NpaURvYxBWEgwKCEFzc2VtYmx5EDoSBwoDQXdrEEISBwoDQmF0EEQSCgoGQmliVGVYEFESBQoBQxAiEgkKBUNPQk9MEDsSBwoDQ1BQECMSBwoDQ1NTEBoSCgoGQ1NoYXJwEAESCwoHQ2xvanVyZRAIEhAKDENvZmZlZXNjcmlwdBAVEg4KCkNvbW1vbkxpc3AQCRIHCgNDb3EQLxIICgRDVURBEGESCAoERGFydBADEgoKBkRlbHBoaRA5EggKBERpZmYQWBIOCgpEb2NrZXJmaWxlEFASCgoGRHlhbG9nEDISCgoGRWxpeGlyEBESCgoGRXJsYW5nEBISCgoGRlNoYXJwECoSCAoERmlzaBBBEggKBEZsb3cQGBILCgdGb3J0cmFuEDgSDgoKR2l0X0NvbW1pdBBbEg4KCkdpdF9Db25maWcQWRIOCgpHaXRfUmViYXNlEFwSBgoCR28QIRILCgdHcmFwaFFMEGISCgoGR3Jvb3Z5EAcSCAoESFRNTBAeEggKBEhhY2sQFBIOCgpIYW5kbGViYXJzEFoSCwoHSGFza2VsbBAsEgkKBUlkcmlzEC4SBwoDSW5pEEgSBQoBShAzEggKBEpTT04QSxIICgRKYXZhEAYSDgoKSmF2YVNjcmlwdBAWEhMKD0phdmFTY3JpcHRSZWFjdBBdEgsKB0pzb25uZXQQTBIJCgVKdWxpYRA3EgwKCEp1c3RmaWxlEG0SCgoGS290bGluEAQSCQoFTGFUZVgQUxIICgRMZWFuEDASCAoETGVzcxAbEgcKA0x1YRAMEggKBEx1YXUQbBIMCghNYWtlZmlsZRBPEgwKCE1hcmtkb3duEFQSCgoGTWF0bGFiEDQSCgoGTmlja2VsEG4SBwoDTml4EE0SCQoFT0NhbWwQKRIPCgtPYmplY3RpdmVfQxAkEhEKDU9iamVjdGl2ZV9DUFAQJRIICgRPZGluEG8SCgoGUGFzY2FsEGMSBwoDUEhQEBMSCQoFUExTUUwQRhIICgRQZXJsEA0SDgoKUG93ZXJTaGVsbBBDEgoKBlByb2xvZxBHEgwKCFByb3RvYnVmEGQSCgoGUHl0aG9uEA8SBQoBUhA2EgoKBlJhY2tldBALEggKBFJha3UQDhIJCgVSYXpvchA+EgkKBVJlcHJvEGYSCAoEUmVTVBBVEggKBFJ1YnkQEBIICgRSdXN0ECgSBwoDU0FTED0SCAoEU0NTUxAdEgcKA1NNTBArEgcKA1NRTBBFEggKBFNhc3MQHBIJCgVTY2FsYRAFEgoKBlNjaGVtZRAKEg8KC1NoZWxsU2NyaXB0EEASCwoHU2t5bGFyaxBOEgkKBVNsYW5nEGsSDAoIU29saWRpdHkQXxIKCgZTdmVsdGUQahIJCgVTd2lmdBACEgcKA1RjbBBlEggKBFRPTUwQSRIHCgNUZVgQUhIKCgZUaHJpZnQQZxIOCgpUeXBlU2NyaXB0EBcSEwoPVHlwZVNjcmlwdFJlYWN0EF4SCwoHVmVyaWxvZxBoEggKBFZIREwQaRIPCgtWaXN1YWxCYXNpYxA/EgcKA1Z1ZRAZEgsKB1dvbGZyYW0QNRIHCgNYTUwQHxIHCgNYU0wQIBIICgRZQU1MEEoSBwoDWmlnECZCTgoSb3JnLnNjaXBfY29kZS5zY2lwQglTY2lwUHJvdG9QAVorZ2l0aHViLmNvbS9zY2lwLWNvZGUvc2NpcC9iaW5kaW5ncy9nby9zY2lwL2IGcHJvdG8z");
 
 /**
  * Index represents a complete SCIP index for a workspace this is rooted at a
@@ -2434,6 +2434,13 @@ export enum Language {
    */
   Objective_CPP = 37,
 
+  /**
+   * https://odin-lang.org/
+   *
+   * @generated from enum value: Odin = 111;
+   */
+  Odin = 111,
+
   /**
    * @generated from enum value: Pascal = 99;
    */
@@ -2654,7 +2661,7 @@ export enum Language {
   YAML = 74,
 
   /**
-   * NextLanguage = 111;
+   * NextLanguage = 112;
    * Steps add a new language:
    * 1. Copy-paste the "NextLanguage = N" line above
    * 2. Increment "NextLanguage = N" to "NextLanguage = N+1"
diff --git a/docs/scip.md b/docs/scip.md
index 49dfd030..01c46896 100644
--- a/docs/scip.md
+++ b/docs/scip.md
@@ -647,6 +647,7 @@ Feel free to send a pull-request to add missing programming languages.
 | 41 | OCaml | 
 | 36 | Objective_C | 
 | 37 | Objective_CPP | 
+| 111 | Odin | https://odin-lang.org/
 | 99 | Pascal | 
 | 19 | PHP | 
 | 70 | PLSQL | 
@@ -690,7 +691,7 @@ Feel free to send a pull-request to add missing programming languages.
 | 31 | XML | 
 | 32 | XSL | 
 | 74 | YAML | 
-| 38 | Zig | NextLanguage = 111; Steps add a new language: 1. Copy-paste the "NextLanguage = N" line above 2. Increment "NextLanguage = N" to "NextLanguage = N+1" 3. Replace "NextLanguage = N" with the name of the new language. 4. Move the new language to the correct line above using alphabetical order 5. (optional) Add a brief comment behind the language if the name is not self-explanatory
+| 38 | Zig | NextLanguage = 112; Steps add a new language: 1. Copy-paste the "NextLanguage = N" line above 2. Increment "NextLanguage = N" to "NextLanguage = N+1" 3. Replace "NextLanguage = N" with the name of the new language. 4. Move the new language to the correct line above using alphabetical order 5. (optional) Add a brief comment behind the language if the name is not self-explanatory
 
 
 ### PositionEncoding
diff --git a/scip.proto b/scip.proto
index 16362e2d..9ae8c963 100644
--- a/scip.proto
+++ b/scip.proto
@@ -907,6 +907,7 @@ enum Language {
   OCaml = 41;
   Objective_C = 36;
   Objective_CPP = 37;
+  Odin = 111; // https://odin-lang.org/
   Pascal = 99;
   PHP = 19;
   PLSQL = 70;
@@ -951,7 +952,7 @@ enum Language {
   XSL = 32;
   YAML = 74;
   Zig = 38;
-  // NextLanguage = 111;
+  // NextLanguage = 112;
   // Steps add a new language:
   // 1. Copy-paste the "NextLanguage = N" line above
   // 2. Increment "NextLanguage = N" to "NextLanguage = N+1"