@opentdf/sdk 0.3.1 → 0.3.2-beta.1

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