signalling.pb.go 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845
  1. // Code generated by protoc-gen-go. DO NOT EDIT.
  2. // source: signalling.proto
  3. package tdproto
  4. import (
  5. fmt "fmt"
  6. proto "github.com/golang/protobuf/proto"
  7. math "math"
  8. )
  9. // Reference imports to suppress errors if they are not otherwise used.
  10. var _ = proto.Marshal
  11. var _ = fmt.Errorf
  12. var _ = math.Inf
  13. // This is a compile-time assertion to ensure that this generated file
  14. // is compatible with the proto package it is being compiled against.
  15. // A compilation error at this line likely means your copy of the
  16. // proto package needs to be updated.
  17. const _ = proto.ProtoPackageIsVersion3 // please upgrade the proto package
  18. type KeyType int32
  19. const (
  20. KeyType_AES_GCM_128 KeyType = 90
  21. KeyType_AES_GCM_256 KeyType = 91
  22. )
  23. var KeyType_name = map[int32]string{
  24. 90: "AES_GCM_128",
  25. 91: "AES_GCM_256",
  26. }
  27. var KeyType_value = map[string]int32{
  28. "AES_GCM_128": 90,
  29. "AES_GCM_256": 91,
  30. }
  31. func (x KeyType) Enum() *KeyType {
  32. p := new(KeyType)
  33. *p = x
  34. return p
  35. }
  36. func (x KeyType) String() string {
  37. return proto.EnumName(KeyType_name, int32(x))
  38. }
  39. func (x *KeyType) UnmarshalJSON(data []byte) error {
  40. value, err := proto.UnmarshalJSONEnum(KeyType_value, data, "KeyType")
  41. if err != nil {
  42. return err
  43. }
  44. *x = KeyType(value)
  45. return nil
  46. }
  47. func (KeyType) EnumDescriptor() ([]byte, []int) {
  48. return fileDescriptor_39f66308029891ad, []int{0}
  49. }
  50. // State transitions of the client
  51. type C2S_Transition int32
  52. const (
  53. C2S_Transition_C2S_NO_CHANGE C2S_Transition = 0
  54. C2S_Transition_C2S_SESSION_INIT C2S_Transition = 1
  55. C2S_Transition_C2S_SESSION_COVERT_INIT C2S_Transition = 11
  56. C2S_Transition_C2S_EXPECT_RECONNECT C2S_Transition = 2
  57. C2S_Transition_C2S_SESSION_CLOSE C2S_Transition = 3
  58. C2S_Transition_C2S_YIELD_UPLOAD C2S_Transition = 4
  59. C2S_Transition_C2S_ACQUIRE_UPLOAD C2S_Transition = 5
  60. C2S_Transition_C2S_EXPECT_UPLOADONLY_RECONN C2S_Transition = 6
  61. C2S_Transition_C2S_ERROR C2S_Transition = 255
  62. )
  63. var C2S_Transition_name = map[int32]string{
  64. 0: "C2S_NO_CHANGE",
  65. 1: "C2S_SESSION_INIT",
  66. 11: "C2S_SESSION_COVERT_INIT",
  67. 2: "C2S_EXPECT_RECONNECT",
  68. 3: "C2S_SESSION_CLOSE",
  69. 4: "C2S_YIELD_UPLOAD",
  70. 5: "C2S_ACQUIRE_UPLOAD",
  71. 6: "C2S_EXPECT_UPLOADONLY_RECONN",
  72. 255: "C2S_ERROR",
  73. }
  74. var C2S_Transition_value = map[string]int32{
  75. "C2S_NO_CHANGE": 0,
  76. "C2S_SESSION_INIT": 1,
  77. "C2S_SESSION_COVERT_INIT": 11,
  78. "C2S_EXPECT_RECONNECT": 2,
  79. "C2S_SESSION_CLOSE": 3,
  80. "C2S_YIELD_UPLOAD": 4,
  81. "C2S_ACQUIRE_UPLOAD": 5,
  82. "C2S_EXPECT_UPLOADONLY_RECONN": 6,
  83. "C2S_ERROR": 255,
  84. }
  85. func (x C2S_Transition) Enum() *C2S_Transition {
  86. p := new(C2S_Transition)
  87. *p = x
  88. return p
  89. }
  90. func (x C2S_Transition) String() string {
  91. return proto.EnumName(C2S_Transition_name, int32(x))
  92. }
  93. func (x *C2S_Transition) UnmarshalJSON(data []byte) error {
  94. value, err := proto.UnmarshalJSONEnum(C2S_Transition_value, data, "C2S_Transition")
  95. if err != nil {
  96. return err
  97. }
  98. *x = C2S_Transition(value)
  99. return nil
  100. }
  101. func (C2S_Transition) EnumDescriptor() ([]byte, []int) {
  102. return fileDescriptor_39f66308029891ad, []int{1}
  103. }
  104. // State transitions of the server
  105. type S2C_Transition int32
  106. const (
  107. S2C_Transition_S2C_NO_CHANGE S2C_Transition = 0
  108. S2C_Transition_S2C_SESSION_INIT S2C_Transition = 1
  109. S2C_Transition_S2C_SESSION_COVERT_INIT S2C_Transition = 11
  110. S2C_Transition_S2C_CONFIRM_RECONNECT S2C_Transition = 2
  111. S2C_Transition_S2C_SESSION_CLOSE S2C_Transition = 3
  112. // TODO should probably also allow EXPECT_RECONNECT here, for DittoTap
  113. S2C_Transition_S2C_ERROR S2C_Transition = 255
  114. )
  115. var S2C_Transition_name = map[int32]string{
  116. 0: "S2C_NO_CHANGE",
  117. 1: "S2C_SESSION_INIT",
  118. 11: "S2C_SESSION_COVERT_INIT",
  119. 2: "S2C_CONFIRM_RECONNECT",
  120. 3: "S2C_SESSION_CLOSE",
  121. 255: "S2C_ERROR",
  122. }
  123. var S2C_Transition_value = map[string]int32{
  124. "S2C_NO_CHANGE": 0,
  125. "S2C_SESSION_INIT": 1,
  126. "S2C_SESSION_COVERT_INIT": 11,
  127. "S2C_CONFIRM_RECONNECT": 2,
  128. "S2C_SESSION_CLOSE": 3,
  129. "S2C_ERROR": 255,
  130. }
  131. func (x S2C_Transition) Enum() *S2C_Transition {
  132. p := new(S2C_Transition)
  133. *p = x
  134. return p
  135. }
  136. func (x S2C_Transition) String() string {
  137. return proto.EnumName(S2C_Transition_name, int32(x))
  138. }
  139. func (x *S2C_Transition) UnmarshalJSON(data []byte) error {
  140. value, err := proto.UnmarshalJSONEnum(S2C_Transition_value, data, "S2C_Transition")
  141. if err != nil {
  142. return err
  143. }
  144. *x = S2C_Transition(value)
  145. return nil
  146. }
  147. func (S2C_Transition) EnumDescriptor() ([]byte, []int) {
  148. return fileDescriptor_39f66308029891ad, []int{2}
  149. }
  150. // Should accompany all S2C_ERROR messages.
  151. type ErrorReasonS2C int32
  152. const (
  153. ErrorReasonS2C_NO_ERROR ErrorReasonS2C = 0
  154. ErrorReasonS2C_COVERT_STREAM ErrorReasonS2C = 1
  155. ErrorReasonS2C_CLIENT_REPORTED ErrorReasonS2C = 2
  156. ErrorReasonS2C_CLIENT_PROTOCOL ErrorReasonS2C = 3
  157. ErrorReasonS2C_STATION_INTERNAL ErrorReasonS2C = 4
  158. ErrorReasonS2C_DECOY_OVERLOAD ErrorReasonS2C = 5
  159. ErrorReasonS2C_CLIENT_STREAM ErrorReasonS2C = 100
  160. ErrorReasonS2C_CLIENT_TIMEOUT ErrorReasonS2C = 101
  161. )
  162. var ErrorReasonS2C_name = map[int32]string{
  163. 0: "NO_ERROR",
  164. 1: "COVERT_STREAM",
  165. 2: "CLIENT_REPORTED",
  166. 3: "CLIENT_PROTOCOL",
  167. 4: "STATION_INTERNAL",
  168. 5: "DECOY_OVERLOAD",
  169. 100: "CLIENT_STREAM",
  170. 101: "CLIENT_TIMEOUT",
  171. }
  172. var ErrorReasonS2C_value = map[string]int32{
  173. "NO_ERROR": 0,
  174. "COVERT_STREAM": 1,
  175. "CLIENT_REPORTED": 2,
  176. "CLIENT_PROTOCOL": 3,
  177. "STATION_INTERNAL": 4,
  178. "DECOY_OVERLOAD": 5,
  179. "CLIENT_STREAM": 100,
  180. "CLIENT_TIMEOUT": 101,
  181. }
  182. func (x ErrorReasonS2C) Enum() *ErrorReasonS2C {
  183. p := new(ErrorReasonS2C)
  184. *p = x
  185. return p
  186. }
  187. func (x ErrorReasonS2C) String() string {
  188. return proto.EnumName(ErrorReasonS2C_name, int32(x))
  189. }
  190. func (x *ErrorReasonS2C) UnmarshalJSON(data []byte) error {
  191. value, err := proto.UnmarshalJSONEnum(ErrorReasonS2C_value, data, "ErrorReasonS2C")
  192. if err != nil {
  193. return err
  194. }
  195. *x = ErrorReasonS2C(value)
  196. return nil
  197. }
  198. func (ErrorReasonS2C) EnumDescriptor() ([]byte, []int) {
  199. return fileDescriptor_39f66308029891ad, []int{3}
  200. }
  201. type PubKey struct {
  202. // A public key, as used by the station.
  203. Key []byte `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"`
  204. Type *KeyType `protobuf:"varint,2,opt,name=type,enum=tapdance.KeyType" json:"type,omitempty"`
  205. XXX_NoUnkeyedLiteral struct{} `json:"-"`
  206. XXX_unrecognized []byte `json:"-"`
  207. XXX_sizecache int32 `json:"-"`
  208. }
  209. func (m *PubKey) Reset() { *m = PubKey{} }
  210. func (m *PubKey) String() string { return proto.CompactTextString(m) }
  211. func (*PubKey) ProtoMessage() {}
  212. func (*PubKey) Descriptor() ([]byte, []int) {
  213. return fileDescriptor_39f66308029891ad, []int{0}
  214. }
  215. func (m *PubKey) XXX_Unmarshal(b []byte) error {
  216. return xxx_messageInfo_PubKey.Unmarshal(m, b)
  217. }
  218. func (m *PubKey) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
  219. return xxx_messageInfo_PubKey.Marshal(b, m, deterministic)
  220. }
  221. func (m *PubKey) XXX_Merge(src proto.Message) {
  222. xxx_messageInfo_PubKey.Merge(m, src)
  223. }
  224. func (m *PubKey) XXX_Size() int {
  225. return xxx_messageInfo_PubKey.Size(m)
  226. }
  227. func (m *PubKey) XXX_DiscardUnknown() {
  228. xxx_messageInfo_PubKey.DiscardUnknown(m)
  229. }
  230. var xxx_messageInfo_PubKey proto.InternalMessageInfo
  231. func (m *PubKey) GetKey() []byte {
  232. if m != nil {
  233. return m.Key
  234. }
  235. return nil
  236. }
  237. func (m *PubKey) GetType() KeyType {
  238. if m != nil && m.Type != nil {
  239. return *m.Type
  240. }
  241. return KeyType_AES_GCM_128
  242. }
  243. type TLSDecoySpec struct {
  244. // The hostname/SNI to use for this host
  245. //
  246. // The hostname is the only required field, although other
  247. // fields are expected to be present in most cases.
  248. Hostname *string `protobuf:"bytes,1,opt,name=hostname" json:"hostname,omitempty"`
  249. // The 32-bit ipv4 address, in network byte order
  250. //
  251. // If the IPv4 address is absent, then it may be resolved via
  252. // DNS by the client, or the client may discard this decoy spec
  253. // if local DNS is untrusted, or the service may be multihomed.
  254. Ipv4Addr *uint32 `protobuf:"fixed32,2,opt,name=ipv4addr" json:"ipv4addr,omitempty"`
  255. // The 128-bit ipv6 address, in network byte order
  256. Ipv6Addr []byte `protobuf:"bytes,6,opt,name=ipv6addr" json:"ipv6addr,omitempty"`
  257. // The Tapdance station public key to use when contacting this
  258. // decoy
  259. //
  260. // If omitted, the default station public key (if any) is used.
  261. Pubkey *PubKey `protobuf:"bytes,3,opt,name=pubkey" json:"pubkey,omitempty"`
  262. // The maximum duration, in milliseconds, to maintain an open
  263. // connection to this decoy (because the decoy may close the
  264. // connection itself after this length of time)
  265. //
  266. // If omitted, a default of 30,000 milliseconds is assumed.
  267. Timeout *uint32 `protobuf:"varint,4,opt,name=timeout" json:"timeout,omitempty"`
  268. // The maximum TCP window size to attempt to use for this decoy.
  269. //
  270. // If omitted, a default of 15360 is assumed.
  271. //
  272. // TODO: the default is based on the current heuristic of only
  273. // using decoys that permit windows of 15KB or larger. If this
  274. // heuristic changes, then this default doesn't make sense.
  275. Tcpwin *uint32 `protobuf:"varint,5,opt,name=tcpwin" json:"tcpwin,omitempty"`
  276. XXX_NoUnkeyedLiteral struct{} `json:"-"`
  277. XXX_unrecognized []byte `json:"-"`
  278. XXX_sizecache int32 `json:"-"`
  279. }
  280. func (m *TLSDecoySpec) Reset() { *m = TLSDecoySpec{} }
  281. func (m *TLSDecoySpec) String() string { return proto.CompactTextString(m) }
  282. func (*TLSDecoySpec) ProtoMessage() {}
  283. func (*TLSDecoySpec) Descriptor() ([]byte, []int) {
  284. return fileDescriptor_39f66308029891ad, []int{1}
  285. }
  286. func (m *TLSDecoySpec) XXX_Unmarshal(b []byte) error {
  287. return xxx_messageInfo_TLSDecoySpec.Unmarshal(m, b)
  288. }
  289. func (m *TLSDecoySpec) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
  290. return xxx_messageInfo_TLSDecoySpec.Marshal(b, m, deterministic)
  291. }
  292. func (m *TLSDecoySpec) XXX_Merge(src proto.Message) {
  293. xxx_messageInfo_TLSDecoySpec.Merge(m, src)
  294. }
  295. func (m *TLSDecoySpec) XXX_Size() int {
  296. return xxx_messageInfo_TLSDecoySpec.Size(m)
  297. }
  298. func (m *TLSDecoySpec) XXX_DiscardUnknown() {
  299. xxx_messageInfo_TLSDecoySpec.DiscardUnknown(m)
  300. }
  301. var xxx_messageInfo_TLSDecoySpec proto.InternalMessageInfo
  302. func (m *TLSDecoySpec) GetHostname() string {
  303. if m != nil && m.Hostname != nil {
  304. return *m.Hostname
  305. }
  306. return ""
  307. }
  308. func (m *TLSDecoySpec) GetIpv4Addr() uint32 {
  309. if m != nil && m.Ipv4Addr != nil {
  310. return *m.Ipv4Addr
  311. }
  312. return 0
  313. }
  314. func (m *TLSDecoySpec) GetIpv6Addr() []byte {
  315. if m != nil {
  316. return m.Ipv6Addr
  317. }
  318. return nil
  319. }
  320. func (m *TLSDecoySpec) GetPubkey() *PubKey {
  321. if m != nil {
  322. return m.Pubkey
  323. }
  324. return nil
  325. }
  326. func (m *TLSDecoySpec) GetTimeout() uint32 {
  327. if m != nil && m.Timeout != nil {
  328. return *m.Timeout
  329. }
  330. return 0
  331. }
  332. func (m *TLSDecoySpec) GetTcpwin() uint32 {
  333. if m != nil && m.Tcpwin != nil {
  334. return *m.Tcpwin
  335. }
  336. return 0
  337. }
  338. type ClientConf struct {
  339. DecoyList *DecoyList `protobuf:"bytes,1,opt,name=decoy_list,json=decoyList" json:"decoy_list,omitempty"`
  340. Generation *uint32 `protobuf:"varint,2,opt,name=generation" json:"generation,omitempty"`
  341. DefaultPubkey *PubKey `protobuf:"bytes,3,opt,name=default_pubkey,json=defaultPubkey" json:"default_pubkey,omitempty"`
  342. XXX_NoUnkeyedLiteral struct{} `json:"-"`
  343. XXX_unrecognized []byte `json:"-"`
  344. XXX_sizecache int32 `json:"-"`
  345. }
  346. func (m *ClientConf) Reset() { *m = ClientConf{} }
  347. func (m *ClientConf) String() string { return proto.CompactTextString(m) }
  348. func (*ClientConf) ProtoMessage() {}
  349. func (*ClientConf) Descriptor() ([]byte, []int) {
  350. return fileDescriptor_39f66308029891ad, []int{2}
  351. }
  352. func (m *ClientConf) XXX_Unmarshal(b []byte) error {
  353. return xxx_messageInfo_ClientConf.Unmarshal(m, b)
  354. }
  355. func (m *ClientConf) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
  356. return xxx_messageInfo_ClientConf.Marshal(b, m, deterministic)
  357. }
  358. func (m *ClientConf) XXX_Merge(src proto.Message) {
  359. xxx_messageInfo_ClientConf.Merge(m, src)
  360. }
  361. func (m *ClientConf) XXX_Size() int {
  362. return xxx_messageInfo_ClientConf.Size(m)
  363. }
  364. func (m *ClientConf) XXX_DiscardUnknown() {
  365. xxx_messageInfo_ClientConf.DiscardUnknown(m)
  366. }
  367. var xxx_messageInfo_ClientConf proto.InternalMessageInfo
  368. func (m *ClientConf) GetDecoyList() *DecoyList {
  369. if m != nil {
  370. return m.DecoyList
  371. }
  372. return nil
  373. }
  374. func (m *ClientConf) GetGeneration() uint32 {
  375. if m != nil && m.Generation != nil {
  376. return *m.Generation
  377. }
  378. return 0
  379. }
  380. func (m *ClientConf) GetDefaultPubkey() *PubKey {
  381. if m != nil {
  382. return m.DefaultPubkey
  383. }
  384. return nil
  385. }
  386. type DecoyList struct {
  387. TlsDecoys []*TLSDecoySpec `protobuf:"bytes,1,rep,name=tls_decoys,json=tlsDecoys" json:"tls_decoys,omitempty"`
  388. XXX_NoUnkeyedLiteral struct{} `json:"-"`
  389. XXX_unrecognized []byte `json:"-"`
  390. XXX_sizecache int32 `json:"-"`
  391. }
  392. func (m *DecoyList) Reset() { *m = DecoyList{} }
  393. func (m *DecoyList) String() string { return proto.CompactTextString(m) }
  394. func (*DecoyList) ProtoMessage() {}
  395. func (*DecoyList) Descriptor() ([]byte, []int) {
  396. return fileDescriptor_39f66308029891ad, []int{3}
  397. }
  398. func (m *DecoyList) XXX_Unmarshal(b []byte) error {
  399. return xxx_messageInfo_DecoyList.Unmarshal(m, b)
  400. }
  401. func (m *DecoyList) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
  402. return xxx_messageInfo_DecoyList.Marshal(b, m, deterministic)
  403. }
  404. func (m *DecoyList) XXX_Merge(src proto.Message) {
  405. xxx_messageInfo_DecoyList.Merge(m, src)
  406. }
  407. func (m *DecoyList) XXX_Size() int {
  408. return xxx_messageInfo_DecoyList.Size(m)
  409. }
  410. func (m *DecoyList) XXX_DiscardUnknown() {
  411. xxx_messageInfo_DecoyList.DiscardUnknown(m)
  412. }
  413. var xxx_messageInfo_DecoyList proto.InternalMessageInfo
  414. func (m *DecoyList) GetTlsDecoys() []*TLSDecoySpec {
  415. if m != nil {
  416. return m.TlsDecoys
  417. }
  418. return nil
  419. }
  420. type StationToClient struct {
  421. // Should accompany (at least) SESSION_INIT and CONFIRM_RECONNECT.
  422. ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"`
  423. // There might be a state transition. May be absent; absence should be
  424. // treated identically to NO_CHANGE.
  425. StateTransition *S2C_Transition `protobuf:"varint,2,opt,name=state_transition,json=stateTransition,enum=tapdance.S2C_Transition" json:"state_transition,omitempty"`
  426. // The station can send client config info piggybacked
  427. // on any message, as it sees fit
  428. ConfigInfo *ClientConf `protobuf:"bytes,3,opt,name=config_info,json=configInfo" json:"config_info,omitempty"`
  429. // If state_transition == S2C_ERROR, this field is the explanation.
  430. ErrReason *ErrorReasonS2C `protobuf:"varint,4,opt,name=err_reason,json=errReason,enum=tapdance.ErrorReasonS2C" json:"err_reason,omitempty"`
  431. // Signals client to stop connecting for following amount of seconds
  432. TmpBackoff *uint32 `protobuf:"varint,5,opt,name=tmp_backoff,json=tmpBackoff" json:"tmp_backoff,omitempty"`
  433. // Sent in SESSION_INIT, identifies the station that picked up
  434. StationId *string `protobuf:"bytes,6,opt,name=station_id,json=stationId" json:"station_id,omitempty"`
  435. // Random-sized junk to defeat packet size fingerprinting.
  436. Padding []byte `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"`
  437. XXX_NoUnkeyedLiteral struct{} `json:"-"`
  438. XXX_unrecognized []byte `json:"-"`
  439. XXX_sizecache int32 `json:"-"`
  440. }
  441. func (m *StationToClient) Reset() { *m = StationToClient{} }
  442. func (m *StationToClient) String() string { return proto.CompactTextString(m) }
  443. func (*StationToClient) ProtoMessage() {}
  444. func (*StationToClient) Descriptor() ([]byte, []int) {
  445. return fileDescriptor_39f66308029891ad, []int{4}
  446. }
  447. func (m *StationToClient) XXX_Unmarshal(b []byte) error {
  448. return xxx_messageInfo_StationToClient.Unmarshal(m, b)
  449. }
  450. func (m *StationToClient) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
  451. return xxx_messageInfo_StationToClient.Marshal(b, m, deterministic)
  452. }
  453. func (m *StationToClient) XXX_Merge(src proto.Message) {
  454. xxx_messageInfo_StationToClient.Merge(m, src)
  455. }
  456. func (m *StationToClient) XXX_Size() int {
  457. return xxx_messageInfo_StationToClient.Size(m)
  458. }
  459. func (m *StationToClient) XXX_DiscardUnknown() {
  460. xxx_messageInfo_StationToClient.DiscardUnknown(m)
  461. }
  462. var xxx_messageInfo_StationToClient proto.InternalMessageInfo
  463. func (m *StationToClient) GetProtocolVersion() uint32 {
  464. if m != nil && m.ProtocolVersion != nil {
  465. return *m.ProtocolVersion
  466. }
  467. return 0
  468. }
  469. func (m *StationToClient) GetStateTransition() S2C_Transition {
  470. if m != nil && m.StateTransition != nil {
  471. return *m.StateTransition
  472. }
  473. return S2C_Transition_S2C_NO_CHANGE
  474. }
  475. func (m *StationToClient) GetConfigInfo() *ClientConf {
  476. if m != nil {
  477. return m.ConfigInfo
  478. }
  479. return nil
  480. }
  481. func (m *StationToClient) GetErrReason() ErrorReasonS2C {
  482. if m != nil && m.ErrReason != nil {
  483. return *m.ErrReason
  484. }
  485. return ErrorReasonS2C_NO_ERROR
  486. }
  487. func (m *StationToClient) GetTmpBackoff() uint32 {
  488. if m != nil && m.TmpBackoff != nil {
  489. return *m.TmpBackoff
  490. }
  491. return 0
  492. }
  493. func (m *StationToClient) GetStationId() string {
  494. if m != nil && m.StationId != nil {
  495. return *m.StationId
  496. }
  497. return ""
  498. }
  499. func (m *StationToClient) GetPadding() []byte {
  500. if m != nil {
  501. return m.Padding
  502. }
  503. return nil
  504. }
  505. type ClientToStation struct {
  506. ProtocolVersion *uint32 `protobuf:"varint,1,opt,name=protocol_version,json=protocolVersion" json:"protocol_version,omitempty"`
  507. // The client reports its decoy list's version number here, which the
  508. // station can use to decide whether to send an updated one. The station
  509. // should always send a list if this field is set to 0.
  510. DecoyListGeneration *uint32 `protobuf:"varint,2,opt,name=decoy_list_generation,json=decoyListGeneration" json:"decoy_list_generation,omitempty"`
  511. StateTransition *C2S_Transition `protobuf:"varint,3,opt,name=state_transition,json=stateTransition,enum=tapdance.C2S_Transition" json:"state_transition,omitempty"`
  512. // The position in the overall session's upload sequence where the current
  513. // YIELD=>ACQUIRE switchover is happening.
  514. UploadSync *uint64 `protobuf:"varint,4,opt,name=upload_sync,json=uploadSync" json:"upload_sync,omitempty"`
  515. // List of decoys that client have unsuccessfully tried in current session.
  516. // Could be sent in chunks
  517. FailedDecoys []string `protobuf:"bytes,10,rep,name=failed_decoys,json=failedDecoys" json:"failed_decoys,omitempty"`
  518. Stats *SessionStats `protobuf:"bytes,11,opt,name=stats" json:"stats,omitempty"`
  519. // Station is only required to check this variable during session initialization.
  520. // If set, station must facilitate connection to said target by itself, i.e. write into squid
  521. // socket an HTTP/SOCKS/any other connection request.
  522. // covert_address must have exactly one ':' colon, that separates host (literal IP address or
  523. // resolvable hostname) and port
  524. // TODO: make it required for initialization, and stop connecting any client straight to squid?
  525. CovertAddress *string `protobuf:"bytes,20,opt,name=covert_address,json=covertAddress" json:"covert_address,omitempty"`
  526. // Random-sized junk to defeat packet size fingerprinting.
  527. Padding []byte `protobuf:"bytes,100,opt,name=padding" json:"padding,omitempty"`
  528. XXX_NoUnkeyedLiteral struct{} `json:"-"`
  529. XXX_unrecognized []byte `json:"-"`
  530. XXX_sizecache int32 `json:"-"`
  531. }
  532. func (m *ClientToStation) Reset() { *m = ClientToStation{} }
  533. func (m *ClientToStation) String() string { return proto.CompactTextString(m) }
  534. func (*ClientToStation) ProtoMessage() {}
  535. func (*ClientToStation) Descriptor() ([]byte, []int) {
  536. return fileDescriptor_39f66308029891ad, []int{5}
  537. }
  538. func (m *ClientToStation) XXX_Unmarshal(b []byte) error {
  539. return xxx_messageInfo_ClientToStation.Unmarshal(m, b)
  540. }
  541. func (m *ClientToStation) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
  542. return xxx_messageInfo_ClientToStation.Marshal(b, m, deterministic)
  543. }
  544. func (m *ClientToStation) XXX_Merge(src proto.Message) {
  545. xxx_messageInfo_ClientToStation.Merge(m, src)
  546. }
  547. func (m *ClientToStation) XXX_Size() int {
  548. return xxx_messageInfo_ClientToStation.Size(m)
  549. }
  550. func (m *ClientToStation) XXX_DiscardUnknown() {
  551. xxx_messageInfo_ClientToStation.DiscardUnknown(m)
  552. }
  553. var xxx_messageInfo_ClientToStation proto.InternalMessageInfo
  554. func (m *ClientToStation) GetProtocolVersion() uint32 {
  555. if m != nil && m.ProtocolVersion != nil {
  556. return *m.ProtocolVersion
  557. }
  558. return 0
  559. }
  560. func (m *ClientToStation) GetDecoyListGeneration() uint32 {
  561. if m != nil && m.DecoyListGeneration != nil {
  562. return *m.DecoyListGeneration
  563. }
  564. return 0
  565. }
  566. func (m *ClientToStation) GetStateTransition() C2S_Transition {
  567. if m != nil && m.StateTransition != nil {
  568. return *m.StateTransition
  569. }
  570. return C2S_Transition_C2S_NO_CHANGE
  571. }
  572. func (m *ClientToStation) GetUploadSync() uint64 {
  573. if m != nil && m.UploadSync != nil {
  574. return *m.UploadSync
  575. }
  576. return 0
  577. }
  578. func (m *ClientToStation) GetFailedDecoys() []string {
  579. if m != nil {
  580. return m.FailedDecoys
  581. }
  582. return nil
  583. }
  584. func (m *ClientToStation) GetStats() *SessionStats {
  585. if m != nil {
  586. return m.Stats
  587. }
  588. return nil
  589. }
  590. func (m *ClientToStation) GetCovertAddress() string {
  591. if m != nil && m.CovertAddress != nil {
  592. return *m.CovertAddress
  593. }
  594. return ""
  595. }
  596. func (m *ClientToStation) GetPadding() []byte {
  597. if m != nil {
  598. return m.Padding
  599. }
  600. return nil
  601. }
  602. type SessionStats struct {
  603. FailedDecoysAmount *uint32 `protobuf:"varint,20,opt,name=failed_decoys_amount,json=failedDecoysAmount" json:"failed_decoys_amount,omitempty"`
  604. // Applicable to whole session:
  605. TotalTimeToConnect *uint32 `protobuf:"varint,31,opt,name=total_time_to_connect,json=totalTimeToConnect" json:"total_time_to_connect,omitempty"`
  606. // Last (i.e. successful) decoy:
  607. RttToStation *uint32 `protobuf:"varint,33,opt,name=rtt_to_station,json=rttToStation" json:"rtt_to_station,omitempty"`
  608. TlsToDecoy *uint32 `protobuf:"varint,38,opt,name=tls_to_decoy,json=tlsToDecoy" json:"tls_to_decoy,omitempty"`
  609. TcpToDecoy *uint32 `protobuf:"varint,39,opt,name=tcp_to_decoy,json=tcpToDecoy" json:"tcp_to_decoy,omitempty"`
  610. XXX_NoUnkeyedLiteral struct{} `json:"-"`
  611. XXX_unrecognized []byte `json:"-"`
  612. XXX_sizecache int32 `json:"-"`
  613. }
  614. func (m *SessionStats) Reset() { *m = SessionStats{} }
  615. func (m *SessionStats) String() string { return proto.CompactTextString(m) }
  616. func (*SessionStats) ProtoMessage() {}
  617. func (*SessionStats) Descriptor() ([]byte, []int) {
  618. return fileDescriptor_39f66308029891ad, []int{6}
  619. }
  620. func (m *SessionStats) XXX_Unmarshal(b []byte) error {
  621. return xxx_messageInfo_SessionStats.Unmarshal(m, b)
  622. }
  623. func (m *SessionStats) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
  624. return xxx_messageInfo_SessionStats.Marshal(b, m, deterministic)
  625. }
  626. func (m *SessionStats) XXX_Merge(src proto.Message) {
  627. xxx_messageInfo_SessionStats.Merge(m, src)
  628. }
  629. func (m *SessionStats) XXX_Size() int {
  630. return xxx_messageInfo_SessionStats.Size(m)
  631. }
  632. func (m *SessionStats) XXX_DiscardUnknown() {
  633. xxx_messageInfo_SessionStats.DiscardUnknown(m)
  634. }
  635. var xxx_messageInfo_SessionStats proto.InternalMessageInfo
  636. func (m *SessionStats) GetFailedDecoysAmount() uint32 {
  637. if m != nil && m.FailedDecoysAmount != nil {
  638. return *m.FailedDecoysAmount
  639. }
  640. return 0
  641. }
  642. func (m *SessionStats) GetTotalTimeToConnect() uint32 {
  643. if m != nil && m.TotalTimeToConnect != nil {
  644. return *m.TotalTimeToConnect
  645. }
  646. return 0
  647. }
  648. func (m *SessionStats) GetRttToStation() uint32 {
  649. if m != nil && m.RttToStation != nil {
  650. return *m.RttToStation
  651. }
  652. return 0
  653. }
  654. func (m *SessionStats) GetTlsToDecoy() uint32 {
  655. if m != nil && m.TlsToDecoy != nil {
  656. return *m.TlsToDecoy
  657. }
  658. return 0
  659. }
  660. func (m *SessionStats) GetTcpToDecoy() uint32 {
  661. if m != nil && m.TcpToDecoy != nil {
  662. return *m.TcpToDecoy
  663. }
  664. return 0
  665. }
  666. func init() {
  667. proto.RegisterEnum("tapdance.KeyType", KeyType_name, KeyType_value)
  668. proto.RegisterEnum("tapdance.C2S_Transition", C2S_Transition_name, C2S_Transition_value)
  669. proto.RegisterEnum("tapdance.S2C_Transition", S2C_Transition_name, S2C_Transition_value)
  670. proto.RegisterEnum("tapdance.ErrorReasonS2C", ErrorReasonS2C_name, ErrorReasonS2C_value)
  671. proto.RegisterType((*PubKey)(nil), "tapdance.PubKey")
  672. proto.RegisterType((*TLSDecoySpec)(nil), "tapdance.TLSDecoySpec")
  673. proto.RegisterType((*ClientConf)(nil), "tapdance.ClientConf")
  674. proto.RegisterType((*DecoyList)(nil), "tapdance.DecoyList")
  675. proto.RegisterType((*StationToClient)(nil), "tapdance.StationToClient")
  676. proto.RegisterType((*ClientToStation)(nil), "tapdance.ClientToStation")
  677. proto.RegisterType((*SessionStats)(nil), "tapdance.SessionStats")
  678. }
  679. func init() { proto.RegisterFile("signalling.proto", fileDescriptor_39f66308029891ad) }
  680. var fileDescriptor_39f66308029891ad = []byte{
  681. // 1024 bytes of a gzipped FileDescriptorProto
  682. 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0xed, 0x6e, 0xe3, 0x44,
  683. 0x17, 0x5e, 0x37, 0xdd, 0x6e, 0x73, 0x92, 0x38, 0xee, 0xf4, 0xe3, 0xf5, 0xcb, 0x57, 0x43, 0x60,
  684. 0x21, 0x14, 0x54, 0xb1, 0x16, 0xdd, 0xe5, 0x6f, 0xd6, 0x35, 0x25, 0xda, 0xd4, 0x0e, 0x63, 0x77,
  685. 0x45, 0xe1, 0xc7, 0xc8, 0xb5, 0x27, 0xc5, 0x5a, 0xc7, 0x63, 0xd9, 0x93, 0xa2, 0xdc, 0x09, 0xdc,
  686. 0x03, 0xd7, 0xc0, 0x0d, 0x70, 0x0d, 0xfc, 0x46, 0xe2, 0x26, 0x40, 0x33, 0xe3, 0x24, 0x4e, 0x17,
  687. 0x2d, 0xe2, 0x9f, 0xcf, 0xf3, 0x9c, 0xaf, 0xe7, 0x9c, 0xe3, 0x01, 0xa3, 0x4c, 0x6e, 0xb3, 0x30,
  688. 0x4d, 0x93, 0xec, 0xf6, 0x34, 0x2f, 0x18, 0x67, 0x68, 0x97, 0x87, 0x79, 0x1c, 0x66, 0x11, 0xed,
  689. 0x0f, 0x61, 0x67, 0x32, 0xbf, 0x79, 0x41, 0x17, 0xc8, 0x80, 0xc6, 0x2b, 0xba, 0x30, 0xb5, 0x9e,
  690. 0x36, 0x68, 0x63, 0xf1, 0x89, 0x1e, 0xc3, 0x36, 0x5f, 0xe4, 0xd4, 0xdc, 0xea, 0x69, 0x03, 0xdd,
  691. 0xda, 0x3b, 0x5d, 0x06, 0x9d, 0xbe, 0xa0, 0x8b, 0x60, 0x91, 0x53, 0x2c, 0xe9, 0xfe, 0xaf, 0x1a,
  692. 0xb4, 0x83, 0xb1, 0x7f, 0x4e, 0x23, 0xb6, 0xf0, 0x73, 0x1a, 0xa1, 0xb7, 0x60, 0xf7, 0x07, 0x56,
  693. 0xf2, 0x2c, 0x9c, 0x51, 0x99, 0xae, 0x89, 0x57, 0xb6, 0xe0, 0x92, 0xfc, 0xee, 0x8b, 0x30, 0x8e,
  694. 0x0b, 0x99, 0xf7, 0x11, 0x5e, 0xd9, 0x15, 0xf7, 0x54, 0x72, 0x3b, 0xb2, 0x8d, 0x95, 0x8d, 0x06,
  695. 0xb0, 0x93, 0xcf, 0x6f, 0x44, 0x83, 0x8d, 0x9e, 0x36, 0x68, 0x59, 0xc6, 0xba, 0x1b, 0xd5, 0x3f,
  696. 0xae, 0x78, 0x64, 0xc2, 0x23, 0x9e, 0xcc, 0x28, 0x9b, 0x73, 0x73, 0xbb, 0xa7, 0x0d, 0x3a, 0x78,
  697. 0x69, 0xa2, 0x23, 0xd8, 0xe1, 0x51, 0xfe, 0x63, 0x92, 0x99, 0x0f, 0x25, 0x51, 0x59, 0xfd, 0x9f,
  698. 0x35, 0x00, 0x3b, 0x4d, 0x68, 0xc6, 0x6d, 0x96, 0x4d, 0x91, 0x05, 0x10, 0x0b, 0x2d, 0x24, 0x4d,
  699. 0x4a, 0x2e, 0x05, 0xb4, 0xac, 0xfd, 0x75, 0x39, 0xa9, 0x73, 0x9c, 0x94, 0x1c, 0x37, 0xe3, 0xe5,
  700. 0x27, 0x7a, 0x0f, 0xe0, 0x96, 0x66, 0xb4, 0x08, 0x79, 0xc2, 0x32, 0x29, 0xac, 0x83, 0x6b, 0x08,
  701. 0x7a, 0x06, 0x7a, 0x4c, 0xa7, 0xe1, 0x3c, 0xe5, 0xe4, 0x5f, 0x64, 0x74, 0x2a, 0xbf, 0x89, 0x74,
  702. 0xeb, 0x3f, 0x87, 0xe6, 0xaa, 0x20, 0x3a, 0x03, 0xe0, 0x69, 0x49, 0x64, 0xd9, 0xd2, 0xd4, 0x7a,
  703. 0x8d, 0x41, 0xcb, 0x3a, 0x5a, 0x67, 0xa8, 0x2f, 0x01, 0x37, 0x79, 0x5a, 0x4a, 0xab, 0xec, 0xff,
  704. 0xb6, 0x05, 0x5d, 0x9f, 0xcb, 0x46, 0x02, 0xa6, 0x84, 0xa2, 0x4f, 0xc0, 0x90, 0xa7, 0x10, 0xb1,
  705. 0x94, 0xdc, 0xd1, 0xa2, 0x14, 0x6d, 0x6b, 0xb2, 0xed, 0xee, 0x12, 0x7f, 0xa9, 0x60, 0x64, 0x83,
  706. 0x51, 0xf2, 0x90, 0x53, 0xc2, 0x8b, 0x30, 0x2b, 0x93, 0x95, 0x42, 0xdd, 0x32, 0xd7, 0xb5, 0x7d,
  707. 0xcb, 0x26, 0xc1, 0x8a, 0xc7, 0x5d, 0x19, 0xb1, 0x06, 0xd0, 0x19, 0xb4, 0x22, 0x96, 0x4d, 0x93,
  708. 0x5b, 0x92, 0x64, 0x53, 0x56, 0xa9, 0x3f, 0x58, 0xc7, 0xaf, 0xe7, 0x8f, 0x41, 0x39, 0x8e, 0xb2,
  709. 0x29, 0x43, 0xcf, 0x00, 0x68, 0x51, 0x90, 0x82, 0x86, 0x25, 0xcb, 0xe4, 0x3e, 0x37, 0xaa, 0x3a,
  710. 0x45, 0xc1, 0x0a, 0x2c, 0x49, 0xdf, 0xb2, 0x71, 0x93, 0x16, 0x95, 0x85, 0x8e, 0xa1, 0xc5, 0x67,
  711. 0x39, 0xb9, 0x09, 0xa3, 0x57, 0x6c, 0x3a, 0xad, 0x16, 0x0e, 0x7c, 0x96, 0x3f, 0x57, 0x08, 0x7a,
  712. 0x17, 0xa0, 0x54, 0x33, 0x21, 0x49, 0x2c, 0xcf, 0xad, 0x89, 0x9b, 0x15, 0x32, 0x8a, 0xc5, 0x15,
  713. 0xe5, 0x61, 0x1c, 0x27, 0xd9, 0xad, 0x19, 0xcb, 0x53, 0x5c, 0x9a, 0xfd, 0x3f, 0xb7, 0xa0, 0xab,
  714. 0xba, 0x0d, 0x58, 0x35, 0xd5, 0xff, 0x32, 0x4d, 0x0b, 0x0e, 0xd7, 0xd7, 0x45, 0x5e, 0x3b, 0x9a,
  715. 0xfd, 0xd5, 0x4d, 0x5d, 0xac, 0xaf, 0xe7, 0x9f, 0x36, 0xd0, 0xb8, 0x3f, 0x0b, 0xdb, 0xf2, 0xdf,
  716. 0xb8, 0x81, 0x63, 0x68, 0xcd, 0xf3, 0x94, 0x85, 0x31, 0x29, 0x17, 0x59, 0x24, 0x67, 0xb9, 0x8d,
  717. 0x41, 0x41, 0xfe, 0x22, 0x8b, 0xd0, 0x07, 0xd0, 0x99, 0x86, 0x49, 0x4a, 0xe3, 0xe5, 0x81, 0x41,
  718. 0xaf, 0x31, 0x68, 0xe2, 0xb6, 0x02, 0xd5, 0x2d, 0xa1, 0xcf, 0xe0, 0xa1, 0x48, 0x5c, 0x9a, 0x2d,
  719. 0xb9, 0xc1, 0xda, 0xf5, 0xf9, 0xb4, 0x14, 0x02, 0xc5, 0x48, 0x4a, 0xac, 0x9c, 0xd0, 0x63, 0xd0,
  720. 0x23, 0x76, 0x47, 0x0b, 0x4e, 0xc4, 0x4f, 0x4c, 0xcb, 0xd2, 0x3c, 0x90, 0x83, 0xee, 0x28, 0x74,
  721. 0xa8, 0xc0, 0x37, 0x0c, 0xfb, 0x77, 0x0d, 0xda, 0xf5, 0xc4, 0xe8, 0x73, 0x38, 0xd8, 0x68, 0x92,
  722. 0x84, 0x33, 0x36, 0xcf, 0xb8, 0xcc, 0xdb, 0xc1, 0xa8, 0xde, 0xeb, 0x50, 0x32, 0xe8, 0x09, 0x1c,
  723. 0x72, 0xc6, 0xc3, 0x94, 0x88, 0x67, 0x80, 0x70, 0x46, 0x22, 0x96, 0x65, 0x34, 0xe2, 0xe6, 0xb1,
  724. 0x0a, 0x91, 0x64, 0x90, 0xcc, 0x68, 0xc0, 0x6c, 0xc5, 0xa0, 0x0f, 0x41, 0x2f, 0x38, 0x17, 0xbe,
  725. 0xd5, 0x41, 0x98, 0xef, 0x4b, 0xdf, 0x76, 0xc1, 0x6b, 0x4b, 0xef, 0x41, 0x5b, 0xfc, 0x8d, 0x9c,
  726. 0xa9, 0x56, 0xcc, 0x8f, 0xaa, 0x1b, 0x4b, 0xcb, 0x80, 0xc9, 0x0e, 0xa4, 0x47, 0x94, 0xaf, 0x3d,
  727. 0x3e, 0xae, 0x3c, 0xa2, 0xbc, 0xf2, 0x38, 0xf9, 0x14, 0x1e, 0x55, 0x8f, 0x29, 0xea, 0x42, 0x6b,
  728. 0xe8, 0xf8, 0xe4, 0xc2, 0xbe, 0x24, 0x4f, 0xac, 0x2f, 0x8d, 0xef, 0xea, 0x80, 0x75, 0xf6, 0xd4,
  729. 0xf8, 0xfe, 0xe4, 0x0f, 0x0d, 0xf4, 0xcd, 0x2d, 0xa3, 0x3d, 0xe8, 0x08, 0xc4, 0xf5, 0x88, 0xfd,
  730. 0xf5, 0xd0, 0xbd, 0x70, 0x8c, 0x07, 0xe8, 0x00, 0x0c, 0x01, 0xf9, 0x8e, 0xef, 0x8f, 0x3c, 0x97,
  731. 0x8c, 0xdc, 0x51, 0x60, 0x68, 0xe8, 0x6d, 0xf8, 0x5f, 0x1d, 0xb5, 0xbd, 0x97, 0x0e, 0x0e, 0x14,
  732. 0xd9, 0x42, 0x26, 0x1c, 0x08, 0xd2, 0xf9, 0x76, 0xe2, 0xd8, 0x01, 0xc1, 0x8e, 0xed, 0xb9, 0xae,
  733. 0x63, 0x07, 0xc6, 0x16, 0x3a, 0x84, 0xbd, 0x8d, 0xb0, 0xb1, 0xe7, 0x3b, 0x46, 0x63, 0x59, 0xe3,
  734. 0x7a, 0xe4, 0x8c, 0xcf, 0xc9, 0xd5, 0x64, 0xec, 0x0d, 0xcf, 0x8d, 0x6d, 0x74, 0x04, 0x48, 0xa0,
  735. 0x43, 0xfb, 0x9b, 0xab, 0x11, 0x76, 0x96, 0xf8, 0x43, 0xd4, 0x83, 0x77, 0x6a, 0xe9, 0x15, 0xec,
  736. 0xb9, 0xe3, 0xeb, 0xaa, 0x92, 0xb1, 0x83, 0x74, 0x68, 0x4a, 0x0f, 0x8c, 0x3d, 0x6c, 0xfc, 0xa5,
  737. 0x9d, 0xfc, 0xa4, 0x81, 0xbe, 0xf9, 0xa2, 0x08, 0xa5, 0x02, 0xb9, 0xa7, 0x54, 0x40, 0xaf, 0x2b,
  738. 0xad, 0xa3, 0x9b, 0x4a, 0xff, 0x0f, 0x87, 0x82, 0xb4, 0x3d, 0xf7, 0xab, 0x11, 0xbe, 0xbc, 0x2f,
  739. 0x75, 0x23, 0xae, 0x92, 0xaa, 0x43, 0x53, 0xc0, 0xab, 0xd6, 0x7e, 0xd1, 0x40, 0xdf, 0x7c, 0x76,
  740. 0x50, 0x1b, 0x76, 0x5d, 0xaf, 0xf2, 0x78, 0x20, 0x57, 0xa2, 0x6a, 0xfa, 0x01, 0x76, 0x86, 0x97,
  741. 0x86, 0x86, 0xf6, 0xa1, 0x6b, 0x8f, 0x47, 0x8e, 0x2b, 0x66, 0x3b, 0xf1, 0x70, 0xe0, 0x9c, 0x1b,
  742. 0x5b, 0x35, 0x70, 0x82, 0xbd, 0xc0, 0xb3, 0xbd, 0xb1, 0x1a, 0xac, 0x1f, 0x0c, 0x03, 0x25, 0x27,
  743. 0x70, 0xb0, 0x3b, 0x1c, 0x1b, 0xdb, 0x08, 0x81, 0x7e, 0xee, 0xd8, 0xde, 0x35, 0x11, 0x79, 0xab,
  744. 0xa1, 0x8a, 0x32, 0x2a, 0xbc, 0x2a, 0x13, 0x0b, 0xb7, 0x0a, 0x0a, 0x46, 0x97, 0x8e, 0x77, 0x15,
  745. 0x18, 0xf4, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, 0xc5, 0xf2, 0xc6, 0x3e, 0xfc, 0x07, 0x00, 0x00,
  746. }