@paakd/api 0.0.2 → 0.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/package.json +11 -9
  2. package/buf/validate/validate_pb.ts +0 -5001
  3. package/gen/buf/validate/validate_pb.ts +0 -4799
  4. package/gen/src/proto/auth/v1/authv1connect/service.connect.go +0 -454
  5. package/gen/src/proto/auth/v1/entities/auth.pb.go +0 -818
  6. package/gen/src/proto/auth/v1/entities/auth_pb.ts +0 -348
  7. package/gen/src/proto/auth/v1/entities/policy.pb.go +0 -727
  8. package/gen/src/proto/auth/v1/entities/policy_pb.ts +0 -306
  9. package/gen/src/proto/auth/v1/service-AuthService_connectquery.ts +0 -70
  10. package/gen/src/proto/auth/v1/service.pb.go +0 -119
  11. package/gen/src/proto/auth/v1/service_pb.ts +0 -152
  12. package/gen/src/proto/customers/v1/customersv1connect/service.connect.go +0 -358
  13. package/gen/src/proto/customers/v1/entities/address.pb.go +0 -1073
  14. package/gen/src/proto/customers/v1/entities/address_pb.ts +0 -478
  15. package/gen/src/proto/customers/v1/entities/profile.pb.go +0 -633
  16. package/gen/src/proto/customers/v1/entities/profile_pb.ts +0 -252
  17. package/gen/src/proto/customers/v1/service-CustomerService_connectquery.ts +0 -50
  18. package/gen/src/proto/customers/v1/service.pb.go +0 -110
  19. package/gen/src/proto/customers/v1/service_pb.ts +0 -121
  20. package/gen/src/proto/files/v1/entities/file.pb.go +0 -669
  21. package/gen/src/proto/files/v1/entities/file_pb.ts +0 -265
  22. package/gen/src/proto/files/v1/filesv1connect/service.connect.go +0 -200
  23. package/gen/src/proto/files/v1/service-FileService_connectquery.ts +0 -25
  24. package/gen/src/proto/files/v1/service.pb.go +0 -85
  25. package/gen/src/proto/files/v1/service_pb.ts +0 -65
  26. package/gen/src/proto/products/v1/entities/category.pb.go +0 -744
  27. package/gen/src/proto/products/v1/entities/category_pb.ts +0 -318
  28. package/gen/src/proto/products/v1/entities/collection.pb.go +0 -528
  29. package/gen/src/proto/products/v1/entities/collection_pb.ts +0 -214
  30. package/gen/src/proto/products/v1/entities/product/create.pb.go +0 -453
  31. package/gen/src/proto/products/v1/entities/product/create_pb.ts +0 -199
  32. package/gen/src/proto/products/v1/entities/product/option.pb.go +0 -206
  33. package/gen/src/proto/products/v1/entities/product/option_pb.ts +0 -74
  34. package/gen/src/proto/products/v1/entities/product/shared.pb.go +0 -2890
  35. package/gen/src/proto/products/v1/entities/product/shared_pb.ts +0 -1317
  36. package/gen/src/proto/products/v1/entities/product/update.pb.go +0 -794
  37. package/gen/src/proto/products/v1/entities/product/update_pb.ts +0 -325
  38. package/gen/src/proto/products/v1/entities/tag.pb.go +0 -610
  39. package/gen/src/proto/products/v1/entities/tag_pb.ts +0 -233
  40. package/gen/src/proto/products/v1/entities/taxonomy.pb.go +0 -1352
  41. package/gen/src/proto/products/v1/entities/taxonomy_pb.ts +0 -606
  42. package/gen/src/proto/products/v1/entities/type.pb.go +0 -553
  43. package/gen/src/proto/products/v1/entities/type_pb.ts +0 -215
  44. package/gen/src/proto/products/v1/entities/variant.pb.go +0 -1474
  45. package/gen/src/proto/products/v1/entities/variant_pb.ts +0 -629
  46. package/gen/src/proto/products/v1/productsv1connect/service.connect.go +0 -1195
  47. package/gen/src/proto/products/v1/service-ProductsService_connectquery.ts +0 -199
  48. package/gen/src/proto/products/v1/service.pb.go +0 -250
  49. package/gen/src/proto/products/v1/service_pb.ts +0 -429
  50. package/gen/src/proto/promotions/v1/entities/campaign.pb.go +0 -1229
  51. package/gen/src/proto/promotions/v1/entities/campaign_pb.ts +0 -511
  52. package/gen/src/proto/promotions/v1/promotionsv1connect/service.connect.go +0 -289
  53. package/gen/src/proto/promotions/v1/service-CampaignService_connectquery.ts +0 -42
  54. package/gen/src/proto/promotions/v1/service.pb.go +0 -98
  55. package/gen/src/proto/promotions/v1/service_pb.ts +0 -95
  56. package/gen/src/proto/stocknodes/v1/entities/stocknode.pb.go +0 -1499
  57. package/gen/src/proto/stocknodes/v1/entities/stocknode_pb.ts +0 -655
  58. package/gen/src/proto/stocknodes/v1/service-StockNodesService_connectquery.ts +0 -41
  59. package/gen/src/proto/stocknodes/v1/service.pb.go +0 -98
  60. package/gen/src/proto/stocknodes/v1/service_pb.ts +0 -95
  61. package/gen/src/proto/stocknodes/v1/stocknodesv1connect/service.connect.go +0 -297
@@ -1,4799 +0,0 @@
1
- // Copyright 2023-2025 Buf Technologies, Inc.
2
- //
3
- // Licensed under the Apache License, Version 2.0 (the "License");
4
- // you may not use this file except in compliance with the License.
5
- // You may obtain a copy of the License at
6
- //
7
- // http://www.apache.org/licenses/LICENSE-2.0
8
- //
9
- // Unless required by applicable law or agreed to in writing, software
10
- // distributed under the License is distributed on an "AS IS" BASIS,
11
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
- // See the License for the specific language governing permissions and
13
- // limitations under the License.
14
-
15
- // @generated by protoc-gen-es v2.10.1 with parameter "target=ts"
16
- // @generated from file buf/validate/validate.proto (package buf.validate, syntax proto2)
17
- /* eslint-disable */
18
-
19
- import type { GenEnum, GenExtension, GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
20
- import { enumDesc, extDesc, fileDesc, messageDesc } from "@bufbuild/protobuf/codegenv2";
21
- import type { Duration, FieldDescriptorProto_Type, FieldOptions, MessageOptions, OneofOptions, Timestamp } from "@bufbuild/protobuf/wkt";
22
- import { file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp } from "@bufbuild/protobuf/wkt";
23
- import type { Message } from "@bufbuild/protobuf";
24
-
25
- /**
26
- * Describes the file buf/validate/validate.proto.
27
- */
28
- export const file_buf_validate_validate: GenFile = /*@__PURE__*/
29
- fileDesc("ChtidWYvdmFsaWRhdGUvdmFsaWRhdGUucHJvdG8SDGJ1Zi52YWxpZGF0ZSI3CgRSdWxlEgoKAmlkGAEgASgJEg8KB21lc3NhZ2UYAiABKAkSEgoKZXhwcmVzc2lvbhgDIAEoCSJwCgxNZXNzYWdlUnVsZXMSEAoIZGlzYWJsZWQYASABKAgSHwoDY2VsGAMgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGUSLQoFb25lb2YYBCADKAsyHi5idWYudmFsaWRhdGUuTWVzc2FnZU9uZW9mUnVsZSI0ChBNZXNzYWdlT25lb2ZSdWxlEg4KBmZpZWxkcxgBIAMoCRIQCghyZXF1aXJlZBgCIAEoCCIeCgpPbmVvZlJ1bGVzEhAKCHJlcXVpcmVkGAEgASgIIr8ICgpGaWVsZFJ1bGVzEh8KA2NlbBgXIAMoCzISLmJ1Zi52YWxpZGF0ZS5SdWxlEhAKCHJlcXVpcmVkGBkgASgIEiQKBmlnbm9yZRgbIAEoDjIULmJ1Zi52YWxpZGF0ZS5JZ25vcmUSKQoFZmxvYXQYASABKAsyGC5idWYudmFsaWRhdGUuRmxvYXRSdWxlc0gAEisKBmRvdWJsZRgCIAEoCzIZLmJ1Zi52YWxpZGF0ZS5Eb3VibGVSdWxlc0gAEikKBWludDMyGAMgASgLMhguYnVmLnZhbGlkYXRlLkludDMyUnVsZXNIABIpCgVpbnQ2NBgEIAEoCzIYLmJ1Zi52YWxpZGF0ZS5JbnQ2NFJ1bGVzSAASKwoGdWludDMyGAUgASgLMhkuYnVmLnZhbGlkYXRlLlVJbnQzMlJ1bGVzSAASKwoGdWludDY0GAYgASgLMhkuYnVmLnZhbGlkYXRlLlVJbnQ2NFJ1bGVzSAASKwoGc2ludDMyGAcgASgLMhkuYnVmLnZhbGlkYXRlLlNJbnQzMlJ1bGVzSAASKwoGc2ludDY0GAggASgLMhkuYnVmLnZhbGlkYXRlLlNJbnQ2NFJ1bGVzSAASLQoHZml4ZWQzMhgJIAEoCzIaLmJ1Zi52YWxpZGF0ZS5GaXhlZDMyUnVsZXNIABItCgdmaXhlZDY0GAogASgLMhouYnVmLnZhbGlkYXRlLkZpeGVkNjRSdWxlc0gAEi8KCHNmaXhlZDMyGAsgASgLMhsuYnVmLnZhbGlkYXRlLlNGaXhlZDMyUnVsZXNIABIvCghzZml4ZWQ2NBgMIAEoCzIbLmJ1Zi52YWxpZGF0ZS5TRml4ZWQ2NFJ1bGVzSAASJwoEYm9vbBgNIAEoCzIXLmJ1Zi52YWxpZGF0ZS5Cb29sUnVsZXNIABIrCgZzdHJpbmcYDiABKAsyGS5idWYudmFsaWRhdGUuU3RyaW5nUnVsZXNIABIpCgVieXRlcxgPIAEoCzIYLmJ1Zi52YWxpZGF0ZS5CeXRlc1J1bGVzSAASJwoEZW51bRgQIAEoCzIXLmJ1Zi52YWxpZGF0ZS5FbnVtUnVsZXNIABIvCghyZXBlYXRlZBgSIAEoCzIbLmJ1Zi52YWxpZGF0ZS5SZXBlYXRlZFJ1bGVzSAASJQoDbWFwGBMgASgLMhYuYnVmLnZhbGlkYXRlLk1hcFJ1bGVzSAASJQoDYW55GBQgASgLMhYuYnVmLnZhbGlkYXRlLkFueVJ1bGVzSAASLwoIZHVyYXRpb24YFSABKAsyGy5idWYudmFsaWRhdGUuRHVyYXRpb25SdWxlc0gAEjEKCXRpbWVzdGFtcBgWIAEoCzIcLmJ1Zi52YWxpZGF0ZS5UaW1lc3RhbXBSdWxlc0gAQgYKBHR5cGVKBAgYEBlKBAgaEBtSB3NraXBwZWRSDGlnbm9yZV9lbXB0eSJTCg9QcmVkZWZpbmVkUnVsZXMSHwoDY2VsGAEgAygLMhIuYnVmLnZhbGlkYXRlLlJ1bGVKBAgYEBlKBAgaEBtSE3NraXBwZWRpZ25vcmVfZW1wdHki2hcKCkZsb2F0UnVsZXMSgwEKBWNvbnN0GAEgASgCQnTCSHEKbwoLZmxvYXQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKfAQoCbHQYAiABKAJCkAHCSIwBCokBCghmbG9hdC5sdBp9IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKvAQoDbHRlGAMgASgCQp8BwkibAQqYAQoJZmxvYXQubHRlGooBIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+IHJ1bGVzLmx0ZSk/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAAS7wcKAmd0GAQgASgCQuAHwkjcBwqNAQoIZmxvYXQuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrDAQoLZmxvYXQuZ3RfbHQaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrNAQoVZmxvYXQuZ3RfbHRfZXhjbHVzaXZlGrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycK0wEKDGZsb2F0Lmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt0BChZmbG9hdC5ndF9sdGVfZXhjbHVzaXZlGsIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARK6CAoDZ3RlGAUgASgCQqoIwkimCAqbAQoJZmxvYXQuZ3RlGo0BIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmICh0aGlzLmlzTmFuKCkgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCtIBCgxmbG9hdC5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtwBChZmbG9hdC5ndGVfbHRfZXhjbHVzaXZlGsEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwriAQoNZmxvYXQuZ3RlX2x0ZRrQAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK7AEKF2Zsb2F0Lmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEn8KAmluGAYgAygCQnPCSHAKbgoIZmxvYXQuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgHIAMoAkJmwkhjCmEKDGZsb2F0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnUKBmZpbml0ZRgIIAEoCEJlwkhiCmAKDGZsb2F0LmZpbml0ZRpQcnVsZXMuZmluaXRlID8gKHRoaXMuaXNOYW4oKSB8fCB0aGlzLmlzSW5mKCkgPyAndmFsdWUgbXVzdCBiZSBmaW5pdGUnIDogJycpIDogJycSKwoHZXhhbXBsZRgJIAMoAkIawkgXChUKDWZsb2F0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIu0XCgtEb3VibGVSdWxlcxKEAQoFY29uc3QYASABKAFCdcJIcgpwCgxkb3VibGUuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKgAQoCbHQYAiABKAFCkQHCSI0BCooBCglkb3VibGUubHQafSFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQpPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASsAEKA2x0ZRgDIAEoAUKgAcJInAEKmQEKCmRvdWJsZS5sdGUaigEhaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzID4gcnVsZXMubHRlKT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABL0BwoCZ3QYBCABKAFC5QfCSOEHCo4BCglkb3VibGUuZ3QagAEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwrEAQoMZG91YmxlLmd0X2x0GrMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKzgEKFmRvdWJsZS5ndF9sdF9leGNsdXNpdmUaswFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrUAQoNZG91YmxlLmd0X2x0ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCt4BChdkb3VibGUuZ3RfbHRlX2V4Y2x1c2l2ZRrCAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESvwgKA2d0ZRgFIAEoAUKvCMJIqwgKnAEKCmRvdWJsZS5ndGUajQEhaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgKHRoaXMuaXNOYW4oKSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycK0wEKDWRvdWJsZS5ndGVfbHQawQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCt0BChdkb3VibGUuZ3RlX2x0X2V4Y2x1c2l2ZRrBAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHRoaXMuaXNOYW4oKSB8fCAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK4wEKDmRvdWJsZS5ndGVfbHRlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcy5pc05hbigpIHx8IHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrtAQoYZG91YmxlLmd0ZV9sdGVfZXhjbHVzaXZlGtABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmICh0aGlzLmlzTmFuKCkgfHwgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSkpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoAUJ0wkhxCm8KCWRvdWJsZS5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygBQmfCSGQKYgoNZG91YmxlLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEnYKBmZpbml0ZRgIIAEoCEJmwkhjCmEKDWRvdWJsZS5maW5pdGUaUHJ1bGVzLmZpbml0ZSA/ICh0aGlzLmlzTmFuKCkgfHwgdGhpcy5pc0luZigpID8gJ3ZhbHVlIG11c3QgYmUgZmluaXRlJyA6ICcnKSA6ICcnEiwKB2V4YW1wbGUYCSADKAFCG8JIGAoWCg5kb3VibGUuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDMyUnVsZXMSgwEKBWNvbnN0GAEgASgFQnTCSHEKbwoLaW50MzIuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKAVCfMJIeQp3CghpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgFQowBwkiIAQqFAQoJaW50MzIubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKAVCiAfCSIQHCnoKCGludDMyLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQzMi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50MzIuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoBULTB8JIzwcKiAEKCWludDMyLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQzMi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQzMi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQzMi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoBUJzwkhwCm4KCGludDMyLmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKAVCZsJIYwphCgxpbnQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAggAygFQhrCSBcKFQoNaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ijBUKCkludDY0UnVsZXMSgwEKBWNvbnN0GAEgASgDQnTCSHEKbwoLaW50NjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKKAQoCbHQYAiABKANCfMJIeQp3CghpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKcAQoDbHRlGAMgASgDQowBwkiIAQqFAQoJaW50NjQubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABKXBwoCZ3QYBCABKANCiAfCSIQHCnoKCGludDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwqzAQoLaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrsBChVpbnQ2NC5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrDAQoMaW50NjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrLAQoWaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES4wcKA2d0ZRgFIAEoA0LTB8JIzwcKiAEKCWludDY0Lmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsIBCgxpbnQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKygEKFmludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtIBCg1pbnQ2NC5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCtoBChdpbnQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJ/CgJpbhgGIAMoA0JzwkhwCm4KCGludDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ2CgZub3RfaW4YByADKANCZsJIYwphCgxpbnQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIrCgdleGFtcGxlGAkgAygDQhrCSBcKFQoNaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoDUJ1wkhyCnAKDHVpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoDUJ9wkh6CngKCXVpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgNQo0BwkiJAQqGAQoKdWludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgNQo0HwkiJBwp7Cgl1aW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoDULYB8JI1AcKiQEKCnVpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoDUJ0wkhxCm8KCXVpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygNQmfCSGQKYgoNdWludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKA1CG8JIGAoWCg51aW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1VJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoBEJ1wkhyCnAKDHVpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoBEJ9wkh6CngKCXVpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgEQo0BwkiJAQqGAQoKdWludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgEQo0HwkiJBwp7Cgl1aW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgx1aW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZ1aW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXVpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChd1aW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoBELYB8JI1AcKiQEKCnVpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNdWludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXdWludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg51aW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYdWludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoBEJ0wkhxCm8KCXVpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygEQmfCSGQKYgoNdWludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKARCG8JIGAoWCg51aW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQzMlJ1bGVzEoQBCgVjb25zdBgBIAEoEUJ1wkhyCnAKDHNpbnQzMi5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEUJ9wkh6CngKCXNpbnQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgRQo0BwkiJAQqGAQoKc2ludDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgRQo0HwkiJBwp7CglzaW50MzIuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50MzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50MzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQzMi5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50MzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEULYB8JI1AcKiQEKCnNpbnQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDMyLmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50MzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDMyLmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEUJ0wkhxCm8KCXNpbnQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygRQmfCSGQKYgoNc2ludDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBFCG8JIGAoWCg5zaW50MzIuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4inhUKC1NJbnQ2NFJ1bGVzEoQBCgVjb25zdBgBIAEoEkJ1wkhyCnAKDHNpbnQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEosBCgJsdBgCIAEoEkJ9wkh6CngKCXNpbnQ2NC5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKdAQoDbHRlGAMgASgSQo0BwkiJAQqGAQoKc2ludDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASnAcKAmd0GAQgASgSQo0HwkiJBwp7CglzaW50NjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrQBCgxzaW50NjQuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCrwBChZzaW50NjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxAEKDXNpbnQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCswBChdzaW50NjQuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES6AcKA2d0ZRgFIAEoEkLYB8JI1AcKiQEKCnNpbnQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrDAQoNc2ludDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrLAQoXc2ludDY0Lmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtMBCg5zaW50NjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrbAQoYc2ludDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoABCgJpbhgGIAMoEkJ0wkhxCm8KCXNpbnQ2NC5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAcgAygSQmfCSGQKYgoNc2ludDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEiwKB2V4YW1wbGUYCCADKBJCG8JIGAoWCg5zaW50NjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4irxUKDEZpeGVkMzJSdWxlcxKFAQoFY29uc3QYASABKAdCdsJIcwpxCg1maXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjAEKAmx0GAIgASgHQn7CSHsKeQoKZml4ZWQzMi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABKeAQoDbHRlGAMgASgHQo4BwkiKAQqHAQoLZml4ZWQzMi5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqEHCgJndBgEIAEoB0KSB8JIjgcKfAoKZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtQEKDWZpeGVkMzIuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr0BChdmaXhlZDMyLmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsUBCg5maXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzQEKGGZpeGVkMzIuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAES7QcKA2d0ZRgFIAEoB0LdB8JI2QcKigEKC2ZpeGVkMzIuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxAEKDmZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCswBChhmaXhlZDMyLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtQBCg9maXhlZDMyLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3AEKGWZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESgQEKAmluGAYgAygHQnXCSHIKcAoKZml4ZWQzMi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSeAoGbm90X2luGAcgAygHQmjCSGUKYwoOZml4ZWQzMi5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxItCgdleGFtcGxlGAggAygHQhzCSBkKFwoPZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKvFQoMRml4ZWQ2NFJ1bGVzEoUBCgVjb25zdBgBIAEoBkJ2wkhzCnEKDWZpeGVkNjQuY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKMAQoCbHQYAiABKAZCfsJIewp5CgpmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp4BCgNsdGUYAyABKAZCjgHCSIoBCocBCgtmaXhlZDY0Lmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASoQcKAmd0GAQgASgGQpIHwkiOBwp8CgpmaXhlZDY0Lmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq1AQoNZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvQEKF2ZpeGVkNjQuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxQEKDmZpeGVkNjQuZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrNAQoYZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLtBwoDZ3RlGAUgASgGQt0HwkjZBwqKAQoLZml4ZWQ2NC5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrEAQoOZml4ZWQ2NC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzAEKGGZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1AEKD2ZpeGVkNjQuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrcAQoZZml4ZWQ2NC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKBAQoCaW4YBiADKAZCdcJIcgpwCgpmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ4CgZub3RfaW4YByADKAZCaMJIZQpjCg5maXhlZDY0Lm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi0KB2V4YW1wbGUYCCADKAZCHMJIGQoXCg9maXhlZDY0LmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkILCglsZXNzX3RoYW5CDgoMZ3JlYXRlcl90aGFuIsAVCg1TRml4ZWQzMlJ1bGVzEoYBCgVjb25zdBgBIAEoD0J3wkh0CnIKDnNmaXhlZDMyLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSjQEKAmx0GAIgASgPQn/CSHwKegoLc2ZpeGVkMzIubHQaayFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID49IHJ1bGVzLmx0PyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMubHRdKSA6ICcnSAASnwEKA2x0ZRgDIAEoD0KPAcJIiwEKiAEKDHNmaXhlZDMyLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASpgcKAmd0GAQgASgPQpcHwkiTBwp9CgtzZml4ZWQzMi5ndBpuIWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPD0gcnVsZXMuZ3Q/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndF0pIDogJycKtgEKDnNmaXhlZDMyLmd0X2x0GqMBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndCAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwq+AQoYc2ZpeGVkMzIuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxgEKD3NmaXhlZDMyLmd0X2x0ZRqyAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndCAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJycKzgEKGXNmaXhlZDMyLmd0X2x0ZV9leGNsdXNpdmUasAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndCAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJ0gBEvIHCgNndGUYBSABKA9C4gfCSN4HCosBCgxzZml4ZWQzMi5ndGUaeyFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDwgcnVsZXMuZ3RlPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlXSkgOiAnJwrFAQoPc2ZpeGVkMzIuZ3RlX2x0GrEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCs0BChlzZml4ZWQzMi5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrVAQoQc2ZpeGVkMzIuZ3RlX2x0ZRrAAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA+PSBydWxlcy5ndGUgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJwrdAQoac2ZpeGVkMzIuZ3RlX2x0ZV9leGNsdXNpdmUavgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnSAESggEKAmluGAYgAygPQnbCSHMKcQoLc2ZpeGVkMzIuaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnkKBm5vdF9pbhgHIAMoD0JpwkhmCmQKD3NmaXhlZDMyLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEi4KB2V4YW1wbGUYCCADKA9CHcJIGgoYChBzZml4ZWQzMi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiLAFQoNU0ZpeGVkNjRSdWxlcxKGAQoFY29uc3QYASABKBBCd8JIdApyCg5zZml4ZWQ2NC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEo0BCgJsdBgCIAEoEEJ/wkh8CnoKC3NmaXhlZDY0Lmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAEp8BCgNsdGUYAyABKBBCjwHCSIsBCogBCgxzZml4ZWQ2NC5sdGUaeCFoYXMocnVsZXMuZ3RlKSAmJiAhaGFzKHJ1bGVzLmd0KSAmJiB0aGlzID4gcnVsZXMubHRlPyAndmFsdWUgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMubHRlXSkgOiAnJ0gAEqYHCgJndBgEIAEoEEKXB8JIkwcKfQoLc2ZpeGVkNjQuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrYBCg5zZml4ZWQ2NC5ndF9sdBqjAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPj0gcnVsZXMubHQgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKvgEKGHNmaXhlZDY0Lmd0X2x0X2V4Y2x1c2l2ZRqhAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndCAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDw9IHJ1bGVzLmd0KT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCsYBCg9zZml4ZWQ2NC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs4BChlzZml4ZWQ2NC5ndF9sdGVfZXhjbHVzaXZlGrABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0ZSA8IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0ZV0pIDogJydIARLyBwoDZ3RlGAUgASgQQuIHwkjeBwqLAQoMc2ZpeGVkNjQuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxQEKD3NmaXhlZDY0Lmd0ZV9sdBqxAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPj0gcnVsZXMuZ3RlICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrNAQoZc2ZpeGVkNjQuZ3RlX2x0X2V4Y2x1c2l2ZRqvAWhhcyhydWxlcy5sdCkgJiYgcnVsZXMubHQgPCBydWxlcy5ndGUgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8IHJ1bGVzLmd0ZSk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycK1QEKEHNmaXhlZDY0Lmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3QEKGnNmaXhlZDY0Lmd0ZV9sdGVfZXhjbHVzaXZlGr4BaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlIDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRlXSkgOiAnJ0gBEoIBCgJpbhgGIAMoEEJ2wkhzCnEKC3NmaXhlZDY0LmluGmIhKHRoaXMgaW4gZ2V0RmllbGQocnVsZXMsICdpbicpKSA/ICd2YWx1ZSBtdXN0IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdpbicpXSkgOiAnJxJ5CgZub3RfaW4YByADKBBCacJIZgpkCg9zZml4ZWQ2NC5ub3RfaW4aUXRoaXMgaW4gcnVsZXMubm90X2luID8gJ3ZhbHVlIG11c3Qgbm90IGJlIGluIGxpc3QgJXMnLmZvcm1hdChbcnVsZXMubm90X2luXSkgOiAnJxIuCgdleGFtcGxlGAggAygQQh3CSBoKGAoQc2ZpeGVkNjQuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACQgsKCWxlc3NfdGhhbkIOCgxncmVhdGVyX3RoYW4ixwEKCUJvb2xSdWxlcxKCAQoFY29uc3QYASABKAhCc8JIcApuCgpib29sLmNvbnN0GmB0aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGVxdWFsICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSKgoHZXhhbXBsZRgCIAMoCEIZwkgWChQKDGJvb2wuZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIpA3CgtTdHJpbmdSdWxlcxKGAQoFY29uc3QYASABKAlCd8JIdApyCgxzdHJpbmcuY29uc3QaYnRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgYCVzYCcuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEn4KA2xlbhgTIAEoBEJxwkhuCmwKCnN0cmluZy5sZW4aXnVpbnQodGhpcy5zaXplKCkpICE9IHJ1bGVzLmxlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLmxlbl0pIDogJycSmQEKB21pbl9sZW4YAiABKARChwHCSIMBCoABCg5zdHJpbmcubWluX2xlbhpudWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fbGVuID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlIGF0IGxlYXN0ICVzIGNoYXJhY3RlcnMnLmZvcm1hdChbcnVsZXMubWluX2xlbl0pIDogJycSlwEKB21heF9sZW4YAyABKARChQHCSIEBCn8KDnN0cmluZy5tYXhfbGVuGm11aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBjaGFyYWN0ZXJzJy5mb3JtYXQoW3J1bGVzLm1heF9sZW5dKSA6ICcnEpsBCglsZW5fYnl0ZXMYFCABKARChwHCSIMBCoABChBzdHJpbmcubGVuX2J5dGVzGmx1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgIT0gcnVsZXMubGVuX2J5dGVzID8gJ3ZhbHVlIGxlbmd0aCBtdXN0IGJlICVzIGJ5dGVzJy5mb3JtYXQoW3J1bGVzLmxlbl9ieXRlc10pIDogJycSowEKCW1pbl9ieXRlcxgEIAEoBEKPAcJIiwEKiAEKEHN0cmluZy5taW5fYnl0ZXMadHVpbnQoYnl0ZXModGhpcykuc2l6ZSgpKSA8IHJ1bGVzLm1pbl9ieXRlcyA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fYnl0ZXNdKSA6ICcnEqIBCgltYXhfYnl0ZXMYBSABKARCjgHCSIoBCocBChBzdHJpbmcubWF4X2J5dGVzGnN1aW50KGJ5dGVzKHRoaXMpLnNpemUoKSkgPiBydWxlcy5tYXhfYnl0ZXMgPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgYXQgbW9zdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5tYXhfYnl0ZXNdKSA6ICcnEo0BCgdwYXR0ZXJuGAYgASgJQnzCSHkKdwoOc3RyaW5nLnBhdHRlcm4aZSF0aGlzLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgZG9lcyBub3QgbWF0Y2ggcmVnZXggcGF0dGVybiBgJXNgJy5mb3JtYXQoW3J1bGVzLnBhdHRlcm5dKSA6ICcnEoQBCgZwcmVmaXgYByABKAlCdMJIcQpvCg1zdHJpbmcucHJlZml4Gl4hdGhpcy5zdGFydHNXaXRoKHJ1bGVzLnByZWZpeCkgPyAndmFsdWUgZG9lcyBub3QgaGF2ZSBwcmVmaXggYCVzYCcuZm9ybWF0KFtydWxlcy5wcmVmaXhdKSA6ICcnEoIBCgZzdWZmaXgYCCABKAlCcsJIbwptCg1zdHJpbmcuc3VmZml4GlwhdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4IGAlc2AnLmZvcm1hdChbcnVsZXMuc3VmZml4XSkgOiAnJxKQAQoIY29udGFpbnMYCSABKAlCfsJIewp5Cg9zdHJpbmcuY29udGFpbnMaZiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluIHN1YnN0cmluZyBgJXNgJy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKYAQoMbm90X2NvbnRhaW5zGBcgASgJQoEBwkh+CnwKE3N0cmluZy5ub3RfY29udGFpbnMaZXRoaXMuY29udGFpbnMocnVsZXMubm90X2NvbnRhaW5zKSA/ICd2YWx1ZSBjb250YWlucyBzdWJzdHJpbmcgYCVzYCcuZm9ybWF0KFtydWxlcy5ub3RfY29udGFpbnNdKSA6ICcnEoABCgJpbhgKIAMoCUJ0wkhxCm8KCXN0cmluZy5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSdwoGbm90X2luGAsgAygJQmfCSGQKYgoNc3RyaW5nLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEt8BCgVlbWFpbBgMIAEoCELNAcJIyQEKYQoMc3RyaW5nLmVtYWlsEiN2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcxosIXJ1bGVzLmVtYWlsIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0VtYWlsKCkKZAoSc3RyaW5nLmVtYWlsX2VtcHR5EjJ2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgZW1haWwgYWRkcmVzcxoaIXJ1bGVzLmVtYWlsIHx8IHRoaXMgIT0gJydIABLnAQoIaG9zdG5hbWUYDSABKAhC0gHCSM4BCmUKD3N0cmluZy5ob3N0bmFtZRIedmFsdWUgbXVzdCBiZSBhIHZhbGlkIGhvc3RuYW1lGjIhcnVsZXMuaG9zdG5hbWUgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKQplChVzdHJpbmcuaG9zdG5hbWVfZW1wdHkSLXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0bmFtZRodIXJ1bGVzLmhvc3RuYW1lIHx8IHRoaXMgIT0gJydIABLHAQoCaXAYDiABKAhCuAHCSLQBClUKCXN0cmluZy5pcBIgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQIGFkZHJlc3MaJiFydWxlcy5pcCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCgpClsKD3N0cmluZy5pcF9lbXB0eRIvdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIGFkZHJlc3MaFyFydWxlcy5pcCB8fCB0aGlzICE9ICcnSAAS1gEKBGlwdjQYDyABKAhCxQHCSMEBClwKC3N0cmluZy5pcHY0EiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NCBhZGRyZXNzGikhcnVsZXMuaXB2NCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcCg0KQphChFzdHJpbmcuaXB2NF9lbXB0eRIxdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcxoZIXJ1bGVzLmlwdjQgfHwgdGhpcyAhPSAnJ0gAEtYBCgRpcHY2GBAgASgIQsUBwkjBAQpcCgtzdHJpbmcuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxopIXJ1bGVzLmlwdjYgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXAoNikKYQoRc3RyaW5nLmlwdjZfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IGFkZHJlc3MaGSFydWxlcy5pcHY2IHx8IHRoaXMgIT0gJydIABK/AQoDdXJpGBEgASgIQq8BwkirAQpRCgpzdHJpbmcudXJpEhl2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgVVJJGighcnVsZXMudXJpIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc1VyaSgpClYKEHN0cmluZy51cmlfZW1wdHkSKHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBVUkkaGCFydWxlcy51cmkgfHwgdGhpcyAhPSAnJ0gAEnAKB3VyaV9yZWYYEiABKAhCXcJIWgpYCg5zdHJpbmcudXJpX3JlZhIjdmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVSSSBSZWZlcmVuY2UaISFydWxlcy51cmlfcmVmIHx8IHRoaXMuaXNVcmlSZWYoKUgAEpACCgdhZGRyZXNzGBUgASgIQvwBwkj4AQqBAQoOc3RyaW5nLmFkZHJlc3MSLXZhbHVlIG11c3QgYmUgYSB2YWxpZCBob3N0bmFtZSwgb3IgaXAgYWRkcmVzcxpAIXJ1bGVzLmFkZHJlc3MgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdG5hbWUoKSB8fCB0aGlzLmlzSXAoKQpyChRzdHJpbmcuYWRkcmVzc19lbXB0eRI8dmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIGhvc3RuYW1lLCBvciBpcCBhZGRyZXNzGhwhcnVsZXMuYWRkcmVzcyB8fCB0aGlzICE9ICcnSAASmAIKBHV1aWQYFiABKAhChwLCSIMCCqUBCgtzdHJpbmcudXVpZBIadmFsdWUgbXVzdCBiZSBhIHZhbGlkIFVVSUQaeiFydWxlcy51dWlkIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCdeWzAtOWEtZkEtRl17OH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17NH0tWzAtOWEtZkEtRl17MTJ9JCcpClkKEXN0cmluZy51dWlkX2VtcHR5Eil2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgVVVJRBoZIXJ1bGVzLnV1aWQgfHwgdGhpcyAhPSAnJ0gAEvABCgV0dXVpZBghIAEoCELeAcJI2gEKcwoMc3RyaW5nLnR1dWlkEiJ2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgdHJpbW1lZCBVVUlEGj8hcnVsZXMudHV1aWQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLm1hdGNoZXMoJ15bMC05YS1mQS1GXXszMn0kJykKYwoSc3RyaW5nLnR1dWlkX2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgdHJpbW1lZCBVVUlEGhohcnVsZXMudHV1aWQgfHwgdGhpcyAhPSAnJ0gAEpYCChFpcF93aXRoX3ByZWZpeGxlbhgaIAEoCEL4AcJI9AEKeAoYc3RyaW5nLmlwX3dpdGhfcHJlZml4bGVuEh92YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVAgcHJlZml4GjshcnVsZXMuaXBfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoKQp4Ch5zdHJpbmcuaXBfd2l0aF9wcmVmaXhsZW5fZW1wdHkSLnZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUCBwcmVmaXgaJiFydWxlcy5pcF93aXRoX3ByZWZpeGxlbiB8fCB0aGlzICE9ICcnSAASzwIKE2lwdjRfd2l0aF9wcmVmaXhsZW4YGyABKAhCrwLCSKsCCpMBChpzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbhI1dmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaPiFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQpCpIBCiBzdHJpbmcuaXB2NF93aXRoX3ByZWZpeGxlbl9lbXB0eRJEdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgYWRkcmVzcyB3aXRoIHByZWZpeCBsZW5ndGgaKCFydWxlcy5pcHY0X3dpdGhfcHJlZml4bGVuIHx8IHRoaXMgIT0gJydIABLPAgoTaXB2Nl93aXRoX3ByZWZpeGxlbhgcIAEoCEKvAsJIqwIKkwEKGnN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuEjV2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBo+IXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgoNikKkgEKIHN0cmluZy5pcHY2X3dpdGhfcHJlZml4bGVuX2VtcHR5EkR2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzIHdpdGggcHJlZml4IGxlbmd0aBooIXJ1bGVzLmlwdjZfd2l0aF9wcmVmaXhsZW4gfHwgdGhpcyAhPSAnJ0gAEvIBCglpcF9wcmVmaXgYHSABKAhC3AHCSNgBCmwKEHN0cmluZy5pcF9wcmVmaXgSH3ZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBwcmVmaXgaNyFydWxlcy5pcF9wcmVmaXggfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSXBQcmVmaXgodHJ1ZSkKaAoWc3RyaW5nLmlwX3ByZWZpeF9lbXB0eRIudmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQIHByZWZpeBoeIXJ1bGVzLmlwX3ByZWZpeCB8fCB0aGlzICE9ICcnSAASgwIKC2lwdjRfcHJlZml4GB4gASgIQusBwkjnAQp1ChJzdHJpbmcuaXB2NF9wcmVmaXgSIXZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUHY0IHByZWZpeBo8IXJ1bGVzLmlwdjRfcHJlZml4IHx8IHRoaXMgPT0gJycgfHwgdGhpcy5pc0lwUHJlZml4KDQsIHRydWUpCm4KGHN0cmluZy5pcHY0X3ByZWZpeF9lbXB0eRIwdmFsdWUgaXMgZW1wdHksIHdoaWNoIGlzIG5vdCBhIHZhbGlkIElQdjQgcHJlZml4GiAhcnVsZXMuaXB2NF9wcmVmaXggfHwgdGhpcyAhPSAnJ0gAEoMCCgtpcHY2X3ByZWZpeBgfIAEoCELrAcJI5wEKdQoSc3RyaW5nLmlwdjZfcHJlZml4EiF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSVB2NiBwcmVmaXgaPCFydWxlcy5pcHY2X3ByZWZpeCB8fCB0aGlzID09ICcnIHx8IHRoaXMuaXNJcFByZWZpeCg2LCB0cnVlKQpuChhzdHJpbmcuaXB2Nl9wcmVmaXhfZW1wdHkSMHZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY2IHByZWZpeBogIXJ1bGVzLmlwdjZfcHJlZml4IHx8IHRoaXMgIT0gJydIABK1AgoNaG9zdF9hbmRfcG9ydBggIAEoCEKbAsJIlwIKmQEKFHN0cmluZy5ob3N0X2FuZF9wb3J0EkF2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgaG9zdCAoaG9zdG5hbWUgb3IgSVAgYWRkcmVzcykgYW5kIHBvcnQgcGFpcho+IXJ1bGVzLmhvc3RfYW5kX3BvcnQgfHwgdGhpcyA9PSAnJyB8fCB0aGlzLmlzSG9zdEFuZFBvcnQodHJ1ZSkKeQoac3RyaW5nLmhvc3RfYW5kX3BvcnRfZW1wdHkSN3ZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBob3N0IGFuZCBwb3J0IHBhaXIaIiFydWxlcy5ob3N0X2FuZF9wb3J0IHx8IHRoaXMgIT0gJydIABKoBQoQd2VsbF9rbm93bl9yZWdleBgYIAEoDjIYLmJ1Zi52YWxpZGF0ZS5Lbm93blJlZ2V4QvEEwkjtBArwAQojc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWUSJnZhbHVlIG11c3QgYmUgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGqABcnVsZXMud2VsbF9rbm93bl9yZWdleCAhPSAxIHx8IHRoaXMgPT0gJycgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeOj9bMC05YS16QS1aISMkJSZcJyorLS5eX3x+XHg2MF0rJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKyQnKQqNAQopc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX25hbWVfZW1wdHkSNXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBIVFRQIGhlYWRlciBuYW1lGilydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDEgfHwgdGhpcyAhPSAnJwrnAQokc3RyaW5nLndlbGxfa25vd25fcmVnZXguaGVhZGVyX3ZhbHVlEid2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgSFRUUCBoZWFkZXIgdmFsdWUalQFydWxlcy53ZWxsX2tub3duX3JlZ2V4ICE9IDIgfHwgdGhpcy5tYXRjaGVzKCFoYXMocnVsZXMuc3RyaWN0KSB8fCBydWxlcy5zdHJpY3QgPydeW15cdTAwMDAtXHUwMDA4XHUwMDBBLVx1MDAxRlx1MDA3Rl0qJCcgOideW15cdTAwMDBcdTAwMEFcdTAwMERdKiQnKUgAEg4KBnN0cmljdBgZIAEoCBIsCgdleGFtcGxlGCIgAygJQhvCSBgKFgoOc3RyaW5nLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duIuoQCgpCeXRlc1J1bGVzEoABCgVjb25zdBgBIAEoDEJxwkhuCmwKC2J5dGVzLmNvbnN0Gl10aGlzICE9IGdldEZpZWxkKHJ1bGVzLCAnY29uc3QnKSA/ICd2YWx1ZSBtdXN0IGJlICV4Jy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnY29uc3QnKV0pIDogJycSeAoDbGVuGA0gASgEQmvCSGgKZgoJYnl0ZXMubGVuGll1aW50KHRoaXMuc2l6ZSgpKSAhPSBydWxlcy5sZW4gPyAndmFsdWUgbGVuZ3RoIG11c3QgYmUgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubGVuXSkgOiAnJxKQAQoHbWluX2xlbhgCIAEoBEJ/wkh8CnoKDWJ5dGVzLm1pbl9sZW4aaXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2xlbiA/ICd2YWx1ZSBsZW5ndGggbXVzdCBiZSBhdCBsZWFzdCAlcyBieXRlcycuZm9ybWF0KFtydWxlcy5taW5fbGVuXSkgOiAnJxKIAQoHbWF4X2xlbhgDIAEoBEJ3wkh0CnIKDWJ5dGVzLm1heF9sZW4aYXVpbnQodGhpcy5zaXplKCkpID4gcnVsZXMubWF4X2xlbiA/ICd2YWx1ZSBtdXN0IGJlIGF0IG1vc3QgJXMgYnl0ZXMnLmZvcm1hdChbcnVsZXMubWF4X2xlbl0pIDogJycSkAEKB3BhdHRlcm4YBCABKAlCf8JIfAp6Cg1ieXRlcy5wYXR0ZXJuGmkhc3RyaW5nKHRoaXMpLm1hdGNoZXMocnVsZXMucGF0dGVybikgPyAndmFsdWUgbXVzdCBtYXRjaCByZWdleCBwYXR0ZXJuIGAlc2AnLmZvcm1hdChbcnVsZXMucGF0dGVybl0pIDogJycSgQEKBnByZWZpeBgFIAEoDEJxwkhuCmwKDGJ5dGVzLnByZWZpeBpcIXRoaXMuc3RhcnRzV2l0aChydWxlcy5wcmVmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgcHJlZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnByZWZpeF0pIDogJycSfwoGc3VmZml4GAYgASgMQm/CSGwKagoMYnl0ZXMuc3VmZml4GlohdGhpcy5lbmRzV2l0aChydWxlcy5zdWZmaXgpID8gJ3ZhbHVlIGRvZXMgbm90IGhhdmUgc3VmZml4ICV4Jy5mb3JtYXQoW3J1bGVzLnN1ZmZpeF0pIDogJycSgwEKCGNvbnRhaW5zGAcgASgMQnHCSG4KbAoOYnl0ZXMuY29udGFpbnMaWiF0aGlzLmNvbnRhaW5zKHJ1bGVzLmNvbnRhaW5zKSA/ICd2YWx1ZSBkb2VzIG5vdCBjb250YWluICV4Jy5mb3JtYXQoW3J1bGVzLmNvbnRhaW5zXSkgOiAnJxKnAQoCaW4YCCADKAxCmgHCSJYBCpMBCghieXRlcy5pbhqGAWdldEZpZWxkKHJ1bGVzLCAnaW4nKS5zaXplKCkgPiAwICYmICEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnYKBm5vdF9pbhgJIAMoDEJmwkhjCmEKDGJ5dGVzLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEusBCgJpcBgKIAEoCELcAcJI2AEKdAoIYnl0ZXMuaXASIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBJUCBhZGRyZXNzGkYhcnVsZXMuaXAgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0IHx8IHRoaXMuc2l6ZSgpID09IDE2CmAKDmJ5dGVzLmlwX2VtcHR5Ei92YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVAgYWRkcmVzcxodIXJ1bGVzLmlwIHx8IHRoaXMuc2l6ZSgpICE9IDBIABLkAQoEaXB2NBgLIAEoCELTAcJIzwEKZQoKYnl0ZXMuaXB2NBIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjQgYWRkcmVzcxozIXJ1bGVzLmlwdjQgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSA0CmYKEGJ5dGVzLmlwdjRfZW1wdHkSMXZhbHVlIGlzIGVtcHR5LCB3aGljaCBpcyBub3QgYSB2YWxpZCBJUHY0IGFkZHJlc3MaHyFydWxlcy5pcHY0IHx8IHRoaXMuc2l6ZSgpICE9IDBIABLlAQoEaXB2NhgMIAEoCELUAcJI0AEKZgoKYnl0ZXMuaXB2NhIidmFsdWUgbXVzdCBiZSBhIHZhbGlkIElQdjYgYWRkcmVzcxo0IXJ1bGVzLmlwdjYgfHwgdGhpcy5zaXplKCkgPT0gMCB8fCB0aGlzLnNpemUoKSA9PSAxNgpmChBieXRlcy5pcHY2X2VtcHR5EjF2YWx1ZSBpcyBlbXB0eSwgd2hpY2ggaXMgbm90IGEgdmFsaWQgSVB2NiBhZGRyZXNzGh8hcnVsZXMuaXB2NiB8fCB0aGlzLnNpemUoKSAhPSAwSAASKwoHZXhhbXBsZRgOIAMoDEIawkgXChUKDWJ5dGVzLmV4YW1wbGUaBHRydWUqCQjoBxCAgICAAkIMCgp3ZWxsX2tub3duItQDCglFbnVtUnVsZXMSggEKBWNvbnN0GAEgASgFQnPCSHAKbgoKZW51bS5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEhQKDGRlZmluZWRfb25seRgCIAEoCBJ+CgJpbhgDIAMoBUJywkhvCm0KB2VudW0uaW4aYiEodGhpcyBpbiBnZXRGaWVsZChydWxlcywgJ2luJykpID8gJ3ZhbHVlIG11c3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2luJyldKSA6ICcnEnUKBm5vdF9pbhgEIAMoBUJlwkhiCmAKC2VudW0ubm90X2luGlF0aGlzIGluIHJ1bGVzLm5vdF9pbiA/ICd2YWx1ZSBtdXN0IG5vdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW3J1bGVzLm5vdF9pbl0pIDogJycSKgoHZXhhbXBsZRgFIAMoBUIZwkgWChQKDGVudW0uZXhhbXBsZRoEdHJ1ZSoJCOgHEICAgIACIvsDCg1SZXBlYXRlZFJ1bGVzEp4BCgltaW5faXRlbXMYASABKARCigHCSIYBCoMBChJyZXBlYXRlZC5taW5faXRlbXMabXVpbnQodGhpcy5zaXplKCkpIDwgcnVsZXMubWluX2l0ZW1zID8gJ3ZhbHVlIG11c3QgY29udGFpbiBhdCBsZWFzdCAlZCBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1pbl9pdGVtc10pIDogJycSogEKCW1heF9pdGVtcxgCIAEoBEKOAcJIigEKhwEKEnJlcGVhdGVkLm1heF9pdGVtcxpxdWludCh0aGlzLnNpemUoKSkgPiBydWxlcy5tYXhfaXRlbXMgPyAndmFsdWUgbXVzdCBjb250YWluIG5vIG1vcmUgdGhhbiAlcyBpdGVtKHMpJy5mb3JtYXQoW3J1bGVzLm1heF9pdGVtc10pIDogJycScAoGdW5pcXVlGAMgASgIQmDCSF0KWwoPcmVwZWF0ZWQudW5pcXVlEihyZXBlYXRlZCB2YWx1ZSBtdXN0IGNvbnRhaW4gdW5pcXVlIGl0ZW1zGh4hcnVsZXMudW5pcXVlIHx8IHRoaXMudW5pcXVlKCkSJwoFaXRlbXMYBCABKAsyGC5idWYudmFsaWRhdGUuRmllbGRSdWxlcyoJCOgHEICAgIACIooDCghNYXBSdWxlcxKPAQoJbWluX3BhaXJzGAEgASgEQnzCSHkKdwoNbWFwLm1pbl9wYWlycxpmdWludCh0aGlzLnNpemUoKSkgPCBydWxlcy5taW5fcGFpcnMgPyAnbWFwIG11c3QgYmUgYXQgbGVhc3QgJWQgZW50cmllcycuZm9ybWF0KFtydWxlcy5taW5fcGFpcnNdKSA6ICcnEo4BCgltYXhfcGFpcnMYAiABKARCe8JIeAp2Cg1tYXAubWF4X3BhaXJzGmV1aW50KHRoaXMuc2l6ZSgpKSA+IHJ1bGVzLm1heF9wYWlycyA/ICdtYXAgbXVzdCBiZSBhdCBtb3N0ICVkIGVudHJpZXMnLmZvcm1hdChbcnVsZXMubWF4X3BhaXJzXSkgOiAnJxImCgRrZXlzGAQgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMSKAoGdmFsdWVzGAUgASgLMhguYnVmLnZhbGlkYXRlLkZpZWxkUnVsZXMqCQjoBxCAgICAAiImCghBbnlSdWxlcxIKCgJpbhgCIAMoCRIOCgZub3RfaW4YAyADKAkimRcKDUR1cmF0aW9uUnVsZXMSoQEKBWNvbnN0GAIgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQnfCSHQKcgoOZHVyYXRpb24uY29uc3QaYHRoaXMgIT0gZ2V0RmllbGQocnVsZXMsICdjb25zdCcpID8gJ3ZhbHVlIG11c3QgZXF1YWwgJXMnLmZvcm1hdChbZ2V0RmllbGQocnVsZXMsICdjb25zdCcpXSkgOiAnJxKoAQoCbHQYAyABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25Cf8JIfAp6CgtkdXJhdGlvbi5sdBprIWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPj0gcnVsZXMubHQ/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5sdF0pIDogJydIABK6AQoDbHRlGAQgASgLMhkuZ29vZ2xlLnByb3RvYnVmLkR1cmF0aW9uQo8BwkiLAQqIAQoMZHVyYXRpb24ubHRlGnghaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+IHJ1bGVzLmx0ZT8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmx0ZV0pIDogJydIABLBBwoCZ3QYBSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25ClwfCSJMHCn0KC2R1cmF0aW9uLmd0Gm4haGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8PSBydWxlcy5ndD8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0XSkgOiAnJwq2AQoOZHVyYXRpb24uZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr4BChhkdXJhdGlvbi5ndF9sdF9leGNsdXNpdmUaoQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3QgJiYgKHJ1bGVzLmx0IDw9IHRoaXMgJiYgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBvciBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3QsIHJ1bGVzLmx0XSkgOiAnJwrGAQoPZHVyYXRpb24uZ3RfbHRlGrIBaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRlXSkgOiAnJwrOAQoZZHVyYXRpb24uZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESjQgKA2d0ZRgGIAEoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkLiB8JI3gcKiwEKDGR1cmF0aW9uLmd0ZRp7IWhhcyhydWxlcy5sdCkgJiYgIWhhcyhydWxlcy5sdGUpICYmIHRoaXMgPCBydWxlcy5ndGU/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGVdKSA6ICcnCsUBCg9kdXJhdGlvbi5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzQEKGWR1cmF0aW9uLmd0ZV9sdF9leGNsdXNpdmUarwFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0IDwgcnVsZXMuZ3RlICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0ZSwgcnVsZXMubHRdKSA6ICcnCtUBChBkdXJhdGlvbi5ndGVfbHRlGsABaGFzKHJ1bGVzLmx0ZSkgJiYgcnVsZXMubHRlID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+IHJ1bGVzLmx0ZSB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdGVdKSA6ICcnCt0BChpkdXJhdGlvbi5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARKdAQoCaW4YByADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CdsJIcwpxCgtkdXJhdGlvbi5pbhpiISh0aGlzIGluIGdldEZpZWxkKHJ1bGVzLCAnaW4nKSkgPyAndmFsdWUgbXVzdCBiZSBpbiBsaXN0ICVzJy5mb3JtYXQoW2dldEZpZWxkKHJ1bGVzLCAnaW4nKV0pIDogJycSlAEKBm5vdF9pbhgIIAMoCzIZLmdvb2dsZS5wcm90b2J1Zi5EdXJhdGlvbkJpwkhmCmQKD2R1cmF0aW9uLm5vdF9pbhpRdGhpcyBpbiBydWxlcy5ub3RfaW4gPyAndmFsdWUgbXVzdCBub3QgYmUgaW4gbGlzdCAlcycuZm9ybWF0KFtydWxlcy5ub3RfaW5dKSA6ICcnEkkKB2V4YW1wbGUYCSADKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CHcJIGgoYChBkdXJhdGlvbi5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiKSGAoOVGltZXN0YW1wUnVsZXMSowEKBWNvbnN0GAIgASgLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEJ4wkh1CnMKD3RpbWVzdGFtcC5jb25zdBpgdGhpcyAhPSBnZXRGaWVsZChydWxlcywgJ2NvbnN0JykgPyAndmFsdWUgbXVzdCBlcXVhbCAlcycuZm9ybWF0KFtnZXRGaWVsZChydWxlcywgJ2NvbnN0JyldKSA6ICcnEqsBCgJsdBgDIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBCgAHCSH0KewoMdGltZXN0YW1wLmx0GmshaGFzKHJ1bGVzLmd0ZSkgJiYgIWhhcyhydWxlcy5ndCkgJiYgdGhpcyA+PSBydWxlcy5sdD8gJ3ZhbHVlIG11c3QgYmUgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmx0XSkgOiAnJ0gAErwBCgNsdGUYBCABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpABwkiMAQqJAQoNdGltZXN0YW1wLmx0ZRp4IWhhcyhydWxlcy5ndGUpICYmICFoYXMocnVsZXMuZ3QpICYmIHRoaXMgPiBydWxlcy5sdGU/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5sdGVdKSA6ICcnSAASbAoGbHRfbm93GAcgASgIQlrCSFcKVQoQdGltZXN0YW1wLmx0X25vdxpBKHJ1bGVzLmx0X25vdyAmJiB0aGlzID4gbm93KSA/ICd2YWx1ZSBtdXN0IGJlIGxlc3MgdGhhbiBub3cnIDogJydIABLHBwoCZ3QYBSABKAsyGi5nb29nbGUucHJvdG9idWYuVGltZXN0YW1wQpwHwkiYBwp+Cgx0aW1lc3RhbXAuZ3QabiFoYXMocnVsZXMubHQpICYmICFoYXMocnVsZXMubHRlKSAmJiB0aGlzIDw9IHJ1bGVzLmd0PyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RdKSA6ICcnCrcBCg90aW1lc3RhbXAuZ3RfbHQaowFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ICYmICh0aGlzID49IHJ1bGVzLmx0IHx8IHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgYW5kIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndCwgcnVsZXMubHRdKSA6ICcnCr8BChl0aW1lc3RhbXAuZ3RfbHRfZXhjbHVzaXZlGqEBaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdCA8PSB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdF0pIDogJycKxwEKEHRpbWVzdGFtcC5ndF9sdGUasgFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3QgJiYgKHRoaXMgPiBydWxlcy5sdGUgfHwgdGhpcyA8PSBydWxlcy5ndCk/ICd2YWx1ZSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAlcyBhbmQgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnCs8BChp0aW1lc3RhbXAuZ3RfbHRlX2V4Y2x1c2l2ZRqwAWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ICYmIChydWxlcy5sdGUgPCB0aGlzICYmIHRoaXMgPD0gcnVsZXMuZ3QpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gJXMgb3IgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0LCBydWxlcy5sdGVdKSA6ICcnSAESkwgKA2d0ZRgGIAEoCzIaLmdvb2dsZS5wcm90b2J1Zi5UaW1lc3RhbXBC5wfCSOMHCowBCg10aW1lc3RhbXAuZ3RlGnshaGFzKHJ1bGVzLmx0KSAmJiAhaGFzKHJ1bGVzLmx0ZSkgJiYgdGhpcyA8IHJ1bGVzLmd0ZT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzJy5mb3JtYXQoW3J1bGVzLmd0ZV0pIDogJycKxgEKEHRpbWVzdGFtcC5ndGVfbHQasQFoYXMocnVsZXMubHQpICYmIHJ1bGVzLmx0ID49IHJ1bGVzLmd0ZSAmJiAodGhpcyA+PSBydWxlcy5sdCB8fCB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIGFuZCBsZXNzIHRoYW4gJXMnLmZvcm1hdChbcnVsZXMuZ3RlLCBydWxlcy5sdF0pIDogJycKzgEKGnRpbWVzdGFtcC5ndGVfbHRfZXhjbHVzaXZlGq8BaGFzKHJ1bGVzLmx0KSAmJiBydWxlcy5sdCA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHQgPD0gdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0XSkgOiAnJwrWAQoRdGltZXN0YW1wLmd0ZV9sdGUawAFoYXMocnVsZXMubHRlKSAmJiBydWxlcy5sdGUgPj0gcnVsZXMuZ3RlICYmICh0aGlzID4gcnVsZXMubHRlIHx8IHRoaXMgPCBydWxlcy5ndGUpPyAndmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gJXMgYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJycK3gEKG3RpbWVzdGFtcC5ndGVfbHRlX2V4Y2x1c2l2ZRq+AWhhcyhydWxlcy5sdGUpICYmIHJ1bGVzLmx0ZSA8IHJ1bGVzLmd0ZSAmJiAocnVsZXMubHRlIDwgdGhpcyAmJiB0aGlzIDwgcnVsZXMuZ3RlKT8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvICVzIG9yIGxlc3MgdGhhbiBvciBlcXVhbCB0byAlcycuZm9ybWF0KFtydWxlcy5ndGUsIHJ1bGVzLmx0ZV0pIDogJydIARJvCgZndF9ub3cYCCABKAhCXcJIWgpYChB0aW1lc3RhbXAuZ3Rfbm93GkQocnVsZXMuZ3Rfbm93ICYmIHRoaXMgPCBub3cpID8gJ3ZhbHVlIG11c3QgYmUgZ3JlYXRlciB0aGFuIG5vdycgOiAnJ0gBErgBCgZ3aXRoaW4YCSABKAsyGS5nb29nbGUucHJvdG9idWYuRHVyYXRpb25CjAHCSIgBCoUBChB0aW1lc3RhbXAud2l0aGluGnF0aGlzIDwgbm93LXJ1bGVzLndpdGhpbiB8fCB0aGlzID4gbm93K3J1bGVzLndpdGhpbiA/ICd2YWx1ZSBtdXN0IGJlIHdpdGhpbiAlcyBvZiBub3cnLmZvcm1hdChbcnVsZXMud2l0aGluXSkgOiAnJxJLCgdleGFtcGxlGAogAygLMhouZ29vZ2xlLnByb3RvYnVmLlRpbWVzdGFtcEIewkgbChkKEXRpbWVzdGFtcC5leGFtcGxlGgR0cnVlKgkI6AcQgICAgAJCCwoJbGVzc190aGFuQg4KDGdyZWF0ZXJfdGhhbiI5CgpWaW9sYXRpb25zEisKCnZpb2xhdGlvbnMYASADKAsyFy5idWYudmFsaWRhdGUuVmlvbGF0aW9uIp8BCglWaW9sYXRpb24SJgoFZmllbGQYBSABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEiUKBHJ1bGUYBiABKAsyFy5idWYudmFsaWRhdGUuRmllbGRQYXRoEg8KB3J1bGVfaWQYAiABKAkSDwoHbWVzc2FnZRgDIAEoCRIPCgdmb3Jfa2V5GAQgASgISgQIARACUgpmaWVsZF9wYXRoIj0KCUZpZWxkUGF0aBIwCghlbGVtZW50cxgBIAMoCzIeLmJ1Zi52YWxpZGF0ZS5GaWVsZFBhdGhFbGVtZW50IukCChBGaWVsZFBhdGhFbGVtZW50EhQKDGZpZWxkX251bWJlchgBIAEoBRISCgpmaWVsZF9uYW1lGAIgASgJEj4KCmZpZWxkX3R5cGUYAyABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRI8CghrZXlfdHlwZRgEIAEoDjIqLmdvb2dsZS5wcm90b2J1Zi5GaWVsZERlc2NyaXB0b3JQcm90by5UeXBlEj4KCnZhbHVlX3R5cGUYBSABKA4yKi5nb29nbGUucHJvdG9idWYuRmllbGREZXNjcmlwdG9yUHJvdG8uVHlwZRIPCgVpbmRleBgGIAEoBEgAEhIKCGJvb2xfa2V5GAcgASgISAASEQoHaW50X2tleRgIIAEoA0gAEhIKCHVpbnRfa2V5GAkgASgESAASFAoKc3RyaW5nX2tleRgKIAEoCUgAQgsKCXN1YnNjcmlwdCqHAQoGSWdub3JlEhYKEklHTk9SRV9VTlNQRUNJRklFRBAAEhkKFUlHTk9SRV9JRl9VTlBPUFVMQVRFRBABEhsKF0lHTk9SRV9JRl9ERUZBVUxUX1ZBTFVFEAISEQoNSUdOT1JFX0FMV0FZUxADKhpJR05PUkVfRU1QVFlJR05PUkVfREVGQVVMVCpuCgpLbm93blJlZ2V4EhsKF0tOT1dOX1JFR0VYX1VOU1BFQ0lGSUVEEAASIAocS05PV05fUkVHRVhfSFRUUF9IRUFERVJfTkFNRRABEiEKHUtOT1dOX1JFR0VYX0hUVFBfSEVBREVSX1ZBTFVFEAI6VgoHbWVzc2FnZRIfLmdvb2dsZS5wcm90b2J1Zi5NZXNzYWdlT3B0aW9ucxiHCSABKAsyGi5idWYudmFsaWRhdGUuTWVzc2FnZVJ1bGVzUgdtZXNzYWdlOk4KBW9uZW9mEh0uZ29vZ2xlLnByb3RvYnVmLk9uZW9mT3B0aW9ucxiHCSABKAsyGC5idWYudmFsaWRhdGUuT25lb2ZSdWxlc1IFb25lb2Y6TgoFZmllbGQSHS5nb29nbGUucHJvdG9idWYuRmllbGRPcHRpb25zGIcJIAEoCzIYLmJ1Zi52YWxpZGF0ZS5GaWVsZFJ1bGVzUgVmaWVsZDpdCgpwcmVkZWZpbmVkEh0uZ29vZ2xlLnByb3RvYnVmLkZpZWxkT3B0aW9ucxiICSABKAsyHS5idWYudmFsaWRhdGUuUHJlZGVmaW5lZFJ1bGVzUgpwcmVkZWZpbmVkQrsBChBjb20uYnVmLnZhbGlkYXRlQg1WYWxpZGF0ZVByb3RvUAFaR2J1Zi5idWlsZC9nZW4vZ28vYnVmYnVpbGQvcHJvdG92YWxpZGF0ZS9wcm90b2NvbGJ1ZmZlcnMvZ28vYnVmL3ZhbGlkYXRlogIDQlZYqgIMQnVmLlZhbGlkYXRlygIMQnVmXFZhbGlkYXRl4gIYQnVmXFZhbGlkYXRlXEdQQk1ldGFkYXRh6gINQnVmOjpWYWxpZGF0ZQ", [file_google_protobuf_descriptor, file_google_protobuf_duration, file_google_protobuf_timestamp]);
30
-
31
- /**
32
- * `Rule` represents a validation rule written in the Common Expression
33
- * Language (CEL) syntax. Each Rule includes a unique identifier, an
34
- * optional error message, and the CEL expression to evaluate. For more
35
- * information, [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
36
- *
37
- * ```proto
38
- * message Foo {
39
- * option (buf.validate.message).cel = {
40
- * id: "foo.bar"
41
- * message: "bar must be greater than 0"
42
- * expression: "this.bar > 0"
43
- * };
44
- * int32 bar = 1;
45
- * }
46
- * ```
47
- *
48
- * @generated from message buf.validate.Rule
49
- */
50
- export type Rule = Message<"buf.validate.Rule"> & {
51
- /**
52
- * `id` is a string that serves as a machine-readable name for this Rule.
53
- * It should be unique within its scope, which could be either a message or a field.
54
- *
55
- * @generated from field: optional string id = 1;
56
- */
57
- id: string;
58
-
59
- /**
60
- * `message` is an optional field that provides a human-readable error message
61
- * for this Rule when the CEL expression evaluates to false. If a
62
- * non-empty message is provided, any strings resulting from the CEL
63
- * expression evaluation are ignored.
64
- *
65
- * @generated from field: optional string message = 2;
66
- */
67
- message: string;
68
-
69
- /**
70
- * `expression` is the actual CEL expression that will be evaluated for
71
- * validation. This string must resolve to either a boolean or a string
72
- * value. If the expression evaluates to false or a non-empty string, the
73
- * validation is considered failed, and the message is rejected.
74
- *
75
- * @generated from field: optional string expression = 3;
76
- */
77
- expression: string;
78
- };
79
-
80
- /**
81
- * Describes the message buf.validate.Rule.
82
- * Use `create(RuleSchema)` to create a new message.
83
- */
84
- export const RuleSchema: GenMessage<Rule> = /*@__PURE__*/
85
- messageDesc(file_buf_validate_validate, 0);
86
-
87
- /**
88
- * MessageRules represents validation rules that are applied to the entire message.
89
- * It includes disabling options and a list of Rule messages representing Common Expression Language (CEL) validation rules.
90
- *
91
- * @generated from message buf.validate.MessageRules
92
- */
93
- export type MessageRules = Message<"buf.validate.MessageRules"> & {
94
- /**
95
- * `disabled` is a boolean flag that, when set to true, nullifies any validation rules for this message.
96
- * This includes any fields within the message that would otherwise support validation.
97
- *
98
- * ```proto
99
- * message MyMessage {
100
- * // validation will be bypassed for this message
101
- * option (buf.validate.message).disabled = true;
102
- * }
103
- * ```
104
- *
105
- * @generated from field: optional bool disabled = 1;
106
- */
107
- disabled: boolean;
108
-
109
- /**
110
- * `cel` is a repeated field of type Rule. Each Rule specifies a validation rule to be applied to this message.
111
- * These rules are written in Common Expression Language (CEL) syntax. For more information,
112
- * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
113
- *
114
- *
115
- * ```proto
116
- * message MyMessage {
117
- * // The field `foo` must be greater than 42.
118
- * option (buf.validate.message).cel = {
119
- * id: "my_message.value",
120
- * message: "value must be greater than 42",
121
- * expression: "this.foo > 42",
122
- * };
123
- * optional int32 foo = 1;
124
- * }
125
- * ```
126
- *
127
- * @generated from field: repeated buf.validate.Rule cel = 3;
128
- */
129
- cel: Rule[];
130
-
131
- /**
132
- * `oneof` is a repeated field of type MessageOneofRule that specifies a list of fields
133
- * of which at most one can be present. If `required` is also specified, then exactly one
134
- * of the specified fields _must_ be present.
135
- *
136
- * This will enforce oneof-like constraints with a few features not provided by
137
- * actual Protobuf oneof declarations:
138
- * 1. Repeated and map fields are allowed in this validation. In a Protobuf oneof,
139
- * only scalar fields are allowed.
140
- * 2. Fields with implicit presence are allowed. In a Protobuf oneof, all member
141
- * fields have explicit presence. This means that, for the purpose of determining
142
- * how many fields are set, explicitly setting such a field to its zero value is
143
- * effectively the same as not setting it at all.
144
- * 3. This will generate validation errors when unmarshalling, even from the binary
145
- * format. With a Protobuf oneof, if multiple fields are present in the serialized
146
- * form, earlier values are usually silently ignored when unmarshalling, with only
147
- * the last field being present when unmarshalling completes.
148
- *
149
- *
150
- * ```proto
151
- * message MyMessage {
152
- * // Only one of `field1` or `field2` _can_ be present in this message.
153
- * option (buf.validate.message).oneof = { fields: ["field1", "field2"] };
154
- * // Only one of `field3` or `field4` _must_ be present in this message.
155
- * option (buf.validate.message).oneof = { fields: ["field3", "field4"], required: true };
156
- * string field1 = 1;
157
- * bytes field2 = 2;
158
- * bool field3 = 3;
159
- * int32 field4 = 4;
160
- * }
161
- * ```
162
- *
163
- * @generated from field: repeated buf.validate.MessageOneofRule oneof = 4;
164
- */
165
- oneof: MessageOneofRule[];
166
- };
167
-
168
- /**
169
- * Describes the message buf.validate.MessageRules.
170
- * Use `create(MessageRulesSchema)` to create a new message.
171
- */
172
- export const MessageRulesSchema: GenMessage<MessageRules> = /*@__PURE__*/
173
- messageDesc(file_buf_validate_validate, 1);
174
-
175
- /**
176
- * @generated from message buf.validate.MessageOneofRule
177
- */
178
- export type MessageOneofRule = Message<"buf.validate.MessageOneofRule"> & {
179
- /**
180
- * A list of field names to include in the oneof. All field names must be
181
- * defined in the message.
182
- *
183
- * @generated from field: repeated string fields = 1;
184
- */
185
- fields: string[];
186
-
187
- /**
188
- * If true, one of the fields specified _must_ be set.
189
- *
190
- * @generated from field: optional bool required = 2;
191
- */
192
- required: boolean;
193
- };
194
-
195
- /**
196
- * Describes the message buf.validate.MessageOneofRule.
197
- * Use `create(MessageOneofRuleSchema)` to create a new message.
198
- */
199
- export const MessageOneofRuleSchema: GenMessage<MessageOneofRule> = /*@__PURE__*/
200
- messageDesc(file_buf_validate_validate, 2);
201
-
202
- /**
203
- * The `OneofRules` message type enables you to manage rules for
204
- * oneof fields in your protobuf messages.
205
- *
206
- * @generated from message buf.validate.OneofRules
207
- */
208
- export type OneofRules = Message<"buf.validate.OneofRules"> & {
209
- /**
210
- * If `required` is true, exactly one field of the oneof must be present. A
211
- * validation error is returned if no fields in the oneof are present. The
212
- * field itself may still be a default value; further rules
213
- * should be placed on the fields themselves to ensure they are valid values,
214
- * such as `min_len` or `gt`.
215
- *
216
- * ```proto
217
- * message MyMessage {
218
- * oneof value {
219
- * // Either `a` or `b` must be set. If `a` is set, it must also be
220
- * // non-empty; whereas if `b` is set, it can still be an empty string.
221
- * option (buf.validate.oneof).required = true;
222
- * string a = 1 [(buf.validate.field).string.min_len = 1];
223
- * string b = 2;
224
- * }
225
- * }
226
- * ```
227
- *
228
- * @generated from field: optional bool required = 1;
229
- */
230
- required: boolean;
231
- };
232
-
233
- /**
234
- * Describes the message buf.validate.OneofRules.
235
- * Use `create(OneofRulesSchema)` to create a new message.
236
- */
237
- export const OneofRulesSchema: GenMessage<OneofRules> = /*@__PURE__*/
238
- messageDesc(file_buf_validate_validate, 3);
239
-
240
- /**
241
- * FieldRules encapsulates the rules for each type of field. Depending on
242
- * the field, the correct set should be used to ensure proper validations.
243
- *
244
- * @generated from message buf.validate.FieldRules
245
- */
246
- export type FieldRules = Message<"buf.validate.FieldRules"> & {
247
- /**
248
- * `cel` is a repeated field used to represent a textual expression
249
- * in the Common Expression Language (CEL) syntax. For more information,
250
- * [see our documentation](https://buf.build/docs/protovalidate/schemas/custom-rules/).
251
- *
252
- * ```proto
253
- * message MyMessage {
254
- * // The field `value` must be greater than 42.
255
- * optional int32 value = 1 [(buf.validate.field).cel = {
256
- * id: "my_message.value",
257
- * message: "value must be greater than 42",
258
- * expression: "this > 42",
259
- * }];
260
- * }
261
- * ```
262
- *
263
- * @generated from field: repeated buf.validate.Rule cel = 23;
264
- */
265
- cel: Rule[];
266
-
267
- /**
268
- * If `required` is true, the field must be populated. A populated field can be
269
- * described as "serialized in the wire format," which includes:
270
- *
271
- * - the following "nullable" fields must be explicitly set to be considered populated:
272
- * - singular message fields (whose fields may be unpopulated/default values)
273
- * - member fields of a oneof (may be their default value)
274
- * - proto3 optional fields (may be their default value)
275
- * - proto2 scalar fields (both optional and required)
276
- * - proto3 scalar fields must be non-zero to be considered populated
277
- * - repeated and map fields must be non-empty to be considered populated
278
- * - map keys/values and repeated items are always considered populated
279
- *
280
- * ```proto
281
- * message MyMessage {
282
- * // The field `value` must be set to a non-null value.
283
- * optional MyOtherMessage value = 1 [(buf.validate.field).required = true];
284
- * }
285
- * ```
286
- *
287
- * @generated from field: optional bool required = 25;
288
- */
289
- required: boolean;
290
-
291
- /**
292
- * Skip validation on the field if its value matches the specified criteria.
293
- * See Ignore enum for details.
294
- *
295
- * ```proto
296
- * message UpdateRequest {
297
- * // The uri rule only applies if the field is populated and not an empty
298
- * // string.
299
- * optional string url = 1 [
300
- * (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE,
301
- * (buf.validate.field).string.uri = true,
302
- * ];
303
- * }
304
- * ```
305
- *
306
- * @generated from field: optional buf.validate.Ignore ignore = 27;
307
- */
308
- ignore: Ignore;
309
-
310
- /**
311
- * @generated from oneof buf.validate.FieldRules.type
312
- */
313
- type: {
314
- /**
315
- * Scalar Field Types
316
- *
317
- * @generated from field: buf.validate.FloatRules float = 1;
318
- */
319
- value: FloatRules;
320
- case: "float";
321
- } | {
322
- /**
323
- * @generated from field: buf.validate.DoubleRules double = 2;
324
- */
325
- value: DoubleRules;
326
- case: "double";
327
- } | {
328
- /**
329
- * @generated from field: buf.validate.Int32Rules int32 = 3;
330
- */
331
- value: Int32Rules;
332
- case: "int32";
333
- } | {
334
- /**
335
- * @generated from field: buf.validate.Int64Rules int64 = 4;
336
- */
337
- value: Int64Rules;
338
- case: "int64";
339
- } | {
340
- /**
341
- * @generated from field: buf.validate.UInt32Rules uint32 = 5;
342
- */
343
- value: UInt32Rules;
344
- case: "uint32";
345
- } | {
346
- /**
347
- * @generated from field: buf.validate.UInt64Rules uint64 = 6;
348
- */
349
- value: UInt64Rules;
350
- case: "uint64";
351
- } | {
352
- /**
353
- * @generated from field: buf.validate.SInt32Rules sint32 = 7;
354
- */
355
- value: SInt32Rules;
356
- case: "sint32";
357
- } | {
358
- /**
359
- * @generated from field: buf.validate.SInt64Rules sint64 = 8;
360
- */
361
- value: SInt64Rules;
362
- case: "sint64";
363
- } | {
364
- /**
365
- * @generated from field: buf.validate.Fixed32Rules fixed32 = 9;
366
- */
367
- value: Fixed32Rules;
368
- case: "fixed32";
369
- } | {
370
- /**
371
- * @generated from field: buf.validate.Fixed64Rules fixed64 = 10;
372
- */
373
- value: Fixed64Rules;
374
- case: "fixed64";
375
- } | {
376
- /**
377
- * @generated from field: buf.validate.SFixed32Rules sfixed32 = 11;
378
- */
379
- value: SFixed32Rules;
380
- case: "sfixed32";
381
- } | {
382
- /**
383
- * @generated from field: buf.validate.SFixed64Rules sfixed64 = 12;
384
- */
385
- value: SFixed64Rules;
386
- case: "sfixed64";
387
- } | {
388
- /**
389
- * @generated from field: buf.validate.BoolRules bool = 13;
390
- */
391
- value: BoolRules;
392
- case: "bool";
393
- } | {
394
- /**
395
- * @generated from field: buf.validate.StringRules string = 14;
396
- */
397
- value: StringRules;
398
- case: "string";
399
- } | {
400
- /**
401
- * @generated from field: buf.validate.BytesRules bytes = 15;
402
- */
403
- value: BytesRules;
404
- case: "bytes";
405
- } | {
406
- /**
407
- * Complex Field Types
408
- *
409
- * @generated from field: buf.validate.EnumRules enum = 16;
410
- */
411
- value: EnumRules;
412
- case: "enum";
413
- } | {
414
- /**
415
- * @generated from field: buf.validate.RepeatedRules repeated = 18;
416
- */
417
- value: RepeatedRules;
418
- case: "repeated";
419
- } | {
420
- /**
421
- * @generated from field: buf.validate.MapRules map = 19;
422
- */
423
- value: MapRules;
424
- case: "map";
425
- } | {
426
- /**
427
- * Well-Known Field Types
428
- *
429
- * @generated from field: buf.validate.AnyRules any = 20;
430
- */
431
- value: AnyRules;
432
- case: "any";
433
- } | {
434
- /**
435
- * @generated from field: buf.validate.DurationRules duration = 21;
436
- */
437
- value: DurationRules;
438
- case: "duration";
439
- } | {
440
- /**
441
- * @generated from field: buf.validate.TimestampRules timestamp = 22;
442
- */
443
- value: TimestampRules;
444
- case: "timestamp";
445
- } | { case: undefined; value?: undefined };
446
- };
447
-
448
- /**
449
- * Describes the message buf.validate.FieldRules.
450
- * Use `create(FieldRulesSchema)` to create a new message.
451
- */
452
- export const FieldRulesSchema: GenMessage<FieldRules> = /*@__PURE__*/
453
- messageDesc(file_buf_validate_validate, 4);
454
-
455
- /**
456
- * PredefinedRules are custom rules that can be re-used with
457
- * multiple fields.
458
- *
459
- * @generated from message buf.validate.PredefinedRules
460
- */
461
- export type PredefinedRules = Message<"buf.validate.PredefinedRules"> & {
462
- /**
463
- * `cel` is a repeated field used to represent a textual expression
464
- * in the Common Expression Language (CEL) syntax. For more information,
465
- * [see our documentation](https://buf.build/docs/protovalidate/schemas/predefined-rules/).
466
- *
467
- * ```proto
468
- * message MyMessage {
469
- * // The field `value` must be greater than 42.
470
- * optional int32 value = 1 [(buf.validate.predefined).cel = {
471
- * id: "my_message.value",
472
- * message: "value must be greater than 42",
473
- * expression: "this > 42",
474
- * }];
475
- * }
476
- * ```
477
- *
478
- * @generated from field: repeated buf.validate.Rule cel = 1;
479
- */
480
- cel: Rule[];
481
- };
482
-
483
- /**
484
- * Describes the message buf.validate.PredefinedRules.
485
- * Use `create(PredefinedRulesSchema)` to create a new message.
486
- */
487
- export const PredefinedRulesSchema: GenMessage<PredefinedRules> = /*@__PURE__*/
488
- messageDesc(file_buf_validate_validate, 5);
489
-
490
- /**
491
- * FloatRules describes the rules applied to `float` values. These
492
- * rules may also be applied to the `google.protobuf.FloatValue` Well-Known-Type.
493
- *
494
- * @generated from message buf.validate.FloatRules
495
- */
496
- export type FloatRules = Message<"buf.validate.FloatRules"> & {
497
- /**
498
- * `const` requires the field value to exactly match the specified value. If
499
- * the field value doesn't match, an error message is generated.
500
- *
501
- * ```proto
502
- * message MyFloat {
503
- * // value must equal 42.0
504
- * float value = 1 [(buf.validate.field).float.const = 42.0];
505
- * }
506
- * ```
507
- *
508
- * @generated from field: optional float const = 1;
509
- */
510
- const: number;
511
-
512
- /**
513
- * @generated from oneof buf.validate.FloatRules.less_than
514
- */
515
- lessThan: {
516
- /**
517
- * `lt` requires the field value to be less than the specified value (field <
518
- * value). If the field value is equal to or greater than the specified value,
519
- * an error message is generated.
520
- *
521
- * ```proto
522
- * message MyFloat {
523
- * // value must be less than 10.0
524
- * float value = 1 [(buf.validate.field).float.lt = 10.0];
525
- * }
526
- * ```
527
- *
528
- * @generated from field: float lt = 2;
529
- */
530
- value: number;
531
- case: "lt";
532
- } | {
533
- /**
534
- * `lte` requires the field value to be less than or equal to the specified
535
- * value (field <= value). If the field value is greater than the specified
536
- * value, an error message is generated.
537
- *
538
- * ```proto
539
- * message MyFloat {
540
- * // value must be less than or equal to 10.0
541
- * float value = 1 [(buf.validate.field).float.lte = 10.0];
542
- * }
543
- * ```
544
- *
545
- * @generated from field: float lte = 3;
546
- */
547
- value: number;
548
- case: "lte";
549
- } | { case: undefined; value?: undefined };
550
-
551
- /**
552
- * @generated from oneof buf.validate.FloatRules.greater_than
553
- */
554
- greaterThan: {
555
- /**
556
- * `gt` requires the field value to be greater than the specified value
557
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
558
- * `lte`, the range is reversed, and the field value must be outside the
559
- * specified range. If the field value doesn't meet the required conditions,
560
- * an error message is generated.
561
- *
562
- * ```proto
563
- * message MyFloat {
564
- * // value must be greater than 5.0 [float.gt]
565
- * float value = 1 [(buf.validate.field).float.gt = 5.0];
566
- *
567
- * // value must be greater than 5 and less than 10.0 [float.gt_lt]
568
- * float other_value = 2 [(buf.validate.field).float = { gt: 5.0, lt: 10.0 }];
569
- *
570
- * // value must be greater than 10 or less than 5.0 [float.gt_lt_exclusive]
571
- * float another_value = 3 [(buf.validate.field).float = { gt: 10.0, lt: 5.0 }];
572
- * }
573
- * ```
574
- *
575
- * @generated from field: float gt = 4;
576
- */
577
- value: number;
578
- case: "gt";
579
- } | {
580
- /**
581
- * `gte` requires the field value to be greater than or equal to the specified
582
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
583
- * or `lte`, the range is reversed, and the field value must be outside the
584
- * specified range. If the field value doesn't meet the required conditions,
585
- * an error message is generated.
586
- *
587
- * ```proto
588
- * message MyFloat {
589
- * // value must be greater than or equal to 5.0 [float.gte]
590
- * float value = 1 [(buf.validate.field).float.gte = 5.0];
591
- *
592
- * // value must be greater than or equal to 5.0 and less than 10.0 [float.gte_lt]
593
- * float other_value = 2 [(buf.validate.field).float = { gte: 5.0, lt: 10.0 }];
594
- *
595
- * // value must be greater than or equal to 10.0 or less than 5.0 [float.gte_lt_exclusive]
596
- * float another_value = 3 [(buf.validate.field).float = { gte: 10.0, lt: 5.0 }];
597
- * }
598
- * ```
599
- *
600
- * @generated from field: float gte = 5;
601
- */
602
- value: number;
603
- case: "gte";
604
- } | { case: undefined; value?: undefined };
605
-
606
- /**
607
- * `in` requires the field value to be equal to one of the specified values.
608
- * If the field value isn't one of the specified values, an error message
609
- * is generated.
610
- *
611
- * ```proto
612
- * message MyFloat {
613
- * // value must be in list [1.0, 2.0, 3.0]
614
- * float value = 1 [(buf.validate.field).float = { in: [1.0, 2.0, 3.0] }];
615
- * }
616
- * ```
617
- *
618
- * @generated from field: repeated float in = 6;
619
- */
620
- in: number[];
621
-
622
- /**
623
- * `in` requires the field value to not be equal to any of the specified
624
- * values. If the field value is one of the specified values, an error
625
- * message is generated.
626
- *
627
- * ```proto
628
- * message MyFloat {
629
- * // value must not be in list [1.0, 2.0, 3.0]
630
- * float value = 1 [(buf.validate.field).float = { not_in: [1.0, 2.0, 3.0] }];
631
- * }
632
- * ```
633
- *
634
- * @generated from field: repeated float not_in = 7;
635
- */
636
- notIn: number[];
637
-
638
- /**
639
- * `finite` requires the field value to be finite. If the field value is
640
- * infinite or NaN, an error message is generated.
641
- *
642
- * @generated from field: optional bool finite = 8;
643
- */
644
- finite: boolean;
645
-
646
- /**
647
- * `example` specifies values that the field may have. These values SHOULD
648
- * conform to other rules. `example` values will not impact validation
649
- * but may be used as helpful guidance on how to populate the given field.
650
- *
651
- * ```proto
652
- * message MyFloat {
653
- * float value = 1 [
654
- * (buf.validate.field).float.example = 1.0,
655
- * (buf.validate.field).float.example = inf
656
- * ];
657
- * }
658
- * ```
659
- *
660
- * @generated from field: repeated float example = 9;
661
- */
662
- example: number[];
663
- };
664
-
665
- /**
666
- * Describes the message buf.validate.FloatRules.
667
- * Use `create(FloatRulesSchema)` to create a new message.
668
- */
669
- export const FloatRulesSchema: GenMessage<FloatRules> = /*@__PURE__*/
670
- messageDesc(file_buf_validate_validate, 6);
671
-
672
- /**
673
- * DoubleRules describes the rules applied to `double` values. These
674
- * rules may also be applied to the `google.protobuf.DoubleValue` Well-Known-Type.
675
- *
676
- * @generated from message buf.validate.DoubleRules
677
- */
678
- export type DoubleRules = Message<"buf.validate.DoubleRules"> & {
679
- /**
680
- * `const` requires the field value to exactly match the specified value. If
681
- * the field value doesn't match, an error message is generated.
682
- *
683
- * ```proto
684
- * message MyDouble {
685
- * // value must equal 42.0
686
- * double value = 1 [(buf.validate.field).double.const = 42.0];
687
- * }
688
- * ```
689
- *
690
- * @generated from field: optional double const = 1;
691
- */
692
- const: number;
693
-
694
- /**
695
- * @generated from oneof buf.validate.DoubleRules.less_than
696
- */
697
- lessThan: {
698
- /**
699
- * `lt` requires the field value to be less than the specified value (field <
700
- * value). If the field value is equal to or greater than the specified
701
- * value, an error message is generated.
702
- *
703
- * ```proto
704
- * message MyDouble {
705
- * // value must be less than 10.0
706
- * double value = 1 [(buf.validate.field).double.lt = 10.0];
707
- * }
708
- * ```
709
- *
710
- * @generated from field: double lt = 2;
711
- */
712
- value: number;
713
- case: "lt";
714
- } | {
715
- /**
716
- * `lte` requires the field value to be less than or equal to the specified value
717
- * (field <= value). If the field value is greater than the specified value,
718
- * an error message is generated.
719
- *
720
- * ```proto
721
- * message MyDouble {
722
- * // value must be less than or equal to 10.0
723
- * double value = 1 [(buf.validate.field).double.lte = 10.0];
724
- * }
725
- * ```
726
- *
727
- * @generated from field: double lte = 3;
728
- */
729
- value: number;
730
- case: "lte";
731
- } | { case: undefined; value?: undefined };
732
-
733
- /**
734
- * @generated from oneof buf.validate.DoubleRules.greater_than
735
- */
736
- greaterThan: {
737
- /**
738
- * `gt` requires the field value to be greater than the specified value
739
- * (exclusive). If the value of `gt` is larger than a specified `lt` or `lte`,
740
- * the range is reversed, and the field value must be outside the specified
741
- * range. If the field value doesn't meet the required conditions, an error
742
- * message is generated.
743
- *
744
- * ```proto
745
- * message MyDouble {
746
- * // value must be greater than 5.0 [double.gt]
747
- * double value = 1 [(buf.validate.field).double.gt = 5.0];
748
- *
749
- * // value must be greater than 5 and less than 10.0 [double.gt_lt]
750
- * double other_value = 2 [(buf.validate.field).double = { gt: 5.0, lt: 10.0 }];
751
- *
752
- * // value must be greater than 10 or less than 5.0 [double.gt_lt_exclusive]
753
- * double another_value = 3 [(buf.validate.field).double = { gt: 10.0, lt: 5.0 }];
754
- * }
755
- * ```
756
- *
757
- * @generated from field: double gt = 4;
758
- */
759
- value: number;
760
- case: "gt";
761
- } | {
762
- /**
763
- * `gte` requires the field value to be greater than or equal to the specified
764
- * value (exclusive). If the value of `gte` is larger than a specified `lt` or
765
- * `lte`, the range is reversed, and the field value must be outside the
766
- * specified range. If the field value doesn't meet the required conditions,
767
- * an error message is generated.
768
- *
769
- * ```proto
770
- * message MyDouble {
771
- * // value must be greater than or equal to 5.0 [double.gte]
772
- * double value = 1 [(buf.validate.field).double.gte = 5.0];
773
- *
774
- * // value must be greater than or equal to 5.0 and less than 10.0 [double.gte_lt]
775
- * double other_value = 2 [(buf.validate.field).double = { gte: 5.0, lt: 10.0 }];
776
- *
777
- * // value must be greater than or equal to 10.0 or less than 5.0 [double.gte_lt_exclusive]
778
- * double another_value = 3 [(buf.validate.field).double = { gte: 10.0, lt: 5.0 }];
779
- * }
780
- * ```
781
- *
782
- * @generated from field: double gte = 5;
783
- */
784
- value: number;
785
- case: "gte";
786
- } | { case: undefined; value?: undefined };
787
-
788
- /**
789
- * `in` requires the field value to be equal to one of the specified values.
790
- * If the field value isn't one of the specified values, an error message is
791
- * generated.
792
- *
793
- * ```proto
794
- * message MyDouble {
795
- * // value must be in list [1.0, 2.0, 3.0]
796
- * double value = 1 [(buf.validate.field).double = { in: [1.0, 2.0, 3.0] }];
797
- * }
798
- * ```
799
- *
800
- * @generated from field: repeated double in = 6;
801
- */
802
- in: number[];
803
-
804
- /**
805
- * `not_in` requires the field value to not be equal to any of the specified
806
- * values. If the field value is one of the specified values, an error
807
- * message is generated.
808
- *
809
- * ```proto
810
- * message MyDouble {
811
- * // value must not be in list [1.0, 2.0, 3.0]
812
- * double value = 1 [(buf.validate.field).double = { not_in: [1.0, 2.0, 3.0] }];
813
- * }
814
- * ```
815
- *
816
- * @generated from field: repeated double not_in = 7;
817
- */
818
- notIn: number[];
819
-
820
- /**
821
- * `finite` requires the field value to be finite. If the field value is
822
- * infinite or NaN, an error message is generated.
823
- *
824
- * @generated from field: optional bool finite = 8;
825
- */
826
- finite: boolean;
827
-
828
- /**
829
- * `example` specifies values that the field may have. These values SHOULD
830
- * conform to other rules. `example` values will not impact validation
831
- * but may be used as helpful guidance on how to populate the given field.
832
- *
833
- * ```proto
834
- * message MyDouble {
835
- * double value = 1 [
836
- * (buf.validate.field).double.example = 1.0,
837
- * (buf.validate.field).double.example = inf
838
- * ];
839
- * }
840
- * ```
841
- *
842
- * @generated from field: repeated double example = 9;
843
- */
844
- example: number[];
845
- };
846
-
847
- /**
848
- * Describes the message buf.validate.DoubleRules.
849
- * Use `create(DoubleRulesSchema)` to create a new message.
850
- */
851
- export const DoubleRulesSchema: GenMessage<DoubleRules> = /*@__PURE__*/
852
- messageDesc(file_buf_validate_validate, 7);
853
-
854
- /**
855
- * Int32Rules describes the rules applied to `int32` values. These
856
- * rules may also be applied to the `google.protobuf.Int32Value` Well-Known-Type.
857
- *
858
- * @generated from message buf.validate.Int32Rules
859
- */
860
- export type Int32Rules = Message<"buf.validate.Int32Rules"> & {
861
- /**
862
- * `const` requires the field value to exactly match the specified value. If
863
- * the field value doesn't match, an error message is generated.
864
- *
865
- * ```proto
866
- * message MyInt32 {
867
- * // value must equal 42
868
- * int32 value = 1 [(buf.validate.field).int32.const = 42];
869
- * }
870
- * ```
871
- *
872
- * @generated from field: optional int32 const = 1;
873
- */
874
- const: number;
875
-
876
- /**
877
- * @generated from oneof buf.validate.Int32Rules.less_than
878
- */
879
- lessThan: {
880
- /**
881
- * `lt` requires the field value to be less than the specified value (field
882
- * < value). If the field value is equal to or greater than the specified
883
- * value, an error message is generated.
884
- *
885
- * ```proto
886
- * message MyInt32 {
887
- * // value must be less than 10
888
- * int32 value = 1 [(buf.validate.field).int32.lt = 10];
889
- * }
890
- * ```
891
- *
892
- * @generated from field: int32 lt = 2;
893
- */
894
- value: number;
895
- case: "lt";
896
- } | {
897
- /**
898
- * `lte` requires the field value to be less than or equal to the specified
899
- * value (field <= value). If the field value is greater than the specified
900
- * value, an error message is generated.
901
- *
902
- * ```proto
903
- * message MyInt32 {
904
- * // value must be less than or equal to 10
905
- * int32 value = 1 [(buf.validate.field).int32.lte = 10];
906
- * }
907
- * ```
908
- *
909
- * @generated from field: int32 lte = 3;
910
- */
911
- value: number;
912
- case: "lte";
913
- } | { case: undefined; value?: undefined };
914
-
915
- /**
916
- * @generated from oneof buf.validate.Int32Rules.greater_than
917
- */
918
- greaterThan: {
919
- /**
920
- * `gt` requires the field value to be greater than the specified value
921
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
922
- * `lte`, the range is reversed, and the field value must be outside the
923
- * specified range. If the field value doesn't meet the required conditions,
924
- * an error message is generated.
925
- *
926
- * ```proto
927
- * message MyInt32 {
928
- * // value must be greater than 5 [int32.gt]
929
- * int32 value = 1 [(buf.validate.field).int32.gt = 5];
930
- *
931
- * // value must be greater than 5 and less than 10 [int32.gt_lt]
932
- * int32 other_value = 2 [(buf.validate.field).int32 = { gt: 5, lt: 10 }];
933
- *
934
- * // value must be greater than 10 or less than 5 [int32.gt_lt_exclusive]
935
- * int32 another_value = 3 [(buf.validate.field).int32 = { gt: 10, lt: 5 }];
936
- * }
937
- * ```
938
- *
939
- * @generated from field: int32 gt = 4;
940
- */
941
- value: number;
942
- case: "gt";
943
- } | {
944
- /**
945
- * `gte` requires the field value to be greater than or equal to the specified value
946
- * (exclusive). If the value of `gte` is larger than a specified `lt` or
947
- * `lte`, the range is reversed, and the field value must be outside the
948
- * specified range. If the field value doesn't meet the required conditions,
949
- * an error message is generated.
950
- *
951
- * ```proto
952
- * message MyInt32 {
953
- * // value must be greater than or equal to 5 [int32.gte]
954
- * int32 value = 1 [(buf.validate.field).int32.gte = 5];
955
- *
956
- * // value must be greater than or equal to 5 and less than 10 [int32.gte_lt]
957
- * int32 other_value = 2 [(buf.validate.field).int32 = { gte: 5, lt: 10 }];
958
- *
959
- * // value must be greater than or equal to 10 or less than 5 [int32.gte_lt_exclusive]
960
- * int32 another_value = 3 [(buf.validate.field).int32 = { gte: 10, lt: 5 }];
961
- * }
962
- * ```
963
- *
964
- * @generated from field: int32 gte = 5;
965
- */
966
- value: number;
967
- case: "gte";
968
- } | { case: undefined; value?: undefined };
969
-
970
- /**
971
- * `in` requires the field value to be equal to one of the specified values.
972
- * If the field value isn't one of the specified values, an error message is
973
- * generated.
974
- *
975
- * ```proto
976
- * message MyInt32 {
977
- * // value must be in list [1, 2, 3]
978
- * int32 value = 1 [(buf.validate.field).int32 = { in: [1, 2, 3] }];
979
- * }
980
- * ```
981
- *
982
- * @generated from field: repeated int32 in = 6;
983
- */
984
- in: number[];
985
-
986
- /**
987
- * `not_in` requires the field value to not be equal to any of the specified
988
- * values. If the field value is one of the specified values, an error message
989
- * is generated.
990
- *
991
- * ```proto
992
- * message MyInt32 {
993
- * // value must not be in list [1, 2, 3]
994
- * int32 value = 1 [(buf.validate.field).int32 = { not_in: [1, 2, 3] }];
995
- * }
996
- * ```
997
- *
998
- * @generated from field: repeated int32 not_in = 7;
999
- */
1000
- notIn: number[];
1001
-
1002
- /**
1003
- * `example` specifies values that the field may have. These values SHOULD
1004
- * conform to other rules. `example` values will not impact validation
1005
- * but may be used as helpful guidance on how to populate the given field.
1006
- *
1007
- * ```proto
1008
- * message MyInt32 {
1009
- * int32 value = 1 [
1010
- * (buf.validate.field).int32.example = 1,
1011
- * (buf.validate.field).int32.example = -10
1012
- * ];
1013
- * }
1014
- * ```
1015
- *
1016
- * @generated from field: repeated int32 example = 8;
1017
- */
1018
- example: number[];
1019
- };
1020
-
1021
- /**
1022
- * Describes the message buf.validate.Int32Rules.
1023
- * Use `create(Int32RulesSchema)` to create a new message.
1024
- */
1025
- export const Int32RulesSchema: GenMessage<Int32Rules> = /*@__PURE__*/
1026
- messageDesc(file_buf_validate_validate, 8);
1027
-
1028
- /**
1029
- * Int64Rules describes the rules applied to `int64` values. These
1030
- * rules may also be applied to the `google.protobuf.Int64Value` Well-Known-Type.
1031
- *
1032
- * @generated from message buf.validate.Int64Rules
1033
- */
1034
- export type Int64Rules = Message<"buf.validate.Int64Rules"> & {
1035
- /**
1036
- * `const` requires the field value to exactly match the specified value. If
1037
- * the field value doesn't match, an error message is generated.
1038
- *
1039
- * ```proto
1040
- * message MyInt64 {
1041
- * // value must equal 42
1042
- * int64 value = 1 [(buf.validate.field).int64.const = 42];
1043
- * }
1044
- * ```
1045
- *
1046
- * @generated from field: optional int64 const = 1;
1047
- */
1048
- const: bigint;
1049
-
1050
- /**
1051
- * @generated from oneof buf.validate.Int64Rules.less_than
1052
- */
1053
- lessThan: {
1054
- /**
1055
- * `lt` requires the field value to be less than the specified value (field <
1056
- * value). If the field value is equal to or greater than the specified value,
1057
- * an error message is generated.
1058
- *
1059
- * ```proto
1060
- * message MyInt64 {
1061
- * // value must be less than 10
1062
- * int64 value = 1 [(buf.validate.field).int64.lt = 10];
1063
- * }
1064
- * ```
1065
- *
1066
- * @generated from field: int64 lt = 2;
1067
- */
1068
- value: bigint;
1069
- case: "lt";
1070
- } | {
1071
- /**
1072
- * `lte` requires the field value to be less than or equal to the specified
1073
- * value (field <= value). If the field value is greater than the specified
1074
- * value, an error message is generated.
1075
- *
1076
- * ```proto
1077
- * message MyInt64 {
1078
- * // value must be less than or equal to 10
1079
- * int64 value = 1 [(buf.validate.field).int64.lte = 10];
1080
- * }
1081
- * ```
1082
- *
1083
- * @generated from field: int64 lte = 3;
1084
- */
1085
- value: bigint;
1086
- case: "lte";
1087
- } | { case: undefined; value?: undefined };
1088
-
1089
- /**
1090
- * @generated from oneof buf.validate.Int64Rules.greater_than
1091
- */
1092
- greaterThan: {
1093
- /**
1094
- * `gt` requires the field value to be greater than the specified value
1095
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
1096
- * `lte`, the range is reversed, and the field value must be outside the
1097
- * specified range. If the field value doesn't meet the required conditions,
1098
- * an error message is generated.
1099
- *
1100
- * ```proto
1101
- * message MyInt64 {
1102
- * // value must be greater than 5 [int64.gt]
1103
- * int64 value = 1 [(buf.validate.field).int64.gt = 5];
1104
- *
1105
- * // value must be greater than 5 and less than 10 [int64.gt_lt]
1106
- * int64 other_value = 2 [(buf.validate.field).int64 = { gt: 5, lt: 10 }];
1107
- *
1108
- * // value must be greater than 10 or less than 5 [int64.gt_lt_exclusive]
1109
- * int64 another_value = 3 [(buf.validate.field).int64 = { gt: 10, lt: 5 }];
1110
- * }
1111
- * ```
1112
- *
1113
- * @generated from field: int64 gt = 4;
1114
- */
1115
- value: bigint;
1116
- case: "gt";
1117
- } | {
1118
- /**
1119
- * `gte` requires the field value to be greater than or equal to the specified
1120
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
1121
- * or `lte`, the range is reversed, and the field value must be outside the
1122
- * specified range. If the field value doesn't meet the required conditions,
1123
- * an error message is generated.
1124
- *
1125
- * ```proto
1126
- * message MyInt64 {
1127
- * // value must be greater than or equal to 5 [int64.gte]
1128
- * int64 value = 1 [(buf.validate.field).int64.gte = 5];
1129
- *
1130
- * // value must be greater than or equal to 5 and less than 10 [int64.gte_lt]
1131
- * int64 other_value = 2 [(buf.validate.field).int64 = { gte: 5, lt: 10 }];
1132
- *
1133
- * // value must be greater than or equal to 10 or less than 5 [int64.gte_lt_exclusive]
1134
- * int64 another_value = 3 [(buf.validate.field).int64 = { gte: 10, lt: 5 }];
1135
- * }
1136
- * ```
1137
- *
1138
- * @generated from field: int64 gte = 5;
1139
- */
1140
- value: bigint;
1141
- case: "gte";
1142
- } | { case: undefined; value?: undefined };
1143
-
1144
- /**
1145
- * `in` requires the field value to be equal to one of the specified values.
1146
- * If the field value isn't one of the specified values, an error message is
1147
- * generated.
1148
- *
1149
- * ```proto
1150
- * message MyInt64 {
1151
- * // value must be in list [1, 2, 3]
1152
- * int64 value = 1 [(buf.validate.field).int64 = { in: [1, 2, 3] }];
1153
- * }
1154
- * ```
1155
- *
1156
- * @generated from field: repeated int64 in = 6;
1157
- */
1158
- in: bigint[];
1159
-
1160
- /**
1161
- * `not_in` requires the field value to not be equal to any of the specified
1162
- * values. If the field value is one of the specified values, an error
1163
- * message is generated.
1164
- *
1165
- * ```proto
1166
- * message MyInt64 {
1167
- * // value must not be in list [1, 2, 3]
1168
- * int64 value = 1 [(buf.validate.field).int64 = { not_in: [1, 2, 3] }];
1169
- * }
1170
- * ```
1171
- *
1172
- * @generated from field: repeated int64 not_in = 7;
1173
- */
1174
- notIn: bigint[];
1175
-
1176
- /**
1177
- * `example` specifies values that the field may have. These values SHOULD
1178
- * conform to other rules. `example` values will not impact validation
1179
- * but may be used as helpful guidance on how to populate the given field.
1180
- *
1181
- * ```proto
1182
- * message MyInt64 {
1183
- * int64 value = 1 [
1184
- * (buf.validate.field).int64.example = 1,
1185
- * (buf.validate.field).int64.example = -10
1186
- * ];
1187
- * }
1188
- * ```
1189
- *
1190
- * @generated from field: repeated int64 example = 9;
1191
- */
1192
- example: bigint[];
1193
- };
1194
-
1195
- /**
1196
- * Describes the message buf.validate.Int64Rules.
1197
- * Use `create(Int64RulesSchema)` to create a new message.
1198
- */
1199
- export const Int64RulesSchema: GenMessage<Int64Rules> = /*@__PURE__*/
1200
- messageDesc(file_buf_validate_validate, 9);
1201
-
1202
- /**
1203
- * UInt32Rules describes the rules applied to `uint32` values. These
1204
- * rules may also be applied to the `google.protobuf.UInt32Value` Well-Known-Type.
1205
- *
1206
- * @generated from message buf.validate.UInt32Rules
1207
- */
1208
- export type UInt32Rules = Message<"buf.validate.UInt32Rules"> & {
1209
- /**
1210
- * `const` requires the field value to exactly match the specified value. If
1211
- * the field value doesn't match, an error message is generated.
1212
- *
1213
- * ```proto
1214
- * message MyUInt32 {
1215
- * // value must equal 42
1216
- * uint32 value = 1 [(buf.validate.field).uint32.const = 42];
1217
- * }
1218
- * ```
1219
- *
1220
- * @generated from field: optional uint32 const = 1;
1221
- */
1222
- const: number;
1223
-
1224
- /**
1225
- * @generated from oneof buf.validate.UInt32Rules.less_than
1226
- */
1227
- lessThan: {
1228
- /**
1229
- * `lt` requires the field value to be less than the specified value (field <
1230
- * value). If the field value is equal to or greater than the specified value,
1231
- * an error message is generated.
1232
- *
1233
- * ```proto
1234
- * message MyUInt32 {
1235
- * // value must be less than 10
1236
- * uint32 value = 1 [(buf.validate.field).uint32.lt = 10];
1237
- * }
1238
- * ```
1239
- *
1240
- * @generated from field: uint32 lt = 2;
1241
- */
1242
- value: number;
1243
- case: "lt";
1244
- } | {
1245
- /**
1246
- * `lte` requires the field value to be less than or equal to the specified
1247
- * value (field <= value). If the field value is greater than the specified
1248
- * value, an error message is generated.
1249
- *
1250
- * ```proto
1251
- * message MyUInt32 {
1252
- * // value must be less than or equal to 10
1253
- * uint32 value = 1 [(buf.validate.field).uint32.lte = 10];
1254
- * }
1255
- * ```
1256
- *
1257
- * @generated from field: uint32 lte = 3;
1258
- */
1259
- value: number;
1260
- case: "lte";
1261
- } | { case: undefined; value?: undefined };
1262
-
1263
- /**
1264
- * @generated from oneof buf.validate.UInt32Rules.greater_than
1265
- */
1266
- greaterThan: {
1267
- /**
1268
- * `gt` requires the field value to be greater than the specified value
1269
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
1270
- * `lte`, the range is reversed, and the field value must be outside the
1271
- * specified range. If the field value doesn't meet the required conditions,
1272
- * an error message is generated.
1273
- *
1274
- * ```proto
1275
- * message MyUInt32 {
1276
- * // value must be greater than 5 [uint32.gt]
1277
- * uint32 value = 1 [(buf.validate.field).uint32.gt = 5];
1278
- *
1279
- * // value must be greater than 5 and less than 10 [uint32.gt_lt]
1280
- * uint32 other_value = 2 [(buf.validate.field).uint32 = { gt: 5, lt: 10 }];
1281
- *
1282
- * // value must be greater than 10 or less than 5 [uint32.gt_lt_exclusive]
1283
- * uint32 another_value = 3 [(buf.validate.field).uint32 = { gt: 10, lt: 5 }];
1284
- * }
1285
- * ```
1286
- *
1287
- * @generated from field: uint32 gt = 4;
1288
- */
1289
- value: number;
1290
- case: "gt";
1291
- } | {
1292
- /**
1293
- * `gte` requires the field value to be greater than or equal to the specified
1294
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
1295
- * or `lte`, the range is reversed, and the field value must be outside the
1296
- * specified range. If the field value doesn't meet the required conditions,
1297
- * an error message is generated.
1298
- *
1299
- * ```proto
1300
- * message MyUInt32 {
1301
- * // value must be greater than or equal to 5 [uint32.gte]
1302
- * uint32 value = 1 [(buf.validate.field).uint32.gte = 5];
1303
- *
1304
- * // value must be greater than or equal to 5 and less than 10 [uint32.gte_lt]
1305
- * uint32 other_value = 2 [(buf.validate.field).uint32 = { gte: 5, lt: 10 }];
1306
- *
1307
- * // value must be greater than or equal to 10 or less than 5 [uint32.gte_lt_exclusive]
1308
- * uint32 another_value = 3 [(buf.validate.field).uint32 = { gte: 10, lt: 5 }];
1309
- * }
1310
- * ```
1311
- *
1312
- * @generated from field: uint32 gte = 5;
1313
- */
1314
- value: number;
1315
- case: "gte";
1316
- } | { case: undefined; value?: undefined };
1317
-
1318
- /**
1319
- * `in` requires the field value to be equal to one of the specified values.
1320
- * If the field value isn't one of the specified values, an error message is
1321
- * generated.
1322
- *
1323
- * ```proto
1324
- * message MyUInt32 {
1325
- * // value must be in list [1, 2, 3]
1326
- * uint32 value = 1 [(buf.validate.field).uint32 = { in: [1, 2, 3] }];
1327
- * }
1328
- * ```
1329
- *
1330
- * @generated from field: repeated uint32 in = 6;
1331
- */
1332
- in: number[];
1333
-
1334
- /**
1335
- * `not_in` requires the field value to not be equal to any of the specified
1336
- * values. If the field value is one of the specified values, an error
1337
- * message is generated.
1338
- *
1339
- * ```proto
1340
- * message MyUInt32 {
1341
- * // value must not be in list [1, 2, 3]
1342
- * uint32 value = 1 [(buf.validate.field).uint32 = { not_in: [1, 2, 3] }];
1343
- * }
1344
- * ```
1345
- *
1346
- * @generated from field: repeated uint32 not_in = 7;
1347
- */
1348
- notIn: number[];
1349
-
1350
- /**
1351
- * `example` specifies values that the field may have. These values SHOULD
1352
- * conform to other rules. `example` values will not impact validation
1353
- * but may be used as helpful guidance on how to populate the given field.
1354
- *
1355
- * ```proto
1356
- * message MyUInt32 {
1357
- * uint32 value = 1 [
1358
- * (buf.validate.field).uint32.example = 1,
1359
- * (buf.validate.field).uint32.example = 10
1360
- * ];
1361
- * }
1362
- * ```
1363
- *
1364
- * @generated from field: repeated uint32 example = 8;
1365
- */
1366
- example: number[];
1367
- };
1368
-
1369
- /**
1370
- * Describes the message buf.validate.UInt32Rules.
1371
- * Use `create(UInt32RulesSchema)` to create a new message.
1372
- */
1373
- export const UInt32RulesSchema: GenMessage<UInt32Rules> = /*@__PURE__*/
1374
- messageDesc(file_buf_validate_validate, 10);
1375
-
1376
- /**
1377
- * UInt64Rules describes the rules applied to `uint64` values. These
1378
- * rules may also be applied to the `google.protobuf.UInt64Value` Well-Known-Type.
1379
- *
1380
- * @generated from message buf.validate.UInt64Rules
1381
- */
1382
- export type UInt64Rules = Message<"buf.validate.UInt64Rules"> & {
1383
- /**
1384
- * `const` requires the field value to exactly match the specified value. If
1385
- * the field value doesn't match, an error message is generated.
1386
- *
1387
- * ```proto
1388
- * message MyUInt64 {
1389
- * // value must equal 42
1390
- * uint64 value = 1 [(buf.validate.field).uint64.const = 42];
1391
- * }
1392
- * ```
1393
- *
1394
- * @generated from field: optional uint64 const = 1;
1395
- */
1396
- const: bigint;
1397
-
1398
- /**
1399
- * @generated from oneof buf.validate.UInt64Rules.less_than
1400
- */
1401
- lessThan: {
1402
- /**
1403
- * `lt` requires the field value to be less than the specified value (field <
1404
- * value). If the field value is equal to or greater than the specified value,
1405
- * an error message is generated.
1406
- *
1407
- * ```proto
1408
- * message MyUInt64 {
1409
- * // value must be less than 10
1410
- * uint64 value = 1 [(buf.validate.field).uint64.lt = 10];
1411
- * }
1412
- * ```
1413
- *
1414
- * @generated from field: uint64 lt = 2;
1415
- */
1416
- value: bigint;
1417
- case: "lt";
1418
- } | {
1419
- /**
1420
- * `lte` requires the field value to be less than or equal to the specified
1421
- * value (field <= value). If the field value is greater than the specified
1422
- * value, an error message is generated.
1423
- *
1424
- * ```proto
1425
- * message MyUInt64 {
1426
- * // value must be less than or equal to 10
1427
- * uint64 value = 1 [(buf.validate.field).uint64.lte = 10];
1428
- * }
1429
- * ```
1430
- *
1431
- * @generated from field: uint64 lte = 3;
1432
- */
1433
- value: bigint;
1434
- case: "lte";
1435
- } | { case: undefined; value?: undefined };
1436
-
1437
- /**
1438
- * @generated from oneof buf.validate.UInt64Rules.greater_than
1439
- */
1440
- greaterThan: {
1441
- /**
1442
- * `gt` requires the field value to be greater than the specified value
1443
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
1444
- * `lte`, the range is reversed, and the field value must be outside the
1445
- * specified range. If the field value doesn't meet the required conditions,
1446
- * an error message is generated.
1447
- *
1448
- * ```proto
1449
- * message MyUInt64 {
1450
- * // value must be greater than 5 [uint64.gt]
1451
- * uint64 value = 1 [(buf.validate.field).uint64.gt = 5];
1452
- *
1453
- * // value must be greater than 5 and less than 10 [uint64.gt_lt]
1454
- * uint64 other_value = 2 [(buf.validate.field).uint64 = { gt: 5, lt: 10 }];
1455
- *
1456
- * // value must be greater than 10 or less than 5 [uint64.gt_lt_exclusive]
1457
- * uint64 another_value = 3 [(buf.validate.field).uint64 = { gt: 10, lt: 5 }];
1458
- * }
1459
- * ```
1460
- *
1461
- * @generated from field: uint64 gt = 4;
1462
- */
1463
- value: bigint;
1464
- case: "gt";
1465
- } | {
1466
- /**
1467
- * `gte` requires the field value to be greater than or equal to the specified
1468
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
1469
- * or `lte`, the range is reversed, and the field value must be outside the
1470
- * specified range. If the field value doesn't meet the required conditions,
1471
- * an error message is generated.
1472
- *
1473
- * ```proto
1474
- * message MyUInt64 {
1475
- * // value must be greater than or equal to 5 [uint64.gte]
1476
- * uint64 value = 1 [(buf.validate.field).uint64.gte = 5];
1477
- *
1478
- * // value must be greater than or equal to 5 and less than 10 [uint64.gte_lt]
1479
- * uint64 other_value = 2 [(buf.validate.field).uint64 = { gte: 5, lt: 10 }];
1480
- *
1481
- * // value must be greater than or equal to 10 or less than 5 [uint64.gte_lt_exclusive]
1482
- * uint64 another_value = 3 [(buf.validate.field).uint64 = { gte: 10, lt: 5 }];
1483
- * }
1484
- * ```
1485
- *
1486
- * @generated from field: uint64 gte = 5;
1487
- */
1488
- value: bigint;
1489
- case: "gte";
1490
- } | { case: undefined; value?: undefined };
1491
-
1492
- /**
1493
- * `in` requires the field value to be equal to one of the specified values.
1494
- * If the field value isn't one of the specified values, an error message is
1495
- * generated.
1496
- *
1497
- * ```proto
1498
- * message MyUInt64 {
1499
- * // value must be in list [1, 2, 3]
1500
- * uint64 value = 1 [(buf.validate.field).uint64 = { in: [1, 2, 3] }];
1501
- * }
1502
- * ```
1503
- *
1504
- * @generated from field: repeated uint64 in = 6;
1505
- */
1506
- in: bigint[];
1507
-
1508
- /**
1509
- * `not_in` requires the field value to not be equal to any of the specified
1510
- * values. If the field value is one of the specified values, an error
1511
- * message is generated.
1512
- *
1513
- * ```proto
1514
- * message MyUInt64 {
1515
- * // value must not be in list [1, 2, 3]
1516
- * uint64 value = 1 [(buf.validate.field).uint64 = { not_in: [1, 2, 3] }];
1517
- * }
1518
- * ```
1519
- *
1520
- * @generated from field: repeated uint64 not_in = 7;
1521
- */
1522
- notIn: bigint[];
1523
-
1524
- /**
1525
- * `example` specifies values that the field may have. These values SHOULD
1526
- * conform to other rules. `example` values will not impact validation
1527
- * but may be used as helpful guidance on how to populate the given field.
1528
- *
1529
- * ```proto
1530
- * message MyUInt64 {
1531
- * uint64 value = 1 [
1532
- * (buf.validate.field).uint64.example = 1,
1533
- * (buf.validate.field).uint64.example = -10
1534
- * ];
1535
- * }
1536
- * ```
1537
- *
1538
- * @generated from field: repeated uint64 example = 8;
1539
- */
1540
- example: bigint[];
1541
- };
1542
-
1543
- /**
1544
- * Describes the message buf.validate.UInt64Rules.
1545
- * Use `create(UInt64RulesSchema)` to create a new message.
1546
- */
1547
- export const UInt64RulesSchema: GenMessage<UInt64Rules> = /*@__PURE__*/
1548
- messageDesc(file_buf_validate_validate, 11);
1549
-
1550
- /**
1551
- * SInt32Rules describes the rules applied to `sint32` values.
1552
- *
1553
- * @generated from message buf.validate.SInt32Rules
1554
- */
1555
- export type SInt32Rules = Message<"buf.validate.SInt32Rules"> & {
1556
- /**
1557
- * `const` requires the field value to exactly match the specified value. If
1558
- * the field value doesn't match, an error message is generated.
1559
- *
1560
- * ```proto
1561
- * message MySInt32 {
1562
- * // value must equal 42
1563
- * sint32 value = 1 [(buf.validate.field).sint32.const = 42];
1564
- * }
1565
- * ```
1566
- *
1567
- * @generated from field: optional sint32 const = 1;
1568
- */
1569
- const: number;
1570
-
1571
- /**
1572
- * @generated from oneof buf.validate.SInt32Rules.less_than
1573
- */
1574
- lessThan: {
1575
- /**
1576
- * `lt` requires the field value to be less than the specified value (field
1577
- * < value). If the field value is equal to or greater than the specified
1578
- * value, an error message is generated.
1579
- *
1580
- * ```proto
1581
- * message MySInt32 {
1582
- * // value must be less than 10
1583
- * sint32 value = 1 [(buf.validate.field).sint32.lt = 10];
1584
- * }
1585
- * ```
1586
- *
1587
- * @generated from field: sint32 lt = 2;
1588
- */
1589
- value: number;
1590
- case: "lt";
1591
- } | {
1592
- /**
1593
- * `lte` requires the field value to be less than or equal to the specified
1594
- * value (field <= value). If the field value is greater than the specified
1595
- * value, an error message is generated.
1596
- *
1597
- * ```proto
1598
- * message MySInt32 {
1599
- * // value must be less than or equal to 10
1600
- * sint32 value = 1 [(buf.validate.field).sint32.lte = 10];
1601
- * }
1602
- * ```
1603
- *
1604
- * @generated from field: sint32 lte = 3;
1605
- */
1606
- value: number;
1607
- case: "lte";
1608
- } | { case: undefined; value?: undefined };
1609
-
1610
- /**
1611
- * @generated from oneof buf.validate.SInt32Rules.greater_than
1612
- */
1613
- greaterThan: {
1614
- /**
1615
- * `gt` requires the field value to be greater than the specified value
1616
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
1617
- * `lte`, the range is reversed, and the field value must be outside the
1618
- * specified range. If the field value doesn't meet the required conditions,
1619
- * an error message is generated.
1620
- *
1621
- * ```proto
1622
- * message MySInt32 {
1623
- * // value must be greater than 5 [sint32.gt]
1624
- * sint32 value = 1 [(buf.validate.field).sint32.gt = 5];
1625
- *
1626
- * // value must be greater than 5 and less than 10 [sint32.gt_lt]
1627
- * sint32 other_value = 2 [(buf.validate.field).sint32 = { gt: 5, lt: 10 }];
1628
- *
1629
- * // value must be greater than 10 or less than 5 [sint32.gt_lt_exclusive]
1630
- * sint32 another_value = 3 [(buf.validate.field).sint32 = { gt: 10, lt: 5 }];
1631
- * }
1632
- * ```
1633
- *
1634
- * @generated from field: sint32 gt = 4;
1635
- */
1636
- value: number;
1637
- case: "gt";
1638
- } | {
1639
- /**
1640
- * `gte` requires the field value to be greater than or equal to the specified
1641
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
1642
- * or `lte`, the range is reversed, and the field value must be outside the
1643
- * specified range. If the field value doesn't meet the required conditions,
1644
- * an error message is generated.
1645
- *
1646
- * ```proto
1647
- * message MySInt32 {
1648
- * // value must be greater than or equal to 5 [sint32.gte]
1649
- * sint32 value = 1 [(buf.validate.field).sint32.gte = 5];
1650
- *
1651
- * // value must be greater than or equal to 5 and less than 10 [sint32.gte_lt]
1652
- * sint32 other_value = 2 [(buf.validate.field).sint32 = { gte: 5, lt: 10 }];
1653
- *
1654
- * // value must be greater than or equal to 10 or less than 5 [sint32.gte_lt_exclusive]
1655
- * sint32 another_value = 3 [(buf.validate.field).sint32 = { gte: 10, lt: 5 }];
1656
- * }
1657
- * ```
1658
- *
1659
- * @generated from field: sint32 gte = 5;
1660
- */
1661
- value: number;
1662
- case: "gte";
1663
- } | { case: undefined; value?: undefined };
1664
-
1665
- /**
1666
- * `in` requires the field value to be equal to one of the specified values.
1667
- * If the field value isn't one of the specified values, an error message is
1668
- * generated.
1669
- *
1670
- * ```proto
1671
- * message MySInt32 {
1672
- * // value must be in list [1, 2, 3]
1673
- * sint32 value = 1 [(buf.validate.field).sint32 = { in: [1, 2, 3] }];
1674
- * }
1675
- * ```
1676
- *
1677
- * @generated from field: repeated sint32 in = 6;
1678
- */
1679
- in: number[];
1680
-
1681
- /**
1682
- * `not_in` requires the field value to not be equal to any of the specified
1683
- * values. If the field value is one of the specified values, an error
1684
- * message is generated.
1685
- *
1686
- * ```proto
1687
- * message MySInt32 {
1688
- * // value must not be in list [1, 2, 3]
1689
- * sint32 value = 1 [(buf.validate.field).sint32 = { not_in: [1, 2, 3] }];
1690
- * }
1691
- * ```
1692
- *
1693
- * @generated from field: repeated sint32 not_in = 7;
1694
- */
1695
- notIn: number[];
1696
-
1697
- /**
1698
- * `example` specifies values that the field may have. These values SHOULD
1699
- * conform to other rules. `example` values will not impact validation
1700
- * but may be used as helpful guidance on how to populate the given field.
1701
- *
1702
- * ```proto
1703
- * message MySInt32 {
1704
- * sint32 value = 1 [
1705
- * (buf.validate.field).sint32.example = 1,
1706
- * (buf.validate.field).sint32.example = -10
1707
- * ];
1708
- * }
1709
- * ```
1710
- *
1711
- * @generated from field: repeated sint32 example = 8;
1712
- */
1713
- example: number[];
1714
- };
1715
-
1716
- /**
1717
- * Describes the message buf.validate.SInt32Rules.
1718
- * Use `create(SInt32RulesSchema)` to create a new message.
1719
- */
1720
- export const SInt32RulesSchema: GenMessage<SInt32Rules> = /*@__PURE__*/
1721
- messageDesc(file_buf_validate_validate, 12);
1722
-
1723
- /**
1724
- * SInt64Rules describes the rules applied to `sint64` values.
1725
- *
1726
- * @generated from message buf.validate.SInt64Rules
1727
- */
1728
- export type SInt64Rules = Message<"buf.validate.SInt64Rules"> & {
1729
- /**
1730
- * `const` requires the field value to exactly match the specified value. If
1731
- * the field value doesn't match, an error message is generated.
1732
- *
1733
- * ```proto
1734
- * message MySInt64 {
1735
- * // value must equal 42
1736
- * sint64 value = 1 [(buf.validate.field).sint64.const = 42];
1737
- * }
1738
- * ```
1739
- *
1740
- * @generated from field: optional sint64 const = 1;
1741
- */
1742
- const: bigint;
1743
-
1744
- /**
1745
- * @generated from oneof buf.validate.SInt64Rules.less_than
1746
- */
1747
- lessThan: {
1748
- /**
1749
- * `lt` requires the field value to be less than the specified value (field
1750
- * < value). If the field value is equal to or greater than the specified
1751
- * value, an error message is generated.
1752
- *
1753
- * ```proto
1754
- * message MySInt64 {
1755
- * // value must be less than 10
1756
- * sint64 value = 1 [(buf.validate.field).sint64.lt = 10];
1757
- * }
1758
- * ```
1759
- *
1760
- * @generated from field: sint64 lt = 2;
1761
- */
1762
- value: bigint;
1763
- case: "lt";
1764
- } | {
1765
- /**
1766
- * `lte` requires the field value to be less than or equal to the specified
1767
- * value (field <= value). If the field value is greater than the specified
1768
- * value, an error message is generated.
1769
- *
1770
- * ```proto
1771
- * message MySInt64 {
1772
- * // value must be less than or equal to 10
1773
- * sint64 value = 1 [(buf.validate.field).sint64.lte = 10];
1774
- * }
1775
- * ```
1776
- *
1777
- * @generated from field: sint64 lte = 3;
1778
- */
1779
- value: bigint;
1780
- case: "lte";
1781
- } | { case: undefined; value?: undefined };
1782
-
1783
- /**
1784
- * @generated from oneof buf.validate.SInt64Rules.greater_than
1785
- */
1786
- greaterThan: {
1787
- /**
1788
- * `gt` requires the field value to be greater than the specified value
1789
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
1790
- * `lte`, the range is reversed, and the field value must be outside the
1791
- * specified range. If the field value doesn't meet the required conditions,
1792
- * an error message is generated.
1793
- *
1794
- * ```proto
1795
- * message MySInt64 {
1796
- * // value must be greater than 5 [sint64.gt]
1797
- * sint64 value = 1 [(buf.validate.field).sint64.gt = 5];
1798
- *
1799
- * // value must be greater than 5 and less than 10 [sint64.gt_lt]
1800
- * sint64 other_value = 2 [(buf.validate.field).sint64 = { gt: 5, lt: 10 }];
1801
- *
1802
- * // value must be greater than 10 or less than 5 [sint64.gt_lt_exclusive]
1803
- * sint64 another_value = 3 [(buf.validate.field).sint64 = { gt: 10, lt: 5 }];
1804
- * }
1805
- * ```
1806
- *
1807
- * @generated from field: sint64 gt = 4;
1808
- */
1809
- value: bigint;
1810
- case: "gt";
1811
- } | {
1812
- /**
1813
- * `gte` requires the field value to be greater than or equal to the specified
1814
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
1815
- * or `lte`, the range is reversed, and the field value must be outside the
1816
- * specified range. If the field value doesn't meet the required conditions,
1817
- * an error message is generated.
1818
- *
1819
- * ```proto
1820
- * message MySInt64 {
1821
- * // value must be greater than or equal to 5 [sint64.gte]
1822
- * sint64 value = 1 [(buf.validate.field).sint64.gte = 5];
1823
- *
1824
- * // value must be greater than or equal to 5 and less than 10 [sint64.gte_lt]
1825
- * sint64 other_value = 2 [(buf.validate.field).sint64 = { gte: 5, lt: 10 }];
1826
- *
1827
- * // value must be greater than or equal to 10 or less than 5 [sint64.gte_lt_exclusive]
1828
- * sint64 another_value = 3 [(buf.validate.field).sint64 = { gte: 10, lt: 5 }];
1829
- * }
1830
- * ```
1831
- *
1832
- * @generated from field: sint64 gte = 5;
1833
- */
1834
- value: bigint;
1835
- case: "gte";
1836
- } | { case: undefined; value?: undefined };
1837
-
1838
- /**
1839
- * `in` requires the field value to be equal to one of the specified values.
1840
- * If the field value isn't one of the specified values, an error message
1841
- * is generated.
1842
- *
1843
- * ```proto
1844
- * message MySInt64 {
1845
- * // value must be in list [1, 2, 3]
1846
- * sint64 value = 1 [(buf.validate.field).sint64 = { in: [1, 2, 3] }];
1847
- * }
1848
- * ```
1849
- *
1850
- * @generated from field: repeated sint64 in = 6;
1851
- */
1852
- in: bigint[];
1853
-
1854
- /**
1855
- * `not_in` requires the field value to not be equal to any of the specified
1856
- * values. If the field value is one of the specified values, an error
1857
- * message is generated.
1858
- *
1859
- * ```proto
1860
- * message MySInt64 {
1861
- * // value must not be in list [1, 2, 3]
1862
- * sint64 value = 1 [(buf.validate.field).sint64 = { not_in: [1, 2, 3] }];
1863
- * }
1864
- * ```
1865
- *
1866
- * @generated from field: repeated sint64 not_in = 7;
1867
- */
1868
- notIn: bigint[];
1869
-
1870
- /**
1871
- * `example` specifies values that the field may have. These values SHOULD
1872
- * conform to other rules. `example` values will not impact validation
1873
- * but may be used as helpful guidance on how to populate the given field.
1874
- *
1875
- * ```proto
1876
- * message MySInt64 {
1877
- * sint64 value = 1 [
1878
- * (buf.validate.field).sint64.example = 1,
1879
- * (buf.validate.field).sint64.example = -10
1880
- * ];
1881
- * }
1882
- * ```
1883
- *
1884
- * @generated from field: repeated sint64 example = 8;
1885
- */
1886
- example: bigint[];
1887
- };
1888
-
1889
- /**
1890
- * Describes the message buf.validate.SInt64Rules.
1891
- * Use `create(SInt64RulesSchema)` to create a new message.
1892
- */
1893
- export const SInt64RulesSchema: GenMessage<SInt64Rules> = /*@__PURE__*/
1894
- messageDesc(file_buf_validate_validate, 13);
1895
-
1896
- /**
1897
- * Fixed32Rules describes the rules applied to `fixed32` values.
1898
- *
1899
- * @generated from message buf.validate.Fixed32Rules
1900
- */
1901
- export type Fixed32Rules = Message<"buf.validate.Fixed32Rules"> & {
1902
- /**
1903
- * `const` requires the field value to exactly match the specified value.
1904
- * If the field value doesn't match, an error message is generated.
1905
- *
1906
- * ```proto
1907
- * message MyFixed32 {
1908
- * // value must equal 42
1909
- * fixed32 value = 1 [(buf.validate.field).fixed32.const = 42];
1910
- * }
1911
- * ```
1912
- *
1913
- * @generated from field: optional fixed32 const = 1;
1914
- */
1915
- const: number;
1916
-
1917
- /**
1918
- * @generated from oneof buf.validate.Fixed32Rules.less_than
1919
- */
1920
- lessThan: {
1921
- /**
1922
- * `lt` requires the field value to be less than the specified value (field <
1923
- * value). If the field value is equal to or greater than the specified value,
1924
- * an error message is generated.
1925
- *
1926
- * ```proto
1927
- * message MyFixed32 {
1928
- * // value must be less than 10
1929
- * fixed32 value = 1 [(buf.validate.field).fixed32.lt = 10];
1930
- * }
1931
- * ```
1932
- *
1933
- * @generated from field: fixed32 lt = 2;
1934
- */
1935
- value: number;
1936
- case: "lt";
1937
- } | {
1938
- /**
1939
- * `lte` requires the field value to be less than or equal to the specified
1940
- * value (field <= value). If the field value is greater than the specified
1941
- * value, an error message is generated.
1942
- *
1943
- * ```proto
1944
- * message MyFixed32 {
1945
- * // value must be less than or equal to 10
1946
- * fixed32 value = 1 [(buf.validate.field).fixed32.lte = 10];
1947
- * }
1948
- * ```
1949
- *
1950
- * @generated from field: fixed32 lte = 3;
1951
- */
1952
- value: number;
1953
- case: "lte";
1954
- } | { case: undefined; value?: undefined };
1955
-
1956
- /**
1957
- * @generated from oneof buf.validate.Fixed32Rules.greater_than
1958
- */
1959
- greaterThan: {
1960
- /**
1961
- * `gt` requires the field value to be greater than the specified value
1962
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
1963
- * `lte`, the range is reversed, and the field value must be outside the
1964
- * specified range. If the field value doesn't meet the required conditions,
1965
- * an error message is generated.
1966
- *
1967
- * ```proto
1968
- * message MyFixed32 {
1969
- * // value must be greater than 5 [fixed32.gt]
1970
- * fixed32 value = 1 [(buf.validate.field).fixed32.gt = 5];
1971
- *
1972
- * // value must be greater than 5 and less than 10 [fixed32.gt_lt]
1973
- * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gt: 5, lt: 10 }];
1974
- *
1975
- * // value must be greater than 10 or less than 5 [fixed32.gt_lt_exclusive]
1976
- * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gt: 10, lt: 5 }];
1977
- * }
1978
- * ```
1979
- *
1980
- * @generated from field: fixed32 gt = 4;
1981
- */
1982
- value: number;
1983
- case: "gt";
1984
- } | {
1985
- /**
1986
- * `gte` requires the field value to be greater than or equal to the specified
1987
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
1988
- * or `lte`, the range is reversed, and the field value must be outside the
1989
- * specified range. If the field value doesn't meet the required conditions,
1990
- * an error message is generated.
1991
- *
1992
- * ```proto
1993
- * message MyFixed32 {
1994
- * // value must be greater than or equal to 5 [fixed32.gte]
1995
- * fixed32 value = 1 [(buf.validate.field).fixed32.gte = 5];
1996
- *
1997
- * // value must be greater than or equal to 5 and less than 10 [fixed32.gte_lt]
1998
- * fixed32 other_value = 2 [(buf.validate.field).fixed32 = { gte: 5, lt: 10 }];
1999
- *
2000
- * // value must be greater than or equal to 10 or less than 5 [fixed32.gte_lt_exclusive]
2001
- * fixed32 another_value = 3 [(buf.validate.field).fixed32 = { gte: 10, lt: 5 }];
2002
- * }
2003
- * ```
2004
- *
2005
- * @generated from field: fixed32 gte = 5;
2006
- */
2007
- value: number;
2008
- case: "gte";
2009
- } | { case: undefined; value?: undefined };
2010
-
2011
- /**
2012
- * `in` requires the field value to be equal to one of the specified values.
2013
- * If the field value isn't one of the specified values, an error message
2014
- * is generated.
2015
- *
2016
- * ```proto
2017
- * message MyFixed32 {
2018
- * // value must be in list [1, 2, 3]
2019
- * fixed32 value = 1 [(buf.validate.field).fixed32 = { in: [1, 2, 3] }];
2020
- * }
2021
- * ```
2022
- *
2023
- * @generated from field: repeated fixed32 in = 6;
2024
- */
2025
- in: number[];
2026
-
2027
- /**
2028
- * `not_in` requires the field value to not be equal to any of the specified
2029
- * values. If the field value is one of the specified values, an error
2030
- * message is generated.
2031
- *
2032
- * ```proto
2033
- * message MyFixed32 {
2034
- * // value must not be in list [1, 2, 3]
2035
- * fixed32 value = 1 [(buf.validate.field).fixed32 = { not_in: [1, 2, 3] }];
2036
- * }
2037
- * ```
2038
- *
2039
- * @generated from field: repeated fixed32 not_in = 7;
2040
- */
2041
- notIn: number[];
2042
-
2043
- /**
2044
- * `example` specifies values that the field may have. These values SHOULD
2045
- * conform to other rules. `example` values will not impact validation
2046
- * but may be used as helpful guidance on how to populate the given field.
2047
- *
2048
- * ```proto
2049
- * message MyFixed32 {
2050
- * fixed32 value = 1 [
2051
- * (buf.validate.field).fixed32.example = 1,
2052
- * (buf.validate.field).fixed32.example = 2
2053
- * ];
2054
- * }
2055
- * ```
2056
- *
2057
- * @generated from field: repeated fixed32 example = 8;
2058
- */
2059
- example: number[];
2060
- };
2061
-
2062
- /**
2063
- * Describes the message buf.validate.Fixed32Rules.
2064
- * Use `create(Fixed32RulesSchema)` to create a new message.
2065
- */
2066
- export const Fixed32RulesSchema: GenMessage<Fixed32Rules> = /*@__PURE__*/
2067
- messageDesc(file_buf_validate_validate, 14);
2068
-
2069
- /**
2070
- * Fixed64Rules describes the rules applied to `fixed64` values.
2071
- *
2072
- * @generated from message buf.validate.Fixed64Rules
2073
- */
2074
- export type Fixed64Rules = Message<"buf.validate.Fixed64Rules"> & {
2075
- /**
2076
- * `const` requires the field value to exactly match the specified value. If
2077
- * the field value doesn't match, an error message is generated.
2078
- *
2079
- * ```proto
2080
- * message MyFixed64 {
2081
- * // value must equal 42
2082
- * fixed64 value = 1 [(buf.validate.field).fixed64.const = 42];
2083
- * }
2084
- * ```
2085
- *
2086
- * @generated from field: optional fixed64 const = 1;
2087
- */
2088
- const: bigint;
2089
-
2090
- /**
2091
- * @generated from oneof buf.validate.Fixed64Rules.less_than
2092
- */
2093
- lessThan: {
2094
- /**
2095
- * `lt` requires the field value to be less than the specified value (field <
2096
- * value). If the field value is equal to or greater than the specified value,
2097
- * an error message is generated.
2098
- *
2099
- * ```proto
2100
- * message MyFixed64 {
2101
- * // value must be less than 10
2102
- * fixed64 value = 1 [(buf.validate.field).fixed64.lt = 10];
2103
- * }
2104
- * ```
2105
- *
2106
- * @generated from field: fixed64 lt = 2;
2107
- */
2108
- value: bigint;
2109
- case: "lt";
2110
- } | {
2111
- /**
2112
- * `lte` requires the field value to be less than or equal to the specified
2113
- * value (field <= value). If the field value is greater than the specified
2114
- * value, an error message is generated.
2115
- *
2116
- * ```proto
2117
- * message MyFixed64 {
2118
- * // value must be less than or equal to 10
2119
- * fixed64 value = 1 [(buf.validate.field).fixed64.lte = 10];
2120
- * }
2121
- * ```
2122
- *
2123
- * @generated from field: fixed64 lte = 3;
2124
- */
2125
- value: bigint;
2126
- case: "lte";
2127
- } | { case: undefined; value?: undefined };
2128
-
2129
- /**
2130
- * @generated from oneof buf.validate.Fixed64Rules.greater_than
2131
- */
2132
- greaterThan: {
2133
- /**
2134
- * `gt` requires the field value to be greater than the specified value
2135
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
2136
- * `lte`, the range is reversed, and the field value must be outside the
2137
- * specified range. If the field value doesn't meet the required conditions,
2138
- * an error message is generated.
2139
- *
2140
- * ```proto
2141
- * message MyFixed64 {
2142
- * // value must be greater than 5 [fixed64.gt]
2143
- * fixed64 value = 1 [(buf.validate.field).fixed64.gt = 5];
2144
- *
2145
- * // value must be greater than 5 and less than 10 [fixed64.gt_lt]
2146
- * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gt: 5, lt: 10 }];
2147
- *
2148
- * // value must be greater than 10 or less than 5 [fixed64.gt_lt_exclusive]
2149
- * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gt: 10, lt: 5 }];
2150
- * }
2151
- * ```
2152
- *
2153
- * @generated from field: fixed64 gt = 4;
2154
- */
2155
- value: bigint;
2156
- case: "gt";
2157
- } | {
2158
- /**
2159
- * `gte` requires the field value to be greater than or equal to the specified
2160
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
2161
- * or `lte`, the range is reversed, and the field value must be outside the
2162
- * specified range. If the field value doesn't meet the required conditions,
2163
- * an error message is generated.
2164
- *
2165
- * ```proto
2166
- * message MyFixed64 {
2167
- * // value must be greater than or equal to 5 [fixed64.gte]
2168
- * fixed64 value = 1 [(buf.validate.field).fixed64.gte = 5];
2169
- *
2170
- * // value must be greater than or equal to 5 and less than 10 [fixed64.gte_lt]
2171
- * fixed64 other_value = 2 [(buf.validate.field).fixed64 = { gte: 5, lt: 10 }];
2172
- *
2173
- * // value must be greater than or equal to 10 or less than 5 [fixed64.gte_lt_exclusive]
2174
- * fixed64 another_value = 3 [(buf.validate.field).fixed64 = { gte: 10, lt: 5 }];
2175
- * }
2176
- * ```
2177
- *
2178
- * @generated from field: fixed64 gte = 5;
2179
- */
2180
- value: bigint;
2181
- case: "gte";
2182
- } | { case: undefined; value?: undefined };
2183
-
2184
- /**
2185
- * `in` requires the field value to be equal to one of the specified values.
2186
- * If the field value isn't one of the specified values, an error message is
2187
- * generated.
2188
- *
2189
- * ```proto
2190
- * message MyFixed64 {
2191
- * // value must be in list [1, 2, 3]
2192
- * fixed64 value = 1 [(buf.validate.field).fixed64 = { in: [1, 2, 3] }];
2193
- * }
2194
- * ```
2195
- *
2196
- * @generated from field: repeated fixed64 in = 6;
2197
- */
2198
- in: bigint[];
2199
-
2200
- /**
2201
- * `not_in` requires the field value to not be equal to any of the specified
2202
- * values. If the field value is one of the specified values, an error
2203
- * message is generated.
2204
- *
2205
- * ```proto
2206
- * message MyFixed64 {
2207
- * // value must not be in list [1, 2, 3]
2208
- * fixed64 value = 1 [(buf.validate.field).fixed64 = { not_in: [1, 2, 3] }];
2209
- * }
2210
- * ```
2211
- *
2212
- * @generated from field: repeated fixed64 not_in = 7;
2213
- */
2214
- notIn: bigint[];
2215
-
2216
- /**
2217
- * `example` specifies values that the field may have. These values SHOULD
2218
- * conform to other rules. `example` values will not impact validation
2219
- * but may be used as helpful guidance on how to populate the given field.
2220
- *
2221
- * ```proto
2222
- * message MyFixed64 {
2223
- * fixed64 value = 1 [
2224
- * (buf.validate.field).fixed64.example = 1,
2225
- * (buf.validate.field).fixed64.example = 2
2226
- * ];
2227
- * }
2228
- * ```
2229
- *
2230
- * @generated from field: repeated fixed64 example = 8;
2231
- */
2232
- example: bigint[];
2233
- };
2234
-
2235
- /**
2236
- * Describes the message buf.validate.Fixed64Rules.
2237
- * Use `create(Fixed64RulesSchema)` to create a new message.
2238
- */
2239
- export const Fixed64RulesSchema: GenMessage<Fixed64Rules> = /*@__PURE__*/
2240
- messageDesc(file_buf_validate_validate, 15);
2241
-
2242
- /**
2243
- * SFixed32Rules describes the rules applied to `fixed32` values.
2244
- *
2245
- * @generated from message buf.validate.SFixed32Rules
2246
- */
2247
- export type SFixed32Rules = Message<"buf.validate.SFixed32Rules"> & {
2248
- /**
2249
- * `const` requires the field value to exactly match the specified value. If
2250
- * the field value doesn't match, an error message is generated.
2251
- *
2252
- * ```proto
2253
- * message MySFixed32 {
2254
- * // value must equal 42
2255
- * sfixed32 value = 1 [(buf.validate.field).sfixed32.const = 42];
2256
- * }
2257
- * ```
2258
- *
2259
- * @generated from field: optional sfixed32 const = 1;
2260
- */
2261
- const: number;
2262
-
2263
- /**
2264
- * @generated from oneof buf.validate.SFixed32Rules.less_than
2265
- */
2266
- lessThan: {
2267
- /**
2268
- * `lt` requires the field value to be less than the specified value (field <
2269
- * value). If the field value is equal to or greater than the specified value,
2270
- * an error message is generated.
2271
- *
2272
- * ```proto
2273
- * message MySFixed32 {
2274
- * // value must be less than 10
2275
- * sfixed32 value = 1 [(buf.validate.field).sfixed32.lt = 10];
2276
- * }
2277
- * ```
2278
- *
2279
- * @generated from field: sfixed32 lt = 2;
2280
- */
2281
- value: number;
2282
- case: "lt";
2283
- } | {
2284
- /**
2285
- * `lte` requires the field value to be less than or equal to the specified
2286
- * value (field <= value). If the field value is greater than the specified
2287
- * value, an error message is generated.
2288
- *
2289
- * ```proto
2290
- * message MySFixed32 {
2291
- * // value must be less than or equal to 10
2292
- * sfixed32 value = 1 [(buf.validate.field).sfixed32.lte = 10];
2293
- * }
2294
- * ```
2295
- *
2296
- * @generated from field: sfixed32 lte = 3;
2297
- */
2298
- value: number;
2299
- case: "lte";
2300
- } | { case: undefined; value?: undefined };
2301
-
2302
- /**
2303
- * @generated from oneof buf.validate.SFixed32Rules.greater_than
2304
- */
2305
- greaterThan: {
2306
- /**
2307
- * `gt` requires the field value to be greater than the specified value
2308
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
2309
- * `lte`, the range is reversed, and the field value must be outside the
2310
- * specified range. If the field value doesn't meet the required conditions,
2311
- * an error message is generated.
2312
- *
2313
- * ```proto
2314
- * message MySFixed32 {
2315
- * // value must be greater than 5 [sfixed32.gt]
2316
- * sfixed32 value = 1 [(buf.validate.field).sfixed32.gt = 5];
2317
- *
2318
- * // value must be greater than 5 and less than 10 [sfixed32.gt_lt]
2319
- * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gt: 5, lt: 10 }];
2320
- *
2321
- * // value must be greater than 10 or less than 5 [sfixed32.gt_lt_exclusive]
2322
- * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gt: 10, lt: 5 }];
2323
- * }
2324
- * ```
2325
- *
2326
- * @generated from field: sfixed32 gt = 4;
2327
- */
2328
- value: number;
2329
- case: "gt";
2330
- } | {
2331
- /**
2332
- * `gte` requires the field value to be greater than or equal to the specified
2333
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
2334
- * or `lte`, the range is reversed, and the field value must be outside the
2335
- * specified range. If the field value doesn't meet the required conditions,
2336
- * an error message is generated.
2337
- *
2338
- * ```proto
2339
- * message MySFixed32 {
2340
- * // value must be greater than or equal to 5 [sfixed32.gte]
2341
- * sfixed32 value = 1 [(buf.validate.field).sfixed32.gte = 5];
2342
- *
2343
- * // value must be greater than or equal to 5 and less than 10 [sfixed32.gte_lt]
2344
- * sfixed32 other_value = 2 [(buf.validate.field).sfixed32 = { gte: 5, lt: 10 }];
2345
- *
2346
- * // value must be greater than or equal to 10 or less than 5 [sfixed32.gte_lt_exclusive]
2347
- * sfixed32 another_value = 3 [(buf.validate.field).sfixed32 = { gte: 10, lt: 5 }];
2348
- * }
2349
- * ```
2350
- *
2351
- * @generated from field: sfixed32 gte = 5;
2352
- */
2353
- value: number;
2354
- case: "gte";
2355
- } | { case: undefined; value?: undefined };
2356
-
2357
- /**
2358
- * `in` requires the field value to be equal to one of the specified values.
2359
- * If the field value isn't one of the specified values, an error message is
2360
- * generated.
2361
- *
2362
- * ```proto
2363
- * message MySFixed32 {
2364
- * // value must be in list [1, 2, 3]
2365
- * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { in: [1, 2, 3] }];
2366
- * }
2367
- * ```
2368
- *
2369
- * @generated from field: repeated sfixed32 in = 6;
2370
- */
2371
- in: number[];
2372
-
2373
- /**
2374
- * `not_in` requires the field value to not be equal to any of the specified
2375
- * values. If the field value is one of the specified values, an error
2376
- * message is generated.
2377
- *
2378
- * ```proto
2379
- * message MySFixed32 {
2380
- * // value must not be in list [1, 2, 3]
2381
- * sfixed32 value = 1 [(buf.validate.field).sfixed32 = { not_in: [1, 2, 3] }];
2382
- * }
2383
- * ```
2384
- *
2385
- * @generated from field: repeated sfixed32 not_in = 7;
2386
- */
2387
- notIn: number[];
2388
-
2389
- /**
2390
- * `example` specifies values that the field may have. These values SHOULD
2391
- * conform to other rules. `example` values will not impact validation
2392
- * but may be used as helpful guidance on how to populate the given field.
2393
- *
2394
- * ```proto
2395
- * message MySFixed32 {
2396
- * sfixed32 value = 1 [
2397
- * (buf.validate.field).sfixed32.example = 1,
2398
- * (buf.validate.field).sfixed32.example = 2
2399
- * ];
2400
- * }
2401
- * ```
2402
- *
2403
- * @generated from field: repeated sfixed32 example = 8;
2404
- */
2405
- example: number[];
2406
- };
2407
-
2408
- /**
2409
- * Describes the message buf.validate.SFixed32Rules.
2410
- * Use `create(SFixed32RulesSchema)` to create a new message.
2411
- */
2412
- export const SFixed32RulesSchema: GenMessage<SFixed32Rules> = /*@__PURE__*/
2413
- messageDesc(file_buf_validate_validate, 16);
2414
-
2415
- /**
2416
- * SFixed64Rules describes the rules applied to `fixed64` values.
2417
- *
2418
- * @generated from message buf.validate.SFixed64Rules
2419
- */
2420
- export type SFixed64Rules = Message<"buf.validate.SFixed64Rules"> & {
2421
- /**
2422
- * `const` requires the field value to exactly match the specified value. If
2423
- * the field value doesn't match, an error message is generated.
2424
- *
2425
- * ```proto
2426
- * message MySFixed64 {
2427
- * // value must equal 42
2428
- * sfixed64 value = 1 [(buf.validate.field).sfixed64.const = 42];
2429
- * }
2430
- * ```
2431
- *
2432
- * @generated from field: optional sfixed64 const = 1;
2433
- */
2434
- const: bigint;
2435
-
2436
- /**
2437
- * @generated from oneof buf.validate.SFixed64Rules.less_than
2438
- */
2439
- lessThan: {
2440
- /**
2441
- * `lt` requires the field value to be less than the specified value (field <
2442
- * value). If the field value is equal to or greater than the specified value,
2443
- * an error message is generated.
2444
- *
2445
- * ```proto
2446
- * message MySFixed64 {
2447
- * // value must be less than 10
2448
- * sfixed64 value = 1 [(buf.validate.field).sfixed64.lt = 10];
2449
- * }
2450
- * ```
2451
- *
2452
- * @generated from field: sfixed64 lt = 2;
2453
- */
2454
- value: bigint;
2455
- case: "lt";
2456
- } | {
2457
- /**
2458
- * `lte` requires the field value to be less than or equal to the specified
2459
- * value (field <= value). If the field value is greater than the specified
2460
- * value, an error message is generated.
2461
- *
2462
- * ```proto
2463
- * message MySFixed64 {
2464
- * // value must be less than or equal to 10
2465
- * sfixed64 value = 1 [(buf.validate.field).sfixed64.lte = 10];
2466
- * }
2467
- * ```
2468
- *
2469
- * @generated from field: sfixed64 lte = 3;
2470
- */
2471
- value: bigint;
2472
- case: "lte";
2473
- } | { case: undefined; value?: undefined };
2474
-
2475
- /**
2476
- * @generated from oneof buf.validate.SFixed64Rules.greater_than
2477
- */
2478
- greaterThan: {
2479
- /**
2480
- * `gt` requires the field value to be greater than the specified value
2481
- * (exclusive). If the value of `gt` is larger than a specified `lt` or
2482
- * `lte`, the range is reversed, and the field value must be outside the
2483
- * specified range. If the field value doesn't meet the required conditions,
2484
- * an error message is generated.
2485
- *
2486
- * ```proto
2487
- * message MySFixed64 {
2488
- * // value must be greater than 5 [sfixed64.gt]
2489
- * sfixed64 value = 1 [(buf.validate.field).sfixed64.gt = 5];
2490
- *
2491
- * // value must be greater than 5 and less than 10 [sfixed64.gt_lt]
2492
- * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gt: 5, lt: 10 }];
2493
- *
2494
- * // value must be greater than 10 or less than 5 [sfixed64.gt_lt_exclusive]
2495
- * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gt: 10, lt: 5 }];
2496
- * }
2497
- * ```
2498
- *
2499
- * @generated from field: sfixed64 gt = 4;
2500
- */
2501
- value: bigint;
2502
- case: "gt";
2503
- } | {
2504
- /**
2505
- * `gte` requires the field value to be greater than or equal to the specified
2506
- * value (exclusive). If the value of `gte` is larger than a specified `lt`
2507
- * or `lte`, the range is reversed, and the field value must be outside the
2508
- * specified range. If the field value doesn't meet the required conditions,
2509
- * an error message is generated.
2510
- *
2511
- * ```proto
2512
- * message MySFixed64 {
2513
- * // value must be greater than or equal to 5 [sfixed64.gte]
2514
- * sfixed64 value = 1 [(buf.validate.field).sfixed64.gte = 5];
2515
- *
2516
- * // value must be greater than or equal to 5 and less than 10 [sfixed64.gte_lt]
2517
- * sfixed64 other_value = 2 [(buf.validate.field).sfixed64 = { gte: 5, lt: 10 }];
2518
- *
2519
- * // value must be greater than or equal to 10 or less than 5 [sfixed64.gte_lt_exclusive]
2520
- * sfixed64 another_value = 3 [(buf.validate.field).sfixed64 = { gte: 10, lt: 5 }];
2521
- * }
2522
- * ```
2523
- *
2524
- * @generated from field: sfixed64 gte = 5;
2525
- */
2526
- value: bigint;
2527
- case: "gte";
2528
- } | { case: undefined; value?: undefined };
2529
-
2530
- /**
2531
- * `in` requires the field value to be equal to one of the specified values.
2532
- * If the field value isn't one of the specified values, an error message is
2533
- * generated.
2534
- *
2535
- * ```proto
2536
- * message MySFixed64 {
2537
- * // value must be in list [1, 2, 3]
2538
- * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { in: [1, 2, 3] }];
2539
- * }
2540
- * ```
2541
- *
2542
- * @generated from field: repeated sfixed64 in = 6;
2543
- */
2544
- in: bigint[];
2545
-
2546
- /**
2547
- * `not_in` requires the field value to not be equal to any of the specified
2548
- * values. If the field value is one of the specified values, an error
2549
- * message is generated.
2550
- *
2551
- * ```proto
2552
- * message MySFixed64 {
2553
- * // value must not be in list [1, 2, 3]
2554
- * sfixed64 value = 1 [(buf.validate.field).sfixed64 = { not_in: [1, 2, 3] }];
2555
- * }
2556
- * ```
2557
- *
2558
- * @generated from field: repeated sfixed64 not_in = 7;
2559
- */
2560
- notIn: bigint[];
2561
-
2562
- /**
2563
- * `example` specifies values that the field may have. These values SHOULD
2564
- * conform to other rules. `example` values will not impact validation
2565
- * but may be used as helpful guidance on how to populate the given field.
2566
- *
2567
- * ```proto
2568
- * message MySFixed64 {
2569
- * sfixed64 value = 1 [
2570
- * (buf.validate.field).sfixed64.example = 1,
2571
- * (buf.validate.field).sfixed64.example = 2
2572
- * ];
2573
- * }
2574
- * ```
2575
- *
2576
- * @generated from field: repeated sfixed64 example = 8;
2577
- */
2578
- example: bigint[];
2579
- };
2580
-
2581
- /**
2582
- * Describes the message buf.validate.SFixed64Rules.
2583
- * Use `create(SFixed64RulesSchema)` to create a new message.
2584
- */
2585
- export const SFixed64RulesSchema: GenMessage<SFixed64Rules> = /*@__PURE__*/
2586
- messageDesc(file_buf_validate_validate, 17);
2587
-
2588
- /**
2589
- * BoolRules describes the rules applied to `bool` values. These rules
2590
- * may also be applied to the `google.protobuf.BoolValue` Well-Known-Type.
2591
- *
2592
- * @generated from message buf.validate.BoolRules
2593
- */
2594
- export type BoolRules = Message<"buf.validate.BoolRules"> & {
2595
- /**
2596
- * `const` requires the field value to exactly match the specified boolean value.
2597
- * If the field value doesn't match, an error message is generated.
2598
- *
2599
- * ```proto
2600
- * message MyBool {
2601
- * // value must equal true
2602
- * bool value = 1 [(buf.validate.field).bool.const = true];
2603
- * }
2604
- * ```
2605
- *
2606
- * @generated from field: optional bool const = 1;
2607
- */
2608
- const: boolean;
2609
-
2610
- /**
2611
- * `example` specifies values that the field may have. These values SHOULD
2612
- * conform to other rules. `example` values will not impact validation
2613
- * but may be used as helpful guidance on how to populate the given field.
2614
- *
2615
- * ```proto
2616
- * message MyBool {
2617
- * bool value = 1 [
2618
- * (buf.validate.field).bool.example = 1,
2619
- * (buf.validate.field).bool.example = 2
2620
- * ];
2621
- * }
2622
- * ```
2623
- *
2624
- * @generated from field: repeated bool example = 2;
2625
- */
2626
- example: boolean[];
2627
- };
2628
-
2629
- /**
2630
- * Describes the message buf.validate.BoolRules.
2631
- * Use `create(BoolRulesSchema)` to create a new message.
2632
- */
2633
- export const BoolRulesSchema: GenMessage<BoolRules> = /*@__PURE__*/
2634
- messageDesc(file_buf_validate_validate, 18);
2635
-
2636
- /**
2637
- * StringRules describes the rules applied to `string` values These
2638
- * rules may also be applied to the `google.protobuf.StringValue` Well-Known-Type.
2639
- *
2640
- * @generated from message buf.validate.StringRules
2641
- */
2642
- export type StringRules = Message<"buf.validate.StringRules"> & {
2643
- /**
2644
- * `const` requires the field value to exactly match the specified value. If
2645
- * the field value doesn't match, an error message is generated.
2646
- *
2647
- * ```proto
2648
- * message MyString {
2649
- * // value must equal `hello`
2650
- * string value = 1 [(buf.validate.field).string.const = "hello"];
2651
- * }
2652
- * ```
2653
- *
2654
- * @generated from field: optional string const = 1;
2655
- */
2656
- const: string;
2657
-
2658
- /**
2659
- * `len` dictates that the field value must have the specified
2660
- * number of characters (Unicode code points), which may differ from the number
2661
- * of bytes in the string. If the field value does not meet the specified
2662
- * length, an error message will be generated.
2663
- *
2664
- * ```proto
2665
- * message MyString {
2666
- * // value length must be 5 characters
2667
- * string value = 1 [(buf.validate.field).string.len = 5];
2668
- * }
2669
- * ```
2670
- *
2671
- * @generated from field: optional uint64 len = 19;
2672
- */
2673
- len: bigint;
2674
-
2675
- /**
2676
- * `min_len` specifies that the field value must have at least the specified
2677
- * number of characters (Unicode code points), which may differ from the number
2678
- * of bytes in the string. If the field value contains fewer characters, an error
2679
- * message will be generated.
2680
- *
2681
- * ```proto
2682
- * message MyString {
2683
- * // value length must be at least 3 characters
2684
- * string value = 1 [(buf.validate.field).string.min_len = 3];
2685
- * }
2686
- * ```
2687
- *
2688
- * @generated from field: optional uint64 min_len = 2;
2689
- */
2690
- minLen: bigint;
2691
-
2692
- /**
2693
- * `max_len` specifies that the field value must have no more than the specified
2694
- * number of characters (Unicode code points), which may differ from the
2695
- * number of bytes in the string. If the field value contains more characters,
2696
- * an error message will be generated.
2697
- *
2698
- * ```proto
2699
- * message MyString {
2700
- * // value length must be at most 10 characters
2701
- * string value = 1 [(buf.validate.field).string.max_len = 10];
2702
- * }
2703
- * ```
2704
- *
2705
- * @generated from field: optional uint64 max_len = 3;
2706
- */
2707
- maxLen: bigint;
2708
-
2709
- /**
2710
- * `len_bytes` dictates that the field value must have the specified number of
2711
- * bytes. If the field value does not match the specified length in bytes,
2712
- * an error message will be generated.
2713
- *
2714
- * ```proto
2715
- * message MyString {
2716
- * // value length must be 6 bytes
2717
- * string value = 1 [(buf.validate.field).string.len_bytes = 6];
2718
- * }
2719
- * ```
2720
- *
2721
- * @generated from field: optional uint64 len_bytes = 20;
2722
- */
2723
- lenBytes: bigint;
2724
-
2725
- /**
2726
- * `min_bytes` specifies that the field value must have at least the specified
2727
- * number of bytes. If the field value contains fewer bytes, an error message
2728
- * will be generated.
2729
- *
2730
- * ```proto
2731
- * message MyString {
2732
- * // value length must be at least 4 bytes
2733
- * string value = 1 [(buf.validate.field).string.min_bytes = 4];
2734
- * }
2735
- *
2736
- * ```
2737
- *
2738
- * @generated from field: optional uint64 min_bytes = 4;
2739
- */
2740
- minBytes: bigint;
2741
-
2742
- /**
2743
- * `max_bytes` specifies that the field value must have no more than the
2744
- * specified number of bytes. If the field value contains more bytes, an
2745
- * error message will be generated.
2746
- *
2747
- * ```proto
2748
- * message MyString {
2749
- * // value length must be at most 8 bytes
2750
- * string value = 1 [(buf.validate.field).string.max_bytes = 8];
2751
- * }
2752
- * ```
2753
- *
2754
- * @generated from field: optional uint64 max_bytes = 5;
2755
- */
2756
- maxBytes: bigint;
2757
-
2758
- /**
2759
- * `pattern` specifies that the field value must match the specified
2760
- * regular expression (RE2 syntax), with the expression provided without any
2761
- * delimiters. If the field value doesn't match the regular expression, an
2762
- * error message will be generated.
2763
- *
2764
- * ```proto
2765
- * message MyString {
2766
- * // value does not match regex pattern `^[a-zA-Z]//$`
2767
- * string value = 1 [(buf.validate.field).string.pattern = "^[a-zA-Z]//$"];
2768
- * }
2769
- * ```
2770
- *
2771
- * @generated from field: optional string pattern = 6;
2772
- */
2773
- pattern: string;
2774
-
2775
- /**
2776
- * `prefix` specifies that the field value must have the
2777
- * specified substring at the beginning of the string. If the field value
2778
- * doesn't start with the specified prefix, an error message will be
2779
- * generated.
2780
- *
2781
- * ```proto
2782
- * message MyString {
2783
- * // value does not have prefix `pre`
2784
- * string value = 1 [(buf.validate.field).string.prefix = "pre"];
2785
- * }
2786
- * ```
2787
- *
2788
- * @generated from field: optional string prefix = 7;
2789
- */
2790
- prefix: string;
2791
-
2792
- /**
2793
- * `suffix` specifies that the field value must have the
2794
- * specified substring at the end of the string. If the field value doesn't
2795
- * end with the specified suffix, an error message will be generated.
2796
- *
2797
- * ```proto
2798
- * message MyString {
2799
- * // value does not have suffix `post`
2800
- * string value = 1 [(buf.validate.field).string.suffix = "post"];
2801
- * }
2802
- * ```
2803
- *
2804
- * @generated from field: optional string suffix = 8;
2805
- */
2806
- suffix: string;
2807
-
2808
- /**
2809
- * `contains` specifies that the field value must have the
2810
- * specified substring anywhere in the string. If the field value doesn't
2811
- * contain the specified substring, an error message will be generated.
2812
- *
2813
- * ```proto
2814
- * message MyString {
2815
- * // value does not contain substring `inside`.
2816
- * string value = 1 [(buf.validate.field).string.contains = "inside"];
2817
- * }
2818
- * ```
2819
- *
2820
- * @generated from field: optional string contains = 9;
2821
- */
2822
- contains: string;
2823
-
2824
- /**
2825
- * `not_contains` specifies that the field value must not have the
2826
- * specified substring anywhere in the string. If the field value contains
2827
- * the specified substring, an error message will be generated.
2828
- *
2829
- * ```proto
2830
- * message MyString {
2831
- * // value contains substring `inside`.
2832
- * string value = 1 [(buf.validate.field).string.not_contains = "inside"];
2833
- * }
2834
- * ```
2835
- *
2836
- * @generated from field: optional string not_contains = 23;
2837
- */
2838
- notContains: string;
2839
-
2840
- /**
2841
- * `in` specifies that the field value must be equal to one of the specified
2842
- * values. If the field value isn't one of the specified values, an error
2843
- * message will be generated.
2844
- *
2845
- * ```proto
2846
- * message MyString {
2847
- * // value must be in list ["apple", "banana"]
2848
- * string value = 1 [(buf.validate.field).string.in = "apple", (buf.validate.field).string.in = "banana"];
2849
- * }
2850
- * ```
2851
- *
2852
- * @generated from field: repeated string in = 10;
2853
- */
2854
- in: string[];
2855
-
2856
- /**
2857
- * `not_in` specifies that the field value cannot be equal to any
2858
- * of the specified values. If the field value is one of the specified values,
2859
- * an error message will be generated.
2860
- * ```proto
2861
- * message MyString {
2862
- * // value must not be in list ["orange", "grape"]
2863
- * string value = 1 [(buf.validate.field).string.not_in = "orange", (buf.validate.field).string.not_in = "grape"];
2864
- * }
2865
- * ```
2866
- *
2867
- * @generated from field: repeated string not_in = 11;
2868
- */
2869
- notIn: string[];
2870
-
2871
- /**
2872
- * `WellKnown` rules provide advanced rules against common string
2873
- * patterns.
2874
- *
2875
- * @generated from oneof buf.validate.StringRules.well_known
2876
- */
2877
- wellKnown: {
2878
- /**
2879
- * `email` specifies that the field value must be a valid email address, for
2880
- * example "foo@example.com".
2881
- *
2882
- * Conforms to the definition for a valid email address from the [HTML standard](https://html.spec.whatwg.org/multipage/input.html#valid-e-mail-address).
2883
- * Note that this standard willfully deviates from [RFC 5322](https://datatracker.ietf.org/doc/html/rfc5322),
2884
- * which allows many unexpected forms of email addresses and will easily match
2885
- * a typographical error.
2886
- *
2887
- * If the field value isn't a valid email address, an error message will be generated.
2888
- *
2889
- * ```proto
2890
- * message MyString {
2891
- * // value must be a valid email address
2892
- * string value = 1 [(buf.validate.field).string.email = true];
2893
- * }
2894
- * ```
2895
- *
2896
- * @generated from field: bool email = 12;
2897
- */
2898
- value: boolean;
2899
- case: "email";
2900
- } | {
2901
- /**
2902
- * `hostname` specifies that the field value must be a valid hostname, for
2903
- * example "foo.example.com".
2904
- *
2905
- * A valid hostname follows the rules below:
2906
- * - The name consists of one or more labels, separated by a dot (".").
2907
- * - Each label can be 1 to 63 alphanumeric characters.
2908
- * - A label can contain hyphens ("-"), but must not start or end with a hyphen.
2909
- * - The right-most label must not be digits only.
2910
- * - The name can have a trailing dot—for example, "foo.example.com.".
2911
- * - The name can be 253 characters at most, excluding the optional trailing dot.
2912
- *
2913
- * If the field value isn't a valid hostname, an error message will be generated.
2914
- *
2915
- * ```proto
2916
- * message MyString {
2917
- * // value must be a valid hostname
2918
- * string value = 1 [(buf.validate.field).string.hostname = true];
2919
- * }
2920
- * ```
2921
- *
2922
- * @generated from field: bool hostname = 13;
2923
- */
2924
- value: boolean;
2925
- case: "hostname";
2926
- } | {
2927
- /**
2928
- * `ip` specifies that the field value must be a valid IP (v4 or v6) address.
2929
- *
2930
- * IPv4 addresses are expected in the dotted decimal format—for example, "192.168.5.21".
2931
- * IPv6 addresses are expected in their text representation—for example, "::1",
2932
- * or "2001:0DB8:ABCD:0012::0".
2933
- *
2934
- * Both formats are well-defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
2935
- * Zone identifiers for IPv6 addresses (for example, "fe80::a%en1") are supported.
2936
- *
2937
- * If the field value isn't a valid IP address, an error message will be
2938
- * generated.
2939
- *
2940
- * ```proto
2941
- * message MyString {
2942
- * // value must be a valid IP address
2943
- * string value = 1 [(buf.validate.field).string.ip = true];
2944
- * }
2945
- * ```
2946
- *
2947
- * @generated from field: bool ip = 14;
2948
- */
2949
- value: boolean;
2950
- case: "ip";
2951
- } | {
2952
- /**
2953
- * `ipv4` specifies that the field value must be a valid IPv4 address—for
2954
- * example "192.168.5.21". If the field value isn't a valid IPv4 address, an
2955
- * error message will be generated.
2956
- *
2957
- * ```proto
2958
- * message MyString {
2959
- * // value must be a valid IPv4 address
2960
- * string value = 1 [(buf.validate.field).string.ipv4 = true];
2961
- * }
2962
- * ```
2963
- *
2964
- * @generated from field: bool ipv4 = 15;
2965
- */
2966
- value: boolean;
2967
- case: "ipv4";
2968
- } | {
2969
- /**
2970
- * `ipv6` specifies that the field value must be a valid IPv6 address—for
2971
- * example "::1", or "d7a:115c:a1e0:ab12:4843:cd96:626b:430b". If the field
2972
- * value is not a valid IPv6 address, an error message will be generated.
2973
- *
2974
- * ```proto
2975
- * message MyString {
2976
- * // value must be a valid IPv6 address
2977
- * string value = 1 [(buf.validate.field).string.ipv6 = true];
2978
- * }
2979
- * ```
2980
- *
2981
- * @generated from field: bool ipv6 = 16;
2982
- */
2983
- value: boolean;
2984
- case: "ipv6";
2985
- } | {
2986
- /**
2987
- * `uri` specifies that the field value must be a valid URI, for example
2988
- * "https://example.com/foo/bar?baz=quux#frag".
2989
- *
2990
- * URI is defined in the internet standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986).
2991
- * Zone Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
2992
- *
2993
- * If the field value isn't a valid URI, an error message will be generated.
2994
- *
2995
- * ```proto
2996
- * message MyString {
2997
- * // value must be a valid URI
2998
- * string value = 1 [(buf.validate.field).string.uri = true];
2999
- * }
3000
- * ```
3001
- *
3002
- * @generated from field: bool uri = 17;
3003
- */
3004
- value: boolean;
3005
- case: "uri";
3006
- } | {
3007
- /**
3008
- * `uri_ref` specifies that the field value must be a valid URI Reference—either
3009
- * a URI such as "https://example.com/foo/bar?baz=quux#frag", or a Relative
3010
- * Reference such as "./foo/bar?query".
3011
- *
3012
- * URI, URI Reference, and Relative Reference are defined in the internet
3013
- * standard [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986). Zone
3014
- * Identifiers in IPv6 address literals are supported ([RFC 6874](https://datatracker.ietf.org/doc/html/rfc6874)).
3015
- *
3016
- * If the field value isn't a valid URI Reference, an error message will be
3017
- * generated.
3018
- *
3019
- * ```proto
3020
- * message MyString {
3021
- * // value must be a valid URI Reference
3022
- * string value = 1 [(buf.validate.field).string.uri_ref = true];
3023
- * }
3024
- * ```
3025
- *
3026
- * @generated from field: bool uri_ref = 18;
3027
- */
3028
- value: boolean;
3029
- case: "uriRef";
3030
- } | {
3031
- /**
3032
- * `address` specifies that the field value must be either a valid hostname
3033
- * (for example, "example.com"), or a valid IP (v4 or v6) address (for example,
3034
- * "192.168.0.1", or "::1"). If the field value isn't a valid hostname or IP,
3035
- * an error message will be generated.
3036
- *
3037
- * ```proto
3038
- * message MyString {
3039
- * // value must be a valid hostname, or ip address
3040
- * string value = 1 [(buf.validate.field).string.address = true];
3041
- * }
3042
- * ```
3043
- *
3044
- * @generated from field: bool address = 21;
3045
- */
3046
- value: boolean;
3047
- case: "address";
3048
- } | {
3049
- /**
3050
- * `uuid` specifies that the field value must be a valid UUID as defined by
3051
- * [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2). If the
3052
- * field value isn't a valid UUID, an error message will be generated.
3053
- *
3054
- * ```proto
3055
- * message MyString {
3056
- * // value must be a valid UUID
3057
- * string value = 1 [(buf.validate.field).string.uuid = true];
3058
- * }
3059
- * ```
3060
- *
3061
- * @generated from field: bool uuid = 22;
3062
- */
3063
- value: boolean;
3064
- case: "uuid";
3065
- } | {
3066
- /**
3067
- * `tuuid` (trimmed UUID) specifies that the field value must be a valid UUID as
3068
- * defined by [RFC 4122](https://datatracker.ietf.org/doc/html/rfc4122#section-4.1.2) with all dashes
3069
- * omitted. If the field value isn't a valid UUID without dashes, an error message
3070
- * will be generated.
3071
- *
3072
- * ```proto
3073
- * message MyString {
3074
- * // value must be a valid trimmed UUID
3075
- * string value = 1 [(buf.validate.field).string.tuuid = true];
3076
- * }
3077
- * ```
3078
- *
3079
- * @generated from field: bool tuuid = 33;
3080
- */
3081
- value: boolean;
3082
- case: "tuuid";
3083
- } | {
3084
- /**
3085
- * `ip_with_prefixlen` specifies that the field value must be a valid IP
3086
- * (v4 or v6) address with prefix length—for example, "192.168.5.21/16" or
3087
- * "2001:0DB8:ABCD:0012::F1/64". If the field value isn't a valid IP with
3088
- * prefix length, an error message will be generated.
3089
- *
3090
- * ```proto
3091
- * message MyString {
3092
- * // value must be a valid IP with prefix length
3093
- * string value = 1 [(buf.validate.field).string.ip_with_prefixlen = true];
3094
- * }
3095
- * ```
3096
- *
3097
- * @generated from field: bool ip_with_prefixlen = 26;
3098
- */
3099
- value: boolean;
3100
- case: "ipWithPrefixlen";
3101
- } | {
3102
- /**
3103
- * `ipv4_with_prefixlen` specifies that the field value must be a valid
3104
- * IPv4 address with prefix length—for example, "192.168.5.21/16". If the
3105
- * field value isn't a valid IPv4 address with prefix length, an error
3106
- * message will be generated.
3107
- *
3108
- * ```proto
3109
- * message MyString {
3110
- * // value must be a valid IPv4 address with prefix length
3111
- * string value = 1 [(buf.validate.field).string.ipv4_with_prefixlen = true];
3112
- * }
3113
- * ```
3114
- *
3115
- * @generated from field: bool ipv4_with_prefixlen = 27;
3116
- */
3117
- value: boolean;
3118
- case: "ipv4WithPrefixlen";
3119
- } | {
3120
- /**
3121
- * `ipv6_with_prefixlen` specifies that the field value must be a valid
3122
- * IPv6 address with prefix length—for example, "2001:0DB8:ABCD:0012::F1/64".
3123
- * If the field value is not a valid IPv6 address with prefix length,
3124
- * an error message will be generated.
3125
- *
3126
- * ```proto
3127
- * message MyString {
3128
- * // value must be a valid IPv6 address prefix length
3129
- * string value = 1 [(buf.validate.field).string.ipv6_with_prefixlen = true];
3130
- * }
3131
- * ```
3132
- *
3133
- * @generated from field: bool ipv6_with_prefixlen = 28;
3134
- */
3135
- value: boolean;
3136
- case: "ipv6WithPrefixlen";
3137
- } | {
3138
- /**
3139
- * `ip_prefix` specifies that the field value must be a valid IP (v4 or v6)
3140
- * prefix—for example, "192.168.0.0/16" or "2001:0DB8:ABCD:0012::0/64".
3141
- *
3142
- * The prefix must have all zeros for the unmasked bits. For example,
3143
- * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
3144
- * prefix, and the remaining 64 bits must be zero.
3145
- *
3146
- * If the field value isn't a valid IP prefix, an error message will be
3147
- * generated.
3148
- *
3149
- * ```proto
3150
- * message MyString {
3151
- * // value must be a valid IP prefix
3152
- * string value = 1 [(buf.validate.field).string.ip_prefix = true];
3153
- * }
3154
- * ```
3155
- *
3156
- * @generated from field: bool ip_prefix = 29;
3157
- */
3158
- value: boolean;
3159
- case: "ipPrefix";
3160
- } | {
3161
- /**
3162
- * `ipv4_prefix` specifies that the field value must be a valid IPv4
3163
- * prefix, for example "192.168.0.0/16".
3164
- *
3165
- * The prefix must have all zeros for the unmasked bits. For example,
3166
- * "192.168.0.0/16" designates the left-most 16 bits for the prefix,
3167
- * and the remaining 16 bits must be zero.
3168
- *
3169
- * If the field value isn't a valid IPv4 prefix, an error message
3170
- * will be generated.
3171
- *
3172
- * ```proto
3173
- * message MyString {
3174
- * // value must be a valid IPv4 prefix
3175
- * string value = 1 [(buf.validate.field).string.ipv4_prefix = true];
3176
- * }
3177
- * ```
3178
- *
3179
- * @generated from field: bool ipv4_prefix = 30;
3180
- */
3181
- value: boolean;
3182
- case: "ipv4Prefix";
3183
- } | {
3184
- /**
3185
- * `ipv6_prefix` specifies that the field value must be a valid IPv6 prefix—for
3186
- * example, "2001:0DB8:ABCD:0012::0/64".
3187
- *
3188
- * The prefix must have all zeros for the unmasked bits. For example,
3189
- * "2001:0DB8:ABCD:0012::0/64" designates the left-most 64 bits for the
3190
- * prefix, and the remaining 64 bits must be zero.
3191
- *
3192
- * If the field value is not a valid IPv6 prefix, an error message will be
3193
- * generated.
3194
- *
3195
- * ```proto
3196
- * message MyString {
3197
- * // value must be a valid IPv6 prefix
3198
- * string value = 1 [(buf.validate.field).string.ipv6_prefix = true];
3199
- * }
3200
- * ```
3201
- *
3202
- * @generated from field: bool ipv6_prefix = 31;
3203
- */
3204
- value: boolean;
3205
- case: "ipv6Prefix";
3206
- } | {
3207
- /**
3208
- * `host_and_port` specifies that the field value must be valid host/port
3209
- * pair—for example, "example.com:8080".
3210
- *
3211
- * The host can be one of:
3212
- * - An IPv4 address in dotted decimal format—for example, "192.168.5.21".
3213
- * - An IPv6 address enclosed in square brackets—for example, "[2001:0DB8:ABCD:0012::F1]".
3214
- * - A hostname—for example, "example.com".
3215
- *
3216
- * The port is separated by a colon. It must be non-empty, with a decimal number
3217
- * in the range of 0-65535, inclusive.
3218
- *
3219
- * @generated from field: bool host_and_port = 32;
3220
- */
3221
- value: boolean;
3222
- case: "hostAndPort";
3223
- } | {
3224
- /**
3225
- * `well_known_regex` specifies a common well-known pattern
3226
- * defined as a regex. If the field value doesn't match the well-known
3227
- * regex, an error message will be generated.
3228
- *
3229
- * ```proto
3230
- * message MyString {
3231
- * // value must be a valid HTTP header value
3232
- * string value = 1 [(buf.validate.field).string.well_known_regex = KNOWN_REGEX_HTTP_HEADER_VALUE];
3233
- * }
3234
- * ```
3235
- *
3236
- * #### KnownRegex
3237
- *
3238
- * `well_known_regex` contains some well-known patterns.
3239
- *
3240
- * | Name | Number | Description |
3241
- * |-------------------------------|--------|-------------------------------------------|
3242
- * | KNOWN_REGEX_UNSPECIFIED | 0 | |
3243
- * | KNOWN_REGEX_HTTP_HEADER_NAME | 1 | HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2) |
3244
- * | KNOWN_REGEX_HTTP_HEADER_VALUE | 2 | HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4) |
3245
- *
3246
- * @generated from field: buf.validate.KnownRegex well_known_regex = 24;
3247
- */
3248
- value: KnownRegex;
3249
- case: "wellKnownRegex";
3250
- } | { case: undefined; value?: undefined };
3251
-
3252
- /**
3253
- * This applies to regexes `HTTP_HEADER_NAME` and `HTTP_HEADER_VALUE` to
3254
- * enable strict header validation. By default, this is true, and HTTP header
3255
- * validations are [RFC-compliant](https://datatracker.ietf.org/doc/html/rfc7230#section-3). Setting to false will enable looser
3256
- * validations that only disallow `\r\n\0` characters, which can be used to
3257
- * bypass header matching rules.
3258
- *
3259
- * ```proto
3260
- * message MyString {
3261
- * // The field `value` must have be a valid HTTP headers, but not enforced with strict rules.
3262
- * string value = 1 [(buf.validate.field).string.strict = false];
3263
- * }
3264
- * ```
3265
- *
3266
- * @generated from field: optional bool strict = 25;
3267
- */
3268
- strict: boolean;
3269
-
3270
- /**
3271
- * `example` specifies values that the field may have. These values SHOULD
3272
- * conform to other rules. `example` values will not impact validation
3273
- * but may be used as helpful guidance on how to populate the given field.
3274
- *
3275
- * ```proto
3276
- * message MyString {
3277
- * string value = 1 [
3278
- * (buf.validate.field).string.example = "hello",
3279
- * (buf.validate.field).string.example = "world"
3280
- * ];
3281
- * }
3282
- * ```
3283
- *
3284
- * @generated from field: repeated string example = 34;
3285
- */
3286
- example: string[];
3287
- };
3288
-
3289
- /**
3290
- * Describes the message buf.validate.StringRules.
3291
- * Use `create(StringRulesSchema)` to create a new message.
3292
- */
3293
- export const StringRulesSchema: GenMessage<StringRules> = /*@__PURE__*/
3294
- messageDesc(file_buf_validate_validate, 19);
3295
-
3296
- /**
3297
- * BytesRules describe the rules applied to `bytes` values. These rules
3298
- * may also be applied to the `google.protobuf.BytesValue` Well-Known-Type.
3299
- *
3300
- * @generated from message buf.validate.BytesRules
3301
- */
3302
- export type BytesRules = Message<"buf.validate.BytesRules"> & {
3303
- /**
3304
- * `const` requires the field value to exactly match the specified bytes
3305
- * value. If the field value doesn't match, an error message is generated.
3306
- *
3307
- * ```proto
3308
- * message MyBytes {
3309
- * // value must be "\x01\x02\x03\x04"
3310
- * bytes value = 1 [(buf.validate.field).bytes.const = "\x01\x02\x03\x04"];
3311
- * }
3312
- * ```
3313
- *
3314
- * @generated from field: optional bytes const = 1;
3315
- */
3316
- const: Uint8Array;
3317
-
3318
- /**
3319
- * `len` requires the field value to have the specified length in bytes.
3320
- * If the field value doesn't match, an error message is generated.
3321
- *
3322
- * ```proto
3323
- * message MyBytes {
3324
- * // value length must be 4 bytes.
3325
- * optional bytes value = 1 [(buf.validate.field).bytes.len = 4];
3326
- * }
3327
- * ```
3328
- *
3329
- * @generated from field: optional uint64 len = 13;
3330
- */
3331
- len: bigint;
3332
-
3333
- /**
3334
- * `min_len` requires the field value to have at least the specified minimum
3335
- * length in bytes.
3336
- * If the field value doesn't meet the requirement, an error message is generated.
3337
- *
3338
- * ```proto
3339
- * message MyBytes {
3340
- * // value length must be at least 2 bytes.
3341
- * optional bytes value = 1 [(buf.validate.field).bytes.min_len = 2];
3342
- * }
3343
- * ```
3344
- *
3345
- * @generated from field: optional uint64 min_len = 2;
3346
- */
3347
- minLen: bigint;
3348
-
3349
- /**
3350
- * `max_len` requires the field value to have at most the specified maximum
3351
- * length in bytes.
3352
- * If the field value exceeds the requirement, an error message is generated.
3353
- *
3354
- * ```proto
3355
- * message MyBytes {
3356
- * // value must be at most 6 bytes.
3357
- * optional bytes value = 1 [(buf.validate.field).bytes.max_len = 6];
3358
- * }
3359
- * ```
3360
- *
3361
- * @generated from field: optional uint64 max_len = 3;
3362
- */
3363
- maxLen: bigint;
3364
-
3365
- /**
3366
- * `pattern` requires the field value to match the specified regular
3367
- * expression ([RE2 syntax](https://github.com/google/re2/wiki/Syntax)).
3368
- * The value of the field must be valid UTF-8 or validation will fail with a
3369
- * runtime error.
3370
- * If the field value doesn't match the pattern, an error message is generated.
3371
- *
3372
- * ```proto
3373
- * message MyBytes {
3374
- * // value must match regex pattern "^[a-zA-Z0-9]+$".
3375
- * optional bytes value = 1 [(buf.validate.field).bytes.pattern = "^[a-zA-Z0-9]+$"];
3376
- * }
3377
- * ```
3378
- *
3379
- * @generated from field: optional string pattern = 4;
3380
- */
3381
- pattern: string;
3382
-
3383
- /**
3384
- * `prefix` requires the field value to have the specified bytes at the
3385
- * beginning of the string.
3386
- * If the field value doesn't meet the requirement, an error message is generated.
3387
- *
3388
- * ```proto
3389
- * message MyBytes {
3390
- * // value does not have prefix \x01\x02
3391
- * optional bytes value = 1 [(buf.validate.field).bytes.prefix = "\x01\x02"];
3392
- * }
3393
- * ```
3394
- *
3395
- * @generated from field: optional bytes prefix = 5;
3396
- */
3397
- prefix: Uint8Array;
3398
-
3399
- /**
3400
- * `suffix` requires the field value to have the specified bytes at the end
3401
- * of the string.
3402
- * If the field value doesn't meet the requirement, an error message is generated.
3403
- *
3404
- * ```proto
3405
- * message MyBytes {
3406
- * // value does not have suffix \x03\x04
3407
- * optional bytes value = 1 [(buf.validate.field).bytes.suffix = "\x03\x04"];
3408
- * }
3409
- * ```
3410
- *
3411
- * @generated from field: optional bytes suffix = 6;
3412
- */
3413
- suffix: Uint8Array;
3414
-
3415
- /**
3416
- * `contains` requires the field value to have the specified bytes anywhere in
3417
- * the string.
3418
- * If the field value doesn't meet the requirement, an error message is generated.
3419
- *
3420
- * ```protobuf
3421
- * message MyBytes {
3422
- * // value does not contain \x02\x03
3423
- * optional bytes value = 1 [(buf.validate.field).bytes.contains = "\x02\x03"];
3424
- * }
3425
- * ```
3426
- *
3427
- * @generated from field: optional bytes contains = 7;
3428
- */
3429
- contains: Uint8Array;
3430
-
3431
- /**
3432
- * `in` requires the field value to be equal to one of the specified
3433
- * values. If the field value doesn't match any of the specified values, an
3434
- * error message is generated.
3435
- *
3436
- * ```protobuf
3437
- * message MyBytes {
3438
- * // value must in ["\x01\x02", "\x02\x03", "\x03\x04"]
3439
- * optional bytes value = 1 [(buf.validate.field).bytes.in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3440
- * }
3441
- * ```
3442
- *
3443
- * @generated from field: repeated bytes in = 8;
3444
- */
3445
- in: Uint8Array[];
3446
-
3447
- /**
3448
- * `not_in` requires the field value to be not equal to any of the specified
3449
- * values.
3450
- * If the field value matches any of the specified values, an error message is
3451
- * generated.
3452
- *
3453
- * ```proto
3454
- * message MyBytes {
3455
- * // value must not in ["\x01\x02", "\x02\x03", "\x03\x04"]
3456
- * optional bytes value = 1 [(buf.validate.field).bytes.not_in = {"\x01\x02", "\x02\x03", "\x03\x04"}];
3457
- * }
3458
- * ```
3459
- *
3460
- * @generated from field: repeated bytes not_in = 9;
3461
- */
3462
- notIn: Uint8Array[];
3463
-
3464
- /**
3465
- * WellKnown rules provide advanced rules against common byte
3466
- * patterns
3467
- *
3468
- * @generated from oneof buf.validate.BytesRules.well_known
3469
- */
3470
- wellKnown: {
3471
- /**
3472
- * `ip` ensures that the field `value` is a valid IP address (v4 or v6) in byte format.
3473
- * If the field value doesn't meet this rule, an error message is generated.
3474
- *
3475
- * ```proto
3476
- * message MyBytes {
3477
- * // value must be a valid IP address
3478
- * optional bytes value = 1 [(buf.validate.field).bytes.ip = true];
3479
- * }
3480
- * ```
3481
- *
3482
- * @generated from field: bool ip = 10;
3483
- */
3484
- value: boolean;
3485
- case: "ip";
3486
- } | {
3487
- /**
3488
- * `ipv4` ensures that the field `value` is a valid IPv4 address in byte format.
3489
- * If the field value doesn't meet this rule, an error message is generated.
3490
- *
3491
- * ```proto
3492
- * message MyBytes {
3493
- * // value must be a valid IPv4 address
3494
- * optional bytes value = 1 [(buf.validate.field).bytes.ipv4 = true];
3495
- * }
3496
- * ```
3497
- *
3498
- * @generated from field: bool ipv4 = 11;
3499
- */
3500
- value: boolean;
3501
- case: "ipv4";
3502
- } | {
3503
- /**
3504
- * `ipv6` ensures that the field `value` is a valid IPv6 address in byte format.
3505
- * If the field value doesn't meet this rule, an error message is generated.
3506
- * ```proto
3507
- * message MyBytes {
3508
- * // value must be a valid IPv6 address
3509
- * optional bytes value = 1 [(buf.validate.field).bytes.ipv6 = true];
3510
- * }
3511
- * ```
3512
- *
3513
- * @generated from field: bool ipv6 = 12;
3514
- */
3515
- value: boolean;
3516
- case: "ipv6";
3517
- } | { case: undefined; value?: undefined };
3518
-
3519
- /**
3520
- * `example` specifies values that the field may have. These values SHOULD
3521
- * conform to other rules. `example` values will not impact validation
3522
- * but may be used as helpful guidance on how to populate the given field.
3523
- *
3524
- * ```proto
3525
- * message MyBytes {
3526
- * bytes value = 1 [
3527
- * (buf.validate.field).bytes.example = "\x01\x02",
3528
- * (buf.validate.field).bytes.example = "\x02\x03"
3529
- * ];
3530
- * }
3531
- * ```
3532
- *
3533
- * @generated from field: repeated bytes example = 14;
3534
- */
3535
- example: Uint8Array[];
3536
- };
3537
-
3538
- /**
3539
- * Describes the message buf.validate.BytesRules.
3540
- * Use `create(BytesRulesSchema)` to create a new message.
3541
- */
3542
- export const BytesRulesSchema: GenMessage<BytesRules> = /*@__PURE__*/
3543
- messageDesc(file_buf_validate_validate, 20);
3544
-
3545
- /**
3546
- * EnumRules describe the rules applied to `enum` values.
3547
- *
3548
- * @generated from message buf.validate.EnumRules
3549
- */
3550
- export type EnumRules = Message<"buf.validate.EnumRules"> & {
3551
- /**
3552
- * `const` requires the field value to exactly match the specified enum value.
3553
- * If the field value doesn't match, an error message is generated.
3554
- *
3555
- * ```proto
3556
- * enum MyEnum {
3557
- * MY_ENUM_UNSPECIFIED = 0;
3558
- * MY_ENUM_VALUE1 = 1;
3559
- * MY_ENUM_VALUE2 = 2;
3560
- * }
3561
- *
3562
- * message MyMessage {
3563
- * // The field `value` must be exactly MY_ENUM_VALUE1.
3564
- * MyEnum value = 1 [(buf.validate.field).enum.const = 1];
3565
- * }
3566
- * ```
3567
- *
3568
- * @generated from field: optional int32 const = 1;
3569
- */
3570
- const: number;
3571
-
3572
- /**
3573
- * `defined_only` requires the field value to be one of the defined values for
3574
- * this enum, failing on any undefined value.
3575
- *
3576
- * ```proto
3577
- * enum MyEnum {
3578
- * MY_ENUM_UNSPECIFIED = 0;
3579
- * MY_ENUM_VALUE1 = 1;
3580
- * MY_ENUM_VALUE2 = 2;
3581
- * }
3582
- *
3583
- * message MyMessage {
3584
- * // The field `value` must be a defined value of MyEnum.
3585
- * MyEnum value = 1 [(buf.validate.field).enum.defined_only = true];
3586
- * }
3587
- * ```
3588
- *
3589
- * @generated from field: optional bool defined_only = 2;
3590
- */
3591
- definedOnly: boolean;
3592
-
3593
- /**
3594
- * `in` requires the field value to be equal to one of the
3595
- * specified enum values. If the field value doesn't match any of the
3596
- * specified values, an error message is generated.
3597
- *
3598
- * ```proto
3599
- * enum MyEnum {
3600
- * MY_ENUM_UNSPECIFIED = 0;
3601
- * MY_ENUM_VALUE1 = 1;
3602
- * MY_ENUM_VALUE2 = 2;
3603
- * }
3604
- *
3605
- * message MyMessage {
3606
- * // The field `value` must be equal to one of the specified values.
3607
- * MyEnum value = 1 [(buf.validate.field).enum = { in: [1, 2]}];
3608
- * }
3609
- * ```
3610
- *
3611
- * @generated from field: repeated int32 in = 3;
3612
- */
3613
- in: number[];
3614
-
3615
- /**
3616
- * `not_in` requires the field value to be not equal to any of the
3617
- * specified enum values. If the field value matches one of the specified
3618
- * values, an error message is generated.
3619
- *
3620
- * ```proto
3621
- * enum MyEnum {
3622
- * MY_ENUM_UNSPECIFIED = 0;
3623
- * MY_ENUM_VALUE1 = 1;
3624
- * MY_ENUM_VALUE2 = 2;
3625
- * }
3626
- *
3627
- * message MyMessage {
3628
- * // The field `value` must not be equal to any of the specified values.
3629
- * MyEnum value = 1 [(buf.validate.field).enum = { not_in: [1, 2]}];
3630
- * }
3631
- * ```
3632
- *
3633
- * @generated from field: repeated int32 not_in = 4;
3634
- */
3635
- notIn: number[];
3636
-
3637
- /**
3638
- * `example` specifies values that the field may have. These values SHOULD
3639
- * conform to other rules. `example` values will not impact validation
3640
- * but may be used as helpful guidance on how to populate the given field.
3641
- *
3642
- * ```proto
3643
- * enum MyEnum {
3644
- * MY_ENUM_UNSPECIFIED = 0;
3645
- * MY_ENUM_VALUE1 = 1;
3646
- * MY_ENUM_VALUE2 = 2;
3647
- * }
3648
- *
3649
- * message MyMessage {
3650
- * (buf.validate.field).enum.example = 1,
3651
- * (buf.validate.field).enum.example = 2
3652
- * }
3653
- * ```
3654
- *
3655
- * @generated from field: repeated int32 example = 5;
3656
- */
3657
- example: number[];
3658
- };
3659
-
3660
- /**
3661
- * Describes the message buf.validate.EnumRules.
3662
- * Use `create(EnumRulesSchema)` to create a new message.
3663
- */
3664
- export const EnumRulesSchema: GenMessage<EnumRules> = /*@__PURE__*/
3665
- messageDesc(file_buf_validate_validate, 21);
3666
-
3667
- /**
3668
- * RepeatedRules describe the rules applied to `repeated` values.
3669
- *
3670
- * @generated from message buf.validate.RepeatedRules
3671
- */
3672
- export type RepeatedRules = Message<"buf.validate.RepeatedRules"> & {
3673
- /**
3674
- * `min_items` requires that this field must contain at least the specified
3675
- * minimum number of items.
3676
- *
3677
- * Note that `min_items = 1` is equivalent to setting a field as `required`.
3678
- *
3679
- * ```proto
3680
- * message MyRepeated {
3681
- * // value must contain at least 2 items
3682
- * repeated string value = 1 [(buf.validate.field).repeated.min_items = 2];
3683
- * }
3684
- * ```
3685
- *
3686
- * @generated from field: optional uint64 min_items = 1;
3687
- */
3688
- minItems: bigint;
3689
-
3690
- /**
3691
- * `max_items` denotes that this field must not exceed a
3692
- * certain number of items as the upper limit. If the field contains more
3693
- * items than specified, an error message will be generated, requiring the
3694
- * field to maintain no more than the specified number of items.
3695
- *
3696
- * ```proto
3697
- * message MyRepeated {
3698
- * // value must contain no more than 3 item(s)
3699
- * repeated string value = 1 [(buf.validate.field).repeated.max_items = 3];
3700
- * }
3701
- * ```
3702
- *
3703
- * @generated from field: optional uint64 max_items = 2;
3704
- */
3705
- maxItems: bigint;
3706
-
3707
- /**
3708
- * `unique` indicates that all elements in this field must
3709
- * be unique. This rule is strictly applicable to scalar and enum
3710
- * types, with message types not being supported.
3711
- *
3712
- * ```proto
3713
- * message MyRepeated {
3714
- * // repeated value must contain unique items
3715
- * repeated string value = 1 [(buf.validate.field).repeated.unique = true];
3716
- * }
3717
- * ```
3718
- *
3719
- * @generated from field: optional bool unique = 3;
3720
- */
3721
- unique: boolean;
3722
-
3723
- /**
3724
- * `items` details the rules to be applied to each item
3725
- * in the field. Even for repeated message fields, validation is executed
3726
- * against each item unless skip is explicitly specified.
3727
- *
3728
- * Note that repeated items are always considered populated. The `required`
3729
- * rule does not apply.
3730
- *
3731
- * ```proto
3732
- * message MyRepeated {
3733
- * // The items in the field `value` must follow the specified rules.
3734
- * repeated string value = 1 [(buf.validate.field).repeated.items = {
3735
- * string: {
3736
- * min_len: 3
3737
- * max_len: 10
3738
- * }
3739
- * }];
3740
- * }
3741
- * ```
3742
- *
3743
- * @generated from field: optional buf.validate.FieldRules items = 4;
3744
- */
3745
- items?: FieldRules;
3746
- };
3747
-
3748
- /**
3749
- * Describes the message buf.validate.RepeatedRules.
3750
- * Use `create(RepeatedRulesSchema)` to create a new message.
3751
- */
3752
- export const RepeatedRulesSchema: GenMessage<RepeatedRules> = /*@__PURE__*/
3753
- messageDesc(file_buf_validate_validate, 22);
3754
-
3755
- /**
3756
- * MapRules describe the rules applied to `map` values.
3757
- *
3758
- * @generated from message buf.validate.MapRules
3759
- */
3760
- export type MapRules = Message<"buf.validate.MapRules"> & {
3761
- /**
3762
- * Specifies the minimum number of key-value pairs allowed. If the field has
3763
- * fewer key-value pairs than specified, an error message is generated.
3764
- *
3765
- * ```proto
3766
- * message MyMap {
3767
- * // The field `value` must have at least 2 key-value pairs.
3768
- * map<string, string> value = 1 [(buf.validate.field).map.min_pairs = 2];
3769
- * }
3770
- * ```
3771
- *
3772
- * @generated from field: optional uint64 min_pairs = 1;
3773
- */
3774
- minPairs: bigint;
3775
-
3776
- /**
3777
- * Specifies the maximum number of key-value pairs allowed. If the field has
3778
- * more key-value pairs than specified, an error message is generated.
3779
- *
3780
- * ```proto
3781
- * message MyMap {
3782
- * // The field `value` must have at most 3 key-value pairs.
3783
- * map<string, string> value = 1 [(buf.validate.field).map.max_pairs = 3];
3784
- * }
3785
- * ```
3786
- *
3787
- * @generated from field: optional uint64 max_pairs = 2;
3788
- */
3789
- maxPairs: bigint;
3790
-
3791
- /**
3792
- * Specifies the rules to be applied to each key in the field.
3793
- *
3794
- * Note that map keys are always considered populated. The `required`
3795
- * rule does not apply.
3796
- *
3797
- * ```proto
3798
- * message MyMap {
3799
- * // The keys in the field `value` must follow the specified rules.
3800
- * map<string, string> value = 1 [(buf.validate.field).map.keys = {
3801
- * string: {
3802
- * min_len: 3
3803
- * max_len: 10
3804
- * }
3805
- * }];
3806
- * }
3807
- * ```
3808
- *
3809
- * @generated from field: optional buf.validate.FieldRules keys = 4;
3810
- */
3811
- keys?: FieldRules;
3812
-
3813
- /**
3814
- * Specifies the rules to be applied to the value of each key in the
3815
- * field. Message values will still have their validations evaluated unless
3816
- * skip is specified here.
3817
- *
3818
- * Note that map values are always considered populated. The `required`
3819
- * rule does not apply.
3820
- *
3821
- * ```proto
3822
- * message MyMap {
3823
- * // The values in the field `value` must follow the specified rules.
3824
- * map<string, string> value = 1 [(buf.validate.field).map.values = {
3825
- * string: {
3826
- * min_len: 5
3827
- * max_len: 20
3828
- * }
3829
- * }];
3830
- * }
3831
- * ```
3832
- *
3833
- * @generated from field: optional buf.validate.FieldRules values = 5;
3834
- */
3835
- values?: FieldRules;
3836
- };
3837
-
3838
- /**
3839
- * Describes the message buf.validate.MapRules.
3840
- * Use `create(MapRulesSchema)` to create a new message.
3841
- */
3842
- export const MapRulesSchema: GenMessage<MapRules> = /*@__PURE__*/
3843
- messageDesc(file_buf_validate_validate, 23);
3844
-
3845
- /**
3846
- * AnyRules describe rules applied exclusively to the `google.protobuf.Any` well-known type.
3847
- *
3848
- * @generated from message buf.validate.AnyRules
3849
- */
3850
- export type AnyRules = Message<"buf.validate.AnyRules"> & {
3851
- /**
3852
- * `in` requires the field's `type_url` to be equal to one of the
3853
- * specified values. If it doesn't match any of the specified values, an error
3854
- * message is generated.
3855
- *
3856
- * ```proto
3857
- * message MyAny {
3858
- * // The `value` field must have a `type_url` equal to one of the specified values.
3859
- * google.protobuf.Any value = 1 [(buf.validate.field).any = {
3860
- * in: ["type.googleapis.com/MyType1", "type.googleapis.com/MyType2"]
3861
- * }];
3862
- * }
3863
- * ```
3864
- *
3865
- * @generated from field: repeated string in = 2;
3866
- */
3867
- in: string[];
3868
-
3869
- /**
3870
- * requires the field's type_url to be not equal to any of the specified values. If it matches any of the specified values, an error message is generated.
3871
- *
3872
- * ```proto
3873
- * message MyAny {
3874
- * // The `value` field must not have a `type_url` equal to any of the specified values.
3875
- * google.protobuf.Any value = 1 [(buf.validate.field).any = {
3876
- * not_in: ["type.googleapis.com/ForbiddenType1", "type.googleapis.com/ForbiddenType2"]
3877
- * }];
3878
- * }
3879
- * ```
3880
- *
3881
- * @generated from field: repeated string not_in = 3;
3882
- */
3883
- notIn: string[];
3884
- };
3885
-
3886
- /**
3887
- * Describes the message buf.validate.AnyRules.
3888
- * Use `create(AnyRulesSchema)` to create a new message.
3889
- */
3890
- export const AnyRulesSchema: GenMessage<AnyRules> = /*@__PURE__*/
3891
- messageDesc(file_buf_validate_validate, 24);
3892
-
3893
- /**
3894
- * DurationRules describe the rules applied exclusively to the `google.protobuf.Duration` well-known type.
3895
- *
3896
- * @generated from message buf.validate.DurationRules
3897
- */
3898
- export type DurationRules = Message<"buf.validate.DurationRules"> & {
3899
- /**
3900
- * `const` dictates that the field must match the specified value of the `google.protobuf.Duration` type exactly.
3901
- * If the field's value deviates from the specified value, an error message
3902
- * will be generated.
3903
- *
3904
- * ```proto
3905
- * message MyDuration {
3906
- * // value must equal 5s
3907
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.const = "5s"];
3908
- * }
3909
- * ```
3910
- *
3911
- * @generated from field: optional google.protobuf.Duration const = 2;
3912
- */
3913
- const?: Duration;
3914
-
3915
- /**
3916
- * @generated from oneof buf.validate.DurationRules.less_than
3917
- */
3918
- lessThan: {
3919
- /**
3920
- * `lt` stipulates that the field must be less than the specified value of the `google.protobuf.Duration` type,
3921
- * exclusive. If the field's value is greater than or equal to the specified
3922
- * value, an error message will be generated.
3923
- *
3924
- * ```proto
3925
- * message MyDuration {
3926
- * // value must be less than 5s
3927
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = "5s"];
3928
- * }
3929
- * ```
3930
- *
3931
- * @generated from field: google.protobuf.Duration lt = 3;
3932
- */
3933
- value: Duration;
3934
- case: "lt";
3935
- } | {
3936
- /**
3937
- * `lte` indicates that the field must be less than or equal to the specified
3938
- * value of the `google.protobuf.Duration` type, inclusive. If the field's value is greater than the specified value,
3939
- * an error message will be generated.
3940
- *
3941
- * ```proto
3942
- * message MyDuration {
3943
- * // value must be less than or equal to 10s
3944
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lte = "10s"];
3945
- * }
3946
- * ```
3947
- *
3948
- * @generated from field: google.protobuf.Duration lte = 4;
3949
- */
3950
- value: Duration;
3951
- case: "lte";
3952
- } | { case: undefined; value?: undefined };
3953
-
3954
- /**
3955
- * @generated from oneof buf.validate.DurationRules.greater_than
3956
- */
3957
- greaterThan: {
3958
- /**
3959
- * `gt` requires the duration field value to be greater than the specified
3960
- * value (exclusive). If the value of `gt` is larger than a specified `lt`
3961
- * or `lte`, the range is reversed, and the field value must be outside the
3962
- * specified range. If the field value doesn't meet the required conditions,
3963
- * an error message is generated.
3964
- *
3965
- * ```proto
3966
- * message MyDuration {
3967
- * // duration must be greater than 5s [duration.gt]
3968
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gt = { seconds: 5 }];
3969
- *
3970
- * // duration must be greater than 5s and less than 10s [duration.gt_lt]
3971
- * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gt: { seconds: 5 }, lt: { seconds: 10 } }];
3972
- *
3973
- * // duration must be greater than 10s or less than 5s [duration.gt_lt_exclusive]
3974
- * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gt: { seconds: 10 }, lt: { seconds: 5 } }];
3975
- * }
3976
- * ```
3977
- *
3978
- * @generated from field: google.protobuf.Duration gt = 5;
3979
- */
3980
- value: Duration;
3981
- case: "gt";
3982
- } | {
3983
- /**
3984
- * `gte` requires the duration field value to be greater than or equal to the
3985
- * specified value (exclusive). If the value of `gte` is larger than a
3986
- * specified `lt` or `lte`, the range is reversed, and the field value must
3987
- * be outside the specified range. If the field value doesn't meet the
3988
- * required conditions, an error message is generated.
3989
- *
3990
- * ```proto
3991
- * message MyDuration {
3992
- * // duration must be greater than or equal to 5s [duration.gte]
3993
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.gte = { seconds: 5 }];
3994
- *
3995
- * // duration must be greater than or equal to 5s and less than 10s [duration.gte_lt]
3996
- * google.protobuf.Duration another_value = 2 [(buf.validate.field).duration = { gte: { seconds: 5 }, lt: { seconds: 10 } }];
3997
- *
3998
- * // duration must be greater than or equal to 10s or less than 5s [duration.gte_lt_exclusive]
3999
- * google.protobuf.Duration other_value = 3 [(buf.validate.field).duration = { gte: { seconds: 10 }, lt: { seconds: 5 } }];
4000
- * }
4001
- * ```
4002
- *
4003
- * @generated from field: google.protobuf.Duration gte = 6;
4004
- */
4005
- value: Duration;
4006
- case: "gte";
4007
- } | { case: undefined; value?: undefined };
4008
-
4009
- /**
4010
- * `in` asserts that the field must be equal to one of the specified values of the `google.protobuf.Duration` type.
4011
- * If the field's value doesn't correspond to any of the specified values,
4012
- * an error message will be generated.
4013
- *
4014
- * ```proto
4015
- * message MyDuration {
4016
- * // value must be in list [1s, 2s, 3s]
4017
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.in = ["1s", "2s", "3s"]];
4018
- * }
4019
- * ```
4020
- *
4021
- * @generated from field: repeated google.protobuf.Duration in = 7;
4022
- */
4023
- in: Duration[];
4024
-
4025
- /**
4026
- * `not_in` denotes that the field must not be equal to
4027
- * any of the specified values of the `google.protobuf.Duration` type.
4028
- * If the field's value matches any of these values, an error message will be
4029
- * generated.
4030
- *
4031
- * ```proto
4032
- * message MyDuration {
4033
- * // value must not be in list [1s, 2s, 3s]
4034
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.not_in = ["1s", "2s", "3s"]];
4035
- * }
4036
- * ```
4037
- *
4038
- * @generated from field: repeated google.protobuf.Duration not_in = 8;
4039
- */
4040
- notIn: Duration[];
4041
-
4042
- /**
4043
- * `example` specifies values that the field may have. These values SHOULD
4044
- * conform to other rules. `example` values will not impact validation
4045
- * but may be used as helpful guidance on how to populate the given field.
4046
- *
4047
- * ```proto
4048
- * message MyDuration {
4049
- * google.protobuf.Duration value = 1 [
4050
- * (buf.validate.field).duration.example = { seconds: 1 },
4051
- * (buf.validate.field).duration.example = { seconds: 2 },
4052
- * ];
4053
- * }
4054
- * ```
4055
- *
4056
- * @generated from field: repeated google.protobuf.Duration example = 9;
4057
- */
4058
- example: Duration[];
4059
- };
4060
-
4061
- /**
4062
- * Describes the message buf.validate.DurationRules.
4063
- * Use `create(DurationRulesSchema)` to create a new message.
4064
- */
4065
- export const DurationRulesSchema: GenMessage<DurationRules> = /*@__PURE__*/
4066
- messageDesc(file_buf_validate_validate, 25);
4067
-
4068
- /**
4069
- * TimestampRules describe the rules applied exclusively to the `google.protobuf.Timestamp` well-known type.
4070
- *
4071
- * @generated from message buf.validate.TimestampRules
4072
- */
4073
- export type TimestampRules = Message<"buf.validate.TimestampRules"> & {
4074
- /**
4075
- * `const` dictates that this field, of the `google.protobuf.Timestamp` type, must exactly match the specified value. If the field value doesn't correspond to the specified timestamp, an error message will be generated.
4076
- *
4077
- * ```proto
4078
- * message MyTimestamp {
4079
- * // value must equal 2023-05-03T10:00:00Z
4080
- * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.const = {seconds: 1727998800}];
4081
- * }
4082
- * ```
4083
- *
4084
- * @generated from field: optional google.protobuf.Timestamp const = 2;
4085
- */
4086
- const?: Timestamp;
4087
-
4088
- /**
4089
- * @generated from oneof buf.validate.TimestampRules.less_than
4090
- */
4091
- lessThan: {
4092
- /**
4093
- * requires the duration field value to be less than the specified value (field < value). If the field value doesn't meet the required conditions, an error message is generated.
4094
- *
4095
- * ```proto
4096
- * message MyDuration {
4097
- * // duration must be less than 'P3D' [duration.lt]
4098
- * google.protobuf.Duration value = 1 [(buf.validate.field).duration.lt = { seconds: 259200 }];
4099
- * }
4100
- * ```
4101
- *
4102
- * @generated from field: google.protobuf.Timestamp lt = 3;
4103
- */
4104
- value: Timestamp;
4105
- case: "lt";
4106
- } | {
4107
- /**
4108
- * requires the timestamp field value to be less than or equal to the specified value (field <= value). If the field value doesn't meet the required conditions, an error message is generated.
4109
- *
4110
- * ```proto
4111
- * message MyTimestamp {
4112
- * // timestamp must be less than or equal to '2023-05-14T00:00:00Z' [timestamp.lte]
4113
- * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.lte = { seconds: 1678867200 }];
4114
- * }
4115
- * ```
4116
- *
4117
- * @generated from field: google.protobuf.Timestamp lte = 4;
4118
- */
4119
- value: Timestamp;
4120
- case: "lte";
4121
- } | {
4122
- /**
4123
- * `lt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be less than the current time. `lt_now` can only be used with the `within` rule.
4124
- *
4125
- * ```proto
4126
- * message MyTimestamp {
4127
- * // value must be less than now
4128
- * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.lt_now = true];
4129
- * }
4130
- * ```
4131
- *
4132
- * @generated from field: bool lt_now = 7;
4133
- */
4134
- value: boolean;
4135
- case: "ltNow";
4136
- } | { case: undefined; value?: undefined };
4137
-
4138
- /**
4139
- * @generated from oneof buf.validate.TimestampRules.greater_than
4140
- */
4141
- greaterThan: {
4142
- /**
4143
- * `gt` requires the timestamp field value to be greater than the specified
4144
- * value (exclusive). If the value of `gt` is larger than a specified `lt`
4145
- * or `lte`, the range is reversed, and the field value must be outside the
4146
- * specified range. If the field value doesn't meet the required conditions,
4147
- * an error message is generated.
4148
- *
4149
- * ```proto
4150
- * message MyTimestamp {
4151
- * // timestamp must be greater than '2023-01-01T00:00:00Z' [timestamp.gt]
4152
- * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gt = { seconds: 1672444800 }];
4153
- *
4154
- * // timestamp must be greater than '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gt_lt]
4155
- * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gt: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4156
- *
4157
- * // timestamp must be greater than '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gt_lt_exclusive]
4158
- * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gt: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4159
- * }
4160
- * ```
4161
- *
4162
- * @generated from field: google.protobuf.Timestamp gt = 5;
4163
- */
4164
- value: Timestamp;
4165
- case: "gt";
4166
- } | {
4167
- /**
4168
- * `gte` requires the timestamp field value to be greater than or equal to the
4169
- * specified value (exclusive). If the value of `gte` is larger than a
4170
- * specified `lt` or `lte`, the range is reversed, and the field value
4171
- * must be outside the specified range. If the field value doesn't meet
4172
- * the required conditions, an error message is generated.
4173
- *
4174
- * ```proto
4175
- * message MyTimestamp {
4176
- * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' [timestamp.gte]
4177
- * google.protobuf.Timestamp value = 1 [(buf.validate.field).timestamp.gte = { seconds: 1672444800 }];
4178
- *
4179
- * // timestamp must be greater than or equal to '2023-01-01T00:00:00Z' and less than '2023-01-02T00:00:00Z' [timestamp.gte_lt]
4180
- * google.protobuf.Timestamp another_value = 2 [(buf.validate.field).timestamp = { gte: { seconds: 1672444800 }, lt: { seconds: 1672531200 } }];
4181
- *
4182
- * // timestamp must be greater than or equal to '2023-01-02T00:00:00Z' or less than '2023-01-01T00:00:00Z' [timestamp.gte_lt_exclusive]
4183
- * google.protobuf.Timestamp other_value = 3 [(buf.validate.field).timestamp = { gte: { seconds: 1672531200 }, lt: { seconds: 1672444800 } }];
4184
- * }
4185
- * ```
4186
- *
4187
- * @generated from field: google.protobuf.Timestamp gte = 6;
4188
- */
4189
- value: Timestamp;
4190
- case: "gte";
4191
- } | {
4192
- /**
4193
- * `gt_now` specifies that this field, of the `google.protobuf.Timestamp` type, must be greater than the current time. `gt_now` can only be used with the `within` rule.
4194
- *
4195
- * ```proto
4196
- * message MyTimestamp {
4197
- * // value must be greater than now
4198
- * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.gt_now = true];
4199
- * }
4200
- * ```
4201
- *
4202
- * @generated from field: bool gt_now = 8;
4203
- */
4204
- value: boolean;
4205
- case: "gtNow";
4206
- } | { case: undefined; value?: undefined };
4207
-
4208
- /**
4209
- * `within` specifies that this field, of the `google.protobuf.Timestamp` type, must be within the specified duration of the current time. If the field value isn't within the duration, an error message is generated.
4210
- *
4211
- * ```proto
4212
- * message MyTimestamp {
4213
- * // value must be within 1 hour of now
4214
- * google.protobuf.Timestamp created_at = 1 [(buf.validate.field).timestamp.within = {seconds: 3600}];
4215
- * }
4216
- * ```
4217
- *
4218
- * @generated from field: optional google.protobuf.Duration within = 9;
4219
- */
4220
- within?: Duration;
4221
-
4222
- /**
4223
- * `example` specifies values that the field may have. These values SHOULD
4224
- * conform to other rules. `example` values will not impact validation
4225
- * but may be used as helpful guidance on how to populate the given field.
4226
- *
4227
- * ```proto
4228
- * message MyTimestamp {
4229
- * google.protobuf.Timestamp value = 1 [
4230
- * (buf.validate.field).timestamp.example = { seconds: 1672444800 },
4231
- * (buf.validate.field).timestamp.example = { seconds: 1672531200 },
4232
- * ];
4233
- * }
4234
- * ```
4235
- *
4236
- * @generated from field: repeated google.protobuf.Timestamp example = 10;
4237
- */
4238
- example: Timestamp[];
4239
- };
4240
-
4241
- /**
4242
- * Describes the message buf.validate.TimestampRules.
4243
- * Use `create(TimestampRulesSchema)` to create a new message.
4244
- */
4245
- export const TimestampRulesSchema: GenMessage<TimestampRules> = /*@__PURE__*/
4246
- messageDesc(file_buf_validate_validate, 26);
4247
-
4248
- /**
4249
- * `Violations` is a collection of `Violation` messages. This message type is returned by
4250
- * Protovalidate when a proto message fails to meet the requirements set by the `Rule` validation rules.
4251
- * Each individual violation is represented by a `Violation` message.
4252
- *
4253
- * @generated from message buf.validate.Violations
4254
- */
4255
- export type Violations = Message<"buf.validate.Violations"> & {
4256
- /**
4257
- * `violations` is a repeated field that contains all the `Violation` messages corresponding to the violations detected.
4258
- *
4259
- * @generated from field: repeated buf.validate.Violation violations = 1;
4260
- */
4261
- violations: Violation[];
4262
- };
4263
-
4264
- /**
4265
- * Describes the message buf.validate.Violations.
4266
- * Use `create(ViolationsSchema)` to create a new message.
4267
- */
4268
- export const ViolationsSchema: GenMessage<Violations> = /*@__PURE__*/
4269
- messageDesc(file_buf_validate_validate, 27);
4270
-
4271
- /**
4272
- * `Violation` represents a single instance where a validation rule, expressed
4273
- * as a `Rule`, was not met. It provides information about the field that
4274
- * caused the violation, the specific rule that wasn't fulfilled, and a
4275
- * human-readable error message.
4276
- *
4277
- * For example, consider the following message:
4278
- *
4279
- * ```proto
4280
- * message User {
4281
- * int32 age = 1 [(buf.validate.field).cel = {
4282
- * id: "user.age",
4283
- * expression: "this < 18 ? 'User must be at least 18 years old' : ''",
4284
- * }];
4285
- * }
4286
- * ```
4287
- *
4288
- * It could produce the following violation:
4289
- *
4290
- * ```json
4291
- * {
4292
- * "ruleId": "user.age",
4293
- * "message": "User must be at least 18 years old",
4294
- * "field": {
4295
- * "elements": [
4296
- * {
4297
- * "fieldNumber": 1,
4298
- * "fieldName": "age",
4299
- * "fieldType": "TYPE_INT32"
4300
- * }
4301
- * ]
4302
- * },
4303
- * "rule": {
4304
- * "elements": [
4305
- * {
4306
- * "fieldNumber": 23,
4307
- * "fieldName": "cel",
4308
- * "fieldType": "TYPE_MESSAGE",
4309
- * "index": "0"
4310
- * }
4311
- * ]
4312
- * }
4313
- * }
4314
- * ```
4315
- *
4316
- * @generated from message buf.validate.Violation
4317
- */
4318
- export type Violation = Message<"buf.validate.Violation"> & {
4319
- /**
4320
- * `field` is a machine-readable path to the field that failed validation.
4321
- * This could be a nested field, in which case the path will include all the parent fields leading to the actual field that caused the violation.
4322
- *
4323
- * For example, consider the following message:
4324
- *
4325
- * ```proto
4326
- * message Message {
4327
- * bool a = 1 [(buf.validate.field).required = true];
4328
- * }
4329
- * ```
4330
- *
4331
- * It could produce the following violation:
4332
- *
4333
- * ```textproto
4334
- * violation {
4335
- * field { element { field_number: 1, field_name: "a", field_type: 8 } }
4336
- * ...
4337
- * }
4338
- * ```
4339
- *
4340
- * @generated from field: optional buf.validate.FieldPath field = 5;
4341
- */
4342
- field?: FieldPath;
4343
-
4344
- /**
4345
- * `rule` is a machine-readable path that points to the specific rule that failed validation.
4346
- * This will be a nested field starting from the FieldRules of the field that failed validation.
4347
- * For custom rules, this will provide the path of the rule, e.g. `cel[0]`.
4348
- *
4349
- * For example, consider the following message:
4350
- *
4351
- * ```proto
4352
- * message Message {
4353
- * bool a = 1 [(buf.validate.field).required = true];
4354
- * bool b = 2 [(buf.validate.field).cel = {
4355
- * id: "custom_rule",
4356
- * expression: "!this ? 'b must be true': ''"
4357
- * }]
4358
- * }
4359
- * ```
4360
- *
4361
- * It could produce the following violations:
4362
- *
4363
- * ```textproto
4364
- * violation {
4365
- * rule { element { field_number: 25, field_name: "required", field_type: 8 } }
4366
- * ...
4367
- * }
4368
- * violation {
4369
- * rule { element { field_number: 23, field_name: "cel", field_type: 11, index: 0 } }
4370
- * ...
4371
- * }
4372
- * ```
4373
- *
4374
- * @generated from field: optional buf.validate.FieldPath rule = 6;
4375
- */
4376
- rule?: FieldPath;
4377
-
4378
- /**
4379
- * `rule_id` is the unique identifier of the `Rule` that was not fulfilled.
4380
- * This is the same `id` that was specified in the `Rule` message, allowing easy tracing of which rule was violated.
4381
- *
4382
- * @generated from field: optional string rule_id = 2;
4383
- */
4384
- ruleId: string;
4385
-
4386
- /**
4387
- * `message` is a human-readable error message that describes the nature of the violation.
4388
- * This can be the default error message from the violated `Rule`, or it can be a custom message that gives more context about the violation.
4389
- *
4390
- * @generated from field: optional string message = 3;
4391
- */
4392
- message: string;
4393
-
4394
- /**
4395
- * `for_key` indicates whether the violation was caused by a map key, rather than a value.
4396
- *
4397
- * @generated from field: optional bool for_key = 4;
4398
- */
4399
- forKey: boolean;
4400
- };
4401
-
4402
- /**
4403
- * Describes the message buf.validate.Violation.
4404
- * Use `create(ViolationSchema)` to create a new message.
4405
- */
4406
- export const ViolationSchema: GenMessage<Violation> = /*@__PURE__*/
4407
- messageDesc(file_buf_validate_validate, 28);
4408
-
4409
- /**
4410
- * `FieldPath` provides a path to a nested protobuf field.
4411
- *
4412
- * This message provides enough information to render a dotted field path even without protobuf descriptors.
4413
- * It also provides enough information to resolve a nested field through unknown wire data.
4414
- *
4415
- * @generated from message buf.validate.FieldPath
4416
- */
4417
- export type FieldPath = Message<"buf.validate.FieldPath"> & {
4418
- /**
4419
- * `elements` contains each element of the path, starting from the root and recursing downward.
4420
- *
4421
- * @generated from field: repeated buf.validate.FieldPathElement elements = 1;
4422
- */
4423
- elements: FieldPathElement[];
4424
- };
4425
-
4426
- /**
4427
- * Describes the message buf.validate.FieldPath.
4428
- * Use `create(FieldPathSchema)` to create a new message.
4429
- */
4430
- export const FieldPathSchema: GenMessage<FieldPath> = /*@__PURE__*/
4431
- messageDesc(file_buf_validate_validate, 29);
4432
-
4433
- /**
4434
- * `FieldPathElement` provides enough information to nest through a single protobuf field.
4435
- *
4436
- * If the selected field is a map or repeated field, the `subscript` value selects a specific element from it.
4437
- * A path that refers to a value nested under a map key or repeated field index will have a `subscript` value.
4438
- * The `field_type` field allows unambiguous resolution of a field even if descriptors are not available.
4439
- *
4440
- * @generated from message buf.validate.FieldPathElement
4441
- */
4442
- export type FieldPathElement = Message<"buf.validate.FieldPathElement"> & {
4443
- /**
4444
- * `field_number` is the field number this path element refers to.
4445
- *
4446
- * @generated from field: optional int32 field_number = 1;
4447
- */
4448
- fieldNumber: number;
4449
-
4450
- /**
4451
- * `field_name` contains the field name this path element refers to.
4452
- * This can be used to display a human-readable path even if the field number is unknown.
4453
- *
4454
- * @generated from field: optional string field_name = 2;
4455
- */
4456
- fieldName: string;
4457
-
4458
- /**
4459
- * `field_type` specifies the type of this field. When using reflection, this value is not needed.
4460
- *
4461
- * This value is provided to make it possible to traverse unknown fields through wire data.
4462
- * When traversing wire data, be mindful of both packed[1] and delimited[2] encoding schemes.
4463
- *
4464
- * [1]: https://protobuf.dev/programming-guides/encoding/#packed
4465
- * [2]: https://protobuf.dev/programming-guides/encoding/#groups
4466
- *
4467
- * N.B.: Although groups are deprecated, the corresponding delimited encoding scheme is not, and
4468
- * can be explicitly used in Protocol Buffers 2023 Edition.
4469
- *
4470
- * @generated from field: optional google.protobuf.FieldDescriptorProto.Type field_type = 3;
4471
- */
4472
- fieldType: FieldDescriptorProto_Type;
4473
-
4474
- /**
4475
- * `key_type` specifies the map key type of this field. This value is useful when traversing
4476
- * unknown fields through wire data: specifically, it allows handling the differences between
4477
- * different integer encodings.
4478
- *
4479
- * @generated from field: optional google.protobuf.FieldDescriptorProto.Type key_type = 4;
4480
- */
4481
- keyType: FieldDescriptorProto_Type;
4482
-
4483
- /**
4484
- * `value_type` specifies map value type of this field. This is useful if you want to display a
4485
- * value inside unknown fields through wire data.
4486
- *
4487
- * @generated from field: optional google.protobuf.FieldDescriptorProto.Type value_type = 5;
4488
- */
4489
- valueType: FieldDescriptorProto_Type;
4490
-
4491
- /**
4492
- * `subscript` contains a repeated index or map key, if this path element nests into a repeated or map field.
4493
- *
4494
- * @generated from oneof buf.validate.FieldPathElement.subscript
4495
- */
4496
- subscript: {
4497
- /**
4498
- * `index` specifies a 0-based index into a repeated field.
4499
- *
4500
- * @generated from field: uint64 index = 6;
4501
- */
4502
- value: bigint;
4503
- case: "index";
4504
- } | {
4505
- /**
4506
- * `bool_key` specifies a map key of type bool.
4507
- *
4508
- * @generated from field: bool bool_key = 7;
4509
- */
4510
- value: boolean;
4511
- case: "boolKey";
4512
- } | {
4513
- /**
4514
- * `int_key` specifies a map key of type int32, int64, sint32, sint64, sfixed32 or sfixed64.
4515
- *
4516
- * @generated from field: int64 int_key = 8;
4517
- */
4518
- value: bigint;
4519
- case: "intKey";
4520
- } | {
4521
- /**
4522
- * `uint_key` specifies a map key of type uint32, uint64, fixed32 or fixed64.
4523
- *
4524
- * @generated from field: uint64 uint_key = 9;
4525
- */
4526
- value: bigint;
4527
- case: "uintKey";
4528
- } | {
4529
- /**
4530
- * `string_key` specifies a map key of type string.
4531
- *
4532
- * @generated from field: string string_key = 10;
4533
- */
4534
- value: string;
4535
- case: "stringKey";
4536
- } | { case: undefined; value?: undefined };
4537
- };
4538
-
4539
- /**
4540
- * Describes the message buf.validate.FieldPathElement.
4541
- * Use `create(FieldPathElementSchema)` to create a new message.
4542
- */
4543
- export const FieldPathElementSchema: GenMessage<FieldPathElement> = /*@__PURE__*/
4544
- messageDesc(file_buf_validate_validate, 30);
4545
-
4546
- /**
4547
- * Specifies how FieldRules.ignore behaves. See the documentation for
4548
- * FieldRules.required for definitions of "populated" and "nullable".
4549
- *
4550
- * @generated from enum buf.validate.Ignore
4551
- */
4552
- export enum Ignore {
4553
- /**
4554
- * Validation is only skipped if it's an unpopulated nullable field.
4555
- *
4556
- * ```proto
4557
- * syntax="proto3";
4558
- *
4559
- * message Request {
4560
- * // The uri rule applies to any value, including the empty string.
4561
- * string foo = 1 [
4562
- * (buf.validate.field).string.uri = true
4563
- * ];
4564
- *
4565
- * // The uri rule only applies if the field is set, including if it's
4566
- * // set to the empty string.
4567
- * optional string bar = 2 [
4568
- * (buf.validate.field).string.uri = true
4569
- * ];
4570
- *
4571
- * // The min_items rule always applies, even if the list is empty.
4572
- * repeated string baz = 3 [
4573
- * (buf.validate.field).repeated.min_items = 3
4574
- * ];
4575
- *
4576
- * // The custom CEL rule applies only if the field is set, including if
4577
- * // it's the "zero" value of that message.
4578
- * SomeMessage quux = 4 [
4579
- * (buf.validate.field).cel = {/* ... *\/}
4580
- * ];
4581
- * }
4582
- * ```
4583
- *
4584
- * @generated from enum value: IGNORE_UNSPECIFIED = 0;
4585
- */
4586
- UNSPECIFIED = 0,
4587
-
4588
- /**
4589
- * Validation is skipped if the field is unpopulated. This rule is redundant
4590
- * if the field is already nullable.
4591
- *
4592
- * ```proto
4593
- * syntax="proto3
4594
- *
4595
- * message Request {
4596
- * // The uri rule applies only if the value is not the empty string.
4597
- * string foo = 1 [
4598
- * (buf.validate.field).string.uri = true,
4599
- * (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
4600
- * ];
4601
- *
4602
- * // IGNORE_IF_UNPOPULATED is equivalent to IGNORE_UNSPECIFIED in this
4603
- * // case: the uri rule only applies if the field is set, including if
4604
- * // it's set to the empty string.
4605
- * optional string bar = 2 [
4606
- * (buf.validate.field).string.uri = true,
4607
- * (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
4608
- * ];
4609
- *
4610
- * // The min_items rule only applies if the list has at least one item.
4611
- * repeated string baz = 3 [
4612
- * (buf.validate.field).repeated.min_items = 3,
4613
- * (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
4614
- * ];
4615
- *
4616
- * // IGNORE_IF_UNPOPULATED is equivalent to IGNORE_UNSPECIFIED in this
4617
- * // case: the custom CEL rule applies only if the field is set, including
4618
- * // if it's the "zero" value of that message.
4619
- * SomeMessage quux = 4 [
4620
- * (buf.validate.field).cel = {/* ... *\/},
4621
- * (buf.validate.field).ignore = IGNORE_IF_UNPOPULATED
4622
- * ];
4623
- * }
4624
- * ```
4625
- *
4626
- * @generated from enum value: IGNORE_IF_UNPOPULATED = 1;
4627
- */
4628
- IF_UNPOPULATED = 1,
4629
-
4630
- /**
4631
- * Validation is skipped if the field is unpopulated or if it is a nullable
4632
- * field populated with its default value. This is typically the zero or
4633
- * empty value, but proto2 scalars support custom defaults. For messages, the
4634
- * default is a non-null message with all its fields unpopulated.
4635
- *
4636
- * ```proto
4637
- * syntax="proto3
4638
- *
4639
- * message Request {
4640
- * // IGNORE_IF_DEFAULT_VALUE is equivalent to IGNORE_IF_UNPOPULATED in
4641
- * // this case; the uri rule applies only if the value is not the empty
4642
- * // string.
4643
- * string foo = 1 [
4644
- * (buf.validate.field).string.uri = true,
4645
- * (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
4646
- * ];
4647
- *
4648
- * // The uri rule only applies if the field is set to a value other than
4649
- * // the empty string.
4650
- * optional string bar = 2 [
4651
- * (buf.validate.field).string.uri = true,
4652
- * (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
4653
- * ];
4654
- *
4655
- * // IGNORE_IF_DEFAULT_VALUE is equivalent to IGNORE_IF_UNPOPULATED in
4656
- * // this case; the min_items rule only applies if the list has at least
4657
- * // one item.
4658
- * repeated string baz = 3 [
4659
- * (buf.validate.field).repeated.min_items = 3,
4660
- * (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
4661
- * ];
4662
- *
4663
- * // The custom CEL rule only applies if the field is set to a value other
4664
- * // than an empty message (i.e., fields are unpopulated).
4665
- * SomeMessage quux = 4 [
4666
- * (buf.validate.field).cel = {/* ... *\/},
4667
- * (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
4668
- * ];
4669
- * }
4670
- * ```
4671
- *
4672
- * This rule is affected by proto2 custom default values:
4673
- *
4674
- * ```proto
4675
- * syntax="proto2";
4676
- *
4677
- * message Request {
4678
- * // The gt rule only applies if the field is set and it's value is not
4679
- * the default (i.e., not -42). The rule even applies if the field is set
4680
- * to zero since the default value differs.
4681
- * optional int32 value = 1 [
4682
- * default = -42,
4683
- * (buf.validate.field).int32.gt = 0,
4684
- * (buf.validate.field).ignore = IGNORE_IF_DEFAULT_VALUE
4685
- * ];
4686
- * }
4687
- *
4688
- * @generated from enum value: IGNORE_IF_DEFAULT_VALUE = 2;
4689
- */
4690
- IF_DEFAULT_VALUE = 2,
4691
-
4692
- /**
4693
- * The validation rules of this field will be skipped and not evaluated. This
4694
- * is useful for situations that necessitate turning off the rules of a field
4695
- * containing a message that may not make sense in the current context, or to
4696
- * temporarily disable rules during development.
4697
- *
4698
- * ```proto
4699
- * message MyMessage {
4700
- * // The field's rules will always be ignored, including any validation's
4701
- * // on value's fields.
4702
- * MyOtherMessage value = 1 [
4703
- * (buf.validate.field).ignore = IGNORE_ALWAYS];
4704
- * }
4705
- * ```
4706
- *
4707
- * @generated from enum value: IGNORE_ALWAYS = 3;
4708
- */
4709
- ALWAYS = 3,
4710
- }
4711
-
4712
- /**
4713
- * Describes the enum buf.validate.Ignore.
4714
- */
4715
- export const IgnoreSchema: GenEnum<Ignore> = /*@__PURE__*/
4716
- enumDesc(file_buf_validate_validate, 0);
4717
-
4718
- /**
4719
- * KnownRegex contains some well-known patterns.
4720
- *
4721
- * @generated from enum buf.validate.KnownRegex
4722
- */
4723
- export enum KnownRegex {
4724
- /**
4725
- * @generated from enum value: KNOWN_REGEX_UNSPECIFIED = 0;
4726
- */
4727
- UNSPECIFIED = 0,
4728
-
4729
- /**
4730
- * HTTP header name as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2).
4731
- *
4732
- * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_NAME = 1;
4733
- */
4734
- HTTP_HEADER_NAME = 1,
4735
-
4736
- /**
4737
- * HTTP header value as defined by [RFC 7230](https://datatracker.ietf.org/doc/html/rfc7230#section-3.2.4).
4738
- *
4739
- * @generated from enum value: KNOWN_REGEX_HTTP_HEADER_VALUE = 2;
4740
- */
4741
- HTTP_HEADER_VALUE = 2,
4742
- }
4743
-
4744
- /**
4745
- * Describes the enum buf.validate.KnownRegex.
4746
- */
4747
- export const KnownRegexSchema: GenEnum<KnownRegex> = /*@__PURE__*/
4748
- enumDesc(file_buf_validate_validate, 1);
4749
-
4750
- /**
4751
- * Rules specify the validations to be performed on this message. By default,
4752
- * no validation is performed against a message.
4753
- *
4754
- * @generated from extension: optional buf.validate.MessageRules message = 1159;
4755
- */
4756
- export const message: GenExtension<MessageOptions, MessageRules> = /*@__PURE__*/
4757
- extDesc(file_buf_validate_validate, 0);
4758
-
4759
- /**
4760
- * Rules specify the validations to be performed on this oneof. By default,
4761
- * no validation is performed against a oneof.
4762
- *
4763
- * @generated from extension: optional buf.validate.OneofRules oneof = 1159;
4764
- */
4765
- export const oneof: GenExtension<OneofOptions, OneofRules> = /*@__PURE__*/
4766
- extDesc(file_buf_validate_validate, 1);
4767
-
4768
- /**
4769
- * Rules specify the validations to be performed on this field. By default,
4770
- * no validation is performed against a field.
4771
- *
4772
- * @generated from extension: optional buf.validate.FieldRules field = 1159;
4773
- */
4774
- export const field: GenExtension<FieldOptions, FieldRules> = /*@__PURE__*/
4775
- extDesc(file_buf_validate_validate, 2);
4776
-
4777
- /**
4778
- * Specifies predefined rules. When extending a standard rule message,
4779
- * this adds additional CEL expressions that apply when the extension is used.
4780
- *
4781
- * ```proto
4782
- * extend buf.validate.Int32Rules {
4783
- * bool is_zero [(buf.validate.predefined).cel = {
4784
- * id: "int32.is_zero",
4785
- * message: "value must be zero",
4786
- * expression: "!rule || this == 0",
4787
- * }];
4788
- * }
4789
- *
4790
- * message Foo {
4791
- * int32 reserved = 1 [(buf.validate.field).int32.(is_zero) = true];
4792
- * }
4793
- * ```
4794
- *
4795
- * @generated from extension: optional buf.validate.PredefinedRules predefined = 1160;
4796
- */
4797
- export const predefined: GenExtension<FieldOptions, PredefinedRules> = /*@__PURE__*/
4798
- extDesc(file_buf_validate_validate, 3);
4799
-