From 28df55fc31f658648681749e8545771c314b2bfd Mon Sep 17 00:00:00 2001 From: Aditya Dani Date: Mon, 19 Dec 2016 23:17:11 +0000 Subject: [PATCH] Portworx Volume Driver in Kubernetes - Add a new type PortworxVolumeSource - Implement the kubernetes volume plugin for Portworx Volumes under pkg/volume/portworx - The Portworx Volume Driver uses the libopenstorage/openstorage specifications and apis for volume operations. Changes for k8s configuration and examples for portworx volumes. - Add PortworxVolume hooks in kubectl, kube-controller-manager and validation. - Add a README for PortworxVolume usage as PVs, PVCs and StorageClass. - Add example spec files Handle code review comments. - Modified READMEs to incorporate to suggestions. - Add a test for ReadWriteMany access mode. - Use util.UnmountPath in TearDown. - Add ReadOnly flag to PortworxVolumeSource - Use hostname:port instead of unix sockets - Delete the mount dir in TearDown. - Fix link issue in persistentvolumes README - In unit test check for mountpath after Setup is done. - Add PVC Claim Name as a Portworx Volume Label Generated code and documentation. - Updated swagger spec - Updated api-reference docs - Updated generated code under pkg/api/v1 Godeps update for Portworx Volume Driver - Adds github.com/libopenstorage/openstorage - Adds go.pedge.io/pb/go/google/protobuf - Updates Godep Licenses --- Godeps/Godeps.json | 28 + Godeps/LICENSES | 1224 +++++++++ api/openapi-spec/swagger.json | 28 + api/swagger-spec/apps_v1beta1.json | 25 + api/swagger-spec/batch_v1.json | 25 + api/swagger-spec/extensions_v1beta1.json | 25 + api/swagger-spec/v1.json | 29 + cmd/kube-controller-manager/app/BUILD | 1 + cmd/kube-controller-manager/app/plugins.go | 3 + cmd/kubelet/app/BUILD | 1 + cmd/kubelet/app/plugins.go | 2 + .../apps/v1beta1/definitions.html | 57 +- docs/api-reference/batch/v1/definitions.html | 57 +- .../extensions/v1beta1/definitions.html | 57 +- docs/api-reference/v1/definitions.html | 64 +- .../persistent-volume-provisioning/README.md | 24 + examples/volumes/portworx/README.md | 370 +++ .../volumes/portworx/portworx-volume-pod.yaml | 16 + .../volumes/portworx/portworx-volume-pv.yaml | 12 + .../volumes/portworx/portworx-volume-pvc.yaml | 10 + .../portworx/portworx-volume-pvcpod.yaml | 15 + .../portworx/portworx-volume-pvcsc.yaml | 12 + .../portworx/portworx-volume-pvcscpod.yaml | 15 + .../portworx/portworx-volume-sc-high.yaml | 9 + federation/apis/openapi-spec/swagger.json | 24 + pkg/api/types.go | 21 + pkg/api/v1/generated.pb.go | 2297 ++++++++++------- pkg/api/v1/generated.proto | 26 +- pkg/api/v1/types.generated.go | 1636 ++++++++---- pkg/api/v1/types.go | 20 + pkg/api/v1/types_swagger_doc_generated.go | 13 + pkg/api/v1/zz_generated.conversion.go | 28 + pkg/api/v1/zz_generated.deepcopy.go | 20 + pkg/api/validation/validation.go | 24 + pkg/api/zz_generated.deepcopy.go | 20 + pkg/apis/extensions/types.go | 1 + pkg/generated/openapi/zz_generated.openapi.go | 64 +- pkg/printers/internalversion/describe.go | 10 + pkg/security/podsecuritypolicy/util/util.go | 3 + pkg/volume/BUILD | 1 + pkg/volume/portworx/BUILD | 64 + pkg/volume/portworx/OWNERS | 2 + pkg/volume/portworx/doc.go | 19 + pkg/volume/portworx/portworx.go | 388 +++ pkg/volume/portworx/portworx_test.go | 235 ++ pkg/volume/portworx/portworx_util.go | 165 ++ staging/src/k8s.io/client-go/pkg/api/types.go | 21 + .../client-go/pkg/api/v1/generated.pb.go | 2297 ++++++++++------- .../client-go/pkg/api/v1/generated.proto | 26 +- .../client-go/pkg/api/v1/types.generated.go | 1636 ++++++++---- .../src/k8s.io/client-go/pkg/api/v1/types.go | 20 + .../pkg/api/v1/types_swagger_doc_generated.go | 13 + .../pkg/api/v1/zz_generated.conversion.go | 28 + .../pkg/api/v1/zz_generated.deepcopy.go | 20 + .../pkg/api/zz_generated.deepcopy.go | 20 + .../client-go/pkg/apis/extensions/types.go | 1 + vendor/BUILD | 83 + .../libopenstorage/openstorage/LICENSE | 191 ++ .../libopenstorage/openstorage/api/api.go | 208 ++ .../libopenstorage/openstorage/api/api.pb.go | 1730 +++++++++++++ .../libopenstorage/openstorage/api/api.proto | 398 +++ .../openstorage/api/client/client.go | 141 + .../openstorage/api/client/request.go | 304 +++ .../openstorage/api/client/volume/client.go | 387 +++ .../openstorage/api/client/volume/volume.go | 50 + .../openstorage/api/spec/spec_handler.go | 192 ++ .../libopenstorage/openstorage/api/status.go | 49 + .../openstorage/pkg/units/units.go | 139 + .../openstorage/volume/README.md | 41 + .../openstorage/volume/volume.go | 171 ++ .../volume/volume_driver_registry.go | 71 + .../volume/volume_not_supported.go | 45 + vendor/go.pedge.io/pb/LICENSE | 22 + .../pb/go/google/protobuf/any.pb.go | 104 + .../pb/go/google/protobuf/api.pb.go | 246 ++ .../pb/go/google/protobuf/duration.pb.go | 95 + .../pb/go/google/protobuf/empty.pb.go | 50 + .../pb/go/google/protobuf/field_mask.pb.go | 167 ++ .../pb/go/google/protobuf/protobuf.gen.go | 67 + .../go/google/protobuf/source_context.pb.go | 47 + .../pb/go/google/protobuf/struct.pb.go | 361 +++ .../pb/go/google/protobuf/timestamp.pb.go | 108 + .../pb/go/google/protobuf/type.pb.go | 390 +++ .../pb/go/google/protobuf/wrappers.pb.go | 173 ++ 84 files changed, 14212 insertions(+), 3090 deletions(-) create mode 100644 examples/volumes/portworx/README.md create mode 100644 examples/volumes/portworx/portworx-volume-pod.yaml create mode 100644 examples/volumes/portworx/portworx-volume-pv.yaml create mode 100644 examples/volumes/portworx/portworx-volume-pvc.yaml create mode 100644 examples/volumes/portworx/portworx-volume-pvcpod.yaml create mode 100644 examples/volumes/portworx/portworx-volume-pvcsc.yaml create mode 100644 examples/volumes/portworx/portworx-volume-pvcscpod.yaml create mode 100644 examples/volumes/portworx/portworx-volume-sc-high.yaml create mode 100644 pkg/volume/portworx/BUILD create mode 100644 pkg/volume/portworx/OWNERS create mode 100644 pkg/volume/portworx/doc.go create mode 100644 pkg/volume/portworx/portworx.go create mode 100644 pkg/volume/portworx/portworx_test.go create mode 100644 pkg/volume/portworx/portworx_util.go create mode 100644 vendor/github.com/libopenstorage/openstorage/LICENSE create mode 100644 vendor/github.com/libopenstorage/openstorage/api/api.go create mode 100644 vendor/github.com/libopenstorage/openstorage/api/api.pb.go create mode 100644 vendor/github.com/libopenstorage/openstorage/api/api.proto create mode 100644 vendor/github.com/libopenstorage/openstorage/api/client/client.go create mode 100644 vendor/github.com/libopenstorage/openstorage/api/client/request.go create mode 100644 vendor/github.com/libopenstorage/openstorage/api/client/volume/client.go create mode 100644 vendor/github.com/libopenstorage/openstorage/api/client/volume/volume.go create mode 100644 vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go create mode 100644 vendor/github.com/libopenstorage/openstorage/api/status.go create mode 100644 vendor/github.com/libopenstorage/openstorage/pkg/units/units.go create mode 100644 vendor/github.com/libopenstorage/openstorage/volume/README.md create mode 100644 vendor/github.com/libopenstorage/openstorage/volume/volume.go create mode 100644 vendor/github.com/libopenstorage/openstorage/volume/volume_driver_registry.go create mode 100644 vendor/github.com/libopenstorage/openstorage/volume/volume_not_supported.go create mode 100644 vendor/go.pedge.io/pb/LICENSE create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/any.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/api.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/duration.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/empty.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/field_mask.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/protobuf.gen.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/source_context.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/struct.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/timestamp.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/type.pb.go create mode 100644 vendor/go.pedge.io/pb/go/google/protobuf/wrappers.pb.go diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 3a57f08ae7..07ca4be053 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -1663,6 +1663,30 @@ "Comment": "release.r56-29-gf7ee69f", "Rev": "f7ee69f31298ecbe5d2b349c711e2547a617d398" }, + { + "ImportPath": "github.com/libopenstorage/openstorage/api", + "Rev": "6e787003b91ddba85f108b8aede075b1af0d3606" + }, + { + "ImportPath": "github.com/libopenstorage/openstorage/api/client", + "Rev": "6e787003b91ddba85f108b8aede075b1af0d3606" + }, + { + "ImportPath": "github.com/libopenstorage/openstorage/api/client/volume", + "Rev": "6e787003b91ddba85f108b8aede075b1af0d3606" + }, + { + "ImportPath": "github.com/libopenstorage/openstorage/api/spec", + "Rev": "6e787003b91ddba85f108b8aede075b1af0d3606" + }, + { + "ImportPath": "github.com/libopenstorage/openstorage/pkg/units", + "Rev": "6e787003b91ddba85f108b8aede075b1af0d3606" + }, + { + "ImportPath": "github.com/libopenstorage/openstorage/volume", + "Rev": "6e787003b91ddba85f108b8aede075b1af0d3606" + }, { "ImportPath": "github.com/lpabon/godbc", "Comment": "v1.0-1-g9577782", @@ -2393,6 +2417,10 @@ "Comment": "v1.0-13-g5292687", "Rev": "5292687f5379e01054407da44d7c4590a61fd3de" }, + { + "ImportPath": "go.pedge.io/pb/go/google/protobuf", + "Rev": "f3c84f58974dc53d460d0855337cad85843bf0df" + }, { "ImportPath": "go4.org/errorutil", "Rev": "03efcb870d84809319ea509714dd6d19a1498483" diff --git a/Godeps/LICENSES b/Godeps/LICENSES index 29ca8f66a4..842a464eea 100644 --- a/Godeps/LICENSES +++ b/Godeps/LICENSES @@ -58166,6 +58166,1200 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================================================ +================================================================================ += vendor/github.com/libopenstorage/openstorage/api licensed under: = + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Openstorage.org. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += vendor/github.com/libopenstorage/openstorage/LICENSE 40c3e1c9eacda859a17048003909a2f8 - +================================================================================ + + +================================================================================ += vendor/github.com/libopenstorage/openstorage/api/client licensed under: = + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Openstorage.org. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += vendor/github.com/libopenstorage/openstorage/LICENSE 40c3e1c9eacda859a17048003909a2f8 - +================================================================================ + + +================================================================================ += vendor/github.com/libopenstorage/openstorage/api/client/volume licensed under: = + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Openstorage.org. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += vendor/github.com/libopenstorage/openstorage/LICENSE 40c3e1c9eacda859a17048003909a2f8 - +================================================================================ + + +================================================================================ += vendor/github.com/libopenstorage/openstorage/api/spec licensed under: = + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Openstorage.org. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += vendor/github.com/libopenstorage/openstorage/LICENSE 40c3e1c9eacda859a17048003909a2f8 - +================================================================================ + + +================================================================================ += vendor/github.com/libopenstorage/openstorage/pkg/units licensed under: = + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Openstorage.org. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += vendor/github.com/libopenstorage/openstorage/LICENSE 40c3e1c9eacda859a17048003909a2f8 - +================================================================================ + + +================================================================================ += vendor/github.com/libopenstorage/openstorage/volume licensed under: = + + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Openstorage.org. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + += vendor/github.com/libopenstorage/openstorage/LICENSE 40c3e1c9eacda859a17048003909a2f8 - +================================================================================ + + ================================================================================ = vendor/github.com/lpabon/godbc licensed under: = @@ -76256,6 +77450,36 @@ SOFTWARE. ================================================================================ +================================================================================ += vendor/go.pedge.io/pb/go/google/protobuf licensed under: = + +The MIT License (MIT) + +Copyright (c) 2015 Peter Edge + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + += vendor/go.pedge.io/pb/LICENSE bd5821dd74e6e83799a4a8dd9f48c43f - +================================================================================ + + ================================================================================ = vendor/go4.org/errorutil licensed under: = diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json index 87532880f3..6fda5934c8 100644 --- a/api/openapi-spec/swagger.json +++ b/api/openapi-spec/swagger.json @@ -37838,6 +37838,10 @@ "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource" }, + "portworxVolume": { + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource" + }, "quobyte": { "description": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.QuobyteVolumeSource" @@ -38325,6 +38329,26 @@ } } }, + "io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource": { + "description": "PortworxVolumeSource represents a Portworx volume resource.", + "required": [ + "volumeID" + ], + "properties": { + "fsType": { + "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "type": "string" + }, + "readOnly": { + "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + "type": "boolean" + }, + "volumeID": { + "description": "VolumeID uniquely identifies a Portworx volume", + "type": "string" + } + } + }, "io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm": { "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", "required": [ @@ -39378,6 +39402,10 @@ "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource" }, + "portworxVolume": { + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource" + }, "projected": { "description": "Items for all in one resources secrets, configmaps, and downward API", "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource" diff --git a/api/swagger-spec/apps_v1beta1.json b/api/swagger-spec/apps_v1beta1.json index 858decdfc2..79cb188933 100644 --- a/api/swagger-spec/apps_v1beta1.json +++ b/api/swagger-spec/apps_v1beta1.json @@ -1484,6 +1484,10 @@ "projected": { "$ref": "v1.ProjectedVolumeSource", "description": "Items for all in one resources secrets, configmaps, and downward API" + }, + "portworxVolume": { + "$ref": "v1.PortworxVolumeSource", + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine" } } }, @@ -2243,6 +2247,27 @@ } } }, + "v1.PortworxVolumeSource": { + "id": "v1.PortworxVolumeSource", + "description": "PortworxVolumeSource represents a Portworx volume resource.", + "required": [ + "volumeID" + ], + "properties": { + "volumeID": { + "type": "string", + "description": "VolumeID uniquely identifies a Portworx volume" + }, + "fsType": { + "type": "string", + "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified." + }, + "readOnly": { + "type": "boolean", + "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts." + } + } + }, "v1.Container": { "id": "v1.Container", "description": "A single application container that you want to run within a pod.", diff --git a/api/swagger-spec/batch_v1.json b/api/swagger-spec/batch_v1.json index 6e002470bc..2c1eb8a762 100644 --- a/api/swagger-spec/batch_v1.json +++ b/api/swagger-spec/batch_v1.json @@ -1489,6 +1489,10 @@ "projected": { "$ref": "v1.ProjectedVolumeSource", "description": "Items for all in one resources secrets, configmaps, and downward API" + }, + "portworxVolume": { + "$ref": "v1.PortworxVolumeSource", + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine" } } }, @@ -2248,6 +2252,27 @@ } } }, + "v1.PortworxVolumeSource": { + "id": "v1.PortworxVolumeSource", + "description": "PortworxVolumeSource represents a Portworx volume resource.", + "required": [ + "volumeID" + ], + "properties": { + "volumeID": { + "type": "string", + "description": "VolumeID uniquely identifies a Portworx volume" + }, + "fsType": { + "type": "string", + "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified." + }, + "readOnly": { + "type": "boolean", + "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts." + } + } + }, "v1.Container": { "id": "v1.Container", "description": "A single application container that you want to run within a pod.", diff --git a/api/swagger-spec/extensions_v1beta1.json b/api/swagger-spec/extensions_v1beta1.json index 8c1350510e..9fc2016550 100644 --- a/api/swagger-spec/extensions_v1beta1.json +++ b/api/swagger-spec/extensions_v1beta1.json @@ -6905,6 +6905,10 @@ "projected": { "$ref": "v1.ProjectedVolumeSource", "description": "Items for all in one resources secrets, configmaps, and downward API" + }, + "portworxVolume": { + "$ref": "v1.PortworxVolumeSource", + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine" } } }, @@ -7664,6 +7668,27 @@ } } }, + "v1.PortworxVolumeSource": { + "id": "v1.PortworxVolumeSource", + "description": "PortworxVolumeSource represents a Portworx volume resource.", + "required": [ + "volumeID" + ], + "properties": { + "volumeID": { + "type": "string", + "description": "VolumeID uniquely identifies a Portworx volume" + }, + "fsType": { + "type": "string", + "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified." + }, + "readOnly": { + "type": "boolean", + "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts." + } + } + }, "v1.Container": { "id": "v1.Container", "description": "A single application container that you want to run within a pod.", diff --git a/api/swagger-spec/v1.json b/api/swagger-spec/v1.json index 0037e8991a..a241011c4f 100644 --- a/api/swagger-spec/v1.json +++ b/api/swagger-spec/v1.json @@ -17885,6 +17885,10 @@ "$ref": "v1.PhotonPersistentDiskVolumeSource", "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine" }, + "portworxVolume": { + "$ref": "v1.PortworxVolumeSource", + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine" + }, "accessModes": { "type": "array", "items": { @@ -18363,6 +18367,27 @@ } } }, + "v1.PortworxVolumeSource": { + "id": "v1.PortworxVolumeSource", + "description": "PortworxVolumeSource represents a Portworx volume resource.", + "required": [ + "volumeID" + ], + "properties": { + "volumeID": { + "type": "string", + "description": "VolumeID uniquely identifies a Portworx volume" + }, + "fsType": { + "type": "string", + "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified." + }, + "readOnly": { + "type": "boolean", + "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts." + } + } + }, "v1.PersistentVolumeStatus": { "id": "v1.PersistentVolumeStatus", "description": "PersistentVolumeStatus is the current status of a persistent volume.", @@ -18655,6 +18680,10 @@ "projected": { "$ref": "v1.ProjectedVolumeSource", "description": "Items for all in one resources secrets, configmaps, and downward API" + }, + "portworxVolume": { + "$ref": "v1.PortworxVolumeSource", + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine" } } }, diff --git a/cmd/kube-controller-manager/app/BUILD b/cmd/kube-controller-manager/app/BUILD index 97e1c2c1e3..618886d048 100644 --- a/cmd/kube-controller-manager/app/BUILD +++ b/cmd/kube-controller-manager/app/BUILD @@ -84,6 +84,7 @@ go_library( "//pkg/volume/host_path:go_default_library", "//pkg/volume/nfs:go_default_library", "//pkg/volume/photon_pd:go_default_library", + "//pkg/volume/portworx:go_default_library", "//pkg/volume/quobyte:go_default_library", "//pkg/volume/rbd:go_default_library", "//pkg/volume/vsphere_volume:go_default_library", diff --git a/cmd/kube-controller-manager/app/plugins.go b/cmd/kube-controller-manager/app/plugins.go index e08c3e3b43..d924071709 100644 --- a/cmd/kube-controller-manager/app/plugins.go +++ b/cmd/kube-controller-manager/app/plugins.go @@ -50,6 +50,7 @@ import ( "k8s.io/kubernetes/pkg/volume/host_path" "k8s.io/kubernetes/pkg/volume/nfs" "k8s.io/kubernetes/pkg/volume/photon_pd" + "k8s.io/kubernetes/pkg/volume/portworx" "k8s.io/kubernetes/pkg/volume/quobyte" "k8s.io/kubernetes/pkg/volume/rbd" "k8s.io/kubernetes/pkg/volume/vsphere_volume" @@ -68,6 +69,7 @@ func ProbeAttachableVolumePlugins(config componentconfig.VolumeConfiguration) [] allPlugins = append(allPlugins, gce_pd.ProbeVolumePlugins()...) allPlugins = append(allPlugins, cinder.ProbeVolumePlugins()...) allPlugins = append(allPlugins, flexvolume.ProbeVolumePlugins(config.FlexVolumePluginDir)...) + allPlugins = append(allPlugins, portworx.ProbeVolumePlugins()...) allPlugins = append(allPlugins, vsphere_volume.ProbeVolumePlugins()...) allPlugins = append(allPlugins, azure_dd.ProbeVolumePlugins()...) allPlugins = append(allPlugins, photon_pd.ProbeVolumePlugins()...) @@ -115,6 +117,7 @@ func ProbeControllerVolumePlugins(cloud cloudprovider.Interface, config componen allPlugins = append(allPlugins, quobyte.ProbeVolumePlugins()...) allPlugins = append(allPlugins, flocker.ProbeVolumePlugins()...) + allPlugins = append(allPlugins, portworx.ProbeVolumePlugins()...) if cloud != nil { switch { diff --git a/cmd/kubelet/app/BUILD b/cmd/kubelet/app/BUILD index ef13d2528e..41fd433115 100644 --- a/cmd/kubelet/app/BUILD +++ b/cmd/kubelet/app/BUILD @@ -90,6 +90,7 @@ go_library( "//pkg/volume/iscsi:go_default_library", "//pkg/volume/nfs:go_default_library", "//pkg/volume/photon_pd:go_default_library", + "//pkg/volume/portworx:go_default_library", "//pkg/volume/projected:go_default_library", "//pkg/volume/quobyte:go_default_library", "//pkg/volume/rbd:go_default_library", diff --git a/cmd/kubelet/app/plugins.go b/cmd/kubelet/app/plugins.go index 417193ec52..a6213c8b2e 100644 --- a/cmd/kubelet/app/plugins.go +++ b/cmd/kubelet/app/plugins.go @@ -46,6 +46,7 @@ import ( "k8s.io/kubernetes/pkg/volume/iscsi" "k8s.io/kubernetes/pkg/volume/nfs" "k8s.io/kubernetes/pkg/volume/photon_pd" + "k8s.io/kubernetes/pkg/volume/portworx" "k8s.io/kubernetes/pkg/volume/projected" "k8s.io/kubernetes/pkg/volume/quobyte" "k8s.io/kubernetes/pkg/volume/rbd" @@ -90,6 +91,7 @@ func ProbeVolumePlugins(pluginDir string) []volume.VolumePlugin { allPlugins = append(allPlugins, azure_dd.ProbeVolumePlugins()...) allPlugins = append(allPlugins, photon_pd.ProbeVolumePlugins()...) allPlugins = append(allPlugins, projected.ProbeVolumePlugins()...) + allPlugins = append(allPlugins, portworx.ProbeVolumePlugins()...) return allPlugins } diff --git a/docs/api-reference/apps/v1beta1/definitions.html b/docs/api-reference/apps/v1beta1/definitions.html index 7a16cb2b82..112956a8b7 100755 --- a/docs/api-reference/apps/v1beta1/definitions.html +++ b/docs/api-reference/apps/v1beta1/definitions.html @@ -1758,6 +1758,54 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +
+

v1.PortworxVolumeSource

+
+

PortworxVolumeSource represents a Portworx volume resource.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

volumeID

VolumeID uniquely identifies a Portworx volume

true

string

fsType

FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

+

v1.LocalObjectReference

@@ -4244,6 +4292,13 @@ The StatefulSet guarantees that a given network identity will always map to the

v1.ProjectedVolumeSource

+ +

portworxVolume

+

PortworxVolume represents a portworx volume attached and mounted on kubelets host machine

+

false

+

v1.PortworxVolumeSource

+ + @@ -5396,7 +5451,7 @@ Examples:
diff --git a/docs/api-reference/batch/v1/definitions.html b/docs/api-reference/batch/v1/definitions.html index 5f13323c8e..657d509127 100755 --- a/docs/api-reference/batch/v1/definitions.html +++ b/docs/api-reference/batch/v1/definitions.html @@ -1655,6 +1655,54 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +
+

v1.PortworxVolumeSource

+
+

PortworxVolumeSource represents a Portworx volume resource.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

volumeID

VolumeID uniquely identifies a Portworx volume

true

string

fsType

FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

+

v1.LocalObjectReference

@@ -4224,6 +4272,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

v1.ProjectedVolumeSource

+ +

portworxVolume

+

PortworxVolume represents a portworx volume attached and mounted on kubelets host machine

+

false

+

v1.PortworxVolumeSource

+ + @@ -5321,7 +5376,7 @@ Examples:
diff --git a/docs/api-reference/extensions/v1beta1/definitions.html b/docs/api-reference/extensions/v1beta1/definitions.html index 8d5ff55342..b316e3b39b 100755 --- a/docs/api-reference/extensions/v1beta1/definitions.html +++ b/docs/api-reference/extensions/v1beta1/definitions.html @@ -1763,6 +1763,54 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +
+

v1.PortworxVolumeSource

+
+

PortworxVolumeSource represents a Portworx volume resource.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

volumeID

VolumeID uniquely identifies a Portworx volume

true

string

fsType

FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

+

v1.Capabilities

@@ -3637,6 +3685,13 @@ Populated by the system when a graceful deletion is requested. Read-only. More i

v1.ProjectedVolumeSource

+ +

portworxVolume

+

PortworxVolume represents a portworx volume attached and mounted on kubelets host machine

+

false

+

v1.PortworxVolumeSource

+ + @@ -7726,7 +7781,7 @@ Both these may change in the future. Incoming requests are matched against the h
diff --git a/docs/api-reference/v1/definitions.html b/docs/api-reference/v1/definitions.html index c29886dad7..8efa64b427 100755 --- a/docs/api-reference/v1/definitions.html +++ b/docs/api-reference/v1/definitions.html @@ -1930,6 +1930,54 @@ span.icon > [class^="icon-"], span.icon > [class*=" icon-"] { cursor: default; } + +
+

v1.PortworxVolumeSource

+
+

PortworxVolumeSource represents a Portworx volume resource.

+
+ +++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameDescriptionRequiredSchemaDefault

volumeID

VolumeID uniquely identifies a Portworx volume

true

string

fsType

FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified.

false

string

readOnly

Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.

false

boolean

false

+

v1.PodTemplateList

@@ -4350,6 +4398,13 @@ The resulting set of endpoints can be viewed as:

v1.ProjectedVolumeSource

+ +

portworxVolume

+

PortworxVolume represents a portworx volume attached and mounted on kubelets host machine

+

false

+

v1.PortworxVolumeSource

+ + @@ -7017,6 +7072,13 @@ Examples:
+

portworxVolume

+

PortworxVolume represents a portworx volume attached and mounted on kubelets host machine

+

false

+

v1.PortworxVolumeSource

+ + +

accessModes

AccessModes contains all ways the volume can be mounted. More info: http://kubernetes.io/docs/user-guide/persistent-volumes#access-modes

false

@@ -9652,7 +9714,7 @@ Examples:
diff --git a/examples/persistent-volume-provisioning/README.md b/examples/persistent-volume-provisioning/README.md index 812e9d495f..d3ff1b664f 100644 --- a/examples/persistent-volume-provisioning/README.md +++ b/examples/persistent-volume-provisioning/README.md @@ -63,6 +63,30 @@ parameters: * `diskformat`: `thin`, `zeroedthick` and `eagerzeroedthick`. See vSphere docs for details. Default: `"thin"`. +#### Portworx Volume + +```yaml +kind: StorageClass +apiVersion: storage.k8s.io/v1beta1 +metadata: + name: portworx-io-priority-high +provisioner: kubernetes.io/portworx-volume +parameters: + repl: "1" + snap_interval: "70" + io_priority: "high" + +``` + +* `fs`: filesystem to be laid out: [none/xfs/ext4] (default: `ext4`) +* `block_size`: block size in Kbytes (default: `32`) +* `repl`: replication factor [1..3] (default: `1`) +* `io_priority`: IO Priority: [high/medium/low] (default: `low`) +* `snap_interval`: snapshot interval in minutes, 0 disables snaps (default: `0`) +* `aggregation_level`: specifies the number of chunks the volume would be distributed into, 0 indicates a non-aggregated volume (default: `0`) +* `ephemeral`: ephemeral storage [true/false] (default `false`) + +For a complete example refer ([Portworx Volume docs](../../volumes/portworx/README.md)) #### GLUSTERFS diff --git a/examples/volumes/portworx/README.md b/examples/volumes/portworx/README.md new file mode 100644 index 0000000000..36e87b4adf --- /dev/null +++ b/examples/volumes/portworx/README.md @@ -0,0 +1,370 @@ +# Portworx Volume + + - [Portworx](#portworx) + - [Prerequisites](#prerequisites) + - [Examples](#examples) + - [Using Pre-provisioned Portworx Volumes](#pre-provisioned) + - [Running Pod](#running-pod) + - [Persistent Volumes](#persistent-volumes) + - [Using Dynamic Provisioning](#dynamic-provisioning) + - [Storage Class](#storage-class) + +## Portworx + +[Portworx](http://www.portworx.com) can be used as a storage provider for your Kubernetes cluster. Portworx pools your servers capacity and turns your servers +or cloud instances into converged, highly available compute and storage nodes + +## Prerequisites + +- A Portworx instance running on all of your Kubernetes nodes. For + more information on how you can install Portworx can be found [here](http://docs.portworx.com) + +## Examples + +The following examples assumes that you already have a running Kubernetes cluster with Portworx installed on all nodes. + +### Using Pre-provisioned Portworx Volumes + + Create a Volume using Portworx CLI. + On one of the Kubernetes nodes with Portworx installed run the following command + + ```shell + /opt/pwx/bin/pxctl volume create --size --fs + ``` + +#### Running Pods + + Create Pod which uses Portworx Volumes + + Example spec: + + ```yaml + apiVersion: v1 + kind: Pod + metadata: + name: test-portworx-volume-pod + spec: + containers: + - image: gcr.io/google_containers/test-webserver + name: test-container + volumeMounts: + - mountPath: /test-portworx-volume + name: test-volume + volumes: + - name: test-volume + # This Portworx volume must already exist. + portworxVolume: + volumeID: "" + fsType: "" + ``` + + [Download example](portworx-volume-pod.yaml?raw=true) + + Make sure to replace and in the above spec with + the ones that you used while creating the volume. + + Create the Pod. + + ``` bash + $ kubectl create -f examples/volumes/portworx/portworx-volume-pod.yaml + ``` + + Verify that pod is running: + + ```bash + $ kubectl.sh get pods + NAME READY STATUS RESTARTS AGE + test-portworx-volume-pod 1/1 Running 0 16s + ``` + +#### Persistent Volumes + + 1. Create Persistent Volume. + + Example spec: + + ```yaml + apiVersion: v1 + kind: PersistentVolume + metadata: + name: + spec: + capacity: + storage: Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + portworxVolume: + volumeID: "" + fsType: "" + ``` + + Make sure to replace , and in the above spec with + the ones that you used while creating the volume. + + [Download example](portworx-volume-pv.yaml?raw=true) + + Creating the persistent volume: + + ``` bash + $ kubectl create -f examples/volumes/portworx/portworx-volume-pv.yaml + ``` + + Verifying persistent volume is created: + + ``` bash + $ kubectl describe pv pv0001 + Name: pv0001 + Labels: + StorageClass: + Status: Available + Claim: + Reclaim Policy: Retain + Access Modes: RWO + Capacity: 2Gi + Message: + Source: + Type: PortworxVolume (a Portworx Persistent Volume resource) + VolumeID: pv0001 + FSType: ext4 + No events. + ``` + + 2. Create Persistent Volume Claim. + + Example spec: + + ```yaml + kind: PersistentVolumeClaim + apiVersion: v1 + metadata: + name: pvc0001 + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: Gi + ``` + + [Download example](portworx-volume-pvc.yaml?raw=true) + + Creating the persistent volume claim: + + ``` bash + $ kubectl create -f examples/volumes/portworx/portworx-volume-pvc.yaml + ``` + + Verifying persistent volume claim is created: + + ``` bash + $ kubectl describe pvc pvc0001 + Name: pvc0001 + Namespace: default + Status: Bound + Volume: pv0001 + Labels: + Capacity: 2Gi + Access Modes: RWO + No events. + ``` + + 3. Create Pod which uses Persistent Volume Claim. + + See example: + + ```yaml + apiVersion: v1 + kind: Pod + metadata: + name: pvpod + spec: + containers: + - name: test-container + image: gcr.io/google_containers/test-webserver + volumeMounts: + - name: test-volume + mountPath: /test-portworx-volume + volumes: + - name: test-volume + persistentVolumeClaim: + claimName: pvc0001 + ``` + + [Download example](portworx-volume-pvcpod.yaml?raw=true) + + Creating the pod: + + ``` bash + $ kubectl create -f examples/volumes/portworx/portworx-volume-pvcpod.yaml + ``` + + Verifying pod is created: + + ``` bash + $ kubectl get pod pvpod + NAME READY STATUS RESTARTS AGE + pvpod 1/1 Running 0 48m + ``` + +### Using Dynamic Provisioning + +Using Dynamic Provisioning and Storage Classes you don't need to +create Portworx volumes out of band and they will be created automatically. + +#### Storage Class + + Using Storage Classes objects an admin can define the different classes of Portworx Volumes + that are offered in a cluster. Following are the different parameters that can be used to define a Portworx + Storage Class + + * `fs`: filesystem to be laid out: none|xfs|ext4 (default: `ext4`) + * `block_size`: block size in Kbytes (default: `32`) + * `repl`: replication factor [1..3] (default: `1`) + * `io_priority`: IO Priority: [high|medium|low] (default: `low`) + * `snap_interval`: snapshot interval in minutes, 0 disables snaps (default: `0`) + * `aggregation_level`: specifies the number of replication sets the volume can be aggregated from (default: `1`) + * `ephemeral`: ephemeral storage [true|false] (default `false`) + + + 1. Create Storage Class. + + See example: + + ```yaml + kind: StorageClass + apiVersion: storage.k8s.io/v1beta1 + metadata: + name: portworx-io-priority-high + provisioner: kubernetes.io/portworx-volume + parameters: + repl: "1" + snap_interval: "70" + io_priority: "high" + ``` + + [Download example](portworx-volume-sc-high.yaml?raw=true) + + Creating the storageclass: + + ``` bash + $ kubectl create -f examples/volumes/portworx/portworx-volume-sc-high.yaml + ``` + + Verifying storage class is created: + + ``` bash + $ kubectl describe storageclass portworx-io-priority-high + Name: portworx-io-priority-high + IsDefaultClass: No + Annotations: + Provisioner: kubernetes.io/portworx-volume + Parameters: io_priority=high,repl=1,snapshot_interval=70 + No events. + ``` + + 2. Create Persistent Volume Claim. + + See example: + + ```yaml + kind: PersistentVolumeClaim + apiVersion: v1 + metadata: + name: pvcsc001 + annotations: + volume.beta.kubernetes.io/storage-class: portworx-io-priority-high + spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi + ``` + + [Download example](portworx-volume-pvcsc.yaml?raw=true) + + Creating the persistent volume claim: + + ``` bash + $ kubectl create -f examples/volumes/portworx/portworx-volume-pvcsc.yaml + ``` + + Verifying persistent volume claim is created: + + ``` bash + $ kubectl describe pvc pvcsc001 + Name: pvcsc001 + Namespace: default + StorageClass: portworx-io-priority-high + Status: Bound + Volume: pvc-e5578707-c626-11e6-baf6-08002729a32b + Labels: + Capacity: 2Gi + Access Modes: RWO + No Events + ``` + + Persistent Volume is automatically created and is bounded to this pvc. + + Verifying persistent volume claim is created: + + ``` bash + $ kubectl describe pv pvc-e5578707-c626-11e6-baf6-08002729a32b + Name: pvc-e5578707-c626-11e6-baf6-08002729a32b + Labels: + StorageClass: portworx-io-priority-high + Status: Bound + Claim: default/pvcsc001 + Reclaim Policy: Delete + Access Modes: RWO + Capacity: 2Gi + Message: + Source: + Type: PortworxVolume (a Portworx Persistent Volume resource) + VolumeID: 374093969022973811 + No events. + ``` + + 3. Create Pod which uses Persistent Volume Claim with storage class. + + See example: + + ```yaml + apiVersion: v1 + kind: Pod + metadata: + name: pvpod + spec: + containers: + - name: test-container + image: gcr.io/google_containers/test-webserver + volumeMounts: + - name: test-volume + mountPath: /test-portworx-volume + volumes: + - name: test-volume + persistentVolumeClaim: + claimName: pvcsc001 + ``` + + [Download example](portworx-volume-pvcscpod.yaml?raw=true) + + Creating the pod: + + ``` bash + $ kubectl create -f examples/volumes/portworx/portworx-volume-pvcscpod.yaml + ``` + + Verifying pod is created: + + ``` bash + $ kubectl get pod pvpod + NAME READY STATUS RESTARTS AGE + pvpod 1/1 Running 0 48m + ``` + + + +[![Analytics](https://kubernetes-site.appspot.com/UA-36037335-10/GitHub/examples/volumes/portworx/README.md?pixel)]() + diff --git a/examples/volumes/portworx/portworx-volume-pod.yaml b/examples/volumes/portworx/portworx-volume-pod.yaml new file mode 100644 index 0000000000..c5f195911a --- /dev/null +++ b/examples/volumes/portworx/portworx-volume-pod.yaml @@ -0,0 +1,16 @@ +apiVersion: v1 +kind: Pod +metadata: + name: test-portworx-volume-pod +spec: + containers: + - image: gcr.io/google_containers/test-webserver + name: test-container + volumeMounts: + - mountPath: /test-portworx-volume + name: test-volume + volumes: + - name: test-volume + # This Portworx volume must already exist. + portworxVolume: + volumeID: "vol1" diff --git a/examples/volumes/portworx/portworx-volume-pv.yaml b/examples/volumes/portworx/portworx-volume-pv.yaml new file mode 100644 index 0000000000..af4e0114fa --- /dev/null +++ b/examples/volumes/portworx/portworx-volume-pv.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: PersistentVolume +metadata: + name: pv0001 +spec: + capacity: + storage: 2Gi + accessModes: + - ReadWriteOnce + persistentVolumeReclaimPolicy: Retain + portworxVolume: + volumeID: "pv0001" diff --git a/examples/volumes/portworx/portworx-volume-pvc.yaml b/examples/volumes/portworx/portworx-volume-pvc.yaml new file mode 100644 index 0000000000..181a3848d8 --- /dev/null +++ b/examples/volumes/portworx/portworx-volume-pvc.yaml @@ -0,0 +1,10 @@ +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: pvc0001 +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi \ No newline at end of file diff --git a/examples/volumes/portworx/portworx-volume-pvcpod.yaml b/examples/volumes/portworx/portworx-volume-pvcpod.yaml new file mode 100644 index 0000000000..fb92b320f1 --- /dev/null +++ b/examples/volumes/portworx/portworx-volume-pvcpod.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: pvpod +spec: + containers: + - name: test-container + image: gcr.io/google_containers/test-webserver + volumeMounts: + - name: test-volume + mountPath: /test-portworx-volume + volumes: + - name: test-volume + persistentVolumeClaim: + claimName: pvc0001 diff --git a/examples/volumes/portworx/portworx-volume-pvcsc.yaml b/examples/volumes/portworx/portworx-volume-pvcsc.yaml new file mode 100644 index 0000000000..b07ddb3029 --- /dev/null +++ b/examples/volumes/portworx/portworx-volume-pvcsc.yaml @@ -0,0 +1,12 @@ +kind: PersistentVolumeClaim +apiVersion: v1 +metadata: + name: pvcsc001 + annotations: + volume.beta.kubernetes.io/storage-class: portworx-io-priority-high +spec: + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 2Gi diff --git a/examples/volumes/portworx/portworx-volume-pvcscpod.yaml b/examples/volumes/portworx/portworx-volume-pvcscpod.yaml new file mode 100644 index 0000000000..464bf5d8fd --- /dev/null +++ b/examples/volumes/portworx/portworx-volume-pvcscpod.yaml @@ -0,0 +1,15 @@ +apiVersion: v1 +kind: Pod +metadata: + name: pvpod +spec: + containers: + - name: test-container + image: gcr.io/google_containers/test-webserver + volumeMounts: + - name: test-volume + mountPath: /test-portworx-volume + volumes: + - name: test-volume + persistentVolumeClaim: + claimName: pvcsc001 diff --git a/examples/volumes/portworx/portworx-volume-sc-high.yaml b/examples/volumes/portworx/portworx-volume-sc-high.yaml new file mode 100644 index 0000000000..b9a0a51dc3 --- /dev/null +++ b/examples/volumes/portworx/portworx-volume-sc-high.yaml @@ -0,0 +1,9 @@ +kind: StorageClass +apiVersion: storage.k8s.io/v1beta1 +metadata: + name: portworx-io-priority-high +provisioner: kubernetes.io/portworx-volume +parameters: + repl: "1" + snap_interval: "70" + io_priority: "high" diff --git a/federation/apis/openapi-spec/swagger.json b/federation/apis/openapi-spec/swagger.json index cddf935a7a..e8b4d36d0f 100644 --- a/federation/apis/openapi-spec/swagger.json +++ b/federation/apis/openapi-spec/swagger.json @@ -12636,6 +12636,26 @@ } } }, + "io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource": { + "description": "PortworxVolumeSource represents a Portworx volume resource.", + "required": [ + "volumeID" + ], + "properties": { + "fsType": { + "description": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "type": "string" + }, + "readOnly": { + "description": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + "type": "boolean" + }, + "volumeID": { + "description": "VolumeID uniquely identifies a Portworx volume", + "type": "string" + } + } + }, "io.k8s.kubernetes.pkg.api.v1.PreferredSchedulingTerm": { "description": "An empty preferred scheduling term matches all objects with implicit weight 0 (i.e. it's a no-op). A null preferred scheduling term matches no objects (i.e. is also a no-op).", "required": [ @@ -13323,6 +13343,10 @@ "description": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PhotonPersistentDiskVolumeSource" }, + "portworxVolume": { + "description": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.PortworxVolumeSource" + }, "projected": { "description": "Items for all in one resources secrets, configmaps, and downward API", "$ref": "#/definitions/io.k8s.kubernetes.pkg.api.v1.ProjectedVolumeSource" diff --git a/pkg/api/types.go b/pkg/api/types.go index a7a6cbb715..427cc2e401 100644 --- a/pkg/api/types.go +++ b/pkg/api/types.go @@ -296,6 +296,9 @@ type VolumeSource struct { PhotonPersistentDisk *PhotonPersistentDiskVolumeSource // Items for all in one resources secrets, configmaps, and downward API Projected *ProjectedVolumeSource + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource } // Similar to VolumeSource but meant for the administrator who creates PVs. @@ -358,6 +361,9 @@ type PersistentVolumeSource struct { AzureDisk *AzureDiskVolumeSource // PhotonPersistentDisk represents a Photon Controller persistent disk attached and mounted on kubelets host machine PhotonPersistentDisk *PhotonPersistentDiskVolumeSource + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource } type PersistentVolumeClaimVolumeSource struct { @@ -1001,6 +1007,21 @@ type PhotonPersistentDiskVolumeSource struct { FSType string } +// PortworxVolumeSource represents a Portworx volume resource. +type PortworxVolumeSource struct { + // VolumeID uniquely identifies a Portworx volume + VolumeID string + // FSType represents the filesystem type to mount + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + // +optional + FSType string + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + ReadOnly bool +} + type AzureDataDiskCachingMode string const ( diff --git a/pkg/api/v1/generated.pb.go b/pkg/api/v1/generated.pb.go index cc610a20e7..18297c016b 100644 --- a/pkg/api/v1/generated.pb.go +++ b/pkg/api/v1/generated.pb.go @@ -144,6 +144,7 @@ limitations under the License. PodTemplate PodTemplateList PodTemplateSpec + PortworxVolumeSource Preconditions PreferAvoidPodsEntry PreferredSchedulingTerm @@ -714,202 +715,206 @@ func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } func (*PodTemplateSpec) ProtoMessage() {} func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } +func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } +func (*PortworxVolumeSource) ProtoMessage() {} +func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } + func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } func (*PreferredSchedulingTerm) ProtoMessage() {} func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{121} + return fileDescriptorGenerated, []int{122} } func (m *Probe) Reset() { *m = Probe{} } func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } func (*ProjectedVolumeSource) ProtoMessage() {} -func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{128} + return fileDescriptorGenerated, []int{129} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{129} + return fileDescriptorGenerated, []int{130} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{130} + return fileDescriptorGenerated, []int{131} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{131} + return fileDescriptorGenerated, []int{132} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } +func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } +func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{163} + return fileDescriptorGenerated, []int{164} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{164} + return fileDescriptorGenerated, []int{165} } func init() { @@ -1032,6 +1037,7 @@ func init() { proto.RegisterType((*PodTemplate)(nil), "k8s.io.kubernetes.pkg.api.v1.PodTemplate") proto.RegisterType((*PodTemplateList)(nil), "k8s.io.kubernetes.pkg.api.v1.PodTemplateList") proto.RegisterType((*PodTemplateSpec)(nil), "k8s.io.kubernetes.pkg.api.v1.PodTemplateSpec") + proto.RegisterType((*PortworxVolumeSource)(nil), "k8s.io.kubernetes.pkg.api.v1.PortworxVolumeSource") proto.RegisterType((*Preconditions)(nil), "k8s.io.kubernetes.pkg.api.v1.Preconditions") proto.RegisterType((*PreferAvoidPodsEntry)(nil), "k8s.io.kubernetes.pkg.api.v1.PreferAvoidPodsEntry") proto.RegisterType((*PreferredSchedulingTerm)(nil), "k8s.io.kubernetes.pkg.api.v1.PreferredSchedulingTerm") @@ -5458,6 +5464,18 @@ func (m *PersistentVolumeSource) MarshalTo(data []byte) (int, error) { } i += n109 } + if m.PortworxVolume != nil { + data[i] = 0x92 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PortworxVolume.Size())) + n110, err := m.PortworxVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n110 + } return i, nil } @@ -5491,21 +5509,21 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n110, err := (&v).MarshalTo(data[i:]) + n111, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n110 + i += n111 } } data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeSource.Size())) - n111, err := m.PersistentVolumeSource.MarshalTo(data[i:]) + n112, err := m.PersistentVolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n111 + i += n112 if len(m.AccessModes) > 0 { for _, s := range m.AccessModes { data[i] = 0x1a @@ -5525,11 +5543,11 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.ClaimRef.Size())) - n112, err := m.ClaimRef.MarshalTo(data[i:]) + n113, err := m.ClaimRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n112 + i += n113 } data[i] = 0x2a i++ @@ -5616,27 +5634,27 @@ func (m *Pod) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n113, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n113 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n114, err := m.Spec.MarshalTo(data[i:]) + n114, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n114 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n115, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n115, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n115 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n116, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n116 return i, nil } @@ -5701,11 +5719,11 @@ func (m *PodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LabelSelector.Size())) - n116, err := m.LabelSelector.MarshalTo(data[i:]) + n117, err := m.LabelSelector.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n116 + i += n117 } if len(m.Namespaces) > 0 { for _, s := range m.Namespaces { @@ -5851,19 +5869,19 @@ func (m *PodCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastProbeTime.Size())) - n117, err := m.LastProbeTime.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n117 - data[i] = 0x22 - i++ - i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n118, err := m.LastTransitionTime.MarshalTo(data[i:]) + n118, err := m.LastProbeTime.MarshalTo(data[i:]) if err != nil { return 0, err } i += n118 + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) + n119, err := m.LastTransitionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n119 data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -5962,11 +5980,11 @@ func (m *PodList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n119, err := m.ListMeta.MarshalTo(data[i:]) + n120, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n119 + i += n120 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6026,11 +6044,11 @@ func (m *PodLogOptions) MarshalTo(data []byte) (int, error) { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.SinceTime.Size())) - n120, err := m.SinceTime.MarshalTo(data[i:]) + n121, err := m.SinceTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n120 + i += n121 } data[i] = 0x30 i++ @@ -6119,11 +6137,11 @@ func (m *PodSecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n121, err := m.SELinuxOptions.MarshalTo(data[i:]) + n122, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n121 + i += n122 } if m.RunAsUser != nil { data[i] = 0x10 @@ -6174,11 +6192,11 @@ func (m *PodSignature) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.PodController.Size())) - n122, err := m.PodController.MarshalTo(data[i:]) + n123, err := m.PodController.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n122 + i += n123 } return i, nil } @@ -6297,11 +6315,11 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x72 i++ i = encodeVarintGenerated(data, i, uint64(m.SecurityContext.Size())) - n123, err := m.SecurityContext.MarshalTo(data[i:]) + n124, err := m.SecurityContext.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n123 + i += n124 } if len(m.ImagePullSecrets) > 0 { for _, msg := range m.ImagePullSecrets { @@ -6333,11 +6351,11 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.Affinity.Size())) - n124, err := m.Affinity.MarshalTo(data[i:]) + n125, err := m.Affinity.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n124 + i += n125 } data[i] = 0x9a i++ @@ -6439,11 +6457,11 @@ func (m *PodStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.StartTime.Size())) - n125, err := m.StartTime.MarshalTo(data[i:]) + n126, err := m.StartTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n125 + i += n126 } if len(m.ContainerStatuses) > 0 { for _, msg := range m.ContainerStatuses { @@ -6494,19 +6512,19 @@ func (m *PodStatusResult) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n126, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n126 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n127, err := m.Status.MarshalTo(data[i:]) + n127, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n127 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n128, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n128 return i, nil } @@ -6528,19 +6546,19 @@ func (m *PodTemplate) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n128, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n128 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n129, err := m.Template.MarshalTo(data[i:]) + n129, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n129 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) + n130, err := m.Template.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n130 return i, nil } @@ -6562,11 +6580,11 @@ func (m *PodTemplateList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n130, err := m.ListMeta.MarshalTo(data[i:]) + n131, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n130 + i += n131 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6600,19 +6618,53 @@ func (m *PodTemplateSpec) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n131, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n131 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n132, err := m.Spec.MarshalTo(data[i:]) + n132, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n132 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n133, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n133 + return i, nil +} + +func (m *PortworxVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PortworxVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.VolumeID))) + i += copy(data[i:], m.VolumeID) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ return i, nil } @@ -6658,19 +6710,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.PodSignature.Size())) - n133, err := m.PodSignature.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n133 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) - n134, err := m.EvictionTime.MarshalTo(data[i:]) + n134, err := m.PodSignature.MarshalTo(data[i:]) if err != nil { return 0, err } i += n134 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) + n135, err := m.EvictionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n135 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -6703,11 +6755,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Preference.Size())) - n135, err := m.Preference.MarshalTo(data[i:]) + n136, err := m.Preference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n135 + i += n136 return i, nil } @@ -6729,11 +6781,11 @@ func (m *Probe) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Handler.Size())) - n136, err := m.Handler.MarshalTo(data[i:]) + n137, err := m.Handler.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n136 + i += n137 data[i] = 0x10 i++ i = encodeVarintGenerated(data, i, uint64(m.InitialDelaySeconds)) @@ -6883,11 +6935,11 @@ func (m *RBDVolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) - n137, err := m.SecretRef.MarshalTo(data[i:]) + n138, err := m.SecretRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n137 + i += n138 } data[i] = 0x40 i++ @@ -6918,11 +6970,11 @@ func (m *RangeAllocation) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n138, err := m.ObjectMeta.MarshalTo(data[i:]) + n139, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n138 + i += n139 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Range))) @@ -6954,27 +7006,27 @@ func (m *ReplicationController) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n139, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n139 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n140, err := m.Spec.MarshalTo(data[i:]) + n140, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n140 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n141, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n141, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n141 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n142, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n142 return i, nil } @@ -7004,11 +7056,11 @@ func (m *ReplicationControllerCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n142, err := m.LastTransitionTime.MarshalTo(data[i:]) + n143, err := m.LastTransitionTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n142 + i += n143 data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -7038,11 +7090,11 @@ func (m *ReplicationControllerList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n143, err := m.ListMeta.MarshalTo(data[i:]) + n144, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n143 + i += n144 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7099,11 +7151,11 @@ func (m *ReplicationControllerSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n144, err := m.Template.MarshalTo(data[i:]) + n145, err := m.Template.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n144 + i += n145 } data[i] = 0x20 i++ @@ -7182,11 +7234,11 @@ func (m *ResourceFieldSelector) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Divisor.Size())) - n145, err := m.Divisor.MarshalTo(data[i:]) + n146, err := m.Divisor.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n145 + i += n146 return i, nil } @@ -7208,27 +7260,27 @@ func (m *ResourceQuota) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n146, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n146 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n147, err := m.Spec.MarshalTo(data[i:]) + n147, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n147 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n148, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n148, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n148 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n149, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n149 return i, nil } @@ -7250,11 +7302,11 @@ func (m *ResourceQuotaList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n149, err := m.ListMeta.MarshalTo(data[i:]) + n150, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n149 + i += n150 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7300,11 +7352,11 @@ func (m *ResourceQuotaSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n150, err := (&v).MarshalTo(data[i:]) + n151, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n150 + i += n151 } } if len(m.Scopes) > 0 { @@ -7355,11 +7407,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n151, err := (&v).MarshalTo(data[i:]) + n152, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n151 + i += n152 } } if len(m.Used) > 0 { @@ -7377,11 +7429,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n152, err := (&v).MarshalTo(data[i:]) + n153, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n152 + i += n153 } } return i, nil @@ -7417,11 +7469,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n153, err := (&v).MarshalTo(data[i:]) + n154, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n153 + i += n154 } } if len(m.Requests) > 0 { @@ -7439,11 +7491,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n154, err := (&v).MarshalTo(data[i:]) + n155, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n154 + i += n155 } } return i, nil @@ -7501,11 +7553,11 @@ func (m *Secret) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n155, err := m.ObjectMeta.MarshalTo(data[i:]) + n156, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n155 + i += n156 if len(m.Data) > 0 { for k := range m.Data { data[i] = 0x12 @@ -7565,11 +7617,11 @@ func (m *SecretEnvSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n156, err := m.LocalObjectReference.MarshalTo(data[i:]) + n157, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n156 + i += n157 if m.Optional != nil { data[i] = 0x10 i++ @@ -7601,11 +7653,11 @@ func (m *SecretKeySelector) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n157, err := m.LocalObjectReference.MarshalTo(data[i:]) + n158, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n157 + i += n158 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Key))) @@ -7641,11 +7693,11 @@ func (m *SecretList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n158, err := m.ListMeta.MarshalTo(data[i:]) + n159, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n158 + i += n159 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7679,11 +7731,11 @@ func (m *SecretProjection) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n159, err := m.LocalObjectReference.MarshalTo(data[i:]) + n160, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n159 + i += n160 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7777,11 +7829,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Capabilities.Size())) - n160, err := m.Capabilities.MarshalTo(data[i:]) + n161, err := m.Capabilities.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n160 + i += n161 } if m.Privileged != nil { data[i] = 0x10 @@ -7797,11 +7849,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n161, err := m.SELinuxOptions.MarshalTo(data[i:]) + n162, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n161 + i += n162 } if m.RunAsUser != nil { data[i] = 0x20 @@ -7849,11 +7901,11 @@ func (m *SerializedReference) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Reference.Size())) - n162, err := m.Reference.MarshalTo(data[i:]) + n163, err := m.Reference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n162 + i += n163 return i, nil } @@ -7875,27 +7927,27 @@ func (m *Service) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n163, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n163 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n164, err := m.Spec.MarshalTo(data[i:]) + n164, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n164 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n165, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n165, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n165 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n166, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n166 return i, nil } @@ -7917,11 +7969,11 @@ func (m *ServiceAccount) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n166, err := m.ObjectMeta.MarshalTo(data[i:]) + n167, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n166 + i += n167 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { data[i] = 0x12 @@ -7977,11 +8029,11 @@ func (m *ServiceAccountList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n167, err := m.ListMeta.MarshalTo(data[i:]) + n168, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n167 + i += n168 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -8015,11 +8067,11 @@ func (m *ServiceList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n168, err := m.ListMeta.MarshalTo(data[i:]) + n169, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n168 + i += n169 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -8064,11 +8116,11 @@ func (m *ServicePort) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.TargetPort.Size())) - n169, err := m.TargetPort.MarshalTo(data[i:]) + n170, err := m.TargetPort.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n169 + i += n170 data[i] = 0x28 i++ i = encodeVarintGenerated(data, i, uint64(m.NodePort)) @@ -8227,11 +8279,11 @@ func (m *ServiceStatus) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LoadBalancer.Size())) - n170, err := m.LoadBalancer.MarshalTo(data[i:]) + n171, err := m.LoadBalancer.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n170 + i += n171 return i, nil } @@ -8279,11 +8331,11 @@ func (m *TCPSocketAction) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Port.Size())) - n171, err := m.Port.MarshalTo(data[i:]) + n172, err := m.Port.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n171 + i += n172 return i, nil } @@ -8317,11 +8369,11 @@ func (m *Taint) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.TimeAdded.Size())) - n172, err := m.TimeAdded.MarshalTo(data[i:]) + n173, err := m.TimeAdded.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n172 + i += n173 return i, nil } @@ -8386,11 +8438,11 @@ func (m *Volume) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.VolumeSource.Size())) - n173, err := m.VolumeSource.MarshalTo(data[i:]) + n174, err := m.VolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n173 + i += n174 return i, nil } @@ -8451,32 +8503,32 @@ func (m *VolumeProjection) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) - n174, err := m.Secret.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n174 - } - if m.DownwardAPI != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) - n175, err := m.DownwardAPI.MarshalTo(data[i:]) + n175, err := m.Secret.MarshalTo(data[i:]) if err != nil { return 0, err } i += n175 } - if m.ConfigMap != nil { - data[i] = 0x1a + if m.DownwardAPI != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) - n176, err := m.ConfigMap.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) + n176, err := m.DownwardAPI.MarshalTo(data[i:]) if err != nil { return 0, err } i += n176 } + if m.ConfigMap != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) + n177, err := m.ConfigMap.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n177 + } return i, nil } @@ -8499,163 +8551,163 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) - n177, err := m.HostPath.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n177 - } - if m.EmptyDir != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) - n178, err := m.EmptyDir.MarshalTo(data[i:]) + n178, err := m.HostPath.MarshalTo(data[i:]) if err != nil { return 0, err } i += n178 } - if m.GCEPersistentDisk != nil { - data[i] = 0x1a + if m.EmptyDir != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) - n179, err := m.GCEPersistentDisk.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) + n179, err := m.EmptyDir.MarshalTo(data[i:]) if err != nil { return 0, err } i += n179 } - if m.AWSElasticBlockStore != nil { - data[i] = 0x22 + if m.GCEPersistentDisk != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) - n180, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) + n180, err := m.GCEPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } i += n180 } - if m.GitRepo != nil { - data[i] = 0x2a + if m.AWSElasticBlockStore != nil { + data[i] = 0x22 i++ - i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) - n181, err := m.GitRepo.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) + n181, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) if err != nil { return 0, err } i += n181 } - if m.Secret != nil { - data[i] = 0x32 + if m.GitRepo != nil { + data[i] = 0x2a i++ - i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) - n182, err := m.Secret.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) + n182, err := m.GitRepo.MarshalTo(data[i:]) if err != nil { return 0, err } i += n182 } - if m.NFS != nil { - data[i] = 0x3a + if m.Secret != nil { + data[i] = 0x32 i++ - i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) - n183, err := m.NFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) + n183, err := m.Secret.MarshalTo(data[i:]) if err != nil { return 0, err } i += n183 } - if m.ISCSI != nil { - data[i] = 0x42 + if m.NFS != nil { + data[i] = 0x3a i++ - i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) - n184, err := m.ISCSI.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) + n184, err := m.NFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n184 } - if m.Glusterfs != nil { - data[i] = 0x4a + if m.ISCSI != nil { + data[i] = 0x42 i++ - i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) - n185, err := m.Glusterfs.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) + n185, err := m.ISCSI.MarshalTo(data[i:]) if err != nil { return 0, err } i += n185 } - if m.PersistentVolumeClaim != nil { - data[i] = 0x52 + if m.Glusterfs != nil { + data[i] = 0x4a i++ - i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) - n186, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) + n186, err := m.Glusterfs.MarshalTo(data[i:]) if err != nil { return 0, err } i += n186 } - if m.RBD != nil { - data[i] = 0x5a + if m.PersistentVolumeClaim != nil { + data[i] = 0x52 i++ - i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) - n187, err := m.RBD.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) + n187, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) if err != nil { return 0, err } i += n187 } - if m.FlexVolume != nil { - data[i] = 0x62 + if m.RBD != nil { + data[i] = 0x5a i++ - i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) - n188, err := m.FlexVolume.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) + n188, err := m.RBD.MarshalTo(data[i:]) if err != nil { return 0, err } i += n188 } - if m.Cinder != nil { - data[i] = 0x6a + if m.FlexVolume != nil { + data[i] = 0x62 i++ - i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) - n189, err := m.Cinder.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) + n189, err := m.FlexVolume.MarshalTo(data[i:]) if err != nil { return 0, err } i += n189 } - if m.CephFS != nil { - data[i] = 0x72 + if m.Cinder != nil { + data[i] = 0x6a i++ - i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) - n190, err := m.CephFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) + n190, err := m.Cinder.MarshalTo(data[i:]) if err != nil { return 0, err } i += n190 } - if m.Flocker != nil { - data[i] = 0x7a + if m.CephFS != nil { + data[i] = 0x72 i++ - i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) - n191, err := m.Flocker.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) + n191, err := m.CephFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n191 } + if m.Flocker != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) + n192, err := m.Flocker.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n192 + } if m.DownwardAPI != nil { data[i] = 0x82 i++ data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) - n192, err := m.DownwardAPI.MarshalTo(data[i:]) + n193, err := m.DownwardAPI.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n192 + i += n193 } if m.FC != nil { data[i] = 0x8a @@ -8663,11 +8715,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) - n193, err := m.FC.MarshalTo(data[i:]) + n194, err := m.FC.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n193 + i += n194 } if m.AzureFile != nil { data[i] = 0x92 @@ -8675,11 +8727,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) - n194, err := m.AzureFile.MarshalTo(data[i:]) + n195, err := m.AzureFile.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n194 + i += n195 } if m.ConfigMap != nil { data[i] = 0x9a @@ -8687,11 +8739,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) - n195, err := m.ConfigMap.MarshalTo(data[i:]) + n196, err := m.ConfigMap.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n195 + i += n196 } if m.VsphereVolume != nil { data[i] = 0xa2 @@ -8699,11 +8751,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) - n196, err := m.VsphereVolume.MarshalTo(data[i:]) + n197, err := m.VsphereVolume.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n196 + i += n197 } if m.Quobyte != nil { data[i] = 0xaa @@ -8711,11 +8763,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) - n197, err := m.Quobyte.MarshalTo(data[i:]) + n198, err := m.Quobyte.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n197 + i += n198 } if m.AzureDisk != nil { data[i] = 0xb2 @@ -8723,11 +8775,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) - n198, err := m.AzureDisk.MarshalTo(data[i:]) + n199, err := m.AzureDisk.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n198 + i += n199 } if m.PhotonPersistentDisk != nil { data[i] = 0xba @@ -8735,24 +8787,36 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.PhotonPersistentDisk.Size())) - n199, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n199 - } - if m.Projected != nil { - data[i] = 0xc2 - i++ - data[i] = 0x1 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Projected.Size())) - n200, err := m.Projected.MarshalTo(data[i:]) + n200, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } i += n200 } + if m.PortworxVolume != nil { + data[i] = 0xc2 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PortworxVolume.Size())) + n201, err := m.PortworxVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n201 + } + if m.Projected != nil { + data[i] = 0xca + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Projected.Size())) + n202, err := m.Projected.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n202 + } return i, nil } @@ -8803,11 +8867,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PodAffinityTerm.Size())) - n201, err := m.PodAffinityTerm.MarshalTo(data[i:]) + n203, err := m.PodAffinityTerm.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n201 + i += n203 return i, nil } @@ -10472,6 +10536,10 @@ func (m *PersistentVolumeSource) Size() (n int) { l = m.PhotonPersistentDisk.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.PortworxVolume != nil { + l = m.PortworxVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -10897,6 +10965,17 @@ func (m *PodTemplateSpec) Size() (n int) { return n } +func (m *PortworxVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.VolumeID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + func (m *Preconditions) Size() (n int) { var l int _ = l @@ -11677,6 +11756,10 @@ func (m *VolumeSource) Size() (n int) { l = m.PhotonPersistentDisk.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.PortworxVolume != nil { + l = m.PortworxVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) + } if m.Projected != nil { l = m.Projected.Size() n += 2 + l + sovGenerated(uint64(l)) @@ -13053,6 +13136,7 @@ func (this *PersistentVolumeSource) String() string { `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, `PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, + `PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, `}`, }, "") return s @@ -13371,6 +13455,18 @@ func (this *PodTemplateSpec) String() string { }, "") return s } +func (this *PortworxVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PortworxVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} func (this *Preconditions) String() string { if this == nil { return "nil" @@ -14019,6 +14115,7 @@ func (this *VolumeSource) String() string { `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, `PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, + `PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, `Projected:` + strings.Replace(fmt.Sprintf("%v", this.Projected), "ProjectedVolumeSource", "ProjectedVolumeSource", 1) + `,`, `}`, }, "") @@ -29713,6 +29810,39 @@ func (m *PersistentVolumeSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortworxVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PortworxVolume == nil { + m.PortworxVolume = &PortworxVolumeSource{} + } + if err := m.PortworxVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -33638,6 +33768,134 @@ func (m *PodTemplateSpec) Unmarshal(data []byte) error { } return nil } +func (m *PortworxVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PortworxVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PortworxVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Preconditions) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -41299,6 +41557,39 @@ func (m *VolumeSource) Unmarshal(data []byte) error { } iNdEx = postIndex case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortworxVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PortworxVolume == nil { + m.PortworxVolume = &PortworxVolumeSource{} + } + if err := m.PortworxVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 25: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Projected", wireType) } @@ -41665,675 +41956,679 @@ var ( ) var fileDescriptorGenerated = []byte{ - // 10709 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x6c, 0x24, 0xc7, - 0x95, 0x18, 0xee, 0x9e, 0xe1, 0xd7, 0x3c, 0x7e, 0x6e, 0xed, 0x87, 0x28, 0x5a, 0x5a, 0xae, 0x5a, - 0x96, 0xbc, 0x92, 0x56, 0xa4, 0x77, 0x25, 0x59, 0x6b, 0xcb, 0x3f, 0xd9, 0x24, 0x87, 0xdc, 0xa5, - 0xf7, 0x6b, 0x54, 0xc3, 0xdd, 0x95, 0x6d, 0xfd, 0x2c, 0x35, 0xa7, 0x8b, 0x64, 0x6b, 0x7b, 0xba, - 0x47, 0xdd, 0x3d, 0xdc, 0xa5, 0x1d, 0x03, 0x77, 0x8e, 0xe1, 0x4b, 0x70, 0x4e, 0xe2, 0xc3, 0xc5, - 0x40, 0x90, 0x04, 0xf0, 0xe1, 0x80, 0x5c, 0x9c, 0xef, 0x38, 0xc6, 0xd9, 0x3e, 0xc4, 0x97, 0x20, - 0x97, 0xf3, 0xc5, 0x07, 0x24, 0x17, 0x03, 0x87, 0xe4, 0x2e, 0x08, 0xc2, 0x3b, 0xd1, 0xb8, 0xfb, - 0x33, 0x7f, 0xe4, 0xfe, 0x63, 0x82, 0x24, 0xa8, 0xcf, 0xae, 0xea, 0x99, 0x61, 0xf7, 0x50, 0x4b, - 0x5a, 0x36, 0xf2, 0xdf, 0xcc, 0x7b, 0xaf, 0x5e, 0x7d, 0x74, 0xd5, 0xab, 0x57, 0xaf, 0xde, 0x7b, - 0x05, 0x17, 0xee, 0x5d, 0x8e, 0xe7, 0xbc, 0x70, 0xfe, 0x5e, 0x7b, 0x9d, 0x44, 0x01, 0x49, 0x48, - 0x3c, 0xdf, 0xba, 0xb7, 0x39, 0xef, 0xb4, 0xbc, 0xf9, 0xed, 0x8b, 0xf3, 0x9b, 0x24, 0x20, 0x91, - 0x93, 0x10, 0x77, 0xae, 0x15, 0x85, 0x49, 0x88, 0x1e, 0xe3, 0xd4, 0x73, 0x29, 0xf5, 0x5c, 0xeb, - 0xde, 0xe6, 0x9c, 0xd3, 0xf2, 0xe6, 0xb6, 0x2f, 0xce, 0x3c, 0xbf, 0xe9, 0x25, 0x5b, 0xed, 0xf5, - 0xb9, 0x46, 0xd8, 0x9c, 0xdf, 0x0c, 0x37, 0xc3, 0x79, 0x56, 0x68, 0xbd, 0xbd, 0xc1, 0xfe, 0xb1, - 0x3f, 0xec, 0x17, 0x67, 0x36, 0xf3, 0xa2, 0xa8, 0xda, 0x69, 0x79, 0x4d, 0xa7, 0xb1, 0xe5, 0x05, - 0x24, 0xda, 0x51, 0x95, 0x47, 0x24, 0x0e, 0xdb, 0x51, 0x83, 0x64, 0x9b, 0x70, 0x60, 0xa9, 0x78, - 0xbe, 0x49, 0x12, 0xa7, 0x4b, 0xc3, 0x67, 0xe6, 0x7b, 0x95, 0x8a, 0xda, 0x41, 0xe2, 0x35, 0x3b, - 0xab, 0xf9, 0x68, 0x5e, 0x81, 0xb8, 0xb1, 0x45, 0x9a, 0x4e, 0x47, 0xb9, 0x17, 0x7a, 0x95, 0x6b, - 0x27, 0x9e, 0x3f, 0xef, 0x05, 0x49, 0x9c, 0x44, 0x07, 0xf5, 0x29, 0x26, 0xd1, 0x36, 0x89, 0xd2, - 0x0e, 0x91, 0x07, 0x4e, 0xb3, 0xe5, 0x93, 0x2e, 0x7d, 0xb2, 0xff, 0xc8, 0x82, 0x73, 0x0b, 0x77, - 0xeb, 0xcb, 0xbe, 0x13, 0x27, 0x5e, 0x63, 0xd1, 0x0f, 0x1b, 0xf7, 0xea, 0x49, 0x18, 0x91, 0x3b, - 0xa1, 0xdf, 0x6e, 0x92, 0x3a, 0x1b, 0x3e, 0x74, 0x01, 0x46, 0xb6, 0xd9, 0xff, 0xd5, 0xea, 0xb4, - 0x75, 0xce, 0x3a, 0x5f, 0x59, 0x9c, 0xfa, 0xd1, 0xee, 0xec, 0x07, 0xf6, 0x76, 0x67, 0x47, 0xee, - 0x08, 0x38, 0x56, 0x14, 0xe8, 0x69, 0x18, 0xda, 0x88, 0xd7, 0x76, 0x5a, 0x64, 0xba, 0xc4, 0x68, - 0x27, 0x04, 0xed, 0xd0, 0x4a, 0x9d, 0x42, 0xb1, 0xc0, 0xa2, 0x79, 0xa8, 0xb4, 0x9c, 0x28, 0xf1, - 0x12, 0x2f, 0x0c, 0xa6, 0xcb, 0xe7, 0xac, 0xf3, 0x83, 0x8b, 0x27, 0x04, 0x69, 0xa5, 0x26, 0x11, - 0x38, 0xa5, 0xa1, 0xcd, 0x88, 0x88, 0xe3, 0xde, 0x0a, 0xfc, 0x9d, 0xe9, 0x81, 0x73, 0xd6, 0xf9, - 0x91, 0xb4, 0x19, 0x58, 0xc0, 0xb1, 0xa2, 0xb0, 0xbf, 0x5f, 0x82, 0x91, 0x85, 0x8d, 0x0d, 0x2f, - 0xf0, 0x92, 0x1d, 0xf4, 0x16, 0x8c, 0x05, 0xa1, 0x4b, 0xe4, 0x7f, 0xd6, 0x8b, 0xd1, 0x4b, 0xcf, - 0xce, 0x1d, 0x34, 0x15, 0xe7, 0x6e, 0x6a, 0x25, 0x16, 0xa7, 0xf6, 0x76, 0x67, 0xc7, 0x74, 0x08, - 0x36, 0x38, 0xa2, 0x37, 0x60, 0xb4, 0x15, 0xba, 0xaa, 0x82, 0x12, 0xab, 0xe0, 0x99, 0x83, 0x2b, - 0xa8, 0xa5, 0x05, 0x16, 0x27, 0xf7, 0x76, 0x67, 0x47, 0x35, 0x00, 0xd6, 0xd9, 0x21, 0x1f, 0x26, - 0xe9, 0xdf, 0x20, 0xf1, 0x54, 0x0d, 0x65, 0x56, 0xc3, 0xf3, 0xf9, 0x35, 0x68, 0x85, 0x16, 0x4f, - 0xee, 0xed, 0xce, 0x4e, 0x66, 0x80, 0x38, 0xcb, 0xda, 0xfe, 0x02, 0x4c, 0x2c, 0x24, 0x89, 0xd3, - 0xd8, 0x22, 0x2e, 0xff, 0xbe, 0xe8, 0x45, 0x18, 0x08, 0x9c, 0x26, 0x11, 0x5f, 0xff, 0x9c, 0x18, - 0xf6, 0x81, 0x9b, 0x4e, 0x93, 0xec, 0xef, 0xce, 0x4e, 0xdd, 0x0e, 0xbc, 0x77, 0xda, 0x62, 0xce, - 0x50, 0x18, 0x66, 0xd4, 0xe8, 0x12, 0x80, 0x4b, 0xb6, 0xbd, 0x06, 0xa9, 0x39, 0xc9, 0x96, 0x98, - 0x0d, 0x48, 0x94, 0x85, 0xaa, 0xc2, 0x60, 0x8d, 0xca, 0xfe, 0xb2, 0x05, 0x95, 0x85, 0xed, 0xd0, - 0x73, 0x6b, 0xa1, 0x1b, 0xa3, 0x36, 0x4c, 0xb6, 0x22, 0xb2, 0x41, 0x22, 0x05, 0x9a, 0xb6, 0xce, - 0x95, 0xcf, 0x8f, 0x5e, 0xba, 0x94, 0xd3, 0x6f, 0xb3, 0xd0, 0x72, 0x90, 0x44, 0x3b, 0x8b, 0x8f, - 0x88, 0xaa, 0x27, 0x33, 0x58, 0x9c, 0xad, 0xc3, 0xfe, 0x95, 0x12, 0x9c, 0x5e, 0xf8, 0x42, 0x3b, - 0x22, 0x55, 0x2f, 0xbe, 0x97, 0x5d, 0x0a, 0xae, 0x17, 0xdf, 0xbb, 0x99, 0x0e, 0x86, 0x9a, 0x83, - 0x55, 0x01, 0xc7, 0x8a, 0x02, 0x3d, 0x0f, 0xc3, 0xf4, 0xf7, 0x6d, 0xbc, 0x2a, 0x7a, 0x7f, 0x52, - 0x10, 0x8f, 0x56, 0x9d, 0xc4, 0xa9, 0x72, 0x14, 0x96, 0x34, 0xe8, 0x06, 0x8c, 0x36, 0xd8, 0x7a, - 0xdf, 0xbc, 0x11, 0xba, 0x84, 0x7d, 0xe1, 0xca, 0xe2, 0x73, 0x94, 0x7c, 0x29, 0x05, 0xef, 0xef, - 0xce, 0x4e, 0xf3, 0xb6, 0x09, 0x16, 0x1a, 0x0e, 0xeb, 0xe5, 0x91, 0xad, 0x16, 0xe2, 0x00, 0xe3, - 0x04, 0x5d, 0x16, 0xe1, 0x79, 0x6d, 0x4d, 0x0d, 0xb2, 0x35, 0x35, 0xd6, 0x63, 0x3d, 0xfd, 0x43, - 0x4b, 0x8c, 0xc9, 0x8a, 0xe7, 0x9b, 0xe2, 0xe1, 0x12, 0x40, 0x4c, 0x1a, 0x11, 0x49, 0xb4, 0x51, - 0x51, 0x9f, 0xb9, 0xae, 0x30, 0x58, 0xa3, 0xa2, 0x8b, 0x3f, 0xde, 0x72, 0x22, 0x36, 0x5b, 0xc4, - 0xd8, 0xa8, 0xc5, 0x5f, 0x97, 0x08, 0x9c, 0xd2, 0x18, 0x8b, 0xbf, 0x9c, 0xbb, 0xf8, 0x7f, 0xc7, - 0x82, 0xe1, 0x45, 0x2f, 0x70, 0xbd, 0x60, 0x13, 0xbd, 0x05, 0x23, 0x54, 0xa2, 0xbb, 0x4e, 0xe2, - 0x88, 0x75, 0xff, 0x11, 0x39, 0x79, 0x74, 0x01, 0x2b, 0xa7, 0x4f, 0x3c, 0x47, 0xa9, 0xe9, 0x24, - 0xba, 0xb5, 0xfe, 0x36, 0x69, 0x24, 0x37, 0x48, 0xe2, 0xa4, 0xdd, 0x49, 0x61, 0x58, 0x71, 0x45, - 0xb7, 0x61, 0x28, 0x71, 0xa2, 0x4d, 0x92, 0x88, 0x65, 0x9f, 0xb3, 0x28, 0x39, 0x0f, 0x4c, 0xa7, - 0x1c, 0x09, 0x1a, 0x24, 0x15, 0x90, 0x6b, 0x8c, 0x09, 0x16, 0xcc, 0xec, 0x06, 0x8c, 0x2d, 0x39, - 0x2d, 0x67, 0xdd, 0xf3, 0xbd, 0xc4, 0x23, 0x31, 0xfa, 0x30, 0x94, 0x1d, 0xd7, 0x65, 0x0b, 0xa0, - 0xb2, 0x78, 0x7a, 0x6f, 0x77, 0xb6, 0xbc, 0xe0, 0xba, 0xfb, 0xbb, 0xb3, 0xa0, 0xa8, 0x76, 0x30, - 0xa5, 0x40, 0xcf, 0xc2, 0x80, 0x1b, 0x85, 0xad, 0xe9, 0x12, 0xa3, 0x3c, 0x43, 0x57, 0x6a, 0x35, - 0x0a, 0x5b, 0x19, 0x52, 0x46, 0x63, 0xff, 0xb0, 0x04, 0x68, 0x89, 0xb4, 0xb6, 0x56, 0xea, 0xc6, - 0x37, 0x3d, 0x0f, 0x23, 0xcd, 0x30, 0xf0, 0x92, 0x30, 0x8a, 0x45, 0x85, 0x6c, 0x5e, 0xdc, 0x10, - 0x30, 0xac, 0xb0, 0xe8, 0x1c, 0x0c, 0xb4, 0xd2, 0xe5, 0x3d, 0x26, 0x45, 0x03, 0x5b, 0xd8, 0x0c, - 0x43, 0x29, 0xda, 0x31, 0x89, 0xc4, 0x7c, 0x56, 0x14, 0xb7, 0x63, 0x12, 0x61, 0x86, 0x49, 0x67, - 0x10, 0x9d, 0x5b, 0x62, 0xb6, 0x66, 0x66, 0x10, 0xc5, 0x60, 0x8d, 0x0a, 0xbd, 0x09, 0x15, 0xfe, - 0x0f, 0x93, 0x0d, 0x36, 0x75, 0x73, 0x85, 0xc2, 0xf5, 0xb0, 0xe1, 0xf8, 0xd9, 0xc1, 0x1f, 0x67, - 0x33, 0x4e, 0x32, 0xc2, 0x29, 0x4f, 0x63, 0xc6, 0x0d, 0xe5, 0xce, 0xb8, 0xbf, 0x65, 0x01, 0x5a, - 0xf2, 0x02, 0x97, 0x44, 0xc7, 0xb0, 0x75, 0xf6, 0xb7, 0x18, 0xfe, 0x2b, 0x6d, 0x5a, 0xd8, 0x6c, - 0x85, 0x01, 0x09, 0x92, 0xa5, 0x30, 0x70, 0xf9, 0x76, 0xfa, 0x71, 0x18, 0x48, 0x68, 0x55, 0xbc, - 0x59, 0x4f, 0xcb, 0xcf, 0x42, 0x2b, 0xd8, 0xdf, 0x9d, 0x3d, 0xd3, 0x59, 0x82, 0x35, 0x81, 0x95, - 0x41, 0x1f, 0x83, 0xa1, 0x38, 0x71, 0x92, 0x76, 0x2c, 0x1a, 0xfa, 0x84, 0x6c, 0x68, 0x9d, 0x41, - 0xf7, 0x77, 0x67, 0x27, 0x55, 0x31, 0x0e, 0xc2, 0xa2, 0x00, 0x7a, 0x06, 0x86, 0x9b, 0x24, 0x8e, - 0x9d, 0x4d, 0x29, 0xe0, 0x26, 0x45, 0xd9, 0xe1, 0x1b, 0x1c, 0x8c, 0x25, 0x1e, 0x3d, 0x09, 0x83, - 0x24, 0x8a, 0xc2, 0x48, 0xcc, 0x88, 0x71, 0x41, 0x38, 0xb8, 0x4c, 0x81, 0x98, 0xe3, 0xec, 0xff, - 0x62, 0xc1, 0xa4, 0x6a, 0x2b, 0xaf, 0xeb, 0x18, 0x96, 0xbc, 0x0b, 0xd0, 0x90, 0x1d, 0x8c, 0xd9, - 0x42, 0xd3, 0xea, 0xe8, 0x3e, 0xfd, 0x3a, 0x07, 0x34, 0xad, 0x43, 0x81, 0x62, 0xac, 0xf1, 0xb5, - 0xff, 0x9d, 0x05, 0x27, 0x33, 0x7d, 0xbb, 0xee, 0xc5, 0x09, 0x7a, 0xa3, 0xa3, 0x7f, 0x73, 0xc5, - 0xfa, 0x47, 0x4b, 0xb3, 0xde, 0xa9, 0xf9, 0x22, 0x21, 0x5a, 0xdf, 0x30, 0x0c, 0x7a, 0x09, 0x69, - 0xca, 0x6e, 0x3d, 0x5f, 0xb0, 0x5b, 0xbc, 0x7d, 0xe9, 0x57, 0x5a, 0xa5, 0x3c, 0x30, 0x67, 0x65, - 0xff, 0x4f, 0x0b, 0x2a, 0x4b, 0x61, 0xb0, 0xe1, 0x6d, 0xde, 0x70, 0x5a, 0xc7, 0xf0, 0x7d, 0xea, - 0x30, 0xc0, 0xb8, 0xf3, 0x2e, 0x5c, 0xcc, 0xeb, 0x82, 0x68, 0xd8, 0x1c, 0xdd, 0x53, 0xb9, 0xb2, - 0xa0, 0xc4, 0x14, 0x05, 0x61, 0xc6, 0x6c, 0xe6, 0x65, 0xa8, 0x28, 0x02, 0x34, 0x05, 0xe5, 0x7b, - 0x84, 0x6b, 0x92, 0x15, 0x4c, 0x7f, 0xa2, 0x53, 0x30, 0xb8, 0xed, 0xf8, 0x6d, 0xb1, 0x78, 0x31, - 0xff, 0xf3, 0xf1, 0xd2, 0x65, 0xcb, 0xfe, 0x21, 0x5b, 0x81, 0xa2, 0x92, 0xe5, 0x60, 0x5b, 0x08, - 0x87, 0xaf, 0x58, 0x70, 0xca, 0xef, 0x22, 0x94, 0xc4, 0x98, 0x1c, 0x46, 0x9c, 0x3d, 0x26, 0x9a, - 0x7d, 0xaa, 0x1b, 0x16, 0x77, 0xad, 0x8d, 0xca, 0xfa, 0xb0, 0x45, 0x27, 0x9c, 0xe3, 0xb3, 0xa6, - 0x0b, 0x1d, 0xe0, 0x96, 0x80, 0x61, 0x85, 0xb5, 0xff, 0xdc, 0x82, 0x53, 0xaa, 0x1f, 0xd7, 0xc8, - 0x4e, 0x9d, 0xf8, 0xa4, 0x91, 0x84, 0xd1, 0xfb, 0xa5, 0x27, 0x8f, 0xf3, 0x6f, 0xc2, 0x65, 0xd2, - 0xa8, 0x60, 0x50, 0xbe, 0x46, 0x76, 0xf8, 0x07, 0xd2, 0x3b, 0x5a, 0x3e, 0xb0, 0xa3, 0xff, 0xd2, - 0x82, 0x71, 0xd5, 0xd1, 0x63, 0x58, 0x72, 0xd7, 0xcd, 0x25, 0xf7, 0xe1, 0x82, 0xf3, 0xb5, 0xc7, - 0x62, 0xfb, 0x9b, 0x25, 0x2a, 0x36, 0x04, 0x4d, 0x2d, 0x0a, 0xe9, 0x20, 0x51, 0x89, 0xff, 0x3e, - 0xf9, 0x4a, 0xfd, 0x75, 0xf6, 0x1a, 0xd9, 0x59, 0x0b, 0xa9, 0x36, 0xd1, 0xbd, 0xb3, 0xc6, 0x47, - 0x1d, 0x38, 0xf0, 0xa3, 0xfe, 0x7e, 0x09, 0x4e, 0xab, 0x61, 0x31, 0x76, 0xe9, 0x9f, 0xcb, 0x81, - 0xb9, 0x08, 0xa3, 0x2e, 0xd9, 0x70, 0xda, 0x7e, 0xa2, 0x4e, 0x13, 0x83, 0xfc, 0x98, 0x59, 0x4d, - 0xc1, 0x58, 0xa7, 0xe9, 0x63, 0x2c, 0xbf, 0x39, 0xca, 0xe4, 0x79, 0xe2, 0xd0, 0x59, 0x4f, 0x35, - 0x3c, 0xed, 0x78, 0x38, 0xa6, 0x1f, 0x0f, 0xc5, 0x51, 0xf0, 0x49, 0x18, 0xf4, 0x9a, 0x74, 0xcf, - 0x2f, 0x99, 0x5b, 0xf9, 0x2a, 0x05, 0x62, 0x8e, 0x43, 0x4f, 0xc1, 0x70, 0x23, 0x6c, 0x36, 0x9d, - 0xc0, 0x9d, 0x2e, 0x33, 0x9d, 0x73, 0x94, 0xaa, 0x05, 0x4b, 0x1c, 0x84, 0x25, 0x0e, 0x3d, 0x06, - 0x03, 0x4e, 0xb4, 0x19, 0x4f, 0x0f, 0x30, 0x9a, 0x11, 0x5a, 0xd3, 0x42, 0xb4, 0x19, 0x63, 0x06, - 0xa5, 0xba, 0xe4, 0xfd, 0x30, 0xba, 0xe7, 0x05, 0x9b, 0x55, 0x2f, 0x62, 0x8a, 0xa1, 0xa6, 0x4b, - 0xde, 0x55, 0x18, 0xac, 0x51, 0xa1, 0x1a, 0x0c, 0xb6, 0xc2, 0x28, 0x89, 0xa7, 0x87, 0xd8, 0xc0, - 0x3f, 0x97, 0xbb, 0xfc, 0x78, 0xbf, 0x6b, 0x61, 0x94, 0xa4, 0x5d, 0xa1, 0xff, 0x62, 0xcc, 0x19, - 0xa1, 0x25, 0x28, 0x93, 0x60, 0x7b, 0x7a, 0x98, 0xf1, 0xfb, 0xd0, 0xc1, 0xfc, 0x96, 0x83, 0xed, - 0x3b, 0x4e, 0x94, 0xca, 0xab, 0xe5, 0x60, 0x1b, 0xd3, 0xd2, 0xa8, 0x01, 0x15, 0x69, 0xc2, 0x8a, - 0xa7, 0x47, 0x8a, 0x4c, 0x45, 0x2c, 0xc8, 0x31, 0x79, 0xa7, 0xed, 0x45, 0xa4, 0x49, 0x82, 0x24, - 0x4e, 0x0f, 0x56, 0x12, 0x1b, 0xe3, 0x94, 0x2f, 0x6a, 0xc0, 0x18, 0xd7, 0x3f, 0x6f, 0x84, 0xed, - 0x20, 0x89, 0xa7, 0x2b, 0xac, 0xc9, 0x39, 0x96, 0x8b, 0x3b, 0x69, 0x89, 0xc5, 0x53, 0x82, 0xfd, - 0x98, 0x06, 0x8c, 0xb1, 0xc1, 0x14, 0xbd, 0x01, 0xe3, 0xbe, 0xb7, 0x4d, 0x02, 0x12, 0xc7, 0xb5, - 0x28, 0x5c, 0x27, 0xd3, 0xc0, 0x7a, 0xf3, 0x64, 0xde, 0x29, 0x3e, 0x5c, 0x27, 0x8b, 0x27, 0xf6, - 0x76, 0x67, 0xc7, 0xaf, 0xeb, 0xa5, 0xb1, 0xc9, 0x0c, 0xbd, 0x09, 0x13, 0x54, 0xd9, 0xf5, 0x52, - 0xf6, 0xa3, 0xc5, 0xd9, 0xa3, 0xbd, 0xdd, 0xd9, 0x09, 0x6c, 0x14, 0xc7, 0x19, 0x76, 0x68, 0x0d, - 0x2a, 0xbe, 0xb7, 0x41, 0x1a, 0x3b, 0x0d, 0x9f, 0x4c, 0x8f, 0x31, 0xde, 0x39, 0x8b, 0xf3, 0xba, - 0x24, 0xe7, 0x07, 0x0c, 0xf5, 0x17, 0xa7, 0x8c, 0xd0, 0x1d, 0x38, 0x93, 0x90, 0xa8, 0xe9, 0x05, - 0x0e, 0x5d, 0x54, 0x42, 0xfb, 0x65, 0xa6, 0x92, 0x71, 0x36, 0x6b, 0xcf, 0x8a, 0x81, 0x3d, 0xb3, - 0xd6, 0x95, 0x0a, 0xf7, 0x28, 0x8d, 0x6e, 0xc1, 0x24, 0x5b, 0x4f, 0xb5, 0xb6, 0xef, 0xd7, 0x42, - 0xdf, 0x6b, 0xec, 0x4c, 0x4f, 0x30, 0x86, 0x4f, 0x49, 0x03, 0xc8, 0xaa, 0x89, 0xa6, 0x07, 0xc3, - 0xf4, 0x1f, 0xce, 0x96, 0x46, 0x3e, 0x4c, 0xc6, 0xa4, 0xd1, 0x8e, 0xbc, 0x64, 0x87, 0xce, 0x7d, - 0xf2, 0x20, 0x99, 0x9e, 0x2c, 0x72, 0xd0, 0xad, 0x9b, 0x85, 0xb8, 0xf5, 0x29, 0x03, 0xc4, 0x59, - 0xd6, 0x54, 0x54, 0xc4, 0x89, 0xeb, 0x05, 0xd3, 0x53, 0x4c, 0x02, 0xa9, 0xf5, 0x55, 0xa7, 0x40, - 0xcc, 0x71, 0xcc, 0x7e, 0x40, 0x7f, 0xdc, 0xa2, 0x52, 0xfa, 0x04, 0x23, 0x4c, 0xed, 0x07, 0x12, - 0x81, 0x53, 0x1a, 0xaa, 0x1a, 0x24, 0xc9, 0xce, 0x34, 0x62, 0xa4, 0x6a, 0xa9, 0xad, 0xad, 0x7d, - 0x06, 0x53, 0x38, 0xba, 0x03, 0xc3, 0x24, 0xd8, 0x5e, 0x89, 0xc2, 0xe6, 0xf4, 0xc9, 0x22, 0x32, - 0x60, 0x99, 0x13, 0xf3, 0xfd, 0x23, 0x3d, 0xc2, 0x08, 0x30, 0x96, 0xcc, 0xd0, 0x03, 0x98, 0xee, - 0xf2, 0x95, 0xf8, 0x47, 0x39, 0xc5, 0x3e, 0xca, 0x27, 0x44, 0xd9, 0xe9, 0xb5, 0x1e, 0x74, 0xfb, - 0x07, 0xe0, 0x70, 0x4f, 0xee, 0xf6, 0x3a, 0x4c, 0x28, 0x41, 0xc5, 0xbe, 0x37, 0x9a, 0x85, 0x41, - 0x2a, 0x8b, 0xe5, 0x81, 0xbe, 0x42, 0x07, 0x95, 0x8a, 0xe8, 0x18, 0x73, 0x38, 0x1b, 0x54, 0xef, - 0x0b, 0x64, 0x71, 0x27, 0x21, 0xfc, 0x60, 0x57, 0xd6, 0x06, 0x55, 0x22, 0x70, 0x4a, 0x63, 0xff, - 0x6f, 0xae, 0x26, 0xa5, 0xd2, 0xb0, 0xc0, 0x4e, 0x70, 0x01, 0x46, 0xb6, 0xc2, 0x38, 0xa1, 0xd4, - 0xac, 0x8e, 0xc1, 0x54, 0x31, 0xba, 0x2a, 0xe0, 0x58, 0x51, 0xa0, 0x57, 0x60, 0xbc, 0xa1, 0x57, - 0x20, 0xb6, 0xb1, 0xd3, 0xa2, 0x88, 0x59, 0x3b, 0x36, 0x69, 0xd1, 0x65, 0x18, 0x61, 0x56, 0xee, - 0x46, 0xe8, 0x8b, 0x23, 0xa4, 0xdc, 0x95, 0x47, 0x6a, 0x02, 0xbe, 0xaf, 0xfd, 0xc6, 0x8a, 0x9a, - 0x1e, 0xc4, 0x69, 0x13, 0x56, 0x6b, 0x62, 0x03, 0x51, 0x07, 0xf1, 0xab, 0x0c, 0x8a, 0x05, 0xd6, - 0xfe, 0xe7, 0x25, 0x6d, 0x94, 0xe9, 0x01, 0x88, 0xa0, 0xcf, 0xc2, 0xf0, 0x7d, 0xc7, 0x4b, 0xbc, - 0x60, 0x53, 0x68, 0x0f, 0x2f, 0x14, 0xdc, 0x4d, 0x58, 0xf1, 0xbb, 0xbc, 0x28, 0xdf, 0xf9, 0xc4, - 0x1f, 0x2c, 0x19, 0x52, 0xde, 0x51, 0x3b, 0x08, 0x28, 0xef, 0x52, 0xff, 0xbc, 0x31, 0x2f, 0xca, - 0x79, 0x8b, 0x3f, 0x58, 0x32, 0x44, 0x1b, 0x00, 0x72, 0x2e, 0x11, 0x57, 0x58, 0x97, 0x3f, 0xda, - 0x0f, 0xfb, 0x35, 0x55, 0x7a, 0x71, 0x82, 0xee, 0xb5, 0xe9, 0x7f, 0xac, 0x71, 0xb6, 0x13, 0xa6, - 0x84, 0x75, 0x36, 0x0b, 0x7d, 0x8e, 0x2e, 0x69, 0x27, 0x4a, 0x88, 0xbb, 0x90, 0x64, 0x0d, 0xf4, - 0x07, 0xab, 0xd8, 0x6b, 0x5e, 0x93, 0xe8, 0xcb, 0x5f, 0x30, 0xc1, 0x29, 0x3f, 0xfb, 0x7b, 0x65, - 0x98, 0xee, 0xd5, 0x5c, 0x3a, 0x25, 0xc9, 0x03, 0x2f, 0x59, 0xa2, 0x6a, 0x92, 0x65, 0x4e, 0xc9, - 0x65, 0x01, 0xc7, 0x8a, 0x82, 0xce, 0x8d, 0xd8, 0xdb, 0x94, 0x87, 0xa5, 0xc1, 0x74, 0x6e, 0xd4, - 0x19, 0x14, 0x0b, 0x2c, 0xa5, 0x8b, 0x88, 0x13, 0x8b, 0xcb, 0x0d, 0x6d, 0x0e, 0x61, 0x06, 0xc5, - 0x02, 0xab, 0x1b, 0x44, 0x06, 0x72, 0x0c, 0x22, 0xc6, 0x10, 0x0d, 0x3e, 0xdc, 0x21, 0x42, 0x9f, - 0x07, 0xd8, 0xf0, 0x02, 0x2f, 0xde, 0x62, 0xdc, 0x87, 0xfa, 0xe6, 0xae, 0x94, 0xac, 0x15, 0xc5, - 0x05, 0x6b, 0x1c, 0xd1, 0x4b, 0x30, 0xaa, 0x96, 0xe7, 0x6a, 0x75, 0x7a, 0xd8, 0x34, 0x88, 0xa7, - 0xb2, 0xaa, 0x8a, 0x75, 0x3a, 0xfb, 0xed, 0xec, 0x7c, 0x11, 0xab, 0x42, 0x1b, 0x5f, 0xab, 0xe8, - 0xf8, 0x96, 0x0e, 0x1e, 0x5f, 0xfb, 0x3f, 0x97, 0x61, 0xd2, 0xa8, 0xac, 0x1d, 0x17, 0x90, 0x68, - 0xaf, 0xd1, 0x0d, 0xcb, 0x49, 0x88, 0x58, 0x93, 0x17, 0xfa, 0x59, 0x34, 0xfa, 0xf6, 0x46, 0xd7, - 0x02, 0xe7, 0x84, 0xb6, 0xa0, 0xe2, 0x3b, 0x31, 0x33, 0xa9, 0x10, 0xb1, 0x16, 0xfb, 0x63, 0x9b, - 0x1e, 0x3f, 0x9c, 0x38, 0xd1, 0x76, 0x0f, 0x5e, 0x4b, 0xca, 0x9c, 0xee, 0xb6, 0x54, 0xd9, 0x91, - 0x37, 0x6a, 0xaa, 0x39, 0x54, 0x23, 0xda, 0xc1, 0x1c, 0x87, 0x2e, 0xc3, 0x58, 0x44, 0xd8, 0x4c, - 0x59, 0xa2, 0xfa, 0x1c, 0x9b, 0x7a, 0x83, 0xa9, 0xe2, 0x87, 0x35, 0x1c, 0x36, 0x28, 0x53, 0xbd, - 0x7f, 0xe8, 0x00, 0xbd, 0xff, 0x19, 0x18, 0x66, 0x3f, 0xd4, 0xac, 0x50, 0x5f, 0x68, 0x95, 0x83, - 0xb1, 0xc4, 0x67, 0x27, 0xd1, 0x48, 0xc1, 0x49, 0xf4, 0x2c, 0x4c, 0x54, 0x1d, 0xd2, 0x0c, 0x83, - 0xe5, 0xc0, 0x6d, 0x85, 0x5e, 0x90, 0xa0, 0x69, 0x18, 0x60, 0xfb, 0x09, 0x5f, 0xef, 0x03, 0x94, - 0x03, 0x1e, 0xa0, 0xba, 0xbb, 0xfd, 0x7f, 0x2c, 0x18, 0xaf, 0x12, 0x9f, 0x24, 0x84, 0x9f, 0x7b, - 0x62, 0xb4, 0x02, 0x68, 0x33, 0x72, 0x1a, 0xa4, 0x46, 0x22, 0x2f, 0x74, 0xeb, 0xa4, 0x11, 0x06, - 0xec, 0x22, 0x8a, 0x6e, 0x90, 0x67, 0xf6, 0x76, 0x67, 0xd1, 0x95, 0x0e, 0x2c, 0xee, 0x52, 0x02, - 0xb9, 0x30, 0xde, 0x8a, 0x88, 0x61, 0x37, 0xb4, 0xf2, 0x55, 0x8d, 0x9a, 0x5e, 0x84, 0x6b, 0xc3, - 0x06, 0x08, 0x9b, 0x4c, 0xd1, 0xa7, 0x60, 0x2a, 0x8c, 0x5a, 0x5b, 0x4e, 0x50, 0x25, 0x2d, 0x12, - 0xb8, 0xf4, 0x08, 0x20, 0xac, 0x1d, 0xa7, 0xf6, 0x76, 0x67, 0xa7, 0x6e, 0x65, 0x70, 0xb8, 0x83, - 0xda, 0x7e, 0x07, 0x4e, 0x57, 0xc3, 0xfb, 0xc1, 0x7d, 0x27, 0x72, 0x17, 0x6a, 0xab, 0x9a, 0x01, - 0xe1, 0x75, 0x79, 0x40, 0xe5, 0x97, 0x70, 0x39, 0xbb, 0x8f, 0xc6, 0x83, 0x1f, 0x0d, 0x56, 0x3c, - 0x9f, 0xf4, 0x30, 0x59, 0xfc, 0xa3, 0x92, 0x51, 0x67, 0x4a, 0xaf, 0xee, 0x17, 0xac, 0x9e, 0xf7, - 0x0b, 0x9f, 0x83, 0x91, 0x0d, 0x8f, 0xf8, 0x2e, 0x26, 0x1b, 0x62, 0x44, 0x2f, 0x16, 0xb9, 0x80, - 0x59, 0xa1, 0x65, 0xa4, 0x05, 0x8b, 0x1f, 0x74, 0x57, 0x04, 0x1b, 0xac, 0x18, 0xa2, 0x36, 0x4c, - 0xc9, 0xb3, 0x92, 0xc4, 0x8a, 0x05, 0xf9, 0x42, 0xb1, 0xa3, 0x98, 0x59, 0x0d, 0xfb, 0x04, 0x38, - 0xc3, 0x10, 0x77, 0x54, 0x41, 0xcf, 0xb8, 0x4d, 0xba, 0x1d, 0x0d, 0xb0, 0xe9, 0xc9, 0xce, 0xb8, - 0xec, 0xb8, 0xce, 0xa0, 0xf6, 0x6f, 0x58, 0xf0, 0x48, 0xc7, 0x68, 0x09, 0x5b, 0xc6, 0x91, 0x7d, - 0xa3, 0xac, 0x41, 0xa1, 0x94, 0x6f, 0x50, 0xb0, 0x6f, 0xc1, 0xa9, 0xe5, 0x66, 0x2b, 0xd9, 0xa9, - 0x7a, 0xe6, 0xb5, 0xc8, 0xcb, 0x30, 0xd4, 0x24, 0xae, 0xd7, 0x6e, 0x8a, 0xcf, 0x3a, 0x2b, 0x65, - 0xf7, 0x0d, 0x06, 0xdd, 0xdf, 0x9d, 0x1d, 0xaf, 0x27, 0x61, 0xe4, 0x6c, 0x12, 0x0e, 0xc0, 0x82, - 0xdc, 0x7e, 0xd7, 0x82, 0x49, 0xb9, 0x86, 0x17, 0x5c, 0x37, 0x22, 0x71, 0x8c, 0x66, 0xa0, 0xe4, - 0xb5, 0x04, 0x23, 0x10, 0x8c, 0x4a, 0xab, 0x35, 0x5c, 0xf2, 0x5a, 0xe8, 0xb3, 0x50, 0xe1, 0xb7, - 0x69, 0xe9, 0xe4, 0xe8, 0xf3, 0x76, 0x8e, 0x9d, 0xdf, 0xd6, 0x24, 0x0f, 0x9c, 0xb2, 0x93, 0x9a, - 0x2c, 0xdb, 0x1d, 0xca, 0xe6, 0xdd, 0xce, 0x55, 0x01, 0xc7, 0x8a, 0x02, 0x9d, 0x87, 0x91, 0x20, - 0x74, 0xf9, 0x85, 0x27, 0xdf, 0xe7, 0xd9, 0x94, 0xbb, 0x29, 0x60, 0x58, 0x61, 0xed, 0xaf, 0x59, - 0x30, 0x26, 0xfb, 0x58, 0x50, 0xa9, 0xa6, 0x8b, 0x24, 0x55, 0xa8, 0xd3, 0x45, 0x42, 0x95, 0x62, - 0x86, 0x31, 0x74, 0xe1, 0x72, 0x3f, 0xba, 0xb0, 0xfd, 0x5b, 0x25, 0x98, 0x90, 0xcd, 0xa9, 0xb7, - 0xd7, 0x63, 0x42, 0x55, 0x85, 0x8a, 0xc3, 0x07, 0x9f, 0xc8, 0x79, 0xf6, 0x7c, 0xde, 0x79, 0xc9, - 0xf8, 0x66, 0xa9, 0x2a, 0xb2, 0x20, 0xf9, 0xe0, 0x94, 0x25, 0xda, 0x86, 0x13, 0x41, 0x98, 0xb0, - 0x2d, 0x48, 0xe1, 0x8b, 0xdd, 0x46, 0x64, 0xeb, 0x79, 0x54, 0xd4, 0x73, 0xe2, 0x66, 0x96, 0x1f, - 0xee, 0xac, 0x02, 0xdd, 0x92, 0x76, 0xa0, 0x32, 0xab, 0xeb, 0xd9, 0x62, 0x75, 0xf5, 0x36, 0x03, - 0xd9, 0xbf, 0x67, 0x41, 0x45, 0x92, 0x1d, 0xc7, 0xb5, 0xd4, 0x5d, 0x18, 0x8e, 0xd9, 0x27, 0x92, - 0xc3, 0x75, 0xa1, 0x58, 0x17, 0xf8, 0x77, 0x4d, 0xf7, 0x5d, 0xfe, 0x3f, 0xc6, 0x92, 0x1b, 0x33, - 0x88, 0xab, 0x8e, 0xbc, 0xef, 0x0c, 0xe2, 0xaa, 0x65, 0xbd, 0x6f, 0x9f, 0xc6, 0x8d, 0x13, 0x3b, - 0x55, 0x1e, 0x5b, 0x11, 0xd9, 0xf0, 0x1e, 0x64, 0x95, 0xc7, 0x1a, 0x83, 0x62, 0x81, 0x45, 0x1b, - 0x30, 0xd6, 0x90, 0x26, 0xe3, 0x54, 0x84, 0x7c, 0xa4, 0xa0, 0x7d, 0x5e, 0x5d, 0xf5, 0x70, 0xf7, - 0xa1, 0x25, 0x8d, 0x13, 0x36, 0xf8, 0x52, 0x39, 0x95, 0xde, 0x66, 0x97, 0x0b, 0x1a, 0x57, 0x22, - 0x92, 0xa4, 0x35, 0xf4, 0xbc, 0xc8, 0xb6, 0xbf, 0x65, 0xc1, 0x10, 0xb7, 0x31, 0x16, 0x33, 0xd4, - 0x6a, 0x97, 0x58, 0xe9, 0x78, 0xde, 0xa1, 0x40, 0x71, 0xa7, 0x85, 0xee, 0x42, 0x85, 0xfd, 0x60, - 0xf6, 0x92, 0x72, 0x11, 0x5f, 0x2a, 0x5e, 0xbf, 0xde, 0xd4, 0x3b, 0x92, 0x01, 0x4e, 0x79, 0xd9, - 0x3f, 0x28, 0x53, 0xd1, 0x97, 0x92, 0x1a, 0x7b, 0xbb, 0x75, 0x1c, 0x7b, 0x7b, 0xe9, 0xe8, 0xf7, - 0xf6, 0x77, 0x60, 0xb2, 0xa1, 0x5d, 0xa2, 0xa5, 0x5f, 0xfc, 0x52, 0xc1, 0x69, 0xa5, 0xdd, 0xbc, - 0x71, 0x9b, 0xda, 0x92, 0xc9, 0x0e, 0x67, 0xf9, 0x23, 0x02, 0x63, 0x7c, 0x3e, 0x88, 0xfa, 0x06, - 0x58, 0x7d, 0xf3, 0x45, 0x66, 0x98, 0x5e, 0x19, 0x9b, 0xc5, 0x75, 0x8d, 0x11, 0x36, 0xd8, 0xda, - 0x7f, 0x7b, 0x10, 0x06, 0x97, 0xb7, 0x49, 0x90, 0x1c, 0x83, 0xa8, 0x6b, 0xc2, 0x84, 0x17, 0x6c, - 0x87, 0xfe, 0x36, 0x71, 0x39, 0xfe, 0x70, 0xdb, 0xfb, 0x19, 0x51, 0xc9, 0xc4, 0xaa, 0xc1, 0x0c, - 0x67, 0x98, 0x1f, 0xc5, 0x69, 0xfe, 0x35, 0x18, 0xe2, 0x33, 0x43, 0x1c, 0xe5, 0x73, 0x6c, 0xee, - 0x6c, 0x60, 0xc5, 0x0a, 0x4a, 0x6d, 0x0e, 0xdc, 0xdc, 0x2f, 0x18, 0xa1, 0xb7, 0x61, 0x62, 0xc3, - 0x8b, 0xe2, 0x84, 0x1e, 0xc8, 0xe3, 0xc4, 0x69, 0xb6, 0x0e, 0x71, 0x8e, 0x57, 0x23, 0xb2, 0x62, - 0x70, 0xc2, 0x19, 0xce, 0x68, 0x13, 0xc6, 0xe9, 0x31, 0x32, 0xad, 0x6a, 0xb8, 0xef, 0xaa, 0x94, - 0x19, 0xef, 0xba, 0xce, 0x08, 0x9b, 0x7c, 0xa9, 0x48, 0x6a, 0xb0, 0x63, 0xe7, 0x08, 0xd3, 0x6e, - 0x94, 0x48, 0xe2, 0xe7, 0x4d, 0x8e, 0xa3, 0x92, 0x8d, 0x79, 0xb3, 0x54, 0x4c, 0xc9, 0x96, 0xfa, - 0xac, 0xd8, 0xdf, 0xa1, 0x7b, 0x31, 0x1d, 0xc3, 0x63, 0xd8, 0xbe, 0xae, 0x9a, 0xdb, 0xd7, 0x93, - 0x05, 0xbe, 0x6c, 0x8f, 0xad, 0xeb, 0x2d, 0x18, 0xd5, 0x3e, 0x3c, 0x9a, 0x87, 0x4a, 0x43, 0x3a, - 0x5c, 0x08, 0x29, 0xae, 0x54, 0x29, 0xe5, 0x89, 0x81, 0x53, 0x1a, 0x3a, 0x2e, 0x54, 0x05, 0xcd, - 0xba, 0x67, 0x51, 0x05, 0x15, 0x33, 0x8c, 0xfd, 0x02, 0xc0, 0xf2, 0x03, 0xd2, 0x58, 0xe0, 0x47, - 0x3c, 0xed, 0x0e, 0xce, 0xea, 0x7d, 0x07, 0x67, 0x7f, 0xdb, 0x82, 0x89, 0x95, 0x25, 0x43, 0xa7, - 0x9f, 0x03, 0xe0, 0xba, 0xf1, 0xdd, 0xbb, 0x37, 0xa5, 0x8d, 0x99, 0x1b, 0x02, 0x15, 0x14, 0x6b, - 0x14, 0xe8, 0x51, 0x28, 0xfb, 0xed, 0x40, 0xa8, 0xac, 0xc3, 0x7b, 0xbb, 0xb3, 0xe5, 0xeb, 0xed, - 0x00, 0x53, 0x98, 0xe6, 0x07, 0x55, 0x2e, 0xec, 0x07, 0x95, 0xef, 0x11, 0xfc, 0x8d, 0x32, 0x4c, - 0xad, 0xf8, 0xe4, 0x81, 0xd1, 0xea, 0xa7, 0x61, 0xc8, 0x8d, 0xbc, 0x6d, 0x12, 0x65, 0x15, 0x81, - 0x2a, 0x83, 0x62, 0x81, 0x2d, 0xec, 0x9a, 0xf5, 0x66, 0xe7, 0x46, 0x7e, 0x74, 0x6e, 0x69, 0xb9, - 0x7d, 0x46, 0x1b, 0x30, 0xcc, 0xef, 0x6c, 0xe3, 0xe9, 0x41, 0x36, 0x15, 0x5f, 0x39, 0xb8, 0x31, - 0xd9, 0xf1, 0x99, 0x13, 0x36, 0x10, 0xee, 0x14, 0xa3, 0x64, 0x99, 0x80, 0x62, 0xc9, 0x7c, 0xe6, - 0xe3, 0x30, 0xa6, 0x53, 0xf6, 0xe5, 0x1d, 0xf3, 0x97, 0x2d, 0x38, 0xb9, 0xe2, 0x87, 0x8d, 0x7b, - 0x19, 0xdf, 0xb9, 0x97, 0x60, 0x94, 0x2e, 0xa6, 0xd8, 0x70, 0x2c, 0x35, 0x3c, 0x68, 0x05, 0x0a, - 0xeb, 0x74, 0x5a, 0xb1, 0xdb, 0xb7, 0x57, 0xab, 0xdd, 0x1c, 0x6f, 0x05, 0x0a, 0xeb, 0x74, 0xf6, - 0x1f, 0x58, 0xf0, 0xf8, 0x95, 0xa5, 0xe5, 0x1a, 0x89, 0x62, 0x2f, 0x4e, 0x48, 0x90, 0x74, 0xf8, - 0xfe, 0x52, 0x9d, 0xd1, 0xd5, 0x9a, 0x92, 0xea, 0x8c, 0x55, 0xd6, 0x0a, 0x81, 0x7d, 0xbf, 0x38, - 0xc0, 0x7f, 0xcb, 0x82, 0x93, 0x57, 0xbc, 0x04, 0x93, 0x56, 0x98, 0x75, 0xd7, 0x8d, 0x48, 0x2b, - 0x8c, 0xbd, 0x24, 0x8c, 0x76, 0xb2, 0xee, 0xba, 0x58, 0x61, 0xb0, 0x46, 0xc5, 0x6b, 0xde, 0xf6, - 0x62, 0xda, 0xd2, 0x92, 0x79, 0xd4, 0xc5, 0x02, 0x8e, 0x15, 0x05, 0xed, 0x98, 0xeb, 0x45, 0x4c, - 0x65, 0xd8, 0x11, 0x2b, 0x58, 0x75, 0xac, 0x2a, 0x11, 0x38, 0xa5, 0xb1, 0xff, 0xae, 0x05, 0xa7, - 0xaf, 0xf8, 0xed, 0x38, 0x21, 0xd1, 0x46, 0x6c, 0x34, 0xf6, 0x05, 0xa8, 0x10, 0xa9, 0xdc, 0x8b, - 0xb6, 0xaa, 0x4d, 0x43, 0x69, 0xfd, 0xdc, 0x57, 0x58, 0xd1, 0x15, 0x70, 0x49, 0xed, 0xcf, 0x81, - 0xf2, 0xb7, 0x4b, 0x30, 0x7e, 0x75, 0x6d, 0xad, 0x76, 0x85, 0x24, 0x42, 0x4a, 0xe6, 0x1b, 0xa5, - 0xb0, 0x76, 0x22, 0x3f, 0x48, 0xf9, 0x69, 0x27, 0x9e, 0x3f, 0xc7, 0x43, 0x3a, 0xe6, 0x56, 0x83, - 0xe4, 0x56, 0x54, 0x4f, 0x22, 0x2f, 0xd8, 0xec, 0x7a, 0x86, 0x97, 0xb2, 0xbc, 0xdc, 0x4b, 0x96, - 0xa3, 0x17, 0x60, 0x88, 0xc5, 0x94, 0x48, 0xe5, 0xe3, 0x83, 0x4a, 0x4f, 0x60, 0xd0, 0xfd, 0xdd, - 0xd9, 0xca, 0x6d, 0xbc, 0xca, 0xff, 0x60, 0x41, 0x8a, 0xde, 0x84, 0xd1, 0xad, 0x24, 0x69, 0x5d, - 0x25, 0x8e, 0x4b, 0x22, 0x29, 0x27, 0xce, 0x1f, 0x2c, 0x27, 0xe8, 0x70, 0xf0, 0x02, 0xe9, 0xd2, - 0x4a, 0x61, 0x31, 0xd6, 0x39, 0xda, 0x75, 0x80, 0x14, 0xf7, 0x90, 0xce, 0x20, 0xf6, 0x2f, 0x96, - 0x60, 0xf8, 0xaa, 0x13, 0xb8, 0x3e, 0x89, 0xd0, 0x0a, 0x0c, 0x90, 0x07, 0xa4, 0x21, 0x36, 0xf2, - 0x9c, 0xa6, 0xa7, 0x9b, 0x1d, 0xb7, 0xab, 0xd1, 0xff, 0x98, 0x95, 0x47, 0x18, 0x86, 0x69, 0xbb, - 0xaf, 0x28, 0x4f, 0xee, 0xe7, 0xf2, 0x47, 0x41, 0x4d, 0x0a, 0xbe, 0x53, 0x0a, 0x10, 0x96, 0x8c, - 0x98, 0x05, 0xaa, 0xd1, 0xaa, 0x53, 0xf1, 0x96, 0x14, 0x3b, 0xd9, 0xad, 0x2d, 0xd5, 0x38, 0xb9, - 0xe0, 0xcb, 0x2d, 0x50, 0x12, 0x88, 0x53, 0x76, 0xf6, 0x65, 0x38, 0xc5, 0xee, 0x4c, 0x9d, 0x64, - 0xcb, 0x58, 0x35, 0xb9, 0xd3, 0xd3, 0xfe, 0x51, 0x09, 0x4e, 0xac, 0xd6, 0x97, 0xea, 0xa6, 0xed, - 0xf0, 0x32, 0x8c, 0xf1, 0x0d, 0x9a, 0x4e, 0x3a, 0xc7, 0x17, 0xe5, 0x95, 0x9d, 0x7f, 0x4d, 0xc3, - 0x61, 0x83, 0x12, 0x3d, 0x0e, 0x65, 0xef, 0x9d, 0x20, 0xeb, 0x79, 0xb7, 0xfa, 0xda, 0x4d, 0x4c, - 0xe1, 0x14, 0x4d, 0xf7, 0x7a, 0x2e, 0xe4, 0x14, 0x5a, 0xed, 0xf7, 0xaf, 0xc2, 0x84, 0x17, 0x37, - 0x62, 0x6f, 0x35, 0xa0, 0x12, 0xc0, 0x69, 0xc8, 0xe9, 0x9b, 0x2a, 0xe7, 0xb4, 0xa9, 0x0a, 0x8b, - 0x33, 0xd4, 0x9a, 0xc4, 0x1d, 0x2c, 0xac, 0x2f, 0xe4, 0xba, 0x74, 0x53, 0x55, 0xa8, 0xc5, 0x7a, - 0x17, 0x33, 0x3f, 0x1e, 0xa1, 0x0a, 0xf1, 0x0e, 0xc7, 0x58, 0xe2, 0xec, 0xb7, 0xa1, 0xa2, 0x5c, - 0xb1, 0xa4, 0x07, 0xa2, 0xd5, 0xc3, 0x03, 0x31, 0x5f, 0x32, 0x49, 0xc3, 0x6f, 0xb9, 0xab, 0xe1, - 0xf7, 0x9f, 0x58, 0x90, 0xfa, 0x92, 0x20, 0x0c, 0x95, 0x56, 0xc8, 0x2e, 0x72, 0x22, 0x79, 0x63, - 0xfa, 0x54, 0xce, 0x84, 0xe5, 0x0b, 0x86, 0x4f, 0xa9, 0x9a, 0x2c, 0x8b, 0x53, 0x36, 0xe8, 0x3a, - 0x0c, 0xb7, 0x22, 0x52, 0x4f, 0x58, 0xf8, 0x40, 0x1f, 0x1c, 0xf9, 0xd8, 0xf0, 0x92, 0x58, 0xb2, - 0xb0, 0xff, 0x95, 0x05, 0x70, 0xdd, 0x6b, 0x7a, 0x09, 0x76, 0x82, 0x4d, 0x72, 0x0c, 0xa7, 0xc2, - 0x9b, 0x30, 0x10, 0xb7, 0x48, 0xa3, 0xd8, 0x55, 0x5c, 0xda, 0xb2, 0x7a, 0x8b, 0x34, 0xd2, 0xcf, - 0x41, 0xff, 0x61, 0xc6, 0xc7, 0xfe, 0x3e, 0xc0, 0x44, 0x4a, 0x46, 0x35, 0x73, 0xf4, 0xbc, 0xe1, - 0x37, 0xff, 0x68, 0xc6, 0x6f, 0xbe, 0xc2, 0xa8, 0x35, 0x57, 0xf9, 0x04, 0xca, 0x4d, 0xe7, 0x81, - 0x38, 0x08, 0xbc, 0x54, 0xb4, 0x41, 0xb4, 0xa6, 0xb9, 0x1b, 0xce, 0x03, 0xae, 0x77, 0x3d, 0x27, - 0x27, 0xd2, 0x0d, 0xe7, 0xc1, 0x3e, 0xbf, 0x70, 0x63, 0x0b, 0x96, 0x9e, 0x3c, 0xbe, 0xfc, 0x27, - 0xe9, 0x7f, 0x26, 0x43, 0x69, 0x75, 0xac, 0x56, 0x2f, 0x10, 0x76, 0xcc, 0x3e, 0x6b, 0xf5, 0x82, - 0x6c, 0xad, 0x5e, 0x50, 0xa0, 0x56, 0x8f, 0x39, 0x98, 0x0e, 0x0b, 0xf3, 0x3f, 0xf3, 0xce, 0x1b, - 0xbd, 0xf4, 0xb1, 0xbe, 0xaa, 0x16, 0xf7, 0x08, 0xbc, 0xfa, 0x79, 0xa9, 0x6c, 0x0a, 0x68, 0x6e, - 0x13, 0x64, 0xd5, 0xe8, 0xd7, 0x2c, 0x98, 0x10, 0xbf, 0x31, 0x79, 0xa7, 0x4d, 0xe2, 0x44, 0x6c, - 0x6a, 0x9f, 0x3a, 0x4c, 0x6b, 0x04, 0x0b, 0xde, 0xa8, 0x8f, 0x4a, 0x89, 0x64, 0x22, 0x73, 0xdb, - 0x96, 0x69, 0x0f, 0xfa, 0xbe, 0x05, 0xa7, 0x9a, 0xce, 0x03, 0x5e, 0x23, 0x87, 0x61, 0x27, 0xf1, - 0x42, 0xe1, 0x81, 0xb8, 0xd2, 0xef, 0x3c, 0xe9, 0x60, 0xc4, 0x9b, 0x2b, 0x9d, 0x8b, 0x4e, 0x75, - 0x23, 0xc9, 0x6d, 0x74, 0xd7, 0x16, 0xce, 0x6c, 0xc0, 0x88, 0x9c, 0x98, 0x5d, 0xd4, 0xfc, 0xaa, - 0xbe, 0x77, 0xe7, 0x1c, 0xaa, 0xe7, 0xa4, 0x69, 0x6c, 0xee, 0xb5, 0xb6, 0x13, 0x24, 0x5e, 0xb2, - 0xa3, 0x1d, 0x0b, 0x58, 0x3d, 0x62, 0x2a, 0x1e, 0x69, 0x3d, 0x6f, 0xc3, 0x98, 0x3e, 0xef, 0x8e, - 0xb4, 0xae, 0x77, 0xe0, 0x64, 0x97, 0x59, 0x75, 0xa4, 0x55, 0xde, 0x87, 0x47, 0x7b, 0xce, 0x8f, - 0xa3, 0xac, 0xd8, 0xfe, 0x6d, 0x4b, 0x17, 0x9d, 0xc7, 0x60, 0x74, 0xb9, 0x61, 0x1a, 0x5d, 0xce, - 0x17, 0x5d, 0x43, 0x3d, 0x2c, 0x2f, 0x1b, 0x7a, 0xf3, 0xe9, 0x96, 0x80, 0xd6, 0x60, 0xc8, 0xa7, - 0x10, 0x79, 0xe7, 0x75, 0xa1, 0x9f, 0x55, 0x9a, 0x2a, 0x25, 0x0c, 0x1e, 0x63, 0xc1, 0xcb, 0xfe, - 0xbe, 0x05, 0x03, 0x3f, 0xc5, 0xa8, 0x9e, 0x0e, 0xd6, 0x22, 0x38, 0x7d, 0x0e, 0x3b, 0xf7, 0x97, - 0x1f, 0x24, 0x24, 0x88, 0x99, 0x0e, 0xda, 0xeb, 0xd6, 0x7e, 0x94, 0x56, 0x25, 0x1d, 0x25, 0x5e, - 0x81, 0x71, 0xdf, 0x59, 0x27, 0xbe, 0x34, 0x18, 0x67, 0x4f, 0x6c, 0xd7, 0x75, 0x24, 0x36, 0x69, - 0x69, 0xe1, 0x0d, 0xdd, 0x9e, 0x2e, 0x94, 0x24, 0x55, 0xd8, 0x30, 0xb6, 0x63, 0x93, 0x96, 0x1e, - 0x19, 0xee, 0x3b, 0x49, 0x63, 0x4b, 0x9c, 0xe6, 0x54, 0x73, 0xef, 0x52, 0x20, 0xe6, 0x38, 0xb4, - 0x00, 0x93, 0x72, 0xc6, 0xde, 0xa1, 0xc7, 0xfc, 0x30, 0x10, 0x7a, 0xa6, 0x8a, 0x0c, 0xc6, 0x26, - 0x1a, 0x67, 0xe9, 0xd1, 0xc7, 0x61, 0x82, 0x0e, 0x4e, 0xd8, 0x4e, 0xa4, 0x1b, 0xc8, 0x20, 0x73, - 0x03, 0x61, 0x5e, 0xc4, 0x6b, 0x06, 0x06, 0x67, 0x28, 0xed, 0x37, 0xe1, 0xe4, 0xf5, 0xd0, 0x71, - 0x17, 0x1d, 0xdf, 0x09, 0x1a, 0x24, 0x5a, 0x0d, 0x36, 0x73, 0xaf, 0xaf, 0xf5, 0x2b, 0xe6, 0x52, - 0xde, 0x15, 0xb3, 0x1d, 0x01, 0xd2, 0x2b, 0x10, 0x0e, 0x4c, 0x6f, 0xc0, 0xb0, 0xc7, 0xab, 0x12, - 0xd3, 0xf6, 0x62, 0x9e, 0x3d, 0xaa, 0xa3, 0x8d, 0x9a, 0x43, 0x0e, 0x07, 0x60, 0xc9, 0x92, 0x1e, - 0x41, 0xba, 0x19, 0xb0, 0xf2, 0x4f, 0x79, 0xf6, 0x5f, 0xb5, 0x60, 0xf2, 0x66, 0x26, 0xec, 0xf4, - 0x69, 0x18, 0xe2, 0xc9, 0x0b, 0xb2, 0x26, 0x96, 0x3a, 0x83, 0x62, 0x81, 0x7d, 0xe8, 0x27, 0xfc, - 0x5f, 0x2d, 0x41, 0x85, 0xb9, 0xc2, 0xb6, 0xe8, 0x71, 0xe2, 0xe8, 0xd5, 0xd4, 0x1b, 0x86, 0x9a, - 0x9a, 0x73, 0xca, 0x54, 0x0d, 0xeb, 0xa5, 0xa5, 0xa2, 0xdb, 0x2a, 0x1c, 0xb3, 0xd0, 0x01, 0x33, - 0x65, 0xc8, 0x43, 0xf6, 0x26, 0xcc, 0xe8, 0x4d, 0x19, 0xaa, 0xc9, 0x2e, 0x7d, 0x15, 0xed, 0xfb, - 0xee, 0xd2, 0x57, 0xb5, 0xac, 0x87, 0x70, 0xaa, 0x69, 0x8d, 0x67, 0xe2, 0xfb, 0x93, 0xcc, 0xc1, - 0xd1, 0xf1, 0xbd, 0x2f, 0x10, 0x15, 0xd5, 0x3c, 0x2b, 0x1c, 0x16, 0x05, 0x74, 0x9f, 0xc9, 0x19, - 0xf1, 0x8f, 0x07, 0xad, 0xa7, 0x45, 0xec, 0xab, 0x30, 0x99, 0x19, 0x3a, 0xf4, 0x12, 0x0c, 0xb6, - 0xb6, 0x9c, 0x98, 0x64, 0xfc, 0x58, 0x06, 0x6b, 0x14, 0xb8, 0xbf, 0x3b, 0x3b, 0xa1, 0x0a, 0x30, - 0x08, 0xe6, 0xd4, 0xf6, 0x57, 0x4a, 0x30, 0x70, 0x33, 0x74, 0x8f, 0x63, 0xaa, 0x5d, 0x35, 0xa6, - 0xda, 0xd3, 0xf9, 0x29, 0x2f, 0x7a, 0xce, 0xb2, 0x5a, 0x66, 0x96, 0x9d, 0x2f, 0xc0, 0xeb, 0xe0, - 0x09, 0xd6, 0x84, 0x51, 0x96, 0x52, 0x43, 0x38, 0xf2, 0xbc, 0x60, 0x9c, 0xac, 0x66, 0x33, 0x27, - 0xab, 0x49, 0x8d, 0x54, 0x3b, 0x5f, 0x3d, 0x03, 0xc3, 0xc2, 0x71, 0x24, 0xeb, 0xde, 0x29, 0x68, - 0xb1, 0xc4, 0xdb, 0xff, 0xa2, 0x0c, 0x46, 0x0a, 0x0f, 0xf4, 0x7b, 0x16, 0xcc, 0x45, 0x3c, 0x54, - 0xc6, 0xad, 0xb6, 0x23, 0x2f, 0xd8, 0xac, 0x37, 0xb6, 0x88, 0xdb, 0xf6, 0xbd, 0x60, 0x73, 0x75, - 0x33, 0x08, 0x15, 0x78, 0xf9, 0x01, 0x69, 0xb4, 0x99, 0x9d, 0xb6, 0x70, 0xe6, 0x10, 0x75, 0x69, - 0x7a, 0x69, 0x6f, 0x77, 0x76, 0x0e, 0xf7, 0x55, 0x0b, 0xee, 0xb3, 0x55, 0xe8, 0x8f, 0x2d, 0x98, - 0xe7, 0x49, 0x2c, 0x8a, 0xf7, 0xa4, 0xd0, 0x89, 0xb4, 0x26, 0x99, 0xa6, 0xec, 0xd6, 0x48, 0xd4, - 0x5c, 0x7c, 0x59, 0x0c, 0xf2, 0x7c, 0xad, 0xbf, 0x5a, 0x71, 0xbf, 0xcd, 0xb4, 0xff, 0x4d, 0x19, - 0xc6, 0xe9, 0x78, 0xa6, 0x81, 0xeb, 0x2f, 0x19, 0xd3, 0xe4, 0x89, 0xcc, 0x34, 0x39, 0x61, 0x10, - 0x3f, 0x9c, 0x98, 0xf5, 0x18, 0x4e, 0xf8, 0x4e, 0x9c, 0x5c, 0x25, 0x4e, 0x94, 0xac, 0x13, 0x87, - 0xdd, 0x4d, 0x66, 0xfd, 0x1e, 0x0a, 0x5c, 0x77, 0x2a, 0x67, 0xa4, 0xeb, 0x59, 0x66, 0xb8, 0x93, - 0x3f, 0xda, 0x06, 0xc4, 0xee, 0x41, 0x23, 0x27, 0x88, 0x79, 0x5f, 0x3c, 0x61, 0xd7, 0xed, 0xaf, - 0xd6, 0x19, 0x51, 0x2b, 0xba, 0xde, 0xc1, 0x0d, 0x77, 0xa9, 0x41, 0xbb, 0xe9, 0x1e, 0x2c, 0x7a, - 0xd3, 0x3d, 0x94, 0xe3, 0x57, 0xfd, 0x55, 0x0b, 0x4e, 0xd2, 0xcf, 0x62, 0xfa, 0xe0, 0xc6, 0x28, - 0x84, 0x49, 0x3a, 0xed, 0x7c, 0x92, 0x48, 0x98, 0x58, 0x5f, 0x39, 0x9a, 0xb5, 0xc9, 0x27, 0x55, - 0xdf, 0xae, 0x99, 0xcc, 0x70, 0x96, 0xbb, 0xfd, 0x6d, 0x0b, 0x98, 0xc7, 0xdd, 0x31, 0x6c, 0x66, - 0x57, 0xcc, 0xcd, 0xcc, 0xce, 0x97, 0x18, 0x3d, 0xf6, 0xb1, 0x17, 0x61, 0x8a, 0x62, 0x6b, 0x51, - 0xf8, 0x60, 0x47, 0x2a, 0xda, 0xf9, 0x06, 0xde, 0xaf, 0x96, 0xf8, 0xb2, 0x51, 0x31, 0x7f, 0xe8, - 0x97, 0x2c, 0x18, 0x69, 0x38, 0x2d, 0xa7, 0xc1, 0x13, 0x20, 0x15, 0xb0, 0xce, 0x18, 0xe5, 0xe7, - 0x96, 0x44, 0x59, 0x6e, 0x59, 0xf8, 0x88, 0xec, 0xba, 0x04, 0xe7, 0x5a, 0x13, 0x54, 0xe5, 0x33, - 0xf7, 0x60, 0xdc, 0x60, 0x76, 0xa4, 0xc7, 0xd0, 0x5f, 0xb2, 0xb8, 0xd0, 0x57, 0x47, 0x85, 0xfb, - 0x70, 0x22, 0xd0, 0xfe, 0x53, 0x71, 0x26, 0x35, 0xe3, 0xb9, 0xe2, 0x62, 0x9d, 0x49, 0x41, 0xcd, - 0xbb, 0x30, 0xc3, 0x10, 0x77, 0xd6, 0x61, 0xff, 0xba, 0x05, 0x8f, 0xe8, 0x84, 0x5a, 0x90, 0x66, - 0x9e, 0xdd, 0xb8, 0x0a, 0x23, 0x61, 0x8b, 0x44, 0x4e, 0x7a, 0x2c, 0x3a, 0x2f, 0xc7, 0xff, 0x96, - 0x80, 0xef, 0xef, 0xce, 0x9e, 0xd2, 0xb9, 0x4b, 0x38, 0x56, 0x25, 0x91, 0x0d, 0x43, 0x6c, 0x5c, - 0x62, 0x11, 0x5e, 0xcb, 0x12, 0x02, 0xb1, 0x4b, 0x95, 0x18, 0x0b, 0x8c, 0xfd, 0x37, 0x2c, 0x3e, - 0xdd, 0xf4, 0xa6, 0xa3, 0x2f, 0xc2, 0x54, 0x93, 0x9e, 0xa0, 0x96, 0x1f, 0xb4, 0xe8, 0x46, 0xca, - 0xae, 0x93, 0xad, 0x22, 0xdb, 0x47, 0x8f, 0xee, 0x2e, 0x4e, 0x8b, 0xd6, 0x4f, 0xdd, 0xc8, 0xb0, - 0xc5, 0x1d, 0x15, 0xd9, 0x7f, 0xbf, 0xc4, 0xd7, 0x2c, 0xd3, 0xe1, 0x9e, 0x81, 0xe1, 0x56, 0xe8, - 0x2e, 0xad, 0x56, 0xb1, 0x18, 0x2b, 0x25, 0x74, 0x6a, 0x1c, 0x8c, 0x25, 0x1e, 0x5d, 0x02, 0x20, - 0x0f, 0x12, 0x12, 0x05, 0x8e, 0xaf, 0xae, 0x81, 0x95, 0xaa, 0xb4, 0xac, 0x30, 0x58, 0xa3, 0xa2, - 0x65, 0x5a, 0x51, 0xb8, 0xed, 0xb9, 0x2c, 0xba, 0xa0, 0x6c, 0x96, 0xa9, 0x29, 0x0c, 0xd6, 0xa8, - 0xe8, 0xb9, 0xb5, 0x1d, 0xc4, 0x7c, 0x1b, 0x73, 0xd6, 0x45, 0xfe, 0x9a, 0x91, 0xf4, 0xdc, 0x7a, - 0x5b, 0x47, 0x62, 0x93, 0x16, 0x5d, 0x83, 0xa1, 0xc4, 0x61, 0x97, 0x9b, 0x83, 0x45, 0x3c, 0x45, - 0xd6, 0x28, 0xad, 0x9e, 0x30, 0x88, 0x16, 0xc5, 0x82, 0x85, 0xfd, 0x9f, 0x2a, 0x00, 0xa9, 0xd6, - 0x85, 0xbe, 0xd2, 0xb9, 0xe0, 0x3f, 0x5a, 0x54, 0x65, 0x7b, 0x78, 0xab, 0x1d, 0x7d, 0xdd, 0x82, - 0x51, 0xc7, 0xf7, 0xc3, 0x86, 0x93, 0xb0, 0xe1, 0x29, 0x15, 0x15, 0x3d, 0xa2, 0x25, 0x0b, 0x69, - 0x59, 0xde, 0x98, 0x17, 0xe4, 0x85, 0xa3, 0x86, 0xc9, 0x6d, 0x8f, 0xde, 0x04, 0xf4, 0x11, 0xa9, - 0xb5, 0xf3, 0x2f, 0x3c, 0x93, 0xd5, 0xda, 0x2b, 0x4c, 0xe0, 0x6a, 0x0a, 0x3b, 0x7a, 0xd3, 0xc8, - 0xf7, 0x32, 0x50, 0x24, 0x44, 0xd4, 0xd0, 0x43, 0xf2, 0x52, 0xbd, 0xa0, 0xcf, 0xea, 0x2e, 0xd5, - 0x83, 0x45, 0x62, 0xb0, 0x35, 0x75, 0x38, 0xc7, 0x9d, 0x3a, 0x81, 0x49, 0xd7, 0xdc, 0x79, 0x85, - 0x5b, 0xd8, 0xc5, 0xfc, 0x1a, 0x32, 0x5b, 0x76, 0xba, 0xd7, 0x66, 0x10, 0x38, 0x5b, 0x05, 0xfa, - 0x2c, 0x77, 0x78, 0x5f, 0x0d, 0x36, 0x42, 0xe1, 0x1a, 0x76, 0xa1, 0xc0, 0x37, 0xdf, 0x89, 0x13, - 0xd2, 0xa4, 0x65, 0xd2, 0xcd, 0xf5, 0xa6, 0xe0, 0x82, 0x15, 0x3f, 0xb4, 0x06, 0x43, 0x2c, 0x22, - 0x28, 0x9e, 0x1e, 0x29, 0x62, 0x89, 0x33, 0x03, 0x61, 0xd3, 0xf5, 0xc3, 0xfe, 0xc6, 0x58, 0xf0, - 0x42, 0x57, 0x65, 0x28, 0x7c, 0xbc, 0x1a, 0xdc, 0x8e, 0x09, 0x0b, 0x85, 0xaf, 0x2c, 0x7e, 0x28, - 0x8d, 0x6d, 0xe7, 0xf0, 0xae, 0x19, 0xef, 0x8c, 0x92, 0x54, 0xb1, 0x11, 0xff, 0x65, 0x22, 0xbd, - 0x69, 0x28, 0xd2, 0x50, 0x33, 0xed, 0x5e, 0x3a, 0xd8, 0x77, 0x4c, 0x66, 0x38, 0xcb, 0xfd, 0x58, - 0xb7, 0xd4, 0x99, 0x00, 0xa6, 0xb2, 0x8b, 0xf2, 0x48, 0xb7, 0xf0, 0x9f, 0x0c, 0xc0, 0x84, 0x39, - 0x39, 0xd0, 0x3c, 0x54, 0x04, 0x13, 0x95, 0x58, 0x4b, 0xad, 0x81, 0x1b, 0x12, 0x81, 0x53, 0x1a, - 0x96, 0x62, 0x8c, 0x15, 0xd7, 0x9c, 0x82, 0xd2, 0x14, 0x63, 0x0a, 0x83, 0x35, 0x2a, 0xaa, 0x09, - 0xaf, 0x87, 0x61, 0xa2, 0x76, 0x02, 0x35, 0x6f, 0x16, 0x19, 0x14, 0x0b, 0x2c, 0xdd, 0x01, 0xee, - 0xd1, 0x8f, 0xe9, 0x9b, 0x56, 0x45, 0xb5, 0x03, 0x5c, 0xd3, 0x91, 0xd8, 0xa4, 0xa5, 0x3b, 0x5a, - 0x18, 0xb3, 0x89, 0x28, 0xf4, 0xed, 0xd4, 0xc9, 0xaa, 0xce, 0xa3, 0xe4, 0x24, 0x1e, 0x7d, 0x06, - 0x1e, 0x51, 0x41, 0x6d, 0x98, 0x5b, 0x69, 0x65, 0x8d, 0x43, 0xc6, 0x91, 0xf9, 0x91, 0xa5, 0xee, - 0x64, 0xb8, 0x57, 0x79, 0xf4, 0x2a, 0x4c, 0x08, 0x5d, 0x59, 0x72, 0x1c, 0x36, 0x6f, 0xe0, 0xaf, - 0x19, 0x58, 0x9c, 0xa1, 0x46, 0x55, 0x98, 0xa2, 0x10, 0xa6, 0xa4, 0x4a, 0x0e, 0x3c, 0x38, 0x4f, - 0x6d, 0xf5, 0xd7, 0x32, 0x78, 0xdc, 0x51, 0x02, 0x2d, 0xc0, 0x24, 0x57, 0x56, 0xe8, 0xc1, 0x90, - 0x7d, 0x07, 0xe1, 0xcf, 0xa9, 0x16, 0xc2, 0x2d, 0x13, 0x8d, 0xb3, 0xf4, 0xe8, 0x32, 0x8c, 0x39, - 0x51, 0x63, 0xcb, 0x4b, 0x48, 0x23, 0x69, 0x47, 0x3c, 0xd1, 0x84, 0xe6, 0xc2, 0xb0, 0xa0, 0xe1, - 0xb0, 0x41, 0x69, 0x7f, 0x01, 0x4e, 0x76, 0x71, 0x1e, 0xa7, 0x13, 0xc7, 0x69, 0x79, 0xb2, 0x4f, - 0x19, 0x77, 0xa9, 0x85, 0xda, 0xaa, 0xec, 0x8d, 0x46, 0x45, 0x67, 0x27, 0x33, 0x4f, 0x6b, 0x79, - 0x2f, 0xd5, 0xec, 0x5c, 0x91, 0x08, 0x9c, 0xd2, 0xd8, 0x7f, 0x51, 0x01, 0xcd, 0x7a, 0x53, 0xc0, - 0x45, 0xe6, 0x32, 0x8c, 0xc9, 0x54, 0xae, 0x5a, 0x0a, 0x45, 0xd5, 0xcd, 0x2b, 0x1a, 0x0e, 0x1b, - 0x94, 0xb4, 0x6d, 0x81, 0xb4, 0x49, 0x65, 0x9d, 0xb3, 0x94, 0xb1, 0x0a, 0xa7, 0x34, 0xe8, 0x02, - 0x8c, 0xc4, 0xc4, 0xdf, 0xb8, 0xee, 0x05, 0xf7, 0xc4, 0xc4, 0x56, 0x92, 0xb9, 0x2e, 0xe0, 0x58, - 0x51, 0xa0, 0x45, 0x28, 0xb7, 0x3d, 0x57, 0x4c, 0x65, 0xa9, 0x36, 0x94, 0x6f, 0xaf, 0x56, 0xf7, - 0x77, 0x67, 0x9f, 0xe8, 0x95, 0xd7, 0x96, 0x9e, 0xcf, 0xe3, 0x39, 0xba, 0xfc, 0x68, 0xe1, 0x6e, - 0x76, 0xfa, 0xa1, 0x3e, 0xed, 0xf4, 0x97, 0x00, 0x44, 0xaf, 0xe5, 0x5c, 0x2e, 0xa7, 0x5f, 0xed, - 0x8a, 0xc2, 0x60, 0x8d, 0x8a, 0x9e, 0xf2, 0x1b, 0x11, 0x71, 0xe4, 0x41, 0x98, 0x3b, 0x35, 0x8f, - 0x1c, 0xfe, 0x94, 0xbf, 0x94, 0x65, 0x86, 0x3b, 0xf9, 0xa3, 0x10, 0x4e, 0xb8, 0x74, 0x21, 0x19, - 0x95, 0x56, 0xfa, 0xf7, 0xa4, 0xa6, 0x15, 0x56, 0xb3, 0x8c, 0x70, 0x27, 0x6f, 0xf4, 0x79, 0x98, - 0x91, 0xc0, 0xce, 0xb0, 0x55, 0xb6, 0x5c, 0xca, 0x8b, 0x67, 0xf7, 0x76, 0x67, 0x67, 0xaa, 0x3d, - 0xa9, 0xf0, 0x01, 0x1c, 0xd0, 0x1b, 0x30, 0xc4, 0xee, 0x75, 0xe2, 0xe9, 0x51, 0xb6, 0xe3, 0xbd, - 0x58, 0xc4, 0x1f, 0x9f, 0xce, 0xfa, 0x39, 0x76, 0x3b, 0x24, 0x3c, 0x4d, 0xd3, 0xcb, 0x32, 0x06, - 0xc4, 0x82, 0x27, 0x6a, 0xc1, 0xa8, 0x13, 0x04, 0x61, 0xe2, 0x70, 0x45, 0x6c, 0xac, 0x88, 0x2e, - 0xa9, 0x55, 0xb1, 0x90, 0x96, 0xe5, 0xf5, 0x28, 0xe7, 0x35, 0x0d, 0x83, 0xf5, 0x2a, 0xd0, 0x7d, - 0x98, 0x0c, 0xef, 0x53, 0x81, 0x29, 0xaf, 0x36, 0xe2, 0xe9, 0x71, 0xb3, 0x63, 0x39, 0x86, 0x5a, - 0xa3, 0xb0, 0x26, 0xc9, 0x4c, 0xa6, 0x38, 0x5b, 0x0b, 0x9a, 0x33, 0xcc, 0xd5, 0x13, 0xa9, 0x3f, - 0x75, 0x6a, 0xae, 0xd6, 0xad, 0xd3, 0x2c, 0x34, 0x9a, 0xfb, 0x50, 0x32, 0x89, 0x30, 0x99, 0x09, - 0x8d, 0x4e, 0x51, 0x58, 0xa7, 0x9b, 0xf9, 0x18, 0x8c, 0x6a, 0x03, 0xdf, 0x8f, 0xe3, 0xee, 0xcc, - 0xab, 0x30, 0x95, 0x1d, 0xd0, 0xbe, 0x1c, 0x7f, 0xff, 0x47, 0x09, 0x26, 0xbb, 0xdc, 0x1b, 0xdd, - 0xf3, 0x98, 0xf3, 0xb9, 0x21, 0xfa, 0xae, 0x79, 0x81, 0x8b, 0x19, 0xc6, 0x14, 0x60, 0xa5, 0x02, - 0x02, 0x4c, 0x4a, 0xd3, 0x72, 0x4f, 0x69, 0x2a, 0x84, 0xd6, 0xc0, 0x7b, 0x11, 0x5a, 0xe6, 0x3e, - 0x31, 0x58, 0x68, 0x9f, 0x78, 0x08, 0x82, 0xce, 0xd8, 0x6a, 0x86, 0x0b, 0x6c, 0x35, 0xdf, 0x2a, - 0xc1, 0x54, 0xea, 0xe4, 0x2c, 0xf2, 0x3b, 0x1f, 0xfd, 0x35, 0xc4, 0x9a, 0x71, 0x0d, 0x91, 0x97, - 0xbe, 0x39, 0xd3, 0xbe, 0x9e, 0x57, 0x12, 0x6f, 0x64, 0xae, 0x24, 0x5e, 0xec, 0x93, 0xef, 0xc1, - 0xd7, 0x13, 0xdf, 0x2b, 0xc1, 0xe9, 0x6c, 0x91, 0x25, 0xdf, 0xf1, 0x9a, 0xc7, 0x30, 0x5e, 0x9f, - 0x31, 0xc6, 0xeb, 0xe5, 0xfe, 0xfa, 0xc5, 0x1a, 0xd9, 0x73, 0xd0, 0x9c, 0xcc, 0xa0, 0x7d, 0xec, - 0x30, 0xcc, 0x0f, 0x1e, 0xb9, 0x3f, 0xb4, 0xe0, 0xd1, 0xae, 0xe5, 0x8e, 0xc1, 0xf0, 0xfa, 0xba, - 0x69, 0x78, 0x7d, 0xe1, 0x10, 0xbd, 0xeb, 0x61, 0x89, 0xfd, 0x8d, 0x72, 0x8f, 0x5e, 0x31, 0xd3, - 0xd4, 0x2d, 0x18, 0x75, 0x1a, 0x0d, 0x12, 0xc7, 0x37, 0x42, 0x57, 0x25, 0x59, 0x7a, 0x9e, 0xed, - 0x2d, 0x29, 0x78, 0x7f, 0x77, 0x76, 0x26, 0xcb, 0x22, 0x45, 0x63, 0x9d, 0x83, 0x99, 0xfe, 0xad, - 0x74, 0x44, 0xe9, 0xdf, 0x2e, 0x01, 0x6c, 0xab, 0x53, 0x6c, 0xd6, 0xe2, 0xa5, 0x9d, 0x6f, 0x35, - 0x2a, 0xf4, 0xff, 0x33, 0x8d, 0x90, 0x3b, 0x69, 0x0c, 0x98, 0xf1, 0x92, 0x39, 0xdf, 0x4f, 0x77, - 0xf8, 0xe0, 0x61, 0x99, 0xca, 0x3a, 0xa8, 0x58, 0xa2, 0x4f, 0xc1, 0x54, 0xcc, 0x83, 0xff, 0x97, - 0x7c, 0x27, 0x66, 0xde, 0xfd, 0x42, 0x9e, 0xb2, 0x08, 0xcb, 0x7a, 0x06, 0x87, 0x3b, 0xa8, 0xed, - 0xef, 0x96, 0xe1, 0x83, 0x07, 0x4c, 0x5b, 0xb4, 0x60, 0xde, 0xda, 0x3e, 0x97, 0xb5, 0xff, 0xcc, - 0x74, 0x2d, 0x6c, 0x18, 0x84, 0x32, 0x5f, 0xbb, 0xf4, 0x9e, 0xbf, 0xf6, 0x37, 0x74, 0x6b, 0x1d, - 0xf7, 0xdb, 0xbc, 0x72, 0xe8, 0x85, 0xf9, 0xb3, 0x6a, 0xac, 0xff, 0xb2, 0x05, 0x4f, 0x74, 0xed, - 0x96, 0xe1, 0x25, 0x32, 0x0f, 0x95, 0x06, 0x05, 0x6a, 0xb1, 0x38, 0x69, 0x10, 0x9c, 0x44, 0xe0, - 0x94, 0xc6, 0x70, 0x06, 0x29, 0xe5, 0x3a, 0x83, 0xfc, 0xbe, 0x05, 0xa7, 0xb2, 0x8d, 0x38, 0x06, - 0xb9, 0x55, 0x37, 0xe5, 0xd6, 0x5c, 0x7f, 0x1f, 0xbf, 0x87, 0xc8, 0xfa, 0xb5, 0x71, 0x38, 0xd3, - 0xb1, 0xeb, 0xf1, 0x51, 0xfc, 0x05, 0x0b, 0x4e, 0x6c, 0x32, 0xed, 0x5d, 0x0b, 0x78, 0x12, 0xfd, - 0xca, 0x89, 0x12, 0x3b, 0x30, 0x4e, 0x8a, 0x9f, 0x45, 0x3a, 0x48, 0x70, 0x67, 0x65, 0xe8, 0x6b, - 0x16, 0x9c, 0x72, 0xee, 0xc7, 0x1d, 0xaf, 0x8f, 0x88, 0x89, 0xf4, 0x6a, 0x8e, 0xb1, 0x2c, 0xe7, - 0xdd, 0x92, 0xc5, 0xe9, 0xbd, 0xdd, 0xd9, 0x53, 0xdd, 0xa8, 0x70, 0xd7, 0x5a, 0xe9, 0xf7, 0xdd, - 0x12, 0xe1, 0x14, 0xc5, 0x42, 0xf7, 0xba, 0x05, 0x5f, 0x70, 0xb1, 0x26, 0x31, 0x58, 0x71, 0x44, - 0x6f, 0x41, 0x65, 0x53, 0xc6, 0x38, 0x65, 0xc5, 0x66, 0x8f, 0x61, 0xee, 0x16, 0x12, 0xc5, 0x7d, - 0xf7, 0x15, 0x0a, 0xa7, 0x4c, 0xd1, 0x55, 0x28, 0x07, 0x1b, 0xb1, 0x88, 0x26, 0xce, 0xf3, 0x01, - 0x32, 0x3d, 0xaf, 0x78, 0x00, 0xe6, 0xcd, 0x95, 0x3a, 0xa6, 0x2c, 0x28, 0xa7, 0x68, 0xdd, 0x15, - 0x56, 0xe2, 0x1c, 0x4e, 0x78, 0xb1, 0xda, 0xc9, 0x09, 0x2f, 0x56, 0x31, 0x65, 0x81, 0x6a, 0x30, - 0xc8, 0x82, 0x35, 0x84, 0x09, 0x38, 0x27, 0xe4, 0xbc, 0x23, 0x24, 0x85, 0x67, 0x29, 0x64, 0x60, - 0xcc, 0x19, 0xa1, 0x35, 0x18, 0x6a, 0xb0, 0x44, 0xfb, 0xe2, 0x6c, 0x9e, 0x97, 0x8c, 0xa1, 0x23, - 0x29, 0x3f, 0xbf, 0xf7, 0xe2, 0x70, 0x2c, 0x78, 0x31, 0xae, 0xa4, 0xb5, 0xb5, 0x11, 0x8b, 0xc3, - 0x77, 0x1e, 0xd7, 0x8e, 0x27, 0x13, 0x04, 0x57, 0x06, 0xc7, 0x82, 0x17, 0xaa, 0x42, 0x69, 0xa3, - 0x21, 0x92, 0x9d, 0xe6, 0x98, 0x7e, 0xcd, 0x68, 0xda, 0xc5, 0xa1, 0xbd, 0xdd, 0xd9, 0xd2, 0xca, - 0x12, 0x2e, 0x6d, 0x34, 0xd0, 0xeb, 0x30, 0xbc, 0xc1, 0xe3, 0x23, 0x45, 0x62, 0xd3, 0x8b, 0x79, - 0x41, 0x9c, 0x1d, 0xc1, 0x94, 0x3c, 0x3e, 0x43, 0x20, 0xb0, 0x64, 0xc7, 0x72, 0xbe, 0xa9, 0x88, - 0x4f, 0x91, 0xd9, 0x74, 0xae, 0xbf, 0x08, 0x51, 0x71, 0x26, 0x55, 0x50, 0xac, 0x71, 0xa4, 0x73, - 0xde, 0x91, 0x6f, 0x86, 0xb0, 0xac, 0xa6, 0xb9, 0x73, 0xbe, 0xeb, 0x13, 0x23, 0x7c, 0xce, 0x2b, - 0x14, 0x4e, 0x99, 0xa2, 0x36, 0x8c, 0x6f, 0xc7, 0xad, 0x2d, 0x22, 0x97, 0x3e, 0x4b, 0x75, 0x3a, - 0x7a, 0xe9, 0x13, 0x39, 0xf9, 0x6b, 0x45, 0x11, 0x2f, 0x4a, 0xda, 0x8e, 0xdf, 0x21, 0xc1, 0x58, - 0x92, 0xad, 0x3b, 0x3a, 0x5b, 0x6c, 0xd6, 0x42, 0x3f, 0xc9, 0x3b, 0xed, 0x70, 0x7d, 0x27, 0x21, - 0x22, 0x15, 0x6a, 0xce, 0x27, 0x79, 0x8d, 0x13, 0x77, 0x7e, 0x12, 0x81, 0xc0, 0x92, 0x9d, 0x1a, - 0x32, 0x26, 0x8d, 0xa7, 0x0a, 0x0f, 0x59, 0x47, 0x1f, 0xd2, 0x21, 0x63, 0xd2, 0x37, 0x65, 0xca, - 0xa4, 0x6e, 0x6b, 0x2b, 0x4c, 0xc2, 0x20, 0x23, 0xfb, 0x4f, 0x14, 0x91, 0xba, 0xb5, 0x2e, 0x25, - 0x3b, 0xa5, 0x6e, 0x37, 0x2a, 0xdc, 0xb5, 0x56, 0xfb, 0xd7, 0x87, 0x3a, 0xb7, 0x5b, 0xa6, 0x50, - 0xff, 0xf5, 0xce, 0xfb, 0xcb, 0x4f, 0xf5, 0x7f, 0x6e, 0x7c, 0x88, 0x37, 0x99, 0x5f, 0xb3, 0xe0, - 0x4c, 0xab, 0xeb, 0x66, 0x2a, 0x36, 0xac, 0x7e, 0x8f, 0x9f, 0x7c, 0xc0, 0x54, 0x9e, 0xdf, 0xee, - 0x78, 0xdc, 0xa3, 0xce, 0xac, 0x0a, 0x5a, 0x7e, 0xcf, 0x2a, 0xe8, 0x5d, 0x18, 0x61, 0x3a, 0x53, - 0x9a, 0x21, 0xa4, 0xcf, 0x64, 0x1a, 0x6c, 0xeb, 0x5b, 0x12, 0x2c, 0xb0, 0x62, 0x46, 0x07, 0xee, - 0xf1, 0x6c, 0x27, 0x30, 0x61, 0x68, 0x91, 0x0b, 0x97, 0xeb, 0xf7, 0x2b, 0x62, 0x24, 0x1e, 0xaf, - 0x1d, 0x44, 0xbc, 0x9f, 0x47, 0x80, 0x0f, 0xae, 0x0c, 0x55, 0xbb, 0x1c, 0x30, 0x86, 0xcc, 0xcb, - 0x8a, 0xfc, 0x43, 0xc6, 0xf1, 0x2a, 0xc6, 0xff, 0xc0, 0xea, 0xa2, 0xc7, 0xf1, 0xc3, 0xcc, 0x27, - 0xcc, 0xc3, 0xcc, 0xd3, 0xd9, 0xc3, 0x4c, 0x87, 0x09, 0xc3, 0x38, 0xc7, 0x14, 0xcf, 0x8e, 0x59, - 0x34, 0x05, 0x8a, 0xed, 0xc3, 0xb9, 0x3c, 0x21, 0xc1, 0x1c, 0x98, 0x5c, 0x75, 0x75, 0x97, 0x3a, - 0x30, 0xb9, 0xab, 0x55, 0xcc, 0x30, 0x45, 0xa3, 0xe8, 0xed, 0x5f, 0x2c, 0x41, 0xb9, 0x16, 0xba, - 0xc7, 0x60, 0x92, 0xb9, 0x62, 0x98, 0x64, 0x9e, 0xca, 0x7d, 0x79, 0xad, 0xa7, 0x01, 0xe6, 0x56, - 0xc6, 0x00, 0xf3, 0xe1, 0x7c, 0x56, 0x07, 0x9b, 0x5b, 0xbe, 0x5f, 0x06, 0xfd, 0xed, 0x38, 0xf4, - 0x1f, 0x0e, 0xe3, 0xd7, 0x5a, 0x2e, 0xf6, 0x9c, 0x9c, 0xa8, 0x83, 0xf9, 0x3f, 0xc9, 0x68, 0xb8, - 0x9f, 0x59, 0xf7, 0xd6, 0xbb, 0xc4, 0xdb, 0xdc, 0x4a, 0x88, 0x9b, 0xed, 0xd8, 0xf1, 0xb9, 0xb7, - 0xfe, 0xb9, 0x05, 0x93, 0x99, 0xda, 0x91, 0xdf, 0x2d, 0x8c, 0xe6, 0x90, 0x46, 0x96, 0x13, 0xb9, - 0x71, 0x37, 0x73, 0x00, 0xca, 0x56, 0x2e, 0x0d, 0x19, 0x4c, 0xa7, 0x53, 0xc6, 0xf4, 0x18, 0x6b, - 0x14, 0xe8, 0x25, 0x18, 0x4d, 0xc2, 0x56, 0xe8, 0x87, 0x9b, 0x3b, 0xd7, 0x88, 0xcc, 0xef, 0xa0, - 0xee, 0x19, 0xd6, 0x52, 0x14, 0xd6, 0xe9, 0xec, 0x1f, 0x94, 0x21, 0xfb, 0xf2, 0xe0, 0xff, 0x9b, - 0xa7, 0x3f, 0x3b, 0xf3, 0xf4, 0x8f, 0x2c, 0x98, 0xa2, 0xb5, 0x33, 0x87, 0x13, 0xe9, 0x86, 0xaa, - 0x52, 0xf5, 0x5b, 0x07, 0xa4, 0xea, 0x7f, 0x9a, 0x4a, 0x3b, 0x37, 0x6c, 0x27, 0xc2, 0xf4, 0xa2, - 0x09, 0x31, 0x0a, 0xc5, 0x02, 0x2b, 0xe8, 0x48, 0x14, 0x89, 0x78, 0x1d, 0x9d, 0x8e, 0x44, 0x11, - 0x16, 0x58, 0x99, 0xc9, 0x7f, 0xa0, 0x47, 0x26, 0x7f, 0x96, 0x21, 0x49, 0x38, 0x39, 0x08, 0xb5, - 0x42, 0xcb, 0x90, 0x24, 0xbd, 0x1f, 0x52, 0x1a, 0xfb, 0x3b, 0x65, 0x18, 0xab, 0x85, 0x6e, 0xea, - 0x5f, 0xfe, 0xa2, 0xe1, 0x5f, 0x7e, 0x2e, 0xe3, 0x5f, 0x3e, 0xa5, 0xd3, 0x3e, 0x1c, 0xf7, 0x72, - 0x91, 0x49, 0x8b, 0xbd, 0x35, 0x71, 0x48, 0xd7, 0x72, 0x23, 0x93, 0x96, 0x62, 0x84, 0x4d, 0xbe, - 0x3f, 0x4f, 0x2e, 0xe5, 0xff, 0xcb, 0x82, 0x89, 0x5a, 0xe8, 0xd2, 0x09, 0xfa, 0xf3, 0x34, 0x1b, - 0xf5, 0xfc, 0x5b, 0x43, 0x07, 0xe4, 0xdf, 0xfa, 0x67, 0x16, 0x0c, 0xd7, 0x42, 0xf7, 0x18, 0xcc, - 0x92, 0x2b, 0xa6, 0x59, 0xf2, 0x89, 0x5c, 0xc9, 0xdb, 0xc3, 0x12, 0xf9, 0xdd, 0x32, 0x8c, 0xd3, - 0x16, 0x87, 0x9b, 0xf2, 0x7b, 0x19, 0x63, 0x63, 0x15, 0x18, 0x1b, 0xaa, 0x12, 0x86, 0xbe, 0x1f, - 0xde, 0xcf, 0x7e, 0xbb, 0x15, 0x06, 0xc5, 0x02, 0x8b, 0x2e, 0xc0, 0x48, 0x2b, 0x22, 0xdb, 0x5e, - 0xd8, 0x8e, 0xb3, 0xb1, 0x7f, 0x35, 0x01, 0xc7, 0x8a, 0x02, 0xbd, 0x08, 0x63, 0xb1, 0x17, 0x34, - 0x88, 0x74, 0x81, 0x18, 0x60, 0x2e, 0x10, 0x3c, 0xd5, 0xa1, 0x06, 0xc7, 0x06, 0x15, 0xba, 0x0b, - 0x15, 0xf6, 0x9f, 0xad, 0xa0, 0xfe, 0x53, 0xf1, 0xf3, 0xfc, 0x5e, 0x92, 0x01, 0x4e, 0x79, 0xa1, - 0x4b, 0x00, 0x89, 0x74, 0xd6, 0x88, 0x45, 0x96, 0x12, 0xa5, 0x97, 0x2a, 0x37, 0x8e, 0x18, 0x6b, - 0x54, 0xe8, 0x39, 0xa8, 0x24, 0x8e, 0xe7, 0x5f, 0xf7, 0x02, 0x12, 0x0b, 0x67, 0x17, 0x91, 0xb6, - 0x58, 0x00, 0x71, 0x8a, 0xa7, 0xfb, 0x3d, 0x8b, 0x3c, 0xe6, 0xcf, 0x7c, 0x8c, 0x30, 0x6a, 0xb6, - 0xdf, 0x5f, 0x57, 0x50, 0xac, 0x51, 0xd8, 0x97, 0xe1, 0x74, 0x2d, 0x74, 0x6b, 0x61, 0x94, 0xac, - 0x84, 0xd1, 0x7d, 0x27, 0x72, 0xe5, 0xf7, 0x9b, 0x95, 0xd9, 0x72, 0xe9, 0x9e, 0x3c, 0xc8, 0x2d, - 0x75, 0x46, 0xf6, 0xdb, 0x17, 0xd8, 0x8e, 0xdf, 0x67, 0xe0, 0xc2, 0x8f, 0x4b, 0x80, 0x6a, 0xcc, - 0x9d, 0xc4, 0x78, 0x15, 0x66, 0x0b, 0x26, 0x62, 0x72, 0xdd, 0x0b, 0xda, 0x0f, 0x04, 0xab, 0x62, - 0x91, 0x22, 0xf5, 0x65, 0xbd, 0x0c, 0x0f, 0xd3, 0x35, 0x61, 0x38, 0xc3, 0x97, 0x0e, 0x66, 0xd4, - 0x0e, 0x16, 0xe2, 0xdb, 0x31, 0x89, 0xc4, 0x2b, 0x28, 0x6c, 0x30, 0xb1, 0x04, 0xe2, 0x14, 0x4f, - 0x27, 0x0f, 0xfb, 0x73, 0x33, 0x0c, 0x70, 0x18, 0x26, 0x72, 0xba, 0xb1, 0xac, 0xf8, 0x1a, 0x1c, - 0x1b, 0x54, 0x68, 0x05, 0x50, 0xdc, 0x6e, 0xb5, 0x7c, 0x76, 0x43, 0xe7, 0xf8, 0x57, 0xa2, 0xb0, - 0xdd, 0xe2, 0x5e, 0xc5, 0x22, 0xa1, 0x7c, 0xbd, 0x03, 0x8b, 0xbb, 0x94, 0xa0, 0xc2, 0x62, 0x23, - 0x66, 0xbf, 0x45, 0x18, 0x32, 0xb7, 0xf2, 0xd5, 0x19, 0x08, 0x4b, 0x9c, 0xfd, 0x25, 0xb6, 0xc1, - 0xb1, 0xe7, 0x29, 0x92, 0x76, 0x44, 0x50, 0x13, 0xc6, 0x5b, 0x6c, 0x13, 0x4b, 0xa2, 0xd0, 0xf7, - 0x89, 0xd4, 0x2f, 0x0f, 0xe7, 0xd0, 0xc2, 0x13, 0xd2, 0xeb, 0xec, 0xb0, 0xc9, 0xdd, 0xfe, 0xe5, - 0x09, 0x26, 0xab, 0xc4, 0x25, 0xe9, 0xb0, 0x70, 0x5d, 0x15, 0x9a, 0xdc, 0x87, 0x8a, 0x3c, 0x34, - 0x95, 0xee, 0x03, 0xc2, 0x11, 0x16, 0x4b, 0x2e, 0xe8, 0x73, 0xcc, 0x31, 0x9b, 0x0b, 0x88, 0xe2, - 0xcf, 0xe7, 0x71, 0x7a, 0xc3, 0x29, 0x5b, 0xb0, 0xc0, 0x1a, 0x3b, 0x74, 0x1d, 0xc6, 0xc5, 0x6b, - 0x06, 0xc2, 0x4c, 0x51, 0x36, 0x8e, 0xd8, 0xe3, 0x58, 0x47, 0xee, 0x67, 0x01, 0xd8, 0x2c, 0x8c, - 0x36, 0xe1, 0x71, 0xed, 0xb5, 0x9e, 0x2e, 0xce, 0x57, 0x5c, 0xf2, 0x3c, 0xb1, 0xb7, 0x3b, 0xfb, - 0xf8, 0xda, 0x41, 0x84, 0xf8, 0x60, 0x3e, 0xe8, 0x16, 0x9c, 0x76, 0x1a, 0x89, 0xb7, 0x4d, 0xaa, - 0xc4, 0x71, 0x7d, 0x2f, 0x20, 0x66, 0xac, 0xfa, 0xa3, 0x7b, 0xbb, 0xb3, 0xa7, 0x17, 0xba, 0x11, - 0xe0, 0xee, 0xe5, 0xd0, 0x27, 0xa0, 0xe2, 0x06, 0xb1, 0x18, 0x83, 0x21, 0xe3, 0x71, 0xaa, 0x4a, - 0xf5, 0x66, 0x5d, 0xf5, 0x3f, 0xfd, 0x83, 0xd3, 0x02, 0xe8, 0x1d, 0xfe, 0xf8, 0xba, 0x3a, 0xcd, - 0xf0, 0x47, 0xd1, 0x5e, 0x2e, 0x74, 0x7e, 0x36, 0x22, 0x48, 0xb8, 0x05, 0x4f, 0x39, 0x39, 0x1a, - 0xc1, 0x25, 0x46, 0x15, 0xe8, 0xd3, 0x80, 0x62, 0x12, 0x6d, 0x7b, 0x0d, 0xb2, 0xd0, 0x60, 0xf9, - 0x41, 0x99, 0x8d, 0x67, 0xc4, 0xf0, 0xf6, 0x47, 0xf5, 0x0e, 0x0a, 0xdc, 0xa5, 0x14, 0xba, 0x4a, - 0x25, 0x8f, 0x0e, 0x15, 0x3e, 0xa9, 0x52, 0x31, 0x9c, 0xae, 0x92, 0x56, 0x44, 0x1a, 0x4e, 0x42, - 0x5c, 0x93, 0x23, 0xce, 0x94, 0xa3, 0xfb, 0x92, 0x4a, 0x01, 0x0f, 0xa6, 0x27, 0x65, 0x67, 0x1a, - 0x78, 0x7a, 0xce, 0xda, 0x0a, 0xe3, 0xe4, 0x26, 0x49, 0xee, 0x87, 0xd1, 0x3d, 0x66, 0xf9, 0x1f, - 0xd1, 0x92, 0xad, 0xa5, 0x28, 0xac, 0xd3, 0x51, 0x1d, 0x8a, 0x5d, 0x39, 0xad, 0x56, 0x99, 0x3d, - 0x7f, 0x24, 0x5d, 0x3b, 0x57, 0x39, 0x18, 0x4b, 0xbc, 0x24, 0x5d, 0xad, 0x2d, 0x31, 0xdb, 0x7c, - 0x86, 0x74, 0xb5, 0xb6, 0x84, 0x25, 0x1e, 0x85, 0x9d, 0x4f, 0x80, 0x4d, 0x14, 0xb9, 0x27, 0xe9, - 0x94, 0xe4, 0x05, 0x5f, 0x01, 0x7b, 0x00, 0x53, 0xea, 0x19, 0x32, 0x9e, 0x07, 0x33, 0x9e, 0x9e, - 0x2c, 0xf2, 0xf4, 0x7b, 0xd7, 0x74, 0x9a, 0xca, 0xae, 0xb7, 0x9a, 0xe1, 0x89, 0x3b, 0x6a, 0x31, - 0x72, 0x2e, 0x4c, 0xe5, 0xa6, 0xf5, 0x9f, 0x87, 0x4a, 0xdc, 0x5e, 0x77, 0xc3, 0xa6, 0xe3, 0x05, - 0xcc, 0x80, 0xae, 0x3f, 0x64, 0x2e, 0x11, 0x38, 0xa5, 0x41, 0x35, 0x18, 0x71, 0xe4, 0x1b, 0xfe, - 0xa8, 0x48, 0x4c, 0xb6, 0x7a, 0xbc, 0x9f, 0x59, 0x57, 0xd5, 0xab, 0xfd, 0x8a, 0x0b, 0x7a, 0x05, - 0xc6, 0x45, 0x48, 0x11, 0x89, 0x58, 0xab, 0x4f, 0x9a, 0xee, 0xe7, 0x75, 0x89, 0x64, 0x13, 0xcc, - 0xa4, 0x45, 0x9b, 0x30, 0x41, 0xb9, 0xa4, 0x02, 0x70, 0xfa, 0x54, 0x7f, 0x32, 0x54, 0x4b, 0xa0, - 0xac, 0xb3, 0xc1, 0x19, 0xb6, 0xc8, 0x85, 0xc7, 0x9c, 0x76, 0x12, 0x36, 0xe9, 0x4a, 0x30, 0xd7, - 0xc9, 0x5a, 0x78, 0x8f, 0x04, 0xd3, 0xa7, 0xd9, 0x0c, 0x3c, 0xb7, 0xb7, 0x3b, 0xfb, 0xd8, 0xc2, - 0x01, 0x74, 0xf8, 0x40, 0x2e, 0xe8, 0x4d, 0x18, 0x4d, 0x42, 0x5f, 0x78, 0xf4, 0xc6, 0xd3, 0x67, - 0x8a, 0x64, 0x82, 0x59, 0x53, 0x05, 0x74, 0x33, 0x86, 0x62, 0x82, 0x75, 0x8e, 0x33, 0x9f, 0x84, - 0x13, 0x1d, 0x22, 0xa9, 0x2f, 0xa7, 0xc7, 0xff, 0x38, 0x08, 0x15, 0x65, 0xd1, 0x43, 0xf3, 0xa6, - 0xf1, 0xf6, 0xd1, 0xac, 0xf1, 0x76, 0x84, 0x2a, 0x50, 0xba, 0xbd, 0xf6, 0xf3, 0x5d, 0x1e, 0x9e, - 0x7e, 0x36, 0x77, 0x0d, 0x16, 0x8f, 0x43, 0xea, 0xe3, 0x79, 0xee, 0xf4, 0x54, 0x37, 0x70, 0xe0, - 0xa9, 0xae, 0xe0, 0x63, 0x6a, 0xf4, 0xfc, 0xd6, 0x0a, 0xdd, 0xd5, 0x5a, 0xf6, 0xad, 0xa0, 0x1a, - 0x05, 0x62, 0x8e, 0x63, 0x7a, 0x37, 0xdd, 0x53, 0x99, 0xde, 0x3d, 0x7c, 0x48, 0xbd, 0x5b, 0x32, - 0xc0, 0x29, 0x2f, 0xb4, 0x0d, 0x27, 0x1a, 0xe6, 0xd3, 0x4f, 0x2a, 0xba, 0xe8, 0xf9, 0x3e, 0x9e, - 0x5e, 0x6a, 0x6b, 0x6f, 0x4e, 0x2c, 0x65, 0xf9, 0xe1, 0xce, 0x2a, 0xd0, 0x2b, 0x30, 0xf2, 0x4e, - 0x18, 0xb3, 0x6b, 0x05, 0xb1, 0xb1, 0xc8, 0x28, 0x8e, 0x91, 0xd7, 0x6e, 0xd5, 0x19, 0x7c, 0x7f, - 0x77, 0x76, 0xb4, 0x16, 0xba, 0xf2, 0x2f, 0x56, 0x05, 0xd0, 0x97, 0x2d, 0x38, 0x6d, 0xac, 0x33, - 0xd5, 0x72, 0x38, 0x4c, 0xcb, 0x1f, 0x17, 0x35, 0x9f, 0x5e, 0xed, 0xc6, 0x13, 0x77, 0xaf, 0xca, - 0xfe, 0x5d, 0x6e, 0xc2, 0x14, 0x46, 0x0d, 0x12, 0xb7, 0xfd, 0xe3, 0xc8, 0xff, 0x7e, 0xcb, 0xb0, - 0xb7, 0x3c, 0x04, 0x23, 0xfa, 0xbf, 0xb7, 0x98, 0x11, 0x7d, 0x8d, 0x34, 0x5b, 0xbe, 0x93, 0x1c, - 0x87, 0x4f, 0xec, 0xe7, 0x60, 0x24, 0x11, 0xb5, 0x15, 0x4b, 0x5e, 0xaf, 0x35, 0x8f, 0x5d, 0x2e, - 0xa8, 0x8d, 0x49, 0x42, 0xb1, 0x62, 0x68, 0xff, 0x6b, 0xfe, 0x55, 0x24, 0xe6, 0x18, 0x2c, 0x05, - 0x37, 0x4d, 0x4b, 0xc1, 0x33, 0x85, 0xfb, 0xd2, 0xc3, 0x62, 0xf0, 0x03, 0xb3, 0x07, 0xec, 0xfc, - 0xf0, 0xb3, 0x73, 0xcb, 0x63, 0xdf, 0x02, 0xf3, 0x9d, 0x2e, 0xf4, 0x2a, 0xf7, 0x32, 0xe7, 0x92, - 0xfe, 0x42, 0xdf, 0x1e, 0xe6, 0xf6, 0x6f, 0x96, 0xe0, 0x14, 0xb7, 0xf3, 0x2e, 0x6c, 0x87, 0x9e, - 0x5b, 0x0b, 0x5d, 0xe1, 0x73, 0xef, 0xc2, 0x58, 0x4b, 0x3b, 0xdf, 0x15, 0xcb, 0x51, 0xa2, 0x9f, - 0x08, 0x53, 0x9d, 0x5a, 0x87, 0x62, 0x83, 0x2b, 0xad, 0x85, 0x6c, 0x7b, 0x0d, 0x65, 0x36, 0x2c, - 0xf5, 0x2d, 0x7c, 0x55, 0x2d, 0xcb, 0x1a, 0x1f, 0x6c, 0x70, 0x3d, 0x82, 0x77, 0x16, 0xec, 0xbf, - 0x67, 0xc1, 0x23, 0x3d, 0xf2, 0x98, 0xd0, 0xea, 0xee, 0x33, 0xdb, 0xba, 0x78, 0x08, 0x4e, 0x55, - 0xc7, 0x2d, 0xee, 0x58, 0x60, 0xd1, 0x3a, 0x00, 0xb7, 0x98, 0xb3, 0x67, 0xc1, 0x4b, 0x45, 0x1c, - 0x65, 0x3a, 0xb2, 0x05, 0x68, 0x81, 0xe4, 0xea, 0x21, 0x70, 0x8d, 0xab, 0xfd, 0xed, 0x32, 0x0c, - 0xf2, 0xf7, 0x86, 0x6b, 0x30, 0xbc, 0xc5, 0xf3, 0xaa, 0xf6, 0x97, 0xd6, 0x35, 0xd5, 0xdf, 0x39, - 0x00, 0x4b, 0x36, 0xe8, 0x06, 0x9c, 0xa4, 0xc2, 0xdb, 0x73, 0xfc, 0x2a, 0xf1, 0x9d, 0x1d, 0x79, - 0x20, 0xe4, 0xc9, 0xf7, 0x65, 0x96, 0xe8, 0x93, 0xab, 0x9d, 0x24, 0xb8, 0x5b, 0x39, 0xf4, 0x6a, - 0x47, 0x1a, 0x34, 0x9e, 0xaf, 0x56, 0x29, 0x83, 0x07, 0xa7, 0x42, 0xa3, 0x2a, 0x6b, 0xab, 0xe3, - 0xe8, 0xab, 0x3d, 0xeb, 0x6a, 0x1e, 0x77, 0x4d, 0x5a, 0x76, 0x7d, 0xdf, 0x66, 0x6e, 0x0b, 0x6b, - 0x5b, 0x11, 0x89, 0xb7, 0x42, 0xdf, 0x15, 0x2f, 0x12, 0xa6, 0xd7, 0xf7, 0x19, 0x3c, 0xee, 0x28, - 0x41, 0xb9, 0x6c, 0x38, 0x9e, 0xdf, 0x8e, 0x48, 0xca, 0x65, 0xc8, 0xe4, 0xb2, 0x92, 0xc1, 0xe3, - 0x8e, 0x12, 0x74, 0x6e, 0x9d, 0x16, 0x0f, 0xe4, 0xc9, 0xa8, 0x5d, 0x71, 0xc3, 0xfd, 0x19, 0x18, - 0x96, 0xbe, 0xdb, 0x85, 0x92, 0x4b, 0x88, 0xbb, 0x79, 0xf5, 0xd8, 0x9e, 0xf6, 0x18, 0x93, 0xf0, - 0xda, 0x96, 0xfc, 0x0e, 0xf3, 0x10, 0xdb, 0x9f, 0x5a, 0x70, 0xb2, 0x8b, 0x0f, 0x12, 0xf7, 0x8c, - 0xdd, 0xf4, 0xe2, 0x44, 0xa5, 0x82, 0xd7, 0x3c, 0x63, 0x39, 0x1c, 0x2b, 0x0a, 0xba, 0x5a, 0xb8, - 0xdd, 0x25, 0x7b, 0x27, 0x2f, 0xbc, 0x2c, 0x04, 0xb6, 0xbf, 0xe4, 0x6b, 0xe8, 0x1c, 0x0c, 0xb4, - 0x63, 0x12, 0xc9, 0x57, 0xd1, 0xa4, 0x28, 0x65, 0xa6, 0x36, 0x86, 0xa1, 0x9a, 0xe1, 0xa6, 0xb2, - 0x72, 0x69, 0x9a, 0x21, 0xb7, 0x73, 0x71, 0x9c, 0xfd, 0x8d, 0x32, 0x4c, 0x66, 0x7c, 0x11, 0x69, - 0x43, 0x9a, 0x61, 0xe0, 0x25, 0xa1, 0x4a, 0xf8, 0xc5, 0x1f, 0x62, 0x22, 0xad, 0xad, 0x1b, 0x02, - 0x8e, 0x15, 0x05, 0x7a, 0xda, 0x7c, 0xa4, 0x3e, 0x6d, 0xf3, 0x62, 0xd5, 0x78, 0xaf, 0xb2, 0xe8, - 0xf3, 0x14, 0x4f, 0xc2, 0x40, 0x2b, 0x54, 0x6f, 0x0f, 0xab, 0xef, 0x89, 0x17, 0xab, 0xb5, 0x30, - 0xf4, 0x31, 0x43, 0xa2, 0xa7, 0x44, 0xef, 0x33, 0x97, 0x03, 0xd8, 0x71, 0xc3, 0x58, 0x1b, 0x82, - 0x67, 0x60, 0xf8, 0x1e, 0xd9, 0x89, 0xbc, 0x60, 0x33, 0x7b, 0x35, 0x72, 0x8d, 0x83, 0xb1, 0xc4, - 0x9b, 0x4f, 0x50, 0x0c, 0x1f, 0xf1, 0x13, 0x14, 0x23, 0xb9, 0xee, 0xd4, 0xdf, 0xb5, 0x60, 0x92, - 0x65, 0xc1, 0x14, 0x31, 0xe3, 0x5e, 0x18, 0x1c, 0xc3, 0x36, 0xfe, 0x24, 0x0c, 0x46, 0xb4, 0xd2, - 0x6c, 0x0e, 0x79, 0xd6, 0x12, 0xcc, 0x71, 0xe8, 0x31, 0x18, 0x60, 0x4d, 0xa0, 0x9f, 0x71, 0x8c, - 0x27, 0xdb, 0xae, 0x3a, 0x89, 0x83, 0x19, 0x94, 0x85, 0xff, 0x60, 0xd2, 0xf2, 0x3d, 0xde, 0xe8, - 0xd4, 0xa2, 0xf9, 0x7e, 0x0b, 0xff, 0xe9, 0xda, 0xc8, 0x87, 0x15, 0xfe, 0xd3, 0x9d, 0xf9, 0xc1, - 0xaa, 0xf4, 0x7f, 0x2f, 0xc1, 0xd9, 0xae, 0xe5, 0xd2, 0x4b, 0xd6, 0x15, 0xe3, 0x92, 0xf5, 0x52, - 0xe6, 0x92, 0xd5, 0x3e, 0xb8, 0xf4, 0xc3, 0xb9, 0x76, 0xed, 0x7e, 0x1b, 0x5a, 0x3e, 0xc6, 0xdb, - 0xd0, 0x81, 0xa2, 0x2a, 0xce, 0x60, 0x8e, 0x8a, 0xf3, 0x87, 0x16, 0x3c, 0xda, 0x75, 0xc8, 0xde, - 0x77, 0xf1, 0x56, 0x5d, 0x5b, 0xd9, 0xe3, 0x00, 0xf0, 0xab, 0xe5, 0x1e, 0xbd, 0x62, 0x47, 0x81, - 0xf3, 0x54, 0x0a, 0x31, 0x64, 0x2c, 0x94, 0xb7, 0x31, 0x2e, 0x81, 0x38, 0x0c, 0x2b, 0x2c, 0x8a, - 0xb5, 0x78, 0x25, 0xde, 0xc8, 0xe5, 0x43, 0x2e, 0xa8, 0x39, 0xd3, 0x14, 0xad, 0x07, 0xc2, 0x67, - 0xa3, 0x98, 0xee, 0x6a, 0x87, 0xbb, 0xf2, 0x61, 0x0e, 0x77, 0x63, 0xdd, 0x0f, 0x76, 0x68, 0x01, - 0x26, 0x9b, 0x5e, 0xc0, 0x5e, 0xae, 0x34, 0xb5, 0x27, 0x15, 0x34, 0x7a, 0xc3, 0x44, 0xe3, 0x2c, - 0xfd, 0xcc, 0x2b, 0x30, 0x7e, 0x78, 0x03, 0xd6, 0xbb, 0x65, 0xf8, 0xe0, 0x01, 0x42, 0x81, 0xef, - 0x0e, 0xc6, 0x77, 0xd1, 0x76, 0x87, 0x8e, 0x6f, 0x53, 0x83, 0x53, 0x1b, 0x6d, 0xdf, 0xdf, 0x61, - 0x2e, 0x4a, 0xc4, 0x95, 0x14, 0x42, 0xa9, 0x51, 0xcf, 0x58, 0xaf, 0x74, 0xa1, 0xc1, 0x5d, 0x4b, - 0xa2, 0x4f, 0x03, 0x0a, 0xd7, 0x59, 0x9e, 0x58, 0x37, 0x0d, 0xf4, 0x67, 0x9f, 0xa0, 0x9c, 0x2e, - 0xd5, 0x5b, 0x1d, 0x14, 0xb8, 0x4b, 0x29, 0xaa, 0xa7, 0xb2, 0x17, 0xb0, 0x55, 0xb3, 0x32, 0x7a, - 0x2a, 0xd6, 0x91, 0xd8, 0xa4, 0x45, 0x57, 0xe0, 0x84, 0xb3, 0xed, 0x78, 0x3c, 0xef, 0x93, 0x64, - 0xc0, 0x15, 0x55, 0x65, 0x22, 0x5a, 0xc8, 0x12, 0xe0, 0xce, 0x32, 0xa8, 0x65, 0xd8, 0xfc, 0x78, - 0x86, 0xf8, 0x4f, 0x1c, 0x62, 0x06, 0x17, 0xb6, 0x02, 0xda, 0xff, 0xcd, 0xa2, 0x5b, 0x5f, 0x97, - 0x47, 0x0e, 0xe9, 0x88, 0x28, 0x1b, 0x96, 0x16, 0x7f, 0xa5, 0x46, 0x64, 0x49, 0x47, 0x62, 0x93, - 0x96, 0x4f, 0x8d, 0x38, 0xf5, 0x98, 0x36, 0xb4, 0x4d, 0x11, 0xba, 0xa8, 0x28, 0xa8, 0x06, 0xed, - 0x7a, 0xdb, 0x5e, 0x1c, 0x46, 0x62, 0x01, 0xf5, 0xe9, 0x3f, 0x9b, 0xca, 0xcb, 0x2a, 0x67, 0x83, - 0x25, 0x3f, 0xfb, 0x9b, 0x25, 0x18, 0x97, 0x35, 0xbe, 0xd6, 0x0e, 0x13, 0xe7, 0x18, 0xb6, 0xf4, - 0xd7, 0x8c, 0x2d, 0x7d, 0xbe, 0x58, 0x24, 0x27, 0x6b, 0x5c, 0xcf, 0xad, 0xfc, 0x33, 0x99, 0xad, - 0xfc, 0x62, 0x3f, 0x4c, 0x0f, 0xde, 0xc2, 0xff, 0xad, 0x05, 0x27, 0x0c, 0xfa, 0x63, 0xd8, 0x49, - 0x6a, 0xe6, 0x4e, 0xf2, 0x5c, 0x1f, 0xbd, 0xe9, 0xb1, 0x83, 0x7c, 0xa7, 0x94, 0xe9, 0x05, 0xdb, - 0x39, 0xbe, 0x08, 0x03, 0x5b, 0x4e, 0xe4, 0x16, 0x4b, 0x82, 0xd8, 0x51, 0x7c, 0xee, 0xaa, 0x13, - 0xb9, 0x5c, 0xfe, 0x5f, 0x50, 0x4f, 0x30, 0x39, 0x91, 0x9b, 0x1b, 0x48, 0xc0, 0x2a, 0x45, 0x97, - 0x61, 0x28, 0x6e, 0x84, 0x2d, 0xe5, 0x6a, 0x79, 0x8e, 0x3f, 0xcf, 0x44, 0x21, 0xfb, 0xbb, 0xb3, - 0xc8, 0xac, 0x8e, 0x82, 0xb1, 0xa0, 0x9f, 0xd9, 0x84, 0x8a, 0xaa, 0xfa, 0x48, 0x9d, 0xcd, 0xff, - 0xac, 0x0c, 0x27, 0xbb, 0xcc, 0x15, 0xf4, 0x25, 0x63, 0xdc, 0x5e, 0xe9, 0x7b, 0xb2, 0xbd, 0xc7, - 0x91, 0xfb, 0x12, 0x3b, 0x29, 0xb9, 0x62, 0x76, 0x1c, 0xa2, 0xfa, 0xdb, 0x31, 0xc9, 0x56, 0x4f, - 0x41, 0xf9, 0xd5, 0xd3, 0x6a, 0x8f, 0x6d, 0xf8, 0x69, 0x45, 0xaa, 0xa5, 0x47, 0xfa, 0x9d, 0xff, - 0xca, 0x00, 0x9c, 0xea, 0x16, 0x32, 0x8e, 0xbe, 0x6a, 0x65, 0x5e, 0x3a, 0x78, 0xb5, 0xff, 0xb8, - 0x73, 0xfe, 0xfc, 0x81, 0x48, 0xb3, 0x32, 0x67, 0xbe, 0x7d, 0x90, 0x3b, 0xe2, 0xa2, 0x76, 0x16, - 0x02, 0x14, 0xf1, 0x57, 0x2b, 0xa4, 0x54, 0xf8, 0xd4, 0x21, 0x9a, 0x22, 0x1e, 0xbe, 0x88, 0x33, - 0x21, 0x40, 0x12, 0x9c, 0x1f, 0x02, 0x24, 0xdb, 0x30, 0xe3, 0xc1, 0xa8, 0xd6, 0xaf, 0x23, 0x9d, - 0x06, 0xf7, 0xe8, 0x16, 0xa5, 0xb5, 0xfb, 0x48, 0xa7, 0xc2, 0xdf, 0xb1, 0x20, 0xe3, 0x17, 0xa5, - 0xcc, 0x32, 0x56, 0x4f, 0xb3, 0xcc, 0x39, 0x18, 0x88, 0x42, 0x9f, 0x64, 0xb3, 0xf0, 0xe3, 0xd0, - 0x27, 0x98, 0x61, 0xd4, 0xab, 0xac, 0xe5, 0x5e, 0xaf, 0xb2, 0xd2, 0x73, 0xba, 0x4f, 0xb6, 0x89, - 0x34, 0x92, 0x28, 0x31, 0x7e, 0x9d, 0x02, 0x31, 0xc7, 0xd9, 0x7f, 0x50, 0x86, 0x21, 0x6e, 0x89, - 0x38, 0x86, 0x7d, 0xba, 0x26, 0x8c, 0x02, 0x85, 0xc2, 0xb0, 0x79, 0xab, 0xe6, 0xaa, 0x4e, 0xe2, - 0xf0, 0xc9, 0xa5, 0xfa, 0x98, 0x1a, 0x12, 0xd0, 0x9c, 0x31, 0x0a, 0x33, 0x99, 0xb3, 0x2e, 0x70, - 0x1e, 0xda, 0x98, 0x6c, 0x01, 0xc4, 0xec, 0x15, 0x40, 0xca, 0x43, 0x24, 0x9b, 0x7c, 0xb1, 0x50, - 0x3b, 0xea, 0xaa, 0x18, 0x6f, 0x4d, 0x9a, 0xe1, 0x4e, 0x21, 0xb0, 0xc6, 0x7b, 0xe6, 0x65, 0xa8, - 0x28, 0xe2, 0xbc, 0x43, 0xc0, 0x98, 0x3e, 0x39, 0xff, 0x3f, 0x98, 0xcc, 0xd4, 0xd5, 0xd7, 0x19, - 0xe2, 0x77, 0x2c, 0x98, 0xcc, 0x3c, 0x60, 0x8e, 0xbe, 0x62, 0xc1, 0x29, 0xbf, 0x8b, 0x21, 0x4a, - 0x7c, 0xe6, 0xc3, 0x98, 0xb0, 0xd4, 0xf1, 0xa1, 0x1b, 0x16, 0x77, 0xad, 0x8d, 0x1e, 0x2b, 0xf9, - 0xa3, 0xa6, 0x8e, 0x2f, 0xdc, 0x4c, 0xc7, 0x78, 0x9a, 0x5d, 0x0e, 0xc3, 0x0a, 0x6b, 0xff, 0xc4, - 0x82, 0x13, 0x1d, 0x6f, 0x64, 0xbf, 0x5f, 0xba, 0x21, 0x12, 0x0a, 0x97, 0x7a, 0x24, 0x14, 0xd6, - 0x7b, 0x59, 0x3e, 0xb0, 0x97, 0xbf, 0x69, 0x81, 0x98, 0xa1, 0xc7, 0xa0, 0x01, 0xae, 0x9a, 0x1a, - 0xe0, 0x87, 0x8a, 0x4c, 0xfa, 0x1e, 0xaa, 0xdf, 0xaf, 0x94, 0x60, 0x8a, 0x13, 0xa4, 0x36, 0xf5, - 0xf7, 0xcb, 0xc7, 0xe9, 0xef, 0xa1, 0x0b, 0xf5, 0xba, 0x60, 0xf7, 0x9e, 0x1a, 0xdf, 0x72, 0xe0, - 0xc0, 0x6f, 0xf9, 0x17, 0x16, 0x20, 0x3e, 0x26, 0xd9, 0x17, 0x61, 0xb9, 0x71, 0x57, 0x3b, 0xd0, - 0xa5, 0x92, 0x43, 0x61, 0xb0, 0x46, 0xf5, 0x90, 0xbb, 0x90, 0xb9, 0xd1, 0x28, 0xe7, 0xdf, 0x68, - 0xf4, 0xd1, 0xeb, 0xdf, 0x2d, 0x43, 0xd6, 0xdf, 0x0c, 0xbd, 0x05, 0x63, 0x0d, 0xa7, 0xe5, 0xac, - 0x7b, 0xbe, 0x97, 0x78, 0x24, 0x2e, 0x76, 0x65, 0xba, 0xa4, 0x95, 0x10, 0x17, 0x09, 0x1a, 0x04, - 0x1b, 0x1c, 0xd1, 0x1c, 0x40, 0x2b, 0xf2, 0xb6, 0x3d, 0x9f, 0x6c, 0x32, 0x9d, 0x95, 0x39, 0xac, - 0xf3, 0xdb, 0x3f, 0x09, 0xc5, 0x1a, 0x45, 0x17, 0x07, 0xe7, 0xf2, 0x71, 0x38, 0x38, 0x0f, 0xf4, - 0xe9, 0xe0, 0x3c, 0x58, 0xc8, 0xc1, 0x19, 0xc3, 0x19, 0x69, 0xff, 0xa7, 0xff, 0x57, 0x3c, 0x9f, - 0xf0, 0xbc, 0xaa, 0xc2, 0xa1, 0x7d, 0x66, 0x6f, 0x77, 0xf6, 0x0c, 0xee, 0x4a, 0x81, 0x7b, 0x94, - 0xb4, 0xdb, 0x70, 0xb2, 0x4e, 0x22, 0x8f, 0xa5, 0xbb, 0x73, 0xd3, 0xb5, 0xf4, 0x79, 0xa8, 0x44, - 0x99, 0x65, 0xdc, 0x67, 0xd4, 0xb2, 0x96, 0x20, 0x49, 0x2e, 0xdb, 0x94, 0xa5, 0xfd, 0xd7, 0x4a, - 0x30, 0x2c, 0x3c, 0xcd, 0x8e, 0x41, 0xf9, 0xb8, 0x66, 0x18, 0x09, 0x9e, 0xc9, 0x93, 0x7f, 0xac, - 0x59, 0x3d, 0xcd, 0x03, 0xf5, 0x8c, 0x79, 0xe0, 0xb9, 0x62, 0xec, 0x0e, 0x36, 0x0c, 0xfc, 0xe3, - 0x32, 0x4c, 0x98, 0x9e, 0x77, 0xc7, 0x30, 0x2c, 0xaf, 0xc3, 0x70, 0x2c, 0x9c, 0x40, 0x4b, 0x45, - 0x1c, 0x9b, 0xb2, 0x9f, 0x38, 0xbd, 0x4b, 0x15, 0x6e, 0x9f, 0x92, 0x5d, 0x57, 0x3f, 0xd3, 0xf2, - 0xb1, 0xf8, 0x99, 0xe6, 0x39, 0x44, 0x0e, 0x3c, 0x0c, 0x87, 0x48, 0xfb, 0x87, 0x4c, 0xe4, 0xeb, - 0xf0, 0x63, 0xd8, 0xc6, 0x5f, 0x33, 0x37, 0x87, 0x0b, 0x85, 0xe6, 0x9d, 0x68, 0x5e, 0x8f, 0xed, - 0xfc, 0x7b, 0x16, 0x8c, 0x0a, 0xc2, 0x63, 0xe8, 0xc0, 0xa7, 0xcd, 0x0e, 0x3c, 0x55, 0xa8, 0x03, - 0x3d, 0x5a, 0xfe, 0xcd, 0x92, 0x6a, 0x79, 0x4d, 0xbc, 0xe2, 0x9d, 0x9b, 0xdc, 0x77, 0xa4, 0x15, - 0x85, 0x49, 0xd8, 0x08, 0x7d, 0xa1, 0xc0, 0x3d, 0x96, 0xc6, 0x2f, 0x71, 0xf8, 0xbe, 0xf6, 0x1b, - 0x2b, 0x6a, 0x16, 0x5e, 0x13, 0x46, 0x89, 0xd8, 0x40, 0xbb, 0xbd, 0x21, 0xee, 0x02, 0xa4, 0x0f, - 0x37, 0x8b, 0xd0, 0xbf, 0xfe, 0x5f, 0x27, 0x4f, 0x03, 0x92, 0x14, 0x2f, 0xac, 0xf1, 0x95, 0x9e, - 0xee, 0xac, 0x8e, 0x41, 0xf3, 0x0e, 0xe0, 0xa6, 0x80, 0x63, 0x45, 0x61, 0xbf, 0xcc, 0x24, 0x3b, - 0x1b, 0xa0, 0xfe, 0x62, 0x85, 0x7e, 0x79, 0x48, 0x0d, 0x2d, 0x33, 0xec, 0xdd, 0xd4, 0x23, 0x92, - 0x8a, 0x8a, 0x4f, 0xda, 0x04, 0xdd, 0xd9, 0x34, 0x0d, 0x60, 0x42, 0xa4, 0xe3, 0xe2, 0xe8, 0xe5, - 0xc2, 0x12, 0xb9, 0x8f, 0xab, 0x22, 0x96, 0xcf, 0x8c, 0x25, 0x71, 0x5a, 0xad, 0x65, 0x53, 0x32, - 0x2f, 0x49, 0x04, 0x4e, 0x69, 0xd0, 0xbc, 0x38, 0x50, 0x9a, 0x8f, 0xbc, 0xcb, 0x03, 0xa5, 0x1c, - 0x12, 0xed, 0x44, 0x79, 0x11, 0x46, 0xd5, 0x2b, 0x17, 0x35, 0xfe, 0xbe, 0x40, 0x85, 0xeb, 0x57, - 0xcb, 0x29, 0x18, 0xeb, 0x34, 0x68, 0x15, 0x4e, 0xba, 0x2a, 0xb0, 0xa1, 0xd6, 0x5e, 0xf7, 0xbd, - 0x06, 0x2d, 0xca, 0x83, 0x12, 0x1f, 0xd9, 0xdb, 0x9d, 0x3d, 0x59, 0xed, 0x44, 0xe3, 0x6e, 0x65, - 0xd0, 0x1a, 0x4c, 0xc6, 0xfc, 0x35, 0x0f, 0xe9, 0xbd, 0x2e, 0x32, 0x95, 0x3e, 0x2b, 0x6f, 0xac, - 0xea, 0x26, 0x7a, 0x9f, 0x81, 0xb8, 0x54, 0x90, 0xfe, 0xee, 0x59, 0x16, 0xe8, 0x55, 0x98, 0xf0, - 0xf5, 0xa7, 0x0a, 0x6b, 0x22, 0xbe, 0x43, 0xf9, 0x20, 0x19, 0x0f, 0x19, 0xd6, 0x70, 0x86, 0x1a, - 0xbd, 0x0e, 0xd3, 0x3a, 0x44, 0x24, 0x5b, 0x71, 0x82, 0x4d, 0x12, 0x8b, 0xcc, 0xff, 0x8f, 0xed, - 0xed, 0xce, 0x4e, 0x5f, 0xef, 0x41, 0x83, 0x7b, 0x96, 0x46, 0x97, 0x61, 0x4c, 0x8e, 0xa4, 0x16, - 0xeb, 0x91, 0x7a, 0xbf, 0x69, 0x38, 0x6c, 0x50, 0xbe, 0xb7, 0x8b, 0xb9, 0x2f, 0xd2, 0xc2, 0xda, - 0x16, 0x8e, 0xde, 0x86, 0x31, 0xbd, 0x8d, 0xd9, 0xbd, 0x39, 0xff, 0xf9, 0x47, 0xa1, 0x0a, 0xa8, - 0x96, 0xeb, 0x38, 0x6c, 0xf0, 0xb6, 0x6f, 0xc1, 0x50, 0x7d, 0x27, 0x6e, 0x24, 0xfe, 0xc3, 0x7a, - 0xdf, 0x9f, 0xc0, 0x64, 0xe6, 0x21, 0x7c, 0x84, 0x85, 0x74, 0xb3, 0x0e, 0x29, 0xb5, 0xba, 0xc8, - 0x43, 0xfb, 0x4f, 0x2c, 0x18, 0x64, 0xcf, 0xa8, 0xe4, 0x3d, 0xc1, 0x53, 0xa4, 0xd1, 0xe8, 0x25, - 0x18, 0x22, 0x1b, 0x1b, 0xa4, 0x91, 0x88, 0x65, 0x2c, 0x1d, 0xaa, 0x87, 0x96, 0x19, 0x94, 0x2e, - 0x4e, 0x56, 0x19, 0xff, 0x8b, 0x05, 0x31, 0xfa, 0x1c, 0x54, 0x12, 0xaf, 0x49, 0x16, 0x5c, 0x97, - 0xb8, 0x87, 0x08, 0xc7, 0x56, 0xc2, 0x62, 0x4d, 0x32, 0xc1, 0x29, 0x3f, 0xfb, 0xeb, 0x25, 0x80, - 0x34, 0x9c, 0x21, 0xaf, 0x9b, 0x8b, 0x1d, 0x2f, 0x0d, 0x3d, 0xdd, 0xe5, 0xa5, 0x21, 0x94, 0x32, - 0xec, 0xf2, 0xce, 0x90, 0x1a, 0xaa, 0x72, 0xa1, 0xa1, 0x1a, 0xe8, 0x67, 0xa8, 0x96, 0xe0, 0x44, - 0x1a, 0x8e, 0x61, 0xc6, 0xb5, 0xb1, 0xbc, 0x83, 0x6b, 0x59, 0x24, 0xee, 0xa4, 0xb7, 0xbf, 0x6e, - 0x81, 0x70, 0x59, 0x2b, 0x30, 0x5b, 0x5d, 0xf9, 0x2a, 0x88, 0x91, 0xea, 0xe9, 0xd9, 0x22, 0xde, - 0x7c, 0x22, 0xc1, 0x93, 0x5a, 0x3f, 0x46, 0x5a, 0x27, 0x83, 0xab, 0xfd, 0x5b, 0x16, 0x8c, 0x72, - 0xf4, 0x0d, 0xa6, 0x53, 0xe7, 0xb7, 0xab, 0xaf, 0xa4, 0x96, 0xec, 0xc1, 0x0c, 0xca, 0x58, 0x25, - 0x37, 0xd4, 0x1f, 0xcc, 0x90, 0x08, 0x9c, 0xd2, 0xa0, 0x67, 0x60, 0x38, 0x6e, 0xaf, 0x33, 0xf2, - 0x8c, 0xff, 0x5a, 0x9d, 0x83, 0xb1, 0xc4, 0xdb, 0xff, 0xb4, 0x04, 0x53, 0x59, 0xf7, 0x45, 0x84, - 0x61, 0x88, 0xeb, 0xd8, 0x59, 0xf5, 0xec, 0x20, 0x5b, 0x8e, 0xe6, 0xfe, 0x08, 0xfc, 0xd9, 0x57, - 0xe6, 0x73, 0x26, 0x38, 0xa1, 0x0d, 0x18, 0x75, 0xc3, 0xfb, 0xc1, 0x7d, 0x27, 0x72, 0x17, 0x6a, - 0xab, 0xe2, 0x4b, 0xe4, 0x38, 0x9c, 0x54, 0xd3, 0x02, 0xba, 0x73, 0x25, 0xb3, 0x2d, 0xa4, 0x28, - 0xac, 0x33, 0xa6, 0x67, 0xca, 0x46, 0x18, 0x6c, 0x78, 0x9b, 0x37, 0x9c, 0x56, 0xb1, 0xab, 0xd5, - 0x25, 0x49, 0xae, 0xd5, 0x31, 0x2e, 0x02, 0xd9, 0x39, 0x02, 0xa7, 0x2c, 0xed, 0x3f, 0x43, 0x60, - 0xcc, 0x05, 0x23, 0xf3, 0xa4, 0xf5, 0xd0, 0x33, 0x4f, 0xbe, 0x01, 0x23, 0xa4, 0xd9, 0x4a, 0x76, - 0xaa, 0x5e, 0x54, 0x2c, 0x8f, 0xf0, 0xb2, 0xa0, 0xee, 0xe4, 0x2e, 0x31, 0x58, 0x71, 0xec, 0x91, - 0x47, 0xb4, 0xfc, 0xbe, 0xc8, 0x23, 0x3a, 0xf0, 0x53, 0xc9, 0x23, 0xfa, 0x3a, 0x0c, 0x6f, 0x7a, - 0x09, 0x26, 0xad, 0x50, 0x64, 0x06, 0xc8, 0x99, 0x3c, 0x57, 0x38, 0x71, 0x67, 0x72, 0x40, 0x81, - 0xc0, 0x92, 0x1d, 0x5a, 0x53, 0x8b, 0x6a, 0xa8, 0xc8, 0x5e, 0xde, 0x69, 0xeb, 0xeb, 0xba, 0xac, - 0x44, 0xde, 0xd0, 0xe1, 0xf7, 0x9e, 0x37, 0x54, 0x65, 0xfb, 0x1c, 0x79, 0x58, 0xd9, 0x3e, 0x8d, - 0xac, 0xa9, 0x95, 0xa3, 0xc8, 0x9a, 0xfa, 0x75, 0x0b, 0x4e, 0xb7, 0xba, 0xe5, 0x1c, 0x16, 0x79, - 0x3b, 0x3f, 0x79, 0x88, 0x2c, 0xcc, 0x46, 0xd5, 0x2c, 0xde, 0xba, 0x2b, 0x19, 0xee, 0x5e, 0xb1, - 0x4c, 0xbf, 0x3a, 0xfa, 0xde, 0xd3, 0xaf, 0x1e, 0x75, 0x82, 0xcf, 0x34, 0x19, 0xeb, 0xf8, 0x91, - 0x24, 0x63, 0x9d, 0x78, 0x88, 0xc9, 0x58, 0xb5, 0x34, 0xaa, 0x93, 0x0f, 0x37, 0x8d, 0xea, 0x96, - 0xb9, 0x2f, 0xf1, 0xac, 0x9d, 0x2f, 0x15, 0xde, 0x97, 0x8c, 0x1a, 0x0e, 0xde, 0x99, 0x78, 0x42, - 0xd9, 0x13, 0xef, 0x31, 0xa1, 0xac, 0x91, 0x96, 0x15, 0x1d, 0x45, 0x5a, 0xd6, 0xb7, 0xf4, 0x1d, - 0xf4, 0x64, 0x91, 0x1a, 0xd4, 0x46, 0xd9, 0x59, 0x43, 0xb7, 0x3d, 0xb4, 0x33, 0xf1, 0xeb, 0xa9, - 0xe3, 0x4e, 0xfc, 0x7a, 0xfa, 0x08, 0x13, 0xbf, 0x9e, 0x39, 0xd6, 0xc4, 0xaf, 0x8f, 0xfc, 0x34, - 0x12, 0xbf, 0xd2, 0x0e, 0xb7, 0x64, 0xe8, 0xcc, 0xf4, 0x74, 0x91, 0x0e, 0x77, 0x8d, 0xb4, 0xe1, - 0x1d, 0x56, 0x28, 0x9c, 0x32, 0xb5, 0xff, 0x12, 0x9c, 0x3d, 0xf8, 0x83, 0xa7, 0xcf, 0x1f, 0xd4, - 0x52, 0x4b, 0x53, 0xe6, 0xf9, 0x03, 0xa6, 0x4c, 0x69, 0x54, 0x85, 0x33, 0x53, 0x7e, 0xc7, 0x82, - 0x47, 0x7a, 0x24, 0x6e, 0x2b, 0x1c, 0x77, 0xd6, 0x82, 0xc9, 0x96, 0x59, 0xb4, 0x70, 0xa4, 0xa8, - 0x91, 0x28, 0x4e, 0xf9, 0x06, 0x67, 0x10, 0x38, 0xcb, 0x7e, 0xf1, 0x43, 0x3f, 0x7a, 0xf7, 0xec, - 0x07, 0x7e, 0xfc, 0xee, 0xd9, 0x0f, 0xfc, 0xf1, 0xbb, 0x67, 0x3f, 0xf0, 0x0b, 0x7b, 0x67, 0xad, - 0x1f, 0xed, 0x9d, 0xb5, 0x7e, 0xbc, 0x77, 0xd6, 0xfa, 0xd3, 0xbd, 0xb3, 0xd6, 0xd7, 0x7f, 0x72, - 0xf6, 0x03, 0x9f, 0x2d, 0x6d, 0x5f, 0xfc, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x21, 0x74, - 0x7f, 0xf3, 0xc3, 0x00, 0x00, + // 10780 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xc7, + 0x75, 0x98, 0x66, 0x17, 0x5f, 0xfb, 0xf0, 0x79, 0x7d, 0xb8, 0x23, 0x08, 0x91, 0x87, 0xe3, 0x50, + 0xa4, 0x8e, 0xe4, 0x11, 0x10, 0x8f, 0xa4, 0x78, 0x12, 0x15, 0x4a, 0x00, 0x16, 0xb8, 0x83, 0xee, + 0x6b, 0xd9, 0x8b, 0xbb, 0xa3, 0x24, 0x46, 0xe4, 0xdc, 0x4e, 0x03, 0x18, 0xde, 0xec, 0xcc, 0x72, + 0x66, 0x16, 0x77, 0x90, 0xa2, 0x2a, 0x5b, 0x51, 0xc9, 0x49, 0x59, 0x49, 0xe8, 0x72, 0x54, 0x95, + 0x72, 0x52, 0xa5, 0x94, 0xab, 0xe2, 0x28, 0xdf, 0x51, 0x54, 0x96, 0xe4, 0x8a, 0x9c, 0x54, 0x1c, + 0xcb, 0x91, 0xab, 0x12, 0x47, 0x55, 0x2e, 0xc7, 0x4e, 0xa5, 0x02, 0x5b, 0x50, 0xc5, 0x3f, 0xf3, + 0x23, 0xfe, 0x87, 0xa4, 0x92, 0x54, 0x7f, 0x4e, 0xf7, 0xec, 0x2e, 0x66, 0x16, 0x3c, 0xc0, 0x27, + 0x95, 0xff, 0xed, 0xbe, 0xf7, 0xfa, 0xf5, 0xc7, 0x74, 0xbf, 0x7e, 0xef, 0xf5, 0xeb, 0xd7, 0x70, + 0xfe, 0xee, 0xc5, 0x78, 0xde, 0x0b, 0x17, 0xee, 0xb6, 0xef, 0x90, 0x28, 0x20, 0x09, 0x89, 0x17, + 0x5a, 0x77, 0x37, 0x17, 0x9c, 0x96, 0xb7, 0xb0, 0xfd, 0xc2, 0xc2, 0x26, 0x09, 0x48, 0xe4, 0x24, + 0xc4, 0x9d, 0x6f, 0x45, 0x61, 0x12, 0xa2, 0xc7, 0x38, 0xf5, 0x7c, 0x4a, 0x3d, 0xdf, 0xba, 0xbb, + 0x39, 0xef, 0xb4, 0xbc, 0xf9, 0xed, 0x17, 0x66, 0x9f, 0xdf, 0xf4, 0x92, 0xad, 0xf6, 0x9d, 0xf9, + 0x46, 0xd8, 0x5c, 0xd8, 0x0c, 0x37, 0xc3, 0x05, 0x56, 0xe8, 0x4e, 0x7b, 0x83, 0xfd, 0x63, 0x7f, + 0xd8, 0x2f, 0xce, 0x6c, 0xf6, 0x25, 0x51, 0xb5, 0xd3, 0xf2, 0x9a, 0x4e, 0x63, 0xcb, 0x0b, 0x48, + 0xb4, 0xa3, 0x2a, 0x8f, 0x48, 0x1c, 0xb6, 0xa3, 0x06, 0xc9, 0x36, 0xe1, 0xc0, 0x52, 0xf1, 0x42, + 0x93, 0x24, 0x4e, 0x97, 0x86, 0xcf, 0x2e, 0xf4, 0x2a, 0x15, 0xb5, 0x83, 0xc4, 0x6b, 0x76, 0x56, + 0xf3, 0xd1, 0xbc, 0x02, 0x71, 0x63, 0x8b, 0x34, 0x9d, 0x8e, 0x72, 0x2f, 0xf6, 0x2a, 0xd7, 0x4e, + 0x3c, 0x7f, 0xc1, 0x0b, 0x92, 0x38, 0x89, 0x0e, 0xea, 0x53, 0x4c, 0xa2, 0x6d, 0x12, 0xa5, 0x1d, + 0x22, 0xf7, 0x9d, 0x66, 0xcb, 0x27, 0x5d, 0xfa, 0x64, 0xff, 0xa1, 0x05, 0x67, 0x17, 0x6f, 0xd7, + 0x57, 0x7c, 0x27, 0x4e, 0xbc, 0xc6, 0x92, 0x1f, 0x36, 0xee, 0xd6, 0x93, 0x30, 0x22, 0xb7, 0x42, + 0xbf, 0xdd, 0x24, 0x75, 0x36, 0x7c, 0xe8, 0x3c, 0x8c, 0x6c, 0xb3, 0xff, 0x6b, 0xd5, 0x19, 0xeb, + 0xac, 0x75, 0xae, 0xb2, 0x34, 0xf5, 0xc3, 0xdd, 0xb9, 0x0f, 0xec, 0xed, 0xce, 0x8d, 0xdc, 0x12, + 0x70, 0xac, 0x28, 0xd0, 0xd3, 0x30, 0xb4, 0x11, 0xaf, 0xef, 0xb4, 0xc8, 0x4c, 0x89, 0xd1, 0x4e, + 0x08, 0xda, 0xa1, 0xd5, 0x3a, 0x85, 0x62, 0x81, 0x45, 0x0b, 0x50, 0x69, 0x39, 0x51, 0xe2, 0x25, + 0x5e, 0x18, 0xcc, 0x94, 0xcf, 0x5a, 0xe7, 0x06, 0x97, 0x4e, 0x08, 0xd2, 0x4a, 0x4d, 0x22, 0x70, + 0x4a, 0x43, 0x9b, 0x11, 0x11, 0xc7, 0xbd, 0x11, 0xf8, 0x3b, 0x33, 0x03, 0x67, 0xad, 0x73, 0x23, + 0x69, 0x33, 0xb0, 0x80, 0x63, 0x45, 0x61, 0x7f, 0xaf, 0x04, 0x23, 0x8b, 0x1b, 0x1b, 0x5e, 0xe0, + 0x25, 0x3b, 0xe8, 0x6d, 0x18, 0x0b, 0x42, 0x97, 0xc8, 0xff, 0xac, 0x17, 0xa3, 0x17, 0x9e, 0x9d, + 0x3f, 0x68, 0x2a, 0xce, 0x5f, 0xd7, 0x4a, 0x2c, 0x4d, 0xed, 0xed, 0xce, 0x8d, 0xe9, 0x10, 0x6c, + 0x70, 0x44, 0x6f, 0xc2, 0x68, 0x2b, 0x74, 0x55, 0x05, 0x25, 0x56, 0xc1, 0x33, 0x07, 0x57, 0x50, + 0x4b, 0x0b, 0x2c, 0x4d, 0xee, 0xed, 0xce, 0x8d, 0x6a, 0x00, 0xac, 0xb3, 0x43, 0x3e, 0x4c, 0xd2, + 0xbf, 0x41, 0xe2, 0xa9, 0x1a, 0xca, 0xac, 0x86, 0xe7, 0xf3, 0x6b, 0xd0, 0x0a, 0x2d, 0x9d, 0xdc, + 0xdb, 0x9d, 0x9b, 0xcc, 0x00, 0x71, 0x96, 0xb5, 0xfd, 0x05, 0x98, 0x58, 0x4c, 0x12, 0xa7, 0xb1, + 0x45, 0x5c, 0xfe, 0x7d, 0xd1, 0x4b, 0x30, 0x10, 0x38, 0x4d, 0x22, 0xbe, 0xfe, 0x59, 0x31, 0xec, + 0x03, 0xd7, 0x9d, 0x26, 0xd9, 0xdf, 0x9d, 0x9b, 0xba, 0x19, 0x78, 0xef, 0xb6, 0xc5, 0x9c, 0xa1, + 0x30, 0xcc, 0xa8, 0xd1, 0x05, 0x00, 0x97, 0x6c, 0x7b, 0x0d, 0x52, 0x73, 0x92, 0x2d, 0x31, 0x1b, + 0x90, 0x28, 0x0b, 0x55, 0x85, 0xc1, 0x1a, 0x95, 0xfd, 0x65, 0x0b, 0x2a, 0x8b, 0xdb, 0xa1, 0xe7, + 0xd6, 0x42, 0x37, 0x46, 0x6d, 0x98, 0x6c, 0x45, 0x64, 0x83, 0x44, 0x0a, 0x34, 0x63, 0x9d, 0x2d, + 0x9f, 0x1b, 0xbd, 0x70, 0x21, 0xa7, 0xdf, 0x66, 0xa1, 0x95, 0x20, 0x89, 0x76, 0x96, 0x1e, 0x11, + 0x55, 0x4f, 0x66, 0xb0, 0x38, 0x5b, 0x87, 0xfd, 0x4b, 0x25, 0x38, 0xb5, 0xf8, 0x85, 0x76, 0x44, + 0xaa, 0x5e, 0x7c, 0x37, 0xbb, 0x14, 0x5c, 0x2f, 0xbe, 0x7b, 0x3d, 0x1d, 0x0c, 0x35, 0x07, 0xab, + 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x1e, 0x86, 0xe9, 0xef, 0x9b, 0x78, 0x4d, 0xf4, 0xfe, 0xa4, 0x20, + 0x1e, 0xad, 0x3a, 0x89, 0x53, 0xe5, 0x28, 0x2c, 0x69, 0xd0, 0x35, 0x18, 0x6d, 0xb0, 0xf5, 0xbe, + 0x79, 0x2d, 0x74, 0x09, 0xfb, 0xc2, 0x95, 0xa5, 0xe7, 0x28, 0xf9, 0x72, 0x0a, 0xde, 0xdf, 0x9d, + 0x9b, 0xe1, 0x6d, 0x13, 0x2c, 0x34, 0x1c, 0xd6, 0xcb, 0x23, 0x5b, 0x2d, 0xc4, 0x01, 0xc6, 0x09, + 0xba, 0x2c, 0xc2, 0x73, 0xda, 0x9a, 0x1a, 0x64, 0x6b, 0x6a, 0xac, 0xc7, 0x7a, 0xfa, 0xc7, 0x96, + 0x18, 0x93, 0x55, 0xcf, 0x37, 0xc5, 0xc3, 0x05, 0x80, 0x98, 0x34, 0x22, 0x92, 0x68, 0xa3, 0xa2, + 0x3e, 0x73, 0x5d, 0x61, 0xb0, 0x46, 0x45, 0x17, 0x7f, 0xbc, 0xe5, 0x44, 0x6c, 0xb6, 0x88, 0xb1, + 0x51, 0x8b, 0xbf, 0x2e, 0x11, 0x38, 0xa5, 0x31, 0x16, 0x7f, 0x39, 0x77, 0xf1, 0xff, 0x96, 0x05, + 0xc3, 0x4b, 0x5e, 0xe0, 0x7a, 0xc1, 0x26, 0x7a, 0x1b, 0x46, 0xa8, 0x44, 0x77, 0x9d, 0xc4, 0x11, + 0xeb, 0xfe, 0x23, 0x72, 0xf2, 0xe8, 0x02, 0x56, 0x4e, 0x9f, 0x78, 0x9e, 0x52, 0xd3, 0x49, 0x74, + 0xe3, 0xce, 0x3b, 0xa4, 0x91, 0x5c, 0x23, 0x89, 0x93, 0x76, 0x27, 0x85, 0x61, 0xc5, 0x15, 0xdd, + 0x84, 0xa1, 0xc4, 0x89, 0x36, 0x49, 0x22, 0x96, 0x7d, 0xce, 0xa2, 0xe4, 0x3c, 0x30, 0x9d, 0x72, + 0x24, 0x68, 0x90, 0x54, 0x40, 0xae, 0x33, 0x26, 0x58, 0x30, 0xb3, 0x1b, 0x30, 0xb6, 0xec, 0xb4, + 0x9c, 0x3b, 0x9e, 0xef, 0x25, 0x1e, 0x89, 0xd1, 0x87, 0xa1, 0xec, 0xb8, 0x2e, 0x5b, 0x00, 0x95, + 0xa5, 0x53, 0x7b, 0xbb, 0x73, 0xe5, 0x45, 0xd7, 0xdd, 0xdf, 0x9d, 0x03, 0x45, 0xb5, 0x83, 0x29, + 0x05, 0x7a, 0x16, 0x06, 0xdc, 0x28, 0x6c, 0xcd, 0x94, 0x18, 0xe5, 0x69, 0xba, 0x52, 0xab, 0x51, + 0xd8, 0xca, 0x90, 0x32, 0x1a, 0xfb, 0x07, 0x25, 0x40, 0xcb, 0xa4, 0xb5, 0xb5, 0x5a, 0x37, 0xbe, + 0xe9, 0x39, 0x18, 0x69, 0x86, 0x81, 0x97, 0x84, 0x51, 0x2c, 0x2a, 0x64, 0xf3, 0xe2, 0x9a, 0x80, + 0x61, 0x85, 0x45, 0x67, 0x61, 0xa0, 0x95, 0x2e, 0xef, 0x31, 0x29, 0x1a, 0xd8, 0xc2, 0x66, 0x18, + 0x4a, 0xd1, 0x8e, 0x49, 0x24, 0xe6, 0xb3, 0xa2, 0xb8, 0x19, 0x93, 0x08, 0x33, 0x4c, 0x3a, 0x83, + 0xe8, 0xdc, 0x12, 0xb3, 0x35, 0x33, 0x83, 0x28, 0x06, 0x6b, 0x54, 0xe8, 0x2d, 0xa8, 0xf0, 0x7f, + 0x98, 0x6c, 0xb0, 0xa9, 0x9b, 0x2b, 0x14, 0xae, 0x86, 0x0d, 0xc7, 0xcf, 0x0e, 0xfe, 0x38, 0x9b, + 0x71, 0x92, 0x11, 0x4e, 0x79, 0x1a, 0x33, 0x6e, 0x28, 0x77, 0xc6, 0xfd, 0x1d, 0x0b, 0xd0, 0xb2, + 0x17, 0xb8, 0x24, 0x3a, 0x86, 0xad, 0xb3, 0xbf, 0xc5, 0xf0, 0xdf, 0x68, 0xd3, 0xc2, 0x66, 0x2b, + 0x0c, 0x48, 0x90, 0x2c, 0x87, 0x81, 0xcb, 0xb7, 0xd3, 0x8f, 0xc3, 0x40, 0x42, 0xab, 0xe2, 0xcd, + 0x7a, 0x5a, 0x7e, 0x16, 0x5a, 0xc1, 0xfe, 0xee, 0xdc, 0xe9, 0xce, 0x12, 0xac, 0x09, 0xac, 0x0c, + 0xfa, 0x18, 0x0c, 0xc5, 0x89, 0x93, 0xb4, 0x63, 0xd1, 0xd0, 0x27, 0x64, 0x43, 0xeb, 0x0c, 0xba, + 0xbf, 0x3b, 0x37, 0xa9, 0x8a, 0x71, 0x10, 0x16, 0x05, 0xd0, 0x33, 0x30, 0xdc, 0x24, 0x71, 0xec, + 0x6c, 0x4a, 0x01, 0x37, 0x29, 0xca, 0x0e, 0x5f, 0xe3, 0x60, 0x2c, 0xf1, 0xe8, 0x49, 0x18, 0x24, + 0x51, 0x14, 0x46, 0x62, 0x46, 0x8c, 0x0b, 0xc2, 0xc1, 0x15, 0x0a, 0xc4, 0x1c, 0x67, 0xff, 0x57, + 0x0b, 0x26, 0x55, 0x5b, 0x79, 0x5d, 0xc7, 0xb0, 0xe4, 0x5d, 0x80, 0x86, 0xec, 0x60, 0xcc, 0x16, + 0x9a, 0x56, 0x47, 0xf7, 0xe9, 0xd7, 0x39, 0xa0, 0x69, 0x1d, 0x0a, 0x14, 0x63, 0x8d, 0xaf, 0xfd, + 0x1f, 0x2c, 0x38, 0x99, 0xe9, 0xdb, 0x55, 0x2f, 0x4e, 0xd0, 0x9b, 0x1d, 0xfd, 0x9b, 0x2f, 0xd6, + 0x3f, 0x5a, 0x9a, 0xf5, 0x4e, 0xcd, 0x17, 0x09, 0xd1, 0xfa, 0x86, 0x61, 0xd0, 0x4b, 0x48, 0x53, + 0x76, 0xeb, 0xf9, 0x82, 0xdd, 0xe2, 0xed, 0x4b, 0xbf, 0xd2, 0x1a, 0xe5, 0x81, 0x39, 0x2b, 0xfb, + 0x7f, 0x5b, 0x50, 0x59, 0x0e, 0x83, 0x0d, 0x6f, 0xf3, 0x9a, 0xd3, 0x3a, 0x86, 0xef, 0x53, 0x87, + 0x01, 0xc6, 0x9d, 0x77, 0xe1, 0x85, 0xbc, 0x2e, 0x88, 0x86, 0xcd, 0xd3, 0x3d, 0x95, 0x2b, 0x0b, + 0x4a, 0x4c, 0x51, 0x10, 0x66, 0xcc, 0x66, 0x5f, 0x81, 0x8a, 0x22, 0x40, 0x53, 0x50, 0xbe, 0x4b, + 0xb8, 0x26, 0x59, 0xc1, 0xf4, 0x27, 0x9a, 0x86, 0xc1, 0x6d, 0xc7, 0x6f, 0x8b, 0xc5, 0x8b, 0xf9, + 0x9f, 0x8f, 0x97, 0x2e, 0x5a, 0xf6, 0x0f, 0xd8, 0x0a, 0x14, 0x95, 0xac, 0x04, 0xdb, 0x42, 0x38, + 0x7c, 0xc5, 0x82, 0x69, 0xbf, 0x8b, 0x50, 0x12, 0x63, 0x72, 0x18, 0x71, 0xf6, 0x98, 0x68, 0xf6, + 0x74, 0x37, 0x2c, 0xee, 0x5a, 0x1b, 0x95, 0xf5, 0x61, 0x8b, 0x4e, 0x38, 0xc7, 0x67, 0x4d, 0x17, + 0x3a, 0xc0, 0x0d, 0x01, 0xc3, 0x0a, 0x6b, 0xff, 0xa9, 0x05, 0xd3, 0xaa, 0x1f, 0x57, 0xc8, 0x4e, + 0x9d, 0xf8, 0xa4, 0x91, 0x84, 0xd1, 0xc3, 0xd2, 0x93, 0xc7, 0xf9, 0x37, 0xe1, 0x32, 0x69, 0x54, + 0x30, 0x28, 0x5f, 0x21, 0x3b, 0xfc, 0x03, 0xe9, 0x1d, 0x2d, 0x1f, 0xd8, 0xd1, 0x7f, 0x6d, 0xc1, + 0xb8, 0xea, 0xe8, 0x31, 0x2c, 0xb9, 0xab, 0xe6, 0x92, 0xfb, 0x70, 0xc1, 0xf9, 0xda, 0x63, 0xb1, + 0xfd, 0xed, 0x12, 0x15, 0x1b, 0x82, 0xa6, 0x16, 0x85, 0x74, 0x90, 0xa8, 0xc4, 0x7f, 0x48, 0xbe, + 0x52, 0x7f, 0x9d, 0xbd, 0x42, 0x76, 0xd6, 0x43, 0xaa, 0x4d, 0x74, 0xef, 0xac, 0xf1, 0x51, 0x07, + 0x0e, 0xfc, 0xa8, 0xbf, 0x5b, 0x82, 0x53, 0x6a, 0x58, 0x8c, 0x5d, 0xfa, 0x67, 0x72, 0x60, 0x5e, + 0x80, 0x51, 0x97, 0x6c, 0x38, 0x6d, 0x3f, 0x51, 0xd6, 0xc4, 0x20, 0x37, 0x33, 0xab, 0x29, 0x18, + 0xeb, 0x34, 0x7d, 0x8c, 0xe5, 0x37, 0x46, 0x99, 0x3c, 0x4f, 0x1c, 0x3a, 0xeb, 0xa9, 0x86, 0xa7, + 0x99, 0x87, 0x63, 0xba, 0x79, 0x28, 0x4c, 0xc1, 0x27, 0x61, 0xd0, 0x6b, 0xd2, 0x3d, 0xbf, 0x64, + 0x6e, 0xe5, 0x6b, 0x14, 0x88, 0x39, 0x0e, 0x3d, 0x05, 0xc3, 0x8d, 0xb0, 0xd9, 0x74, 0x02, 0x77, + 0xa6, 0xcc, 0x74, 0xce, 0x51, 0xaa, 0x16, 0x2c, 0x73, 0x10, 0x96, 0x38, 0xf4, 0x18, 0x0c, 0x38, + 0xd1, 0x66, 0x3c, 0x33, 0xc0, 0x68, 0x46, 0x68, 0x4d, 0x8b, 0xd1, 0x66, 0x8c, 0x19, 0x94, 0xea, + 0x92, 0xf7, 0xc2, 0xe8, 0xae, 0x17, 0x6c, 0x56, 0xbd, 0x88, 0x29, 0x86, 0x9a, 0x2e, 0x79, 0x5b, + 0x61, 0xb0, 0x46, 0x85, 0x6a, 0x30, 0xd8, 0x0a, 0xa3, 0x24, 0x9e, 0x19, 0x62, 0x03, 0xff, 0x5c, + 0xee, 0xf2, 0xe3, 0xfd, 0xae, 0x85, 0x51, 0x92, 0x76, 0x85, 0xfe, 0x8b, 0x31, 0x67, 0x84, 0x96, + 0xa1, 0x4c, 0x82, 0xed, 0x99, 0x61, 0xc6, 0xef, 0x43, 0x07, 0xf3, 0x5b, 0x09, 0xb6, 0x6f, 0x39, + 0x51, 0x2a, 0xaf, 0x56, 0x82, 0x6d, 0x4c, 0x4b, 0xa3, 0x06, 0x54, 0xa4, 0x0b, 0x2b, 0x9e, 0x19, + 0x29, 0x32, 0x15, 0xb1, 0x20, 0xc7, 0xe4, 0xdd, 0xb6, 0x17, 0x91, 0x26, 0x09, 0x92, 0x38, 0x35, + 0xac, 0x24, 0x36, 0xc6, 0x29, 0x5f, 0xd4, 0x80, 0x31, 0xae, 0x7f, 0x5e, 0x0b, 0xdb, 0x41, 0x12, + 0xcf, 0x54, 0x58, 0x93, 0x73, 0x3c, 0x17, 0xb7, 0xd2, 0x12, 0x4b, 0xd3, 0x82, 0xfd, 0x98, 0x06, + 0x8c, 0xb1, 0xc1, 0x14, 0xbd, 0x09, 0xe3, 0xbe, 0xb7, 0x4d, 0x02, 0x12, 0xc7, 0xb5, 0x28, 0xbc, + 0x43, 0x66, 0x80, 0xf5, 0xe6, 0xc9, 0x3c, 0x2b, 0x3e, 0xbc, 0x43, 0x96, 0x4e, 0xec, 0xed, 0xce, + 0x8d, 0x5f, 0xd5, 0x4b, 0x63, 0x93, 0x19, 0x7a, 0x0b, 0x26, 0xa8, 0xb2, 0xeb, 0xa5, 0xec, 0x47, + 0x8b, 0xb3, 0x47, 0x7b, 0xbb, 0x73, 0x13, 0xd8, 0x28, 0x8e, 0x33, 0xec, 0xd0, 0x3a, 0x54, 0x7c, + 0x6f, 0x83, 0x34, 0x76, 0x1a, 0x3e, 0x99, 0x19, 0x63, 0xbc, 0x73, 0x16, 0xe7, 0x55, 0x49, 0xce, + 0x0d, 0x0c, 0xf5, 0x17, 0xa7, 0x8c, 0xd0, 0x2d, 0x38, 0x9d, 0x90, 0xa8, 0xe9, 0x05, 0x0e, 0x5d, + 0x54, 0x42, 0xfb, 0x65, 0xae, 0x92, 0x71, 0x36, 0x6b, 0xcf, 0x88, 0x81, 0x3d, 0xbd, 0xde, 0x95, + 0x0a, 0xf7, 0x28, 0x8d, 0x6e, 0xc0, 0x24, 0x5b, 0x4f, 0xb5, 0xb6, 0xef, 0xd7, 0x42, 0xdf, 0x6b, + 0xec, 0xcc, 0x4c, 0x30, 0x86, 0x4f, 0x49, 0x07, 0xc8, 0x9a, 0x89, 0xa6, 0x86, 0x61, 0xfa, 0x0f, + 0x67, 0x4b, 0x23, 0x1f, 0x26, 0x63, 0xd2, 0x68, 0x47, 0x5e, 0xb2, 0x43, 0xe7, 0x3e, 0xb9, 0x9f, + 0xcc, 0x4c, 0x16, 0x31, 0x74, 0xeb, 0x66, 0x21, 0xee, 0x7d, 0xca, 0x00, 0x71, 0x96, 0x35, 0x15, + 0x15, 0x71, 0xe2, 0x7a, 0xc1, 0xcc, 0x14, 0x93, 0x40, 0x6a, 0x7d, 0xd5, 0x29, 0x10, 0x73, 0x1c, + 0xf3, 0x1f, 0xd0, 0x1f, 0x37, 0xa8, 0x94, 0x3e, 0xc1, 0x08, 0x53, 0xff, 0x81, 0x44, 0xe0, 0x94, + 0x86, 0xaa, 0x06, 0x49, 0xb2, 0x33, 0x83, 0x18, 0xa9, 0x5a, 0x6a, 0xeb, 0xeb, 0x9f, 0xc1, 0x14, + 0x8e, 0x6e, 0xc1, 0x30, 0x09, 0xb6, 0x57, 0xa3, 0xb0, 0x39, 0x73, 0xb2, 0x88, 0x0c, 0x58, 0xe1, + 0xc4, 0x7c, 0xff, 0x48, 0x4d, 0x18, 0x01, 0xc6, 0x92, 0x19, 0xba, 0x0f, 0x33, 0x5d, 0xbe, 0x12, + 0xff, 0x28, 0xd3, 0xec, 0xa3, 0x7c, 0x42, 0x94, 0x9d, 0x59, 0xef, 0x41, 0xb7, 0x7f, 0x00, 0x0e, + 0xf7, 0xe4, 0x6e, 0xdf, 0x81, 0x09, 0x25, 0xa8, 0xd8, 0xf7, 0x46, 0x73, 0x30, 0x48, 0x65, 0xb1, + 0x34, 0xe8, 0x2b, 0x74, 0x50, 0xa9, 0x88, 0x8e, 0x31, 0x87, 0xb3, 0x41, 0xf5, 0xbe, 0x40, 0x96, + 0x76, 0x12, 0xc2, 0x0d, 0xbb, 0xb2, 0x36, 0xa8, 0x12, 0x81, 0x53, 0x1a, 0xfb, 0xff, 0x72, 0x35, + 0x29, 0x95, 0x86, 0x05, 0x76, 0x82, 0xf3, 0x30, 0xb2, 0x15, 0xc6, 0x09, 0xa5, 0x66, 0x75, 0x0c, + 0xa6, 0x8a, 0xd1, 0x65, 0x01, 0xc7, 0x8a, 0x02, 0xbd, 0x0a, 0xe3, 0x0d, 0xbd, 0x02, 0xb1, 0x8d, + 0x9d, 0x12, 0x45, 0xcc, 0xda, 0xb1, 0x49, 0x8b, 0x2e, 0xc2, 0x08, 0xf3, 0x72, 0x37, 0x42, 0x5f, + 0x98, 0x90, 0x72, 0x57, 0x1e, 0xa9, 0x09, 0xf8, 0xbe, 0xf6, 0x1b, 0x2b, 0x6a, 0x6a, 0x88, 0xd3, + 0x26, 0xac, 0xd5, 0xc4, 0x06, 0xa2, 0x0c, 0xf1, 0xcb, 0x0c, 0x8a, 0x05, 0xd6, 0xfe, 0x97, 0x25, + 0x6d, 0x94, 0xa9, 0x01, 0x44, 0xd0, 0x67, 0x61, 0xf8, 0x9e, 0xe3, 0x25, 0x5e, 0xb0, 0x29, 0xb4, + 0x87, 0x17, 0x0b, 0xee, 0x26, 0xac, 0xf8, 0x6d, 0x5e, 0x94, 0xef, 0x7c, 0xe2, 0x0f, 0x96, 0x0c, + 0x29, 0xef, 0xa8, 0x1d, 0x04, 0x94, 0x77, 0xa9, 0x7f, 0xde, 0x98, 0x17, 0xe5, 0xbc, 0xc5, 0x1f, + 0x2c, 0x19, 0xa2, 0x0d, 0x00, 0x39, 0x97, 0x88, 0x2b, 0xbc, 0xcb, 0x1f, 0xed, 0x87, 0xfd, 0xba, + 0x2a, 0xbd, 0x34, 0x41, 0xf7, 0xda, 0xf4, 0x3f, 0xd6, 0x38, 0xdb, 0x09, 0x53, 0xc2, 0x3a, 0x9b, + 0x85, 0x3e, 0x47, 0x97, 0xb4, 0x13, 0x25, 0xc4, 0x5d, 0x4c, 0xb2, 0x0e, 0xfa, 0x83, 0x55, 0xec, + 0x75, 0xaf, 0x49, 0xf4, 0xe5, 0x2f, 0x98, 0xe0, 0x94, 0x9f, 0xfd, 0xdd, 0x32, 0xcc, 0xf4, 0x6a, + 0x2e, 0x9d, 0x92, 0xe4, 0xbe, 0x97, 0x2c, 0x53, 0x35, 0xc9, 0x32, 0xa7, 0xe4, 0x8a, 0x80, 0x63, + 0x45, 0x41, 0xe7, 0x46, 0xec, 0x6d, 0x4a, 0x63, 0x69, 0x30, 0x9d, 0x1b, 0x75, 0x06, 0xc5, 0x02, + 0x4b, 0xe9, 0x22, 0xe2, 0xc4, 0xe2, 0x70, 0x43, 0x9b, 0x43, 0x98, 0x41, 0xb1, 0xc0, 0xea, 0x0e, + 0x91, 0x81, 0x1c, 0x87, 0x88, 0x31, 0x44, 0x83, 0x0f, 0x76, 0x88, 0xd0, 0xe7, 0x01, 0x36, 0xbc, + 0xc0, 0x8b, 0xb7, 0x18, 0xf7, 0xa1, 0xbe, 0xb9, 0x2b, 0x25, 0x6b, 0x55, 0x71, 0xc1, 0x1a, 0x47, + 0xf4, 0x32, 0x8c, 0xaa, 0xe5, 0xb9, 0x56, 0x9d, 0x19, 0x36, 0x1d, 0xe2, 0xa9, 0xac, 0xaa, 0x62, + 0x9d, 0xce, 0x7e, 0x27, 0x3b, 0x5f, 0xc4, 0xaa, 0xd0, 0xc6, 0xd7, 0x2a, 0x3a, 0xbe, 0xa5, 0x83, + 0xc7, 0xd7, 0xfe, 0x2f, 0x65, 0x98, 0x34, 0x2a, 0x6b, 0xc7, 0x05, 0x24, 0xda, 0xeb, 0x74, 0xc3, + 0x72, 0x12, 0x22, 0xd6, 0xe4, 0xf9, 0x7e, 0x16, 0x8d, 0xbe, 0xbd, 0xd1, 0xb5, 0xc0, 0x39, 0xa1, + 0x2d, 0xa8, 0xf8, 0x4e, 0xcc, 0x5c, 0x2a, 0x44, 0xac, 0xc5, 0xfe, 0xd8, 0xa6, 0xe6, 0x87, 0x13, + 0x27, 0xda, 0xee, 0xc1, 0x6b, 0x49, 0x99, 0xd3, 0xdd, 0x96, 0x2a, 0x3b, 0xf2, 0x44, 0x4d, 0x35, + 0x87, 0x6a, 0x44, 0x3b, 0x98, 0xe3, 0xd0, 0x45, 0x18, 0x8b, 0x08, 0x9b, 0x29, 0xcb, 0x54, 0x9f, + 0x63, 0x53, 0x6f, 0x30, 0x55, 0xfc, 0xb0, 0x86, 0xc3, 0x06, 0x65, 0xaa, 0xf7, 0x0f, 0x1d, 0xa0, + 0xf7, 0x3f, 0x03, 0xc3, 0xec, 0x87, 0x9a, 0x15, 0xea, 0x0b, 0xad, 0x71, 0x30, 0x96, 0xf8, 0xec, + 0x24, 0x1a, 0x29, 0x38, 0x89, 0x9e, 0x85, 0x89, 0xaa, 0x43, 0x9a, 0x61, 0xb0, 0x12, 0xb8, 0xad, + 0xd0, 0x0b, 0x12, 0x34, 0x03, 0x03, 0x6c, 0x3f, 0xe1, 0xeb, 0x7d, 0x80, 0x72, 0xc0, 0x03, 0x54, + 0x77, 0xb7, 0xff, 0x9f, 0x05, 0xe3, 0x55, 0xe2, 0x93, 0x84, 0x70, 0xbb, 0x27, 0x46, 0xab, 0x80, + 0x36, 0x23, 0xa7, 0x41, 0x6a, 0x24, 0xf2, 0x42, 0xb7, 0x4e, 0x1a, 0x61, 0xc0, 0x0e, 0xa2, 0xe8, + 0x06, 0x79, 0x7a, 0x6f, 0x77, 0x0e, 0x5d, 0xea, 0xc0, 0xe2, 0x2e, 0x25, 0x90, 0x0b, 0xe3, 0xad, + 0x88, 0x18, 0x7e, 0x43, 0x2b, 0x5f, 0xd5, 0xa8, 0xe9, 0x45, 0xb8, 0x36, 0x6c, 0x80, 0xb0, 0xc9, + 0x14, 0x7d, 0x0a, 0xa6, 0xc2, 0xa8, 0xb5, 0xe5, 0x04, 0x55, 0xd2, 0x22, 0x81, 0x4b, 0x4d, 0x00, + 0xe1, 0xed, 0x98, 0xde, 0xdb, 0x9d, 0x9b, 0xba, 0x91, 0xc1, 0xe1, 0x0e, 0x6a, 0xfb, 0x5d, 0x38, + 0x55, 0x0d, 0xef, 0x05, 0xf7, 0x9c, 0xc8, 0x5d, 0xac, 0xad, 0x69, 0x0e, 0x84, 0x37, 0xa4, 0x81, + 0xca, 0x0f, 0xe1, 0x72, 0x76, 0x1f, 0x8d, 0x07, 0x37, 0x0d, 0x56, 0x3d, 0x9f, 0xf4, 0x70, 0x59, + 0xfc, 0x93, 0x92, 0x51, 0x67, 0x4a, 0xaf, 0xce, 0x17, 0xac, 0x9e, 0xe7, 0x0b, 0x9f, 0x83, 0x91, + 0x0d, 0x8f, 0xf8, 0x2e, 0x26, 0x1b, 0x62, 0x44, 0x5f, 0x28, 0x72, 0x00, 0xb3, 0x4a, 0xcb, 0x48, + 0x0f, 0x16, 0x37, 0x74, 0x57, 0x05, 0x1b, 0xac, 0x18, 0xa2, 0x36, 0x4c, 0x49, 0x5b, 0x49, 0x62, + 0xc5, 0x82, 0x7c, 0xb1, 0x98, 0x29, 0x66, 0x56, 0xc3, 0x3e, 0x01, 0xce, 0x30, 0xc4, 0x1d, 0x55, + 0x50, 0x1b, 0xb7, 0x49, 0xb7, 0xa3, 0x01, 0x36, 0x3d, 0x99, 0x8d, 0xcb, 0xcc, 0x75, 0x06, 0xb5, + 0x7f, 0xcd, 0x82, 0x47, 0x3a, 0x46, 0x4b, 0xf8, 0x32, 0x8e, 0xec, 0x1b, 0x65, 0x1d, 0x0a, 0xa5, + 0x7c, 0x87, 0x82, 0x7d, 0x03, 0xa6, 0x57, 0x9a, 0xad, 0x64, 0xa7, 0xea, 0x99, 0xc7, 0x22, 0xaf, + 0xc0, 0x50, 0x93, 0xb8, 0x5e, 0xbb, 0x29, 0x3e, 0xeb, 0x9c, 0x94, 0xdd, 0xd7, 0x18, 0x74, 0x7f, + 0x77, 0x6e, 0xbc, 0x9e, 0x84, 0x91, 0xb3, 0x49, 0x38, 0x00, 0x0b, 0x72, 0xfb, 0xc7, 0x16, 0x4c, + 0xca, 0x35, 0xbc, 0xe8, 0xba, 0x11, 0x89, 0x63, 0x34, 0x0b, 0x25, 0xaf, 0x25, 0x18, 0x81, 0x60, + 0x54, 0x5a, 0xab, 0xe1, 0x92, 0xd7, 0x42, 0x9f, 0x85, 0x0a, 0x3f, 0x4d, 0x4b, 0x27, 0x47, 0x9f, + 0xa7, 0x73, 0xcc, 0x7e, 0x5b, 0x97, 0x3c, 0x70, 0xca, 0x4e, 0x6a, 0xb2, 0x6c, 0x77, 0x28, 0x9b, + 0x67, 0x3b, 0x97, 0x05, 0x1c, 0x2b, 0x0a, 0x74, 0x0e, 0x46, 0x82, 0xd0, 0xe5, 0x07, 0x9e, 0x7c, + 0x9f, 0x67, 0x53, 0xee, 0xba, 0x80, 0x61, 0x85, 0xb5, 0xbf, 0x66, 0xc1, 0x98, 0xec, 0x63, 0x41, + 0xa5, 0x9a, 0x2e, 0x92, 0x54, 0xa1, 0x4e, 0x17, 0x09, 0x55, 0x8a, 0x19, 0xc6, 0xd0, 0x85, 0xcb, + 0xfd, 0xe8, 0xc2, 0xf6, 0x6f, 0x94, 0x60, 0x42, 0x36, 0xa7, 0xde, 0xbe, 0x13, 0x13, 0xaa, 0x2a, + 0x54, 0x1c, 0x3e, 0xf8, 0x44, 0xce, 0xb3, 0xe7, 0xf3, 0xec, 0x25, 0xe3, 0x9b, 0xa5, 0xaa, 0xc8, + 0xa2, 0xe4, 0x83, 0x53, 0x96, 0x68, 0x1b, 0x4e, 0x04, 0x61, 0xc2, 0xb6, 0x20, 0x85, 0x2f, 0x76, + 0x1a, 0x91, 0xad, 0xe7, 0x51, 0x51, 0xcf, 0x89, 0xeb, 0x59, 0x7e, 0xb8, 0xb3, 0x0a, 0x74, 0x43, + 0xfa, 0x81, 0xca, 0xac, 0xae, 0x67, 0x8b, 0xd5, 0xd5, 0xdb, 0x0d, 0x64, 0xff, 0x8e, 0x05, 0x15, + 0x49, 0x76, 0x1c, 0xc7, 0x52, 0xb7, 0x61, 0x38, 0x66, 0x9f, 0x48, 0x0e, 0xd7, 0xf9, 0x62, 0x5d, + 0xe0, 0xdf, 0x35, 0xdd, 0x77, 0xf9, 0xff, 0x18, 0x4b, 0x6e, 0xcc, 0x21, 0xae, 0x3a, 0xf2, 0xd0, + 0x39, 0xc4, 0x55, 0xcb, 0x7a, 0x9f, 0x3e, 0x8d, 0x1b, 0x16, 0x3b, 0x55, 0x1e, 0x5b, 0x11, 0xd9, + 0xf0, 0xee, 0x67, 0x95, 0xc7, 0x1a, 0x83, 0x62, 0x81, 0x45, 0x1b, 0x30, 0xd6, 0x90, 0x2e, 0xe3, + 0x54, 0x84, 0x7c, 0xa4, 0xa0, 0x7f, 0x5e, 0x1d, 0xf5, 0xf0, 0xf0, 0xa1, 0x65, 0x8d, 0x13, 0x36, + 0xf8, 0x52, 0x39, 0x95, 0x9e, 0x66, 0x97, 0x0b, 0x3a, 0x57, 0x22, 0x92, 0xa4, 0x35, 0xf4, 0x3c, + 0xc8, 0xb6, 0xbf, 0x69, 0xc1, 0x10, 0xf7, 0x31, 0x16, 0x73, 0xd4, 0x6a, 0x87, 0x58, 0xe9, 0x78, + 0xde, 0xa2, 0x40, 0x71, 0xa6, 0x85, 0x6e, 0x43, 0x85, 0xfd, 0x60, 0xfe, 0x92, 0x72, 0x91, 0x58, + 0x2a, 0x5e, 0xbf, 0xde, 0xd4, 0x5b, 0x92, 0x01, 0x4e, 0x79, 0xd9, 0xdf, 0x2f, 0x53, 0xd1, 0x97, + 0x92, 0x1a, 0x7b, 0xbb, 0x75, 0x1c, 0x7b, 0x7b, 0xe9, 0xe8, 0xf7, 0xf6, 0x77, 0x61, 0xb2, 0xa1, + 0x1d, 0xa2, 0xa5, 0x5f, 0xfc, 0x42, 0xc1, 0x69, 0xa5, 0x9d, 0xbc, 0x71, 0x9f, 0xda, 0xb2, 0xc9, + 0x0e, 0x67, 0xf9, 0x23, 0x02, 0x63, 0x7c, 0x3e, 0x88, 0xfa, 0x06, 0x58, 0x7d, 0x0b, 0x45, 0x66, + 0x98, 0x5e, 0x19, 0x9b, 0xc5, 0x75, 0x8d, 0x11, 0x36, 0xd8, 0xda, 0xbf, 0x32, 0x08, 0x83, 0x2b, + 0xdb, 0x24, 0x48, 0x8e, 0x41, 0xd4, 0x35, 0x61, 0xc2, 0x0b, 0xb6, 0x43, 0x7f, 0x9b, 0xb8, 0x1c, + 0x7f, 0xb8, 0xed, 0xfd, 0xb4, 0xa8, 0x64, 0x62, 0xcd, 0x60, 0x86, 0x33, 0xcc, 0x8f, 0xc2, 0x9a, + 0x7f, 0x1d, 0x86, 0xf8, 0xcc, 0x10, 0xa6, 0x7c, 0x8e, 0xcf, 0x9d, 0x0d, 0xac, 0x58, 0x41, 0xa9, + 0xcf, 0x81, 0xbb, 0xfb, 0x05, 0x23, 0xf4, 0x0e, 0x4c, 0x6c, 0x78, 0x51, 0x9c, 0x50, 0x83, 0x3c, + 0x4e, 0x9c, 0x66, 0xeb, 0x10, 0x76, 0xbc, 0x1a, 0x91, 0x55, 0x83, 0x13, 0xce, 0x70, 0x46, 0x9b, + 0x30, 0x4e, 0xcd, 0xc8, 0xb4, 0xaa, 0xe1, 0xbe, 0xab, 0x52, 0x6e, 0xbc, 0xab, 0x3a, 0x23, 0x6c, + 0xf2, 0xa5, 0x22, 0xa9, 0xc1, 0xcc, 0xce, 0x11, 0xa6, 0xdd, 0x28, 0x91, 0xc4, 0xed, 0x4d, 0x8e, + 0xa3, 0x92, 0x8d, 0x45, 0xb3, 0x54, 0x4c, 0xc9, 0x96, 0xc6, 0xac, 0xd8, 0xdf, 0xa6, 0x7b, 0x31, + 0x1d, 0xc3, 0x63, 0xd8, 0xbe, 0x2e, 0x9b, 0xdb, 0xd7, 0x93, 0x05, 0xbe, 0x6c, 0x8f, 0xad, 0xeb, + 0x6d, 0x18, 0xd5, 0x3e, 0x3c, 0x5a, 0x80, 0x4a, 0x43, 0x06, 0x5c, 0x08, 0x29, 0xae, 0x54, 0x29, + 0x15, 0x89, 0x81, 0x53, 0x1a, 0x3a, 0x2e, 0x54, 0x05, 0xcd, 0x86, 0x67, 0x51, 0x05, 0x15, 0x33, + 0x8c, 0xfd, 0x22, 0xc0, 0xca, 0x7d, 0xd2, 0x58, 0xe4, 0x26, 0x9e, 0x76, 0x06, 0x67, 0xf5, 0x3e, + 0x83, 0xb3, 0xbf, 0x65, 0xc1, 0xc4, 0xea, 0xb2, 0xa1, 0xd3, 0xcf, 0x03, 0x70, 0xdd, 0xf8, 0xf6, + 0xed, 0xeb, 0xd2, 0xc7, 0xcc, 0x1d, 0x81, 0x0a, 0x8a, 0x35, 0x0a, 0xf4, 0x28, 0x94, 0xfd, 0x76, + 0x20, 0x54, 0xd6, 0xe1, 0xbd, 0xdd, 0xb9, 0xf2, 0xd5, 0x76, 0x80, 0x29, 0x4c, 0x8b, 0x83, 0x2a, + 0x17, 0x8e, 0x83, 0xca, 0x8f, 0x08, 0xfe, 0x7a, 0x19, 0xa6, 0x56, 0x7d, 0x72, 0xdf, 0x68, 0xf5, + 0xd3, 0x30, 0xe4, 0x46, 0xde, 0x36, 0x89, 0xb2, 0x8a, 0x40, 0x95, 0x41, 0xb1, 0xc0, 0x16, 0x0e, + 0xcd, 0x7a, 0xab, 0x73, 0x23, 0x3f, 0xba, 0xb0, 0xb4, 0xdc, 0x3e, 0xa3, 0x0d, 0x18, 0xe6, 0x67, + 0xb6, 0xf1, 0xcc, 0x20, 0x9b, 0x8a, 0xaf, 0x1e, 0xdc, 0x98, 0xec, 0xf8, 0xcc, 0x0b, 0x1f, 0x08, + 0x0f, 0x8a, 0x51, 0xb2, 0x4c, 0x40, 0xb1, 0x64, 0x3e, 0xfb, 0x71, 0x18, 0xd3, 0x29, 0xfb, 0x8a, + 0x8e, 0xf9, 0xab, 0x16, 0x9c, 0x5c, 0xf5, 0xc3, 0xc6, 0xdd, 0x4c, 0xec, 0xdc, 0xcb, 0x30, 0x4a, + 0x17, 0x53, 0x6c, 0x04, 0x96, 0x1a, 0x11, 0xb4, 0x02, 0x85, 0x75, 0x3a, 0xad, 0xd8, 0xcd, 0x9b, + 0x6b, 0xd5, 0x6e, 0x81, 0xb7, 0x02, 0x85, 0x75, 0x3a, 0xfb, 0xf7, 0x2c, 0x78, 0xfc, 0xd2, 0xf2, + 0x4a, 0x8d, 0x44, 0xb1, 0x17, 0x27, 0x24, 0x48, 0x3a, 0x62, 0x7f, 0xa9, 0xce, 0xe8, 0x6a, 0x4d, + 0x49, 0x75, 0xc6, 0x2a, 0x6b, 0x85, 0xc0, 0x3e, 0x2c, 0x01, 0xf0, 0xdf, 0xb4, 0xe0, 0xe4, 0x25, + 0x2f, 0xc1, 0xa4, 0x15, 0x66, 0xc3, 0x75, 0x23, 0xd2, 0x0a, 0x63, 0x2f, 0x09, 0xa3, 0x9d, 0x6c, + 0xb8, 0x2e, 0x56, 0x18, 0xac, 0x51, 0xf1, 0x9a, 0xb7, 0xbd, 0x98, 0xb6, 0xb4, 0x64, 0x9a, 0xba, + 0x58, 0xc0, 0xb1, 0xa2, 0xa0, 0x1d, 0x73, 0xbd, 0x88, 0xa9, 0x0c, 0x3b, 0x62, 0x05, 0xab, 0x8e, + 0x55, 0x25, 0x02, 0xa7, 0x34, 0xf6, 0xdf, 0xb3, 0xe0, 0xd4, 0x25, 0xbf, 0x1d, 0x27, 0x24, 0xda, + 0x88, 0x8d, 0xc6, 0xbe, 0x08, 0x15, 0x22, 0x95, 0x7b, 0xd1, 0x56, 0xb5, 0x69, 0x28, 0xad, 0x9f, + 0xc7, 0x0a, 0x2b, 0xba, 0x02, 0x21, 0xa9, 0xfd, 0x05, 0x50, 0xfe, 0x66, 0x09, 0xc6, 0x2f, 0xaf, + 0xaf, 0xd7, 0x2e, 0x91, 0x44, 0x48, 0xc9, 0x7c, 0xa7, 0x14, 0xd6, 0x2c, 0xf2, 0x83, 0x94, 0x9f, + 0x76, 0xe2, 0xf9, 0xf3, 0xfc, 0x4a, 0xc7, 0xfc, 0x5a, 0x90, 0xdc, 0x88, 0xea, 0x49, 0xe4, 0x05, + 0x9b, 0x5d, 0x6d, 0x78, 0x29, 0xcb, 0xcb, 0xbd, 0x64, 0x39, 0x7a, 0x11, 0x86, 0xd8, 0x9d, 0x12, + 0xa9, 0x7c, 0x7c, 0x50, 0xe9, 0x09, 0x0c, 0xba, 0xbf, 0x3b, 0x57, 0xb9, 0x89, 0xd7, 0xf8, 0x1f, + 0x2c, 0x48, 0xd1, 0x5b, 0x30, 0xba, 0x95, 0x24, 0xad, 0xcb, 0xc4, 0x71, 0x49, 0x24, 0xe5, 0xc4, + 0xb9, 0x83, 0xe5, 0x04, 0x1d, 0x0e, 0x5e, 0x20, 0x5d, 0x5a, 0x29, 0x2c, 0xc6, 0x3a, 0x47, 0xbb, + 0x0e, 0x90, 0xe2, 0x1e, 0x90, 0x0d, 0x62, 0xff, 0x7c, 0x09, 0x86, 0x2f, 0x3b, 0x81, 0xeb, 0x93, + 0x08, 0xad, 0xc2, 0x00, 0xb9, 0x4f, 0x1a, 0x62, 0x23, 0xcf, 0x69, 0x7a, 0xba, 0xd9, 0x71, 0xbf, + 0x1a, 0xfd, 0x8f, 0x59, 0x79, 0x84, 0x61, 0x98, 0xb6, 0xfb, 0x92, 0x8a, 0xe4, 0x7e, 0x2e, 0x7f, + 0x14, 0xd4, 0xa4, 0xe0, 0x3b, 0xa5, 0x00, 0x61, 0xc9, 0x88, 0x79, 0xa0, 0x1a, 0xad, 0x3a, 0x15, + 0x6f, 0x49, 0x31, 0xcb, 0x6e, 0x7d, 0xb9, 0xc6, 0xc9, 0x05, 0x5f, 0xee, 0x81, 0x92, 0x40, 0x9c, + 0xb2, 0xb3, 0x2f, 0xc2, 0x34, 0x3b, 0x33, 0x75, 0x92, 0x2d, 0x63, 0xd5, 0xe4, 0x4e, 0x4f, 0xfb, + 0x87, 0x25, 0x38, 0xb1, 0x56, 0x5f, 0xae, 0x9b, 0xbe, 0xc3, 0x8b, 0x30, 0xc6, 0x37, 0x68, 0x3a, + 0xe9, 0x1c, 0x5f, 0x94, 0x57, 0x7e, 0xfe, 0x75, 0x0d, 0x87, 0x0d, 0x4a, 0xf4, 0x38, 0x94, 0xbd, + 0x77, 0x83, 0x6c, 0xe4, 0xdd, 0xda, 0xeb, 0xd7, 0x31, 0x85, 0x53, 0x34, 0xdd, 0xeb, 0xb9, 0x90, + 0x53, 0x68, 0xb5, 0xdf, 0xbf, 0x06, 0x13, 0x5e, 0xdc, 0x88, 0xbd, 0xb5, 0x80, 0x4a, 0x00, 0xa7, + 0x21, 0xa7, 0x6f, 0xaa, 0x9c, 0xd3, 0xa6, 0x2a, 0x2c, 0xce, 0x50, 0x6b, 0x12, 0x77, 0xb0, 0xb0, + 0xbe, 0x90, 0x1b, 0xd2, 0x4d, 0x55, 0xa1, 0x16, 0xeb, 0x5d, 0xcc, 0xe2, 0x78, 0x84, 0x2a, 0xc4, + 0x3b, 0x1c, 0x63, 0x89, 0xb3, 0xdf, 0x81, 0x8a, 0x0a, 0xc5, 0x92, 0x11, 0x88, 0x56, 0x8f, 0x08, + 0xc4, 0x7c, 0xc9, 0x24, 0x1d, 0xbf, 0xe5, 0xae, 0x8e, 0xdf, 0x7f, 0x66, 0x41, 0x1a, 0x4b, 0x82, + 0x30, 0x54, 0x5a, 0x21, 0x3b, 0xc8, 0x89, 0xe4, 0x89, 0xe9, 0x53, 0x39, 0x13, 0x96, 0x2f, 0x18, + 0x3e, 0xa5, 0x6a, 0xb2, 0x2c, 0x4e, 0xd9, 0xa0, 0xab, 0x30, 0xdc, 0x8a, 0x48, 0x3d, 0x61, 0xd7, + 0x07, 0xfa, 0xe0, 0xc8, 0xc7, 0x86, 0x97, 0xc4, 0x92, 0x85, 0xfd, 0x6f, 0x2c, 0x80, 0xab, 0x5e, + 0xd3, 0x4b, 0xb0, 0x13, 0x6c, 0x92, 0x63, 0xb0, 0x0a, 0xaf, 0xc3, 0x40, 0xdc, 0x22, 0x8d, 0x62, + 0x47, 0x71, 0x69, 0xcb, 0xea, 0x2d, 0xd2, 0x48, 0x3f, 0x07, 0xfd, 0x87, 0x19, 0x1f, 0xfb, 0x7b, + 0x00, 0x13, 0x29, 0x19, 0xd5, 0xcc, 0xd1, 0xf3, 0x46, 0xdc, 0xfc, 0xa3, 0x99, 0xb8, 0xf9, 0x0a, + 0xa3, 0xd6, 0x42, 0xe5, 0x13, 0x28, 0x37, 0x9d, 0xfb, 0xc2, 0x10, 0x78, 0xb9, 0x68, 0x83, 0x68, + 0x4d, 0xf3, 0xd7, 0x9c, 0xfb, 0x5c, 0xef, 0x7a, 0x4e, 0x4e, 0xa4, 0x6b, 0xce, 0xfd, 0x7d, 0x7e, + 0xe0, 0xc6, 0x16, 0x2c, 0xb5, 0x3c, 0xbe, 0xfc, 0xc7, 0xe9, 0x7f, 0x26, 0x43, 0x69, 0x75, 0xac, + 0x56, 0x2f, 0x10, 0x7e, 0xcc, 0x3e, 0x6b, 0xf5, 0x82, 0x6c, 0xad, 0x5e, 0x50, 0xa0, 0x56, 0x8f, + 0x05, 0x98, 0x0e, 0x0b, 0xf7, 0x3f, 0x8b, 0xce, 0x1b, 0xbd, 0xf0, 0xb1, 0xbe, 0xaa, 0x16, 0xe7, + 0x08, 0xbc, 0xfa, 0x05, 0xa9, 0x6c, 0x0a, 0x68, 0x6e, 0x13, 0x64, 0xd5, 0xe8, 0xef, 0x5b, 0x30, + 0x21, 0x7e, 0x63, 0xf2, 0x6e, 0x9b, 0xc4, 0x89, 0xd8, 0xd4, 0x3e, 0x75, 0x98, 0xd6, 0x08, 0x16, + 0xbc, 0x51, 0x1f, 0x95, 0x12, 0xc9, 0x44, 0xe6, 0xb6, 0x2d, 0xd3, 0x1e, 0xf4, 0x3d, 0x0b, 0xa6, + 0x9b, 0xce, 0x7d, 0x5e, 0x23, 0x87, 0x61, 0x27, 0xf1, 0x42, 0x11, 0x81, 0xb8, 0xda, 0xef, 0x3c, + 0xe9, 0x60, 0xc4, 0x9b, 0x2b, 0x83, 0x8b, 0xa6, 0xbb, 0x91, 0xe4, 0x36, 0xba, 0x6b, 0x0b, 0x67, + 0x37, 0x60, 0x44, 0x4e, 0xcc, 0x2e, 0x6a, 0x7e, 0x55, 0xdf, 0xbb, 0x73, 0x8c, 0xea, 0x79, 0xe9, + 0x1a, 0x9b, 0x7f, 0xbd, 0xed, 0x04, 0x89, 0x97, 0xec, 0x68, 0x66, 0x01, 0xab, 0x47, 0x4c, 0xc5, + 0x23, 0xad, 0xe7, 0x1d, 0x18, 0xd3, 0xe7, 0xdd, 0x91, 0xd6, 0xf5, 0x2e, 0x9c, 0xec, 0x32, 0xab, + 0x8e, 0xb4, 0xca, 0x7b, 0xf0, 0x68, 0xcf, 0xf9, 0x71, 0x94, 0x15, 0xdb, 0xbf, 0x69, 0xe9, 0xa2, + 0xf3, 0x18, 0x9c, 0x2e, 0xd7, 0x4c, 0xa7, 0xcb, 0xb9, 0xa2, 0x6b, 0xa8, 0x87, 0xe7, 0x65, 0x43, + 0x6f, 0x3e, 0xdd, 0x12, 0xd0, 0x3a, 0x0c, 0xf9, 0x14, 0x22, 0xcf, 0xbc, 0xce, 0xf7, 0xb3, 0x4a, + 0x53, 0xa5, 0x84, 0xc1, 0x63, 0x2c, 0x78, 0xd9, 0xdf, 0xb3, 0x60, 0xe0, 0xcf, 0xf1, 0x56, 0x4f, + 0x07, 0x6b, 0x71, 0x39, 0x7d, 0x1e, 0x3b, 0xf7, 0x56, 0xee, 0x27, 0x24, 0x88, 0x99, 0x0e, 0xda, + 0xeb, 0xd4, 0x7e, 0x94, 0x56, 0x25, 0x03, 0x25, 0x5e, 0x85, 0x71, 0xdf, 0xb9, 0x43, 0x7c, 0xe9, + 0x30, 0xce, 0x5a, 0x6c, 0x57, 0x75, 0x24, 0x36, 0x69, 0x69, 0xe1, 0x0d, 0xdd, 0x9f, 0x2e, 0x94, + 0x24, 0x55, 0xd8, 0x70, 0xb6, 0x63, 0x93, 0x96, 0x9a, 0x0c, 0xf7, 0x9c, 0xa4, 0xb1, 0x25, 0xac, + 0x39, 0xd5, 0xdc, 0xdb, 0x14, 0x88, 0x39, 0x0e, 0x2d, 0xc2, 0xa4, 0x9c, 0xb1, 0xb7, 0xa8, 0x99, + 0x1f, 0x06, 0x42, 0xcf, 0x54, 0x37, 0x83, 0xb1, 0x89, 0xc6, 0x59, 0x7a, 0xf4, 0x71, 0x98, 0xa0, + 0x83, 0x13, 0xb6, 0x13, 0x19, 0x06, 0x32, 0xc8, 0xc2, 0x40, 0x58, 0x14, 0xf1, 0xba, 0x81, 0xc1, + 0x19, 0x4a, 0xfb, 0x2d, 0x38, 0x79, 0x35, 0x74, 0xdc, 0x25, 0xc7, 0x77, 0x82, 0x06, 0x89, 0xd6, + 0x82, 0xcd, 0xdc, 0xe3, 0x6b, 0xfd, 0x88, 0xb9, 0x94, 0x77, 0xc4, 0x6c, 0x47, 0x80, 0xf4, 0x0a, + 0x44, 0x00, 0xd3, 0x9b, 0x30, 0xec, 0xf1, 0xaa, 0xc4, 0xb4, 0x7d, 0x21, 0xcf, 0x1f, 0xd5, 0xd1, + 0x46, 0x2d, 0x20, 0x87, 0x03, 0xb0, 0x64, 0x49, 0x4d, 0x90, 0x6e, 0x0e, 0xac, 0x7c, 0x2b, 0xcf, + 0xfe, 0xeb, 0x16, 0x4c, 0x5e, 0xcf, 0x5c, 0x3b, 0x7d, 0x1a, 0x86, 0x78, 0xf2, 0x82, 0xac, 0x8b, + 0xa5, 0xce, 0xa0, 0x58, 0x60, 0x1f, 0xb8, 0x85, 0xff, 0xcb, 0x25, 0xa8, 0xb0, 0x50, 0xd8, 0x16, + 0x35, 0x27, 0x8e, 0x5e, 0x4d, 0xbd, 0x66, 0xa8, 0xa9, 0x39, 0x56, 0xa6, 0x6a, 0x58, 0x2f, 0x2d, + 0x15, 0xdd, 0x54, 0xd7, 0x31, 0x0b, 0x19, 0x98, 0x29, 0x43, 0x7e, 0x65, 0x6f, 0xc2, 0xbc, 0xbd, + 0x29, 0xaf, 0x6a, 0xb2, 0x43, 0x5f, 0x45, 0xfb, 0xd0, 0x1d, 0xfa, 0xaa, 0x96, 0xf5, 0x10, 0x4e, + 0x35, 0xad, 0xf1, 0x4c, 0x7c, 0x7f, 0x92, 0x05, 0x38, 0x3a, 0xbe, 0xf7, 0x05, 0xa2, 0x6e, 0x35, + 0xcf, 0x89, 0x80, 0x45, 0x01, 0xdd, 0x67, 0x72, 0x46, 0xfc, 0xe3, 0x97, 0xd6, 0xd3, 0x22, 0xf6, + 0x65, 0x98, 0xcc, 0x0c, 0x1d, 0x7a, 0x19, 0x06, 0x5b, 0x5b, 0x4e, 0x4c, 0x32, 0x71, 0x2c, 0x83, + 0x35, 0x0a, 0xdc, 0xdf, 0x9d, 0x9b, 0x50, 0x05, 0x18, 0x04, 0x73, 0x6a, 0xfb, 0x2b, 0x25, 0x18, + 0xb8, 0x1e, 0xba, 0xc7, 0x31, 0xd5, 0x2e, 0x1b, 0x53, 0xed, 0xe9, 0xfc, 0x94, 0x17, 0x3d, 0x67, + 0x59, 0x2d, 0x33, 0xcb, 0xce, 0x15, 0xe0, 0x75, 0xf0, 0x04, 0x6b, 0xc2, 0x28, 0x4b, 0xa9, 0x21, + 0x02, 0x79, 0x5e, 0x34, 0x2c, 0xab, 0xb9, 0x8c, 0x65, 0x35, 0xa9, 0x91, 0x6a, 0xf6, 0xd5, 0x33, + 0x30, 0x2c, 0x02, 0x47, 0xb2, 0xe1, 0x9d, 0x82, 0x16, 0x4b, 0xbc, 0xfd, 0xaf, 0xca, 0x60, 0xa4, + 0xf0, 0x40, 0xbf, 0x63, 0xc1, 0x7c, 0xc4, 0xaf, 0xca, 0xb8, 0xd5, 0x76, 0xe4, 0x05, 0x9b, 0xf5, + 0xc6, 0x16, 0x71, 0xdb, 0xbe, 0x17, 0x6c, 0xae, 0x6d, 0x06, 0xa1, 0x02, 0xaf, 0xdc, 0x27, 0x8d, + 0x36, 0xf3, 0xd3, 0x16, 0xce, 0x1c, 0xa2, 0x0e, 0x4d, 0x2f, 0xec, 0xed, 0xce, 0xcd, 0xe3, 0xbe, + 0x6a, 0xc1, 0x7d, 0xb6, 0x0a, 0xfd, 0x91, 0x05, 0x0b, 0x3c, 0x89, 0x45, 0xf1, 0x9e, 0x14, 0xb2, + 0x48, 0x6b, 0x92, 0x69, 0xca, 0x6e, 0x9d, 0x44, 0xcd, 0xa5, 0x57, 0xc4, 0x20, 0x2f, 0xd4, 0xfa, + 0xab, 0x15, 0xf7, 0xdb, 0x4c, 0xfb, 0xdf, 0x95, 0x61, 0x9c, 0x8e, 0x67, 0x7a, 0x71, 0xfd, 0x65, + 0x63, 0x9a, 0x3c, 0x91, 0x99, 0x26, 0x27, 0x0c, 0xe2, 0x07, 0x73, 0x67, 0x3d, 0x86, 0x13, 0xbe, + 0x13, 0x27, 0x97, 0x89, 0x13, 0x25, 0x77, 0x88, 0xc3, 0xce, 0x26, 0xb3, 0x71, 0x0f, 0x05, 0x8e, + 0x3b, 0x55, 0x30, 0xd2, 0xd5, 0x2c, 0x33, 0xdc, 0xc9, 0x1f, 0x6d, 0x03, 0x62, 0xe7, 0xa0, 0x91, + 0x13, 0xc4, 0xbc, 0x2f, 0x9e, 0xf0, 0xeb, 0xf6, 0x57, 0xeb, 0xac, 0xa8, 0x15, 0x5d, 0xed, 0xe0, + 0x86, 0xbb, 0xd4, 0xa0, 0x9d, 0x74, 0x0f, 0x16, 0x3d, 0xe9, 0x1e, 0xca, 0x89, 0xab, 0xfe, 0xaa, + 0x05, 0x27, 0xe9, 0x67, 0x31, 0x63, 0x70, 0x63, 0x14, 0xc2, 0x24, 0x9d, 0x76, 0x3e, 0x49, 0x24, + 0x4c, 0xac, 0xaf, 0x1c, 0xcd, 0xda, 0xe4, 0x93, 0xaa, 0x6f, 0x57, 0x4c, 0x66, 0x38, 0xcb, 0xdd, + 0xfe, 0x96, 0x05, 0x2c, 0xe2, 0xee, 0x18, 0x36, 0xb3, 0x4b, 0xe6, 0x66, 0x66, 0xe7, 0x4b, 0x8c, + 0x1e, 0xfb, 0xd8, 0x4b, 0x30, 0x45, 0xb1, 0xb5, 0x28, 0xbc, 0xbf, 0x23, 0x15, 0xed, 0x7c, 0x07, + 0xef, 0x57, 0x4b, 0x7c, 0xd9, 0xa8, 0x3b, 0x7f, 0xe8, 0x17, 0x2c, 0x18, 0x69, 0x38, 0x2d, 0xa7, + 0xc1, 0x13, 0x20, 0x15, 0xf0, 0xce, 0x18, 0xe5, 0xe7, 0x97, 0x45, 0x59, 0xee, 0x59, 0xf8, 0x88, + 0xec, 0xba, 0x04, 0xe7, 0x7a, 0x13, 0x54, 0xe5, 0xb3, 0x77, 0x61, 0xdc, 0x60, 0x76, 0xa4, 0x66, + 0xe8, 0x2f, 0x58, 0x5c, 0xe8, 0x2b, 0x53, 0xe1, 0x1e, 0x9c, 0x08, 0xb4, 0xff, 0x54, 0x9c, 0x49, + 0xcd, 0x78, 0xbe, 0xb8, 0x58, 0x67, 0x52, 0x50, 0x8b, 0x2e, 0xcc, 0x30, 0xc4, 0x9d, 0x75, 0xd8, + 0xbf, 0x6a, 0xc1, 0x23, 0x3a, 0xa1, 0x76, 0x49, 0x33, 0xcf, 0x6f, 0x5c, 0x85, 0x91, 0xb0, 0x45, + 0x22, 0x27, 0x35, 0x8b, 0xce, 0xc9, 0xf1, 0xbf, 0x21, 0xe0, 0xfb, 0xbb, 0x73, 0xd3, 0x3a, 0x77, + 0x09, 0xc7, 0xaa, 0x24, 0xb2, 0x61, 0x88, 0x8d, 0x4b, 0x2c, 0xae, 0xd7, 0xb2, 0x84, 0x40, 0xec, + 0x50, 0x25, 0xc6, 0x02, 0x63, 0xff, 0x2d, 0x8b, 0x4f, 0x37, 0xbd, 0xe9, 0xe8, 0x8b, 0x30, 0xd5, + 0xa4, 0x16, 0xd4, 0xca, 0xfd, 0x16, 0xdd, 0x48, 0xd9, 0x71, 0xb2, 0x55, 0x64, 0xfb, 0xe8, 0xd1, + 0xdd, 0xa5, 0x19, 0xd1, 0xfa, 0xa9, 0x6b, 0x19, 0xb6, 0xb8, 0xa3, 0x22, 0xfb, 0x1f, 0x96, 0xf8, + 0x9a, 0x65, 0x3a, 0xdc, 0x33, 0x30, 0xdc, 0x0a, 0xdd, 0xe5, 0xb5, 0x2a, 0x16, 0x63, 0xa5, 0x84, + 0x4e, 0x8d, 0x83, 0xb1, 0xc4, 0xa3, 0x0b, 0x00, 0xe4, 0x7e, 0x42, 0xa2, 0xc0, 0xf1, 0xd5, 0x31, + 0xb0, 0x52, 0x95, 0x56, 0x14, 0x06, 0x6b, 0x54, 0xb4, 0x4c, 0x2b, 0x0a, 0xb7, 0x3d, 0x97, 0xdd, + 0x2e, 0x28, 0x9b, 0x65, 0x6a, 0x0a, 0x83, 0x35, 0x2a, 0x6a, 0xb7, 0xb6, 0x83, 0x98, 0x6f, 0x63, + 0xce, 0x1d, 0x91, 0xbf, 0x66, 0x24, 0xb5, 0x5b, 0x6f, 0xea, 0x48, 0x6c, 0xd2, 0xa2, 0x2b, 0x30, + 0x94, 0x38, 0xec, 0x70, 0x73, 0xb0, 0x48, 0xa4, 0xc8, 0x3a, 0xa5, 0xd5, 0x13, 0x06, 0xd1, 0xa2, + 0x58, 0xb0, 0xb0, 0xff, 0xa0, 0x02, 0x90, 0x6a, 0x5d, 0xe8, 0x2b, 0x9d, 0x0b, 0xfe, 0xa3, 0x45, + 0x55, 0xb6, 0x07, 0xb7, 0xda, 0xd1, 0x7b, 0x16, 0x8c, 0x3a, 0xbe, 0x1f, 0x36, 0x9c, 0x84, 0x0d, + 0x4f, 0xa9, 0xa8, 0xe8, 0x11, 0x2d, 0x59, 0x4c, 0xcb, 0xf2, 0xc6, 0xbc, 0x28, 0x0f, 0x1c, 0x35, + 0x4c, 0x6e, 0x7b, 0xf4, 0x26, 0xa0, 0x8f, 0x48, 0xad, 0x9d, 0x7f, 0xe1, 0xd9, 0xac, 0xd6, 0x5e, + 0x61, 0x02, 0x57, 0x53, 0xd8, 0xd1, 0x5b, 0x46, 0xbe, 0x97, 0x81, 0x22, 0x57, 0x44, 0x0d, 0x3d, + 0x24, 0x2f, 0xd5, 0x0b, 0xfa, 0xac, 0x1e, 0x52, 0x3d, 0x58, 0xe4, 0x0e, 0xb6, 0xa6, 0x0e, 0xe7, + 0x84, 0x53, 0x27, 0x30, 0xe9, 0x9a, 0x3b, 0xaf, 0x08, 0x0b, 0x7b, 0x21, 0xbf, 0x86, 0xcc, 0x96, + 0x9d, 0xee, 0xb5, 0x19, 0x04, 0xce, 0x56, 0x81, 0x3e, 0xcb, 0x03, 0xde, 0xd7, 0x82, 0x8d, 0x50, + 0x84, 0x86, 0x9d, 0x2f, 0xf0, 0xcd, 0x77, 0xe2, 0x84, 0x34, 0x69, 0x99, 0x74, 0x73, 0xbd, 0x2e, + 0xb8, 0x60, 0xc5, 0x0f, 0xad, 0xc3, 0x10, 0xbb, 0x11, 0x14, 0xcf, 0x8c, 0x14, 0xf1, 0xc4, 0x99, + 0x17, 0x61, 0xd3, 0xf5, 0xc3, 0xfe, 0xc6, 0x58, 0xf0, 0x42, 0x97, 0xe5, 0x55, 0xf8, 0x78, 0x2d, + 0xb8, 0x19, 0x13, 0x76, 0x15, 0xbe, 0xb2, 0xf4, 0xa1, 0xf4, 0x6e, 0x3b, 0x87, 0x77, 0xcd, 0x78, + 0x67, 0x94, 0xa4, 0x8a, 0x8d, 0xf8, 0x2f, 0x13, 0xe9, 0xcd, 0x40, 0x91, 0x86, 0x9a, 0x69, 0xf7, + 0xd2, 0xc1, 0xbe, 0x65, 0x32, 0xc3, 0x59, 0xee, 0xc7, 0xba, 0xa5, 0xce, 0x06, 0x30, 0x95, 0x5d, + 0x94, 0x47, 0xba, 0x85, 0xff, 0x64, 0x00, 0x26, 0xcc, 0xc9, 0x81, 0x16, 0xa0, 0x22, 0x98, 0xa8, + 0xc4, 0x5a, 0x6a, 0x0d, 0x5c, 0x93, 0x08, 0x9c, 0xd2, 0xb0, 0x14, 0x63, 0xac, 0xb8, 0x16, 0x14, + 0x94, 0xa6, 0x18, 0x53, 0x18, 0xac, 0x51, 0x51, 0x4d, 0xf8, 0x4e, 0x18, 0x26, 0x6a, 0x27, 0x50, + 0xf3, 0x66, 0x89, 0x41, 0xb1, 0xc0, 0xd2, 0x1d, 0xe0, 0x2e, 0xfd, 0x98, 0xbe, 0xe9, 0x55, 0x54, + 0x3b, 0xc0, 0x15, 0x1d, 0x89, 0x4d, 0x5a, 0xba, 0xa3, 0x85, 0x31, 0x9b, 0x88, 0x42, 0xdf, 0x4e, + 0x83, 0xac, 0xea, 0xfc, 0x96, 0x9c, 0xc4, 0xa3, 0xcf, 0xc0, 0x23, 0xea, 0x52, 0x1b, 0xe6, 0x5e, + 0x5a, 0x59, 0xe3, 0x90, 0x61, 0x32, 0x3f, 0xb2, 0xdc, 0x9d, 0x0c, 0xf7, 0x2a, 0x8f, 0x5e, 0x83, + 0x09, 0xa1, 0x2b, 0x4b, 0x8e, 0xc3, 0xe6, 0x09, 0xfc, 0x15, 0x03, 0x8b, 0x33, 0xd4, 0xa8, 0x0a, + 0x53, 0x14, 0xc2, 0x94, 0x54, 0xc9, 0x81, 0x5f, 0xce, 0x53, 0x5b, 0xfd, 0x95, 0x0c, 0x1e, 0x77, + 0x94, 0x40, 0x8b, 0x30, 0xc9, 0x95, 0x15, 0x6a, 0x18, 0xb2, 0xef, 0x20, 0xe2, 0x39, 0xd5, 0x42, + 0xb8, 0x61, 0xa2, 0x71, 0x96, 0x1e, 0x5d, 0x84, 0x31, 0x27, 0x6a, 0x6c, 0x79, 0x09, 0x69, 0x24, + 0xed, 0x88, 0x27, 0x9a, 0xd0, 0x42, 0x18, 0x16, 0x35, 0x1c, 0x36, 0x28, 0xed, 0x2f, 0xc0, 0xc9, + 0x2e, 0xc1, 0xe3, 0x74, 0xe2, 0x38, 0x2d, 0x4f, 0xf6, 0x29, 0x13, 0x2e, 0xb5, 0x58, 0x5b, 0x93, + 0xbd, 0xd1, 0xa8, 0xe8, 0xec, 0x64, 0xee, 0x69, 0x2d, 0xef, 0xa5, 0x9a, 0x9d, 0xab, 0x12, 0x81, + 0x53, 0x1a, 0xfb, 0xcf, 0x2a, 0xa0, 0x79, 0x6f, 0x0a, 0x84, 0xc8, 0x5c, 0x84, 0x31, 0x99, 0xca, + 0x55, 0x4b, 0xa1, 0xa8, 0xba, 0x79, 0x49, 0xc3, 0x61, 0x83, 0x92, 0xb6, 0x2d, 0x90, 0x3e, 0xa9, + 0x6c, 0x70, 0x96, 0x72, 0x56, 0xe1, 0x94, 0x06, 0x9d, 0x87, 0x91, 0x98, 0xf8, 0x1b, 0x57, 0xbd, + 0xe0, 0xae, 0x98, 0xd8, 0x4a, 0x32, 0xd7, 0x05, 0x1c, 0x2b, 0x0a, 0xb4, 0x04, 0xe5, 0xb6, 0xe7, + 0x8a, 0xa9, 0x2c, 0xd5, 0x86, 0xf2, 0xcd, 0xb5, 0xea, 0xfe, 0xee, 0xdc, 0x13, 0xbd, 0xf2, 0xda, + 0x52, 0xfb, 0x3c, 0x9e, 0xa7, 0xcb, 0x8f, 0x16, 0xee, 0xe6, 0xa7, 0x1f, 0xea, 0xd3, 0x4f, 0x7f, + 0x01, 0x40, 0xf4, 0x5a, 0xce, 0xe5, 0x72, 0xfa, 0xd5, 0x2e, 0x29, 0x0c, 0xd6, 0xa8, 0xa8, 0x95, + 0xdf, 0x88, 0x88, 0x23, 0x0d, 0x61, 0x1e, 0xd4, 0x3c, 0x72, 0x78, 0x2b, 0x7f, 0x39, 0xcb, 0x0c, + 0x77, 0xf2, 0x47, 0x21, 0x9c, 0x70, 0xe9, 0x42, 0x32, 0x2a, 0xad, 0xf4, 0x1f, 0x49, 0x4d, 0x2b, + 0xac, 0x66, 0x19, 0xe1, 0x4e, 0xde, 0xe8, 0xf3, 0x30, 0x2b, 0x81, 0x9d, 0xd7, 0x56, 0xd9, 0x72, + 0x29, 0x2f, 0x9d, 0xd9, 0xdb, 0x9d, 0x9b, 0xad, 0xf6, 0xa4, 0xc2, 0x07, 0x70, 0x40, 0x6f, 0xc2, + 0x10, 0x3b, 0xd7, 0x89, 0x67, 0x46, 0xd9, 0x8e, 0xf7, 0x52, 0x91, 0x78, 0x7c, 0x3a, 0xeb, 0xe7, + 0xd9, 0xe9, 0x90, 0x88, 0x34, 0x4d, 0x0f, 0xcb, 0x18, 0x10, 0x0b, 0x9e, 0xa8, 0x05, 0xa3, 0x4e, + 0x10, 0x84, 0x89, 0xc3, 0x15, 0xb1, 0xb1, 0x22, 0xba, 0xa4, 0x56, 0xc5, 0x62, 0x5a, 0x96, 0xd7, + 0xa3, 0x82, 0xd7, 0x34, 0x0c, 0xd6, 0xab, 0x40, 0xf7, 0x60, 0x32, 0xbc, 0x47, 0x05, 0xa6, 0x3c, + 0xda, 0x88, 0x67, 0xc6, 0xcd, 0x8e, 0xe5, 0x38, 0x6a, 0x8d, 0xc2, 0x9a, 0x24, 0x33, 0x99, 0xe2, + 0x6c, 0x2d, 0x68, 0xde, 0x70, 0x57, 0x4f, 0xa4, 0xf1, 0xd4, 0xa9, 0xbb, 0x5a, 0xf7, 0x4e, 0xb3, + 0xab, 0xd1, 0x3c, 0x86, 0x92, 0x49, 0x84, 0xc9, 0xcc, 0xd5, 0xe8, 0x14, 0x85, 0x75, 0xba, 0xd9, + 0x8f, 0xc1, 0xa8, 0x36, 0xf0, 0xfd, 0x04, 0xee, 0xce, 0xbe, 0x06, 0x53, 0xd9, 0x01, 0xed, 0x2b, + 0xf0, 0xf7, 0x7f, 0x95, 0x60, 0xb2, 0xcb, 0xb9, 0xd1, 0x5d, 0x8f, 0x05, 0x9f, 0x1b, 0xa2, 0xef, + 0x8a, 0x17, 0xb8, 0x98, 0x61, 0x4c, 0x01, 0x56, 0x2a, 0x20, 0xc0, 0xa4, 0x34, 0x2d, 0xf7, 0x94, + 0xa6, 0x42, 0x68, 0x0d, 0xbc, 0x1f, 0xa1, 0x65, 0xee, 0x13, 0x83, 0x85, 0xf6, 0x89, 0x07, 0x20, + 0xe8, 0x8c, 0xad, 0x66, 0xb8, 0xc0, 0x56, 0xf3, 0xcd, 0x12, 0x4c, 0xa5, 0x41, 0xce, 0x22, 0xbf, + 0xf3, 0xd1, 0x1f, 0x43, 0xac, 0x1b, 0xc7, 0x10, 0x79, 0xe9, 0x9b, 0x33, 0xed, 0xeb, 0x79, 0x24, + 0xf1, 0x66, 0xe6, 0x48, 0xe2, 0xa5, 0x3e, 0xf9, 0x1e, 0x7c, 0x3c, 0xf1, 0xdd, 0x12, 0x9c, 0xca, + 0x16, 0x59, 0xf6, 0x1d, 0xaf, 0x79, 0x0c, 0xe3, 0xf5, 0x19, 0x63, 0xbc, 0x5e, 0xe9, 0xaf, 0x5f, + 0xac, 0x91, 0x3d, 0x07, 0xcd, 0xc9, 0x0c, 0xda, 0xc7, 0x0e, 0xc3, 0xfc, 0xe0, 0x91, 0xfb, 0x7d, + 0x0b, 0x1e, 0xed, 0x5a, 0xee, 0x18, 0x1c, 0xaf, 0x6f, 0x98, 0x8e, 0xd7, 0x17, 0x0f, 0xd1, 0xbb, + 0x1e, 0x9e, 0xd8, 0x5f, 0x2b, 0xf7, 0xe8, 0x15, 0x73, 0x4d, 0xdd, 0x80, 0x51, 0xa7, 0xd1, 0x20, + 0x71, 0x7c, 0x2d, 0x74, 0x55, 0x92, 0xa5, 0xe7, 0xd9, 0xde, 0x92, 0x82, 0xf7, 0x77, 0xe7, 0x66, + 0xb3, 0x2c, 0x52, 0x34, 0xd6, 0x39, 0x98, 0xe9, 0xdf, 0x4a, 0x47, 0x94, 0xfe, 0xed, 0x02, 0xc0, + 0xb6, 0xb2, 0x62, 0xb3, 0x1e, 0x2f, 0xcd, 0xbe, 0xd5, 0xa8, 0xd0, 0x5f, 0x66, 0x1a, 0x21, 0x0f, + 0xd2, 0x18, 0x30, 0xef, 0x4b, 0xe6, 0x7c, 0x3f, 0x3d, 0xe0, 0x83, 0x5f, 0xcb, 0x54, 0xde, 0x41, + 0xc5, 0x12, 0x7d, 0x0a, 0xa6, 0x62, 0x7e, 0xf9, 0x7f, 0xd9, 0x77, 0x62, 0x16, 0xdd, 0x2f, 0xe4, + 0x29, 0xbb, 0x61, 0x59, 0xcf, 0xe0, 0x70, 0x07, 0xb5, 0xfd, 0x9d, 0x32, 0x7c, 0xf0, 0x80, 0x69, + 0x8b, 0x16, 0xcd, 0x53, 0xdb, 0xe7, 0xb2, 0xfe, 0x9f, 0xd9, 0xae, 0x85, 0x0d, 0x87, 0x50, 0xe6, + 0x6b, 0x97, 0xde, 0xf7, 0xd7, 0xfe, 0xba, 0xee, 0xad, 0xe3, 0x71, 0x9b, 0x97, 0x0e, 0xbd, 0x30, + 0x7f, 0x5a, 0x9d, 0xf5, 0x5f, 0xb6, 0xe0, 0x89, 0xae, 0xdd, 0x32, 0xa2, 0x44, 0x16, 0xa0, 0xd2, + 0xa0, 0x40, 0xed, 0x2e, 0x4e, 0x7a, 0x09, 0x4e, 0x22, 0x70, 0x4a, 0x63, 0x04, 0x83, 0x94, 0x72, + 0x83, 0x41, 0x7e, 0xd7, 0x82, 0xe9, 0x6c, 0x23, 0x8e, 0x41, 0x6e, 0xd5, 0x4d, 0xb9, 0x35, 0xdf, + 0xdf, 0xc7, 0xef, 0x21, 0xb2, 0xde, 0x9b, 0x80, 0xd3, 0x1d, 0xbb, 0x1e, 0x1f, 0xc5, 0x9f, 0xb3, + 0xe0, 0xc4, 0x26, 0xd3, 0xde, 0xb5, 0x0b, 0x4f, 0xa2, 0x5f, 0x39, 0xb7, 0xc4, 0x0e, 0xbc, 0x27, + 0xc5, 0x6d, 0x91, 0x0e, 0x12, 0xdc, 0x59, 0x19, 0xfa, 0x9a, 0x05, 0xd3, 0xce, 0xbd, 0xb8, 0xe3, + 0xf5, 0x11, 0x31, 0x91, 0x5e, 0xcb, 0x71, 0x96, 0xe5, 0xbc, 0x5b, 0xb2, 0x34, 0xb3, 0xb7, 0x3b, + 0x37, 0xdd, 0x8d, 0x0a, 0x77, 0xad, 0x95, 0x7e, 0xdf, 0x2d, 0x71, 0x9d, 0xa2, 0xd8, 0xd5, 0xbd, + 0x6e, 0x97, 0x2f, 0xb8, 0x58, 0x93, 0x18, 0xac, 0x38, 0xa2, 0xb7, 0xa1, 0xb2, 0x29, 0xef, 0x38, + 0x65, 0xc5, 0x66, 0x8f, 0x61, 0xee, 0x76, 0x25, 0x8a, 0xc7, 0xee, 0x2b, 0x14, 0x4e, 0x99, 0xa2, + 0xcb, 0x50, 0x0e, 0x36, 0x62, 0x71, 0x9b, 0x38, 0x2f, 0x06, 0xc8, 0x8c, 0xbc, 0xe2, 0x17, 0x30, + 0xaf, 0xaf, 0xd6, 0x31, 0x65, 0x41, 0x39, 0x45, 0x77, 0x5c, 0xe1, 0x25, 0xce, 0xe1, 0x84, 0x97, + 0xaa, 0x9d, 0x9c, 0xf0, 0x52, 0x15, 0x53, 0x16, 0xa8, 0x06, 0x83, 0xec, 0xb2, 0x86, 0x70, 0x01, + 0xe7, 0x5c, 0x39, 0xef, 0xb8, 0x92, 0xc2, 0xb3, 0x14, 0x32, 0x30, 0xe6, 0x8c, 0xd0, 0x3a, 0x0c, + 0x35, 0x58, 0xa2, 0x7d, 0x61, 0x9b, 0xe7, 0x25, 0x63, 0xe8, 0x48, 0xca, 0xcf, 0xcf, 0xbd, 0x38, + 0x1c, 0x0b, 0x5e, 0x8c, 0x2b, 0x69, 0x6d, 0x6d, 0xc4, 0xc2, 0xf8, 0xce, 0xe3, 0xda, 0xf1, 0x64, + 0x82, 0xe0, 0xca, 0xe0, 0x58, 0xf0, 0x42, 0x55, 0x28, 0x6d, 0x34, 0x44, 0xb2, 0xd3, 0x1c, 0xd7, + 0xaf, 0x79, 0x9b, 0x76, 0x69, 0x68, 0x6f, 0x77, 0xae, 0xb4, 0xba, 0x8c, 0x4b, 0x1b, 0x0d, 0xf4, + 0x06, 0x0c, 0x6f, 0xf0, 0xfb, 0x91, 0x22, 0xb1, 0xe9, 0x0b, 0x79, 0x97, 0x38, 0x3b, 0x2e, 0x53, + 0xf2, 0xfb, 0x19, 0x02, 0x81, 0x25, 0x3b, 0x96, 0xf3, 0x4d, 0xdd, 0xf8, 0x14, 0x99, 0x4d, 0xe7, + 0xfb, 0xbb, 0x21, 0x2a, 0x6c, 0x52, 0x05, 0xc5, 0x1a, 0x47, 0x3a, 0xe7, 0x1d, 0xf9, 0x66, 0x08, + 0xcb, 0x6a, 0x9a, 0x3b, 0xe7, 0xbb, 0x3e, 0x31, 0xc2, 0xe7, 0xbc, 0x42, 0xe1, 0x94, 0x29, 0x6a, + 0xc3, 0xf8, 0x76, 0xdc, 0xda, 0x22, 0x72, 0xe9, 0xb3, 0x54, 0xa7, 0xa3, 0x17, 0x3e, 0x91, 0x93, + 0xbf, 0x56, 0x14, 0xf1, 0xa2, 0xa4, 0xed, 0xf8, 0x1d, 0x12, 0x8c, 0x25, 0xd9, 0xba, 0xa5, 0xb3, + 0xc5, 0x66, 0x2d, 0xf4, 0x93, 0xbc, 0xdb, 0x0e, 0xef, 0xec, 0x24, 0x44, 0xa4, 0x42, 0xcd, 0xf9, + 0x24, 0xaf, 0x73, 0xe2, 0xce, 0x4f, 0x22, 0x10, 0x58, 0xb2, 0x53, 0x43, 0xc6, 0xa4, 0xf1, 0x54, + 0xe1, 0x21, 0xeb, 0xe8, 0x43, 0x3a, 0x64, 0x4c, 0xfa, 0xa6, 0x4c, 0x99, 0xd4, 0x6d, 0x6d, 0x85, + 0x49, 0x18, 0x64, 0x64, 0xff, 0x89, 0x22, 0x52, 0xb7, 0xd6, 0xa5, 0x64, 0xa7, 0xd4, 0xed, 0x46, + 0x85, 0xbb, 0xd6, 0x8a, 0x02, 0x98, 0x68, 0x85, 0x51, 0x72, 0x2f, 0x8c, 0xe4, 0x3c, 0x44, 0x85, + 0x6c, 0x44, 0xa3, 0x8c, 0xa8, 0x9b, 0x85, 0xe1, 0x9a, 0x18, 0x9c, 0xe1, 0x6e, 0xff, 0xea, 0x50, + 0xe7, 0xf6, 0xce, 0x14, 0xf8, 0xbf, 0xd9, 0x79, 0x5e, 0xfa, 0xa9, 0xfe, 0xed, 0xd4, 0x07, 0x78, + 0x72, 0xfa, 0x35, 0x0b, 0x4e, 0xb7, 0xba, 0x6e, 0xde, 0x62, 0x83, 0xec, 0xd7, 0xdc, 0xe5, 0x83, + 0xa4, 0xf2, 0x0a, 0x77, 0xc7, 0xe3, 0x1e, 0x75, 0x66, 0x55, 0xde, 0xf2, 0xfb, 0x56, 0x79, 0x6f, + 0xc3, 0x08, 0xd3, 0xd1, 0xd2, 0x8c, 0x24, 0x7d, 0x26, 0xef, 0x60, 0x5b, 0xed, 0xb2, 0x60, 0x81, + 0x15, 0x33, 0x3a, 0x70, 0x8f, 0x67, 0x3b, 0x81, 0x09, 0x43, 0x8b, 0xdc, 0xbb, 0xdc, 0x9e, 0x58, + 0x15, 0x23, 0xf1, 0x78, 0xed, 0x20, 0xe2, 0xfd, 0x3c, 0x02, 0x7c, 0x70, 0x65, 0xa8, 0xda, 0xc5, + 0xa0, 0x19, 0x32, 0x0f, 0x47, 0xf2, 0x8d, 0x9a, 0xe3, 0x55, 0xc4, 0xff, 0x91, 0xd5, 0x45, 0x6f, + 0xe4, 0xc6, 0xd3, 0x27, 0x4c, 0xe3, 0xe9, 0xe9, 0xac, 0xf1, 0xd4, 0xe1, 0x32, 0x31, 0xec, 0xa6, + 0xe2, 0xd9, 0x38, 0x8b, 0xa6, 0x5c, 0xb1, 0x7d, 0x38, 0x9b, 0x27, 0x94, 0x58, 0xc0, 0x94, 0xab, + 0x8e, 0x0a, 0xd3, 0x80, 0x29, 0x77, 0xad, 0x8a, 0x19, 0xa6, 0xe8, 0xad, 0x7d, 0xfb, 0xe7, 0x4b, + 0x50, 0xae, 0x85, 0xee, 0x31, 0xb8, 0x80, 0x2e, 0x19, 0x2e, 0xa0, 0xa7, 0x72, 0x5f, 0x7a, 0xeb, + 0xe9, 0xf0, 0xb9, 0x91, 0x71, 0xf8, 0x7c, 0x38, 0x9f, 0xd5, 0xc1, 0xee, 0x9d, 0xef, 0x95, 0x41, + 0x7f, 0xab, 0x0e, 0xfd, 0xa7, 0xc3, 0xc4, 0xd1, 0x96, 0x8b, 0x3d, 0x5f, 0x27, 0xea, 0x60, 0xf1, + 0x56, 0xf2, 0xf6, 0xdd, 0x4f, 0x6d, 0x38, 0xed, 0x6d, 0xe2, 0x6d, 0x6e, 0x25, 0xc4, 0xcd, 0x76, + 0xec, 0xf8, 0xc2, 0x69, 0xff, 0xd4, 0x82, 0xc9, 0x4c, 0xed, 0xc8, 0xef, 0x76, 0x6d, 0xe7, 0x90, + 0x4e, 0x9d, 0x13, 0xb9, 0xf7, 0x7c, 0xe6, 0x01, 0x94, 0x6f, 0x5e, 0x3a, 0x4e, 0x98, 0x0e, 0xa9, + 0x9c, 0xf7, 0x31, 0xd6, 0x28, 0xd0, 0xcb, 0x30, 0x9a, 0x84, 0xad, 0xd0, 0x0f, 0x37, 0x77, 0xae, + 0x10, 0x99, 0x4f, 0x42, 0x9d, 0x6b, 0xac, 0xa7, 0x28, 0xac, 0xd3, 0xd9, 0xdf, 0x2f, 0x43, 0xf6, + 0xa5, 0xc3, 0xbf, 0x98, 0xa7, 0x3f, 0x3d, 0xf3, 0xf4, 0x0f, 0x2d, 0x98, 0xa2, 0xb5, 0xb3, 0x00, + 0x17, 0x19, 0xf6, 0xaa, 0x9e, 0x06, 0xb0, 0x0e, 0x78, 0x1a, 0xe0, 0x69, 0x2a, 0xed, 0xdc, 0xb0, + 0x9d, 0x08, 0x57, 0x8f, 0x26, 0xc4, 0x28, 0x14, 0x0b, 0xac, 0xa0, 0x23, 0x51, 0x24, 0xee, 0x07, + 0xe9, 0x74, 0x24, 0x8a, 0xb0, 0xc0, 0xca, 0x97, 0x03, 0x06, 0x7a, 0xbc, 0x1c, 0xc0, 0x32, 0x32, + 0x89, 0xa0, 0x0a, 0xa1, 0x56, 0x68, 0x19, 0x99, 0x64, 0xb4, 0x45, 0x4a, 0x63, 0x7f, 0xbb, 0x0c, + 0x63, 0xb5, 0xd0, 0x4d, 0xe3, 0xd9, 0x5f, 0x32, 0xe2, 0xd9, 0xcf, 0x66, 0xe2, 0xd9, 0xa7, 0x74, + 0xda, 0x07, 0x13, 0xce, 0x2e, 0x32, 0x77, 0xb1, 0xb7, 0x2d, 0x0e, 0x19, 0xca, 0x6e, 0x64, 0xee, + 0x52, 0x8c, 0xb0, 0xc9, 0xf7, 0x67, 0x29, 0x84, 0xfd, 0xff, 0x58, 0x30, 0x51, 0x0b, 0x5d, 0x3a, + 0x41, 0x7f, 0x96, 0x66, 0xa3, 0x9e, 0xef, 0x6b, 0xe8, 0x80, 0x7c, 0x5f, 0xff, 0xc2, 0x82, 0xe1, + 0x5a, 0xe8, 0x1e, 0x83, 0x1b, 0x74, 0xd5, 0x74, 0x83, 0x3e, 0x91, 0x2b, 0x79, 0x7b, 0x78, 0x3e, + 0xbf, 0x53, 0x86, 0x71, 0xda, 0xe2, 0x70, 0x53, 0x7e, 0x2f, 0x63, 0x6c, 0xac, 0x02, 0x63, 0x43, + 0x55, 0xc2, 0xd0, 0xf7, 0xc3, 0x7b, 0xd9, 0x6f, 0xb7, 0xca, 0xa0, 0x58, 0x60, 0xd1, 0x79, 0x18, + 0x69, 0x45, 0x64, 0xdb, 0x0b, 0xdb, 0x71, 0xf6, 0xae, 0x61, 0x4d, 0xc0, 0xb1, 0xa2, 0x40, 0x2f, + 0xc1, 0x58, 0xec, 0x05, 0x0d, 0x22, 0x43, 0x2e, 0x06, 0x58, 0xc8, 0x05, 0x4f, 0xad, 0xa8, 0xc1, + 0xb1, 0x41, 0x85, 0x6e, 0x43, 0x85, 0xfd, 0x67, 0x2b, 0xa8, 0xff, 0xd4, 0xff, 0x3c, 0x9f, 0x98, + 0x64, 0x80, 0x53, 0x5e, 0xe8, 0x02, 0x40, 0x22, 0x83, 0x43, 0x62, 0x91, 0x15, 0x45, 0xe9, 0xa5, + 0x2a, 0x6c, 0x24, 0xc6, 0x1a, 0x15, 0x7a, 0x0e, 0x2a, 0x89, 0xe3, 0xf9, 0x57, 0xbd, 0x80, 0xc4, + 0x22, 0xb8, 0x46, 0xa4, 0x49, 0x16, 0x40, 0x9c, 0xe2, 0xe9, 0x7e, 0xcf, 0x6e, 0x3a, 0xf3, 0x67, + 0x45, 0x46, 0x18, 0x35, 0xdb, 0xef, 0xaf, 0x2a, 0x28, 0xd6, 0x28, 0xec, 0x8b, 0x70, 0xaa, 0x16, + 0xba, 0xd4, 0x88, 0x5f, 0x0d, 0xa3, 0x7b, 0x4e, 0xe4, 0xca, 0xef, 0x37, 0x27, 0xb3, 0xf3, 0xd2, + 0x3d, 0x79, 0x90, 0x7b, 0x06, 0x8d, 0x6c, 0xbb, 0x2f, 0xb2, 0x1d, 0xbf, 0xcf, 0x8b, 0x12, 0x3f, + 0x2a, 0x01, 0xaa, 0xb1, 0xf0, 0x15, 0xe3, 0x15, 0x9a, 0x2d, 0x98, 0x88, 0xc9, 0x55, 0x2f, 0x68, + 0xdf, 0x17, 0xac, 0x8a, 0xdd, 0x4c, 0xa9, 0xaf, 0xe8, 0x65, 0xb8, 0x3f, 0xc2, 0x84, 0xe1, 0x0c, + 0x5f, 0x3a, 0x98, 0x51, 0x3b, 0x58, 0x8c, 0x6f, 0xc6, 0x24, 0x12, 0xaf, 0xae, 0xb0, 0xc1, 0xc4, + 0x12, 0x88, 0x53, 0x3c, 0x9d, 0x3c, 0xec, 0xcf, 0xf5, 0x30, 0xc0, 0x61, 0x98, 0xc8, 0xe9, 0xc6, + 0xb2, 0xf0, 0x6b, 0x70, 0x6c, 0x50, 0xa1, 0x55, 0x40, 0x71, 0xbb, 0xd5, 0xf2, 0xd9, 0x89, 0xa0, + 0xe3, 0x5f, 0x8a, 0xc2, 0x76, 0x8b, 0x47, 0x31, 0x8b, 0x04, 0xf6, 0xf5, 0x0e, 0x2c, 0xee, 0x52, + 0x82, 0x0a, 0x8b, 0x8d, 0x98, 0xfd, 0x16, 0xd7, 0x9e, 0xb9, 0x57, 0xb1, 0xce, 0x40, 0x58, 0xe2, + 0xec, 0x2f, 0xb1, 0x0d, 0x8e, 0x3d, 0x87, 0x91, 0xb4, 0x23, 0x82, 0x9a, 0x30, 0xde, 0x62, 0x9b, + 0x58, 0x12, 0x85, 0xbe, 0x4f, 0xa4, 0x7e, 0x79, 0xb8, 0x00, 0x1a, 0x9e, 0x00, 0x5f, 0x67, 0x87, + 0x4d, 0xee, 0xf6, 0x2f, 0x4e, 0x30, 0x59, 0x25, 0x0e, 0x65, 0x87, 0x45, 0xa8, 0xac, 0xd0, 0xe4, + 0x3e, 0x54, 0xe4, 0x61, 0xab, 0x74, 0x1f, 0x10, 0x81, 0xb7, 0x58, 0x72, 0x41, 0x9f, 0x63, 0x81, + 0xe0, 0x5c, 0x40, 0x14, 0x7f, 0xae, 0x8f, 0xd3, 0x1b, 0x41, 0xe0, 0x82, 0x05, 0xd6, 0xd8, 0xa1, + 0xab, 0x30, 0x2e, 0x5e, 0x4f, 0x10, 0x6e, 0x8a, 0xb2, 0x61, 0x62, 0x8f, 0x63, 0x1d, 0xb9, 0x9f, + 0x05, 0x60, 0xb3, 0x30, 0xda, 0x84, 0xc7, 0xb5, 0xd7, 0x81, 0xba, 0x04, 0x7b, 0x71, 0xc9, 0xf3, + 0xc4, 0xde, 0xee, 0xdc, 0xe3, 0xeb, 0x07, 0x11, 0xe2, 0x83, 0xf9, 0xa0, 0x1b, 0x70, 0xca, 0x69, + 0x24, 0xde, 0x36, 0xa9, 0x12, 0xc7, 0xf5, 0xbd, 0x80, 0x98, 0x77, 0xe3, 0x1f, 0xdd, 0xdb, 0x9d, + 0x3b, 0xb5, 0xd8, 0x8d, 0x00, 0x77, 0x2f, 0x87, 0x3e, 0x01, 0x15, 0x37, 0x88, 0xc5, 0x18, 0x0c, + 0x19, 0x8f, 0x61, 0x55, 0xaa, 0xd7, 0xeb, 0xaa, 0xff, 0xe9, 0x1f, 0x9c, 0x16, 0x40, 0xef, 0xf2, + 0xc7, 0xde, 0x95, 0x35, 0xc3, 0x1f, 0x61, 0x7b, 0xa5, 0x90, 0xfd, 0x6c, 0xdc, 0x58, 0xe1, 0x1e, + 0x3c, 0x15, 0x54, 0x69, 0x5c, 0x66, 0x31, 0xaa, 0x40, 0x9f, 0x06, 0x14, 0x93, 0x68, 0xdb, 0x6b, + 0x90, 0xc5, 0x06, 0xcb, 0x47, 0xca, 0x7c, 0x3c, 0x23, 0xc6, 0xed, 0x02, 0x54, 0xef, 0xa0, 0xc0, + 0x5d, 0x4a, 0xa1, 0xcb, 0x54, 0xf2, 0xe8, 0x50, 0x11, 0x03, 0x2b, 0x15, 0xc3, 0x99, 0x2a, 0x69, + 0x45, 0xa4, 0xe1, 0x24, 0xc4, 0x35, 0x39, 0xe2, 0x4c, 0x39, 0xba, 0x2f, 0xa9, 0x94, 0xf3, 0x60, + 0x46, 0x6e, 0x76, 0xa6, 0x9d, 0xa7, 0x76, 0xd6, 0x56, 0x18, 0x27, 0xd7, 0x49, 0x72, 0x2f, 0x8c, + 0xee, 0xb2, 0x93, 0x86, 0x11, 0x2d, 0xb9, 0x5b, 0x8a, 0xc2, 0x3a, 0x1d, 0xd5, 0xa1, 0xd8, 0x11, + 0xd7, 0x5a, 0x95, 0x9d, 0x1f, 0x8c, 0xa4, 0x6b, 0xe7, 0x32, 0x07, 0x63, 0x89, 0x97, 0xa4, 0x6b, + 0xb5, 0x65, 0x76, 0x16, 0x90, 0x21, 0x5d, 0xab, 0x2d, 0x63, 0x89, 0x47, 0x61, 0xe7, 0x93, 0x63, + 0x13, 0x45, 0xce, 0x65, 0x3a, 0x25, 0x79, 0xc1, 0x57, 0xc7, 0xee, 0xc3, 0x94, 0x7a, 0xf6, 0x8c, + 0xe7, 0xdd, 0x8c, 0x67, 0x26, 0x8b, 0x3c, 0x35, 0xdf, 0x35, 0x7d, 0xa7, 0xf2, 0xeb, 0xad, 0x65, + 0x78, 0xe2, 0x8e, 0x5a, 0x8c, 0x1c, 0x0f, 0x53, 0xb9, 0xcf, 0x08, 0x2c, 0x40, 0x25, 0x6e, 0xdf, + 0x71, 0xc3, 0xa6, 0xe3, 0x05, 0xcc, 0x61, 0xaf, 0x3f, 0x9c, 0x2e, 0x11, 0x38, 0xa5, 0x41, 0x35, + 0x18, 0x71, 0x84, 0x09, 0x27, 0x1c, 0xeb, 0x39, 0x77, 0xc0, 0xa5, 0xc1, 0xc7, 0xbd, 0xab, 0xf2, + 0x1f, 0x56, 0x5c, 0xd0, 0xab, 0x30, 0x2e, 0xae, 0x30, 0x91, 0x88, 0xb5, 0xfa, 0xa4, 0x19, 0xee, + 0x5e, 0x97, 0x48, 0x36, 0xc1, 0x4c, 0x5a, 0xb4, 0x09, 0x13, 0x94, 0x4b, 0x2a, 0x00, 0x67, 0xa6, + 0xfb, 0x93, 0xa1, 0x5a, 0xc2, 0x66, 0x9d, 0x0d, 0xce, 0xb0, 0x45, 0x2e, 0x3c, 0xe6, 0xb4, 0x93, + 0xb0, 0x49, 0x57, 0x82, 0xb9, 0x4e, 0xd6, 0xc3, 0xbb, 0x24, 0x98, 0x39, 0xc5, 0x66, 0xe0, 0xd9, + 0xbd, 0xdd, 0xb9, 0xc7, 0x16, 0x0f, 0xa0, 0xc3, 0x07, 0x72, 0x41, 0x6f, 0xc1, 0x68, 0x12, 0xfa, + 0x22, 0x82, 0x38, 0x9e, 0x39, 0x5d, 0x24, 0xf3, 0xcc, 0xba, 0x2a, 0xa0, 0xbb, 0x31, 0x14, 0x13, + 0xac, 0x73, 0x9c, 0xfd, 0x24, 0x9c, 0xe8, 0x10, 0x49, 0x7d, 0x05, 0x59, 0xfe, 0xe7, 0x41, 0xa8, + 0x28, 0x8f, 0x1e, 0x5a, 0x30, 0x9d, 0xb7, 0x8f, 0x66, 0x9d, 0xb7, 0x23, 0x54, 0x81, 0xd2, 0xfd, + 0xb5, 0x9f, 0xef, 0xf2, 0xd0, 0xf5, 0xb3, 0xb9, 0x6b, 0xb0, 0xf8, 0xbd, 0xa7, 0x3e, 0x9e, 0x03, + 0x4f, 0xad, 0xba, 0x81, 0x03, 0xad, 0xba, 0x82, 0x8f, 0xb7, 0x51, 0xfb, 0xad, 0x15, 0xba, 0x6b, + 0xb5, 0xec, 0xdb, 0x44, 0x35, 0x0a, 0xc4, 0x1c, 0xc7, 0xf4, 0x6e, 0xba, 0xa7, 0x32, 0xbd, 0x7b, + 0xf8, 0x90, 0x7a, 0xb7, 0x64, 0x80, 0x53, 0x5e, 0x68, 0x1b, 0x4e, 0x34, 0xcc, 0xa7, 0xa6, 0xd4, + 0x6d, 0xa6, 0xe7, 0xfb, 0x78, 0xea, 0xa9, 0xad, 0xbd, 0x71, 0xb1, 0x9c, 0xe5, 0x87, 0x3b, 0xab, + 0x40, 0xaf, 0xc2, 0xc8, 0xbb, 0x61, 0xcc, 0x8e, 0x15, 0xc4, 0xc6, 0x22, 0x6f, 0x8d, 0x8c, 0xbc, + 0x7e, 0xa3, 0xce, 0xe0, 0xfb, 0xbb, 0x73, 0xa3, 0xb5, 0xd0, 0x95, 0x7f, 0xb1, 0x2a, 0x80, 0xbe, + 0x6c, 0xc1, 0x29, 0x63, 0x9d, 0xa9, 0x96, 0xc3, 0x61, 0x5a, 0xfe, 0xb8, 0xa8, 0xf9, 0xd4, 0x5a, + 0x37, 0x9e, 0xb8, 0x7b, 0x55, 0xf6, 0x6f, 0x73, 0x17, 0xa6, 0x70, 0x6a, 0x90, 0xb8, 0xed, 0x1f, + 0x47, 0xbe, 0xf9, 0x1b, 0x86, 0xbf, 0xe5, 0x01, 0x38, 0xd1, 0xff, 0xa3, 0xc5, 0x9c, 0xe8, 0xeb, + 0xa4, 0xd9, 0xf2, 0x9d, 0xe4, 0x38, 0x62, 0x70, 0x3f, 0x07, 0x23, 0x89, 0xa8, 0xad, 0x58, 0xb2, + 0x7c, 0xad, 0x79, 0xec, 0x70, 0x41, 0x6d, 0x4c, 0x12, 0x8a, 0x15, 0x43, 0xfb, 0xdf, 0xf2, 0xaf, + 0x22, 0x31, 0xc7, 0xe0, 0x29, 0xb8, 0x6e, 0x7a, 0x0a, 0x9e, 0x29, 0xdc, 0x97, 0x1e, 0x1e, 0x83, + 0xef, 0x9b, 0x3d, 0x60, 0xf6, 0xc3, 0x4f, 0xcf, 0x29, 0x8f, 0xfd, 0x2b, 0x16, 0x4c, 0x77, 0x3b, + 0x14, 0xa7, 0x0a, 0x06, 0xb7, 0x5e, 0xd4, 0xf9, 0x97, 0x1a, 0xd5, 0x5b, 0x02, 0x8e, 0x15, 0x45, + 0xe1, 0xec, 0xd5, 0xfd, 0x25, 0x58, 0xba, 0x01, 0xe6, 0xa3, 0x65, 0xe8, 0x35, 0x1e, 0x72, 0xcf, + 0xdb, 0x73, 0xbe, 0xef, 0x70, 0x7b, 0xfb, 0xd7, 0x4b, 0x30, 0xcd, 0x9d, 0xd0, 0x8b, 0xdb, 0xa1, + 0xe7, 0xd6, 0x42, 0x57, 0x5c, 0x40, 0x70, 0x61, 0xac, 0xa5, 0x19, 0x9f, 0xc5, 0x12, 0xb6, 0xe8, + 0xe6, 0x6a, 0xaa, 0xf0, 0xeb, 0x50, 0x6c, 0x70, 0xa5, 0xb5, 0x90, 0x6d, 0xaf, 0xa1, 0x7c, 0x9a, + 0xa5, 0xbe, 0x77, 0x06, 0x55, 0xcb, 0x8a, 0xc6, 0x07, 0x1b, 0x5c, 0x8f, 0xe0, 0xd1, 0x09, 0xfb, + 0x1f, 0x58, 0xf0, 0x48, 0x8f, 0xa4, 0x2e, 0xb4, 0xba, 0x7b, 0xcc, 0xf1, 0x2f, 0x5e, 0xc5, 0x53, + 0xd5, 0xf1, 0xe3, 0x00, 0x2c, 0xb0, 0xe8, 0x0e, 0x00, 0x77, 0xe7, 0xb3, 0x37, 0xd2, 0x4b, 0x45, + 0xa2, 0x86, 0x3a, 0x52, 0x27, 0x68, 0xb7, 0xea, 0xd5, 0xab, 0xe8, 0x1a, 0x57, 0xfb, 0x5b, 0x65, + 0x18, 0xe4, 0x8f, 0x2f, 0xd7, 0x60, 0x78, 0x8b, 0x27, 0x99, 0xed, 0x2f, 0xc7, 0x6d, 0x6a, 0x5c, + 0x70, 0x00, 0x96, 0x6c, 0xd0, 0x35, 0x38, 0x49, 0x77, 0x16, 0xcf, 0xf1, 0xab, 0xc4, 0x77, 0x76, + 0xa4, 0xb5, 0xca, 0x5f, 0x22, 0x90, 0x29, 0xb3, 0x4f, 0xae, 0x75, 0x92, 0xe0, 0x6e, 0xe5, 0xd0, + 0x6b, 0x1d, 0x39, 0xe1, 0x78, 0xf2, 0x5e, 0xa5, 0xa9, 0x1e, 0x9c, 0x17, 0x8e, 0xea, 0xd3, 0xad, + 0x0e, 0xbb, 0x5c, 0x7b, 0xe3, 0xd6, 0xb4, 0xc5, 0x4d, 0x5a, 0x16, 0x5b, 0xd0, 0x66, 0x31, 0x15, + 0xeb, 0x5b, 0x11, 0x89, 0xb7, 0x42, 0xdf, 0x15, 0xcf, 0x33, 0xa6, 0xb1, 0x05, 0x19, 0x3c, 0xee, + 0x28, 0x41, 0xb9, 0x6c, 0x38, 0x9e, 0xdf, 0x8e, 0x48, 0xca, 0x65, 0xc8, 0xe4, 0xb2, 0x9a, 0xc1, + 0xe3, 0x8e, 0x12, 0x74, 0x6e, 0x9d, 0x12, 0xaf, 0x05, 0xca, 0x2b, 0xcc, 0x42, 0x04, 0x7d, 0x06, + 0x86, 0x65, 0x20, 0x7b, 0xa1, 0x4c, 0x1b, 0x22, 0x70, 0x40, 0xbd, 0x3c, 0xa8, 0xbd, 0x4c, 0x25, + 0x42, 0xd8, 0x25, 0xbf, 0xc3, 0xbc, 0x4a, 0xf7, 0x27, 0x16, 0x9c, 0xec, 0x12, 0x90, 0xc5, 0x45, + 0xda, 0xa6, 0x17, 0x27, 0x2a, 0x2f, 0xbe, 0x26, 0xd2, 0x38, 0x1c, 0x2b, 0x0a, 0xba, 0x5a, 0xb8, + 0xd0, 0xcc, 0x0a, 0x4a, 0x11, 0x02, 0x22, 0xb0, 0xfd, 0x09, 0x4a, 0x74, 0x16, 0x06, 0xda, 0x31, + 0x89, 0xe4, 0x13, 0x71, 0x52, 0xce, 0x33, 0x3f, 0x20, 0xc3, 0x50, 0xb5, 0x75, 0x53, 0xb9, 0xe0, + 0x34, 0xb5, 0x95, 0x3b, 0xe1, 0x38, 0xce, 0xfe, 0x7a, 0x19, 0x26, 0x33, 0x81, 0x99, 0xb4, 0x21, + 0xcd, 0x30, 0xf0, 0x92, 0x50, 0x65, 0x3f, 0xe3, 0xaf, 0x52, 0x91, 0xd6, 0xd6, 0x35, 0x01, 0xc7, + 0x8a, 0x02, 0x3d, 0x6d, 0xbe, 0xd8, 0x9f, 0xb6, 0x79, 0xa9, 0x6a, 0x3c, 0xde, 0x59, 0xf4, 0xad, + 0x8e, 0x27, 0x61, 0xa0, 0x15, 0xaa, 0x87, 0x98, 0xd5, 0xf7, 0xc4, 0x4b, 0xd5, 0x5a, 0x18, 0xfa, + 0x98, 0x21, 0xd1, 0x53, 0xa2, 0xf7, 0x99, 0x93, 0x0b, 0xec, 0xb8, 0x61, 0xac, 0x0d, 0xc1, 0x33, + 0x30, 0x7c, 0x97, 0xec, 0x44, 0x5e, 0xb0, 0x99, 0x3d, 0xb7, 0xb9, 0xc2, 0xc1, 0x58, 0xe2, 0xcd, + 0xf7, 0x38, 0x86, 0x8f, 0xf8, 0x3d, 0x8e, 0x91, 0xdc, 0x7d, 0xf0, 0x3b, 0x16, 0x4c, 0xb2, 0x94, + 0xa0, 0xe2, 0x02, 0xbd, 0x17, 0x06, 0xc7, 0xa0, 0x63, 0x3c, 0x09, 0x83, 0x11, 0xad, 0x34, 0x9b, + 0x50, 0x9f, 0xb5, 0x04, 0x73, 0x1c, 0x7a, 0x0c, 0x06, 0x58, 0x13, 0xe8, 0x67, 0x1c, 0xe3, 0x99, + 0xc7, 0xab, 0x4e, 0xe2, 0x60, 0x06, 0x65, 0x77, 0xa1, 0x30, 0x69, 0xf9, 0x1e, 0x6f, 0x74, 0xea, + 0x6e, 0x7d, 0xd8, 0xee, 0x42, 0x75, 0x6d, 0xe4, 0x83, 0xba, 0x0b, 0xd5, 0x9d, 0xf9, 0xc1, 0x7a, + 0xfe, 0xff, 0x2c, 0xc1, 0x99, 0xae, 0xe5, 0xd2, 0x13, 0xe0, 0x55, 0xe3, 0x04, 0xf8, 0x42, 0xe6, + 0x04, 0xd8, 0x3e, 0xb8, 0xf4, 0x83, 0x39, 0x13, 0xee, 0x7e, 0x54, 0x5b, 0x3e, 0xc6, 0xa3, 0xda, + 0x81, 0xa2, 0x2a, 0xce, 0x60, 0x8e, 0x8a, 0xf3, 0xfb, 0x16, 0x3c, 0xda, 0x75, 0xc8, 0x1e, 0xba, + 0xcb, 0x67, 0x5d, 0x5b, 0xd9, 0xc3, 0x3a, 0xf9, 0xe5, 0x72, 0x8f, 0x5e, 0x31, 0x3b, 0xe5, 0x1c, + 0x95, 0x42, 0x0c, 0x19, 0x0b, 0xe5, 0x6d, 0x8c, 0x4b, 0x20, 0x0e, 0xc3, 0x0a, 0x8b, 0x62, 0xed, + 0xf2, 0x16, 0x6f, 0xe4, 0xca, 0x21, 0x17, 0xd4, 0xbc, 0xe9, 0x27, 0xd7, 0xb3, 0x02, 0x64, 0xaf, + 0x74, 0xdd, 0xd6, 0x2c, 0xcf, 0xf2, 0x61, 0x2c, 0xcf, 0xb1, 0xee, 0x56, 0x27, 0x5a, 0x84, 0xc9, + 0xa6, 0x17, 0xb0, 0x67, 0x3c, 0x4d, 0xed, 0x49, 0xdd, 0xa0, 0xbd, 0x66, 0xa2, 0x71, 0x96, 0x7e, + 0xf6, 0x55, 0x18, 0x3f, 0xbc, 0x77, 0xed, 0xc7, 0x65, 0xf8, 0xe0, 0x01, 0x42, 0x81, 0xef, 0x0e, + 0xc6, 0x77, 0xd1, 0x76, 0x87, 0x8e, 0x6f, 0x53, 0x83, 0xe9, 0x8d, 0xb6, 0xef, 0xef, 0xb0, 0xf8, + 0x29, 0xe2, 0x4a, 0x0a, 0xa1, 0xd4, 0xa8, 0x37, 0xbd, 0x57, 0xbb, 0xd0, 0xe0, 0xae, 0x25, 0xd1, + 0xa7, 0x01, 0x85, 0x77, 0x58, 0xd2, 0x5c, 0x37, 0xcd, 0x7a, 0xc0, 0x3e, 0x41, 0x39, 0x5d, 0xaa, + 0x37, 0x3a, 0x28, 0x70, 0x97, 0x52, 0x54, 0x4f, 0x65, 0xcf, 0x81, 0xab, 0x66, 0x65, 0xf4, 0x54, + 0xac, 0x23, 0xb1, 0x49, 0x8b, 0x2e, 0xc1, 0x09, 0x67, 0xdb, 0xf1, 0x78, 0x12, 0x2c, 0xc9, 0x80, + 0x2b, 0xaa, 0xca, 0x7f, 0xb5, 0x98, 0x25, 0xc0, 0x9d, 0x65, 0x50, 0xcb, 0x70, 0x48, 0xf2, 0x74, + 0xf9, 0x9f, 0x38, 0xc4, 0x0c, 0x2e, 0xec, 0xa2, 0xb4, 0xff, 0xbb, 0x45, 0xb7, 0xbe, 0x2e, 0x2f, + 0x3e, 0xd2, 0x11, 0x51, 0x0e, 0x36, 0xed, 0x32, 0x9a, 0x1a, 0x91, 0x65, 0x1d, 0x89, 0x4d, 0x5a, + 0x3e, 0x35, 0xe2, 0x34, 0x9c, 0xdb, 0xd0, 0x36, 0xc5, 0x3d, 0x4e, 0x45, 0x41, 0x35, 0x68, 0xd7, + 0xdb, 0xf6, 0xe2, 0x30, 0x12, 0x0b, 0xa8, 0xcf, 0xe0, 0xde, 0x54, 0x5e, 0x56, 0x39, 0x1b, 0x2c, + 0xf9, 0xd9, 0xdf, 0x28, 0xc1, 0xb8, 0xac, 0xf1, 0xf5, 0x76, 0x98, 0x38, 0xc7, 0xb0, 0xa5, 0xbf, + 0x6e, 0x6c, 0xe9, 0x0b, 0xc5, 0xae, 0xb5, 0xb2, 0xc6, 0xf5, 0xdc, 0xca, 0x3f, 0x93, 0xd9, 0xca, + 0x5f, 0xe8, 0x87, 0xe9, 0xc1, 0x5b, 0xf8, 0xbf, 0xb7, 0xe0, 0x84, 0x41, 0x7f, 0x0c, 0x3b, 0x49, + 0xcd, 0xdc, 0x49, 0x9e, 0xeb, 0xa3, 0x37, 0x3d, 0x76, 0x90, 0x6f, 0x97, 0x32, 0xbd, 0x60, 0x3b, + 0xc7, 0x17, 0x61, 0x60, 0xcb, 0x89, 0xdc, 0x62, 0x19, 0x21, 0x3b, 0x8a, 0xcf, 0x5f, 0x76, 0x22, + 0x97, 0xcb, 0xff, 0xf3, 0xea, 0x3d, 0x2a, 0x27, 0x72, 0x73, 0x6f, 0x39, 0xb0, 0x4a, 0xd1, 0x45, + 0x18, 0x8a, 0x1b, 0x61, 0x4b, 0xc5, 0x81, 0x9e, 0xe5, 0x6f, 0x55, 0x51, 0xc8, 0xfe, 0xee, 0x1c, + 0x32, 0xab, 0xa3, 0x60, 0x2c, 0xe8, 0x67, 0x37, 0xa1, 0xa2, 0xaa, 0x3e, 0xd2, 0x48, 0xf8, 0xff, + 0x51, 0x86, 0x93, 0x5d, 0xe6, 0x0a, 0xfa, 0x92, 0x31, 0x6e, 0xaf, 0xf6, 0x3d, 0xd9, 0xde, 0xe7, + 0xc8, 0x7d, 0x89, 0x59, 0x4a, 0xae, 0x98, 0x1d, 0x87, 0xa8, 0xfe, 0x66, 0x4c, 0xb2, 0xd5, 0x53, + 0x50, 0x7e, 0xf5, 0xb4, 0xda, 0x63, 0x1b, 0x7e, 0x5a, 0x91, 0x6a, 0xe9, 0x91, 0x7e, 0xe7, 0xbf, + 0x36, 0x00, 0xd3, 0xdd, 0xee, 0xcf, 0xa3, 0xaf, 0x5a, 0x99, 0x67, 0x1f, 0x5e, 0xeb, 0xff, 0x12, + 0x3e, 0x7f, 0x0b, 0x42, 0xe4, 0x9c, 0x99, 0x37, 0x1f, 0x82, 0xc8, 0x1d, 0x71, 0x51, 0x3b, 0xbb, + 0x9f, 0x14, 0xf1, 0x27, 0x3c, 0xa4, 0x54, 0xf8, 0xd4, 0x21, 0x9a, 0x22, 0x5e, 0x01, 0x89, 0x33, + 0xf7, 0x93, 0x24, 0x38, 0xff, 0x7e, 0x92, 0x6c, 0xc3, 0xac, 0x07, 0xa3, 0x5a, 0xbf, 0x8e, 0x74, + 0x1a, 0xdc, 0xa5, 0x5b, 0x94, 0xd6, 0xee, 0x23, 0x9d, 0x0a, 0x7f, 0xd7, 0x82, 0x4c, 0xd0, 0x96, + 0x72, 0xcb, 0x58, 0x3d, 0xdd, 0x32, 0x67, 0x61, 0x20, 0x0a, 0x7d, 0x92, 0x7d, 0x92, 0x00, 0x87, + 0x3e, 0xc1, 0x0c, 0xa3, 0x9e, 0xa8, 0x2d, 0xf7, 0x7a, 0xa2, 0x96, 0xda, 0xe9, 0x3e, 0xd9, 0x26, + 0xd2, 0x49, 0xa2, 0xc4, 0xf8, 0x55, 0x0a, 0xc4, 0x1c, 0x67, 0xff, 0x5e, 0x19, 0x86, 0xb8, 0x27, + 0xe2, 0x18, 0xf6, 0xe9, 0x9a, 0x70, 0x0a, 0x14, 0xba, 0x93, 0xce, 0x5b, 0x35, 0x5f, 0x75, 0x12, + 0x87, 0x4f, 0x2e, 0xd5, 0xc7, 0xd4, 0x91, 0x80, 0xe6, 0x8d, 0x51, 0x98, 0xcd, 0xd8, 0xba, 0xc0, + 0x79, 0x68, 0x63, 0xb2, 0x05, 0x10, 0xb3, 0x27, 0x11, 0x29, 0x0f, 0x91, 0x79, 0xf3, 0xa5, 0x42, + 0xed, 0xa8, 0xab, 0x62, 0xbc, 0x35, 0x69, 0xba, 0x3f, 0x85, 0xc0, 0x1a, 0xef, 0xd9, 0x57, 0xa0, + 0xa2, 0x88, 0xf3, 0x8c, 0x80, 0x31, 0x7d, 0x72, 0xfe, 0x25, 0x98, 0xcc, 0xd4, 0xd5, 0x97, 0x0d, + 0xf1, 0x5b, 0x16, 0x4c, 0x66, 0x5e, 0x73, 0x47, 0x5f, 0xb1, 0x60, 0xda, 0xef, 0xe2, 0x88, 0x12, + 0x9f, 0xf9, 0x30, 0x2e, 0x2c, 0x65, 0x3e, 0x74, 0xc3, 0xe2, 0xae, 0xb5, 0x51, 0xb3, 0x92, 0xbf, + 0xf0, 0xea, 0xf8, 0x22, 0x06, 0x76, 0x8c, 0xe7, 0x1c, 0xe6, 0x30, 0xac, 0xb0, 0xf6, 0x4f, 0x2c, + 0x38, 0xd1, 0xf1, 0x60, 0xf8, 0xc3, 0xd2, 0x0d, 0x91, 0x5d, 0xb9, 0xd4, 0x23, 0xbb, 0xb2, 0xde, + 0xcb, 0xf2, 0x81, 0xbd, 0xfc, 0x75, 0x0b, 0xc4, 0x0c, 0x3d, 0x06, 0x0d, 0x70, 0xcd, 0xd4, 0x00, + 0x3f, 0x54, 0x64, 0xd2, 0xf7, 0x50, 0xfd, 0x7e, 0xa9, 0x04, 0x53, 0x9c, 0x20, 0xf5, 0xa9, 0x3f, + 0x2c, 0x1f, 0xa7, 0xbf, 0x57, 0x3f, 0xd4, 0x53, 0x8b, 0xdd, 0x7b, 0x6a, 0x7c, 0xcb, 0x81, 0x03, + 0xbf, 0xe5, 0x9f, 0x59, 0x80, 0xf8, 0x98, 0x64, 0x9f, 0xc7, 0xe5, 0xce, 0x5d, 0xcd, 0xa0, 0x4b, + 0x25, 0x87, 0xc2, 0x60, 0x8d, 0xea, 0x01, 0x77, 0x21, 0x73, 0xa2, 0x51, 0xce, 0x3f, 0xd1, 0xe8, + 0xa3, 0xd7, 0xbf, 0x5d, 0x86, 0x6c, 0x30, 0x1c, 0x7a, 0x1b, 0xc6, 0x1a, 0x4e, 0xcb, 0xb9, 0xe3, + 0xf9, 0x5e, 0xe2, 0x91, 0xb8, 0xd8, 0x91, 0xe9, 0xb2, 0x56, 0x42, 0x1c, 0x24, 0x68, 0x10, 0x6c, + 0x70, 0x44, 0xf3, 0x00, 0xad, 0xc8, 0xdb, 0xf6, 0x7c, 0xb2, 0xc9, 0x74, 0x56, 0x16, 0x4d, 0xcf, + 0x4f, 0xff, 0x24, 0x14, 0x6b, 0x14, 0x5d, 0xa2, 0xaf, 0xcb, 0xc7, 0x11, 0x7d, 0x3d, 0xd0, 0x67, + 0xf4, 0xf5, 0x60, 0xa1, 0xe8, 0x6b, 0x0c, 0xa7, 0xa5, 0xff, 0x9f, 0xfe, 0x5f, 0xf5, 0x7c, 0xc2, + 0x93, 0xcc, 0x8a, 0x68, 0xfb, 0xd9, 0xbd, 0xdd, 0xb9, 0xd3, 0xb8, 0x2b, 0x05, 0xee, 0x51, 0xd2, + 0x6e, 0xc3, 0xc9, 0x3a, 0x89, 0x3c, 0x96, 0xfb, 0xcf, 0x4d, 0xd7, 0xd2, 0xe7, 0xa1, 0x12, 0x65, + 0x96, 0x71, 0x9f, 0x57, 0xaa, 0xb5, 0x6c, 0x51, 0x72, 0xd9, 0xa6, 0x2c, 0xed, 0xbf, 0x51, 0x82, + 0x61, 0x11, 0x06, 0x77, 0x0c, 0xca, 0xc7, 0x15, 0xc3, 0x49, 0xf0, 0x4c, 0x9e, 0xfc, 0x63, 0xcd, + 0xea, 0xe9, 0x1e, 0xa8, 0x67, 0xdc, 0x03, 0xcf, 0x15, 0x63, 0x77, 0xb0, 0x63, 0xe0, 0x9f, 0x96, + 0x61, 0xc2, 0x0c, 0x0b, 0x3c, 0x86, 0x61, 0x79, 0x03, 0x86, 0x63, 0x11, 0xa1, 0x5a, 0x2a, 0x12, + 0x75, 0x95, 0xfd, 0xc4, 0xe9, 0x59, 0xaa, 0x88, 0x49, 0x95, 0xec, 0xba, 0x06, 0xc1, 0x96, 0x8f, + 0x25, 0x08, 0x36, 0x2f, 0x5a, 0x73, 0xe0, 0x41, 0x44, 0x6b, 0xda, 0x3f, 0x60, 0x22, 0x5f, 0x87, + 0x1f, 0xc3, 0x36, 0xfe, 0xba, 0xb9, 0x39, 0x9c, 0x2f, 0x34, 0xef, 0x44, 0xf3, 0x7a, 0x6c, 0xe7, + 0xdf, 0xb5, 0x60, 0x54, 0x10, 0x1e, 0x43, 0x07, 0x3e, 0x6d, 0x76, 0xe0, 0xa9, 0x42, 0x1d, 0xe8, + 0xd1, 0xf2, 0x6f, 0x94, 0x54, 0xcb, 0x6b, 0xe2, 0x49, 0xf3, 0xdc, 0x4c, 0xc7, 0x23, 0xad, 0x28, + 0x4c, 0xc2, 0x46, 0xe8, 0x0b, 0x05, 0xee, 0xb1, 0xf4, 0x72, 0x15, 0x87, 0xef, 0x6b, 0xbf, 0xb1, + 0xa2, 0x66, 0x77, 0x7f, 0xc2, 0x28, 0x11, 0x1b, 0x68, 0xb7, 0x07, 0xd5, 0x5d, 0x80, 0xf4, 0x15, + 0x6b, 0x71, 0x2f, 0xb1, 0xff, 0xa7, 0xda, 0xd3, 0xdb, 0x52, 0x8a, 0x17, 0xd6, 0xf8, 0xca, 0x30, + 0x7c, 0x56, 0xc7, 0xa0, 0x79, 0x06, 0x70, 0x5d, 0xc0, 0xb1, 0xa2, 0xb0, 0x5f, 0x61, 0x92, 0x9d, + 0x0d, 0x50, 0x7f, 0x17, 0x99, 0x7e, 0x71, 0x48, 0x0d, 0x2d, 0x73, 0xec, 0x5d, 0xd7, 0xaf, 0x4b, + 0x15, 0x15, 0x9f, 0xb4, 0x09, 0x7a, 0x24, 0x6c, 0x7a, 0xbb, 0x0a, 0x91, 0x8e, 0x83, 0xa3, 0x57, + 0x0a, 0x4b, 0xe4, 0x3e, 0x8e, 0x8a, 0x58, 0x72, 0x37, 0x96, 0xd1, 0x6a, 0xad, 0x96, 0xcd, 0x4f, + 0xbd, 0x2c, 0x11, 0x38, 0xa5, 0x41, 0x0b, 0xc2, 0xa0, 0x34, 0x5f, 0xbc, 0x97, 0x06, 0xa5, 0x1c, + 0x12, 0xcd, 0xa2, 0x7c, 0x01, 0x46, 0xd5, 0x93, 0x1f, 0x35, 0xfe, 0xd8, 0x42, 0x85, 0xeb, 0x57, + 0x2b, 0x29, 0x18, 0xeb, 0x34, 0x68, 0x0d, 0x4e, 0xba, 0xea, 0xd6, 0x45, 0xad, 0x7d, 0xc7, 0xf7, + 0x1a, 0xb4, 0x28, 0xbf, 0x31, 0xf9, 0xc8, 0xde, 0xee, 0xdc, 0xc9, 0x6a, 0x27, 0x1a, 0x77, 0x2b, + 0x83, 0xd6, 0x61, 0x32, 0xe6, 0x4f, 0x9b, 0xc8, 0xd0, 0x7a, 0x91, 0xb6, 0xf5, 0x59, 0x79, 0x62, + 0x55, 0x37, 0xd1, 0xfb, 0x0c, 0xc4, 0xa5, 0x82, 0x0c, 0xc6, 0xcf, 0xb2, 0x40, 0xaf, 0xc1, 0x84, + 0xaf, 0xbf, 0xdb, 0x58, 0x13, 0x97, 0x4f, 0x54, 0x0c, 0x92, 0xf1, 0xaa, 0x63, 0x0d, 0x67, 0xa8, + 0xd1, 0x1b, 0x30, 0xa3, 0x43, 0x44, 0x26, 0x18, 0x27, 0xd8, 0x24, 0xb1, 0x78, 0x06, 0xe1, 0xb1, + 0xbd, 0xdd, 0xb9, 0x99, 0xab, 0x3d, 0x68, 0x70, 0xcf, 0xd2, 0xe8, 0x22, 0x8c, 0xc9, 0x91, 0xd4, + 0x2e, 0xa2, 0xa4, 0xd1, 0x6f, 0x1a, 0x0e, 0x1b, 0x94, 0xef, 0xef, 0x60, 0xee, 0x8b, 0xb4, 0xb0, + 0xb6, 0x85, 0xa3, 0x77, 0x60, 0x4c, 0x6f, 0x63, 0x76, 0x6f, 0xce, 0x7f, 0x0b, 0x53, 0xa8, 0x02, + 0xaa, 0xe5, 0x3a, 0x0e, 0x1b, 0xbc, 0xed, 0x1b, 0x30, 0x54, 0xdf, 0x89, 0x1b, 0x89, 0x5f, 0x40, + 0xbe, 0x3d, 0x69, 0x74, 0x21, 0x5d, 0x7b, 0xec, 0x5d, 0x1e, 0xd1, 0x23, 0x9b, 0xc0, 0xe4, 0xfa, + 0x72, 0x8d, 0xbf, 0xfa, 0xbf, 0xc8, 0xad, 0x37, 0x2c, 0xa4, 0x9b, 0x75, 0x48, 0xa9, 0xd5, 0x45, + 0x1e, 0xda, 0x7f, 0x6c, 0xc1, 0x20, 0x7b, 0x53, 0x26, 0xef, 0x3d, 0xa2, 0x22, 0x8d, 0x46, 0x2f, + 0xc3, 0x10, 0xd9, 0xd8, 0x20, 0x8d, 0x44, 0x2c, 0x63, 0x19, 0xed, 0x3d, 0xb4, 0xc2, 0xa0, 0x74, + 0x71, 0xb2, 0xca, 0xf8, 0x5f, 0x2c, 0x88, 0xd1, 0xe7, 0xa0, 0x92, 0x78, 0x4d, 0xb2, 0xe8, 0xba, + 0xc4, 0x3d, 0xc4, 0x5d, 0x71, 0x25, 0x2c, 0xd6, 0x25, 0x13, 0x9c, 0xf2, 0xb3, 0xdf, 0x2b, 0x01, + 0xa4, 0x77, 0x2d, 0xf2, 0xba, 0xb9, 0xd4, 0xf1, 0xec, 0xd2, 0xd3, 0x5d, 0x9e, 0x5d, 0x42, 0x29, + 0xc3, 0x2e, 0x8f, 0x2e, 0xa9, 0xa1, 0x2a, 0x17, 0x1a, 0xaa, 0x81, 0x7e, 0x86, 0x6a, 0x19, 0x4e, + 0xa4, 0x77, 0x45, 0xcc, 0x4b, 0x77, 0x2c, 0x09, 0xe3, 0x7a, 0x16, 0x89, 0x3b, 0xe9, 0xed, 0xf7, + 0x2c, 0x10, 0x21, 0x6b, 0x05, 0x66, 0xab, 0x2b, 0x9f, 0x48, 0x31, 0xf2, 0x50, 0x3d, 0x5b, 0x24, + 0x9a, 0x4f, 0x64, 0x9f, 0x52, 0xeb, 0xc7, 0xc8, 0x39, 0x65, 0x70, 0xb5, 0x7f, 0xc3, 0x82, 0x51, + 0x8e, 0xbe, 0xc6, 0x74, 0xea, 0xfc, 0x76, 0xf5, 0x95, 0xe1, 0x93, 0xbd, 0x1e, 0x42, 0x19, 0xab, + 0x4c, 0x8f, 0xfa, 0xeb, 0x21, 0x12, 0x81, 0x53, 0x1a, 0xf4, 0x0c, 0x0c, 0xc7, 0xed, 0x3b, 0x8c, + 0x3c, 0x13, 0xbf, 0x56, 0xe7, 0x60, 0x2c, 0xf1, 0xf6, 0x3f, 0x2f, 0xc1, 0x54, 0x36, 0x7c, 0x11, + 0x61, 0x18, 0xe2, 0x3a, 0x76, 0x56, 0x3d, 0x3b, 0xc8, 0x97, 0xa3, 0x85, 0x3f, 0x02, 0x7f, 0x03, + 0x97, 0xc5, 0x9c, 0x09, 0x4e, 0x68, 0x03, 0x46, 0xdd, 0xf0, 0x5e, 0x70, 0xcf, 0x89, 0xdc, 0xc5, + 0xda, 0x9a, 0xf8, 0x12, 0x39, 0x01, 0x27, 0xd5, 0xb4, 0x80, 0x1e, 0x5c, 0xc9, 0x7c, 0x0b, 0x29, + 0x0a, 0xeb, 0x8c, 0xa9, 0x4d, 0xd9, 0x08, 0x83, 0x0d, 0x6f, 0xf3, 0x9a, 0xd3, 0x2a, 0x76, 0xb4, + 0xba, 0x2c, 0xc9, 0xb5, 0x3a, 0xc6, 0xc5, 0x2d, 0x7b, 0x8e, 0xc0, 0x29, 0x4b, 0xfb, 0x0f, 0x4e, + 0x82, 0x31, 0x17, 0x8c, 0x34, 0x9c, 0xd6, 0x03, 0x4f, 0xc3, 0xf9, 0x26, 0x8c, 0x90, 0x66, 0x2b, + 0xd9, 0xa9, 0x7a, 0x51, 0xb1, 0xa4, 0xca, 0x2b, 0x82, 0xba, 0x93, 0xbb, 0xc4, 0x60, 0xc5, 0xb1, + 0x47, 0x52, 0xd5, 0xf2, 0x43, 0x91, 0x54, 0x75, 0xe0, 0xcf, 0x25, 0xa9, 0xea, 0x1b, 0x30, 0xbc, + 0xe9, 0x25, 0x98, 0xb4, 0x42, 0x91, 0xb6, 0x20, 0x67, 0xf2, 0x5c, 0xe2, 0xc4, 0x9d, 0x99, 0x12, + 0x05, 0x02, 0x4b, 0x76, 0x68, 0x5d, 0x2d, 0xaa, 0xa1, 0x22, 0x7b, 0x79, 0xa7, 0xaf, 0xaf, 0xeb, + 0xb2, 0x12, 0x49, 0x54, 0x87, 0xdf, 0x7f, 0x12, 0x55, 0x95, 0xfa, 0x74, 0xe4, 0x41, 0xa5, 0x3e, + 0x35, 0x52, 0xc8, 0x56, 0x8e, 0x22, 0x85, 0xec, 0x7b, 0x16, 0x9c, 0x6a, 0x75, 0x4b, 0xc0, 0x2c, + 0x92, 0x98, 0x7e, 0xf2, 0x10, 0x29, 0xa9, 0x8d, 0xaa, 0xd9, 0x65, 0xf0, 0xae, 0x64, 0xb8, 0x7b, + 0xc5, 0x32, 0x17, 0xed, 0xe8, 0xfb, 0xcf, 0x45, 0x7b, 0xd4, 0xd9, 0x4e, 0xd3, 0xcc, 0xb4, 0xe3, + 0x47, 0x92, 0x99, 0x76, 0xe2, 0x01, 0x66, 0xa6, 0xd5, 0x72, 0xca, 0x4e, 0x3e, 0xd8, 0x9c, 0xb2, + 0x5b, 0xe6, 0xbe, 0xc4, 0x53, 0x98, 0xbe, 0x5c, 0x78, 0x5f, 0x32, 0x6a, 0x38, 0x78, 0x67, 0xe2, + 0xd9, 0x75, 0x4f, 0xbc, 0xcf, 0xec, 0xba, 0x46, 0x8e, 0x5a, 0x74, 0x14, 0x39, 0x6a, 0xdf, 0xd6, + 0x77, 0xd0, 0x93, 0x45, 0x6a, 0x50, 0x1b, 0x65, 0x67, 0x0d, 0xdd, 0xf6, 0xd0, 0xce, 0x2c, 0xb8, + 0xd3, 0xc7, 0x9d, 0x05, 0xf7, 0xd4, 0x11, 0x66, 0xc1, 0x3d, 0x7d, 0xac, 0x59, 0x70, 0x1f, 0x79, + 0x48, 0xb2, 0xe0, 0xce, 0x1c, 0x65, 0x16, 0x5c, 0x3a, 0xc0, 0x2d, 0x79, 0x55, 0x67, 0xe6, 0xd1, + 0x22, 0x03, 0xdc, 0xf5, 0x66, 0x0f, 0x1f, 0x60, 0x85, 0xc2, 0x29, 0x53, 0xfb, 0xaf, 0xc0, 0x99, + 0x83, 0x27, 0x58, 0xfa, 0xf6, 0x44, 0x2d, 0xf5, 0x6c, 0x65, 0xde, 0x9e, 0x60, 0xca, 0x9b, 0x46, + 0x55, 0x38, 0x4d, 0xe7, 0xb7, 0x2d, 0x78, 0xa4, 0x47, 0x16, 0xbb, 0xc2, 0xf7, 0xdc, 0x5a, 0x30, + 0xd9, 0x32, 0x8b, 0x16, 0xbe, 0x36, 0x6b, 0x64, 0xcd, 0x53, 0xb1, 0xc8, 0x19, 0x04, 0xce, 0xb2, + 0x5f, 0xfa, 0xd0, 0x0f, 0x7f, 0x7c, 0xe6, 0x03, 0x3f, 0xfa, 0xf1, 0x99, 0x0f, 0xfc, 0xd1, 0x8f, + 0xcf, 0x7c, 0xe0, 0xe7, 0xf6, 0xce, 0x58, 0x3f, 0xdc, 0x3b, 0x63, 0xfd, 0x68, 0xef, 0x8c, 0xf5, + 0x27, 0x7b, 0x67, 0xac, 0xf7, 0x7e, 0x72, 0xe6, 0x03, 0x9f, 0x2d, 0x6d, 0xbf, 0xf0, 0xff, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x4c, 0xce, 0x2d, 0xad, 0x70, 0xc5, 0x00, 0x00, } diff --git a/pkg/api/v1/generated.proto b/pkg/api/v1/generated.proto index cbef8b83b7..7425337af7 100644 --- a/pkg/api/v1/generated.proto +++ b/pkg/api/v1/generated.proto @@ -2128,6 +2128,10 @@ message PersistentVolumeSource { // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine optional PhotonPersistentDiskVolumeSource photonPersistentDisk = 17; + + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + optional PortworxVolumeSource portworxVolume = 18; } // PersistentVolumeSpec is the specification of a persistent volume. @@ -2790,6 +2794,22 @@ message PodTemplateSpec { optional PodSpec spec = 2; } +// PortworxVolumeSource represents a Portworx volume resource. +message PortworxVolumeSource { + // VolumeID uniquely identifies a Portworx volume + optional string volumeID = 1; + + // FSType represents the filesystem type to mount + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + optional string fsType = 2; + + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + optional bool readOnly = 3; +} + // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. // +k8s:openapi-gen=false message Preconditions { @@ -3811,7 +3831,11 @@ message VolumeSource { optional PhotonPersistentDiskVolumeSource photonPersistentDisk = 23; // Items for all in one resources secrets, configmaps, and downward API - optional ProjectedVolumeSource projected = 24; + optional ProjectedVolumeSource projected = 25; + + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + optional PortworxVolumeSource portworxVolume = 24; } // Represents a vSphere volume resource. diff --git a/pkg/api/v1/types.generated.go b/pkg/api/v1/types.generated.go index 32f162a1b8..8b203c54b4 100644 --- a/pkg/api/v1/types.generated.go +++ b/pkg/api/v1/types.generated.go @@ -1222,7 +1222,7 @@ func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [25]bool + var yyq2 [26]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[1] = x.VolumeSource.HostPath != nil && x.HostPath != nil @@ -1249,9 +1249,10 @@ func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[22] = x.VolumeSource.AzureDisk != nil && x.AzureDisk != nil yyq2[23] = x.VolumeSource.PhotonPersistentDisk != nil && x.PhotonPersistentDisk != nil yyq2[24] = x.VolumeSource.Projected != nil && x.Projected != nil + yyq2[25] = x.VolumeSource.PortworxVolume != nil && x.PortworxVolume != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(25) + r.EncodeArrayStart(26) } else { yynn2 = 1 for _, b := range yyq2 { @@ -2169,6 +2170,43 @@ func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { } } } + var yyn78 bool + if x.VolumeSource.PortworxVolume == nil { + yyn78 = true + goto LABEL78 + } + LABEL78: + if yyr2 || yy2arr2 { + if yyn78 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[25] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq2[25] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn78 { + r.EncodeNil() + } else { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -2578,6 +2616,20 @@ func (x *Volume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } + case "portworxVolume": + if x.VolumeSource.PortworxVolume == nil { + x.VolumeSource.PortworxVolume = new(PortworxVolumeSource) + } + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -2589,16 +2641,16 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj30 int - var yyb30 bool - var yyhl30 bool = l >= 0 - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + var yyj31 int + var yyb31 bool + var yyhl31 bool = l >= 0 + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2606,24 +2658,24 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if r.TryDecodeAsNil() { x.Name = "" } else { - yyv31 := &x.Name - yym32 := z.DecBinary() - _ = yym32 + yyv32 := &x.Name + yym33 := z.DecBinary() + _ = yym33 if false { } else { - *((*string)(yyv31)) = r.DecodeString() + *((*string)(yyv32)) = r.DecodeString() } } if x.VolumeSource.HostPath == nil { x.VolumeSource.HostPath = new(HostPathVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2641,13 +2693,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.EmptyDir == nil { x.VolumeSource.EmptyDir = new(EmptyDirVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2665,13 +2717,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.GCEPersistentDisk == nil { x.VolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2689,13 +2741,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.AWSElasticBlockStore == nil { x.VolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2713,13 +2765,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.GitRepo == nil { x.VolumeSource.GitRepo = new(GitRepoVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2737,13 +2789,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Secret == nil { x.VolumeSource.Secret = new(SecretVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2761,13 +2813,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.NFS == nil { x.VolumeSource.NFS = new(NFSVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2785,13 +2837,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.ISCSI == nil { x.VolumeSource.ISCSI = new(ISCSIVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2809,13 +2861,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Glusterfs == nil { x.VolumeSource.Glusterfs = new(GlusterfsVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2833,13 +2885,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.PersistentVolumeClaim == nil { x.VolumeSource.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2857,13 +2909,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.RBD == nil { x.VolumeSource.RBD = new(RBDVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2881,13 +2933,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.FlexVolume == nil { x.VolumeSource.FlexVolume = new(FlexVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2905,13 +2957,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Cinder == nil { x.VolumeSource.Cinder = new(CinderVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2929,13 +2981,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.CephFS == nil { x.VolumeSource.CephFS = new(CephFSVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2953,13 +3005,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Flocker == nil { x.VolumeSource.Flocker = new(FlockerVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2977,13 +3029,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.DownwardAPI == nil { x.VolumeSource.DownwardAPI = new(DownwardAPIVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3001,13 +3053,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.FC == nil { x.VolumeSource.FC = new(FCVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3025,13 +3077,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.AzureFile == nil { x.VolumeSource.AzureFile = new(AzureFileVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3049,13 +3101,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.ConfigMap == nil { x.VolumeSource.ConfigMap = new(ConfigMapVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3073,13 +3125,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.VsphereVolume == nil { x.VolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3097,13 +3149,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Quobyte == nil { x.VolumeSource.Quobyte = new(QuobyteVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3121,13 +3173,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.AzureDisk == nil { x.VolumeSource.AzureDisk = new(AzureDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3145,13 +3197,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.PhotonPersistentDisk == nil { x.VolumeSource.PhotonPersistentDisk = new(PhotonPersistentDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3169,13 +3221,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Projected == nil { x.VolumeSource.Projected = new(ProjectedVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3190,18 +3242,42 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } - for { - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l - } else { - yyb30 = r.CheckBreak() + if x.VolumeSource.PortworxVolume == nil { + x.VolumeSource.PortworxVolume = new(PortworxVolumeSource) + } + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l + } else { + yyb31 = r.CheckBreak() + } + if yyb31 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil } - if yyb30 { + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + for { + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l + } else { + yyb31 = r.CheckBreak() + } + if yyb31 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj30-1, "") + z.DecStructFieldNotFound(yyj31-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -3220,7 +3296,7 @@ func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [24]bool + var yyq2 [25]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.HostPath != nil @@ -3247,9 +3323,10 @@ func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[21] = x.AzureDisk != nil yyq2[22] = x.PhotonPersistentDisk != nil yyq2[23] = x.Projected != nil + yyq2[24] = x.PortworxVolume != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(24) + r.EncodeArrayStart(25) } else { yynn2 = 0 for _, b := range yyq2 { @@ -3812,6 +3889,29 @@ func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[24] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[24] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -4137,6 +4237,17 @@ func (x *VolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } + case "portworxVolume": + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -4148,16 +4259,16 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj28 int - var yyb28 bool - var yyhl28 bool = l >= 0 - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + var yyj29 int + var yyb29 bool + var yyhl29 bool = l >= 0 + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4172,13 +4283,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.HostPath.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4193,13 +4304,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.EmptyDir.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4214,13 +4325,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.GCEPersistentDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4235,13 +4346,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.AWSElasticBlockStore.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4256,13 +4367,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.GitRepo.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4277,13 +4388,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Secret.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4298,13 +4409,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.NFS.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4319,13 +4430,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.ISCSI.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4340,13 +4451,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Glusterfs.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4361,13 +4472,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.PersistentVolumeClaim.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4382,13 +4493,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.RBD.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4403,13 +4514,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.FlexVolume.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4424,13 +4535,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Cinder.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4445,13 +4556,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.CephFS.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4466,13 +4577,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Flocker.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4487,13 +4598,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.DownwardAPI.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4508,13 +4619,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.FC.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4529,13 +4640,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.AzureFile.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4550,13 +4661,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.ConfigMap.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4571,13 +4682,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.VsphereVolume.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4592,13 +4703,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Quobyte.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4613,13 +4724,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.AzureDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4634,13 +4745,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.PhotonPersistentDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4655,18 +4766,39 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } - for { - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l - } else { - yyb28 = r.CheckBreak() + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil } - if yyb28 { + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + for { + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj28-1, "") + z.DecStructFieldNotFound(yyj29-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -4919,7 +5051,7 @@ func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [17]bool + var yyq2 [18]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.GCEPersistentDisk != nil @@ -4939,9 +5071,10 @@ func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[14] = x.Quobyte != nil yyq2[15] = x.AzureDisk != nil yyq2[16] = x.PhotonPersistentDisk != nil + yyq2[17] = x.PortworxVolume != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(17) + r.EncodeArrayStart(18) } else { yynn2 = 0 for _, b := range yyq2 { @@ -5343,6 +5476,29 @@ func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[17] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -5591,6 +5747,17 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Deco } x.PhotonPersistentDisk.CodecDecodeSelf(d) } + case "portworxVolume": + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -5602,16 +5769,16 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj21 int - var yyb21 bool - var yyhl21 bool = l >= 0 - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + var yyj22 int + var yyb22 bool + var yyhl22 bool = l >= 0 + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5626,13 +5793,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.GCEPersistentDisk.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5647,13 +5814,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.AWSElasticBlockStore.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5668,13 +5835,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.HostPath.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5689,13 +5856,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Glusterfs.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5710,13 +5877,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.NFS.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5731,13 +5898,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.RBD.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5752,13 +5919,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.ISCSI.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5773,13 +5940,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Cinder.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5794,13 +5961,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.CephFS.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5815,13 +5982,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.FC.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5836,13 +6003,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Flocker.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5857,13 +6024,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.FlexVolume.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5878,13 +6045,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.AzureFile.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5899,13 +6066,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.VsphereVolume.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5920,13 +6087,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Quobyte.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5941,13 +6108,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.AzureDisk.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5962,18 +6129,39 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.PhotonPersistentDisk.CodecDecodeSelf(d) } - for { - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l - } else { - yyb21 = r.CheckBreak() + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil } - if yyb21 { + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + for { + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj21-1, "") + z.DecStructFieldNotFound(yyj22-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -6383,7 +6571,7 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [22]bool + var yyq2 [23]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = len(x.Capacity) != 0 @@ -6404,13 +6592,14 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[15] = x.PersistentVolumeSource.Quobyte != nil && x.Quobyte != nil yyq2[16] = x.PersistentVolumeSource.AzureDisk != nil && x.AzureDisk != nil yyq2[17] = x.PersistentVolumeSource.PhotonPersistentDisk != nil && x.PhotonPersistentDisk != nil - yyq2[18] = len(x.AccessModes) != 0 - yyq2[19] = x.ClaimRef != nil - yyq2[20] = x.PersistentVolumeReclaimPolicy != "" - yyq2[21] = x.StorageClassName != "" + yyq2[18] = x.PersistentVolumeSource.PortworxVolume != nil && x.PortworxVolume != nil + yyq2[19] = len(x.AccessModes) != 0 + yyq2[20] = x.ClaimRef != nil + yyq2[21] = x.PersistentVolumeReclaimPolicy != "" + yyq2[22] = x.StorageClassName != "" var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(22) + r.EncodeArrayStart(23) } else { yynn2 = 0 for _, b := range yyq2 { @@ -7073,14 +7262,51 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } } } + var yyn57 bool + if x.PersistentVolumeSource.PortworxVolume == nil { + yyn57 = true + goto LABEL57 + } + LABEL57: + if yyr2 || yy2arr2 { + if yyn57 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[18] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq2[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn57 { + r.EncodeNil() + } else { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[18] { + if yyq2[19] { if x.AccessModes == nil { r.EncodeNil() } else { - yym58 := z.EncBinary() - _ = yym58 + yym61 := z.EncBinary() + _ = yym61 if false { } else { h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) @@ -7090,15 +7316,15 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeNil() } } else { - if yyq2[18] { + if yyq2[19] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("accessModes")) z.EncSendContainerState(codecSelfer_containerMapValue1234) if x.AccessModes == nil { r.EncodeNil() } else { - yym59 := z.EncBinary() - _ = yym59 + yym62 := z.EncBinary() + _ = yym62 if false { } else { h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) @@ -7108,7 +7334,7 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[19] { + if yyq2[20] { if x.ClaimRef == nil { r.EncodeNil() } else { @@ -7118,7 +7344,7 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeNil() } } else { - if yyq2[19] { + if yyq2[20] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("claimRef")) z.EncSendContainerState(codecSelfer_containerMapValue1234) @@ -7131,13 +7357,13 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[20] { + if yyq2[21] { x.PersistentVolumeReclaimPolicy.CodecEncodeSelf(e) } else { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq2[20] { + if yyq2[21] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeReclaimPolicy")) z.EncSendContainerState(codecSelfer_containerMapValue1234) @@ -7146,9 +7372,9 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[21] { - yym67 := z.EncBinary() - _ = yym67 + if yyq2[22] { + yym70 := z.EncBinary() + _ = yym70 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.StorageClassName)) @@ -7157,12 +7383,12 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq2[21] { + if yyq2[22] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("storageClassName")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym68 := z.EncBinary() - _ = yym68 + yym71 := z.EncBinary() + _ = yym71 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.StorageClassName)) @@ -7475,16 +7701,30 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decode } x.PhotonPersistentDisk.CodecDecodeSelf(d) } + case "portworxVolume": + if x.PersistentVolumeSource.PortworxVolume == nil { + x.PersistentVolumeSource.PortworxVolume = new(PortworxVolumeSource) + } + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } case "accessModes": if r.TryDecodeAsNil() { x.AccessModes = nil } else { - yyv22 := &x.AccessModes - yym23 := z.DecBinary() - _ = yym23 + yyv23 := &x.AccessModes + yym24 := z.DecBinary() + _ = yym24 if false { } else { - h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv22), d) + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv23), d) } } case "claimRef": @@ -7502,19 +7742,19 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.PersistentVolumeReclaimPolicy = "" } else { - yyv25 := &x.PersistentVolumeReclaimPolicy - yyv25.CodecDecodeSelf(d) + yyv26 := &x.PersistentVolumeReclaimPolicy + yyv26.CodecDecodeSelf(d) } case "storageClassName": if r.TryDecodeAsNil() { x.StorageClassName = "" } else { - yyv26 := &x.StorageClassName - yym27 := z.DecBinary() - _ = yym27 + yyv27 := &x.StorageClassName + yym28 := z.DecBinary() + _ = yym28 if false { } else { - *((*string)(yyv26)) = r.DecodeString() + *((*string)(yyv27)) = r.DecodeString() } } default: @@ -7528,16 +7768,16 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj28 int - var yyb28 bool - var yyhl28 bool = l >= 0 - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + var yyj29 int + var yyb29 bool + var yyhl29 bool = l >= 0 + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7545,19 +7785,19 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.Capacity = nil } else { - yyv29 := &x.Capacity - yyv29.CodecDecodeSelf(d) + yyv30 := &x.Capacity + yyv30.CodecDecodeSelf(d) } if x.PersistentVolumeSource.GCEPersistentDisk == nil { x.PersistentVolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7575,13 +7815,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.AWSElasticBlockStore == nil { x.PersistentVolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7599,13 +7839,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.HostPath == nil { x.PersistentVolumeSource.HostPath = new(HostPathVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7623,13 +7863,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Glusterfs == nil { x.PersistentVolumeSource.Glusterfs = new(GlusterfsVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7647,13 +7887,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.NFS == nil { x.PersistentVolumeSource.NFS = new(NFSVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7671,13 +7911,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.RBD == nil { x.PersistentVolumeSource.RBD = new(RBDVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7695,13 +7935,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.ISCSI == nil { x.PersistentVolumeSource.ISCSI = new(ISCSIVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7719,13 +7959,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Cinder == nil { x.PersistentVolumeSource.Cinder = new(CinderVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7743,13 +7983,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.CephFS == nil { x.PersistentVolumeSource.CephFS = new(CephFSVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7767,13 +8007,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.FC == nil { x.PersistentVolumeSource.FC = new(FCVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7791,13 +8031,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Flocker == nil { x.PersistentVolumeSource.Flocker = new(FlockerVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7815,13 +8055,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.FlexVolume == nil { x.PersistentVolumeSource.FlexVolume = new(FlexVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7839,13 +8079,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.AzureFile == nil { x.PersistentVolumeSource.AzureFile = new(AzureFileVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7863,13 +8103,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.VsphereVolume == nil { x.PersistentVolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7887,13 +8127,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Quobyte == nil { x.PersistentVolumeSource.Quobyte = new(QuobyteVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7911,13 +8151,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.AzureDisk == nil { x.PersistentVolumeSource.AzureDisk = new(AzureDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7935,13 +8175,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.PhotonPersistentDisk == nil { x.PersistentVolumeSource.PhotonPersistentDisk = new(PhotonPersistentDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7956,13 +8196,37 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco } x.PhotonPersistentDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l - } else { - yyb28 = r.CheckBreak() + if x.PersistentVolumeSource.PortworxVolume == nil { + x.PersistentVolumeSource.PortworxVolume = new(PortworxVolumeSource) } - if yyb28 { + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7970,21 +8234,21 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.AccessModes = nil } else { - yyv47 := &x.AccessModes - yym48 := z.DecBinary() - _ = yym48 + yyv49 := &x.AccessModes + yym50 := z.DecBinary() + _ = yym50 if false { } else { - h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv47), d) + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv49), d) } } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7999,13 +8263,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco } x.ClaimRef.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -8013,16 +8277,16 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.PersistentVolumeReclaimPolicy = "" } else { - yyv50 := &x.PersistentVolumeReclaimPolicy - yyv50.CodecDecodeSelf(d) + yyv52 := &x.PersistentVolumeReclaimPolicy + yyv52.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -8030,26 +8294,26 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.StorageClassName = "" } else { - yyv51 := &x.StorageClassName - yym52 := z.DecBinary() - _ = yym52 + yyv53 := &x.StorageClassName + yym54 := z.DecBinary() + _ = yym54 if false { } else { - *((*string)(yyv51)) = r.DecodeString() + *((*string)(yyv53)) = r.DecodeString() } } for { - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj28-1, "") + z.DecStructFieldNotFound(yyj29-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -17539,6 +17803,300 @@ func (x *AzureDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Dec z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } +func (x *PortworxVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[1] = x.FSType != "" + yyq2[2] = x.ReadOnly != false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) + } else { + yynn2 = 1 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PortworxVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap1234 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray1234 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PortworxVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3 := string(yys3Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3 { + case "volumeID": + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + yyv4 := &x.VolumeID + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyv4)) = r.DecodeString() + } + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + yyv6 := &x.FSType + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(yyv6)) = r.DecodeString() + } + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + yyv8 := &x.ReadOnly + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*bool)(yyv8)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PortworxVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + yyv11 := &x.VolumeID + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*string)(yyv11)) = r.DecodeString() + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + yyv13 := &x.FSType + yym14 := z.DecBinary() + _ = yym14 + if false { + } else { + *((*string)(yyv13)) = r.DecodeString() + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + yyv15 := &x.ReadOnly + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + *((*bool)(yyv15)) = r.DecodeBool() + } + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj10-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + func (x *ConfigMapVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) @@ -65428,7 +65986,7 @@ func (x codecSelfer1234) decSlicePersistentVolume(v *[]PersistentVolume, d *code yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 512) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 520) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] @@ -67207,7 +67765,7 @@ func (x codecSelfer1234) decSliceVolume(v *[]Volume, d *codec1978.Decoder) { yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 208) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 216) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/pkg/api/v1/types.go b/pkg/api/v1/types.go index 98374a9942..2b7b025e9b 100644 --- a/pkg/api/v1/types.go +++ b/pkg/api/v1/types.go @@ -328,6 +328,9 @@ type VolumeSource struct { PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,23,opt,name=photonPersistentDisk"` // Items for all in one resources secrets, configmaps, and downward API Projected *ProjectedVolumeSource `json:"projected,omitempty"` + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource `json:"portworxVolume,omitempty" protobuf:"bytes,24,opt,name=portworxVolume"` } // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. @@ -413,6 +416,9 @@ type PersistentVolumeSource struct { AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,16,opt,name=azureDisk"` // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,17,opt,name=photonPersistentDisk"` + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource `json:"portworxVolume,omitempty" protobuf:"bytes,18,opt,name=portworxVolume"` } // +genclient=true @@ -1107,6 +1113,20 @@ type AzureDiskVolumeSource struct { ReadOnly *bool `json:"readOnly,omitempty" protobuf:"varint,5,opt,name=readOnly"` } +// PortworxVolumeSource represents a Portworx volume resource. +type PortworxVolumeSource struct { + // VolumeID uniquely identifies a Portworx volume + VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` + // FSType represents the filesystem type to mount + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` +} + // Adapts a ConfigMap into a volume. // // The contents of the target ConfigMap's Data field will be presented in a diff --git a/pkg/api/v1/types_swagger_doc_generated.go b/pkg/api/v1/types_swagger_doc_generated.go index 4eeb5a813a..f0516f89fb 100644 --- a/pkg/api/v1/types_swagger_doc_generated.go +++ b/pkg/api/v1/types_swagger_doc_generated.go @@ -1122,6 +1122,7 @@ var map_PersistentVolumeSource = map[string]string{ "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", "photonPersistentDisk": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", + "portworxVolume": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", } func (PersistentVolumeSource) SwaggerDoc() map[string]string { @@ -1399,6 +1400,17 @@ func (PodTemplateSpec) SwaggerDoc() map[string]string { return map_PodTemplateSpec } +var map_PortworxVolumeSource = map[string]string{ + "": "PortworxVolumeSource represents a Portworx volume resource.", + "volumeID": "VolumeID uniquely identifies a Portworx volume", + "fsType": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", +} + +func (PortworxVolumeSource) SwaggerDoc() map[string]string { + return map_PortworxVolumeSource +} + var map_Preconditions = map[string]string{ "": "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", "uid": "Specifies the target UID.", @@ -1897,6 +1909,7 @@ var map_VolumeSource = map[string]string{ "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", "photonPersistentDisk": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", "projected": "Items for all in one resources secrets, configmaps, and downward API", + "portworxVolume": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", } func (VolumeSource) SwaggerDoc() map[string]string { diff --git a/pkg/api/v1/zz_generated.conversion.go b/pkg/api/v1/zz_generated.conversion.go index 22066b9726..26ec86e161 100644 --- a/pkg/api/v1/zz_generated.conversion.go +++ b/pkg/api/v1/zz_generated.conversion.go @@ -275,6 +275,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_api_PodTemplateList_To_v1_PodTemplateList, Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec, Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec, + Convert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource, + Convert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource, Convert_v1_Preconditions_To_api_Preconditions, Convert_api_Preconditions_To_v1_Preconditions, Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry, @@ -2706,6 +2708,7 @@ func autoConvert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in *Per out.Quobyte = (*api.QuobyteVolumeSource)(unsafe.Pointer(in.Quobyte)) out.AzureDisk = (*api.AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*api.PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) + out.PortworxVolume = (*api.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } @@ -2731,6 +2734,7 @@ func autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api out.VsphereVolume = (*VsphereVirtualDiskVolumeSource)(unsafe.Pointer(in.VsphereVolume)) out.AzureDisk = (*AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) + out.PortworxVolume = (*PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } @@ -3341,6 +3345,28 @@ func autoConvert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in *api.PodTemplateSp return nil } +func autoConvert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource(in *PortworxVolumeSource, out *api.PortworxVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource(in *PortworxVolumeSource, out *api.PortworxVolumeSource, s conversion.Scope) error { + return autoConvert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource(in, out, s) +} + +func autoConvert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource(in *api.PortworxVolumeSource, out *PortworxVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource(in *api.PortworxVolumeSource, out *PortworxVolumeSource, s conversion.Scope) error { + return autoConvert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource(in, out, s) +} + func autoConvert_v1_Preconditions_To_api_Preconditions(in *Preconditions, out *api.Preconditions, s conversion.Scope) error { out.UID = (*types.UID)(unsafe.Pointer(in.UID)) return nil @@ -4458,6 +4484,7 @@ func autoConvert_v1_VolumeSource_To_api_VolumeSource(in *VolumeSource, out *api. out.AzureDisk = (*api.AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*api.PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) out.Projected = (*api.ProjectedVolumeSource)(unsafe.Pointer(in.Projected)) + out.PortworxVolume = (*api.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } @@ -4490,6 +4517,7 @@ func autoConvert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out * out.AzureDisk = (*AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) out.Projected = (*ProjectedVolumeSource)(unsafe.Pointer(in.Projected)) + out.PortworxVolume = (*PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } diff --git a/pkg/api/v1/zz_generated.deepcopy.go b/pkg/api/v1/zz_generated.deepcopy.go index 95cbf40f38..a1c916a660 100644 --- a/pkg/api/v1/zz_generated.deepcopy.go +++ b/pkg/api/v1/zz_generated.deepcopy.go @@ -155,6 +155,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PortworxVolumeSource, InType: reflect.TypeOf(&PortworxVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, @@ -2015,6 +2016,11 @@ func DeepCopy_v1_PersistentVolumeSource(in interface{}, out interface{}, c *conv *out = new(PhotonPersistentDiskVolumeSource) **out = **in } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } @@ -2513,6 +2519,15 @@ func DeepCopy_v1_PodTemplateSpec(in interface{}, out interface{}, c *conversion. } } +func DeepCopy_v1_PortworxVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PortworxVolumeSource) + out := out.(*PortworxVolumeSource) + *out = *in + return nil + } +} + func DeepCopy_v1_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*Preconditions) @@ -3420,6 +3435,11 @@ func DeepCopy_v1_VolumeSource(in interface{}, out interface{}, c *conversion.Clo return err } } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } diff --git a/pkg/api/validation/validation.go b/pkg/api/validation/validation.go index 205f347f04..8b002a4920 100644 --- a/pkg/api/validation/validation.go +++ b/pkg/api/validation/validation.go @@ -511,6 +511,14 @@ func validateVolumeSource(source *api.VolumeSource, fldPath *field.Path) field.E allErrs = append(allErrs, validatePhotonPersistentDiskVolumeSource(source.PhotonPersistentDisk, fldPath.Child("photonPersistentDisk"))...) } } + if source.PortworxVolume != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(fldPath.Child("portworxVolume"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validatePortworxVolumeSource(source.PortworxVolume, fldPath.Child("portworxVolume"))...) + } + } if source.AzureDisk != nil { numVolumes++ allErrs = append(allErrs, validateAzureDisk(source.AzureDisk, fldPath.Child("azureDisk"))...) @@ -979,6 +987,14 @@ func validatePhotonPersistentDiskVolumeSource(cd *api.PhotonPersistentDiskVolume return allErrs } +func validatePortworxVolumeSource(pwx *api.PortworxVolumeSource, fldPath *field.Path) field.ErrorList { + allErrs := field.ErrorList{} + if len(pwx.VolumeID) == 0 { + allErrs = append(allErrs, field.Required(fldPath.Child("volumeID"), "")) + } + return allErrs +} + // ValidatePersistentVolumeName checks that a name is appropriate for a // PersistentVolumeName object. var ValidatePersistentVolumeName = NameIsDNSSubdomain @@ -1138,6 +1154,14 @@ func ValidatePersistentVolume(pv *api.PersistentVolume) field.ErrorList { allErrs = append(allErrs, validatePhotonPersistentDiskVolumeSource(pv.Spec.PhotonPersistentDisk, specPath.Child("photonPersistentDisk"))...) } } + if pv.Spec.PortworxVolume != nil { + if numVolumes > 0 { + allErrs = append(allErrs, field.Forbidden(specPath.Child("portworxVolume"), "may not specify more than 1 volume type")) + } else { + numVolumes++ + allErrs = append(allErrs, validatePortworxVolumeSource(pv.Spec.PortworxVolume, specPath.Child("portworxVolume"))...) + } + } if pv.Spec.AzureDisk != nil { numVolumes++ allErrs = append(allErrs, validateAzureDisk(pv.Spec.AzureDisk, specPath.Child("azureDisk"))...) diff --git a/pkg/api/zz_generated.deepcopy.go b/pkg/api/zz_generated.deepcopy.go index 448f917eea..47fc350748 100644 --- a/pkg/api/zz_generated.deepcopy.go +++ b/pkg/api/zz_generated.deepcopy.go @@ -158,6 +158,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PortworxVolumeSource, InType: reflect.TypeOf(&PortworxVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, @@ -2059,6 +2060,11 @@ func DeepCopy_api_PersistentVolumeSource(in interface{}, out interface{}, c *con *out = new(PhotonPersistentDiskVolumeSource) **out = **in } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } @@ -2557,6 +2563,15 @@ func DeepCopy_api_PodTemplateSpec(in interface{}, out interface{}, c *conversion } } +func DeepCopy_api_PortworxVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PortworxVolumeSource) + out := out.(*PortworxVolumeSource) + *out = *in + return nil + } +} + func DeepCopy_api_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*Preconditions) @@ -3447,6 +3462,11 @@ func DeepCopy_api_VolumeSource(in interface{}, out interface{}, c *conversion.Cl return err } } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } diff --git a/pkg/apis/extensions/types.go b/pkg/apis/extensions/types.go index d12a9d5985..ac4c6f7e77 100644 --- a/pkg/apis/extensions/types.go +++ b/pkg/apis/extensions/types.go @@ -917,6 +917,7 @@ var ( AzureDisk FSType = "azureDisk" PhotonPersistentDisk FSType = "photonPersistentDisk" Projected FSType = "projected" + PortworxVolume FSType = "portworxVolume" All FSType = "*" ) diff --git a/pkg/generated/openapi/zz_generated.openapi.go b/pkg/generated/openapi/zz_generated.openapi.go index 1551eb38e6..58a072d7b2 100644 --- a/pkg/generated/openapi/zz_generated.openapi.go +++ b/pkg/generated/openapi/zz_generated.openapi.go @@ -5572,11 +5572,17 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope Ref: ref("k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource"), }, }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource"), + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, + "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, }, "k8s.io/kubernetes/pkg/api/v1.PersistentVolumeSpec": { Schema: spec.Schema{ @@ -5698,6 +5704,12 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope Ref: ref("k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource"), }, }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource"), + }, + }, "accessModes": { SchemaProps: spec.SchemaProps{ Description: "AccessModes contains all ways the volume can be mounted. More info: http://kubernetes.io/docs/user-guide/persistent-volumes#access-modes", @@ -5736,7 +5748,7 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope }, }, Dependencies: []string{ - "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ObjectReference", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, + "k8s.io/apimachinery/pkg/api/resource.Quantity", "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ObjectReference", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, }, "k8s.io/kubernetes/pkg/api/v1.PersistentVolumeStatus": { Schema: spec.Schema{ @@ -6839,6 +6851,38 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope Dependencies: []string{ "k8s.io/apimachinery/pkg/apis/meta/v1.ObjectMeta", "k8s.io/kubernetes/pkg/api/v1.PodSpec"}, }, + "k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource": { + Schema: spec.Schema{ + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolumeSource represents a Portworx volume resource.", + Properties: map[string]spec.Schema{ + "volumeID": { + SchemaProps: spec.SchemaProps{ + Description: "VolumeID uniquely identifies a Portworx volume", + Type: []string{"string"}, + Format: "", + }, + }, + "fsType": { + SchemaProps: spec.SchemaProps{ + Description: "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", + Type: []string{"string"}, + Format: "", + }, + }, + "readOnly": { + SchemaProps: spec.SchemaProps{ + Description: "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", + Type: []string{"boolean"}, + Format: "", + }, + }, + }, + Required: []string{"volumeID"}, + }, + }, + Dependencies: []string{}, + }, "k8s.io/kubernetes/pkg/api/v1.PreferAvoidPodsEntry": { Schema: spec.Schema{ SchemaProps: spec.SchemaProps{ @@ -8691,12 +8735,18 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope Ref: ref("k8s.io/kubernetes/pkg/api/v1.ProjectedVolumeSource"), }, }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource"), + }, + }, }, Required: []string{"name"}, }, }, Dependencies: []string{ - "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ConfigMapVolumeSource", "k8s.io/kubernetes/pkg/api/v1.DownwardAPIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.EmptyDirVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GitRepoVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PersistentVolumeClaimVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ProjectedVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.SecretVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, + "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ConfigMapVolumeSource", "k8s.io/kubernetes/pkg/api/v1.DownwardAPIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.EmptyDirVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GitRepoVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PersistentVolumeClaimVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ProjectedVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.SecretVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, }, "k8s.io/kubernetes/pkg/api/v1.VolumeMount": { Schema: spec.Schema{ @@ -8915,11 +8965,17 @@ func GetOpenAPIDefinitions(ref openapi.ReferenceCallback) map[string]openapi.Ope Ref: ref("k8s.io/kubernetes/pkg/api/v1.ProjectedVolumeSource"), }, }, + "portworxVolume": { + SchemaProps: spec.SchemaProps{ + Description: "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", + Ref: ref("k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource"), + }, + }, }, }, }, Dependencies: []string{ - "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ConfigMapVolumeSource", "k8s.io/kubernetes/pkg/api/v1.DownwardAPIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.EmptyDirVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GitRepoVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PersistentVolumeClaimVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ProjectedVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.SecretVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, + "k8s.io/kubernetes/pkg/api/v1.AWSElasticBlockStoreVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.AzureFileVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CephFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.CinderVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ConfigMapVolumeSource", "k8s.io/kubernetes/pkg/api/v1.DownwardAPIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.EmptyDirVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FCVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlexVolumeSource", "k8s.io/kubernetes/pkg/api/v1.FlockerVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GCEPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GitRepoVolumeSource", "k8s.io/kubernetes/pkg/api/v1.GlusterfsVolumeSource", "k8s.io/kubernetes/pkg/api/v1.HostPathVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ISCSIVolumeSource", "k8s.io/kubernetes/pkg/api/v1.NFSVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PersistentVolumeClaimVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PhotonPersistentDiskVolumeSource", "k8s.io/kubernetes/pkg/api/v1.PortworxVolumeSource", "k8s.io/kubernetes/pkg/api/v1.ProjectedVolumeSource", "k8s.io/kubernetes/pkg/api/v1.QuobyteVolumeSource", "k8s.io/kubernetes/pkg/api/v1.RBDVolumeSource", "k8s.io/kubernetes/pkg/api/v1.SecretVolumeSource", "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource"}, }, "k8s.io/kubernetes/pkg/api/v1.VsphereVirtualDiskVolumeSource": { Schema: spec.Schema{ diff --git a/pkg/printers/internalversion/describe.go b/pkg/printers/internalversion/describe.go index 49b7e78b9d..763cbeb7c4 100644 --- a/pkg/printers/internalversion/describe.go +++ b/pkg/printers/internalversion/describe.go @@ -623,6 +623,8 @@ func describeVolumes(volumes []api.Volume, w *PrefixWriter, space string) { printCinderVolumeSource(volume.VolumeSource.Cinder, w) case volume.VolumeSource.PhotonPersistentDisk != nil: printPhotonPersistentDiskVolumeSource(volume.VolumeSource.PhotonPersistentDisk, w) + case volume.VolumeSource.PortworxVolume != nil: + printPortworxVolumeSource(volume.VolumeSource.PortworxVolume, w) default: w.Write(LEVEL_1, "\n") } @@ -696,6 +698,12 @@ func printQuobyteVolumeSource(quobyte *api.QuobyteVolumeSource, w *PrefixWriter) quobyte.Registry, quobyte.Volume, quobyte.ReadOnly) } +func printPortworxVolumeSource(pwxVolume *api.PortworxVolumeSource, w *PrefixWriter) { + w.Write(LEVEL_2, "Type:\tPortworxVolume (a Portworx Volume resource)\n"+ + " VolumeID:\t%v\n", + pwxVolume.VolumeID) +} + func printISCSIVolumeSource(iscsi *api.ISCSIVolumeSource, w *PrefixWriter) { w.Write(LEVEL_2, "Type:\tISCSI (an ISCSI Disk resource that is attached to a kubelet's host machine and then exposed to the pod)\n"+ " TargetPortal:\t%v\n"+ @@ -841,6 +849,8 @@ func (d *PersistentVolumeDescriber) Describe(namespace, name string, describerSe printAzureDiskVolumeSource(pv.Spec.AzureDisk, w) case pv.Spec.PhotonPersistentDisk != nil: printPhotonPersistentDiskVolumeSource(pv.Spec.PhotonPersistentDisk, w) + case pv.Spec.PortworxVolume != nil: + printPortworxVolumeSource(pv.Spec.PortworxVolume, w) } if events != nil { diff --git a/pkg/security/podsecuritypolicy/util/util.go b/pkg/security/podsecuritypolicy/util/util.go index 1d34bba71e..237104c8fb 100644 --- a/pkg/security/podsecuritypolicy/util/util.go +++ b/pkg/security/podsecuritypolicy/util/util.go @@ -63,6 +63,7 @@ func GetAllFSTypesAsSet() sets.String { string(extensions.AzureDisk), string(extensions.PhotonPersistentDisk), string(extensions.Projected), + string(extensions.PortworxVolume), ) return fstypes } @@ -118,6 +119,8 @@ func GetVolumeFSType(v api.Volume) (extensions.FSType, error) { return extensions.PhotonPersistentDisk, nil case v.Projected != nil: return extensions.Projected, nil + case v.PortworxVolume != nil: + return extensions.PortworxVolume, nil } return "", fmt.Errorf("unknown volume type for volume: %#v", v) diff --git a/pkg/volume/BUILD b/pkg/volume/BUILD index 3ed82d67d7..f6e1791033 100644 --- a/pkg/volume/BUILD +++ b/pkg/volume/BUILD @@ -108,6 +108,7 @@ filegroup( "//pkg/volume/iscsi:all-srcs", "//pkg/volume/nfs:all-srcs", "//pkg/volume/photon_pd:all-srcs", + "//pkg/volume/portworx:all-srcs", "//pkg/volume/projected:all-srcs", "//pkg/volume/quobyte:all-srcs", "//pkg/volume/rbd:all-srcs", diff --git a/pkg/volume/portworx/BUILD b/pkg/volume/portworx/BUILD new file mode 100644 index 0000000000..812281aa4c --- /dev/null +++ b/pkg/volume/portworx/BUILD @@ -0,0 +1,64 @@ +package(default_visibility = ["//visibility:public"]) + +licenses(["notice"]) + +load( + "@io_bazel_rules_go//go:def.bzl", + "go_library", + "go_test", +) + +go_test( + name = "go_default_test", + srcs = ["portworx_test.go"], + library = ":go_default_library", + tags = ["automanaged"], + deps = [ + "//pkg/api/v1:go_default_library", + "//pkg/util/mount:go_default_library", + "//pkg/volume:go_default_library", + "//pkg/volume/testing:go_default_library", + "//vendor:k8s.io/apimachinery/pkg/types", + "//vendor:k8s.io/client-go/util/testing", + ], +) + +go_library( + name = "go_default_library", + srcs = [ + "doc.go", + "portworx.go", + "portworx_util.go", + ], + tags = ["automanaged"], + deps = [ + "//pkg/api/v1:go_default_library", + "//pkg/util/exec:go_default_library", + "//pkg/util/mount:go_default_library", + "//pkg/util/strings:go_default_library", + "//pkg/volume:go_default_library", + "//pkg/volume/util:go_default_library", + "//vendor:github.com/golang/glog", + "//vendor:github.com/libopenstorage/openstorage/api", + "//vendor:github.com/libopenstorage/openstorage/api/client", + "//vendor:github.com/libopenstorage/openstorage/api/client/volume", + "//vendor:github.com/libopenstorage/openstorage/api/spec", + "//vendor:github.com/libopenstorage/openstorage/volume", + "//vendor:k8s.io/apimachinery/pkg/api/resource", + "//vendor:k8s.io/apimachinery/pkg/apis/meta/v1", + "//vendor:k8s.io/apimachinery/pkg/types", + ], +) + +filegroup( + name = "package-srcs", + srcs = glob(["**"]), + tags = ["automanaged"], + visibility = ["//visibility:private"], +) + +filegroup( + name = "all-srcs", + srcs = [":package-srcs"], + tags = ["automanaged"], +) diff --git a/pkg/volume/portworx/OWNERS b/pkg/volume/portworx/OWNERS new file mode 100644 index 0000000000..4bd62b711b --- /dev/null +++ b/pkg/volume/portworx/OWNERS @@ -0,0 +1,2 @@ +maintainers: +- adityadani diff --git a/pkg/volume/portworx/doc.go b/pkg/volume/portworx/doc.go new file mode 100644 index 0000000000..9ba9ad256e --- /dev/null +++ b/pkg/volume/portworx/doc.go @@ -0,0 +1,19 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +// Package portworx contains the internal representation of Portworx +// Block Device volumes. +package portworx diff --git a/pkg/volume/portworx/portworx.go b/pkg/volume/portworx/portworx.go new file mode 100644 index 0000000000..330b24f9f9 --- /dev/null +++ b/pkg/volume/portworx/portworx.go @@ -0,0 +1,388 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package portworx + +import ( + "fmt" + "os" + + "github.com/golang/glog" + "k8s.io/apimachinery/pkg/api/resource" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/types" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/util/exec" + "k8s.io/kubernetes/pkg/util/mount" + kstrings "k8s.io/kubernetes/pkg/util/strings" + "k8s.io/kubernetes/pkg/volume" + "k8s.io/kubernetes/pkg/volume/util" +) + +// This is the primary entrypoint for volume plugins. +func ProbeVolumePlugins() []volume.VolumePlugin { + return []volume.VolumePlugin{&portworxVolumePlugin{nil}} +} + +type portworxVolumePlugin struct { + host volume.VolumeHost +} + +var _ volume.VolumePlugin = &portworxVolumePlugin{} +var _ volume.PersistentVolumePlugin = &portworxVolumePlugin{} +var _ volume.DeletableVolumePlugin = &portworxVolumePlugin{} +var _ volume.ProvisionableVolumePlugin = &portworxVolumePlugin{} + +const ( + portworxVolumePluginName = "kubernetes.io/portworx-volume" +) + +func getPath(uid types.UID, volName string, host volume.VolumeHost) string { + return host.GetPodVolumeDir(uid, kstrings.EscapeQualifiedNameForDisk(portworxVolumePluginName), volName) +} + +func (plugin *portworxVolumePlugin) Init(host volume.VolumeHost) error { + plugin.host = host + return nil +} + +func (plugin *portworxVolumePlugin) GetPluginName() string { + return portworxVolumePluginName +} + +func (plugin *portworxVolumePlugin) GetVolumeName(spec *volume.Spec) (string, error) { + volumeSource, _, err := getVolumeSource(spec) + if err != nil { + return "", err + } + + return volumeSource.VolumeID, nil +} + +func (plugin *portworxVolumePlugin) CanSupport(spec *volume.Spec) bool { + return (spec.PersistentVolume != nil && spec.PersistentVolume.Spec.PortworxVolume != nil) || + (spec.Volume != nil && spec.Volume.PortworxVolume != nil) +} + +func (plugin *portworxVolumePlugin) RequiresRemount() bool { + return false +} + +func (plugin *portworxVolumePlugin) GetAccessModes() []v1.PersistentVolumeAccessMode { + return []v1.PersistentVolumeAccessMode{ + v1.ReadWriteOnce, + v1.ReadWriteMany, + } +} + +func (plugin *portworxVolumePlugin) NewMounter(spec *volume.Spec, pod *v1.Pod, _ volume.VolumeOptions) (volume.Mounter, error) { + return plugin.newMounterInternal(spec, pod.UID, &PortworxVolumeUtil{}, plugin.host.GetMounter()) +} + +func (plugin *portworxVolumePlugin) newMounterInternal(spec *volume.Spec, podUID types.UID, manager portworxManager, mounter mount.Interface) (volume.Mounter, error) { + pwx, readOnly, err := getVolumeSource(spec) + if err != nil { + return nil, err + } + + volumeID := pwx.VolumeID + fsType := pwx.FSType + + return &portworxVolumeMounter{ + portworxVolume: &portworxVolume{ + podUID: podUID, + volName: spec.Name(), + volumeID: volumeID, + manager: manager, + mounter: mounter, + plugin: plugin, + MetricsProvider: volume.NewMetricsStatFS(getPath(podUID, spec.Name(), plugin.host)), + }, + fsType: fsType, + readOnly: readOnly, + diskMounter: &mount.SafeFormatAndMount{Interface: plugin.host.GetMounter(), Runner: exec.New()}}, nil +} + +func (plugin *portworxVolumePlugin) NewUnmounter(volName string, podUID types.UID) (volume.Unmounter, error) { + return plugin.newUnmounterInternal(volName, podUID, &PortworxVolumeUtil{}, plugin.host.GetMounter()) +} + +func (plugin *portworxVolumePlugin) newUnmounterInternal(volName string, podUID types.UID, manager portworxManager, mounter mount.Interface) (volume.Unmounter, error) { + return &portworxVolumeUnmounter{ + &portworxVolume{ + podUID: podUID, + volName: volName, + manager: manager, + mounter: mounter, + plugin: plugin, + MetricsProvider: volume.NewMetricsStatFS(getPath(podUID, volName, plugin.host)), + }}, nil +} + +func (plugin *portworxVolumePlugin) NewDeleter(spec *volume.Spec) (volume.Deleter, error) { + return plugin.newDeleterInternal(spec, &PortworxVolumeUtil{}) +} + +func (plugin *portworxVolumePlugin) newDeleterInternal(spec *volume.Spec, manager portworxManager) (volume.Deleter, error) { + if spec.PersistentVolume != nil && spec.PersistentVolume.Spec.PortworxVolume == nil { + return nil, fmt.Errorf("spec.PersistentVolumeSource.PortworxVolume is nil") + } + return &portworxVolumeDeleter{ + portworxVolume: &portworxVolume{ + volName: spec.Name(), + volumeID: spec.PersistentVolume.Spec.PortworxVolume.VolumeID, + manager: manager, + plugin: plugin, + }}, nil +} + +func (plugin *portworxVolumePlugin) NewProvisioner(options volume.VolumeOptions) (volume.Provisioner, error) { + return plugin.newProvisionerInternal(options, &PortworxVolumeUtil{}) +} + +func (plugin *portworxVolumePlugin) newProvisionerInternal(options volume.VolumeOptions, manager portworxManager) (volume.Provisioner, error) { + return &portworxVolumeProvisioner{ + portworxVolume: &portworxVolume{ + manager: manager, + plugin: plugin, + }, + options: options, + }, nil +} + +func (plugin *portworxVolumePlugin) ConstructVolumeSpec(volumeName, mountPath string) (*volume.Spec, error) { + portworxVolume := &v1.Volume{ + Name: volumeName, + VolumeSource: v1.VolumeSource{ + PortworxVolume: &v1.PortworxVolumeSource{ + VolumeID: volumeName, + }, + }, + } + return volume.NewSpecFromVolume(portworxVolume), nil +} + +func getVolumeSource( + spec *volume.Spec) (*v1.PortworxVolumeSource, bool, error) { + if spec.Volume != nil && spec.Volume.PortworxVolume != nil { + return spec.Volume.PortworxVolume, spec.Volume.PortworxVolume.ReadOnly, nil + } else if spec.PersistentVolume != nil && + spec.PersistentVolume.Spec.PortworxVolume != nil { + return spec.PersistentVolume.Spec.PortworxVolume, spec.ReadOnly, nil + } + + return nil, false, fmt.Errorf("Spec does not reference a Portworx Volume type") +} + +// Abstract interface to PD operations. +type portworxManager interface { + // Creates a volume + CreateVolume(provisioner *portworxVolumeProvisioner) (volumeID string, volumeSizeGB int, labels map[string]string, err error) + // Deletes a volume + DeleteVolume(deleter *portworxVolumeDeleter) error + // Attach a volume + AttachVolume(mounter *portworxVolumeMounter) (string, error) + // Detach a volume + DetachVolume(unmounter *portworxVolumeUnmounter) error + // Mount a volume + MountVolume(mounter *portworxVolumeMounter, mountDir string) error + // Unmount a volume + UnmountVolume(unmounter *portworxVolumeUnmounter, mountDir string) error +} + +// portworxVolume volumes are portworx block devices +// that are attached to the kubelet's host machine and exposed to the pod. +type portworxVolume struct { + volName string + podUID types.UID + // Unique id of the PD, used to find the disk resource in the provider. + volumeID string + // Utility interface that provides API calls to the provider to attach/detach disks. + manager portworxManager + // Mounter interface that provides system calls to mount the global path to the pod local path. + mounter mount.Interface + plugin *portworxVolumePlugin + volume.MetricsProvider +} + +type portworxVolumeMounter struct { + *portworxVolume + // Filesystem type, optional. + fsType string + // Specifies whether the disk will be attached as read-only. + readOnly bool + // diskMounter provides the interface that is used to mount the actual block device. + diskMounter *mount.SafeFormatAndMount +} + +var _ volume.Mounter = &portworxVolumeMounter{} + +func (b *portworxVolumeMounter) GetAttributes() volume.Attributes { + return volume.Attributes{ + ReadOnly: b.readOnly, + Managed: !b.readOnly, + // true ? + SupportsSELinux: true, + } +} + +// Checks prior to mount operations to verify that the required components (binaries, etc.) +// to mount the volume are available on the underlying node. +// If not, it returns an error +func (b *portworxVolumeMounter) CanMount() error { + return nil +} + +// SetUp attaches the disk and bind mounts to the volume path. +func (b *portworxVolumeMounter) SetUp(fsGroup *int64) error { + return b.SetUpAt(b.GetPath(), fsGroup) +} + +// SetUpAt attaches the disk and bind mounts to the volume path. +func (b *portworxVolumeMounter) SetUpAt(dir string, fsGroup *int64) error { + notMnt, err := b.mounter.IsLikelyNotMountPoint(dir) + glog.V(4).Infof("Portworx Volume set up: %s %v %v", dir, !notMnt, err) + if err != nil && !os.IsNotExist(err) { + glog.Errorf("Cannot validate mountpoint: %s", dir) + return err + } + if !notMnt { + return nil + } + + if _, err := b.manager.AttachVolume(b); err != nil { + return err + } + + glog.V(4).Infof("Portworx Volume %s attached", b.volumeID) + + if err := os.MkdirAll(dir, 0750); err != nil { + return err + } + + if err := b.manager.MountVolume(b, dir); err != nil { + return err + } + if !b.readOnly { + volume.SetVolumeOwnership(b, fsGroup) + } + glog.V(4).Infof("Portworx Volume %s mounted to %s", b.volumeID, dir) + return nil +} + +func (pwx *portworxVolume) GetPath() string { + return getPath(pwx.podUID, pwx.volName, pwx.plugin.host) +} + +type portworxVolumeUnmounter struct { + *portworxVolume +} + +var _ volume.Unmounter = &portworxVolumeUnmounter{} + +// Unmounts the bind mount, and detaches the disk only if the PD +// resource was the last reference to that disk on the kubelet. +func (c *portworxVolumeUnmounter) TearDown() error { + return c.TearDownAt(c.GetPath()) +} + +// Unmounts the bind mount, and detaches the disk only if the PD +// resource was the last reference to that disk on the kubelet. +func (c *portworxVolumeUnmounter) TearDownAt(dir string) error { + glog.V(4).Infof("Portworx Volume TearDown of %s", dir) + // Unmount the bind mount inside the pod + if err := util.UnmountPath(dir, c.mounter); err != nil { + return err + } + + // Call Portworx Unmount for Portworx's book-keeping. + if err := c.manager.UnmountVolume(c, dir); err != nil { + return err + } + + // Call Portworx Detach Volume. + if err := c.manager.DetachVolume(c); err != nil { + return err + } + + return nil +} + +type portworxVolumeDeleter struct { + *portworxVolume +} + +var _ volume.Deleter = &portworxVolumeDeleter{} + +func (d *portworxVolumeDeleter) GetPath() string { + return getPath(d.podUID, d.volName, d.plugin.host) +} + +func (d *portworxVolumeDeleter) Delete() error { + return d.manager.DeleteVolume(d) +} + +type portworxVolumeProvisioner struct { + *portworxVolume + options volume.VolumeOptions + namespace string +} + +var _ volume.Provisioner = &portworxVolumeProvisioner{} + +func (c *portworxVolumeProvisioner) Provision() (*v1.PersistentVolume, error) { + volumeID, sizeGB, labels, err := c.manager.CreateVolume(c) + if err != nil { + return nil, err + } + + pv := &v1.PersistentVolume{ + ObjectMeta: metav1.ObjectMeta{ + Name: c.options.PVName, + Labels: map[string]string{}, + Annotations: map[string]string{ + "kubernetes.io/createdby": "portworx-volume-dynamic-provisioner", + }, + }, + Spec: v1.PersistentVolumeSpec{ + PersistentVolumeReclaimPolicy: c.options.PersistentVolumeReclaimPolicy, + AccessModes: c.options.PVC.Spec.AccessModes, + Capacity: v1.ResourceList{ + v1.ResourceName(v1.ResourceStorage): resource.MustParse(fmt.Sprintf("%dGi", sizeGB)), + }, + PersistentVolumeSource: v1.PersistentVolumeSource{ + PortworxVolume: &v1.PortworxVolumeSource{ + VolumeID: volumeID, + }, + }, + }, + } + + if len(labels) != 0 { + if pv.Labels == nil { + pv.Labels = make(map[string]string) + } + for k, v := range labels { + pv.Labels[k] = v + } + } + + if len(c.options.PVC.Spec.AccessModes) == 0 { + pv.Spec.AccessModes = c.plugin.GetAccessModes() + } + + return pv, nil +} diff --git a/pkg/volume/portworx/portworx_test.go b/pkg/volume/portworx/portworx_test.go new file mode 100644 index 0000000000..f387516894 --- /dev/null +++ b/pkg/volume/portworx/portworx_test.go @@ -0,0 +1,235 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package portworx + +import ( + "fmt" + "os" + "path" + "testing" + + "k8s.io/apimachinery/pkg/types" + utiltesting "k8s.io/client-go/util/testing" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/util/mount" + "k8s.io/kubernetes/pkg/volume" + volumetest "k8s.io/kubernetes/pkg/volume/testing" +) + +const ( + PortworxTestVolume = "portworx-test-vol" +) + +func TestCanSupport(t *testing.T) { + tmpDir, err := utiltesting.MkTmpdir("portworxVolumeTest") + if err != nil { + t.Fatalf("can't make a temp dir: %v", err) + } + defer os.RemoveAll(tmpDir) + plugMgr := volume.VolumePluginMgr{} + plugMgr.InitPlugins(ProbeVolumePlugins(), volumetest.NewFakeVolumeHost(tmpDir, nil, nil)) + + plug, err := plugMgr.FindPluginByName("kubernetes.io/portworx-volume") + if err != nil { + t.Errorf("Can't find the plugin by name") + } + if plug.GetPluginName() != "kubernetes.io/portworx-volume" { + t.Errorf("Wrong name: %s", plug.GetPluginName()) + } + if !plug.CanSupport(&volume.Spec{Volume: &v1.Volume{VolumeSource: v1.VolumeSource{PortworxVolume: &v1.PortworxVolumeSource{}}}}) { + t.Errorf("Expected true") + } + if !plug.CanSupport(&volume.Spec{PersistentVolume: &v1.PersistentVolume{Spec: v1.PersistentVolumeSpec{PersistentVolumeSource: v1.PersistentVolumeSource{PortworxVolume: &v1.PortworxVolumeSource{}}}}}) { + t.Errorf("Expected true") + } +} + +func TestGetAccessModes(t *testing.T) { + tmpDir, err := utiltesting.MkTmpdir("portworxVolumeTest") + if err != nil { + t.Fatalf("can't make a temp dir: %v", err) + } + defer os.RemoveAll(tmpDir) + plugMgr := volume.VolumePluginMgr{} + plugMgr.InitPlugins(ProbeVolumePlugins(), volumetest.NewFakeVolumeHost(tmpDir, nil, nil)) + + plug, err := plugMgr.FindPersistentPluginByName("kubernetes.io/portworx-volume") + if err != nil { + t.Errorf("Can't find the plugin by name") + } + + if !contains(plug.GetAccessModes(), v1.ReadWriteOnce) { + t.Errorf("Expected to support AccessModeTypes: %s", v1.ReadWriteOnce) + } + if !contains(plug.GetAccessModes(), v1.ReadWriteMany) { + t.Errorf("Expected to support AccessModeTypes: %s", v1.ReadWriteMany) + } + if contains(plug.GetAccessModes(), v1.ReadOnlyMany) { + t.Errorf("Expected not to support AccessModeTypes: %s", v1.ReadOnlyMany) + } +} + +func contains(modes []v1.PersistentVolumeAccessMode, mode v1.PersistentVolumeAccessMode) bool { + for _, m := range modes { + if m == mode { + return true + } + } + return false +} + +type fakePortworxManager struct { + attachCalled bool + mountCalled bool +} + +func (fake *fakePortworxManager) AttachVolume(b *portworxVolumeMounter) (string, error) { + fake.attachCalled = true + return "", nil +} + +func (fake *fakePortworxManager) DetachVolume(c *portworxVolumeUnmounter) error { + return nil +} + +func (fake *fakePortworxManager) MountVolume(b *portworxVolumeMounter, mountPath string) error { + fake.mountCalled = true + return nil +} + +func (fake *fakePortworxManager) UnmountVolume(c *portworxVolumeUnmounter, mountPath string) error { + return nil +} + +func (fake *fakePortworxManager) CreateVolume(c *portworxVolumeProvisioner) (volumeID string, volumeSizeGB int, labels map[string]string, err error) { + labels = make(map[string]string) + labels["fakeportworxmanager"] = "yes" + return PortworxTestVolume, 100, labels, nil +} + +func (fake *fakePortworxManager) DeleteVolume(cd *portworxVolumeDeleter) error { + if cd.volumeID != PortworxTestVolume { + return fmt.Errorf("Deleter got unexpected volume name: %s", cd.volumeID) + } + return nil +} + +func TestPlugin(t *testing.T) { + tmpDir, err := utiltesting.MkTmpdir("portworxVolumeTest") + if err != nil { + t.Fatalf("can't make a temp dir: %v", err) + } + defer os.RemoveAll(tmpDir) + plugMgr := volume.VolumePluginMgr{} + plugMgr.InitPlugins(ProbeVolumePlugins(), volumetest.NewFakeVolumeHost(tmpDir, nil, nil)) + + plug, err := plugMgr.FindPluginByName("kubernetes.io/portworx-volume") + if err != nil { + t.Errorf("Can't find the plugin by name") + } + spec := &v1.Volume{ + Name: "vol1", + VolumeSource: v1.VolumeSource{ + PortworxVolume: &v1.PortworxVolumeSource{ + VolumeID: PortworxTestVolume, + FSType: "ext4", + }, + }, + } + fakeManager := &fakePortworxManager{} + // Test Mounter + fakeMounter := &mount.FakeMounter{} + mounter, err := plug.(*portworxVolumePlugin).newMounterInternal(volume.NewSpecFromVolume(spec), types.UID("poduid"), fakeManager, fakeMounter) + if err != nil { + t.Errorf("Failed to make a new Mounter: %v", err) + } + if mounter == nil { + t.Errorf("Got a nil Mounter") + } + + volPath := path.Join(tmpDir, "pods/poduid/volumes/kubernetes.io~portworx-volume/vol1") + path := mounter.GetPath() + if path != volPath { + t.Errorf("Got unexpected path: %s", path) + } + + if err := mounter.SetUp(nil); err != nil { + t.Errorf("Expected success, got: %v", err) + } + if _, err := os.Stat(path); err != nil { + if os.IsNotExist(err) { + t.Errorf("SetUp() failed, volume path not created: %s", path) + } else { + t.Errorf("SetUp() failed: %v", err) + } + } + if !fakeManager.attachCalled { + t.Errorf("Attach watch not called") + } + if !fakeManager.mountCalled { + t.Errorf("Mount watch not called") + } + + // Test Unmounter + fakeManager = &fakePortworxManager{} + unmounter, err := plug.(*portworxVolumePlugin).newUnmounterInternal("vol1", types.UID("poduid"), fakeManager, fakeMounter) + if err != nil { + t.Errorf("Failed to make a new Unmounter: %v", err) + } + if unmounter == nil { + t.Errorf("Got a nil Unmounter") + } + + if err := unmounter.TearDown(); err != nil { + t.Errorf("Expected success, got: %v", err) + } + + // Test Provisioner + options := volume.VolumeOptions{ + PVC: volumetest.CreateTestPVC("100Gi", []v1.PersistentVolumeAccessMode{v1.ReadWriteOnce}), + PersistentVolumeReclaimPolicy: v1.PersistentVolumeReclaimDelete, + } + + provisioner, err := plug.(*portworxVolumePlugin).newProvisionerInternal(options, &fakePortworxManager{}) + persistentSpec, err := provisioner.Provision() + if err != nil { + t.Errorf("Provision() failed: %v", err) + } + + if persistentSpec.Spec.PersistentVolumeSource.PortworxVolume.VolumeID != PortworxTestVolume { + t.Errorf("Provision() returned unexpected volume ID: %s", persistentSpec.Spec.PersistentVolumeSource.PortworxVolume.VolumeID) + } + cap := persistentSpec.Spec.Capacity[v1.ResourceStorage] + size := cap.Value() + if size != 100*1024*1024*1024 { + t.Errorf("Provision() returned unexpected volume size: %v", size) + } + + if persistentSpec.Labels["fakeportworxmanager"] != "yes" { + t.Errorf("Provision() returned unexpected labels: %v", persistentSpec.Labels) + } + + // Test Deleter + volSpec := &volume.Spec{ + PersistentVolume: persistentSpec, + } + deleter, err := plug.(*portworxVolumePlugin).newDeleterInternal(volSpec, &fakePortworxManager{}) + err = deleter.Delete() + if err != nil { + t.Errorf("Deleter() failed: %v", err) + } +} diff --git a/pkg/volume/portworx/portworx_util.go b/pkg/volume/portworx/portworx_util.go new file mode 100644 index 0000000000..f3ae109483 --- /dev/null +++ b/pkg/volume/portworx/portworx_util.go @@ -0,0 +1,165 @@ +/* +Copyright 2017 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package portworx + +import ( + "github.com/golang/glog" + osdapi "github.com/libopenstorage/openstorage/api" + osdclient "github.com/libopenstorage/openstorage/api/client" + volumeclient "github.com/libopenstorage/openstorage/api/client/volume" + osdspec "github.com/libopenstorage/openstorage/api/spec" + osdvolume "github.com/libopenstorage/openstorage/volume" + "k8s.io/kubernetes/pkg/api/v1" + "k8s.io/kubernetes/pkg/volume" +) + +const ( + osdMgmtPort = "9001" + osdDriverVersion = "v1" + pxdDriverName = "pxd" + pwxSockName = "pwx" + pvcClaimLabel = "pvc" +) + +type PortworxVolumeUtil struct { + portworxClient *osdclient.Client +} + +// CreateVolume creates a Portworx volume. +func (util *PortworxVolumeUtil) CreateVolume(p *portworxVolumeProvisioner) (string, int, map[string]string, error) { + hostname := p.plugin.host.GetHostName() + client, err := util.osdClient(hostname) + if err != nil { + return "", 0, nil, err + } + + capacity := p.options.PVC.Spec.Resources.Requests[v1.ResourceName(v1.ResourceStorage)] + // Portworx Volumes are specified in GB + requestGB := int(volume.RoundUpSize(capacity.Value(), 1024*1024*1024)) + + specHandler := osdspec.NewSpecHandler() + spec, err := specHandler.SpecFromOpts(p.options.Parameters) + if err != nil { + return "", 0, nil, err + } + spec.Size = uint64(requestGB * 1024 * 1024 * 1024) + source := osdapi.Source{} + locator := osdapi.VolumeLocator{ + Name: p.options.PVName, + } + // Add claim Name as a part of Portworx Volume Labels + locator.VolumeLabels = make(map[string]string) + locator.VolumeLabels[pvcClaimLabel] = p.options.PVC.Name + volumeID, err := client.Create(&locator, &source, spec) + if err != nil { + glog.V(2).Infof("Error creating Portworx Volume : %v", err) + } + return volumeID, requestGB, nil, err +} + +// DeleteVolume deletes a Portworx volume +func (util *PortworxVolumeUtil) DeleteVolume(d *portworxVolumeDeleter) error { + hostname := d.plugin.host.GetHostName() + client, err := util.osdClient(hostname) + if err != nil { + return err + } + + err = client.Delete(d.volumeID) + if err != nil { + glog.V(2).Infof("Error deleting Portworx Volume (%v): %v", d.volName, err) + return err + } + return nil +} + +// AttachVolume attaches a Portworx Volume +func (util *PortworxVolumeUtil) AttachVolume(m *portworxVolumeMounter) (string, error) { + hostname := m.plugin.host.GetHostName() + client, err := util.osdClient(hostname) + if err != nil { + return "", err + } + + devicePath, err := client.Attach(m.volName) + if err != nil { + glog.V(2).Infof("Error attaching Portworx Volume (%v): %v", m.volName, err) + return "", err + } + return devicePath, nil +} + +// DetachVolume detaches a Portworx Volume +func (util *PortworxVolumeUtil) DetachVolume(u *portworxVolumeUnmounter) error { + hostname := u.plugin.host.GetHostName() + client, err := util.osdClient(hostname) + if err != nil { + return err + } + + err = client.Detach(u.volName) + if err != nil { + glog.V(2).Infof("Error detaching Portworx Volume (%v): %v", u.volName, err) + return err + } + return nil +} + +// MountVolume mounts a Portworx Volume on the specified mountPath +func (util *PortworxVolumeUtil) MountVolume(m *portworxVolumeMounter, mountPath string) error { + hostname := m.plugin.host.GetHostName() + client, err := util.osdClient(hostname) + if err != nil { + return err + } + + err = client.Mount(m.volName, mountPath) + if err != nil { + glog.V(2).Infof("Error mounting Portworx Volume (%v) on Path (%v): %v", m.volName, mountPath, err) + return err + } + return nil +} + +// UnmountVolume unmounts a Portworx Volume +func (util *PortworxVolumeUtil) UnmountVolume(u *portworxVolumeUnmounter, mountPath string) error { + hostname := u.plugin.host.GetHostName() + client, err := util.osdClient(hostname) + if err != nil { + return err + } + + err = client.Unmount(u.volName, mountPath) + if err != nil { + glog.V(2).Infof("Error unmounting Portworx Volume (%v) on Path (%v): %v", u.volName, mountPath, err) + return err + } + return nil +} + +func (util *PortworxVolumeUtil) osdClient(hostname string) (osdvolume.VolumeDriver, error) { + osdEndpoint := "http://" + hostname + ":" + osdMgmtPort + if util.portworxClient == nil { + driverClient, err := volumeclient.NewDriverClient(osdEndpoint, pxdDriverName, osdDriverVersion) + if err != nil { + return nil, err + } + util.portworxClient = driverClient + } + + return volumeclient.VolumeDriver(util.portworxClient), nil +} diff --git a/staging/src/k8s.io/client-go/pkg/api/types.go b/staging/src/k8s.io/client-go/pkg/api/types.go index a7a6cbb715..427cc2e401 100644 --- a/staging/src/k8s.io/client-go/pkg/api/types.go +++ b/staging/src/k8s.io/client-go/pkg/api/types.go @@ -296,6 +296,9 @@ type VolumeSource struct { PhotonPersistentDisk *PhotonPersistentDiskVolumeSource // Items for all in one resources secrets, configmaps, and downward API Projected *ProjectedVolumeSource + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource } // Similar to VolumeSource but meant for the administrator who creates PVs. @@ -358,6 +361,9 @@ type PersistentVolumeSource struct { AzureDisk *AzureDiskVolumeSource // PhotonPersistentDisk represents a Photon Controller persistent disk attached and mounted on kubelets host machine PhotonPersistentDisk *PhotonPersistentDiskVolumeSource + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource } type PersistentVolumeClaimVolumeSource struct { @@ -1001,6 +1007,21 @@ type PhotonPersistentDiskVolumeSource struct { FSType string } +// PortworxVolumeSource represents a Portworx volume resource. +type PortworxVolumeSource struct { + // VolumeID uniquely identifies a Portworx volume + VolumeID string + // FSType represents the filesystem type to mount + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + // +optional + FSType string + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + ReadOnly bool +} + type AzureDataDiskCachingMode string const ( diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go b/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go index fb9f92638f..7ce412e158 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/generated.pb.go @@ -144,6 +144,7 @@ limitations under the License. PodTemplate PodTemplateList PodTemplateSpec + PortworxVolumeSource Preconditions PreferAvoidPodsEntry PreferredSchedulingTerm @@ -714,202 +715,206 @@ func (m *PodTemplateSpec) Reset() { *m = PodTemplateSpec{} } func (*PodTemplateSpec) ProtoMessage() {} func (*PodTemplateSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{118} } +func (m *PortworxVolumeSource) Reset() { *m = PortworxVolumeSource{} } +func (*PortworxVolumeSource) ProtoMessage() {} +func (*PortworxVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } + func (m *Preconditions) Reset() { *m = Preconditions{} } func (*Preconditions) ProtoMessage() {} -func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{119} } +func (*Preconditions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } func (m *PreferAvoidPodsEntry) Reset() { *m = PreferAvoidPodsEntry{} } func (*PreferAvoidPodsEntry) ProtoMessage() {} -func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{120} } +func (*PreferAvoidPodsEntry) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{121} } func (m *PreferredSchedulingTerm) Reset() { *m = PreferredSchedulingTerm{} } func (*PreferredSchedulingTerm) ProtoMessage() {} func (*PreferredSchedulingTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{121} + return fileDescriptorGenerated, []int{122} } func (m *Probe) Reset() { *m = Probe{} } func (*Probe) ProtoMessage() {} -func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{122} } +func (*Probe) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } func (m *ProjectedVolumeSource) Reset() { *m = ProjectedVolumeSource{} } func (*ProjectedVolumeSource) ProtoMessage() {} -func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{123} } +func (*ProjectedVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } func (m *QuobyteVolumeSource) Reset() { *m = QuobyteVolumeSource{} } func (*QuobyteVolumeSource) ProtoMessage() {} -func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{124} } +func (*QuobyteVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } func (m *RBDVolumeSource) Reset() { *m = RBDVolumeSource{} } func (*RBDVolumeSource) ProtoMessage() {} -func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{125} } +func (*RBDVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } func (m *RangeAllocation) Reset() { *m = RangeAllocation{} } func (*RangeAllocation) ProtoMessage() {} -func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{126} } +func (*RangeAllocation) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } func (m *ReplicationController) Reset() { *m = ReplicationController{} } func (*ReplicationController) ProtoMessage() {} -func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{127} } +func (*ReplicationController) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{128} } func (m *ReplicationControllerCondition) Reset() { *m = ReplicationControllerCondition{} } func (*ReplicationControllerCondition) ProtoMessage() {} func (*ReplicationControllerCondition) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{128} + return fileDescriptorGenerated, []int{129} } func (m *ReplicationControllerList) Reset() { *m = ReplicationControllerList{} } func (*ReplicationControllerList) ProtoMessage() {} func (*ReplicationControllerList) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{129} + return fileDescriptorGenerated, []int{130} } func (m *ReplicationControllerSpec) Reset() { *m = ReplicationControllerSpec{} } func (*ReplicationControllerSpec) ProtoMessage() {} func (*ReplicationControllerSpec) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{130} + return fileDescriptorGenerated, []int{131} } func (m *ReplicationControllerStatus) Reset() { *m = ReplicationControllerStatus{} } func (*ReplicationControllerStatus) ProtoMessage() {} func (*ReplicationControllerStatus) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{131} + return fileDescriptorGenerated, []int{132} } func (m *ResourceFieldSelector) Reset() { *m = ResourceFieldSelector{} } func (*ResourceFieldSelector) ProtoMessage() {} -func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{132} } +func (*ResourceFieldSelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } func (m *ResourceQuota) Reset() { *m = ResourceQuota{} } func (*ResourceQuota) ProtoMessage() {} -func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{133} } +func (*ResourceQuota) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } func (m *ResourceQuotaList) Reset() { *m = ResourceQuotaList{} } func (*ResourceQuotaList) ProtoMessage() {} -func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{134} } +func (*ResourceQuotaList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } func (m *ResourceQuotaSpec) Reset() { *m = ResourceQuotaSpec{} } func (*ResourceQuotaSpec) ProtoMessage() {} -func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{135} } +func (*ResourceQuotaSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } func (m *ResourceQuotaStatus) Reset() { *m = ResourceQuotaStatus{} } func (*ResourceQuotaStatus) ProtoMessage() {} -func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{136} } +func (*ResourceQuotaStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } func (m *ResourceRequirements) Reset() { *m = ResourceRequirements{} } func (*ResourceRequirements) ProtoMessage() {} -func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{137} } +func (*ResourceRequirements) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } func (m *SELinuxOptions) Reset() { *m = SELinuxOptions{} } func (*SELinuxOptions) ProtoMessage() {} -func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{138} } +func (*SELinuxOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } func (m *Secret) Reset() { *m = Secret{} } func (*Secret) ProtoMessage() {} -func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{139} } +func (*Secret) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } func (m *SecretEnvSource) Reset() { *m = SecretEnvSource{} } func (*SecretEnvSource) ProtoMessage() {} -func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{140} } +func (*SecretEnvSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } func (m *SecretKeySelector) Reset() { *m = SecretKeySelector{} } func (*SecretKeySelector) ProtoMessage() {} -func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{141} } +func (*SecretKeySelector) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } func (m *SecretList) Reset() { *m = SecretList{} } func (*SecretList) ProtoMessage() {} -func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{142} } +func (*SecretList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } func (m *SecretProjection) Reset() { *m = SecretProjection{} } func (*SecretProjection) ProtoMessage() {} -func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{143} } +func (*SecretProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } func (m *SecretVolumeSource) Reset() { *m = SecretVolumeSource{} } func (*SecretVolumeSource) ProtoMessage() {} -func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{144} } +func (*SecretVolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } func (m *SecurityContext) Reset() { *m = SecurityContext{} } func (*SecurityContext) ProtoMessage() {} -func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{145} } +func (*SecurityContext) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } func (m *SerializedReference) Reset() { *m = SerializedReference{} } func (*SerializedReference) ProtoMessage() {} -func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{146} } +func (*SerializedReference) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } func (m *Service) Reset() { *m = Service{} } func (*Service) ProtoMessage() {} -func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{147} } +func (*Service) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } func (m *ServiceAccount) Reset() { *m = ServiceAccount{} } func (*ServiceAccount) ProtoMessage() {} -func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{148} } +func (*ServiceAccount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } func (m *ServiceAccountList) Reset() { *m = ServiceAccountList{} } func (*ServiceAccountList) ProtoMessage() {} -func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{149} } +func (*ServiceAccountList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } func (m *ServiceList) Reset() { *m = ServiceList{} } func (*ServiceList) ProtoMessage() {} -func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{150} } +func (*ServiceList) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } func (m *ServicePort) Reset() { *m = ServicePort{} } func (*ServicePort) ProtoMessage() {} -func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{151} } +func (*ServicePort) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } func (m *ServiceProxyOptions) Reset() { *m = ServiceProxyOptions{} } func (*ServiceProxyOptions) ProtoMessage() {} -func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{152} } +func (*ServiceProxyOptions) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } func (m *ServiceSpec) Reset() { *m = ServiceSpec{} } func (*ServiceSpec) ProtoMessage() {} -func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{153} } +func (*ServiceSpec) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } func (m *ServiceStatus) Reset() { *m = ServiceStatus{} } func (*ServiceStatus) ProtoMessage() {} -func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{154} } +func (*ServiceStatus) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } func (m *Sysctl) Reset() { *m = Sysctl{} } func (*Sysctl) ProtoMessage() {} -func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{155} } +func (*Sysctl) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } func (m *TCPSocketAction) Reset() { *m = TCPSocketAction{} } func (*TCPSocketAction) ProtoMessage() {} -func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{156} } +func (*TCPSocketAction) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } func (m *Taint) Reset() { *m = Taint{} } func (*Taint) ProtoMessage() {} -func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{157} } +func (*Taint) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } func (m *Toleration) Reset() { *m = Toleration{} } func (*Toleration) ProtoMessage() {} -func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{158} } +func (*Toleration) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } func (m *Volume) Reset() { *m = Volume{} } func (*Volume) ProtoMessage() {} -func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{159} } +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } func (m *VolumeMount) Reset() { *m = VolumeMount{} } func (*VolumeMount) ProtoMessage() {} -func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{160} } +func (*VolumeMount) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } func (m *VolumeProjection) Reset() { *m = VolumeProjection{} } func (*VolumeProjection) ProtoMessage() {} -func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{161} } +func (*VolumeProjection) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } func (m *VolumeSource) Reset() { *m = VolumeSource{} } func (*VolumeSource) ProtoMessage() {} -func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{162} } +func (*VolumeSource) Descriptor() ([]byte, []int) { return fileDescriptorGenerated, []int{163} } func (m *VsphereVirtualDiskVolumeSource) Reset() { *m = VsphereVirtualDiskVolumeSource{} } func (*VsphereVirtualDiskVolumeSource) ProtoMessage() {} func (*VsphereVirtualDiskVolumeSource) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{163} + return fileDescriptorGenerated, []int{164} } func (m *WeightedPodAffinityTerm) Reset() { *m = WeightedPodAffinityTerm{} } func (*WeightedPodAffinityTerm) ProtoMessage() {} func (*WeightedPodAffinityTerm) Descriptor() ([]byte, []int) { - return fileDescriptorGenerated, []int{164} + return fileDescriptorGenerated, []int{165} } func init() { @@ -1032,6 +1037,7 @@ func init() { proto.RegisterType((*PodTemplate)(nil), "k8s.io.client-go.pkg.api.v1.PodTemplate") proto.RegisterType((*PodTemplateList)(nil), "k8s.io.client-go.pkg.api.v1.PodTemplateList") proto.RegisterType((*PodTemplateSpec)(nil), "k8s.io.client-go.pkg.api.v1.PodTemplateSpec") + proto.RegisterType((*PortworxVolumeSource)(nil), "k8s.io.client-go.pkg.api.v1.PortworxVolumeSource") proto.RegisterType((*Preconditions)(nil), "k8s.io.client-go.pkg.api.v1.Preconditions") proto.RegisterType((*PreferAvoidPodsEntry)(nil), "k8s.io.client-go.pkg.api.v1.PreferAvoidPodsEntry") proto.RegisterType((*PreferredSchedulingTerm)(nil), "k8s.io.client-go.pkg.api.v1.PreferredSchedulingTerm") @@ -5458,6 +5464,18 @@ func (m *PersistentVolumeSource) MarshalTo(data []byte) (int, error) { } i += n109 } + if m.PortworxVolume != nil { + data[i] = 0x92 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PortworxVolume.Size())) + n110, err := m.PortworxVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n110 + } return i, nil } @@ -5491,21 +5509,21 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n110, err := (&v).MarshalTo(data[i:]) + n111, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n110 + i += n111 } } data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeSource.Size())) - n111, err := m.PersistentVolumeSource.MarshalTo(data[i:]) + n112, err := m.PersistentVolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n111 + i += n112 if len(m.AccessModes) > 0 { for _, s := range m.AccessModes { data[i] = 0x1a @@ -5525,11 +5543,11 @@ func (m *PersistentVolumeSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.ClaimRef.Size())) - n112, err := m.ClaimRef.MarshalTo(data[i:]) + n113, err := m.ClaimRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n112 + i += n113 } data[i] = 0x2a i++ @@ -5616,27 +5634,27 @@ func (m *Pod) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n113, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n113 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n114, err := m.Spec.MarshalTo(data[i:]) + n114, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n114 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n115, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n115, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n115 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n116, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n116 return i, nil } @@ -5701,11 +5719,11 @@ func (m *PodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LabelSelector.Size())) - n116, err := m.LabelSelector.MarshalTo(data[i:]) + n117, err := m.LabelSelector.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n116 + i += n117 } if len(m.Namespaces) > 0 { for _, s := range m.Namespaces { @@ -5851,19 +5869,19 @@ func (m *PodCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastProbeTime.Size())) - n117, err := m.LastProbeTime.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n117 - data[i] = 0x22 - i++ - i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n118, err := m.LastTransitionTime.MarshalTo(data[i:]) + n118, err := m.LastProbeTime.MarshalTo(data[i:]) if err != nil { return 0, err } i += n118 + data[i] = 0x22 + i++ + i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) + n119, err := m.LastTransitionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n119 data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -5962,11 +5980,11 @@ func (m *PodList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n119, err := m.ListMeta.MarshalTo(data[i:]) + n120, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n119 + i += n120 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6026,11 +6044,11 @@ func (m *PodLogOptions) MarshalTo(data []byte) (int, error) { data[i] = 0x2a i++ i = encodeVarintGenerated(data, i, uint64(m.SinceTime.Size())) - n120, err := m.SinceTime.MarshalTo(data[i:]) + n121, err := m.SinceTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n120 + i += n121 } data[i] = 0x30 i++ @@ -6119,11 +6137,11 @@ func (m *PodSecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n121, err := m.SELinuxOptions.MarshalTo(data[i:]) + n122, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n121 + i += n122 } if m.RunAsUser != nil { data[i] = 0x10 @@ -6174,11 +6192,11 @@ func (m *PodSignature) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.PodController.Size())) - n122, err := m.PodController.MarshalTo(data[i:]) + n123, err := m.PodController.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n122 + i += n123 } return i, nil } @@ -6297,11 +6315,11 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x72 i++ i = encodeVarintGenerated(data, i, uint64(m.SecurityContext.Size())) - n123, err := m.SecurityContext.MarshalTo(data[i:]) + n124, err := m.SecurityContext.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n123 + i += n124 } if len(m.ImagePullSecrets) > 0 { for _, msg := range m.ImagePullSecrets { @@ -6333,11 +6351,11 @@ func (m *PodSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.Affinity.Size())) - n124, err := m.Affinity.MarshalTo(data[i:]) + n125, err := m.Affinity.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n124 + i += n125 } data[i] = 0x9a i++ @@ -6439,11 +6457,11 @@ func (m *PodStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.StartTime.Size())) - n125, err := m.StartTime.MarshalTo(data[i:]) + n126, err := m.StartTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n125 + i += n126 } if len(m.ContainerStatuses) > 0 { for _, msg := range m.ContainerStatuses { @@ -6494,19 +6512,19 @@ func (m *PodStatusResult) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n126, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n126 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n127, err := m.Status.MarshalTo(data[i:]) + n127, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n127 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n128, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n128 return i, nil } @@ -6528,19 +6546,19 @@ func (m *PodTemplate) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n128, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n128 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n129, err := m.Template.MarshalTo(data[i:]) + n129, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n129 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) + n130, err := m.Template.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n130 return i, nil } @@ -6562,11 +6580,11 @@ func (m *PodTemplateList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n130, err := m.ListMeta.MarshalTo(data[i:]) + n131, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n130 + i += n131 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -6600,19 +6618,53 @@ func (m *PodTemplateSpec) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n131, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n131 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n132, err := m.Spec.MarshalTo(data[i:]) + n132, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n132 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n133, err := m.Spec.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n133 + return i, nil +} + +func (m *PortworxVolumeSource) Marshal() (data []byte, err error) { + size := m.Size() + data = make([]byte, size) + n, err := m.MarshalTo(data) + if err != nil { + return nil, err + } + return data[:n], nil +} + +func (m *PortworxVolumeSource) MarshalTo(data []byte) (int, error) { + var i int + _ = i + var l int + _ = l + data[i] = 0xa + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.VolumeID))) + i += copy(data[i:], m.VolumeID) + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(len(m.FSType))) + i += copy(data[i:], m.FSType) + data[i] = 0x18 + i++ + if m.ReadOnly { + data[i] = 1 + } else { + data[i] = 0 + } + i++ return i, nil } @@ -6658,19 +6710,19 @@ func (m *PreferAvoidPodsEntry) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.PodSignature.Size())) - n133, err := m.PodSignature.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n133 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) - n134, err := m.EvictionTime.MarshalTo(data[i:]) + n134, err := m.PodSignature.MarshalTo(data[i:]) if err != nil { return 0, err } i += n134 + data[i] = 0x12 + i++ + i = encodeVarintGenerated(data, i, uint64(m.EvictionTime.Size())) + n135, err := m.EvictionTime.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n135 data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -6703,11 +6755,11 @@ func (m *PreferredSchedulingTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.Preference.Size())) - n135, err := m.Preference.MarshalTo(data[i:]) + n136, err := m.Preference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n135 + i += n136 return i, nil } @@ -6729,11 +6781,11 @@ func (m *Probe) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Handler.Size())) - n136, err := m.Handler.MarshalTo(data[i:]) + n137, err := m.Handler.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n136 + i += n137 data[i] = 0x10 i++ i = encodeVarintGenerated(data, i, uint64(m.InitialDelaySeconds)) @@ -6883,11 +6935,11 @@ func (m *RBDVolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x3a i++ i = encodeVarintGenerated(data, i, uint64(m.SecretRef.Size())) - n137, err := m.SecretRef.MarshalTo(data[i:]) + n138, err := m.SecretRef.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n137 + i += n138 } data[i] = 0x40 i++ @@ -6918,11 +6970,11 @@ func (m *RangeAllocation) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n138, err := m.ObjectMeta.MarshalTo(data[i:]) + n139, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n138 + i += n139 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Range))) @@ -6954,27 +7006,27 @@ func (m *ReplicationController) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n139, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n139 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n140, err := m.Spec.MarshalTo(data[i:]) + n140, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n140 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n141, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n141, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n141 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n142, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n142 return i, nil } @@ -7004,11 +7056,11 @@ func (m *ReplicationControllerCondition) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.LastTransitionTime.Size())) - n142, err := m.LastTransitionTime.MarshalTo(data[i:]) + n143, err := m.LastTransitionTime.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n142 + i += n143 data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Reason))) @@ -7038,11 +7090,11 @@ func (m *ReplicationControllerList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n143, err := m.ListMeta.MarshalTo(data[i:]) + n144, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n143 + i += n144 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7099,11 +7151,11 @@ func (m *ReplicationControllerSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Template.Size())) - n144, err := m.Template.MarshalTo(data[i:]) + n145, err := m.Template.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n144 + i += n145 } data[i] = 0x20 i++ @@ -7182,11 +7234,11 @@ func (m *ResourceFieldSelector) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.Divisor.Size())) - n145, err := m.Divisor.MarshalTo(data[i:]) + n146, err := m.Divisor.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n145 + i += n146 return i, nil } @@ -7208,27 +7260,27 @@ func (m *ResourceQuota) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n146, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n146 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n147, err := m.Spec.MarshalTo(data[i:]) + n147, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n147 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n148, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n148, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n148 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n149, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n149 return i, nil } @@ -7250,11 +7302,11 @@ func (m *ResourceQuotaList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n149, err := m.ListMeta.MarshalTo(data[i:]) + n150, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n149 + i += n150 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7300,11 +7352,11 @@ func (m *ResourceQuotaSpec) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n150, err := (&v).MarshalTo(data[i:]) + n151, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n150 + i += n151 } } if len(m.Scopes) > 0 { @@ -7355,11 +7407,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n151, err := (&v).MarshalTo(data[i:]) + n152, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n151 + i += n152 } } if len(m.Used) > 0 { @@ -7377,11 +7429,11 @@ func (m *ResourceQuotaStatus) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n152, err := (&v).MarshalTo(data[i:]) + n153, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n152 + i += n153 } } return i, nil @@ -7417,11 +7469,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n153, err := (&v).MarshalTo(data[i:]) + n154, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n153 + i += n154 } } if len(m.Requests) > 0 { @@ -7439,11 +7491,11 @@ func (m *ResourceRequirements) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64((&v).Size())) - n154, err := (&v).MarshalTo(data[i:]) + n155, err := (&v).MarshalTo(data[i:]) if err != nil { return 0, err } - i += n154 + i += n155 } } return i, nil @@ -7501,11 +7553,11 @@ func (m *Secret) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n155, err := m.ObjectMeta.MarshalTo(data[i:]) + n156, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n155 + i += n156 if len(m.Data) > 0 { for k := range m.Data { data[i] = 0x12 @@ -7565,11 +7617,11 @@ func (m *SecretEnvSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n156, err := m.LocalObjectReference.MarshalTo(data[i:]) + n157, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n156 + i += n157 if m.Optional != nil { data[i] = 0x10 i++ @@ -7601,11 +7653,11 @@ func (m *SecretKeySelector) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n157, err := m.LocalObjectReference.MarshalTo(data[i:]) + n158, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n157 + i += n158 data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(len(m.Key))) @@ -7641,11 +7693,11 @@ func (m *SecretList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n158, err := m.ListMeta.MarshalTo(data[i:]) + n159, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n158 + i += n159 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7679,11 +7731,11 @@ func (m *SecretProjection) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LocalObjectReference.Size())) - n159, err := m.LocalObjectReference.MarshalTo(data[i:]) + n160, err := m.LocalObjectReference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n159 + i += n160 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -7777,11 +7829,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Capabilities.Size())) - n160, err := m.Capabilities.MarshalTo(data[i:]) + n161, err := m.Capabilities.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n160 + i += n161 } if m.Privileged != nil { data[i] = 0x10 @@ -7797,11 +7849,11 @@ func (m *SecurityContext) MarshalTo(data []byte) (int, error) { data[i] = 0x1a i++ i = encodeVarintGenerated(data, i, uint64(m.SELinuxOptions.Size())) - n161, err := m.SELinuxOptions.MarshalTo(data[i:]) + n162, err := m.SELinuxOptions.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n161 + i += n162 } if m.RunAsUser != nil { data[i] = 0x20 @@ -7849,11 +7901,11 @@ func (m *SerializedReference) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Reference.Size())) - n162, err := m.Reference.MarshalTo(data[i:]) + n163, err := m.Reference.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n162 + i += n163 return i, nil } @@ -7875,27 +7927,27 @@ func (m *Service) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n163, err := m.ObjectMeta.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n163 - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) - n164, err := m.Spec.MarshalTo(data[i:]) + n164, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } i += n164 - data[i] = 0x1a + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) - n165, err := m.Status.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Spec.Size())) + n165, err := m.Spec.MarshalTo(data[i:]) if err != nil { return 0, err } i += n165 + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Status.Size())) + n166, err := m.Status.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n166 return i, nil } @@ -7917,11 +7969,11 @@ func (m *ServiceAccount) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ObjectMeta.Size())) - n166, err := m.ObjectMeta.MarshalTo(data[i:]) + n167, err := m.ObjectMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n166 + i += n167 if len(m.Secrets) > 0 { for _, msg := range m.Secrets { data[i] = 0x12 @@ -7977,11 +8029,11 @@ func (m *ServiceAccountList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n167, err := m.ListMeta.MarshalTo(data[i:]) + n168, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n167 + i += n168 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -8015,11 +8067,11 @@ func (m *ServiceList) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.ListMeta.Size())) - n168, err := m.ListMeta.MarshalTo(data[i:]) + n169, err := m.ListMeta.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n168 + i += n169 if len(m.Items) > 0 { for _, msg := range m.Items { data[i] = 0x12 @@ -8064,11 +8116,11 @@ func (m *ServicePort) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.TargetPort.Size())) - n169, err := m.TargetPort.MarshalTo(data[i:]) + n170, err := m.TargetPort.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n169 + i += n170 data[i] = 0x28 i++ i = encodeVarintGenerated(data, i, uint64(m.NodePort)) @@ -8227,11 +8279,11 @@ func (m *ServiceStatus) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.LoadBalancer.Size())) - n170, err := m.LoadBalancer.MarshalTo(data[i:]) + n171, err := m.LoadBalancer.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n170 + i += n171 return i, nil } @@ -8279,11 +8331,11 @@ func (m *TCPSocketAction) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Port.Size())) - n171, err := m.Port.MarshalTo(data[i:]) + n172, err := m.Port.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n171 + i += n172 return i, nil } @@ -8317,11 +8369,11 @@ func (m *Taint) MarshalTo(data []byte) (int, error) { data[i] = 0x22 i++ i = encodeVarintGenerated(data, i, uint64(m.TimeAdded.Size())) - n172, err := m.TimeAdded.MarshalTo(data[i:]) + n173, err := m.TimeAdded.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n172 + i += n173 return i, nil } @@ -8386,11 +8438,11 @@ func (m *Volume) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.VolumeSource.Size())) - n173, err := m.VolumeSource.MarshalTo(data[i:]) + n174, err := m.VolumeSource.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n173 + i += n174 return i, nil } @@ -8451,32 +8503,32 @@ func (m *VolumeProjection) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) - n174, err := m.Secret.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n174 - } - if m.DownwardAPI != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) - n175, err := m.DownwardAPI.MarshalTo(data[i:]) + n175, err := m.Secret.MarshalTo(data[i:]) if err != nil { return 0, err } i += n175 } - if m.ConfigMap != nil { - data[i] = 0x1a + if m.DownwardAPI != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) - n176, err := m.ConfigMap.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) + n176, err := m.DownwardAPI.MarshalTo(data[i:]) if err != nil { return 0, err } i += n176 } + if m.ConfigMap != nil { + data[i] = 0x1a + i++ + i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) + n177, err := m.ConfigMap.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n177 + } return i, nil } @@ -8499,163 +8551,163 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0xa i++ i = encodeVarintGenerated(data, i, uint64(m.HostPath.Size())) - n177, err := m.HostPath.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n177 - } - if m.EmptyDir != nil { - data[i] = 0x12 - i++ - i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) - n178, err := m.EmptyDir.MarshalTo(data[i:]) + n178, err := m.HostPath.MarshalTo(data[i:]) if err != nil { return 0, err } i += n178 } - if m.GCEPersistentDisk != nil { - data[i] = 0x1a + if m.EmptyDir != nil { + data[i] = 0x12 i++ - i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) - n179, err := m.GCEPersistentDisk.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.EmptyDir.Size())) + n179, err := m.EmptyDir.MarshalTo(data[i:]) if err != nil { return 0, err } i += n179 } - if m.AWSElasticBlockStore != nil { - data[i] = 0x22 + if m.GCEPersistentDisk != nil { + data[i] = 0x1a i++ - i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) - n180, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GCEPersistentDisk.Size())) + n180, err := m.GCEPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } i += n180 } - if m.GitRepo != nil { - data[i] = 0x2a + if m.AWSElasticBlockStore != nil { + data[i] = 0x22 i++ - i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) - n181, err := m.GitRepo.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.AWSElasticBlockStore.Size())) + n181, err := m.AWSElasticBlockStore.MarshalTo(data[i:]) if err != nil { return 0, err } i += n181 } - if m.Secret != nil { - data[i] = 0x32 + if m.GitRepo != nil { + data[i] = 0x2a i++ - i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) - n182, err := m.Secret.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.GitRepo.Size())) + n182, err := m.GitRepo.MarshalTo(data[i:]) if err != nil { return 0, err } i += n182 } - if m.NFS != nil { - data[i] = 0x3a + if m.Secret != nil { + data[i] = 0x32 i++ - i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) - n183, err := m.NFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Secret.Size())) + n183, err := m.Secret.MarshalTo(data[i:]) if err != nil { return 0, err } i += n183 } - if m.ISCSI != nil { - data[i] = 0x42 + if m.NFS != nil { + data[i] = 0x3a i++ - i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) - n184, err := m.ISCSI.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.NFS.Size())) + n184, err := m.NFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n184 } - if m.Glusterfs != nil { - data[i] = 0x4a + if m.ISCSI != nil { + data[i] = 0x42 i++ - i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) - n185, err := m.Glusterfs.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.ISCSI.Size())) + n185, err := m.ISCSI.MarshalTo(data[i:]) if err != nil { return 0, err } i += n185 } - if m.PersistentVolumeClaim != nil { - data[i] = 0x52 + if m.Glusterfs != nil { + data[i] = 0x4a i++ - i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) - n186, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Glusterfs.Size())) + n186, err := m.Glusterfs.MarshalTo(data[i:]) if err != nil { return 0, err } i += n186 } - if m.RBD != nil { - data[i] = 0x5a + if m.PersistentVolumeClaim != nil { + data[i] = 0x52 i++ - i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) - n187, err := m.RBD.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.PersistentVolumeClaim.Size())) + n187, err := m.PersistentVolumeClaim.MarshalTo(data[i:]) if err != nil { return 0, err } i += n187 } - if m.FlexVolume != nil { - data[i] = 0x62 + if m.RBD != nil { + data[i] = 0x5a i++ - i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) - n188, err := m.FlexVolume.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.RBD.Size())) + n188, err := m.RBD.MarshalTo(data[i:]) if err != nil { return 0, err } i += n188 } - if m.Cinder != nil { - data[i] = 0x6a + if m.FlexVolume != nil { + data[i] = 0x62 i++ - i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) - n189, err := m.Cinder.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.FlexVolume.Size())) + n189, err := m.FlexVolume.MarshalTo(data[i:]) if err != nil { return 0, err } i += n189 } - if m.CephFS != nil { - data[i] = 0x72 + if m.Cinder != nil { + data[i] = 0x6a i++ - i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) - n190, err := m.CephFS.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.Cinder.Size())) + n190, err := m.Cinder.MarshalTo(data[i:]) if err != nil { return 0, err } i += n190 } - if m.Flocker != nil { - data[i] = 0x7a + if m.CephFS != nil { + data[i] = 0x72 i++ - i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) - n191, err := m.Flocker.MarshalTo(data[i:]) + i = encodeVarintGenerated(data, i, uint64(m.CephFS.Size())) + n191, err := m.CephFS.MarshalTo(data[i:]) if err != nil { return 0, err } i += n191 } + if m.Flocker != nil { + data[i] = 0x7a + i++ + i = encodeVarintGenerated(data, i, uint64(m.Flocker.Size())) + n192, err := m.Flocker.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n192 + } if m.DownwardAPI != nil { data[i] = 0x82 i++ data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.DownwardAPI.Size())) - n192, err := m.DownwardAPI.MarshalTo(data[i:]) + n193, err := m.DownwardAPI.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n192 + i += n193 } if m.FC != nil { data[i] = 0x8a @@ -8663,11 +8715,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.FC.Size())) - n193, err := m.FC.MarshalTo(data[i:]) + n194, err := m.FC.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n193 + i += n194 } if m.AzureFile != nil { data[i] = 0x92 @@ -8675,11 +8727,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureFile.Size())) - n194, err := m.AzureFile.MarshalTo(data[i:]) + n195, err := m.AzureFile.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n194 + i += n195 } if m.ConfigMap != nil { data[i] = 0x9a @@ -8687,11 +8739,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.ConfigMap.Size())) - n195, err := m.ConfigMap.MarshalTo(data[i:]) + n196, err := m.ConfigMap.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n195 + i += n196 } if m.VsphereVolume != nil { data[i] = 0xa2 @@ -8699,11 +8751,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.VsphereVolume.Size())) - n196, err := m.VsphereVolume.MarshalTo(data[i:]) + n197, err := m.VsphereVolume.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n196 + i += n197 } if m.Quobyte != nil { data[i] = 0xaa @@ -8711,11 +8763,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.Quobyte.Size())) - n197, err := m.Quobyte.MarshalTo(data[i:]) + n198, err := m.Quobyte.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n197 + i += n198 } if m.AzureDisk != nil { data[i] = 0xb2 @@ -8723,11 +8775,11 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.AzureDisk.Size())) - n198, err := m.AzureDisk.MarshalTo(data[i:]) + n199, err := m.AzureDisk.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n198 + i += n199 } if m.PhotonPersistentDisk != nil { data[i] = 0xba @@ -8735,24 +8787,36 @@ func (m *VolumeSource) MarshalTo(data []byte) (int, error) { data[i] = 0x1 i++ i = encodeVarintGenerated(data, i, uint64(m.PhotonPersistentDisk.Size())) - n199, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) - if err != nil { - return 0, err - } - i += n199 - } - if m.Projected != nil { - data[i] = 0xc2 - i++ - data[i] = 0x1 - i++ - i = encodeVarintGenerated(data, i, uint64(m.Projected.Size())) - n200, err := m.Projected.MarshalTo(data[i:]) + n200, err := m.PhotonPersistentDisk.MarshalTo(data[i:]) if err != nil { return 0, err } i += n200 } + if m.PortworxVolume != nil { + data[i] = 0xc2 + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.PortworxVolume.Size())) + n201, err := m.PortworxVolume.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n201 + } + if m.Projected != nil { + data[i] = 0xca + i++ + data[i] = 0x1 + i++ + i = encodeVarintGenerated(data, i, uint64(m.Projected.Size())) + n202, err := m.Projected.MarshalTo(data[i:]) + if err != nil { + return 0, err + } + i += n202 + } return i, nil } @@ -8803,11 +8867,11 @@ func (m *WeightedPodAffinityTerm) MarshalTo(data []byte) (int, error) { data[i] = 0x12 i++ i = encodeVarintGenerated(data, i, uint64(m.PodAffinityTerm.Size())) - n201, err := m.PodAffinityTerm.MarshalTo(data[i:]) + n203, err := m.PodAffinityTerm.MarshalTo(data[i:]) if err != nil { return 0, err } - i += n201 + i += n203 return i, nil } @@ -10472,6 +10536,10 @@ func (m *PersistentVolumeSource) Size() (n int) { l = m.PhotonPersistentDisk.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.PortworxVolume != nil { + l = m.PortworxVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) + } return n } @@ -10897,6 +10965,17 @@ func (m *PodTemplateSpec) Size() (n int) { return n } +func (m *PortworxVolumeSource) Size() (n int) { + var l int + _ = l + l = len(m.VolumeID) + n += 1 + l + sovGenerated(uint64(l)) + l = len(m.FSType) + n += 1 + l + sovGenerated(uint64(l)) + n += 2 + return n +} + func (m *Preconditions) Size() (n int) { var l int _ = l @@ -11677,6 +11756,10 @@ func (m *VolumeSource) Size() (n int) { l = m.PhotonPersistentDisk.Size() n += 2 + l + sovGenerated(uint64(l)) } + if m.PortworxVolume != nil { + l = m.PortworxVolume.Size() + n += 2 + l + sovGenerated(uint64(l)) + } if m.Projected != nil { l = m.Projected.Size() n += 2 + l + sovGenerated(uint64(l)) @@ -13053,6 +13136,7 @@ func (this *PersistentVolumeSource) String() string { `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, `PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, + `PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, `}`, }, "") return s @@ -13371,6 +13455,18 @@ func (this *PodTemplateSpec) String() string { }, "") return s } +func (this *PortworxVolumeSource) String() string { + if this == nil { + return "nil" + } + s := strings.Join([]string{`&PortworxVolumeSource{`, + `VolumeID:` + fmt.Sprintf("%v", this.VolumeID) + `,`, + `FSType:` + fmt.Sprintf("%v", this.FSType) + `,`, + `ReadOnly:` + fmt.Sprintf("%v", this.ReadOnly) + `,`, + `}`, + }, "") + return s +} func (this *Preconditions) String() string { if this == nil { return "nil" @@ -14019,6 +14115,7 @@ func (this *VolumeSource) String() string { `Quobyte:` + strings.Replace(fmt.Sprintf("%v", this.Quobyte), "QuobyteVolumeSource", "QuobyteVolumeSource", 1) + `,`, `AzureDisk:` + strings.Replace(fmt.Sprintf("%v", this.AzureDisk), "AzureDiskVolumeSource", "AzureDiskVolumeSource", 1) + `,`, `PhotonPersistentDisk:` + strings.Replace(fmt.Sprintf("%v", this.PhotonPersistentDisk), "PhotonPersistentDiskVolumeSource", "PhotonPersistentDiskVolumeSource", 1) + `,`, + `PortworxVolume:` + strings.Replace(fmt.Sprintf("%v", this.PortworxVolume), "PortworxVolumeSource", "PortworxVolumeSource", 1) + `,`, `Projected:` + strings.Replace(fmt.Sprintf("%v", this.Projected), "ProjectedVolumeSource", "ProjectedVolumeSource", 1) + `,`, `}`, }, "") @@ -29713,6 +29810,39 @@ func (m *PersistentVolumeSource) Unmarshal(data []byte) error { return err } iNdEx = postIndex + case 18: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortworxVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PortworxVolume == nil { + m.PortworxVolume = &PortworxVolumeSource{} + } + if err := m.PortworxVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipGenerated(data[iNdEx:]) @@ -33638,6 +33768,134 @@ func (m *PodTemplateSpec) Unmarshal(data []byte) error { } return nil } +func (m *PortworxVolumeSource) Unmarshal(data []byte) error { + l := len(data) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + wire |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: PortworxVolumeSource: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: PortworxVolumeSource: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field VolumeID", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.VolumeID = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field FSType", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + stringLen |= (uint64(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + intStringLen + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.FSType = string(data[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field ReadOnly", wireType) + } + var v int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + v |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + m.ReadOnly = bool(v != 0) + default: + iNdEx = preIndex + skippy, err := skipGenerated(data[iNdEx:]) + if err != nil { + return err + } + if skippy < 0 { + return ErrInvalidLengthGenerated + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} func (m *Preconditions) Unmarshal(data []byte) error { l := len(data) iNdEx := 0 @@ -41299,6 +41557,39 @@ func (m *VolumeSource) Unmarshal(data []byte) error { } iNdEx = postIndex case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PortworxVolume", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowGenerated + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := data[iNdEx] + iNdEx++ + msglen |= (int(b) & 0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthGenerated + } + postIndex := iNdEx + msglen + if postIndex > l { + return io.ErrUnexpectedEOF + } + if m.PortworxVolume == nil { + m.PortworxVolume = &PortworxVolumeSource{} + } + if err := m.PortworxVolume.Unmarshal(data[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 25: if wireType != 2 { return fmt.Errorf("proto: wrong wireType = %d for field Projected", wireType) } @@ -41665,675 +41956,679 @@ var ( ) var fileDescriptorGenerated = []byte{ - // 10709 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0xbd, 0x7d, 0x6c, 0x24, 0xc7, - 0x95, 0x18, 0xee, 0x9e, 0xe1, 0xd7, 0x3c, 0x7e, 0x6e, 0xed, 0x87, 0x28, 0x5a, 0x5a, 0xae, 0x5a, - 0x96, 0xbc, 0x92, 0x56, 0xa4, 0x77, 0x25, 0x59, 0x6b, 0xcb, 0x3f, 0xd9, 0x24, 0x87, 0xdc, 0xa5, - 0xf7, 0x6b, 0x54, 0xc3, 0xdd, 0x95, 0x6d, 0xfd, 0x2c, 0x35, 0xa7, 0x8b, 0x64, 0x6b, 0x7b, 0xba, - 0x47, 0xdd, 0x3d, 0xdc, 0xa5, 0x1d, 0x03, 0x77, 0x8e, 0xe1, 0x4b, 0x70, 0x4e, 0xe2, 0xc3, 0xc5, - 0x40, 0x90, 0x04, 0xf0, 0xe1, 0x80, 0x5c, 0x9c, 0xef, 0x38, 0xc6, 0xd9, 0x3e, 0xc4, 0x97, 0x20, - 0x97, 0xf3, 0xc5, 0x07, 0x24, 0x17, 0x03, 0x87, 0xe4, 0x2e, 0x08, 0xc2, 0x3b, 0xd1, 0xb8, 0xfb, - 0x33, 0x7f, 0xe4, 0xfe, 0x63, 0x82, 0x24, 0xa8, 0xcf, 0xae, 0xea, 0x99, 0x61, 0xf7, 0x50, 0x4b, - 0x5a, 0x36, 0xf2, 0xdf, 0xcc, 0x7b, 0xaf, 0x5e, 0x7d, 0x74, 0xd5, 0xab, 0x57, 0xaf, 0xde, 0x7b, - 0x05, 0x17, 0xee, 0x5d, 0x8e, 0xe7, 0xbc, 0x70, 0xfe, 0x5e, 0x7b, 0x9d, 0x44, 0x01, 0x49, 0x48, - 0x3c, 0xdf, 0xba, 0xb7, 0x39, 0xef, 0xb4, 0xbc, 0xf9, 0xed, 0x8b, 0xf3, 0x9b, 0x24, 0x20, 0x91, - 0x93, 0x10, 0x77, 0xae, 0x15, 0x85, 0x49, 0x88, 0x1e, 0xe3, 0xd4, 0x73, 0x29, 0xf5, 0x5c, 0xeb, - 0xde, 0xe6, 0x9c, 0xd3, 0xf2, 0xe6, 0xb6, 0x2f, 0xce, 0x3c, 0xbf, 0xe9, 0x25, 0x5b, 0xed, 0xf5, - 0xb9, 0x46, 0xd8, 0x9c, 0xdf, 0x0c, 0x37, 0xc3, 0x79, 0x56, 0x68, 0xbd, 0xbd, 0xc1, 0xfe, 0xb1, - 0x3f, 0xec, 0x17, 0x67, 0x36, 0xf3, 0xa2, 0xa8, 0xda, 0x69, 0x79, 0x4d, 0xa7, 0xb1, 0xe5, 0x05, - 0x24, 0xda, 0x51, 0x95, 0x47, 0x24, 0x0e, 0xdb, 0x51, 0x83, 0x64, 0x9b, 0x70, 0x60, 0xa9, 0x78, - 0xbe, 0x49, 0x12, 0xa7, 0x4b, 0xc3, 0x67, 0xe6, 0x7b, 0x95, 0x8a, 0xda, 0x41, 0xe2, 0x35, 0x3b, - 0xab, 0xf9, 0x68, 0x5e, 0x81, 0xb8, 0xb1, 0x45, 0x9a, 0x4e, 0x47, 0xb9, 0x17, 0x7a, 0x95, 0x6b, - 0x27, 0x9e, 0x3f, 0xef, 0x05, 0x49, 0x9c, 0x44, 0x07, 0xf5, 0x29, 0x26, 0xd1, 0x36, 0x89, 0xd2, - 0x0e, 0x91, 0x07, 0x4e, 0xb3, 0xe5, 0x93, 0x2e, 0x7d, 0xb2, 0xff, 0xc8, 0x82, 0x73, 0x0b, 0x77, - 0xeb, 0xcb, 0xbe, 0x13, 0x27, 0x5e, 0x63, 0xd1, 0x0f, 0x1b, 0xf7, 0xea, 0x49, 0x18, 0x91, 0x3b, - 0xa1, 0xdf, 0x6e, 0x92, 0x3a, 0x1b, 0x3e, 0x74, 0x01, 0x46, 0xb6, 0xd9, 0xff, 0xd5, 0xea, 0xb4, - 0x75, 0xce, 0x3a, 0x5f, 0x59, 0x9c, 0xfa, 0xd1, 0xee, 0xec, 0x07, 0xf6, 0x76, 0x67, 0x47, 0xee, - 0x08, 0x38, 0x56, 0x14, 0xe8, 0x69, 0x18, 0xda, 0x88, 0xd7, 0x76, 0x5a, 0x64, 0xba, 0xc4, 0x68, - 0x27, 0x04, 0xed, 0xd0, 0x4a, 0x9d, 0x42, 0xb1, 0xc0, 0xa2, 0x79, 0xa8, 0xb4, 0x9c, 0x28, 0xf1, - 0x12, 0x2f, 0x0c, 0xa6, 0xcb, 0xe7, 0xac, 0xf3, 0x83, 0x8b, 0x27, 0x04, 0x69, 0xa5, 0x26, 0x11, - 0x38, 0xa5, 0xa1, 0xcd, 0x88, 0x88, 0xe3, 0xde, 0x0a, 0xfc, 0x9d, 0xe9, 0x81, 0x73, 0xd6, 0xf9, - 0x91, 0xb4, 0x19, 0x58, 0xc0, 0xb1, 0xa2, 0xb0, 0xbf, 0x5f, 0x82, 0x91, 0x85, 0x8d, 0x0d, 0x2f, - 0xf0, 0x92, 0x1d, 0xf4, 0x16, 0x8c, 0x05, 0xa1, 0x4b, 0xe4, 0x7f, 0xd6, 0x8b, 0xd1, 0x4b, 0xcf, - 0xce, 0x1d, 0x34, 0x15, 0xe7, 0x6e, 0x6a, 0x25, 0x16, 0xa7, 0xf6, 0x76, 0x67, 0xc7, 0x74, 0x08, - 0x36, 0x38, 0xa2, 0x37, 0x60, 0xb4, 0x15, 0xba, 0xaa, 0x82, 0x12, 0xab, 0xe0, 0x99, 0x83, 0x2b, - 0xa8, 0xa5, 0x05, 0x16, 0x27, 0xf7, 0x76, 0x67, 0x47, 0x35, 0x00, 0xd6, 0xd9, 0x21, 0x1f, 0x26, - 0xe9, 0xdf, 0x20, 0xf1, 0x54, 0x0d, 0x65, 0x56, 0xc3, 0xf3, 0xf9, 0x35, 0x68, 0x85, 0x16, 0x4f, - 0xee, 0xed, 0xce, 0x4e, 0x66, 0x80, 0x38, 0xcb, 0xda, 0xfe, 0x02, 0x4c, 0x2c, 0x24, 0x89, 0xd3, - 0xd8, 0x22, 0x2e, 0xff, 0xbe, 0xe8, 0x45, 0x18, 0x08, 0x9c, 0x26, 0x11, 0x5f, 0xff, 0x9c, 0x18, - 0xf6, 0x81, 0x9b, 0x4e, 0x93, 0xec, 0xef, 0xce, 0x4e, 0xdd, 0x0e, 0xbc, 0x77, 0xda, 0x62, 0xce, - 0x50, 0x18, 0x66, 0xd4, 0xe8, 0x12, 0x80, 0x4b, 0xb6, 0xbd, 0x06, 0xa9, 0x39, 0xc9, 0x96, 0x98, - 0x0d, 0x48, 0x94, 0x85, 0xaa, 0xc2, 0x60, 0x8d, 0xca, 0xfe, 0xb2, 0x05, 0x95, 0x85, 0xed, 0xd0, - 0x73, 0x6b, 0xa1, 0x1b, 0xa3, 0x36, 0x4c, 0xb6, 0x22, 0xb2, 0x41, 0x22, 0x05, 0x9a, 0xb6, 0xce, - 0x95, 0xcf, 0x8f, 0x5e, 0xba, 0x94, 0xd3, 0x6f, 0xb3, 0xd0, 0x72, 0x90, 0x44, 0x3b, 0x8b, 0x8f, - 0x88, 0xaa, 0x27, 0x33, 0x58, 0x9c, 0xad, 0xc3, 0xfe, 0x95, 0x12, 0x9c, 0x5e, 0xf8, 0x42, 0x3b, - 0x22, 0x55, 0x2f, 0xbe, 0x97, 0x5d, 0x0a, 0xae, 0x17, 0xdf, 0xbb, 0x99, 0x0e, 0x86, 0x9a, 0x83, - 0x55, 0x01, 0xc7, 0x8a, 0x02, 0x3d, 0x0f, 0xc3, 0xf4, 0xf7, 0x6d, 0xbc, 0x2a, 0x7a, 0x7f, 0x52, - 0x10, 0x8f, 0x56, 0x9d, 0xc4, 0xa9, 0x72, 0x14, 0x96, 0x34, 0xe8, 0x06, 0x8c, 0x36, 0xd8, 0x7a, - 0xdf, 0xbc, 0x11, 0xba, 0x84, 0x7d, 0xe1, 0xca, 0xe2, 0x73, 0x94, 0x7c, 0x29, 0x05, 0xef, 0xef, - 0xce, 0x4e, 0xf3, 0xb6, 0x09, 0x16, 0x1a, 0x0e, 0xeb, 0xe5, 0x91, 0xad, 0x16, 0xe2, 0x00, 0xe3, - 0x04, 0x5d, 0x16, 0xe1, 0x79, 0x6d, 0x4d, 0x0d, 0xb2, 0x35, 0x35, 0xd6, 0x63, 0x3d, 0xfd, 0x43, - 0x4b, 0x8c, 0xc9, 0x8a, 0xe7, 0x9b, 0xe2, 0xe1, 0x12, 0x40, 0x4c, 0x1a, 0x11, 0x49, 0xb4, 0x51, - 0x51, 0x9f, 0xb9, 0xae, 0x30, 0x58, 0xa3, 0xa2, 0x8b, 0x3f, 0xde, 0x72, 0x22, 0x36, 0x5b, 0xc4, - 0xd8, 0xa8, 0xc5, 0x5f, 0x97, 0x08, 0x9c, 0xd2, 0x18, 0x8b, 0xbf, 0x9c, 0xbb, 0xf8, 0x7f, 0xc7, - 0x82, 0xe1, 0x45, 0x2f, 0x70, 0xbd, 0x60, 0x13, 0xbd, 0x05, 0x23, 0x54, 0xa2, 0xbb, 0x4e, 0xe2, - 0x88, 0x75, 0xff, 0x11, 0x39, 0x79, 0x74, 0x01, 0x2b, 0xa7, 0x4f, 0x3c, 0x47, 0xa9, 0xe9, 0x24, - 0xba, 0xb5, 0xfe, 0x36, 0x69, 0x24, 0x37, 0x48, 0xe2, 0xa4, 0xdd, 0x49, 0x61, 0x58, 0x71, 0x45, - 0xb7, 0x61, 0x28, 0x71, 0xa2, 0x4d, 0x92, 0x88, 0x65, 0x9f, 0xb3, 0x28, 0x39, 0x0f, 0x4c, 0xa7, - 0x1c, 0x09, 0x1a, 0x24, 0x15, 0x90, 0x6b, 0x8c, 0x09, 0x16, 0xcc, 0xec, 0x06, 0x8c, 0x2d, 0x39, - 0x2d, 0x67, 0xdd, 0xf3, 0xbd, 0xc4, 0x23, 0x31, 0xfa, 0x30, 0x94, 0x1d, 0xd7, 0x65, 0x0b, 0xa0, - 0xb2, 0x78, 0x7a, 0x6f, 0x77, 0xb6, 0xbc, 0xe0, 0xba, 0xfb, 0xbb, 0xb3, 0xa0, 0xa8, 0x76, 0x30, - 0xa5, 0x40, 0xcf, 0xc2, 0x80, 0x1b, 0x85, 0xad, 0xe9, 0x12, 0xa3, 0x3c, 0x43, 0x57, 0x6a, 0x35, - 0x0a, 0x5b, 0x19, 0x52, 0x46, 0x63, 0xff, 0xb0, 0x04, 0x68, 0x89, 0xb4, 0xb6, 0x56, 0xea, 0xc6, - 0x37, 0x3d, 0x0f, 0x23, 0xcd, 0x30, 0xf0, 0x92, 0x30, 0x8a, 0x45, 0x85, 0x6c, 0x5e, 0xdc, 0x10, - 0x30, 0xac, 0xb0, 0xe8, 0x1c, 0x0c, 0xb4, 0xd2, 0xe5, 0x3d, 0x26, 0x45, 0x03, 0x5b, 0xd8, 0x0c, - 0x43, 0x29, 0xda, 0x31, 0x89, 0xc4, 0x7c, 0x56, 0x14, 0xb7, 0x63, 0x12, 0x61, 0x86, 0x49, 0x67, - 0x10, 0x9d, 0x5b, 0x62, 0xb6, 0x66, 0x66, 0x10, 0xc5, 0x60, 0x8d, 0x0a, 0xbd, 0x09, 0x15, 0xfe, - 0x0f, 0x93, 0x0d, 0x36, 0x75, 0x73, 0x85, 0xc2, 0xf5, 0xb0, 0xe1, 0xf8, 0xd9, 0xc1, 0x1f, 0x67, - 0x33, 0x4e, 0x32, 0xc2, 0x29, 0x4f, 0x63, 0xc6, 0x0d, 0xe5, 0xce, 0xb8, 0xbf, 0x65, 0x01, 0x5a, - 0xf2, 0x02, 0x97, 0x44, 0xc7, 0xb0, 0x75, 0xf6, 0xb7, 0x18, 0xfe, 0x2b, 0x6d, 0x5a, 0xd8, 0x6c, - 0x85, 0x01, 0x09, 0x92, 0xa5, 0x30, 0x70, 0xf9, 0x76, 0xfa, 0x71, 0x18, 0x48, 0x68, 0x55, 0xbc, - 0x59, 0x4f, 0xcb, 0xcf, 0x42, 0x2b, 0xd8, 0xdf, 0x9d, 0x3d, 0xd3, 0x59, 0x82, 0x35, 0x81, 0x95, - 0x41, 0x1f, 0x83, 0xa1, 0x38, 0x71, 0x92, 0x76, 0x2c, 0x1a, 0xfa, 0x84, 0x6c, 0x68, 0x9d, 0x41, - 0xf7, 0x77, 0x67, 0x27, 0x55, 0x31, 0x0e, 0xc2, 0xa2, 0x00, 0x7a, 0x06, 0x86, 0x9b, 0x24, 0x8e, - 0x9d, 0x4d, 0x29, 0xe0, 0x26, 0x45, 0xd9, 0xe1, 0x1b, 0x1c, 0x8c, 0x25, 0x1e, 0x3d, 0x09, 0x83, - 0x24, 0x8a, 0xc2, 0x48, 0xcc, 0x88, 0x71, 0x41, 0x38, 0xb8, 0x4c, 0x81, 0x98, 0xe3, 0xec, 0xff, - 0x62, 0xc1, 0xa4, 0x6a, 0x2b, 0xaf, 0xeb, 0x18, 0x96, 0xbc, 0x0b, 0xd0, 0x90, 0x1d, 0x8c, 0xd9, - 0x42, 0xd3, 0xea, 0xe8, 0x3e, 0xfd, 0x3a, 0x07, 0x34, 0xad, 0x43, 0x81, 0x62, 0xac, 0xf1, 0xb5, - 0xff, 0x9d, 0x05, 0x27, 0x33, 0x7d, 0xbb, 0xee, 0xc5, 0x09, 0x7a, 0xa3, 0xa3, 0x7f, 0x73, 0xc5, - 0xfa, 0x47, 0x4b, 0xb3, 0xde, 0xa9, 0xf9, 0x22, 0x21, 0x5a, 0xdf, 0x30, 0x0c, 0x7a, 0x09, 0x69, - 0xca, 0x6e, 0x3d, 0x5f, 0xb0, 0x5b, 0xbc, 0x7d, 0xe9, 0x57, 0x5a, 0xa5, 0x3c, 0x30, 0x67, 0x65, - 0xff, 0x4f, 0x0b, 0x2a, 0x4b, 0x61, 0xb0, 0xe1, 0x6d, 0xde, 0x70, 0x5a, 0xc7, 0xf0, 0x7d, 0xea, - 0x30, 0xc0, 0xb8, 0xf3, 0x2e, 0x5c, 0xcc, 0xeb, 0x82, 0x68, 0xd8, 0x1c, 0xdd, 0x53, 0xb9, 0xb2, - 0xa0, 0xc4, 0x14, 0x05, 0x61, 0xc6, 0x6c, 0xe6, 0x65, 0xa8, 0x28, 0x02, 0x34, 0x05, 0xe5, 0x7b, - 0x84, 0x6b, 0x92, 0x15, 0x4c, 0x7f, 0xa2, 0x53, 0x30, 0xb8, 0xed, 0xf8, 0x6d, 0xb1, 0x78, 0x31, - 0xff, 0xf3, 0xf1, 0xd2, 0x65, 0xcb, 0xfe, 0x21, 0x5b, 0x81, 0xa2, 0x92, 0xe5, 0x60, 0x5b, 0x08, - 0x87, 0xaf, 0x58, 0x70, 0xca, 0xef, 0x22, 0x94, 0xc4, 0x98, 0x1c, 0x46, 0x9c, 0x3d, 0x26, 0x9a, - 0x7d, 0xaa, 0x1b, 0x16, 0x77, 0xad, 0x8d, 0xca, 0xfa, 0xb0, 0x45, 0x27, 0x9c, 0xe3, 0xb3, 0xa6, - 0x0b, 0x1d, 0xe0, 0x96, 0x80, 0x61, 0x85, 0xb5, 0xff, 0xdc, 0x82, 0x53, 0xaa, 0x1f, 0xd7, 0xc8, - 0x4e, 0x9d, 0xf8, 0xa4, 0x91, 0x84, 0xd1, 0xfb, 0xa5, 0x27, 0x8f, 0xf3, 0x6f, 0xc2, 0x65, 0xd2, - 0xa8, 0x60, 0x50, 0xbe, 0x46, 0x76, 0xf8, 0x07, 0xd2, 0x3b, 0x5a, 0x3e, 0xb0, 0xa3, 0xff, 0xd2, - 0x82, 0x71, 0xd5, 0xd1, 0x63, 0x58, 0x72, 0xd7, 0xcd, 0x25, 0xf7, 0xe1, 0x82, 0xf3, 0xb5, 0xc7, - 0x62, 0xfb, 0x9b, 0x25, 0x2a, 0x36, 0x04, 0x4d, 0x2d, 0x0a, 0xe9, 0x20, 0x51, 0x89, 0xff, 0x3e, - 0xf9, 0x4a, 0xfd, 0x75, 0xf6, 0x1a, 0xd9, 0x59, 0x0b, 0xa9, 0x36, 0xd1, 0xbd, 0xb3, 0xc6, 0x47, - 0x1d, 0x38, 0xf0, 0xa3, 0xfe, 0x7e, 0x09, 0x4e, 0xab, 0x61, 0x31, 0x76, 0xe9, 0x9f, 0xcb, 0x81, - 0xb9, 0x08, 0xa3, 0x2e, 0xd9, 0x70, 0xda, 0x7e, 0xa2, 0x4e, 0x13, 0x83, 0xfc, 0x98, 0x59, 0x4d, - 0xc1, 0x58, 0xa7, 0xe9, 0x63, 0x2c, 0xbf, 0x39, 0xca, 0xe4, 0x79, 0xe2, 0xd0, 0x59, 0x4f, 0x35, - 0x3c, 0xed, 0x78, 0x38, 0xa6, 0x1f, 0x0f, 0xc5, 0x51, 0xf0, 0x49, 0x18, 0xf4, 0x9a, 0x74, 0xcf, - 0x2f, 0x99, 0x5b, 0xf9, 0x2a, 0x05, 0x62, 0x8e, 0x43, 0x4f, 0xc1, 0x70, 0x23, 0x6c, 0x36, 0x9d, - 0xc0, 0x9d, 0x2e, 0x33, 0x9d, 0x73, 0x94, 0xaa, 0x05, 0x4b, 0x1c, 0x84, 0x25, 0x0e, 0x3d, 0x06, - 0x03, 0x4e, 0xb4, 0x19, 0x4f, 0x0f, 0x30, 0x9a, 0x11, 0x5a, 0xd3, 0x42, 0xb4, 0x19, 0x63, 0x06, - 0xa5, 0xba, 0xe4, 0xfd, 0x30, 0xba, 0xe7, 0x05, 0x9b, 0x55, 0x2f, 0x62, 0x8a, 0xa1, 0xa6, 0x4b, - 0xde, 0x55, 0x18, 0xac, 0x51, 0xa1, 0x1a, 0x0c, 0xb6, 0xc2, 0x28, 0x89, 0xa7, 0x87, 0xd8, 0xc0, - 0x3f, 0x97, 0xbb, 0xfc, 0x78, 0xbf, 0x6b, 0x61, 0x94, 0xa4, 0x5d, 0xa1, 0xff, 0x62, 0xcc, 0x19, - 0xa1, 0x25, 0x28, 0x93, 0x60, 0x7b, 0x7a, 0x98, 0xf1, 0xfb, 0xd0, 0xc1, 0xfc, 0x96, 0x83, 0xed, - 0x3b, 0x4e, 0x94, 0xca, 0xab, 0xe5, 0x60, 0x1b, 0xd3, 0xd2, 0xa8, 0x01, 0x15, 0x69, 0xc2, 0x8a, - 0xa7, 0x47, 0x8a, 0x4c, 0x45, 0x2c, 0xc8, 0x31, 0x79, 0xa7, 0xed, 0x45, 0xa4, 0x49, 0x82, 0x24, - 0x4e, 0x0f, 0x56, 0x12, 0x1b, 0xe3, 0x94, 0x2f, 0x6a, 0xc0, 0x18, 0xd7, 0x3f, 0x6f, 0x84, 0xed, - 0x20, 0x89, 0xa7, 0x2b, 0xac, 0xc9, 0x39, 0x96, 0x8b, 0x3b, 0x69, 0x89, 0xc5, 0x53, 0x82, 0xfd, - 0x98, 0x06, 0x8c, 0xb1, 0xc1, 0x14, 0xbd, 0x01, 0xe3, 0xbe, 0xb7, 0x4d, 0x02, 0x12, 0xc7, 0xb5, - 0x28, 0x5c, 0x27, 0xd3, 0xc0, 0x7a, 0xf3, 0x64, 0xde, 0x29, 0x3e, 0x5c, 0x27, 0x8b, 0x27, 0xf6, - 0x76, 0x67, 0xc7, 0xaf, 0xeb, 0xa5, 0xb1, 0xc9, 0x0c, 0xbd, 0x09, 0x13, 0x54, 0xd9, 0xf5, 0x52, - 0xf6, 0xa3, 0xc5, 0xd9, 0xa3, 0xbd, 0xdd, 0xd9, 0x09, 0x6c, 0x14, 0xc7, 0x19, 0x76, 0x68, 0x0d, - 0x2a, 0xbe, 0xb7, 0x41, 0x1a, 0x3b, 0x0d, 0x9f, 0x4c, 0x8f, 0x31, 0xde, 0x39, 0x8b, 0xf3, 0xba, - 0x24, 0xe7, 0x07, 0x0c, 0xf5, 0x17, 0xa7, 0x8c, 0xd0, 0x1d, 0x38, 0x93, 0x90, 0xa8, 0xe9, 0x05, - 0x0e, 0x5d, 0x54, 0x42, 0xfb, 0x65, 0xa6, 0x92, 0x71, 0x36, 0x6b, 0xcf, 0x8a, 0x81, 0x3d, 0xb3, - 0xd6, 0x95, 0x0a, 0xf7, 0x28, 0x8d, 0x6e, 0xc1, 0x24, 0x5b, 0x4f, 0xb5, 0xb6, 0xef, 0xd7, 0x42, - 0xdf, 0x6b, 0xec, 0x4c, 0x4f, 0x30, 0x86, 0x4f, 0x49, 0x03, 0xc8, 0xaa, 0x89, 0xa6, 0x07, 0xc3, - 0xf4, 0x1f, 0xce, 0x96, 0x46, 0x3e, 0x4c, 0xc6, 0xa4, 0xd1, 0x8e, 0xbc, 0x64, 0x87, 0xce, 0x7d, - 0xf2, 0x20, 0x99, 0x9e, 0x2c, 0x72, 0xd0, 0xad, 0x9b, 0x85, 0xb8, 0xf5, 0x29, 0x03, 0xc4, 0x59, - 0xd6, 0x54, 0x54, 0xc4, 0x89, 0xeb, 0x05, 0xd3, 0x53, 0x4c, 0x02, 0xa9, 0xf5, 0x55, 0xa7, 0x40, - 0xcc, 0x71, 0xcc, 0x7e, 0x40, 0x7f, 0xdc, 0xa2, 0x52, 0xfa, 0x04, 0x23, 0x4c, 0xed, 0x07, 0x12, - 0x81, 0x53, 0x1a, 0xaa, 0x1a, 0x24, 0xc9, 0xce, 0x34, 0x62, 0xa4, 0x6a, 0xa9, 0xad, 0xad, 0x7d, - 0x06, 0x53, 0x38, 0xba, 0x03, 0xc3, 0x24, 0xd8, 0x5e, 0x89, 0xc2, 0xe6, 0xf4, 0xc9, 0x22, 0x32, - 0x60, 0x99, 0x13, 0xf3, 0xfd, 0x23, 0x3d, 0xc2, 0x08, 0x30, 0x96, 0xcc, 0xd0, 0x03, 0x98, 0xee, - 0xf2, 0x95, 0xf8, 0x47, 0x39, 0xc5, 0x3e, 0xca, 0x27, 0x44, 0xd9, 0xe9, 0xb5, 0x1e, 0x74, 0xfb, - 0x07, 0xe0, 0x70, 0x4f, 0xee, 0xf6, 0x3a, 0x4c, 0x28, 0x41, 0xc5, 0xbe, 0x37, 0x9a, 0x85, 0x41, - 0x2a, 0x8b, 0xe5, 0x81, 0xbe, 0x42, 0x07, 0x95, 0x8a, 0xe8, 0x18, 0x73, 0x38, 0x1b, 0x54, 0xef, - 0x0b, 0x64, 0x71, 0x27, 0x21, 0xfc, 0x60, 0x57, 0xd6, 0x06, 0x55, 0x22, 0x70, 0x4a, 0x63, 0xff, - 0x6f, 0xae, 0x26, 0xa5, 0xd2, 0xb0, 0xc0, 0x4e, 0x70, 0x01, 0x46, 0xb6, 0xc2, 0x38, 0xa1, 0xd4, - 0xac, 0x8e, 0xc1, 0x54, 0x31, 0xba, 0x2a, 0xe0, 0x58, 0x51, 0xa0, 0x57, 0x60, 0xbc, 0xa1, 0x57, - 0x20, 0xb6, 0xb1, 0xd3, 0xa2, 0x88, 0x59, 0x3b, 0x36, 0x69, 0xd1, 0x65, 0x18, 0x61, 0x56, 0xee, - 0x46, 0xe8, 0x8b, 0x23, 0xa4, 0xdc, 0x95, 0x47, 0x6a, 0x02, 0xbe, 0xaf, 0xfd, 0xc6, 0x8a, 0x9a, - 0x1e, 0xc4, 0x69, 0x13, 0x56, 0x6b, 0x62, 0x03, 0x51, 0x07, 0xf1, 0xab, 0x0c, 0x8a, 0x05, 0xd6, - 0xfe, 0xe7, 0x25, 0x6d, 0x94, 0xe9, 0x01, 0x88, 0xa0, 0xcf, 0xc2, 0xf0, 0x7d, 0xc7, 0x4b, 0xbc, - 0x60, 0x53, 0x68, 0x0f, 0x2f, 0x14, 0xdc, 0x4d, 0x58, 0xf1, 0xbb, 0xbc, 0x28, 0xdf, 0xf9, 0xc4, - 0x1f, 0x2c, 0x19, 0x52, 0xde, 0x51, 0x3b, 0x08, 0x28, 0xef, 0x52, 0xff, 0xbc, 0x31, 0x2f, 0xca, - 0x79, 0x8b, 0x3f, 0x58, 0x32, 0x44, 0x1b, 0x00, 0x72, 0x2e, 0x11, 0x57, 0x58, 0x97, 0x3f, 0xda, - 0x0f, 0xfb, 0x35, 0x55, 0x7a, 0x71, 0x82, 0xee, 0xb5, 0xe9, 0x7f, 0xac, 0x71, 0xb6, 0x13, 0xa6, - 0x84, 0x75, 0x36, 0x0b, 0x7d, 0x8e, 0x2e, 0x69, 0x27, 0x4a, 0x88, 0xbb, 0x90, 0x64, 0x0d, 0xf4, - 0x07, 0xab, 0xd8, 0x6b, 0x5e, 0x93, 0xe8, 0xcb, 0x5f, 0x30, 0xc1, 0x29, 0x3f, 0xfb, 0x7b, 0x65, - 0x98, 0xee, 0xd5, 0x5c, 0x3a, 0x25, 0xc9, 0x03, 0x2f, 0x59, 0xa2, 0x6a, 0x92, 0x65, 0x4e, 0xc9, - 0x65, 0x01, 0xc7, 0x8a, 0x82, 0xce, 0x8d, 0xd8, 0xdb, 0x94, 0x87, 0xa5, 0xc1, 0x74, 0x6e, 0xd4, - 0x19, 0x14, 0x0b, 0x2c, 0xa5, 0x8b, 0x88, 0x13, 0x8b, 0xcb, 0x0d, 0x6d, 0x0e, 0x61, 0x06, 0xc5, - 0x02, 0xab, 0x1b, 0x44, 0x06, 0x72, 0x0c, 0x22, 0xc6, 0x10, 0x0d, 0x3e, 0xdc, 0x21, 0x42, 0x9f, - 0x07, 0xd8, 0xf0, 0x02, 0x2f, 0xde, 0x62, 0xdc, 0x87, 0xfa, 0xe6, 0xae, 0x94, 0xac, 0x15, 0xc5, - 0x05, 0x6b, 0x1c, 0xd1, 0x4b, 0x30, 0xaa, 0x96, 0xe7, 0x6a, 0x75, 0x7a, 0xd8, 0x34, 0x88, 0xa7, - 0xb2, 0xaa, 0x8a, 0x75, 0x3a, 0xfb, 0xed, 0xec, 0x7c, 0x11, 0xab, 0x42, 0x1b, 0x5f, 0xab, 0xe8, - 0xf8, 0x96, 0x0e, 0x1e, 0x5f, 0xfb, 0x3f, 0x97, 0x61, 0xd2, 0xa8, 0xac, 0x1d, 0x17, 0x90, 0x68, - 0xaf, 0xd1, 0x0d, 0xcb, 0x49, 0x88, 0x58, 0x93, 0x17, 0xfa, 0x59, 0x34, 0xfa, 0xf6, 0x46, 0xd7, - 0x02, 0xe7, 0x84, 0xb6, 0xa0, 0xe2, 0x3b, 0x31, 0x33, 0xa9, 0x10, 0xb1, 0x16, 0xfb, 0x63, 0x9b, - 0x1e, 0x3f, 0x9c, 0x38, 0xd1, 0x76, 0x0f, 0x5e, 0x4b, 0xca, 0x9c, 0xee, 0xb6, 0x54, 0xd9, 0x91, - 0x37, 0x6a, 0xaa, 0x39, 0x54, 0x23, 0xda, 0xc1, 0x1c, 0x87, 0x2e, 0xc3, 0x58, 0x44, 0xd8, 0x4c, - 0x59, 0xa2, 0xfa, 0x1c, 0x9b, 0x7a, 0x83, 0xa9, 0xe2, 0x87, 0x35, 0x1c, 0x36, 0x28, 0x53, 0xbd, - 0x7f, 0xe8, 0x00, 0xbd, 0xff, 0x19, 0x18, 0x66, 0x3f, 0xd4, 0xac, 0x50, 0x5f, 0x68, 0x95, 0x83, - 0xb1, 0xc4, 0x67, 0x27, 0xd1, 0x48, 0xc1, 0x49, 0xf4, 0x2c, 0x4c, 0x54, 0x1d, 0xd2, 0x0c, 0x83, - 0xe5, 0xc0, 0x6d, 0x85, 0x5e, 0x90, 0xa0, 0x69, 0x18, 0x60, 0xfb, 0x09, 0x5f, 0xef, 0x03, 0x94, - 0x03, 0x1e, 0xa0, 0xba, 0xbb, 0xfd, 0x7f, 0x2c, 0x18, 0xaf, 0x12, 0x9f, 0x24, 0x84, 0x9f, 0x7b, - 0x62, 0xb4, 0x02, 0x68, 0x33, 0x72, 0x1a, 0xa4, 0x46, 0x22, 0x2f, 0x74, 0xeb, 0xa4, 0x11, 0x06, - 0xec, 0x22, 0x8a, 0x6e, 0x90, 0x67, 0xf6, 0x76, 0x67, 0xd1, 0x95, 0x0e, 0x2c, 0xee, 0x52, 0x02, - 0xb9, 0x30, 0xde, 0x8a, 0x88, 0x61, 0x37, 0xb4, 0xf2, 0x55, 0x8d, 0x9a, 0x5e, 0x84, 0x6b, 0xc3, - 0x06, 0x08, 0x9b, 0x4c, 0xd1, 0xa7, 0x60, 0x2a, 0x8c, 0x5a, 0x5b, 0x4e, 0x50, 0x25, 0x2d, 0x12, - 0xb8, 0xf4, 0x08, 0x20, 0xac, 0x1d, 0xa7, 0xf6, 0x76, 0x67, 0xa7, 0x6e, 0x65, 0x70, 0xb8, 0x83, - 0xda, 0x7e, 0x07, 0x4e, 0x57, 0xc3, 0xfb, 0xc1, 0x7d, 0x27, 0x72, 0x17, 0x6a, 0xab, 0x9a, 0x01, - 0xe1, 0x75, 0x79, 0x40, 0xe5, 0x97, 0x70, 0x39, 0xbb, 0x8f, 0xc6, 0x83, 0x1f, 0x0d, 0x56, 0x3c, - 0x9f, 0xf4, 0x30, 0x59, 0xfc, 0xa3, 0x92, 0x51, 0x67, 0x4a, 0xaf, 0xee, 0x17, 0xac, 0x9e, 0xf7, - 0x0b, 0x9f, 0x83, 0x91, 0x0d, 0x8f, 0xf8, 0x2e, 0x26, 0x1b, 0x62, 0x44, 0x2f, 0x16, 0xb9, 0x80, - 0x59, 0xa1, 0x65, 0xa4, 0x05, 0x8b, 0x1f, 0x74, 0x57, 0x04, 0x1b, 0xac, 0x18, 0xa2, 0x36, 0x4c, - 0xc9, 0xb3, 0x92, 0xc4, 0x8a, 0x05, 0xf9, 0x42, 0xb1, 0xa3, 0x98, 0x59, 0x0d, 0xfb, 0x04, 0x38, - 0xc3, 0x10, 0x77, 0x54, 0x41, 0xcf, 0xb8, 0x4d, 0xba, 0x1d, 0x0d, 0xb0, 0xe9, 0xc9, 0xce, 0xb8, - 0xec, 0xb8, 0xce, 0xa0, 0xf6, 0x6f, 0x58, 0xf0, 0x48, 0xc7, 0x68, 0x09, 0x5b, 0xc6, 0x91, 0x7d, - 0xa3, 0xac, 0x41, 0xa1, 0x94, 0x6f, 0x50, 0xb0, 0x6f, 0xc1, 0xa9, 0xe5, 0x66, 0x2b, 0xd9, 0xa9, - 0x7a, 0xe6, 0xb5, 0xc8, 0xcb, 0x30, 0xd4, 0x24, 0xae, 0xd7, 0x6e, 0x8a, 0xcf, 0x3a, 0x2b, 0x65, - 0xf7, 0x0d, 0x06, 0xdd, 0xdf, 0x9d, 0x1d, 0xaf, 0x27, 0x61, 0xe4, 0x6c, 0x12, 0x0e, 0xc0, 0x82, - 0xdc, 0x7e, 0xd7, 0x82, 0x49, 0xb9, 0x86, 0x17, 0x5c, 0x37, 0x22, 0x71, 0x8c, 0x66, 0xa0, 0xe4, - 0xb5, 0x04, 0x23, 0x10, 0x8c, 0x4a, 0xab, 0x35, 0x5c, 0xf2, 0x5a, 0xe8, 0xb3, 0x50, 0xe1, 0xb7, - 0x69, 0xe9, 0xe4, 0xe8, 0xf3, 0x76, 0x8e, 0x9d, 0xdf, 0xd6, 0x24, 0x0f, 0x9c, 0xb2, 0x93, 0x9a, - 0x2c, 0xdb, 0x1d, 0xca, 0xe6, 0xdd, 0xce, 0x55, 0x01, 0xc7, 0x8a, 0x02, 0x9d, 0x87, 0x91, 0x20, - 0x74, 0xf9, 0x85, 0x27, 0xdf, 0xe7, 0xd9, 0x94, 0xbb, 0x29, 0x60, 0x58, 0x61, 0xed, 0xaf, 0x59, - 0x30, 0x26, 0xfb, 0x58, 0x50, 0xa9, 0xa6, 0x8b, 0x24, 0x55, 0xa8, 0xd3, 0x45, 0x42, 0x95, 0x62, - 0x86, 0x31, 0x74, 0xe1, 0x72, 0x3f, 0xba, 0xb0, 0xfd, 0x5b, 0x25, 0x98, 0x90, 0xcd, 0xa9, 0xb7, - 0xd7, 0x63, 0x42, 0x55, 0x85, 0x8a, 0xc3, 0x07, 0x9f, 0xc8, 0x79, 0xf6, 0x7c, 0xde, 0x79, 0xc9, - 0xf8, 0x66, 0xa9, 0x2a, 0xb2, 0x20, 0xf9, 0xe0, 0x94, 0x25, 0xda, 0x86, 0x13, 0x41, 0x98, 0xb0, - 0x2d, 0x48, 0xe1, 0x8b, 0xdd, 0x46, 0x64, 0xeb, 0x79, 0x54, 0xd4, 0x73, 0xe2, 0x66, 0x96, 0x1f, - 0xee, 0xac, 0x02, 0xdd, 0x92, 0x76, 0xa0, 0x32, 0xab, 0xeb, 0xd9, 0x62, 0x75, 0xf5, 0x36, 0x03, - 0xd9, 0xbf, 0x67, 0x41, 0x45, 0x92, 0x1d, 0xc7, 0xb5, 0xd4, 0x5d, 0x18, 0x8e, 0xd9, 0x27, 0x92, - 0xc3, 0x75, 0xa1, 0x58, 0x17, 0xf8, 0x77, 0x4d, 0xf7, 0x5d, 0xfe, 0x3f, 0xc6, 0x92, 0x1b, 0x33, - 0x88, 0xab, 0x8e, 0xbc, 0xef, 0x0c, 0xe2, 0xaa, 0x65, 0xbd, 0x6f, 0x9f, 0xc6, 0x8d, 0x13, 0x3b, - 0x55, 0x1e, 0x5b, 0x11, 0xd9, 0xf0, 0x1e, 0x64, 0x95, 0xc7, 0x1a, 0x83, 0x62, 0x81, 0x45, 0x1b, - 0x30, 0xd6, 0x90, 0x26, 0xe3, 0x54, 0x84, 0x7c, 0xa4, 0xa0, 0x7d, 0x5e, 0x5d, 0xf5, 0x70, 0xf7, - 0xa1, 0x25, 0x8d, 0x13, 0x36, 0xf8, 0x52, 0x39, 0x95, 0xde, 0x66, 0x97, 0x0b, 0x1a, 0x57, 0x22, - 0x92, 0xa4, 0x35, 0xf4, 0xbc, 0xc8, 0xb6, 0xbf, 0x65, 0xc1, 0x10, 0xb7, 0x31, 0x16, 0x33, 0xd4, - 0x6a, 0x97, 0x58, 0xe9, 0x78, 0xde, 0xa1, 0x40, 0x71, 0xa7, 0x85, 0xee, 0x42, 0x85, 0xfd, 0x60, - 0xf6, 0x92, 0x72, 0x11, 0x5f, 0x2a, 0x5e, 0xbf, 0xde, 0xd4, 0x3b, 0x92, 0x01, 0x4e, 0x79, 0xd9, - 0x3f, 0x28, 0x53, 0xd1, 0x97, 0x92, 0x1a, 0x7b, 0xbb, 0x75, 0x1c, 0x7b, 0x7b, 0xe9, 0xe8, 0xf7, - 0xf6, 0x77, 0x60, 0xb2, 0xa1, 0x5d, 0xa2, 0xa5, 0x5f, 0xfc, 0x52, 0xc1, 0x69, 0xa5, 0xdd, 0xbc, - 0x71, 0x9b, 0xda, 0x92, 0xc9, 0x0e, 0x67, 0xf9, 0x23, 0x02, 0x63, 0x7c, 0x3e, 0x88, 0xfa, 0x06, - 0x58, 0x7d, 0xf3, 0x45, 0x66, 0x98, 0x5e, 0x19, 0x9b, 0xc5, 0x75, 0x8d, 0x11, 0x36, 0xd8, 0xda, - 0x7f, 0x7b, 0x10, 0x06, 0x97, 0xb7, 0x49, 0x90, 0x1c, 0x83, 0xa8, 0x6b, 0xc2, 0x84, 0x17, 0x6c, - 0x87, 0xfe, 0x36, 0x71, 0x39, 0xfe, 0x70, 0xdb, 0xfb, 0x19, 0x51, 0xc9, 0xc4, 0xaa, 0xc1, 0x0c, - 0x67, 0x98, 0x1f, 0xc5, 0x69, 0xfe, 0x35, 0x18, 0xe2, 0x33, 0x43, 0x1c, 0xe5, 0x73, 0x6c, 0xee, - 0x6c, 0x60, 0xc5, 0x0a, 0x4a, 0x6d, 0x0e, 0xdc, 0xdc, 0x2f, 0x18, 0xa1, 0xb7, 0x61, 0x62, 0xc3, - 0x8b, 0xe2, 0x84, 0x1e, 0xc8, 0xe3, 0xc4, 0x69, 0xb6, 0x0e, 0x71, 0x8e, 0x57, 0x23, 0xb2, 0x62, - 0x70, 0xc2, 0x19, 0xce, 0x68, 0x13, 0xc6, 0xe9, 0x31, 0x32, 0xad, 0x6a, 0xb8, 0xef, 0xaa, 0x94, - 0x19, 0xef, 0xba, 0xce, 0x08, 0x9b, 0x7c, 0xa9, 0x48, 0x6a, 0xb0, 0x63, 0xe7, 0x08, 0xd3, 0x6e, - 0x94, 0x48, 0xe2, 0xe7, 0x4d, 0x8e, 0xa3, 0x92, 0x8d, 0x79, 0xb3, 0x54, 0x4c, 0xc9, 0x96, 0xfa, - 0xac, 0xd8, 0xdf, 0xa1, 0x7b, 0x31, 0x1d, 0xc3, 0x63, 0xd8, 0xbe, 0xae, 0x9a, 0xdb, 0xd7, 0x93, - 0x05, 0xbe, 0x6c, 0x8f, 0xad, 0xeb, 0x2d, 0x18, 0xd5, 0x3e, 0x3c, 0x9a, 0x87, 0x4a, 0x43, 0x3a, - 0x5c, 0x08, 0x29, 0xae, 0x54, 0x29, 0xe5, 0x89, 0x81, 0x53, 0x1a, 0x3a, 0x2e, 0x54, 0x05, 0xcd, - 0xba, 0x67, 0x51, 0x05, 0x15, 0x33, 0x8c, 0xfd, 0x02, 0xc0, 0xf2, 0x03, 0xd2, 0x58, 0xe0, 0x47, - 0x3c, 0xed, 0x0e, 0xce, 0xea, 0x7d, 0x07, 0x67, 0x7f, 0xdb, 0x82, 0x89, 0x95, 0x25, 0x43, 0xa7, - 0x9f, 0x03, 0xe0, 0xba, 0xf1, 0xdd, 0xbb, 0x37, 0xa5, 0x8d, 0x99, 0x1b, 0x02, 0x15, 0x14, 0x6b, - 0x14, 0xe8, 0x51, 0x28, 0xfb, 0xed, 0x40, 0xa8, 0xac, 0xc3, 0x7b, 0xbb, 0xb3, 0xe5, 0xeb, 0xed, - 0x00, 0x53, 0x98, 0xe6, 0x07, 0x55, 0x2e, 0xec, 0x07, 0x95, 0xef, 0x11, 0xfc, 0x8d, 0x32, 0x4c, - 0xad, 0xf8, 0xe4, 0x81, 0xd1, 0xea, 0xa7, 0x61, 0xc8, 0x8d, 0xbc, 0x6d, 0x12, 0x65, 0x15, 0x81, - 0x2a, 0x83, 0x62, 0x81, 0x2d, 0xec, 0x9a, 0xf5, 0x66, 0xe7, 0x46, 0x7e, 0x74, 0x6e, 0x69, 0xb9, - 0x7d, 0x46, 0x1b, 0x30, 0xcc, 0xef, 0x6c, 0xe3, 0xe9, 0x41, 0x36, 0x15, 0x5f, 0x39, 0xb8, 0x31, - 0xd9, 0xf1, 0x99, 0x13, 0x36, 0x10, 0xee, 0x14, 0xa3, 0x64, 0x99, 0x80, 0x62, 0xc9, 0x7c, 0xe6, - 0xe3, 0x30, 0xa6, 0x53, 0xf6, 0xe5, 0x1d, 0xf3, 0x97, 0x2d, 0x38, 0xb9, 0xe2, 0x87, 0x8d, 0x7b, - 0x19, 0xdf, 0xb9, 0x97, 0x60, 0x94, 0x2e, 0xa6, 0xd8, 0x70, 0x2c, 0x35, 0x3c, 0x68, 0x05, 0x0a, - 0xeb, 0x74, 0x5a, 0xb1, 0xdb, 0xb7, 0x57, 0xab, 0xdd, 0x1c, 0x6f, 0x05, 0x0a, 0xeb, 0x74, 0xf6, - 0x1f, 0x58, 0xf0, 0xf8, 0x95, 0xa5, 0xe5, 0x1a, 0x89, 0x62, 0x2f, 0x4e, 0x48, 0x90, 0x74, 0xf8, - 0xfe, 0x52, 0x9d, 0xd1, 0xd5, 0x9a, 0x92, 0xea, 0x8c, 0x55, 0xd6, 0x0a, 0x81, 0x7d, 0xbf, 0x38, - 0xc0, 0x7f, 0xcb, 0x82, 0x93, 0x57, 0xbc, 0x04, 0x93, 0x56, 0x98, 0x75, 0xd7, 0x8d, 0x48, 0x2b, - 0x8c, 0xbd, 0x24, 0x8c, 0x76, 0xb2, 0xee, 0xba, 0x58, 0x61, 0xb0, 0x46, 0xc5, 0x6b, 0xde, 0xf6, - 0x62, 0xda, 0xd2, 0x92, 0x79, 0xd4, 0xc5, 0x02, 0x8e, 0x15, 0x05, 0xed, 0x98, 0xeb, 0x45, 0x4c, - 0x65, 0xd8, 0x11, 0x2b, 0x58, 0x75, 0xac, 0x2a, 0x11, 0x38, 0xa5, 0xb1, 0xff, 0xae, 0x05, 0xa7, - 0xaf, 0xf8, 0xed, 0x38, 0x21, 0xd1, 0x46, 0x6c, 0x34, 0xf6, 0x05, 0xa8, 0x10, 0xa9, 0xdc, 0x8b, - 0xb6, 0xaa, 0x4d, 0x43, 0x69, 0xfd, 0xdc, 0x57, 0x58, 0xd1, 0x15, 0x70, 0x49, 0xed, 0xcf, 0x81, - 0xf2, 0xb7, 0x4b, 0x30, 0x7e, 0x75, 0x6d, 0xad, 0x76, 0x85, 0x24, 0x42, 0x4a, 0xe6, 0x1b, 0xa5, - 0xb0, 0x76, 0x22, 0x3f, 0x48, 0xf9, 0x69, 0x27, 0x9e, 0x3f, 0xc7, 0x43, 0x3a, 0xe6, 0x56, 0x83, - 0xe4, 0x56, 0x54, 0x4f, 0x22, 0x2f, 0xd8, 0xec, 0x7a, 0x86, 0x97, 0xb2, 0xbc, 0xdc, 0x4b, 0x96, - 0xa3, 0x17, 0x60, 0x88, 0xc5, 0x94, 0x48, 0xe5, 0xe3, 0x83, 0x4a, 0x4f, 0x60, 0xd0, 0xfd, 0xdd, - 0xd9, 0xca, 0x6d, 0xbc, 0xca, 0xff, 0x60, 0x41, 0x8a, 0xde, 0x84, 0xd1, 0xad, 0x24, 0x69, 0x5d, - 0x25, 0x8e, 0x4b, 0x22, 0x29, 0x27, 0xce, 0x1f, 0x2c, 0x27, 0xe8, 0x70, 0xf0, 0x02, 0xe9, 0xd2, - 0x4a, 0x61, 0x31, 0xd6, 0x39, 0xda, 0x75, 0x80, 0x14, 0xf7, 0x90, 0xce, 0x20, 0xf6, 0x2f, 0x96, - 0x60, 0xf8, 0xaa, 0x13, 0xb8, 0x3e, 0x89, 0xd0, 0x0a, 0x0c, 0x90, 0x07, 0xa4, 0x21, 0x36, 0xf2, - 0x9c, 0xa6, 0xa7, 0x9b, 0x1d, 0xb7, 0xab, 0xd1, 0xff, 0x98, 0x95, 0x47, 0x18, 0x86, 0x69, 0xbb, - 0xaf, 0x28, 0x4f, 0xee, 0xe7, 0xf2, 0x47, 0x41, 0x4d, 0x0a, 0xbe, 0x53, 0x0a, 0x10, 0x96, 0x8c, - 0x98, 0x05, 0xaa, 0xd1, 0xaa, 0x53, 0xf1, 0x96, 0x14, 0x3b, 0xd9, 0xad, 0x2d, 0xd5, 0x38, 0xb9, - 0xe0, 0xcb, 0x2d, 0x50, 0x12, 0x88, 0x53, 0x76, 0xf6, 0x65, 0x38, 0xc5, 0xee, 0x4c, 0x9d, 0x64, - 0xcb, 0x58, 0x35, 0xb9, 0xd3, 0xd3, 0xfe, 0x51, 0x09, 0x4e, 0xac, 0xd6, 0x97, 0xea, 0xa6, 0xed, - 0xf0, 0x32, 0x8c, 0xf1, 0x0d, 0x9a, 0x4e, 0x3a, 0xc7, 0x17, 0xe5, 0x95, 0x9d, 0x7f, 0x4d, 0xc3, - 0x61, 0x83, 0x12, 0x3d, 0x0e, 0x65, 0xef, 0x9d, 0x20, 0xeb, 0x79, 0xb7, 0xfa, 0xda, 0x4d, 0x4c, - 0xe1, 0x14, 0x4d, 0xf7, 0x7a, 0x2e, 0xe4, 0x14, 0x5a, 0xed, 0xf7, 0xaf, 0xc2, 0x84, 0x17, 0x37, - 0x62, 0x6f, 0x35, 0xa0, 0x12, 0xc0, 0x69, 0xc8, 0xe9, 0x9b, 0x2a, 0xe7, 0xb4, 0xa9, 0x0a, 0x8b, - 0x33, 0xd4, 0x9a, 0xc4, 0x1d, 0x2c, 0xac, 0x2f, 0xe4, 0xba, 0x74, 0x53, 0x55, 0xa8, 0xc5, 0x7a, - 0x17, 0x33, 0x3f, 0x1e, 0xa1, 0x0a, 0xf1, 0x0e, 0xc7, 0x58, 0xe2, 0xec, 0xb7, 0xa1, 0xa2, 0x5c, - 0xb1, 0xa4, 0x07, 0xa2, 0xd5, 0xc3, 0x03, 0x31, 0x5f, 0x32, 0x49, 0xc3, 0x6f, 0xb9, 0xab, 0xe1, - 0xf7, 0x9f, 0x58, 0x90, 0xfa, 0x92, 0x20, 0x0c, 0x95, 0x56, 0xc8, 0x2e, 0x72, 0x22, 0x79, 0x63, - 0xfa, 0x54, 0xce, 0x84, 0xe5, 0x0b, 0x86, 0x4f, 0xa9, 0x9a, 0x2c, 0x8b, 0x53, 0x36, 0xe8, 0x3a, - 0x0c, 0xb7, 0x22, 0x52, 0x4f, 0x58, 0xf8, 0x40, 0x1f, 0x1c, 0xf9, 0xd8, 0xf0, 0x92, 0x58, 0xb2, - 0xb0, 0xff, 0x95, 0x05, 0x70, 0xdd, 0x6b, 0x7a, 0x09, 0x76, 0x82, 0x4d, 0x72, 0x0c, 0xa7, 0xc2, - 0x9b, 0x30, 0x10, 0xb7, 0x48, 0xa3, 0xd8, 0x55, 0x5c, 0xda, 0xb2, 0x7a, 0x8b, 0x34, 0xd2, 0xcf, - 0x41, 0xff, 0x61, 0xc6, 0xc7, 0xfe, 0x3e, 0xc0, 0x44, 0x4a, 0x46, 0x35, 0x73, 0xf4, 0xbc, 0xe1, - 0x37, 0xff, 0x68, 0xc6, 0x6f, 0xbe, 0xc2, 0xa8, 0x35, 0x57, 0xf9, 0x04, 0xca, 0x4d, 0xe7, 0x81, - 0x38, 0x08, 0xbc, 0x54, 0xb4, 0x41, 0xb4, 0xa6, 0xb9, 0x1b, 0xce, 0x03, 0xae, 0x77, 0x3d, 0x27, - 0x27, 0xd2, 0x0d, 0xe7, 0xc1, 0x3e, 0xbf, 0x70, 0x63, 0x0b, 0x96, 0x9e, 0x3c, 0xbe, 0xfc, 0x27, - 0xe9, 0x7f, 0x26, 0x43, 0x69, 0x75, 0xac, 0x56, 0x2f, 0x10, 0x76, 0xcc, 0x3e, 0x6b, 0xf5, 0x82, - 0x6c, 0xad, 0x5e, 0x50, 0xa0, 0x56, 0x8f, 0x39, 0x98, 0x0e, 0x0b, 0xf3, 0x3f, 0xf3, 0xce, 0x1b, - 0xbd, 0xf4, 0xb1, 0xbe, 0xaa, 0x16, 0xf7, 0x08, 0xbc, 0xfa, 0x79, 0xa9, 0x6c, 0x0a, 0x68, 0x6e, - 0x13, 0x64, 0xd5, 0xe8, 0xd7, 0x2c, 0x98, 0x10, 0xbf, 0x31, 0x79, 0xa7, 0x4d, 0xe2, 0x44, 0x6c, - 0x6a, 0x9f, 0x3a, 0x4c, 0x6b, 0x04, 0x0b, 0xde, 0xa8, 0x8f, 0x4a, 0x89, 0x64, 0x22, 0x73, 0xdb, - 0x96, 0x69, 0x0f, 0xfa, 0xbe, 0x05, 0xa7, 0x9a, 0xce, 0x03, 0x5e, 0x23, 0x87, 0x61, 0x27, 0xf1, - 0x42, 0xe1, 0x81, 0xb8, 0xd2, 0xef, 0x3c, 0xe9, 0x60, 0xc4, 0x9b, 0x2b, 0x9d, 0x8b, 0x4e, 0x75, - 0x23, 0xc9, 0x6d, 0x74, 0xd7, 0x16, 0xce, 0x6c, 0xc0, 0x88, 0x9c, 0x98, 0x5d, 0xd4, 0xfc, 0xaa, - 0xbe, 0x77, 0xe7, 0x1c, 0xaa, 0xe7, 0xa4, 0x69, 0x6c, 0xee, 0xb5, 0xb6, 0x13, 0x24, 0x5e, 0xb2, - 0xa3, 0x1d, 0x0b, 0x58, 0x3d, 0x62, 0x2a, 0x1e, 0x69, 0x3d, 0x6f, 0xc3, 0x98, 0x3e, 0xef, 0x8e, - 0xb4, 0xae, 0x77, 0xe0, 0x64, 0x97, 0x59, 0x75, 0xa4, 0x55, 0xde, 0x87, 0x47, 0x7b, 0xce, 0x8f, - 0xa3, 0xac, 0xd8, 0xfe, 0x6d, 0x4b, 0x17, 0x9d, 0xc7, 0x60, 0x74, 0xb9, 0x61, 0x1a, 0x5d, 0xce, - 0x17, 0x5d, 0x43, 0x3d, 0x2c, 0x2f, 0x1b, 0x7a, 0xf3, 0xe9, 0x96, 0x80, 0xd6, 0x60, 0xc8, 0xa7, - 0x10, 0x79, 0xe7, 0x75, 0xa1, 0x9f, 0x55, 0x9a, 0x2a, 0x25, 0x0c, 0x1e, 0x63, 0xc1, 0xcb, 0xfe, - 0xbe, 0x05, 0x03, 0x3f, 0xc5, 0xa8, 0x9e, 0x0e, 0xd6, 0x22, 0x38, 0x7d, 0x0e, 0x3b, 0xf7, 0x97, - 0x1f, 0x24, 0x24, 0x88, 0x99, 0x0e, 0xda, 0xeb, 0xd6, 0x7e, 0x94, 0x56, 0x25, 0x1d, 0x25, 0x5e, - 0x81, 0x71, 0xdf, 0x59, 0x27, 0xbe, 0x34, 0x18, 0x67, 0x4f, 0x6c, 0xd7, 0x75, 0x24, 0x36, 0x69, - 0x69, 0xe1, 0x0d, 0xdd, 0x9e, 0x2e, 0x94, 0x24, 0x55, 0xd8, 0x30, 0xb6, 0x63, 0x93, 0x96, 0x1e, - 0x19, 0xee, 0x3b, 0x49, 0x63, 0x4b, 0x9c, 0xe6, 0x54, 0x73, 0xef, 0x52, 0x20, 0xe6, 0x38, 0xb4, - 0x00, 0x93, 0x72, 0xc6, 0xde, 0xa1, 0xc7, 0xfc, 0x30, 0x10, 0x7a, 0xa6, 0x8a, 0x0c, 0xc6, 0x26, - 0x1a, 0x67, 0xe9, 0xd1, 0xc7, 0x61, 0x82, 0x0e, 0x4e, 0xd8, 0x4e, 0xa4, 0x1b, 0xc8, 0x20, 0x73, - 0x03, 0x61, 0x5e, 0xc4, 0x6b, 0x06, 0x06, 0x67, 0x28, 0xed, 0x37, 0xe1, 0xe4, 0xf5, 0xd0, 0x71, - 0x17, 0x1d, 0xdf, 0x09, 0x1a, 0x24, 0x5a, 0x0d, 0x36, 0x73, 0xaf, 0xaf, 0xf5, 0x2b, 0xe6, 0x52, - 0xde, 0x15, 0xb3, 0x1d, 0x01, 0xd2, 0x2b, 0x10, 0x0e, 0x4c, 0x6f, 0xc0, 0xb0, 0xc7, 0xab, 0x12, - 0xd3, 0xf6, 0x62, 0x9e, 0x3d, 0xaa, 0xa3, 0x8d, 0x9a, 0x43, 0x0e, 0x07, 0x60, 0xc9, 0x92, 0x1e, - 0x41, 0xba, 0x19, 0xb0, 0xf2, 0x4f, 0x79, 0xf6, 0x5f, 0xb5, 0x60, 0xf2, 0x66, 0x26, 0xec, 0xf4, - 0x69, 0x18, 0xe2, 0xc9, 0x0b, 0xb2, 0x26, 0x96, 0x3a, 0x83, 0x62, 0x81, 0x7d, 0xe8, 0x27, 0xfc, - 0x5f, 0x2d, 0x41, 0x85, 0xb9, 0xc2, 0xb6, 0xe8, 0x71, 0xe2, 0xe8, 0xd5, 0xd4, 0x1b, 0x86, 0x9a, - 0x9a, 0x73, 0xca, 0x54, 0x0d, 0xeb, 0xa5, 0xa5, 0xa2, 0xdb, 0x2a, 0x1c, 0xb3, 0xd0, 0x01, 0x33, - 0x65, 0xc8, 0x43, 0xf6, 0x26, 0xcc, 0xe8, 0x4d, 0x19, 0xaa, 0xc9, 0x2e, 0x7d, 0x15, 0xed, 0xfb, - 0xee, 0xd2, 0x57, 0xb5, 0xac, 0x87, 0x70, 0xaa, 0x69, 0x8d, 0x67, 0xe2, 0xfb, 0x93, 0xcc, 0xc1, - 0xd1, 0xf1, 0xbd, 0x2f, 0x10, 0x15, 0xd5, 0x3c, 0x2b, 0x1c, 0x16, 0x05, 0x74, 0x9f, 0xc9, 0x19, - 0xf1, 0x8f, 0x07, 0xad, 0xa7, 0x45, 0xec, 0xab, 0x30, 0x99, 0x19, 0x3a, 0xf4, 0x12, 0x0c, 0xb6, - 0xb6, 0x9c, 0x98, 0x64, 0xfc, 0x58, 0x06, 0x6b, 0x14, 0xb8, 0xbf, 0x3b, 0x3b, 0xa1, 0x0a, 0x30, - 0x08, 0xe6, 0xd4, 0xf6, 0x57, 0x4a, 0x30, 0x70, 0x33, 0x74, 0x8f, 0x63, 0xaa, 0x5d, 0x35, 0xa6, - 0xda, 0xd3, 0xf9, 0x29, 0x2f, 0x7a, 0xce, 0xb2, 0x5a, 0x66, 0x96, 0x9d, 0x2f, 0xc0, 0xeb, 0xe0, - 0x09, 0xd6, 0x84, 0x51, 0x96, 0x52, 0x43, 0x38, 0xf2, 0xbc, 0x60, 0x9c, 0xac, 0x66, 0x33, 0x27, - 0xab, 0x49, 0x8d, 0x54, 0x3b, 0x5f, 0x3d, 0x03, 0xc3, 0xc2, 0x71, 0x24, 0xeb, 0xde, 0x29, 0x68, - 0xb1, 0xc4, 0xdb, 0xff, 0xa2, 0x0c, 0x46, 0x0a, 0x0f, 0xf4, 0x7b, 0x16, 0xcc, 0x45, 0x3c, 0x54, - 0xc6, 0xad, 0xb6, 0x23, 0x2f, 0xd8, 0xac, 0x37, 0xb6, 0x88, 0xdb, 0xf6, 0xbd, 0x60, 0x73, 0x75, - 0x33, 0x08, 0x15, 0x78, 0xf9, 0x01, 0x69, 0xb4, 0x99, 0x9d, 0xb6, 0x70, 0xe6, 0x10, 0x75, 0x69, - 0x7a, 0x69, 0x6f, 0x77, 0x76, 0x0e, 0xf7, 0x55, 0x0b, 0xee, 0xb3, 0x55, 0xe8, 0x8f, 0x2d, 0x98, - 0xe7, 0x49, 0x2c, 0x8a, 0xf7, 0xa4, 0xd0, 0x89, 0xb4, 0x26, 0x99, 0xa6, 0xec, 0xd6, 0x48, 0xd4, - 0x5c, 0x7c, 0x59, 0x0c, 0xf2, 0x7c, 0xad, 0xbf, 0x5a, 0x71, 0xbf, 0xcd, 0xb4, 0xff, 0x4d, 0x19, - 0xc6, 0xe9, 0x78, 0xa6, 0x81, 0xeb, 0x2f, 0x19, 0xd3, 0xe4, 0x89, 0xcc, 0x34, 0x39, 0x61, 0x10, - 0x3f, 0x9c, 0x98, 0xf5, 0x18, 0x4e, 0xf8, 0x4e, 0x9c, 0x5c, 0x25, 0x4e, 0x94, 0xac, 0x13, 0x87, - 0xdd, 0x4d, 0x66, 0xfd, 0x1e, 0x0a, 0x5c, 0x77, 0x2a, 0x67, 0xa4, 0xeb, 0x59, 0x66, 0xb8, 0x93, - 0x3f, 0xda, 0x06, 0xc4, 0xee, 0x41, 0x23, 0x27, 0x88, 0x79, 0x5f, 0x3c, 0x61, 0xd7, 0xed, 0xaf, - 0xd6, 0x19, 0x51, 0x2b, 0xba, 0xde, 0xc1, 0x0d, 0x77, 0xa9, 0x41, 0xbb, 0xe9, 0x1e, 0x2c, 0x7a, - 0xd3, 0x3d, 0x94, 0xe3, 0x57, 0xfd, 0x55, 0x0b, 0x4e, 0xd2, 0xcf, 0x62, 0xfa, 0xe0, 0xc6, 0x28, - 0x84, 0x49, 0x3a, 0xed, 0x7c, 0x92, 0x48, 0x98, 0x58, 0x5f, 0x39, 0x9a, 0xb5, 0xc9, 0x27, 0x55, - 0xdf, 0xae, 0x99, 0xcc, 0x70, 0x96, 0xbb, 0xfd, 0x6d, 0x0b, 0x98, 0xc7, 0xdd, 0x31, 0x6c, 0x66, - 0x57, 0xcc, 0xcd, 0xcc, 0xce, 0x97, 0x18, 0x3d, 0xf6, 0xb1, 0x17, 0x61, 0x8a, 0x62, 0x6b, 0x51, - 0xf8, 0x60, 0x47, 0x2a, 0xda, 0xf9, 0x06, 0xde, 0xaf, 0x96, 0xf8, 0xb2, 0x51, 0x31, 0x7f, 0xe8, - 0x97, 0x2c, 0x18, 0x69, 0x38, 0x2d, 0xa7, 0xc1, 0x13, 0x20, 0x15, 0xb0, 0xce, 0x18, 0xe5, 0xe7, - 0x96, 0x44, 0x59, 0x6e, 0x59, 0xf8, 0x88, 0xec, 0xba, 0x04, 0xe7, 0x5a, 0x13, 0x54, 0xe5, 0x33, - 0xf7, 0x60, 0xdc, 0x60, 0x76, 0xa4, 0xc7, 0xd0, 0x5f, 0xb2, 0xb8, 0xd0, 0x57, 0x47, 0x85, 0xfb, - 0x70, 0x22, 0xd0, 0xfe, 0x53, 0x71, 0x26, 0x35, 0xe3, 0xb9, 0xe2, 0x62, 0x9d, 0x49, 0x41, 0xcd, - 0xbb, 0x30, 0xc3, 0x10, 0x77, 0xd6, 0x61, 0xff, 0xba, 0x05, 0x8f, 0xe8, 0x84, 0x5a, 0x90, 0x66, - 0x9e, 0xdd, 0xb8, 0x0a, 0x23, 0x61, 0x8b, 0x44, 0x4e, 0x7a, 0x2c, 0x3a, 0x2f, 0xc7, 0xff, 0x96, - 0x80, 0xef, 0xef, 0xce, 0x9e, 0xd2, 0xb9, 0x4b, 0x38, 0x56, 0x25, 0x91, 0x0d, 0x43, 0x6c, 0x5c, - 0x62, 0x11, 0x5e, 0xcb, 0x12, 0x02, 0xb1, 0x4b, 0x95, 0x18, 0x0b, 0x8c, 0xfd, 0x37, 0x2c, 0x3e, - 0xdd, 0xf4, 0xa6, 0xa3, 0x2f, 0xc2, 0x54, 0x93, 0x9e, 0xa0, 0x96, 0x1f, 0xb4, 0xe8, 0x46, 0xca, - 0xae, 0x93, 0xad, 0x22, 0xdb, 0x47, 0x8f, 0xee, 0x2e, 0x4e, 0x8b, 0xd6, 0x4f, 0xdd, 0xc8, 0xb0, - 0xc5, 0x1d, 0x15, 0xd9, 0x7f, 0xbf, 0xc4, 0xd7, 0x2c, 0xd3, 0xe1, 0x9e, 0x81, 0xe1, 0x56, 0xe8, - 0x2e, 0xad, 0x56, 0xb1, 0x18, 0x2b, 0x25, 0x74, 0x6a, 0x1c, 0x8c, 0x25, 0x1e, 0x5d, 0x02, 0x20, - 0x0f, 0x12, 0x12, 0x05, 0x8e, 0xaf, 0xae, 0x81, 0x95, 0xaa, 0xb4, 0xac, 0x30, 0x58, 0xa3, 0xa2, - 0x65, 0x5a, 0x51, 0xb8, 0xed, 0xb9, 0x2c, 0xba, 0xa0, 0x6c, 0x96, 0xa9, 0x29, 0x0c, 0xd6, 0xa8, - 0xe8, 0xb9, 0xb5, 0x1d, 0xc4, 0x7c, 0x1b, 0x73, 0xd6, 0x45, 0xfe, 0x9a, 0x91, 0xf4, 0xdc, 0x7a, - 0x5b, 0x47, 0x62, 0x93, 0x16, 0x5d, 0x83, 0xa1, 0xc4, 0x61, 0x97, 0x9b, 0x83, 0x45, 0x3c, 0x45, - 0xd6, 0x28, 0xad, 0x9e, 0x30, 0x88, 0x16, 0xc5, 0x82, 0x85, 0xfd, 0x9f, 0x2a, 0x00, 0xa9, 0xd6, - 0x85, 0xbe, 0xd2, 0xb9, 0xe0, 0x3f, 0x5a, 0x54, 0x65, 0x7b, 0x78, 0xab, 0x1d, 0x7d, 0xdd, 0x82, - 0x51, 0xc7, 0xf7, 0xc3, 0x86, 0x93, 0xb0, 0xe1, 0x29, 0x15, 0x15, 0x3d, 0xa2, 0x25, 0x0b, 0x69, - 0x59, 0xde, 0x98, 0x17, 0xe4, 0x85, 0xa3, 0x86, 0xc9, 0x6d, 0x8f, 0xde, 0x04, 0xf4, 0x11, 0xa9, - 0xb5, 0xf3, 0x2f, 0x3c, 0x93, 0xd5, 0xda, 0x2b, 0x4c, 0xe0, 0x6a, 0x0a, 0x3b, 0x7a, 0xd3, 0xc8, - 0xf7, 0x32, 0x50, 0x24, 0x44, 0xd4, 0xd0, 0x43, 0xf2, 0x52, 0xbd, 0xa0, 0xcf, 0xea, 0x2e, 0xd5, - 0x83, 0x45, 0x62, 0xb0, 0x35, 0x75, 0x38, 0xc7, 0x9d, 0x3a, 0x81, 0x49, 0xd7, 0xdc, 0x79, 0x85, - 0x5b, 0xd8, 0xc5, 0xfc, 0x1a, 0x32, 0x5b, 0x76, 0xba, 0xd7, 0x66, 0x10, 0x38, 0x5b, 0x05, 0xfa, - 0x2c, 0x77, 0x78, 0x5f, 0x0d, 0x36, 0x42, 0xe1, 0x1a, 0x76, 0xa1, 0xc0, 0x37, 0xdf, 0x89, 0x13, - 0xd2, 0xa4, 0x65, 0xd2, 0xcd, 0xf5, 0xa6, 0xe0, 0x82, 0x15, 0x3f, 0xb4, 0x06, 0x43, 0x2c, 0x22, - 0x28, 0x9e, 0x1e, 0x29, 0x62, 0x89, 0x33, 0x03, 0x61, 0xd3, 0xf5, 0xc3, 0xfe, 0xc6, 0x58, 0xf0, - 0x42, 0x57, 0x65, 0x28, 0x7c, 0xbc, 0x1a, 0xdc, 0x8e, 0x09, 0x0b, 0x85, 0xaf, 0x2c, 0x7e, 0x28, - 0x8d, 0x6d, 0xe7, 0xf0, 0xae, 0x19, 0xef, 0x8c, 0x92, 0x54, 0xb1, 0x11, 0xff, 0x65, 0x22, 0xbd, - 0x69, 0x28, 0xd2, 0x50, 0x33, 0xed, 0x5e, 0x3a, 0xd8, 0x77, 0x4c, 0x66, 0x38, 0xcb, 0xfd, 0x58, - 0xb7, 0xd4, 0x99, 0x00, 0xa6, 0xb2, 0x8b, 0xf2, 0x48, 0xb7, 0xf0, 0x9f, 0x0c, 0xc0, 0x84, 0x39, - 0x39, 0xd0, 0x3c, 0x54, 0x04, 0x13, 0x95, 0x58, 0x4b, 0xad, 0x81, 0x1b, 0x12, 0x81, 0x53, 0x1a, - 0x96, 0x62, 0x8c, 0x15, 0xd7, 0x9c, 0x82, 0xd2, 0x14, 0x63, 0x0a, 0x83, 0x35, 0x2a, 0xaa, 0x09, - 0xaf, 0x87, 0x61, 0xa2, 0x76, 0x02, 0x35, 0x6f, 0x16, 0x19, 0x14, 0x0b, 0x2c, 0xdd, 0x01, 0xee, - 0xd1, 0x8f, 0xe9, 0x9b, 0x56, 0x45, 0xb5, 0x03, 0x5c, 0xd3, 0x91, 0xd8, 0xa4, 0xa5, 0x3b, 0x5a, - 0x18, 0xb3, 0x89, 0x28, 0xf4, 0xed, 0xd4, 0xc9, 0xaa, 0xce, 0xa3, 0xe4, 0x24, 0x1e, 0x7d, 0x06, - 0x1e, 0x51, 0x41, 0x6d, 0x98, 0x5b, 0x69, 0x65, 0x8d, 0x43, 0xc6, 0x91, 0xf9, 0x91, 0xa5, 0xee, - 0x64, 0xb8, 0x57, 0x79, 0xf4, 0x2a, 0x4c, 0x08, 0x5d, 0x59, 0x72, 0x1c, 0x36, 0x6f, 0xe0, 0xaf, - 0x19, 0x58, 0x9c, 0xa1, 0x46, 0x55, 0x98, 0xa2, 0x10, 0xa6, 0xa4, 0x4a, 0x0e, 0x3c, 0x38, 0x4f, - 0x6d, 0xf5, 0xd7, 0x32, 0x78, 0xdc, 0x51, 0x02, 0x2d, 0xc0, 0x24, 0x57, 0x56, 0xe8, 0xc1, 0x90, - 0x7d, 0x07, 0xe1, 0xcf, 0xa9, 0x16, 0xc2, 0x2d, 0x13, 0x8d, 0xb3, 0xf4, 0xe8, 0x32, 0x8c, 0x39, - 0x51, 0x63, 0xcb, 0x4b, 0x48, 0x23, 0x69, 0x47, 0x3c, 0xd1, 0x84, 0xe6, 0xc2, 0xb0, 0xa0, 0xe1, - 0xb0, 0x41, 0x69, 0x7f, 0x01, 0x4e, 0x76, 0x71, 0x1e, 0xa7, 0x13, 0xc7, 0x69, 0x79, 0xb2, 0x4f, - 0x19, 0x77, 0xa9, 0x85, 0xda, 0xaa, 0xec, 0x8d, 0x46, 0x45, 0x67, 0x27, 0x33, 0x4f, 0x6b, 0x79, - 0x2f, 0xd5, 0xec, 0x5c, 0x91, 0x08, 0x9c, 0xd2, 0xd8, 0x7f, 0x51, 0x01, 0xcd, 0x7a, 0x53, 0xc0, - 0x45, 0xe6, 0x32, 0x8c, 0xc9, 0x54, 0xae, 0x5a, 0x0a, 0x45, 0xd5, 0xcd, 0x2b, 0x1a, 0x0e, 0x1b, - 0x94, 0xb4, 0x6d, 0x81, 0xb4, 0x49, 0x65, 0x9d, 0xb3, 0x94, 0xb1, 0x0a, 0xa7, 0x34, 0xe8, 0x02, - 0x8c, 0xc4, 0xc4, 0xdf, 0xb8, 0xee, 0x05, 0xf7, 0xc4, 0xc4, 0x56, 0x92, 0xb9, 0x2e, 0xe0, 0x58, - 0x51, 0xa0, 0x45, 0x28, 0xb7, 0x3d, 0x57, 0x4c, 0x65, 0xa9, 0x36, 0x94, 0x6f, 0xaf, 0x56, 0xf7, - 0x77, 0x67, 0x9f, 0xe8, 0x95, 0xd7, 0x96, 0x9e, 0xcf, 0xe3, 0x39, 0xba, 0xfc, 0x68, 0xe1, 0x6e, - 0x76, 0xfa, 0xa1, 0x3e, 0xed, 0xf4, 0x97, 0x00, 0x44, 0xaf, 0xe5, 0x5c, 0x2e, 0xa7, 0x5f, 0xed, - 0x8a, 0xc2, 0x60, 0x8d, 0x8a, 0x9e, 0xf2, 0x1b, 0x11, 0x71, 0xe4, 0x41, 0x98, 0x3b, 0x35, 0x8f, - 0x1c, 0xfe, 0x94, 0xbf, 0x94, 0x65, 0x86, 0x3b, 0xf9, 0xa3, 0x10, 0x4e, 0xb8, 0x74, 0x21, 0x19, - 0x95, 0x56, 0xfa, 0xf7, 0xa4, 0xa6, 0x15, 0x56, 0xb3, 0x8c, 0x70, 0x27, 0x6f, 0xf4, 0x79, 0x98, - 0x91, 0xc0, 0xce, 0xb0, 0x55, 0xb6, 0x5c, 0xca, 0x8b, 0x67, 0xf7, 0x76, 0x67, 0x67, 0xaa, 0x3d, - 0xa9, 0xf0, 0x01, 0x1c, 0xd0, 0x1b, 0x30, 0xc4, 0xee, 0x75, 0xe2, 0xe9, 0x51, 0xb6, 0xe3, 0xbd, - 0x58, 0xc4, 0x1f, 0x9f, 0xce, 0xfa, 0x39, 0x76, 0x3b, 0x24, 0x3c, 0x4d, 0xd3, 0xcb, 0x32, 0x06, - 0xc4, 0x82, 0x27, 0x6a, 0xc1, 0xa8, 0x13, 0x04, 0x61, 0xe2, 0x70, 0x45, 0x6c, 0xac, 0x88, 0x2e, - 0xa9, 0x55, 0xb1, 0x90, 0x96, 0xe5, 0xf5, 0x28, 0xe7, 0x35, 0x0d, 0x83, 0xf5, 0x2a, 0xd0, 0x7d, - 0x98, 0x0c, 0xef, 0x53, 0x81, 0x29, 0xaf, 0x36, 0xe2, 0xe9, 0x71, 0xb3, 0x63, 0x39, 0x86, 0x5a, - 0xa3, 0xb0, 0x26, 0xc9, 0x4c, 0xa6, 0x38, 0x5b, 0x0b, 0x9a, 0x33, 0xcc, 0xd5, 0x13, 0xa9, 0x3f, - 0x75, 0x6a, 0xae, 0xd6, 0xad, 0xd3, 0x2c, 0x34, 0x9a, 0xfb, 0x50, 0x32, 0x89, 0x30, 0x99, 0x09, - 0x8d, 0x4e, 0x51, 0x58, 0xa7, 0x9b, 0xf9, 0x18, 0x8c, 0x6a, 0x03, 0xdf, 0x8f, 0xe3, 0xee, 0xcc, - 0xab, 0x30, 0x95, 0x1d, 0xd0, 0xbe, 0x1c, 0x7f, 0xff, 0x47, 0x09, 0x26, 0xbb, 0xdc, 0x1b, 0xdd, - 0xf3, 0x98, 0xf3, 0xb9, 0x21, 0xfa, 0xae, 0x79, 0x81, 0x8b, 0x19, 0xc6, 0x14, 0x60, 0xa5, 0x02, - 0x02, 0x4c, 0x4a, 0xd3, 0x72, 0x4f, 0x69, 0x2a, 0x84, 0xd6, 0xc0, 0x7b, 0x11, 0x5a, 0xe6, 0x3e, - 0x31, 0x58, 0x68, 0x9f, 0x78, 0x08, 0x82, 0xce, 0xd8, 0x6a, 0x86, 0x0b, 0x6c, 0x35, 0xdf, 0x2a, - 0xc1, 0x54, 0xea, 0xe4, 0x2c, 0xf2, 0x3b, 0x1f, 0xfd, 0x35, 0xc4, 0x9a, 0x71, 0x0d, 0x91, 0x97, - 0xbe, 0x39, 0xd3, 0xbe, 0x9e, 0x57, 0x12, 0x6f, 0x64, 0xae, 0x24, 0x5e, 0xec, 0x93, 0xef, 0xc1, - 0xd7, 0x13, 0xdf, 0x2b, 0xc1, 0xe9, 0x6c, 0x91, 0x25, 0xdf, 0xf1, 0x9a, 0xc7, 0x30, 0x5e, 0x9f, - 0x31, 0xc6, 0xeb, 0xe5, 0xfe, 0xfa, 0xc5, 0x1a, 0xd9, 0x73, 0xd0, 0x9c, 0xcc, 0xa0, 0x7d, 0xec, - 0x30, 0xcc, 0x0f, 0x1e, 0xb9, 0x3f, 0xb4, 0xe0, 0xd1, 0xae, 0xe5, 0x8e, 0xc1, 0xf0, 0xfa, 0xba, - 0x69, 0x78, 0x7d, 0xe1, 0x10, 0xbd, 0xeb, 0x61, 0x89, 0xfd, 0x8d, 0x72, 0x8f, 0x5e, 0x31, 0xd3, - 0xd4, 0x2d, 0x18, 0x75, 0x1a, 0x0d, 0x12, 0xc7, 0x37, 0x42, 0x57, 0x25, 0x59, 0x7a, 0x9e, 0xed, - 0x2d, 0x29, 0x78, 0x7f, 0x77, 0x76, 0x26, 0xcb, 0x22, 0x45, 0x63, 0x9d, 0x83, 0x99, 0xfe, 0xad, - 0x74, 0x44, 0xe9, 0xdf, 0x2e, 0x01, 0x6c, 0xab, 0x53, 0x6c, 0xd6, 0xe2, 0xa5, 0x9d, 0x6f, 0x35, - 0x2a, 0xf4, 0xff, 0x33, 0x8d, 0x90, 0x3b, 0x69, 0x0c, 0x98, 0xf1, 0x92, 0x39, 0xdf, 0x4f, 0x77, - 0xf8, 0xe0, 0x61, 0x99, 0xca, 0x3a, 0xa8, 0x58, 0xa2, 0x4f, 0xc1, 0x54, 0xcc, 0x83, 0xff, 0x97, - 0x7c, 0x27, 0x66, 0xde, 0xfd, 0x42, 0x9e, 0xb2, 0x08, 0xcb, 0x7a, 0x06, 0x87, 0x3b, 0xa8, 0xed, - 0xef, 0x96, 0xe1, 0x83, 0x07, 0x4c, 0x5b, 0xb4, 0x60, 0xde, 0xda, 0x3e, 0x97, 0xb5, 0xff, 0xcc, - 0x74, 0x2d, 0x6c, 0x18, 0x84, 0x32, 0x5f, 0xbb, 0xf4, 0x9e, 0xbf, 0xf6, 0x37, 0x74, 0x6b, 0x1d, - 0xf7, 0xdb, 0xbc, 0x72, 0xe8, 0x85, 0xf9, 0xb3, 0x6a, 0xac, 0xff, 0xb2, 0x05, 0x4f, 0x74, 0xed, - 0x96, 0xe1, 0x25, 0x32, 0x0f, 0x95, 0x06, 0x05, 0x6a, 0xb1, 0x38, 0x69, 0x10, 0x9c, 0x44, 0xe0, - 0x94, 0xc6, 0x70, 0x06, 0x29, 0xe5, 0x3a, 0x83, 0xfc, 0xbe, 0x05, 0xa7, 0xb2, 0x8d, 0x38, 0x06, - 0xb9, 0x55, 0x37, 0xe5, 0xd6, 0x5c, 0x7f, 0x1f, 0xbf, 0x87, 0xc8, 0xfa, 0xb5, 0x71, 0x38, 0xd3, - 0xb1, 0xeb, 0xf1, 0x51, 0xfc, 0x05, 0x0b, 0x4e, 0x6c, 0x32, 0xed, 0x5d, 0x0b, 0x78, 0x12, 0xfd, - 0xca, 0x89, 0x12, 0x3b, 0x30, 0x4e, 0x8a, 0x9f, 0x45, 0x3a, 0x48, 0x70, 0x67, 0x65, 0xe8, 0x6b, - 0x16, 0x9c, 0x72, 0xee, 0xc7, 0x1d, 0xaf, 0x8f, 0x88, 0x89, 0xf4, 0x6a, 0x8e, 0xb1, 0x2c, 0xe7, - 0xdd, 0x92, 0xc5, 0xe9, 0xbd, 0xdd, 0xd9, 0x53, 0xdd, 0xa8, 0x70, 0xd7, 0x5a, 0xe9, 0xf7, 0xdd, - 0x12, 0xe1, 0x14, 0xc5, 0x42, 0xf7, 0xba, 0x05, 0x5f, 0x70, 0xb1, 0x26, 0x31, 0x58, 0x71, 0x44, - 0x6f, 0x41, 0x65, 0x53, 0xc6, 0x38, 0x65, 0xc5, 0x66, 0x8f, 0x61, 0xee, 0x16, 0x12, 0xc5, 0x7d, - 0xf7, 0x15, 0x0a, 0xa7, 0x4c, 0xd1, 0x55, 0x28, 0x07, 0x1b, 0xb1, 0x88, 0x26, 0xce, 0xf3, 0x01, - 0x32, 0x3d, 0xaf, 0x78, 0x00, 0xe6, 0xcd, 0x95, 0x3a, 0xa6, 0x2c, 0x28, 0xa7, 0x68, 0xdd, 0x15, - 0x56, 0xe2, 0x1c, 0x4e, 0x78, 0xb1, 0xda, 0xc9, 0x09, 0x2f, 0x56, 0x31, 0x65, 0x81, 0x6a, 0x30, - 0xc8, 0x82, 0x35, 0x84, 0x09, 0x38, 0x27, 0xe4, 0xbc, 0x23, 0x24, 0x85, 0x67, 0x29, 0x64, 0x60, - 0xcc, 0x19, 0xa1, 0x35, 0x18, 0x6a, 0xb0, 0x44, 0xfb, 0xe2, 0x6c, 0x9e, 0x97, 0x8c, 0xa1, 0x23, - 0x29, 0x3f, 0xbf, 0xf7, 0xe2, 0x70, 0x2c, 0x78, 0x31, 0xae, 0xa4, 0xb5, 0xb5, 0x11, 0x8b, 0xc3, - 0x77, 0x1e, 0xd7, 0x8e, 0x27, 0x13, 0x04, 0x57, 0x06, 0xc7, 0x82, 0x17, 0xaa, 0x42, 0x69, 0xa3, - 0x21, 0x92, 0x9d, 0xe6, 0x98, 0x7e, 0xcd, 0x68, 0xda, 0xc5, 0xa1, 0xbd, 0xdd, 0xd9, 0xd2, 0xca, - 0x12, 0x2e, 0x6d, 0x34, 0xd0, 0xeb, 0x30, 0xbc, 0xc1, 0xe3, 0x23, 0x45, 0x62, 0xd3, 0x8b, 0x79, - 0x41, 0x9c, 0x1d, 0xc1, 0x94, 0x3c, 0x3e, 0x43, 0x20, 0xb0, 0x64, 0xc7, 0x72, 0xbe, 0xa9, 0x88, - 0x4f, 0x91, 0xd9, 0x74, 0xae, 0xbf, 0x08, 0x51, 0x71, 0x26, 0x55, 0x50, 0xac, 0x71, 0xa4, 0x73, - 0xde, 0x91, 0x6f, 0x86, 0xb0, 0xac, 0xa6, 0xb9, 0x73, 0xbe, 0xeb, 0x13, 0x23, 0x7c, 0xce, 0x2b, - 0x14, 0x4e, 0x99, 0xa2, 0x36, 0x8c, 0x6f, 0xc7, 0xad, 0x2d, 0x22, 0x97, 0x3e, 0x4b, 0x75, 0x3a, - 0x7a, 0xe9, 0x13, 0x39, 0xf9, 0x6b, 0x45, 0x11, 0x2f, 0x4a, 0xda, 0x8e, 0xdf, 0x21, 0xc1, 0x58, - 0x92, 0xad, 0x3b, 0x3a, 0x5b, 0x6c, 0xd6, 0x42, 0x3f, 0xc9, 0x3b, 0xed, 0x70, 0x7d, 0x27, 0x21, - 0x22, 0x15, 0x6a, 0xce, 0x27, 0x79, 0x8d, 0x13, 0x77, 0x7e, 0x12, 0x81, 0xc0, 0x92, 0x9d, 0x1a, - 0x32, 0x26, 0x8d, 0xa7, 0x0a, 0x0f, 0x59, 0x47, 0x1f, 0xd2, 0x21, 0x63, 0xd2, 0x37, 0x65, 0xca, - 0xa4, 0x6e, 0x6b, 0x2b, 0x4c, 0xc2, 0x20, 0x23, 0xfb, 0x4f, 0x14, 0x91, 0xba, 0xb5, 0x2e, 0x25, - 0x3b, 0xa5, 0x6e, 0x37, 0x2a, 0xdc, 0xb5, 0x56, 0xfb, 0xd7, 0x87, 0x3a, 0xb7, 0x5b, 0xa6, 0x50, - 0xff, 0xf5, 0xce, 0xfb, 0xcb, 0x4f, 0xf5, 0x7f, 0x6e, 0x7c, 0x88, 0x37, 0x99, 0x5f, 0xb3, 0xe0, - 0x4c, 0xab, 0xeb, 0x66, 0x2a, 0x36, 0xac, 0x7e, 0x8f, 0x9f, 0x7c, 0xc0, 0x54, 0x9e, 0xdf, 0xee, - 0x78, 0xdc, 0xa3, 0xce, 0xac, 0x0a, 0x5a, 0x7e, 0xcf, 0x2a, 0xe8, 0x5d, 0x18, 0x61, 0x3a, 0x53, - 0x9a, 0x21, 0xa4, 0xcf, 0x64, 0x1a, 0x6c, 0xeb, 0x5b, 0x12, 0x2c, 0xb0, 0x62, 0x46, 0x07, 0xee, - 0xf1, 0x6c, 0x27, 0x30, 0x61, 0x68, 0x91, 0x0b, 0x97, 0xeb, 0xf7, 0x2b, 0x62, 0x24, 0x1e, 0xaf, - 0x1d, 0x44, 0xbc, 0x9f, 0x47, 0x80, 0x0f, 0xae, 0x0c, 0x55, 0xbb, 0x1c, 0x30, 0x86, 0xcc, 0xcb, - 0x8a, 0xfc, 0x43, 0xc6, 0xf1, 0x2a, 0xc6, 0xff, 0xc0, 0xea, 0xa2, 0xc7, 0xf1, 0xc3, 0xcc, 0x27, - 0xcc, 0xc3, 0xcc, 0xd3, 0xd9, 0xc3, 0x4c, 0x87, 0x09, 0xc3, 0x38, 0xc7, 0x14, 0xcf, 0x8e, 0x59, - 0x34, 0x05, 0x8a, 0xed, 0xc3, 0xb9, 0x3c, 0x21, 0xc1, 0x1c, 0x98, 0x5c, 0x75, 0x75, 0x97, 0x3a, - 0x30, 0xb9, 0xab, 0x55, 0xcc, 0x30, 0x45, 0xa3, 0xe8, 0xed, 0x5f, 0x2c, 0x41, 0xb9, 0x16, 0xba, - 0xc7, 0x60, 0x92, 0xb9, 0x62, 0x98, 0x64, 0x9e, 0xca, 0x7d, 0x79, 0xad, 0xa7, 0x01, 0xe6, 0x56, - 0xc6, 0x00, 0xf3, 0xe1, 0x7c, 0x56, 0x07, 0x9b, 0x5b, 0xbe, 0x5f, 0x06, 0xfd, 0xed, 0x38, 0xf4, - 0x1f, 0x0e, 0xe3, 0xd7, 0x5a, 0x2e, 0xf6, 0x9c, 0x9c, 0xa8, 0x83, 0xf9, 0x3f, 0xc9, 0x68, 0xb8, - 0x9f, 0x59, 0xf7, 0xd6, 0xbb, 0xc4, 0xdb, 0xdc, 0x4a, 0x88, 0x9b, 0xed, 0xd8, 0xf1, 0xb9, 0xb7, - 0xfe, 0xb9, 0x05, 0x93, 0x99, 0xda, 0x91, 0xdf, 0x2d, 0x8c, 0xe6, 0x90, 0x46, 0x96, 0x13, 0xb9, - 0x71, 0x37, 0x73, 0x00, 0xca, 0x56, 0x2e, 0x0d, 0x19, 0x4c, 0xa7, 0x53, 0xc6, 0xf4, 0x18, 0x6b, - 0x14, 0xe8, 0x25, 0x18, 0x4d, 0xc2, 0x56, 0xe8, 0x87, 0x9b, 0x3b, 0xd7, 0x88, 0xcc, 0xef, 0xa0, - 0xee, 0x19, 0xd6, 0x52, 0x14, 0xd6, 0xe9, 0xec, 0x1f, 0x94, 0x21, 0xfb, 0xf2, 0xe0, 0xff, 0x9b, - 0xa7, 0x3f, 0x3b, 0xf3, 0xf4, 0x8f, 0x2c, 0x98, 0xa2, 0xb5, 0x33, 0x87, 0x13, 0xe9, 0x86, 0xaa, - 0x52, 0xf5, 0x5b, 0x07, 0xa4, 0xea, 0x7f, 0x9a, 0x4a, 0x3b, 0x37, 0x6c, 0x27, 0xc2, 0xf4, 0xa2, - 0x09, 0x31, 0x0a, 0xc5, 0x02, 0x2b, 0xe8, 0x48, 0x14, 0x89, 0x78, 0x1d, 0x9d, 0x8e, 0x44, 0x11, - 0x16, 0x58, 0x99, 0xc9, 0x7f, 0xa0, 0x47, 0x26, 0x7f, 0x96, 0x21, 0x49, 0x38, 0x39, 0x08, 0xb5, - 0x42, 0xcb, 0x90, 0x24, 0xbd, 0x1f, 0x52, 0x1a, 0xfb, 0x3b, 0x65, 0x18, 0xab, 0x85, 0x6e, 0xea, - 0x5f, 0xfe, 0xa2, 0xe1, 0x5f, 0x7e, 0x2e, 0xe3, 0x5f, 0x3e, 0xa5, 0xd3, 0x3e, 0x1c, 0xf7, 0x72, - 0x91, 0x49, 0x8b, 0xbd, 0x35, 0x71, 0x48, 0xd7, 0x72, 0x23, 0x93, 0x96, 0x62, 0x84, 0x4d, 0xbe, - 0x3f, 0x4f, 0x2e, 0xe5, 0xff, 0xcb, 0x82, 0x89, 0x5a, 0xe8, 0xd2, 0x09, 0xfa, 0xf3, 0x34, 0x1b, - 0xf5, 0xfc, 0x5b, 0x43, 0x07, 0xe4, 0xdf, 0xfa, 0x67, 0x16, 0x0c, 0xd7, 0x42, 0xf7, 0x18, 0xcc, - 0x92, 0x2b, 0xa6, 0x59, 0xf2, 0x89, 0x5c, 0xc9, 0xdb, 0xc3, 0x12, 0xf9, 0xdd, 0x32, 0x8c, 0xd3, - 0x16, 0x87, 0x9b, 0xf2, 0x7b, 0x19, 0x63, 0x63, 0x15, 0x18, 0x1b, 0xaa, 0x12, 0x86, 0xbe, 0x1f, - 0xde, 0xcf, 0x7e, 0xbb, 0x15, 0x06, 0xc5, 0x02, 0x8b, 0x2e, 0xc0, 0x48, 0x2b, 0x22, 0xdb, 0x5e, - 0xd8, 0x8e, 0xb3, 0xb1, 0x7f, 0x35, 0x01, 0xc7, 0x8a, 0x02, 0xbd, 0x08, 0x63, 0xb1, 0x17, 0x34, - 0x88, 0x74, 0x81, 0x18, 0x60, 0x2e, 0x10, 0x3c, 0xd5, 0xa1, 0x06, 0xc7, 0x06, 0x15, 0xba, 0x0b, - 0x15, 0xf6, 0x9f, 0xad, 0xa0, 0xfe, 0x53, 0xf1, 0xf3, 0xfc, 0x5e, 0x92, 0x01, 0x4e, 0x79, 0xa1, - 0x4b, 0x00, 0x89, 0x74, 0xd6, 0x88, 0x45, 0x96, 0x12, 0xa5, 0x97, 0x2a, 0x37, 0x8e, 0x18, 0x6b, - 0x54, 0xe8, 0x39, 0xa8, 0x24, 0x8e, 0xe7, 0x5f, 0xf7, 0x02, 0x12, 0x0b, 0x67, 0x17, 0x91, 0xb6, - 0x58, 0x00, 0x71, 0x8a, 0xa7, 0xfb, 0x3d, 0x8b, 0x3c, 0xe6, 0xcf, 0x7c, 0x8c, 0x30, 0x6a, 0xb6, - 0xdf, 0x5f, 0x57, 0x50, 0xac, 0x51, 0xd8, 0x97, 0xe1, 0x74, 0x2d, 0x74, 0x6b, 0x61, 0x94, 0xac, - 0x84, 0xd1, 0x7d, 0x27, 0x72, 0xe5, 0xf7, 0x9b, 0x95, 0xd9, 0x72, 0xe9, 0x9e, 0x3c, 0xc8, 0x2d, - 0x75, 0x46, 0xf6, 0xdb, 0x17, 0xd8, 0x8e, 0xdf, 0x67, 0xe0, 0xc2, 0x8f, 0x4b, 0x80, 0x6a, 0xcc, - 0x9d, 0xc4, 0x78, 0x15, 0x66, 0x0b, 0x26, 0x62, 0x72, 0xdd, 0x0b, 0xda, 0x0f, 0x04, 0xab, 0x62, - 0x91, 0x22, 0xf5, 0x65, 0xbd, 0x0c, 0x0f, 0xd3, 0x35, 0x61, 0x38, 0xc3, 0x97, 0x0e, 0x66, 0xd4, - 0x0e, 0x16, 0xe2, 0xdb, 0x31, 0x89, 0xc4, 0x2b, 0x28, 0x6c, 0x30, 0xb1, 0x04, 0xe2, 0x14, 0x4f, - 0x27, 0x0f, 0xfb, 0x73, 0x33, 0x0c, 0x70, 0x18, 0x26, 0x72, 0xba, 0xb1, 0xac, 0xf8, 0x1a, 0x1c, - 0x1b, 0x54, 0x68, 0x05, 0x50, 0xdc, 0x6e, 0xb5, 0x7c, 0x76, 0x43, 0xe7, 0xf8, 0x57, 0xa2, 0xb0, - 0xdd, 0xe2, 0x5e, 0xc5, 0x22, 0xa1, 0x7c, 0xbd, 0x03, 0x8b, 0xbb, 0x94, 0xa0, 0xc2, 0x62, 0x23, - 0x66, 0xbf, 0x45, 0x18, 0x32, 0xb7, 0xf2, 0xd5, 0x19, 0x08, 0x4b, 0x9c, 0xfd, 0x25, 0xb6, 0xc1, - 0xb1, 0xe7, 0x29, 0x92, 0x76, 0x44, 0x50, 0x13, 0xc6, 0x5b, 0x6c, 0x13, 0x4b, 0xa2, 0xd0, 0xf7, - 0x89, 0xd4, 0x2f, 0x0f, 0xe7, 0xd0, 0xc2, 0x13, 0xd2, 0xeb, 0xec, 0xb0, 0xc9, 0xdd, 0xfe, 0xe5, - 0x09, 0x26, 0xab, 0xc4, 0x25, 0xe9, 0xb0, 0x70, 0x5d, 0x15, 0x9a, 0xdc, 0x87, 0x8a, 0x3c, 0x34, - 0x95, 0xee, 0x03, 0xc2, 0x11, 0x16, 0x4b, 0x2e, 0xe8, 0x73, 0xcc, 0x31, 0x9b, 0x0b, 0x88, 0xe2, - 0xcf, 0xe7, 0x71, 0x7a, 0xc3, 0x29, 0x5b, 0xb0, 0xc0, 0x1a, 0x3b, 0x74, 0x1d, 0xc6, 0xc5, 0x6b, - 0x06, 0xc2, 0x4c, 0x51, 0x36, 0x8e, 0xd8, 0xe3, 0x58, 0x47, 0xee, 0x67, 0x01, 0xd8, 0x2c, 0x8c, - 0x36, 0xe1, 0x71, 0xed, 0xb5, 0x9e, 0x2e, 0xce, 0x57, 0x5c, 0xf2, 0x3c, 0xb1, 0xb7, 0x3b, 0xfb, - 0xf8, 0xda, 0x41, 0x84, 0xf8, 0x60, 0x3e, 0xe8, 0x16, 0x9c, 0x76, 0x1a, 0x89, 0xb7, 0x4d, 0xaa, - 0xc4, 0x71, 0x7d, 0x2f, 0x20, 0x66, 0xac, 0xfa, 0xa3, 0x7b, 0xbb, 0xb3, 0xa7, 0x17, 0xba, 0x11, - 0xe0, 0xee, 0xe5, 0xd0, 0x27, 0xa0, 0xe2, 0x06, 0xb1, 0x18, 0x83, 0x21, 0xe3, 0x71, 0xaa, 0x4a, - 0xf5, 0x66, 0x5d, 0xf5, 0x3f, 0xfd, 0x83, 0xd3, 0x02, 0xe8, 0x1d, 0xfe, 0xf8, 0xba, 0x3a, 0xcd, - 0xf0, 0x47, 0xd1, 0x5e, 0x2e, 0x74, 0x7e, 0x36, 0x22, 0x48, 0xb8, 0x05, 0x4f, 0x39, 0x39, 0x1a, - 0xc1, 0x25, 0x46, 0x15, 0xe8, 0xd3, 0x80, 0x62, 0x12, 0x6d, 0x7b, 0x0d, 0xb2, 0xd0, 0x60, 0xf9, - 0x41, 0x99, 0x8d, 0x67, 0xc4, 0xf0, 0xf6, 0x47, 0xf5, 0x0e, 0x0a, 0xdc, 0xa5, 0x14, 0xba, 0x4a, - 0x25, 0x8f, 0x0e, 0x15, 0x3e, 0xa9, 0x52, 0x31, 0x9c, 0xae, 0x92, 0x56, 0x44, 0x1a, 0x4e, 0x42, - 0x5c, 0x93, 0x23, 0xce, 0x94, 0xa3, 0xfb, 0x92, 0x4a, 0x01, 0x0f, 0xa6, 0x27, 0x65, 0x67, 0x1a, - 0x78, 0x7a, 0xce, 0xda, 0x0a, 0xe3, 0xe4, 0x26, 0x49, 0xee, 0x87, 0xd1, 0x3d, 0x66, 0xf9, 0x1f, - 0xd1, 0x92, 0xad, 0xa5, 0x28, 0xac, 0xd3, 0x51, 0x1d, 0x8a, 0x5d, 0x39, 0xad, 0x56, 0x99, 0x3d, - 0x7f, 0x24, 0x5d, 0x3b, 0x57, 0x39, 0x18, 0x4b, 0xbc, 0x24, 0x5d, 0xad, 0x2d, 0x31, 0xdb, 0x7c, - 0x86, 0x74, 0xb5, 0xb6, 0x84, 0x25, 0x1e, 0x85, 0x9d, 0x4f, 0x80, 0x4d, 0x14, 0xb9, 0x27, 0xe9, - 0x94, 0xe4, 0x05, 0x5f, 0x01, 0x7b, 0x00, 0x53, 0xea, 0x19, 0x32, 0x9e, 0x07, 0x33, 0x9e, 0x9e, - 0x2c, 0xf2, 0xf4, 0x7b, 0xd7, 0x74, 0x9a, 0xca, 0xae, 0xb7, 0x9a, 0xe1, 0x89, 0x3b, 0x6a, 0x31, - 0x72, 0x2e, 0x4c, 0xe5, 0xa6, 0xf5, 0x9f, 0x87, 0x4a, 0xdc, 0x5e, 0x77, 0xc3, 0xa6, 0xe3, 0x05, - 0xcc, 0x80, 0xae, 0x3f, 0x64, 0x2e, 0x11, 0x38, 0xa5, 0x41, 0x35, 0x18, 0x71, 0xe4, 0x1b, 0xfe, - 0xa8, 0x48, 0x4c, 0xb6, 0x7a, 0xbc, 0x9f, 0x59, 0x57, 0xd5, 0xab, 0xfd, 0x8a, 0x0b, 0x7a, 0x05, - 0xc6, 0x45, 0x48, 0x11, 0x89, 0x58, 0xab, 0x4f, 0x9a, 0xee, 0xe7, 0x75, 0x89, 0x64, 0x13, 0xcc, - 0xa4, 0x45, 0x9b, 0x30, 0x41, 0xb9, 0xa4, 0x02, 0x70, 0xfa, 0x54, 0x7f, 0x32, 0x54, 0x4b, 0xa0, - 0xac, 0xb3, 0xc1, 0x19, 0xb6, 0xc8, 0x85, 0xc7, 0x9c, 0x76, 0x12, 0x36, 0xe9, 0x4a, 0x30, 0xd7, - 0xc9, 0x5a, 0x78, 0x8f, 0x04, 0xd3, 0xa7, 0xd9, 0x0c, 0x3c, 0xb7, 0xb7, 0x3b, 0xfb, 0xd8, 0xc2, - 0x01, 0x74, 0xf8, 0x40, 0x2e, 0xe8, 0x4d, 0x18, 0x4d, 0x42, 0x5f, 0x78, 0xf4, 0xc6, 0xd3, 0x67, - 0x8a, 0x64, 0x82, 0x59, 0x53, 0x05, 0x74, 0x33, 0x86, 0x62, 0x82, 0x75, 0x8e, 0x33, 0x9f, 0x84, - 0x13, 0x1d, 0x22, 0xa9, 0x2f, 0xa7, 0xc7, 0xff, 0x38, 0x08, 0x15, 0x65, 0xd1, 0x43, 0xf3, 0xa6, - 0xf1, 0xf6, 0xd1, 0xac, 0xf1, 0x76, 0x84, 0x2a, 0x50, 0xba, 0xbd, 0xf6, 0xf3, 0x5d, 0x1e, 0x9e, - 0x7e, 0x36, 0x77, 0x0d, 0x16, 0x8f, 0x43, 0xea, 0xe3, 0x79, 0xee, 0xf4, 0x54, 0x37, 0x70, 0xe0, - 0xa9, 0xae, 0xe0, 0x63, 0x6a, 0xf4, 0xfc, 0xd6, 0x0a, 0xdd, 0xd5, 0x5a, 0xf6, 0xad, 0xa0, 0x1a, - 0x05, 0x62, 0x8e, 0x63, 0x7a, 0x37, 0xdd, 0x53, 0x99, 0xde, 0x3d, 0x7c, 0x48, 0xbd, 0x5b, 0x32, - 0xc0, 0x29, 0x2f, 0xb4, 0x0d, 0x27, 0x1a, 0xe6, 0xd3, 0x4f, 0x2a, 0xba, 0xe8, 0xf9, 0x3e, 0x9e, - 0x5e, 0x6a, 0x6b, 0x6f, 0x4e, 0x2c, 0x65, 0xf9, 0xe1, 0xce, 0x2a, 0xd0, 0x2b, 0x30, 0xf2, 0x4e, - 0x18, 0xb3, 0x6b, 0x05, 0xb1, 0xb1, 0xc8, 0x28, 0x8e, 0x91, 0xd7, 0x6e, 0xd5, 0x19, 0x7c, 0x7f, - 0x77, 0x76, 0xb4, 0x16, 0xba, 0xf2, 0x2f, 0x56, 0x05, 0xd0, 0x97, 0x2d, 0x38, 0x6d, 0xac, 0x33, - 0xd5, 0x72, 0x38, 0x4c, 0xcb, 0x1f, 0x17, 0x35, 0x9f, 0x5e, 0xed, 0xc6, 0x13, 0x77, 0xaf, 0xca, - 0xfe, 0x5d, 0x6e, 0xc2, 0x14, 0x46, 0x0d, 0x12, 0xb7, 0xfd, 0xe3, 0xc8, 0xff, 0x7e, 0xcb, 0xb0, - 0xb7, 0x3c, 0x04, 0x23, 0xfa, 0xbf, 0xb7, 0x98, 0x11, 0x7d, 0x8d, 0x34, 0x5b, 0xbe, 0x93, 0x1c, - 0x87, 0x4f, 0xec, 0xe7, 0x60, 0x24, 0x11, 0xb5, 0x15, 0x4b, 0x5e, 0xaf, 0x35, 0x8f, 0x5d, 0x2e, - 0xa8, 0x8d, 0x49, 0x42, 0xb1, 0x62, 0x68, 0xff, 0x6b, 0xfe, 0x55, 0x24, 0xe6, 0x18, 0x2c, 0x05, - 0x37, 0x4d, 0x4b, 0xc1, 0x33, 0x85, 0xfb, 0xd2, 0xc3, 0x62, 0xf0, 0x03, 0xb3, 0x07, 0xec, 0xfc, - 0xf0, 0xb3, 0x73, 0xcb, 0x63, 0xdf, 0x02, 0xf3, 0x9d, 0x2e, 0xf4, 0x2a, 0xf7, 0x32, 0xe7, 0x92, - 0xfe, 0x42, 0xdf, 0x1e, 0xe6, 0xf6, 0x6f, 0x96, 0xe0, 0x14, 0xb7, 0xf3, 0x2e, 0x6c, 0x87, 0x9e, - 0x5b, 0x0b, 0x5d, 0xe1, 0x73, 0xef, 0xc2, 0x58, 0x4b, 0x3b, 0xdf, 0x15, 0xcb, 0x51, 0xa2, 0x9f, - 0x08, 0x53, 0x9d, 0x5a, 0x87, 0x62, 0x83, 0x2b, 0xad, 0x85, 0x6c, 0x7b, 0x0d, 0x65, 0x36, 0x2c, - 0xf5, 0x2d, 0x7c, 0x55, 0x2d, 0xcb, 0x1a, 0x1f, 0x6c, 0x70, 0x3d, 0x82, 0x77, 0x16, 0xec, 0xbf, - 0x67, 0xc1, 0x23, 0x3d, 0xf2, 0x98, 0xd0, 0xea, 0xee, 0x33, 0xdb, 0xba, 0x78, 0x08, 0x4e, 0x55, - 0xc7, 0x2d, 0xee, 0x58, 0x60, 0xd1, 0x3a, 0x00, 0xb7, 0x98, 0xb3, 0x67, 0xc1, 0x4b, 0x45, 0x1c, - 0x65, 0x3a, 0xb2, 0x05, 0x68, 0x81, 0xe4, 0xea, 0x21, 0x70, 0x8d, 0xab, 0xfd, 0xed, 0x32, 0x0c, - 0xf2, 0xf7, 0x86, 0x6b, 0x30, 0xbc, 0xc5, 0xf3, 0xaa, 0xf6, 0x97, 0xd6, 0x35, 0xd5, 0xdf, 0x39, - 0x00, 0x4b, 0x36, 0xe8, 0x06, 0x9c, 0xa4, 0xc2, 0xdb, 0x73, 0xfc, 0x2a, 0xf1, 0x9d, 0x1d, 0x79, - 0x20, 0xe4, 0xc9, 0xf7, 0x65, 0x96, 0xe8, 0x93, 0xab, 0x9d, 0x24, 0xb8, 0x5b, 0x39, 0xf4, 0x6a, - 0x47, 0x1a, 0x34, 0x9e, 0xaf, 0x56, 0x29, 0x83, 0x07, 0xa7, 0x42, 0xa3, 0x2a, 0x6b, 0xab, 0xe3, - 0xe8, 0xab, 0x3d, 0xeb, 0x6a, 0x1e, 0x77, 0x4d, 0x5a, 0x76, 0x7d, 0xdf, 0x66, 0x6e, 0x0b, 0x6b, - 0x5b, 0x11, 0x89, 0xb7, 0x42, 0xdf, 0x15, 0x2f, 0x12, 0xa6, 0xd7, 0xf7, 0x19, 0x3c, 0xee, 0x28, - 0x41, 0xb9, 0x6c, 0x38, 0x9e, 0xdf, 0x8e, 0x48, 0xca, 0x65, 0xc8, 0xe4, 0xb2, 0x92, 0xc1, 0xe3, - 0x8e, 0x12, 0x74, 0x6e, 0x9d, 0x16, 0x0f, 0xe4, 0xc9, 0xa8, 0x5d, 0x71, 0xc3, 0xfd, 0x19, 0x18, - 0x96, 0xbe, 0xdb, 0x85, 0x92, 0x4b, 0x88, 0xbb, 0x79, 0xf5, 0xd8, 0x9e, 0xf6, 0x18, 0x93, 0xf0, - 0xda, 0x96, 0xfc, 0x0e, 0xf3, 0x10, 0xdb, 0x9f, 0x5a, 0x70, 0xb2, 0x8b, 0x0f, 0x12, 0xf7, 0x8c, - 0xdd, 0xf4, 0xe2, 0x44, 0xa5, 0x82, 0xd7, 0x3c, 0x63, 0x39, 0x1c, 0x2b, 0x0a, 0xba, 0x5a, 0xb8, - 0xdd, 0x25, 0x7b, 0x27, 0x2f, 0xbc, 0x2c, 0x04, 0xb6, 0xbf, 0xe4, 0x6b, 0xe8, 0x1c, 0x0c, 0xb4, - 0x63, 0x12, 0xc9, 0x57, 0xd1, 0xa4, 0x28, 0x65, 0xa6, 0x36, 0x86, 0xa1, 0x9a, 0xe1, 0xa6, 0xb2, - 0x72, 0x69, 0x9a, 0x21, 0xb7, 0x73, 0x71, 0x9c, 0xfd, 0x8d, 0x32, 0x4c, 0x66, 0x7c, 0x11, 0x69, - 0x43, 0x9a, 0x61, 0xe0, 0x25, 0xa1, 0x4a, 0xf8, 0xc5, 0x1f, 0x62, 0x22, 0xad, 0xad, 0x1b, 0x02, - 0x8e, 0x15, 0x05, 0x7a, 0xda, 0x7c, 0xa4, 0x3e, 0x6d, 0xf3, 0x62, 0xd5, 0x78, 0xaf, 0xb2, 0xe8, - 0xf3, 0x14, 0x4f, 0xc2, 0x40, 0x2b, 0x54, 0x6f, 0x0f, 0xab, 0xef, 0x89, 0x17, 0xab, 0xb5, 0x30, - 0xf4, 0x31, 0x43, 0xa2, 0xa7, 0x44, 0xef, 0x33, 0x97, 0x03, 0xd8, 0x71, 0xc3, 0x58, 0x1b, 0x82, - 0x67, 0x60, 0xf8, 0x1e, 0xd9, 0x89, 0xbc, 0x60, 0x33, 0x7b, 0x35, 0x72, 0x8d, 0x83, 0xb1, 0xc4, - 0x9b, 0x4f, 0x50, 0x0c, 0x1f, 0xf1, 0x13, 0x14, 0x23, 0xb9, 0xee, 0xd4, 0xdf, 0xb5, 0x60, 0x92, - 0x65, 0xc1, 0x14, 0x31, 0xe3, 0x5e, 0x18, 0x1c, 0xc3, 0x36, 0xfe, 0x24, 0x0c, 0x46, 0xb4, 0xd2, - 0x6c, 0x0e, 0x79, 0xd6, 0x12, 0xcc, 0x71, 0xe8, 0x31, 0x18, 0x60, 0x4d, 0xa0, 0x9f, 0x71, 0x8c, - 0x27, 0xdb, 0xae, 0x3a, 0x89, 0x83, 0x19, 0x94, 0x85, 0xff, 0x60, 0xd2, 0xf2, 0x3d, 0xde, 0xe8, - 0xd4, 0xa2, 0xf9, 0x7e, 0x0b, 0xff, 0xe9, 0xda, 0xc8, 0x87, 0x15, 0xfe, 0xd3, 0x9d, 0xf9, 0xc1, - 0xaa, 0xf4, 0x7f, 0x2f, 0xc1, 0xd9, 0xae, 0xe5, 0xd2, 0x4b, 0xd6, 0x15, 0xe3, 0x92, 0xf5, 0x52, - 0xe6, 0x92, 0xd5, 0x3e, 0xb8, 0xf4, 0xc3, 0xb9, 0x76, 0xed, 0x7e, 0x1b, 0x5a, 0x3e, 0xc6, 0xdb, - 0xd0, 0x81, 0xa2, 0x2a, 0xce, 0x60, 0x8e, 0x8a, 0xf3, 0x87, 0x16, 0x3c, 0xda, 0x75, 0xc8, 0xde, - 0x77, 0xf1, 0x56, 0x5d, 0x5b, 0xd9, 0xe3, 0x00, 0xf0, 0xab, 0xe5, 0x1e, 0xbd, 0x62, 0x47, 0x81, - 0xf3, 0x54, 0x0a, 0x31, 0x64, 0x2c, 0x94, 0xb7, 0x31, 0x2e, 0x81, 0x38, 0x0c, 0x2b, 0x2c, 0x8a, - 0xb5, 0x78, 0x25, 0xde, 0xc8, 0xe5, 0x43, 0x2e, 0xa8, 0x39, 0xd3, 0x14, 0xad, 0x07, 0xc2, 0x67, - 0xa3, 0x98, 0xee, 0x6a, 0x87, 0xbb, 0xf2, 0x61, 0x0e, 0x77, 0x63, 0xdd, 0x0f, 0x76, 0x68, 0x01, - 0x26, 0x9b, 0x5e, 0xc0, 0x5e, 0xae, 0x34, 0xb5, 0x27, 0x15, 0x34, 0x7a, 0xc3, 0x44, 0xe3, 0x2c, - 0xfd, 0xcc, 0x2b, 0x30, 0x7e, 0x78, 0x03, 0xd6, 0xbb, 0x65, 0xf8, 0xe0, 0x01, 0x42, 0x81, 0xef, - 0x0e, 0xc6, 0x77, 0xd1, 0x76, 0x87, 0x8e, 0x6f, 0x53, 0x83, 0x53, 0x1b, 0x6d, 0xdf, 0xdf, 0x61, - 0x2e, 0x4a, 0xc4, 0x95, 0x14, 0x42, 0xa9, 0x51, 0xcf, 0x58, 0xaf, 0x74, 0xa1, 0xc1, 0x5d, 0x4b, - 0xa2, 0x4f, 0x03, 0x0a, 0xd7, 0x59, 0x9e, 0x58, 0x37, 0x0d, 0xf4, 0x67, 0x9f, 0xa0, 0x9c, 0x2e, - 0xd5, 0x5b, 0x1d, 0x14, 0xb8, 0x4b, 0x29, 0xaa, 0xa7, 0xb2, 0x17, 0xb0, 0x55, 0xb3, 0x32, 0x7a, - 0x2a, 0xd6, 0x91, 0xd8, 0xa4, 0x45, 0x57, 0xe0, 0x84, 0xb3, 0xed, 0x78, 0x3c, 0xef, 0x93, 0x64, - 0xc0, 0x15, 0x55, 0x65, 0x22, 0x5a, 0xc8, 0x12, 0xe0, 0xce, 0x32, 0xa8, 0x65, 0xd8, 0xfc, 0x78, - 0x86, 0xf8, 0x4f, 0x1c, 0x62, 0x06, 0x17, 0xb6, 0x02, 0xda, 0xff, 0xcd, 0xa2, 0x5b, 0x5f, 0x97, - 0x47, 0x0e, 0xe9, 0x88, 0x28, 0x1b, 0x96, 0x16, 0x7f, 0xa5, 0x46, 0x64, 0x49, 0x47, 0x62, 0x93, - 0x96, 0x4f, 0x8d, 0x38, 0xf5, 0x98, 0x36, 0xb4, 0x4d, 0x11, 0xba, 0xa8, 0x28, 0xa8, 0x06, 0xed, - 0x7a, 0xdb, 0x5e, 0x1c, 0x46, 0x62, 0x01, 0xf5, 0xe9, 0x3f, 0x9b, 0xca, 0xcb, 0x2a, 0x67, 0x83, - 0x25, 0x3f, 0xfb, 0x9b, 0x25, 0x18, 0x97, 0x35, 0xbe, 0xd6, 0x0e, 0x13, 0xe7, 0x18, 0xb6, 0xf4, - 0xd7, 0x8c, 0x2d, 0x7d, 0xbe, 0x58, 0x24, 0x27, 0x6b, 0x5c, 0xcf, 0xad, 0xfc, 0x33, 0x99, 0xad, - 0xfc, 0x62, 0x3f, 0x4c, 0x0f, 0xde, 0xc2, 0xff, 0xad, 0x05, 0x27, 0x0c, 0xfa, 0x63, 0xd8, 0x49, - 0x6a, 0xe6, 0x4e, 0xf2, 0x5c, 0x1f, 0xbd, 0xe9, 0xb1, 0x83, 0x7c, 0xa7, 0x94, 0xe9, 0x05, 0xdb, - 0x39, 0xbe, 0x08, 0x03, 0x5b, 0x4e, 0xe4, 0x16, 0x4b, 0x82, 0xd8, 0x51, 0x7c, 0xee, 0xaa, 0x13, - 0xb9, 0x5c, 0xfe, 0x5f, 0x50, 0x4f, 0x30, 0x39, 0x91, 0x9b, 0x1b, 0x48, 0xc0, 0x2a, 0x45, 0x97, - 0x61, 0x28, 0x6e, 0x84, 0x2d, 0xe5, 0x6a, 0x79, 0x8e, 0x3f, 0xcf, 0x44, 0x21, 0xfb, 0xbb, 0xb3, - 0xc8, 0xac, 0x8e, 0x82, 0xb1, 0xa0, 0x9f, 0xd9, 0x84, 0x8a, 0xaa, 0xfa, 0x48, 0x9d, 0xcd, 0xff, - 0xac, 0x0c, 0x27, 0xbb, 0xcc, 0x15, 0xf4, 0x25, 0x63, 0xdc, 0x5e, 0xe9, 0x7b, 0xb2, 0xbd, 0xc7, - 0x91, 0xfb, 0x12, 0x3b, 0x29, 0xb9, 0x62, 0x76, 0x1c, 0xa2, 0xfa, 0xdb, 0x31, 0xc9, 0x56, 0x4f, - 0x41, 0xf9, 0xd5, 0xd3, 0x6a, 0x8f, 0x6d, 0xf8, 0x69, 0x45, 0xaa, 0xa5, 0x47, 0xfa, 0x9d, 0xff, - 0xca, 0x00, 0x9c, 0xea, 0x16, 0x32, 0x8e, 0xbe, 0x6a, 0x65, 0x5e, 0x3a, 0x78, 0xb5, 0xff, 0xb8, - 0x73, 0xfe, 0xfc, 0x81, 0x48, 0xb3, 0x32, 0x67, 0xbe, 0x7d, 0x90, 0x3b, 0xe2, 0xa2, 0x76, 0x16, - 0x02, 0x14, 0xf1, 0x57, 0x2b, 0xa4, 0x54, 0xf8, 0xd4, 0x21, 0x9a, 0x22, 0x1e, 0xbe, 0x88, 0x33, - 0x21, 0x40, 0x12, 0x9c, 0x1f, 0x02, 0x24, 0xdb, 0x30, 0xe3, 0xc1, 0xa8, 0xd6, 0xaf, 0x23, 0x9d, - 0x06, 0xf7, 0xe8, 0x16, 0xa5, 0xb5, 0xfb, 0x48, 0xa7, 0xc2, 0xdf, 0xb1, 0x20, 0xe3, 0x17, 0xa5, - 0xcc, 0x32, 0x56, 0x4f, 0xb3, 0xcc, 0x39, 0x18, 0x88, 0x42, 0x9f, 0x64, 0xb3, 0xf0, 0xe3, 0xd0, - 0x27, 0x98, 0x61, 0xd4, 0xab, 0xac, 0xe5, 0x5e, 0xaf, 0xb2, 0xd2, 0x73, 0xba, 0x4f, 0xb6, 0x89, - 0x34, 0x92, 0x28, 0x31, 0x7e, 0x9d, 0x02, 0x31, 0xc7, 0xd9, 0x7f, 0x50, 0x86, 0x21, 0x6e, 0x89, - 0x38, 0x86, 0x7d, 0xba, 0x26, 0x8c, 0x02, 0x85, 0xc2, 0xb0, 0x79, 0xab, 0xe6, 0xaa, 0x4e, 0xe2, - 0xf0, 0xc9, 0xa5, 0xfa, 0x98, 0x1a, 0x12, 0xd0, 0x9c, 0x31, 0x0a, 0x33, 0x99, 0xb3, 0x2e, 0x70, - 0x1e, 0xda, 0x98, 0x6c, 0x01, 0xc4, 0xec, 0x15, 0x40, 0xca, 0x43, 0x24, 0x9b, 0x7c, 0xb1, 0x50, - 0x3b, 0xea, 0xaa, 0x18, 0x6f, 0x4d, 0x9a, 0xe1, 0x4e, 0x21, 0xb0, 0xc6, 0x7b, 0xe6, 0x65, 0xa8, - 0x28, 0xe2, 0xbc, 0x43, 0xc0, 0x98, 0x3e, 0x39, 0xff, 0x3f, 0x98, 0xcc, 0xd4, 0xd5, 0xd7, 0x19, - 0xe2, 0x77, 0x2c, 0x98, 0xcc, 0x3c, 0x60, 0x8e, 0xbe, 0x62, 0xc1, 0x29, 0xbf, 0x8b, 0x21, 0x4a, - 0x7c, 0xe6, 0xc3, 0x98, 0xb0, 0xd4, 0xf1, 0xa1, 0x1b, 0x16, 0x77, 0xad, 0x8d, 0x1e, 0x2b, 0xf9, - 0xa3, 0xa6, 0x8e, 0x2f, 0xdc, 0x4c, 0xc7, 0x78, 0x9a, 0x5d, 0x0e, 0xc3, 0x0a, 0x6b, 0xff, 0xc4, - 0x82, 0x13, 0x1d, 0x6f, 0x64, 0xbf, 0x5f, 0xba, 0x21, 0x12, 0x0a, 0x97, 0x7a, 0x24, 0x14, 0xd6, - 0x7b, 0x59, 0x3e, 0xb0, 0x97, 0xbf, 0x69, 0x81, 0x98, 0xa1, 0xc7, 0xa0, 0x01, 0xae, 0x9a, 0x1a, - 0xe0, 0x87, 0x8a, 0x4c, 0xfa, 0x1e, 0xaa, 0xdf, 0xaf, 0x94, 0x60, 0x8a, 0x13, 0xa4, 0x36, 0xf5, - 0xf7, 0xcb, 0xc7, 0xe9, 0xef, 0xa1, 0x0b, 0xf5, 0xba, 0x60, 0xf7, 0x9e, 0x1a, 0xdf, 0x72, 0xe0, - 0xc0, 0x6f, 0xf9, 0x17, 0x16, 0x20, 0x3e, 0x26, 0xd9, 0x17, 0x61, 0xb9, 0x71, 0x57, 0x3b, 0xd0, - 0xa5, 0x92, 0x43, 0x61, 0xb0, 0x46, 0xf5, 0x90, 0xbb, 0x90, 0xb9, 0xd1, 0x28, 0xe7, 0xdf, 0x68, - 0xf4, 0xd1, 0xeb, 0xdf, 0x2d, 0x43, 0xd6, 0xdf, 0x0c, 0xbd, 0x05, 0x63, 0x0d, 0xa7, 0xe5, 0xac, - 0x7b, 0xbe, 0x97, 0x78, 0x24, 0x2e, 0x76, 0x65, 0xba, 0xa4, 0x95, 0x10, 0x17, 0x09, 0x1a, 0x04, - 0x1b, 0x1c, 0xd1, 0x1c, 0x40, 0x2b, 0xf2, 0xb6, 0x3d, 0x9f, 0x6c, 0x32, 0x9d, 0x95, 0x39, 0xac, - 0xf3, 0xdb, 0x3f, 0x09, 0xc5, 0x1a, 0x45, 0x17, 0x07, 0xe7, 0xf2, 0x71, 0x38, 0x38, 0x0f, 0xf4, - 0xe9, 0xe0, 0x3c, 0x58, 0xc8, 0xc1, 0x19, 0xc3, 0x19, 0x69, 0xff, 0xa7, 0xff, 0x57, 0x3c, 0x9f, - 0xf0, 0xbc, 0xaa, 0xc2, 0xa1, 0x7d, 0x66, 0x6f, 0x77, 0xf6, 0x0c, 0xee, 0x4a, 0x81, 0x7b, 0x94, - 0xb4, 0xdb, 0x70, 0xb2, 0x4e, 0x22, 0x8f, 0xa5, 0xbb, 0x73, 0xd3, 0xb5, 0xf4, 0x79, 0xa8, 0x44, - 0x99, 0x65, 0xdc, 0x67, 0xd4, 0xb2, 0x96, 0x20, 0x49, 0x2e, 0xdb, 0x94, 0xa5, 0xfd, 0xd7, 0x4a, - 0x30, 0x2c, 0x3c, 0xcd, 0x8e, 0x41, 0xf9, 0xb8, 0x66, 0x18, 0x09, 0x9e, 0xc9, 0x93, 0x7f, 0xac, - 0x59, 0x3d, 0xcd, 0x03, 0xf5, 0x8c, 0x79, 0xe0, 0xb9, 0x62, 0xec, 0x0e, 0x36, 0x0c, 0xfc, 0xe3, - 0x32, 0x4c, 0x98, 0x9e, 0x77, 0xc7, 0x30, 0x2c, 0xaf, 0xc3, 0x70, 0x2c, 0x9c, 0x40, 0x4b, 0x45, - 0x1c, 0x9b, 0xb2, 0x9f, 0x38, 0xbd, 0x4b, 0x15, 0x6e, 0x9f, 0x92, 0x5d, 0x57, 0x3f, 0xd3, 0xf2, - 0xb1, 0xf8, 0x99, 0xe6, 0x39, 0x44, 0x0e, 0x3c, 0x0c, 0x87, 0x48, 0xfb, 0x87, 0x4c, 0xe4, 0xeb, - 0xf0, 0x63, 0xd8, 0xc6, 0x5f, 0x33, 0x37, 0x87, 0x0b, 0x85, 0xe6, 0x9d, 0x68, 0x5e, 0x8f, 0xed, - 0xfc, 0x7b, 0x16, 0x8c, 0x0a, 0xc2, 0x63, 0xe8, 0xc0, 0xa7, 0xcd, 0x0e, 0x3c, 0x55, 0xa8, 0x03, - 0x3d, 0x5a, 0xfe, 0xcd, 0x92, 0x6a, 0x79, 0x4d, 0xbc, 0xe2, 0x9d, 0x9b, 0xdc, 0x77, 0xa4, 0x15, - 0x85, 0x49, 0xd8, 0x08, 0x7d, 0xa1, 0xc0, 0x3d, 0x96, 0xc6, 0x2f, 0x71, 0xf8, 0xbe, 0xf6, 0x1b, - 0x2b, 0x6a, 0x16, 0x5e, 0x13, 0x46, 0x89, 0xd8, 0x40, 0xbb, 0xbd, 0x21, 0xee, 0x02, 0xa4, 0x0f, - 0x37, 0x8b, 0xd0, 0xbf, 0xfe, 0x5f, 0x27, 0x4f, 0x03, 0x92, 0x14, 0x2f, 0xac, 0xf1, 0x95, 0x9e, - 0xee, 0xac, 0x8e, 0x41, 0xf3, 0x0e, 0xe0, 0xa6, 0x80, 0x63, 0x45, 0x61, 0xbf, 0xcc, 0x24, 0x3b, - 0x1b, 0xa0, 0xfe, 0x62, 0x85, 0x7e, 0x79, 0x48, 0x0d, 0x2d, 0x33, 0xec, 0xdd, 0xd4, 0x23, 0x92, - 0x8a, 0x8a, 0x4f, 0xda, 0x04, 0xdd, 0xd9, 0x34, 0x0d, 0x60, 0x42, 0xa4, 0xe3, 0xe2, 0xe8, 0xe5, - 0xc2, 0x12, 0xb9, 0x8f, 0xab, 0x22, 0x96, 0xcf, 0x8c, 0x25, 0x71, 0x5a, 0xad, 0x65, 0x53, 0x32, - 0x2f, 0x49, 0x04, 0x4e, 0x69, 0xd0, 0xbc, 0x38, 0x50, 0x9a, 0x8f, 0xbc, 0xcb, 0x03, 0xa5, 0x1c, - 0x12, 0xed, 0x44, 0x79, 0x11, 0x46, 0xd5, 0x2b, 0x17, 0x35, 0xfe, 0xbe, 0x40, 0x85, 0xeb, 0x57, - 0xcb, 0x29, 0x18, 0xeb, 0x34, 0x68, 0x15, 0x4e, 0xba, 0x2a, 0xb0, 0xa1, 0xd6, 0x5e, 0xf7, 0xbd, - 0x06, 0x2d, 0xca, 0x83, 0x12, 0x1f, 0xd9, 0xdb, 0x9d, 0x3d, 0x59, 0xed, 0x44, 0xe3, 0x6e, 0x65, - 0xd0, 0x1a, 0x4c, 0xc6, 0xfc, 0x35, 0x0f, 0xe9, 0xbd, 0x2e, 0x32, 0x95, 0x3e, 0x2b, 0x6f, 0xac, - 0xea, 0x26, 0x7a, 0x9f, 0x81, 0xb8, 0x54, 0x90, 0xfe, 0xee, 0x59, 0x16, 0xe8, 0x55, 0x98, 0xf0, - 0xf5, 0xa7, 0x0a, 0x6b, 0x22, 0xbe, 0x43, 0xf9, 0x20, 0x19, 0x0f, 0x19, 0xd6, 0x70, 0x86, 0x1a, - 0xbd, 0x0e, 0xd3, 0x3a, 0x44, 0x24, 0x5b, 0x71, 0x82, 0x4d, 0x12, 0x8b, 0xcc, 0xff, 0x8f, 0xed, - 0xed, 0xce, 0x4e, 0x5f, 0xef, 0x41, 0x83, 0x7b, 0x96, 0x46, 0x97, 0x61, 0x4c, 0x8e, 0xa4, 0x16, - 0xeb, 0x91, 0x7a, 0xbf, 0x69, 0x38, 0x6c, 0x50, 0xbe, 0xb7, 0x8b, 0xb9, 0x2f, 0xd2, 0xc2, 0xda, - 0x16, 0x8e, 0xde, 0x86, 0x31, 0xbd, 0x8d, 0xd9, 0xbd, 0x39, 0xff, 0xf9, 0x47, 0xa1, 0x0a, 0xa8, - 0x96, 0xeb, 0x38, 0x6c, 0xf0, 0xb6, 0x6f, 0xc1, 0x50, 0x7d, 0x27, 0x6e, 0x24, 0xfe, 0xc3, 0x7a, - 0xdf, 0x9f, 0xc0, 0x64, 0xe6, 0x21, 0x7c, 0x84, 0x85, 0x74, 0xb3, 0x0e, 0x29, 0xb5, 0xba, 0xc8, - 0x43, 0xfb, 0x4f, 0x2c, 0x18, 0x64, 0xcf, 0xa8, 0xe4, 0x3d, 0xc1, 0x53, 0xa4, 0xd1, 0xe8, 0x25, - 0x18, 0x22, 0x1b, 0x1b, 0xa4, 0x91, 0x88, 0x65, 0x2c, 0x1d, 0xaa, 0x87, 0x96, 0x19, 0x94, 0x2e, - 0x4e, 0x56, 0x19, 0xff, 0x8b, 0x05, 0x31, 0xfa, 0x1c, 0x54, 0x12, 0xaf, 0x49, 0x16, 0x5c, 0x97, - 0xb8, 0x87, 0x08, 0xc7, 0x56, 0xc2, 0x62, 0x4d, 0x32, 0xc1, 0x29, 0x3f, 0xfb, 0xeb, 0x25, 0x80, - 0x34, 0x9c, 0x21, 0xaf, 0x9b, 0x8b, 0x1d, 0x2f, 0x0d, 0x3d, 0xdd, 0xe5, 0xa5, 0x21, 0x94, 0x32, - 0xec, 0xf2, 0xce, 0x90, 0x1a, 0xaa, 0x72, 0xa1, 0xa1, 0x1a, 0xe8, 0x67, 0xa8, 0x96, 0xe0, 0x44, - 0x1a, 0x8e, 0x61, 0xc6, 0xb5, 0xb1, 0xbc, 0x83, 0x6b, 0x59, 0x24, 0xee, 0xa4, 0xb7, 0xbf, 0x6e, - 0x81, 0x70, 0x59, 0x2b, 0x30, 0x5b, 0x5d, 0xf9, 0x2a, 0x88, 0x91, 0xea, 0xe9, 0xd9, 0x22, 0xde, - 0x7c, 0x22, 0xc1, 0x93, 0x5a, 0x3f, 0x46, 0x5a, 0x27, 0x83, 0xab, 0xfd, 0x5b, 0x16, 0x8c, 0x72, - 0xf4, 0x0d, 0xa6, 0x53, 0xe7, 0xb7, 0xab, 0xaf, 0xa4, 0x96, 0xec, 0xc1, 0x0c, 0xca, 0x58, 0x25, - 0x37, 0xd4, 0x1f, 0xcc, 0x90, 0x08, 0x9c, 0xd2, 0xa0, 0x67, 0x60, 0x38, 0x6e, 0xaf, 0x33, 0xf2, - 0x8c, 0xff, 0x5a, 0x9d, 0x83, 0xb1, 0xc4, 0xdb, 0xff, 0xb4, 0x04, 0x53, 0x59, 0xf7, 0x45, 0x84, - 0x61, 0x88, 0xeb, 0xd8, 0x59, 0xf5, 0xec, 0x20, 0x5b, 0x8e, 0xe6, 0xfe, 0x08, 0xfc, 0xd9, 0x57, - 0xe6, 0x73, 0x26, 0x38, 0xa1, 0x0d, 0x18, 0x75, 0xc3, 0xfb, 0xc1, 0x7d, 0x27, 0x72, 0x17, 0x6a, - 0xab, 0xe2, 0x4b, 0xe4, 0x38, 0x9c, 0x54, 0xd3, 0x02, 0xba, 0x73, 0x25, 0xb3, 0x2d, 0xa4, 0x28, - 0xac, 0x33, 0xa6, 0x67, 0xca, 0x46, 0x18, 0x6c, 0x78, 0x9b, 0x37, 0x9c, 0x56, 0xb1, 0xab, 0xd5, - 0x25, 0x49, 0xae, 0xd5, 0x31, 0x2e, 0x02, 0xd9, 0x39, 0x02, 0xa7, 0x2c, 0xed, 0x3f, 0x43, 0x60, - 0xcc, 0x05, 0x23, 0xf3, 0xa4, 0xf5, 0xd0, 0x33, 0x4f, 0xbe, 0x01, 0x23, 0xa4, 0xd9, 0x4a, 0x76, - 0xaa, 0x5e, 0x54, 0x2c, 0x8f, 0xf0, 0xb2, 0xa0, 0xee, 0xe4, 0x2e, 0x31, 0x58, 0x71, 0xec, 0x91, - 0x47, 0xb4, 0xfc, 0xbe, 0xc8, 0x23, 0x3a, 0xf0, 0x53, 0xc9, 0x23, 0xfa, 0x3a, 0x0c, 0x6f, 0x7a, - 0x09, 0x26, 0xad, 0x50, 0x64, 0x06, 0xc8, 0x99, 0x3c, 0x57, 0x38, 0x71, 0x67, 0x72, 0x40, 0x81, - 0xc0, 0x92, 0x1d, 0x5a, 0x53, 0x8b, 0x6a, 0xa8, 0xc8, 0x5e, 0xde, 0x69, 0xeb, 0xeb, 0xba, 0xac, - 0x44, 0xde, 0xd0, 0xe1, 0xf7, 0x9e, 0x37, 0x54, 0x65, 0xfb, 0x1c, 0x79, 0x58, 0xd9, 0x3e, 0x8d, - 0xac, 0xa9, 0x95, 0xa3, 0xc8, 0x9a, 0xfa, 0x75, 0x0b, 0x4e, 0xb7, 0xba, 0xe5, 0x1c, 0x16, 0x79, - 0x3b, 0x3f, 0x79, 0x88, 0x2c, 0xcc, 0x46, 0xd5, 0x2c, 0xde, 0xba, 0x2b, 0x19, 0xee, 0x5e, 0xb1, - 0x4c, 0xbf, 0x3a, 0xfa, 0xde, 0xd3, 0xaf, 0x1e, 0x75, 0x82, 0xcf, 0x34, 0x19, 0xeb, 0xf8, 0x91, - 0x24, 0x63, 0x9d, 0x78, 0x88, 0xc9, 0x58, 0xb5, 0x34, 0xaa, 0x93, 0x0f, 0x37, 0x8d, 0xea, 0x96, - 0xb9, 0x2f, 0xf1, 0xac, 0x9d, 0x2f, 0x15, 0xde, 0x97, 0x8c, 0x1a, 0x0e, 0xde, 0x99, 0x78, 0x42, - 0xd9, 0x13, 0xef, 0x31, 0xa1, 0xac, 0x91, 0x96, 0x15, 0x1d, 0x45, 0x5a, 0xd6, 0xb7, 0xf4, 0x1d, - 0xf4, 0x64, 0x91, 0x1a, 0xd4, 0x46, 0xd9, 0x59, 0x43, 0xb7, 0x3d, 0xb4, 0x33, 0xf1, 0xeb, 0xa9, - 0xe3, 0x4e, 0xfc, 0x7a, 0xfa, 0x08, 0x13, 0xbf, 0x9e, 0x39, 0xd6, 0xc4, 0xaf, 0x8f, 0xfc, 0x34, - 0x12, 0xbf, 0xd2, 0x0e, 0xb7, 0x64, 0xe8, 0xcc, 0xf4, 0x74, 0x91, 0x0e, 0x77, 0x8d, 0xb4, 0xe1, - 0x1d, 0x56, 0x28, 0x9c, 0x32, 0xb5, 0xff, 0x12, 0x9c, 0x3d, 0xf8, 0x83, 0xa7, 0xcf, 0x1f, 0xd4, - 0x52, 0x4b, 0x53, 0xe6, 0xf9, 0x03, 0xa6, 0x4c, 0x69, 0x54, 0x85, 0x33, 0x53, 0x7e, 0xc7, 0x82, - 0x47, 0x7a, 0x24, 0x6e, 0x2b, 0x1c, 0x77, 0xd6, 0x82, 0xc9, 0x96, 0x59, 0xb4, 0x70, 0xa4, 0xa8, - 0x91, 0x28, 0x4e, 0xf9, 0x06, 0x67, 0x10, 0x38, 0xcb, 0x7e, 0xf1, 0x43, 0x3f, 0x7a, 0xf7, 0xec, - 0x07, 0x7e, 0xfc, 0xee, 0xd9, 0x0f, 0xfc, 0xf1, 0xbb, 0x67, 0x3f, 0xf0, 0x0b, 0x7b, 0x67, 0xad, - 0x1f, 0xed, 0x9d, 0xb5, 0x7e, 0xbc, 0x77, 0xd6, 0xfa, 0xd3, 0xbd, 0xb3, 0xd6, 0xd7, 0x7f, 0x72, - 0xf6, 0x03, 0x9f, 0x2d, 0x6d, 0x5f, 0xfc, 0xbf, 0x01, 0x00, 0x00, 0xff, 0xff, 0x3f, 0x21, 0x74, - 0x7f, 0xf3, 0xc3, 0x00, 0x00, + // 10780 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xec, 0x7d, 0x6d, 0x70, 0x24, 0xc7, + 0x75, 0x98, 0x66, 0x17, 0x5f, 0xfb, 0xf0, 0x79, 0x7d, 0xb8, 0x23, 0x08, 0x91, 0x87, 0xe3, 0x50, + 0xa4, 0x8e, 0xe4, 0x11, 0x10, 0x8f, 0xa4, 0x78, 0x12, 0x15, 0x4a, 0x00, 0x16, 0xb8, 0x83, 0xee, + 0x6b, 0xd9, 0x8b, 0xbb, 0xa3, 0x24, 0x46, 0xe4, 0xdc, 0x4e, 0x03, 0x18, 0xde, 0xec, 0xcc, 0x72, + 0x66, 0x16, 0x77, 0x90, 0xa2, 0x2a, 0x5b, 0x51, 0xc9, 0x49, 0x59, 0x49, 0xe8, 0x72, 0x54, 0x95, + 0x72, 0x52, 0xa5, 0x94, 0xab, 0xe2, 0x28, 0xdf, 0x51, 0x54, 0x96, 0xe4, 0x8a, 0x9c, 0x54, 0x1c, + 0xcb, 0x91, 0xab, 0x12, 0x47, 0x55, 0x2e, 0xc7, 0x4e, 0xa5, 0x02, 0x5b, 0x50, 0xc5, 0x3f, 0xf3, + 0x23, 0xfe, 0x87, 0xa4, 0x92, 0x54, 0x7f, 0x4e, 0xf7, 0xec, 0x2e, 0x66, 0x16, 0x3c, 0xc0, 0x27, + 0x95, 0xff, 0xed, 0xbe, 0xf7, 0xfa, 0xf5, 0xc7, 0x74, 0xbf, 0x7e, 0xef, 0xf5, 0xeb, 0xd7, 0x70, + 0xfe, 0xee, 0xc5, 0x78, 0xde, 0x0b, 0x17, 0xee, 0xb6, 0xef, 0x90, 0x28, 0x20, 0x09, 0x89, 0x17, + 0x5a, 0x77, 0x37, 0x17, 0x9c, 0x96, 0xb7, 0xb0, 0xfd, 0xc2, 0xc2, 0x26, 0x09, 0x48, 0xe4, 0x24, + 0xc4, 0x9d, 0x6f, 0x45, 0x61, 0x12, 0xa2, 0xc7, 0x38, 0xf5, 0x7c, 0x4a, 0x3d, 0xdf, 0xba, 0xbb, + 0x39, 0xef, 0xb4, 0xbc, 0xf9, 0xed, 0x17, 0x66, 0x9f, 0xdf, 0xf4, 0x92, 0xad, 0xf6, 0x9d, 0xf9, + 0x46, 0xd8, 0x5c, 0xd8, 0x0c, 0x37, 0xc3, 0x05, 0x56, 0xe8, 0x4e, 0x7b, 0x83, 0xfd, 0x63, 0x7f, + 0xd8, 0x2f, 0xce, 0x6c, 0xf6, 0x25, 0x51, 0xb5, 0xd3, 0xf2, 0x9a, 0x4e, 0x63, 0xcb, 0x0b, 0x48, + 0xb4, 0xa3, 0x2a, 0x8f, 0x48, 0x1c, 0xb6, 0xa3, 0x06, 0xc9, 0x36, 0xe1, 0xc0, 0x52, 0xf1, 0x42, + 0x93, 0x24, 0x4e, 0x97, 0x86, 0xcf, 0x2e, 0xf4, 0x2a, 0x15, 0xb5, 0x83, 0xc4, 0x6b, 0x76, 0x56, + 0xf3, 0xd1, 0xbc, 0x02, 0x71, 0x63, 0x8b, 0x34, 0x9d, 0x8e, 0x72, 0x2f, 0xf6, 0x2a, 0xd7, 0x4e, + 0x3c, 0x7f, 0xc1, 0x0b, 0x92, 0x38, 0x89, 0x0e, 0xea, 0x53, 0x4c, 0xa2, 0x6d, 0x12, 0xa5, 0x1d, + 0x22, 0xf7, 0x9d, 0x66, 0xcb, 0x27, 0x5d, 0xfa, 0x64, 0xff, 0xa1, 0x05, 0x67, 0x17, 0x6f, 0xd7, + 0x57, 0x7c, 0x27, 0x4e, 0xbc, 0xc6, 0x92, 0x1f, 0x36, 0xee, 0xd6, 0x93, 0x30, 0x22, 0xb7, 0x42, + 0xbf, 0xdd, 0x24, 0x75, 0x36, 0x7c, 0xe8, 0x3c, 0x8c, 0x6c, 0xb3, 0xff, 0x6b, 0xd5, 0x19, 0xeb, + 0xac, 0x75, 0xae, 0xb2, 0x34, 0xf5, 0xc3, 0xdd, 0xb9, 0x0f, 0xec, 0xed, 0xce, 0x8d, 0xdc, 0x12, + 0x70, 0xac, 0x28, 0xd0, 0xd3, 0x30, 0xb4, 0x11, 0xaf, 0xef, 0xb4, 0xc8, 0x4c, 0x89, 0xd1, 0x4e, + 0x08, 0xda, 0xa1, 0xd5, 0x3a, 0x85, 0x62, 0x81, 0x45, 0x0b, 0x50, 0x69, 0x39, 0x51, 0xe2, 0x25, + 0x5e, 0x18, 0xcc, 0x94, 0xcf, 0x5a, 0xe7, 0x06, 0x97, 0x4e, 0x08, 0xd2, 0x4a, 0x4d, 0x22, 0x70, + 0x4a, 0x43, 0x9b, 0x11, 0x11, 0xc7, 0xbd, 0x11, 0xf8, 0x3b, 0x33, 0x03, 0x67, 0xad, 0x73, 0x23, + 0x69, 0x33, 0xb0, 0x80, 0x63, 0x45, 0x61, 0x7f, 0xaf, 0x04, 0x23, 0x8b, 0x1b, 0x1b, 0x5e, 0xe0, + 0x25, 0x3b, 0xe8, 0x6d, 0x18, 0x0b, 0x42, 0x97, 0xc8, 0xff, 0xac, 0x17, 0xa3, 0x17, 0x9e, 0x9d, + 0x3f, 0x68, 0x2a, 0xce, 0x5f, 0xd7, 0x4a, 0x2c, 0x4d, 0xed, 0xed, 0xce, 0x8d, 0xe9, 0x10, 0x6c, + 0x70, 0x44, 0x6f, 0xc2, 0x68, 0x2b, 0x74, 0x55, 0x05, 0x25, 0x56, 0xc1, 0x33, 0x07, 0x57, 0x50, + 0x4b, 0x0b, 0x2c, 0x4d, 0xee, 0xed, 0xce, 0x8d, 0x6a, 0x00, 0xac, 0xb3, 0x43, 0x3e, 0x4c, 0xd2, + 0xbf, 0x41, 0xe2, 0xa9, 0x1a, 0xca, 0xac, 0x86, 0xe7, 0xf3, 0x6b, 0xd0, 0x0a, 0x2d, 0x9d, 0xdc, + 0xdb, 0x9d, 0x9b, 0xcc, 0x00, 0x71, 0x96, 0xb5, 0xfd, 0x05, 0x98, 0x58, 0x4c, 0x12, 0xa7, 0xb1, + 0x45, 0x5c, 0xfe, 0x7d, 0xd1, 0x4b, 0x30, 0x10, 0x38, 0x4d, 0x22, 0xbe, 0xfe, 0x59, 0x31, 0xec, + 0x03, 0xd7, 0x9d, 0x26, 0xd9, 0xdf, 0x9d, 0x9b, 0xba, 0x19, 0x78, 0xef, 0xb6, 0xc5, 0x9c, 0xa1, + 0x30, 0xcc, 0xa8, 0xd1, 0x05, 0x00, 0x97, 0x6c, 0x7b, 0x0d, 0x52, 0x73, 0x92, 0x2d, 0x31, 0x1b, + 0x90, 0x28, 0x0b, 0x55, 0x85, 0xc1, 0x1a, 0x95, 0xfd, 0x65, 0x0b, 0x2a, 0x8b, 0xdb, 0xa1, 0xe7, + 0xd6, 0x42, 0x37, 0x46, 0x6d, 0x98, 0x6c, 0x45, 0x64, 0x83, 0x44, 0x0a, 0x34, 0x63, 0x9d, 0x2d, + 0x9f, 0x1b, 0xbd, 0x70, 0x21, 0xa7, 0xdf, 0x66, 0xa1, 0x95, 0x20, 0x89, 0x76, 0x96, 0x1e, 0x11, + 0x55, 0x4f, 0x66, 0xb0, 0x38, 0x5b, 0x87, 0xfd, 0x4b, 0x25, 0x38, 0xb5, 0xf8, 0x85, 0x76, 0x44, + 0xaa, 0x5e, 0x7c, 0x37, 0xbb, 0x14, 0x5c, 0x2f, 0xbe, 0x7b, 0x3d, 0x1d, 0x0c, 0x35, 0x07, 0xab, + 0x02, 0x8e, 0x15, 0x05, 0x7a, 0x1e, 0x86, 0xe9, 0xef, 0x9b, 0x78, 0x4d, 0xf4, 0xfe, 0xa4, 0x20, + 0x1e, 0xad, 0x3a, 0x89, 0x53, 0xe5, 0x28, 0x2c, 0x69, 0xd0, 0x35, 0x18, 0x6d, 0xb0, 0xf5, 0xbe, + 0x79, 0x2d, 0x74, 0x09, 0xfb, 0xc2, 0x95, 0xa5, 0xe7, 0x28, 0xf9, 0x72, 0x0a, 0xde, 0xdf, 0x9d, + 0x9b, 0xe1, 0x6d, 0x13, 0x2c, 0x34, 0x1c, 0xd6, 0xcb, 0x23, 0x5b, 0x2d, 0xc4, 0x01, 0xc6, 0x09, + 0xba, 0x2c, 0xc2, 0x73, 0xda, 0x9a, 0x1a, 0x64, 0x6b, 0x6a, 0xac, 0xc7, 0x7a, 0xfa, 0xc7, 0x96, + 0x18, 0x93, 0x55, 0xcf, 0x37, 0xc5, 0xc3, 0x05, 0x80, 0x98, 0x34, 0x22, 0x92, 0x68, 0xa3, 0xa2, + 0x3e, 0x73, 0x5d, 0x61, 0xb0, 0x46, 0x45, 0x17, 0x7f, 0xbc, 0xe5, 0x44, 0x6c, 0xb6, 0x88, 0xb1, + 0x51, 0x8b, 0xbf, 0x2e, 0x11, 0x38, 0xa5, 0x31, 0x16, 0x7f, 0x39, 0x77, 0xf1, 0xff, 0x96, 0x05, + 0xc3, 0x4b, 0x5e, 0xe0, 0x7a, 0xc1, 0x26, 0x7a, 0x1b, 0x46, 0xa8, 0x44, 0x77, 0x9d, 0xc4, 0x11, + 0xeb, 0xfe, 0x23, 0x72, 0xf2, 0xe8, 0x02, 0x56, 0x4e, 0x9f, 0x78, 0x9e, 0x52, 0xd3, 0x49, 0x74, + 0xe3, 0xce, 0x3b, 0xa4, 0x91, 0x5c, 0x23, 0x89, 0x93, 0x76, 0x27, 0x85, 0x61, 0xc5, 0x15, 0xdd, + 0x84, 0xa1, 0xc4, 0x89, 0x36, 0x49, 0x22, 0x96, 0x7d, 0xce, 0xa2, 0xe4, 0x3c, 0x30, 0x9d, 0x72, + 0x24, 0x68, 0x90, 0x54, 0x40, 0xae, 0x33, 0x26, 0x58, 0x30, 0xb3, 0x1b, 0x30, 0xb6, 0xec, 0xb4, + 0x9c, 0x3b, 0x9e, 0xef, 0x25, 0x1e, 0x89, 0xd1, 0x87, 0xa1, 0xec, 0xb8, 0x2e, 0x5b, 0x00, 0x95, + 0xa5, 0x53, 0x7b, 0xbb, 0x73, 0xe5, 0x45, 0xd7, 0xdd, 0xdf, 0x9d, 0x03, 0x45, 0xb5, 0x83, 0x29, + 0x05, 0x7a, 0x16, 0x06, 0xdc, 0x28, 0x6c, 0xcd, 0x94, 0x18, 0xe5, 0x69, 0xba, 0x52, 0xab, 0x51, + 0xd8, 0xca, 0x90, 0x32, 0x1a, 0xfb, 0x07, 0x25, 0x40, 0xcb, 0xa4, 0xb5, 0xb5, 0x5a, 0x37, 0xbe, + 0xe9, 0x39, 0x18, 0x69, 0x86, 0x81, 0x97, 0x84, 0x51, 0x2c, 0x2a, 0x64, 0xf3, 0xe2, 0x9a, 0x80, + 0x61, 0x85, 0x45, 0x67, 0x61, 0xa0, 0x95, 0x2e, 0xef, 0x31, 0x29, 0x1a, 0xd8, 0xc2, 0x66, 0x18, + 0x4a, 0xd1, 0x8e, 0x49, 0x24, 0xe6, 0xb3, 0xa2, 0xb8, 0x19, 0x93, 0x08, 0x33, 0x4c, 0x3a, 0x83, + 0xe8, 0xdc, 0x12, 0xb3, 0x35, 0x33, 0x83, 0x28, 0x06, 0x6b, 0x54, 0xe8, 0x2d, 0xa8, 0xf0, 0x7f, + 0x98, 0x6c, 0xb0, 0xa9, 0x9b, 0x2b, 0x14, 0xae, 0x86, 0x0d, 0xc7, 0xcf, 0x0e, 0xfe, 0x38, 0x9b, + 0x71, 0x92, 0x11, 0x4e, 0x79, 0x1a, 0x33, 0x6e, 0x28, 0x77, 0xc6, 0xfd, 0x1d, 0x0b, 0xd0, 0xb2, + 0x17, 0xb8, 0x24, 0x3a, 0x86, 0xad, 0xb3, 0xbf, 0xc5, 0xf0, 0xdf, 0x68, 0xd3, 0xc2, 0x66, 0x2b, + 0x0c, 0x48, 0x90, 0x2c, 0x87, 0x81, 0xcb, 0xb7, 0xd3, 0x8f, 0xc3, 0x40, 0x42, 0xab, 0xe2, 0xcd, + 0x7a, 0x5a, 0x7e, 0x16, 0x5a, 0xc1, 0xfe, 0xee, 0xdc, 0xe9, 0xce, 0x12, 0xac, 0x09, 0xac, 0x0c, + 0xfa, 0x18, 0x0c, 0xc5, 0x89, 0x93, 0xb4, 0x63, 0xd1, 0xd0, 0x27, 0x64, 0x43, 0xeb, 0x0c, 0xba, + 0xbf, 0x3b, 0x37, 0xa9, 0x8a, 0x71, 0x10, 0x16, 0x05, 0xd0, 0x33, 0x30, 0xdc, 0x24, 0x71, 0xec, + 0x6c, 0x4a, 0x01, 0x37, 0x29, 0xca, 0x0e, 0x5f, 0xe3, 0x60, 0x2c, 0xf1, 0xe8, 0x49, 0x18, 0x24, + 0x51, 0x14, 0x46, 0x62, 0x46, 0x8c, 0x0b, 0xc2, 0xc1, 0x15, 0x0a, 0xc4, 0x1c, 0x67, 0xff, 0x57, + 0x0b, 0x26, 0x55, 0x5b, 0x79, 0x5d, 0xc7, 0xb0, 0xe4, 0x5d, 0x80, 0x86, 0xec, 0x60, 0xcc, 0x16, + 0x9a, 0x56, 0x47, 0xf7, 0xe9, 0xd7, 0x39, 0xa0, 0x69, 0x1d, 0x0a, 0x14, 0x63, 0x8d, 0xaf, 0xfd, + 0x1f, 0x2c, 0x38, 0x99, 0xe9, 0xdb, 0x55, 0x2f, 0x4e, 0xd0, 0x9b, 0x1d, 0xfd, 0x9b, 0x2f, 0xd6, + 0x3f, 0x5a, 0x9a, 0xf5, 0x4e, 0xcd, 0x17, 0x09, 0xd1, 0xfa, 0x86, 0x61, 0xd0, 0x4b, 0x48, 0x53, + 0x76, 0xeb, 0xf9, 0x82, 0xdd, 0xe2, 0xed, 0x4b, 0xbf, 0xd2, 0x1a, 0xe5, 0x81, 0x39, 0x2b, 0xfb, + 0x7f, 0x5b, 0x50, 0x59, 0x0e, 0x83, 0x0d, 0x6f, 0xf3, 0x9a, 0xd3, 0x3a, 0x86, 0xef, 0x53, 0x87, + 0x01, 0xc6, 0x9d, 0x77, 0xe1, 0x85, 0xbc, 0x2e, 0x88, 0x86, 0xcd, 0xd3, 0x3d, 0x95, 0x2b, 0x0b, + 0x4a, 0x4c, 0x51, 0x10, 0x66, 0xcc, 0x66, 0x5f, 0x81, 0x8a, 0x22, 0x40, 0x53, 0x50, 0xbe, 0x4b, + 0xb8, 0x26, 0x59, 0xc1, 0xf4, 0x27, 0x9a, 0x86, 0xc1, 0x6d, 0xc7, 0x6f, 0x8b, 0xc5, 0x8b, 0xf9, + 0x9f, 0x8f, 0x97, 0x2e, 0x5a, 0xf6, 0x0f, 0xd8, 0x0a, 0x14, 0x95, 0xac, 0x04, 0xdb, 0x42, 0x38, + 0x7c, 0xc5, 0x82, 0x69, 0xbf, 0x8b, 0x50, 0x12, 0x63, 0x72, 0x18, 0x71, 0xf6, 0x98, 0x68, 0xf6, + 0x74, 0x37, 0x2c, 0xee, 0x5a, 0x1b, 0x95, 0xf5, 0x61, 0x8b, 0x4e, 0x38, 0xc7, 0x67, 0x4d, 0x17, + 0x3a, 0xc0, 0x0d, 0x01, 0xc3, 0x0a, 0x6b, 0xff, 0xa9, 0x05, 0xd3, 0xaa, 0x1f, 0x57, 0xc8, 0x4e, + 0x9d, 0xf8, 0xa4, 0x91, 0x84, 0xd1, 0xc3, 0xd2, 0x93, 0xc7, 0xf9, 0x37, 0xe1, 0x32, 0x69, 0x54, + 0x30, 0x28, 0x5f, 0x21, 0x3b, 0xfc, 0x03, 0xe9, 0x1d, 0x2d, 0x1f, 0xd8, 0xd1, 0x7f, 0x6d, 0xc1, + 0xb8, 0xea, 0xe8, 0x31, 0x2c, 0xb9, 0xab, 0xe6, 0x92, 0xfb, 0x70, 0xc1, 0xf9, 0xda, 0x63, 0xb1, + 0xfd, 0xed, 0x12, 0x15, 0x1b, 0x82, 0xa6, 0x16, 0x85, 0x74, 0x90, 0xa8, 0xc4, 0x7f, 0x48, 0xbe, + 0x52, 0x7f, 0x9d, 0xbd, 0x42, 0x76, 0xd6, 0x43, 0xaa, 0x4d, 0x74, 0xef, 0xac, 0xf1, 0x51, 0x07, + 0x0e, 0xfc, 0xa8, 0xbf, 0x5b, 0x82, 0x53, 0x6a, 0x58, 0x8c, 0x5d, 0xfa, 0x67, 0x72, 0x60, 0x5e, + 0x80, 0x51, 0x97, 0x6c, 0x38, 0x6d, 0x3f, 0x51, 0xd6, 0xc4, 0x20, 0x37, 0x33, 0xab, 0x29, 0x18, + 0xeb, 0x34, 0x7d, 0x8c, 0xe5, 0x37, 0x46, 0x99, 0x3c, 0x4f, 0x1c, 0x3a, 0xeb, 0xa9, 0x86, 0xa7, + 0x99, 0x87, 0x63, 0xba, 0x79, 0x28, 0x4c, 0xc1, 0x27, 0x61, 0xd0, 0x6b, 0xd2, 0x3d, 0xbf, 0x64, + 0x6e, 0xe5, 0x6b, 0x14, 0x88, 0x39, 0x0e, 0x3d, 0x05, 0xc3, 0x8d, 0xb0, 0xd9, 0x74, 0x02, 0x77, + 0xa6, 0xcc, 0x74, 0xce, 0x51, 0xaa, 0x16, 0x2c, 0x73, 0x10, 0x96, 0x38, 0xf4, 0x18, 0x0c, 0x38, + 0xd1, 0x66, 0x3c, 0x33, 0xc0, 0x68, 0x46, 0x68, 0x4d, 0x8b, 0xd1, 0x66, 0x8c, 0x19, 0x94, 0xea, + 0x92, 0xf7, 0xc2, 0xe8, 0xae, 0x17, 0x6c, 0x56, 0xbd, 0x88, 0x29, 0x86, 0x9a, 0x2e, 0x79, 0x5b, + 0x61, 0xb0, 0x46, 0x85, 0x6a, 0x30, 0xd8, 0x0a, 0xa3, 0x24, 0x9e, 0x19, 0x62, 0x03, 0xff, 0x5c, + 0xee, 0xf2, 0xe3, 0xfd, 0xae, 0x85, 0x51, 0x92, 0x76, 0x85, 0xfe, 0x8b, 0x31, 0x67, 0x84, 0x96, + 0xa1, 0x4c, 0x82, 0xed, 0x99, 0x61, 0xc6, 0xef, 0x43, 0x07, 0xf3, 0x5b, 0x09, 0xb6, 0x6f, 0x39, + 0x51, 0x2a, 0xaf, 0x56, 0x82, 0x6d, 0x4c, 0x4b, 0xa3, 0x06, 0x54, 0xa4, 0x0b, 0x2b, 0x9e, 0x19, + 0x29, 0x32, 0x15, 0xb1, 0x20, 0xc7, 0xe4, 0xdd, 0xb6, 0x17, 0x91, 0x26, 0x09, 0x92, 0x38, 0x35, + 0xac, 0x24, 0x36, 0xc6, 0x29, 0x5f, 0xd4, 0x80, 0x31, 0xae, 0x7f, 0x5e, 0x0b, 0xdb, 0x41, 0x12, + 0xcf, 0x54, 0x58, 0x93, 0x73, 0x3c, 0x17, 0xb7, 0xd2, 0x12, 0x4b, 0xd3, 0x82, 0xfd, 0x98, 0x06, + 0x8c, 0xb1, 0xc1, 0x14, 0xbd, 0x09, 0xe3, 0xbe, 0xb7, 0x4d, 0x02, 0x12, 0xc7, 0xb5, 0x28, 0xbc, + 0x43, 0x66, 0x80, 0xf5, 0xe6, 0xc9, 0x3c, 0x2b, 0x3e, 0xbc, 0x43, 0x96, 0x4e, 0xec, 0xed, 0xce, + 0x8d, 0x5f, 0xd5, 0x4b, 0x63, 0x93, 0x19, 0x7a, 0x0b, 0x26, 0xa8, 0xb2, 0xeb, 0xa5, 0xec, 0x47, + 0x8b, 0xb3, 0x47, 0x7b, 0xbb, 0x73, 0x13, 0xd8, 0x28, 0x8e, 0x33, 0xec, 0xd0, 0x3a, 0x54, 0x7c, + 0x6f, 0x83, 0x34, 0x76, 0x1a, 0x3e, 0x99, 0x19, 0x63, 0xbc, 0x73, 0x16, 0xe7, 0x55, 0x49, 0xce, + 0x0d, 0x0c, 0xf5, 0x17, 0xa7, 0x8c, 0xd0, 0x2d, 0x38, 0x9d, 0x90, 0xa8, 0xe9, 0x05, 0x0e, 0x5d, + 0x54, 0x42, 0xfb, 0x65, 0xae, 0x92, 0x71, 0x36, 0x6b, 0xcf, 0x88, 0x81, 0x3d, 0xbd, 0xde, 0x95, + 0x0a, 0xf7, 0x28, 0x8d, 0x6e, 0xc0, 0x24, 0x5b, 0x4f, 0xb5, 0xb6, 0xef, 0xd7, 0x42, 0xdf, 0x6b, + 0xec, 0xcc, 0x4c, 0x30, 0x86, 0x4f, 0x49, 0x07, 0xc8, 0x9a, 0x89, 0xa6, 0x86, 0x61, 0xfa, 0x0f, + 0x67, 0x4b, 0x23, 0x1f, 0x26, 0x63, 0xd2, 0x68, 0x47, 0x5e, 0xb2, 0x43, 0xe7, 0x3e, 0xb9, 0x9f, + 0xcc, 0x4c, 0x16, 0x31, 0x74, 0xeb, 0x66, 0x21, 0xee, 0x7d, 0xca, 0x00, 0x71, 0x96, 0x35, 0x15, + 0x15, 0x71, 0xe2, 0x7a, 0xc1, 0xcc, 0x14, 0x93, 0x40, 0x6a, 0x7d, 0xd5, 0x29, 0x10, 0x73, 0x1c, + 0xf3, 0x1f, 0xd0, 0x1f, 0x37, 0xa8, 0x94, 0x3e, 0xc1, 0x08, 0x53, 0xff, 0x81, 0x44, 0xe0, 0x94, + 0x86, 0xaa, 0x06, 0x49, 0xb2, 0x33, 0x83, 0x18, 0xa9, 0x5a, 0x6a, 0xeb, 0xeb, 0x9f, 0xc1, 0x14, + 0x8e, 0x6e, 0xc1, 0x30, 0x09, 0xb6, 0x57, 0xa3, 0xb0, 0x39, 0x73, 0xb2, 0x88, 0x0c, 0x58, 0xe1, + 0xc4, 0x7c, 0xff, 0x48, 0x4d, 0x18, 0x01, 0xc6, 0x92, 0x19, 0xba, 0x0f, 0x33, 0x5d, 0xbe, 0x12, + 0xff, 0x28, 0xd3, 0xec, 0xa3, 0x7c, 0x42, 0x94, 0x9d, 0x59, 0xef, 0x41, 0xb7, 0x7f, 0x00, 0x0e, + 0xf7, 0xe4, 0x6e, 0xdf, 0x81, 0x09, 0x25, 0xa8, 0xd8, 0xf7, 0x46, 0x73, 0x30, 0x48, 0x65, 0xb1, + 0x34, 0xe8, 0x2b, 0x74, 0x50, 0xa9, 0x88, 0x8e, 0x31, 0x87, 0xb3, 0x41, 0xf5, 0xbe, 0x40, 0x96, + 0x76, 0x12, 0xc2, 0x0d, 0xbb, 0xb2, 0x36, 0xa8, 0x12, 0x81, 0x53, 0x1a, 0xfb, 0xff, 0x72, 0x35, + 0x29, 0x95, 0x86, 0x05, 0x76, 0x82, 0xf3, 0x30, 0xb2, 0x15, 0xc6, 0x09, 0xa5, 0x66, 0x75, 0x0c, + 0xa6, 0x8a, 0xd1, 0x65, 0x01, 0xc7, 0x8a, 0x02, 0xbd, 0x0a, 0xe3, 0x0d, 0xbd, 0x02, 0xb1, 0x8d, + 0x9d, 0x12, 0x45, 0xcc, 0xda, 0xb1, 0x49, 0x8b, 0x2e, 0xc2, 0x08, 0xf3, 0x72, 0x37, 0x42, 0x5f, + 0x98, 0x90, 0x72, 0x57, 0x1e, 0xa9, 0x09, 0xf8, 0xbe, 0xf6, 0x1b, 0x2b, 0x6a, 0x6a, 0x88, 0xd3, + 0x26, 0xac, 0xd5, 0xc4, 0x06, 0xa2, 0x0c, 0xf1, 0xcb, 0x0c, 0x8a, 0x05, 0xd6, 0xfe, 0x97, 0x25, + 0x6d, 0x94, 0xa9, 0x01, 0x44, 0xd0, 0x67, 0x61, 0xf8, 0x9e, 0xe3, 0x25, 0x5e, 0xb0, 0x29, 0xb4, + 0x87, 0x17, 0x0b, 0xee, 0x26, 0xac, 0xf8, 0x6d, 0x5e, 0x94, 0xef, 0x7c, 0xe2, 0x0f, 0x96, 0x0c, + 0x29, 0xef, 0xa8, 0x1d, 0x04, 0x94, 0x77, 0xa9, 0x7f, 0xde, 0x98, 0x17, 0xe5, 0xbc, 0xc5, 0x1f, + 0x2c, 0x19, 0xa2, 0x0d, 0x00, 0x39, 0x97, 0x88, 0x2b, 0xbc, 0xcb, 0x1f, 0xed, 0x87, 0xfd, 0xba, + 0x2a, 0xbd, 0x34, 0x41, 0xf7, 0xda, 0xf4, 0x3f, 0xd6, 0x38, 0xdb, 0x09, 0x53, 0xc2, 0x3a, 0x9b, + 0x85, 0x3e, 0x47, 0x97, 0xb4, 0x13, 0x25, 0xc4, 0x5d, 0x4c, 0xb2, 0x0e, 0xfa, 0x83, 0x55, 0xec, + 0x75, 0xaf, 0x49, 0xf4, 0xe5, 0x2f, 0x98, 0xe0, 0x94, 0x9f, 0xfd, 0xdd, 0x32, 0xcc, 0xf4, 0x6a, + 0x2e, 0x9d, 0x92, 0xe4, 0xbe, 0x97, 0x2c, 0x53, 0x35, 0xc9, 0x32, 0xa7, 0xe4, 0x8a, 0x80, 0x63, + 0x45, 0x41, 0xe7, 0x46, 0xec, 0x6d, 0x4a, 0x63, 0x69, 0x30, 0x9d, 0x1b, 0x75, 0x06, 0xc5, 0x02, + 0x4b, 0xe9, 0x22, 0xe2, 0xc4, 0xe2, 0x70, 0x43, 0x9b, 0x43, 0x98, 0x41, 0xb1, 0xc0, 0xea, 0x0e, + 0x91, 0x81, 0x1c, 0x87, 0x88, 0x31, 0x44, 0x83, 0x0f, 0x76, 0x88, 0xd0, 0xe7, 0x01, 0x36, 0xbc, + 0xc0, 0x8b, 0xb7, 0x18, 0xf7, 0xa1, 0xbe, 0xb9, 0x2b, 0x25, 0x6b, 0x55, 0x71, 0xc1, 0x1a, 0x47, + 0xf4, 0x32, 0x8c, 0xaa, 0xe5, 0xb9, 0x56, 0x9d, 0x19, 0x36, 0x1d, 0xe2, 0xa9, 0xac, 0xaa, 0x62, + 0x9d, 0xce, 0x7e, 0x27, 0x3b, 0x5f, 0xc4, 0xaa, 0xd0, 0xc6, 0xd7, 0x2a, 0x3a, 0xbe, 0xa5, 0x83, + 0xc7, 0xd7, 0xfe, 0x2f, 0x65, 0x98, 0x34, 0x2a, 0x6b, 0xc7, 0x05, 0x24, 0xda, 0xeb, 0x74, 0xc3, + 0x72, 0x12, 0x22, 0xd6, 0xe4, 0xf9, 0x7e, 0x16, 0x8d, 0xbe, 0xbd, 0xd1, 0xb5, 0xc0, 0x39, 0xa1, + 0x2d, 0xa8, 0xf8, 0x4e, 0xcc, 0x5c, 0x2a, 0x44, 0xac, 0xc5, 0xfe, 0xd8, 0xa6, 0xe6, 0x87, 0x13, + 0x27, 0xda, 0xee, 0xc1, 0x6b, 0x49, 0x99, 0xd3, 0xdd, 0x96, 0x2a, 0x3b, 0xf2, 0x44, 0x4d, 0x35, + 0x87, 0x6a, 0x44, 0x3b, 0x98, 0xe3, 0xd0, 0x45, 0x18, 0x8b, 0x08, 0x9b, 0x29, 0xcb, 0x54, 0x9f, + 0x63, 0x53, 0x6f, 0x30, 0x55, 0xfc, 0xb0, 0x86, 0xc3, 0x06, 0x65, 0xaa, 0xf7, 0x0f, 0x1d, 0xa0, + 0xf7, 0x3f, 0x03, 0xc3, 0xec, 0x87, 0x9a, 0x15, 0xea, 0x0b, 0xad, 0x71, 0x30, 0x96, 0xf8, 0xec, + 0x24, 0x1a, 0x29, 0x38, 0x89, 0x9e, 0x85, 0x89, 0xaa, 0x43, 0x9a, 0x61, 0xb0, 0x12, 0xb8, 0xad, + 0xd0, 0x0b, 0x12, 0x34, 0x03, 0x03, 0x6c, 0x3f, 0xe1, 0xeb, 0x7d, 0x80, 0x72, 0xc0, 0x03, 0x54, + 0x77, 0xb7, 0xff, 0x9f, 0x05, 0xe3, 0x55, 0xe2, 0x93, 0x84, 0x70, 0xbb, 0x27, 0x46, 0xab, 0x80, + 0x36, 0x23, 0xa7, 0x41, 0x6a, 0x24, 0xf2, 0x42, 0xb7, 0x4e, 0x1a, 0x61, 0xc0, 0x0e, 0xa2, 0xe8, + 0x06, 0x79, 0x7a, 0x6f, 0x77, 0x0e, 0x5d, 0xea, 0xc0, 0xe2, 0x2e, 0x25, 0x90, 0x0b, 0xe3, 0xad, + 0x88, 0x18, 0x7e, 0x43, 0x2b, 0x5f, 0xd5, 0xa8, 0xe9, 0x45, 0xb8, 0x36, 0x6c, 0x80, 0xb0, 0xc9, + 0x14, 0x7d, 0x0a, 0xa6, 0xc2, 0xa8, 0xb5, 0xe5, 0x04, 0x55, 0xd2, 0x22, 0x81, 0x4b, 0x4d, 0x00, + 0xe1, 0xed, 0x98, 0xde, 0xdb, 0x9d, 0x9b, 0xba, 0x91, 0xc1, 0xe1, 0x0e, 0x6a, 0xfb, 0x5d, 0x38, + 0x55, 0x0d, 0xef, 0x05, 0xf7, 0x9c, 0xc8, 0x5d, 0xac, 0xad, 0x69, 0x0e, 0x84, 0x37, 0xa4, 0x81, + 0xca, 0x0f, 0xe1, 0x72, 0x76, 0x1f, 0x8d, 0x07, 0x37, 0x0d, 0x56, 0x3d, 0x9f, 0xf4, 0x70, 0x59, + 0xfc, 0x93, 0x92, 0x51, 0x67, 0x4a, 0xaf, 0xce, 0x17, 0xac, 0x9e, 0xe7, 0x0b, 0x9f, 0x83, 0x91, + 0x0d, 0x8f, 0xf8, 0x2e, 0x26, 0x1b, 0x62, 0x44, 0x5f, 0x28, 0x72, 0x00, 0xb3, 0x4a, 0xcb, 0x48, + 0x0f, 0x16, 0x37, 0x74, 0x57, 0x05, 0x1b, 0xac, 0x18, 0xa2, 0x36, 0x4c, 0x49, 0x5b, 0x49, 0x62, + 0xc5, 0x82, 0x7c, 0xb1, 0x98, 0x29, 0x66, 0x56, 0xc3, 0x3e, 0x01, 0xce, 0x30, 0xc4, 0x1d, 0x55, + 0x50, 0x1b, 0xb7, 0x49, 0xb7, 0xa3, 0x01, 0x36, 0x3d, 0x99, 0x8d, 0xcb, 0xcc, 0x75, 0x06, 0xb5, + 0x7f, 0xcd, 0x82, 0x47, 0x3a, 0x46, 0x4b, 0xf8, 0x32, 0x8e, 0xec, 0x1b, 0x65, 0x1d, 0x0a, 0xa5, + 0x7c, 0x87, 0x82, 0x7d, 0x03, 0xa6, 0x57, 0x9a, 0xad, 0x64, 0xa7, 0xea, 0x99, 0xc7, 0x22, 0xaf, + 0xc0, 0x50, 0x93, 0xb8, 0x5e, 0xbb, 0x29, 0x3e, 0xeb, 0x9c, 0x94, 0xdd, 0xd7, 0x18, 0x74, 0x7f, + 0x77, 0x6e, 0xbc, 0x9e, 0x84, 0x91, 0xb3, 0x49, 0x38, 0x00, 0x0b, 0x72, 0xfb, 0xc7, 0x16, 0x4c, + 0xca, 0x35, 0xbc, 0xe8, 0xba, 0x11, 0x89, 0x63, 0x34, 0x0b, 0x25, 0xaf, 0x25, 0x18, 0x81, 0x60, + 0x54, 0x5a, 0xab, 0xe1, 0x92, 0xd7, 0x42, 0x9f, 0x85, 0x0a, 0x3f, 0x4d, 0x4b, 0x27, 0x47, 0x9f, + 0xa7, 0x73, 0xcc, 0x7e, 0x5b, 0x97, 0x3c, 0x70, 0xca, 0x4e, 0x6a, 0xb2, 0x6c, 0x77, 0x28, 0x9b, + 0x67, 0x3b, 0x97, 0x05, 0x1c, 0x2b, 0x0a, 0x74, 0x0e, 0x46, 0x82, 0xd0, 0xe5, 0x07, 0x9e, 0x7c, + 0x9f, 0x67, 0x53, 0xee, 0xba, 0x80, 0x61, 0x85, 0xb5, 0xbf, 0x66, 0xc1, 0x98, 0xec, 0x63, 0x41, + 0xa5, 0x9a, 0x2e, 0x92, 0x54, 0xa1, 0x4e, 0x17, 0x09, 0x55, 0x8a, 0x19, 0xc6, 0xd0, 0x85, 0xcb, + 0xfd, 0xe8, 0xc2, 0xf6, 0x6f, 0x94, 0x60, 0x42, 0x36, 0xa7, 0xde, 0xbe, 0x13, 0x13, 0xaa, 0x2a, + 0x54, 0x1c, 0x3e, 0xf8, 0x44, 0xce, 0xb3, 0xe7, 0xf3, 0xec, 0x25, 0xe3, 0x9b, 0xa5, 0xaa, 0xc8, + 0xa2, 0xe4, 0x83, 0x53, 0x96, 0x68, 0x1b, 0x4e, 0x04, 0x61, 0xc2, 0xb6, 0x20, 0x85, 0x2f, 0x76, + 0x1a, 0x91, 0xad, 0xe7, 0x51, 0x51, 0xcf, 0x89, 0xeb, 0x59, 0x7e, 0xb8, 0xb3, 0x0a, 0x74, 0x43, + 0xfa, 0x81, 0xca, 0xac, 0xae, 0x67, 0x8b, 0xd5, 0xd5, 0xdb, 0x0d, 0x64, 0xff, 0x8e, 0x05, 0x15, + 0x49, 0x76, 0x1c, 0xc7, 0x52, 0xb7, 0x61, 0x38, 0x66, 0x9f, 0x48, 0x0e, 0xd7, 0xf9, 0x62, 0x5d, + 0xe0, 0xdf, 0x35, 0xdd, 0x77, 0xf9, 0xff, 0x18, 0x4b, 0x6e, 0xcc, 0x21, 0xae, 0x3a, 0xf2, 0xd0, + 0x39, 0xc4, 0x55, 0xcb, 0x7a, 0x9f, 0x3e, 0x8d, 0x1b, 0x16, 0x3b, 0x55, 0x1e, 0x5b, 0x11, 0xd9, + 0xf0, 0xee, 0x67, 0x95, 0xc7, 0x1a, 0x83, 0x62, 0x81, 0x45, 0x1b, 0x30, 0xd6, 0x90, 0x2e, 0xe3, + 0x54, 0x84, 0x7c, 0xa4, 0xa0, 0x7f, 0x5e, 0x1d, 0xf5, 0xf0, 0xf0, 0xa1, 0x65, 0x8d, 0x13, 0x36, + 0xf8, 0x52, 0x39, 0x95, 0x9e, 0x66, 0x97, 0x0b, 0x3a, 0x57, 0x22, 0x92, 0xa4, 0x35, 0xf4, 0x3c, + 0xc8, 0xb6, 0xbf, 0x69, 0xc1, 0x10, 0xf7, 0x31, 0x16, 0x73, 0xd4, 0x6a, 0x87, 0x58, 0xe9, 0x78, + 0xde, 0xa2, 0x40, 0x71, 0xa6, 0x85, 0x6e, 0x43, 0x85, 0xfd, 0x60, 0xfe, 0x92, 0x72, 0x91, 0x58, + 0x2a, 0x5e, 0xbf, 0xde, 0xd4, 0x5b, 0x92, 0x01, 0x4e, 0x79, 0xd9, 0xdf, 0x2f, 0x53, 0xd1, 0x97, + 0x92, 0x1a, 0x7b, 0xbb, 0x75, 0x1c, 0x7b, 0x7b, 0xe9, 0xe8, 0xf7, 0xf6, 0x77, 0x61, 0xb2, 0xa1, + 0x1d, 0xa2, 0xa5, 0x5f, 0xfc, 0x42, 0xc1, 0x69, 0xa5, 0x9d, 0xbc, 0x71, 0x9f, 0xda, 0xb2, 0xc9, + 0x0e, 0x67, 0xf9, 0x23, 0x02, 0x63, 0x7c, 0x3e, 0x88, 0xfa, 0x06, 0x58, 0x7d, 0x0b, 0x45, 0x66, + 0x98, 0x5e, 0x19, 0x9b, 0xc5, 0x75, 0x8d, 0x11, 0x36, 0xd8, 0xda, 0xbf, 0x32, 0x08, 0x83, 0x2b, + 0xdb, 0x24, 0x48, 0x8e, 0x41, 0xd4, 0x35, 0x61, 0xc2, 0x0b, 0xb6, 0x43, 0x7f, 0x9b, 0xb8, 0x1c, + 0x7f, 0xb8, 0xed, 0xfd, 0xb4, 0xa8, 0x64, 0x62, 0xcd, 0x60, 0x86, 0x33, 0xcc, 0x8f, 0xc2, 0x9a, + 0x7f, 0x1d, 0x86, 0xf8, 0xcc, 0x10, 0xa6, 0x7c, 0x8e, 0xcf, 0x9d, 0x0d, 0xac, 0x58, 0x41, 0xa9, + 0xcf, 0x81, 0xbb, 0xfb, 0x05, 0x23, 0xf4, 0x0e, 0x4c, 0x6c, 0x78, 0x51, 0x9c, 0x50, 0x83, 0x3c, + 0x4e, 0x9c, 0x66, 0xeb, 0x10, 0x76, 0xbc, 0x1a, 0x91, 0x55, 0x83, 0x13, 0xce, 0x70, 0x46, 0x9b, + 0x30, 0x4e, 0xcd, 0xc8, 0xb4, 0xaa, 0xe1, 0xbe, 0xab, 0x52, 0x6e, 0xbc, 0xab, 0x3a, 0x23, 0x6c, + 0xf2, 0xa5, 0x22, 0xa9, 0xc1, 0xcc, 0xce, 0x11, 0xa6, 0xdd, 0x28, 0x91, 0xc4, 0xed, 0x4d, 0x8e, + 0xa3, 0x92, 0x8d, 0x45, 0xb3, 0x54, 0x4c, 0xc9, 0x96, 0xc6, 0xac, 0xd8, 0xdf, 0xa6, 0x7b, 0x31, + 0x1d, 0xc3, 0x63, 0xd8, 0xbe, 0x2e, 0x9b, 0xdb, 0xd7, 0x93, 0x05, 0xbe, 0x6c, 0x8f, 0xad, 0xeb, + 0x6d, 0x18, 0xd5, 0x3e, 0x3c, 0x5a, 0x80, 0x4a, 0x43, 0x06, 0x5c, 0x08, 0x29, 0xae, 0x54, 0x29, + 0x15, 0x89, 0x81, 0x53, 0x1a, 0x3a, 0x2e, 0x54, 0x05, 0xcd, 0x86, 0x67, 0x51, 0x05, 0x15, 0x33, + 0x8c, 0xfd, 0x22, 0xc0, 0xca, 0x7d, 0xd2, 0x58, 0xe4, 0x26, 0x9e, 0x76, 0x06, 0x67, 0xf5, 0x3e, + 0x83, 0xb3, 0xbf, 0x65, 0xc1, 0xc4, 0xea, 0xb2, 0xa1, 0xd3, 0xcf, 0x03, 0x70, 0xdd, 0xf8, 0xf6, + 0xed, 0xeb, 0xd2, 0xc7, 0xcc, 0x1d, 0x81, 0x0a, 0x8a, 0x35, 0x0a, 0xf4, 0x28, 0x94, 0xfd, 0x76, + 0x20, 0x54, 0xd6, 0xe1, 0xbd, 0xdd, 0xb9, 0xf2, 0xd5, 0x76, 0x80, 0x29, 0x4c, 0x8b, 0x83, 0x2a, + 0x17, 0x8e, 0x83, 0xca, 0x8f, 0x08, 0xfe, 0x7a, 0x19, 0xa6, 0x56, 0x7d, 0x72, 0xdf, 0x68, 0xf5, + 0xd3, 0x30, 0xe4, 0x46, 0xde, 0x36, 0x89, 0xb2, 0x8a, 0x40, 0x95, 0x41, 0xb1, 0xc0, 0x16, 0x0e, + 0xcd, 0x7a, 0xab, 0x73, 0x23, 0x3f, 0xba, 0xb0, 0xb4, 0xdc, 0x3e, 0xa3, 0x0d, 0x18, 0xe6, 0x67, + 0xb6, 0xf1, 0xcc, 0x20, 0x9b, 0x8a, 0xaf, 0x1e, 0xdc, 0x98, 0xec, 0xf8, 0xcc, 0x0b, 0x1f, 0x08, + 0x0f, 0x8a, 0x51, 0xb2, 0x4c, 0x40, 0xb1, 0x64, 0x3e, 0xfb, 0x71, 0x18, 0xd3, 0x29, 0xfb, 0x8a, + 0x8e, 0xf9, 0xab, 0x16, 0x9c, 0x5c, 0xf5, 0xc3, 0xc6, 0xdd, 0x4c, 0xec, 0xdc, 0xcb, 0x30, 0x4a, + 0x17, 0x53, 0x6c, 0x04, 0x96, 0x1a, 0x11, 0xb4, 0x02, 0x85, 0x75, 0x3a, 0xad, 0xd8, 0xcd, 0x9b, + 0x6b, 0xd5, 0x6e, 0x81, 0xb7, 0x02, 0x85, 0x75, 0x3a, 0xfb, 0xf7, 0x2c, 0x78, 0xfc, 0xd2, 0xf2, + 0x4a, 0x8d, 0x44, 0xb1, 0x17, 0x27, 0x24, 0x48, 0x3a, 0x62, 0x7f, 0xa9, 0xce, 0xe8, 0x6a, 0x4d, + 0x49, 0x75, 0xc6, 0x2a, 0x6b, 0x85, 0xc0, 0x3e, 0x2c, 0x01, 0xf0, 0xdf, 0xb4, 0xe0, 0xe4, 0x25, + 0x2f, 0xc1, 0xa4, 0x15, 0x66, 0xc3, 0x75, 0x23, 0xd2, 0x0a, 0x63, 0x2f, 0x09, 0xa3, 0x9d, 0x6c, + 0xb8, 0x2e, 0x56, 0x18, 0xac, 0x51, 0xf1, 0x9a, 0xb7, 0xbd, 0x98, 0xb6, 0xb4, 0x64, 0x9a, 0xba, + 0x58, 0xc0, 0xb1, 0xa2, 0xa0, 0x1d, 0x73, 0xbd, 0x88, 0xa9, 0x0c, 0x3b, 0x62, 0x05, 0xab, 0x8e, + 0x55, 0x25, 0x02, 0xa7, 0x34, 0xf6, 0xdf, 0xb3, 0xe0, 0xd4, 0x25, 0xbf, 0x1d, 0x27, 0x24, 0xda, + 0x88, 0x8d, 0xc6, 0xbe, 0x08, 0x15, 0x22, 0x95, 0x7b, 0xd1, 0x56, 0xb5, 0x69, 0x28, 0xad, 0x9f, + 0xc7, 0x0a, 0x2b, 0xba, 0x02, 0x21, 0xa9, 0xfd, 0x05, 0x50, 0xfe, 0x66, 0x09, 0xc6, 0x2f, 0xaf, + 0xaf, 0xd7, 0x2e, 0x91, 0x44, 0x48, 0xc9, 0x7c, 0xa7, 0x14, 0xd6, 0x2c, 0xf2, 0x83, 0x94, 0x9f, + 0x76, 0xe2, 0xf9, 0xf3, 0xfc, 0x4a, 0xc7, 0xfc, 0x5a, 0x90, 0xdc, 0x88, 0xea, 0x49, 0xe4, 0x05, + 0x9b, 0x5d, 0x6d, 0x78, 0x29, 0xcb, 0xcb, 0xbd, 0x64, 0x39, 0x7a, 0x11, 0x86, 0xd8, 0x9d, 0x12, + 0xa9, 0x7c, 0x7c, 0x50, 0xe9, 0x09, 0x0c, 0xba, 0xbf, 0x3b, 0x57, 0xb9, 0x89, 0xd7, 0xf8, 0x1f, + 0x2c, 0x48, 0xd1, 0x5b, 0x30, 0xba, 0x95, 0x24, 0xad, 0xcb, 0xc4, 0x71, 0x49, 0x24, 0xe5, 0xc4, + 0xb9, 0x83, 0xe5, 0x04, 0x1d, 0x0e, 0x5e, 0x20, 0x5d, 0x5a, 0x29, 0x2c, 0xc6, 0x3a, 0x47, 0xbb, + 0x0e, 0x90, 0xe2, 0x1e, 0x90, 0x0d, 0x62, 0xff, 0x7c, 0x09, 0x86, 0x2f, 0x3b, 0x81, 0xeb, 0x93, + 0x08, 0xad, 0xc2, 0x00, 0xb9, 0x4f, 0x1a, 0x62, 0x23, 0xcf, 0x69, 0x7a, 0xba, 0xd9, 0x71, 0xbf, + 0x1a, 0xfd, 0x8f, 0x59, 0x79, 0x84, 0x61, 0x98, 0xb6, 0xfb, 0x92, 0x8a, 0xe4, 0x7e, 0x2e, 0x7f, + 0x14, 0xd4, 0xa4, 0xe0, 0x3b, 0xa5, 0x00, 0x61, 0xc9, 0x88, 0x79, 0xa0, 0x1a, 0xad, 0x3a, 0x15, + 0x6f, 0x49, 0x31, 0xcb, 0x6e, 0x7d, 0xb9, 0xc6, 0xc9, 0x05, 0x5f, 0xee, 0x81, 0x92, 0x40, 0x9c, + 0xb2, 0xb3, 0x2f, 0xc2, 0x34, 0x3b, 0x33, 0x75, 0x92, 0x2d, 0x63, 0xd5, 0xe4, 0x4e, 0x4f, 0xfb, + 0x87, 0x25, 0x38, 0xb1, 0x56, 0x5f, 0xae, 0x9b, 0xbe, 0xc3, 0x8b, 0x30, 0xc6, 0x37, 0x68, 0x3a, + 0xe9, 0x1c, 0x5f, 0x94, 0x57, 0x7e, 0xfe, 0x75, 0x0d, 0x87, 0x0d, 0x4a, 0xf4, 0x38, 0x94, 0xbd, + 0x77, 0x83, 0x6c, 0xe4, 0xdd, 0xda, 0xeb, 0xd7, 0x31, 0x85, 0x53, 0x34, 0xdd, 0xeb, 0xb9, 0x90, + 0x53, 0x68, 0xb5, 0xdf, 0xbf, 0x06, 0x13, 0x5e, 0xdc, 0x88, 0xbd, 0xb5, 0x80, 0x4a, 0x00, 0xa7, + 0x21, 0xa7, 0x6f, 0xaa, 0x9c, 0xd3, 0xa6, 0x2a, 0x2c, 0xce, 0x50, 0x6b, 0x12, 0x77, 0xb0, 0xb0, + 0xbe, 0x90, 0x1b, 0xd2, 0x4d, 0x55, 0xa1, 0x16, 0xeb, 0x5d, 0xcc, 0xe2, 0x78, 0x84, 0x2a, 0xc4, + 0x3b, 0x1c, 0x63, 0x89, 0xb3, 0xdf, 0x81, 0x8a, 0x0a, 0xc5, 0x92, 0x11, 0x88, 0x56, 0x8f, 0x08, + 0xc4, 0x7c, 0xc9, 0x24, 0x1d, 0xbf, 0xe5, 0xae, 0x8e, 0xdf, 0x7f, 0x66, 0x41, 0x1a, 0x4b, 0x82, + 0x30, 0x54, 0x5a, 0x21, 0x3b, 0xc8, 0x89, 0xe4, 0x89, 0xe9, 0x53, 0x39, 0x13, 0x96, 0x2f, 0x18, + 0x3e, 0xa5, 0x6a, 0xb2, 0x2c, 0x4e, 0xd9, 0xa0, 0xab, 0x30, 0xdc, 0x8a, 0x48, 0x3d, 0x61, 0xd7, + 0x07, 0xfa, 0xe0, 0xc8, 0xc7, 0x86, 0x97, 0xc4, 0x92, 0x85, 0xfd, 0x6f, 0x2c, 0x80, 0xab, 0x5e, + 0xd3, 0x4b, 0xb0, 0x13, 0x6c, 0x92, 0x63, 0xb0, 0x0a, 0xaf, 0xc3, 0x40, 0xdc, 0x22, 0x8d, 0x62, + 0x47, 0x71, 0x69, 0xcb, 0xea, 0x2d, 0xd2, 0x48, 0x3f, 0x07, 0xfd, 0x87, 0x19, 0x1f, 0xfb, 0x7b, + 0x00, 0x13, 0x29, 0x19, 0xd5, 0xcc, 0xd1, 0xf3, 0x46, 0xdc, 0xfc, 0xa3, 0x99, 0xb8, 0xf9, 0x0a, + 0xa3, 0xd6, 0x42, 0xe5, 0x13, 0x28, 0x37, 0x9d, 0xfb, 0xc2, 0x10, 0x78, 0xb9, 0x68, 0x83, 0x68, + 0x4d, 0xf3, 0xd7, 0x9c, 0xfb, 0x5c, 0xef, 0x7a, 0x4e, 0x4e, 0xa4, 0x6b, 0xce, 0xfd, 0x7d, 0x7e, + 0xe0, 0xc6, 0x16, 0x2c, 0xb5, 0x3c, 0xbe, 0xfc, 0xc7, 0xe9, 0x7f, 0x26, 0x43, 0x69, 0x75, 0xac, + 0x56, 0x2f, 0x10, 0x7e, 0xcc, 0x3e, 0x6b, 0xf5, 0x82, 0x6c, 0xad, 0x5e, 0x50, 0xa0, 0x56, 0x8f, + 0x05, 0x98, 0x0e, 0x0b, 0xf7, 0x3f, 0x8b, 0xce, 0x1b, 0xbd, 0xf0, 0xb1, 0xbe, 0xaa, 0x16, 0xe7, + 0x08, 0xbc, 0xfa, 0x05, 0xa9, 0x6c, 0x0a, 0x68, 0x6e, 0x13, 0x64, 0xd5, 0xe8, 0xef, 0x5b, 0x30, + 0x21, 0x7e, 0x63, 0xf2, 0x6e, 0x9b, 0xc4, 0x89, 0xd8, 0xd4, 0x3e, 0x75, 0x98, 0xd6, 0x08, 0x16, + 0xbc, 0x51, 0x1f, 0x95, 0x12, 0xc9, 0x44, 0xe6, 0xb6, 0x2d, 0xd3, 0x1e, 0xf4, 0x3d, 0x0b, 0xa6, + 0x9b, 0xce, 0x7d, 0x5e, 0x23, 0x87, 0x61, 0x27, 0xf1, 0x42, 0x11, 0x81, 0xb8, 0xda, 0xef, 0x3c, + 0xe9, 0x60, 0xc4, 0x9b, 0x2b, 0x83, 0x8b, 0xa6, 0xbb, 0x91, 0xe4, 0x36, 0xba, 0x6b, 0x0b, 0x67, + 0x37, 0x60, 0x44, 0x4e, 0xcc, 0x2e, 0x6a, 0x7e, 0x55, 0xdf, 0xbb, 0x73, 0x8c, 0xea, 0x79, 0xe9, + 0x1a, 0x9b, 0x7f, 0xbd, 0xed, 0x04, 0x89, 0x97, 0xec, 0x68, 0x66, 0x01, 0xab, 0x47, 0x4c, 0xc5, + 0x23, 0xad, 0xe7, 0x1d, 0x18, 0xd3, 0xe7, 0xdd, 0x91, 0xd6, 0xf5, 0x2e, 0x9c, 0xec, 0x32, 0xab, + 0x8e, 0xb4, 0xca, 0x7b, 0xf0, 0x68, 0xcf, 0xf9, 0x71, 0x94, 0x15, 0xdb, 0xbf, 0x69, 0xe9, 0xa2, + 0xf3, 0x18, 0x9c, 0x2e, 0xd7, 0x4c, 0xa7, 0xcb, 0xb9, 0xa2, 0x6b, 0xa8, 0x87, 0xe7, 0x65, 0x43, + 0x6f, 0x3e, 0xdd, 0x12, 0xd0, 0x3a, 0x0c, 0xf9, 0x14, 0x22, 0xcf, 0xbc, 0xce, 0xf7, 0xb3, 0x4a, + 0x53, 0xa5, 0x84, 0xc1, 0x63, 0x2c, 0x78, 0xd9, 0xdf, 0xb3, 0x60, 0xe0, 0xcf, 0xf1, 0x56, 0x4f, + 0x07, 0x6b, 0x71, 0x39, 0x7d, 0x1e, 0x3b, 0xf7, 0x56, 0xee, 0x27, 0x24, 0x88, 0x99, 0x0e, 0xda, + 0xeb, 0xd4, 0x7e, 0x94, 0x56, 0x25, 0x03, 0x25, 0x5e, 0x85, 0x71, 0xdf, 0xb9, 0x43, 0x7c, 0xe9, + 0x30, 0xce, 0x5a, 0x6c, 0x57, 0x75, 0x24, 0x36, 0x69, 0x69, 0xe1, 0x0d, 0xdd, 0x9f, 0x2e, 0x94, + 0x24, 0x55, 0xd8, 0x70, 0xb6, 0x63, 0x93, 0x96, 0x9a, 0x0c, 0xf7, 0x9c, 0xa4, 0xb1, 0x25, 0xac, + 0x39, 0xd5, 0xdc, 0xdb, 0x14, 0x88, 0x39, 0x0e, 0x2d, 0xc2, 0xa4, 0x9c, 0xb1, 0xb7, 0xa8, 0x99, + 0x1f, 0x06, 0x42, 0xcf, 0x54, 0x37, 0x83, 0xb1, 0x89, 0xc6, 0x59, 0x7a, 0xf4, 0x71, 0x98, 0xa0, + 0x83, 0x13, 0xb6, 0x13, 0x19, 0x06, 0x32, 0xc8, 0xc2, 0x40, 0x58, 0x14, 0xf1, 0xba, 0x81, 0xc1, + 0x19, 0x4a, 0xfb, 0x2d, 0x38, 0x79, 0x35, 0x74, 0xdc, 0x25, 0xc7, 0x77, 0x82, 0x06, 0x89, 0xd6, + 0x82, 0xcd, 0xdc, 0xe3, 0x6b, 0xfd, 0x88, 0xb9, 0x94, 0x77, 0xc4, 0x6c, 0x47, 0x80, 0xf4, 0x0a, + 0x44, 0x00, 0xd3, 0x9b, 0x30, 0xec, 0xf1, 0xaa, 0xc4, 0xb4, 0x7d, 0x21, 0xcf, 0x1f, 0xd5, 0xd1, + 0x46, 0x2d, 0x20, 0x87, 0x03, 0xb0, 0x64, 0x49, 0x4d, 0x90, 0x6e, 0x0e, 0xac, 0x7c, 0x2b, 0xcf, + 0xfe, 0xeb, 0x16, 0x4c, 0x5e, 0xcf, 0x5c, 0x3b, 0x7d, 0x1a, 0x86, 0x78, 0xf2, 0x82, 0xac, 0x8b, + 0xa5, 0xce, 0xa0, 0x58, 0x60, 0x1f, 0xb8, 0x85, 0xff, 0xcb, 0x25, 0xa8, 0xb0, 0x50, 0xd8, 0x16, + 0x35, 0x27, 0x8e, 0x5e, 0x4d, 0xbd, 0x66, 0xa8, 0xa9, 0x39, 0x56, 0xa6, 0x6a, 0x58, 0x2f, 0x2d, + 0x15, 0xdd, 0x54, 0xd7, 0x31, 0x0b, 0x19, 0x98, 0x29, 0x43, 0x7e, 0x65, 0x6f, 0xc2, 0xbc, 0xbd, + 0x29, 0xaf, 0x6a, 0xb2, 0x43, 0x5f, 0x45, 0xfb, 0xd0, 0x1d, 0xfa, 0xaa, 0x96, 0xf5, 0x10, 0x4e, + 0x35, 0xad, 0xf1, 0x4c, 0x7c, 0x7f, 0x92, 0x05, 0x38, 0x3a, 0xbe, 0xf7, 0x05, 0xa2, 0x6e, 0x35, + 0xcf, 0x89, 0x80, 0x45, 0x01, 0xdd, 0x67, 0x72, 0x46, 0xfc, 0xe3, 0x97, 0xd6, 0xd3, 0x22, 0xf6, + 0x65, 0x98, 0xcc, 0x0c, 0x1d, 0x7a, 0x19, 0x06, 0x5b, 0x5b, 0x4e, 0x4c, 0x32, 0x71, 0x2c, 0x83, + 0x35, 0x0a, 0xdc, 0xdf, 0x9d, 0x9b, 0x50, 0x05, 0x18, 0x04, 0x73, 0x6a, 0xfb, 0x2b, 0x25, 0x18, + 0xb8, 0x1e, 0xba, 0xc7, 0x31, 0xd5, 0x2e, 0x1b, 0x53, 0xed, 0xe9, 0xfc, 0x94, 0x17, 0x3d, 0x67, + 0x59, 0x2d, 0x33, 0xcb, 0xce, 0x15, 0xe0, 0x75, 0xf0, 0x04, 0x6b, 0xc2, 0x28, 0x4b, 0xa9, 0x21, + 0x02, 0x79, 0x5e, 0x34, 0x2c, 0xab, 0xb9, 0x8c, 0x65, 0x35, 0xa9, 0x91, 0x6a, 0xf6, 0xd5, 0x33, + 0x30, 0x2c, 0x02, 0x47, 0xb2, 0xe1, 0x9d, 0x82, 0x16, 0x4b, 0xbc, 0xfd, 0xaf, 0xca, 0x60, 0xa4, + 0xf0, 0x40, 0xbf, 0x63, 0xc1, 0x7c, 0xc4, 0xaf, 0xca, 0xb8, 0xd5, 0x76, 0xe4, 0x05, 0x9b, 0xf5, + 0xc6, 0x16, 0x71, 0xdb, 0xbe, 0x17, 0x6c, 0xae, 0x6d, 0x06, 0xa1, 0x02, 0xaf, 0xdc, 0x27, 0x8d, + 0x36, 0xf3, 0xd3, 0x16, 0xce, 0x1c, 0xa2, 0x0e, 0x4d, 0x2f, 0xec, 0xed, 0xce, 0xcd, 0xe3, 0xbe, + 0x6a, 0xc1, 0x7d, 0xb6, 0x0a, 0xfd, 0x91, 0x05, 0x0b, 0x3c, 0x89, 0x45, 0xf1, 0x9e, 0x14, 0xb2, + 0x48, 0x6b, 0x92, 0x69, 0xca, 0x6e, 0x9d, 0x44, 0xcd, 0xa5, 0x57, 0xc4, 0x20, 0x2f, 0xd4, 0xfa, + 0xab, 0x15, 0xf7, 0xdb, 0x4c, 0xfb, 0xdf, 0x95, 0x61, 0x9c, 0x8e, 0x67, 0x7a, 0x71, 0xfd, 0x65, + 0x63, 0x9a, 0x3c, 0x91, 0x99, 0x26, 0x27, 0x0c, 0xe2, 0x07, 0x73, 0x67, 0x3d, 0x86, 0x13, 0xbe, + 0x13, 0x27, 0x97, 0x89, 0x13, 0x25, 0x77, 0x88, 0xc3, 0xce, 0x26, 0xb3, 0x71, 0x0f, 0x05, 0x8e, + 0x3b, 0x55, 0x30, 0xd2, 0xd5, 0x2c, 0x33, 0xdc, 0xc9, 0x1f, 0x6d, 0x03, 0x62, 0xe7, 0xa0, 0x91, + 0x13, 0xc4, 0xbc, 0x2f, 0x9e, 0xf0, 0xeb, 0xf6, 0x57, 0xeb, 0xac, 0xa8, 0x15, 0x5d, 0xed, 0xe0, + 0x86, 0xbb, 0xd4, 0xa0, 0x9d, 0x74, 0x0f, 0x16, 0x3d, 0xe9, 0x1e, 0xca, 0x89, 0xab, 0xfe, 0xaa, + 0x05, 0x27, 0xe9, 0x67, 0x31, 0x63, 0x70, 0x63, 0x14, 0xc2, 0x24, 0x9d, 0x76, 0x3e, 0x49, 0x24, + 0x4c, 0xac, 0xaf, 0x1c, 0xcd, 0xda, 0xe4, 0x93, 0xaa, 0x6f, 0x57, 0x4c, 0x66, 0x38, 0xcb, 0xdd, + 0xfe, 0x96, 0x05, 0x2c, 0xe2, 0xee, 0x18, 0x36, 0xb3, 0x4b, 0xe6, 0x66, 0x66, 0xe7, 0x4b, 0x8c, + 0x1e, 0xfb, 0xd8, 0x4b, 0x30, 0x45, 0xb1, 0xb5, 0x28, 0xbc, 0xbf, 0x23, 0x15, 0xed, 0x7c, 0x07, + 0xef, 0x57, 0x4b, 0x7c, 0xd9, 0xa8, 0x3b, 0x7f, 0xe8, 0x17, 0x2c, 0x18, 0x69, 0x38, 0x2d, 0xa7, + 0xc1, 0x13, 0x20, 0x15, 0xf0, 0xce, 0x18, 0xe5, 0xe7, 0x97, 0x45, 0x59, 0xee, 0x59, 0xf8, 0x88, + 0xec, 0xba, 0x04, 0xe7, 0x7a, 0x13, 0x54, 0xe5, 0xb3, 0x77, 0x61, 0xdc, 0x60, 0x76, 0xa4, 0x66, + 0xe8, 0x2f, 0x58, 0x5c, 0xe8, 0x2b, 0x53, 0xe1, 0x1e, 0x9c, 0x08, 0xb4, 0xff, 0x54, 0x9c, 0x49, + 0xcd, 0x78, 0xbe, 0xb8, 0x58, 0x67, 0x52, 0x50, 0x8b, 0x2e, 0xcc, 0x30, 0xc4, 0x9d, 0x75, 0xd8, + 0xbf, 0x6a, 0xc1, 0x23, 0x3a, 0xa1, 0x76, 0x49, 0x33, 0xcf, 0x6f, 0x5c, 0x85, 0x91, 0xb0, 0x45, + 0x22, 0x27, 0x35, 0x8b, 0xce, 0xc9, 0xf1, 0xbf, 0x21, 0xe0, 0xfb, 0xbb, 0x73, 0xd3, 0x3a, 0x77, + 0x09, 0xc7, 0xaa, 0x24, 0xb2, 0x61, 0x88, 0x8d, 0x4b, 0x2c, 0xae, 0xd7, 0xb2, 0x84, 0x40, 0xec, + 0x50, 0x25, 0xc6, 0x02, 0x63, 0xff, 0x2d, 0x8b, 0x4f, 0x37, 0xbd, 0xe9, 0xe8, 0x8b, 0x30, 0xd5, + 0xa4, 0x16, 0xd4, 0xca, 0xfd, 0x16, 0xdd, 0x48, 0xd9, 0x71, 0xb2, 0x55, 0x64, 0xfb, 0xe8, 0xd1, + 0xdd, 0xa5, 0x19, 0xd1, 0xfa, 0xa9, 0x6b, 0x19, 0xb6, 0xb8, 0xa3, 0x22, 0xfb, 0x1f, 0x96, 0xf8, + 0x9a, 0x65, 0x3a, 0xdc, 0x33, 0x30, 0xdc, 0x0a, 0xdd, 0xe5, 0xb5, 0x2a, 0x16, 0x63, 0xa5, 0x84, + 0x4e, 0x8d, 0x83, 0xb1, 0xc4, 0xa3, 0x0b, 0x00, 0xe4, 0x7e, 0x42, 0xa2, 0xc0, 0xf1, 0xd5, 0x31, + 0xb0, 0x52, 0x95, 0x56, 0x14, 0x06, 0x6b, 0x54, 0xb4, 0x4c, 0x2b, 0x0a, 0xb7, 0x3d, 0x97, 0xdd, + 0x2e, 0x28, 0x9b, 0x65, 0x6a, 0x0a, 0x83, 0x35, 0x2a, 0x6a, 0xb7, 0xb6, 0x83, 0x98, 0x6f, 0x63, + 0xce, 0x1d, 0x91, 0xbf, 0x66, 0x24, 0xb5, 0x5b, 0x6f, 0xea, 0x48, 0x6c, 0xd2, 0xa2, 0x2b, 0x30, + 0x94, 0x38, 0xec, 0x70, 0x73, 0xb0, 0x48, 0xa4, 0xc8, 0x3a, 0xa5, 0xd5, 0x13, 0x06, 0xd1, 0xa2, + 0x58, 0xb0, 0xb0, 0xff, 0xa0, 0x02, 0x90, 0x6a, 0x5d, 0xe8, 0x2b, 0x9d, 0x0b, 0xfe, 0xa3, 0x45, + 0x55, 0xb6, 0x07, 0xb7, 0xda, 0xd1, 0x7b, 0x16, 0x8c, 0x3a, 0xbe, 0x1f, 0x36, 0x9c, 0x84, 0x0d, + 0x4f, 0xa9, 0xa8, 0xe8, 0x11, 0x2d, 0x59, 0x4c, 0xcb, 0xf2, 0xc6, 0xbc, 0x28, 0x0f, 0x1c, 0x35, + 0x4c, 0x6e, 0x7b, 0xf4, 0x26, 0xa0, 0x8f, 0x48, 0xad, 0x9d, 0x7f, 0xe1, 0xd9, 0xac, 0xd6, 0x5e, + 0x61, 0x02, 0x57, 0x53, 0xd8, 0xd1, 0x5b, 0x46, 0xbe, 0x97, 0x81, 0x22, 0x57, 0x44, 0x0d, 0x3d, + 0x24, 0x2f, 0xd5, 0x0b, 0xfa, 0xac, 0x1e, 0x52, 0x3d, 0x58, 0xe4, 0x0e, 0xb6, 0xa6, 0x0e, 0xe7, + 0x84, 0x53, 0x27, 0x30, 0xe9, 0x9a, 0x3b, 0xaf, 0x08, 0x0b, 0x7b, 0x21, 0xbf, 0x86, 0xcc, 0x96, + 0x9d, 0xee, 0xb5, 0x19, 0x04, 0xce, 0x56, 0x81, 0x3e, 0xcb, 0x03, 0xde, 0xd7, 0x82, 0x8d, 0x50, + 0x84, 0x86, 0x9d, 0x2f, 0xf0, 0xcd, 0x77, 0xe2, 0x84, 0x34, 0x69, 0x99, 0x74, 0x73, 0xbd, 0x2e, + 0xb8, 0x60, 0xc5, 0x0f, 0xad, 0xc3, 0x10, 0xbb, 0x11, 0x14, 0xcf, 0x8c, 0x14, 0xf1, 0xc4, 0x99, + 0x17, 0x61, 0xd3, 0xf5, 0xc3, 0xfe, 0xc6, 0x58, 0xf0, 0x42, 0x97, 0xe5, 0x55, 0xf8, 0x78, 0x2d, + 0xb8, 0x19, 0x13, 0x76, 0x15, 0xbe, 0xb2, 0xf4, 0xa1, 0xf4, 0x6e, 0x3b, 0x87, 0x77, 0xcd, 0x78, + 0x67, 0x94, 0xa4, 0x8a, 0x8d, 0xf8, 0x2f, 0x13, 0xe9, 0xcd, 0x40, 0x91, 0x86, 0x9a, 0x69, 0xf7, + 0xd2, 0xc1, 0xbe, 0x65, 0x32, 0xc3, 0x59, 0xee, 0xc7, 0xba, 0xa5, 0xce, 0x06, 0x30, 0x95, 0x5d, + 0x94, 0x47, 0xba, 0x85, 0xff, 0x64, 0x00, 0x26, 0xcc, 0xc9, 0x81, 0x16, 0xa0, 0x22, 0x98, 0xa8, + 0xc4, 0x5a, 0x6a, 0x0d, 0x5c, 0x93, 0x08, 0x9c, 0xd2, 0xb0, 0x14, 0x63, 0xac, 0xb8, 0x16, 0x14, + 0x94, 0xa6, 0x18, 0x53, 0x18, 0xac, 0x51, 0x51, 0x4d, 0xf8, 0x4e, 0x18, 0x26, 0x6a, 0x27, 0x50, + 0xf3, 0x66, 0x89, 0x41, 0xb1, 0xc0, 0xd2, 0x1d, 0xe0, 0x2e, 0xfd, 0x98, 0xbe, 0xe9, 0x55, 0x54, + 0x3b, 0xc0, 0x15, 0x1d, 0x89, 0x4d, 0x5a, 0xba, 0xa3, 0x85, 0x31, 0x9b, 0x88, 0x42, 0xdf, 0x4e, + 0x83, 0xac, 0xea, 0xfc, 0x96, 0x9c, 0xc4, 0xa3, 0xcf, 0xc0, 0x23, 0xea, 0x52, 0x1b, 0xe6, 0x5e, + 0x5a, 0x59, 0xe3, 0x90, 0x61, 0x32, 0x3f, 0xb2, 0xdc, 0x9d, 0x0c, 0xf7, 0x2a, 0x8f, 0x5e, 0x83, + 0x09, 0xa1, 0x2b, 0x4b, 0x8e, 0xc3, 0xe6, 0x09, 0xfc, 0x15, 0x03, 0x8b, 0x33, 0xd4, 0xa8, 0x0a, + 0x53, 0x14, 0xc2, 0x94, 0x54, 0xc9, 0x81, 0x5f, 0xce, 0x53, 0x5b, 0xfd, 0x95, 0x0c, 0x1e, 0x77, + 0x94, 0x40, 0x8b, 0x30, 0xc9, 0x95, 0x15, 0x6a, 0x18, 0xb2, 0xef, 0x20, 0xe2, 0x39, 0xd5, 0x42, + 0xb8, 0x61, 0xa2, 0x71, 0x96, 0x1e, 0x5d, 0x84, 0x31, 0x27, 0x6a, 0x6c, 0x79, 0x09, 0x69, 0x24, + 0xed, 0x88, 0x27, 0x9a, 0xd0, 0x42, 0x18, 0x16, 0x35, 0x1c, 0x36, 0x28, 0xed, 0x2f, 0xc0, 0xc9, + 0x2e, 0xc1, 0xe3, 0x74, 0xe2, 0x38, 0x2d, 0x4f, 0xf6, 0x29, 0x13, 0x2e, 0xb5, 0x58, 0x5b, 0x93, + 0xbd, 0xd1, 0xa8, 0xe8, 0xec, 0x64, 0xee, 0x69, 0x2d, 0xef, 0xa5, 0x9a, 0x9d, 0xab, 0x12, 0x81, + 0x53, 0x1a, 0xfb, 0xcf, 0x2a, 0xa0, 0x79, 0x6f, 0x0a, 0x84, 0xc8, 0x5c, 0x84, 0x31, 0x99, 0xca, + 0x55, 0x4b, 0xa1, 0xa8, 0xba, 0x79, 0x49, 0xc3, 0x61, 0x83, 0x92, 0xb6, 0x2d, 0x90, 0x3e, 0xa9, + 0x6c, 0x70, 0x96, 0x72, 0x56, 0xe1, 0x94, 0x06, 0x9d, 0x87, 0x91, 0x98, 0xf8, 0x1b, 0x57, 0xbd, + 0xe0, 0xae, 0x98, 0xd8, 0x4a, 0x32, 0xd7, 0x05, 0x1c, 0x2b, 0x0a, 0xb4, 0x04, 0xe5, 0xb6, 0xe7, + 0x8a, 0xa9, 0x2c, 0xd5, 0x86, 0xf2, 0xcd, 0xb5, 0xea, 0xfe, 0xee, 0xdc, 0x13, 0xbd, 0xf2, 0xda, + 0x52, 0xfb, 0x3c, 0x9e, 0xa7, 0xcb, 0x8f, 0x16, 0xee, 0xe6, 0xa7, 0x1f, 0xea, 0xd3, 0x4f, 0x7f, + 0x01, 0x40, 0xf4, 0x5a, 0xce, 0xe5, 0x72, 0xfa, 0xd5, 0x2e, 0x29, 0x0c, 0xd6, 0xa8, 0xa8, 0x95, + 0xdf, 0x88, 0x88, 0x23, 0x0d, 0x61, 0x1e, 0xd4, 0x3c, 0x72, 0x78, 0x2b, 0x7f, 0x39, 0xcb, 0x0c, + 0x77, 0xf2, 0x47, 0x21, 0x9c, 0x70, 0xe9, 0x42, 0x32, 0x2a, 0xad, 0xf4, 0x1f, 0x49, 0x4d, 0x2b, + 0xac, 0x66, 0x19, 0xe1, 0x4e, 0xde, 0xe8, 0xf3, 0x30, 0x2b, 0x81, 0x9d, 0xd7, 0x56, 0xd9, 0x72, + 0x29, 0x2f, 0x9d, 0xd9, 0xdb, 0x9d, 0x9b, 0xad, 0xf6, 0xa4, 0xc2, 0x07, 0x70, 0x40, 0x6f, 0xc2, + 0x10, 0x3b, 0xd7, 0x89, 0x67, 0x46, 0xd9, 0x8e, 0xf7, 0x52, 0x91, 0x78, 0x7c, 0x3a, 0xeb, 0xe7, + 0xd9, 0xe9, 0x90, 0x88, 0x34, 0x4d, 0x0f, 0xcb, 0x18, 0x10, 0x0b, 0x9e, 0xa8, 0x05, 0xa3, 0x4e, + 0x10, 0x84, 0x89, 0xc3, 0x15, 0xb1, 0xb1, 0x22, 0xba, 0xa4, 0x56, 0xc5, 0x62, 0x5a, 0x96, 0xd7, + 0xa3, 0x82, 0xd7, 0x34, 0x0c, 0xd6, 0xab, 0x40, 0xf7, 0x60, 0x32, 0xbc, 0x47, 0x05, 0xa6, 0x3c, + 0xda, 0x88, 0x67, 0xc6, 0xcd, 0x8e, 0xe5, 0x38, 0x6a, 0x8d, 0xc2, 0x9a, 0x24, 0x33, 0x99, 0xe2, + 0x6c, 0x2d, 0x68, 0xde, 0x70, 0x57, 0x4f, 0xa4, 0xf1, 0xd4, 0xa9, 0xbb, 0x5a, 0xf7, 0x4e, 0xb3, + 0xab, 0xd1, 0x3c, 0x86, 0x92, 0x49, 0x84, 0xc9, 0xcc, 0xd5, 0xe8, 0x14, 0x85, 0x75, 0xba, 0xd9, + 0x8f, 0xc1, 0xa8, 0x36, 0xf0, 0xfd, 0x04, 0xee, 0xce, 0xbe, 0x06, 0x53, 0xd9, 0x01, 0xed, 0x2b, + 0xf0, 0xf7, 0x7f, 0x95, 0x60, 0xb2, 0xcb, 0xb9, 0xd1, 0x5d, 0x8f, 0x05, 0x9f, 0x1b, 0xa2, 0xef, + 0x8a, 0x17, 0xb8, 0x98, 0x61, 0x4c, 0x01, 0x56, 0x2a, 0x20, 0xc0, 0xa4, 0x34, 0x2d, 0xf7, 0x94, + 0xa6, 0x42, 0x68, 0x0d, 0xbc, 0x1f, 0xa1, 0x65, 0xee, 0x13, 0x83, 0x85, 0xf6, 0x89, 0x07, 0x20, + 0xe8, 0x8c, 0xad, 0x66, 0xb8, 0xc0, 0x56, 0xf3, 0xcd, 0x12, 0x4c, 0xa5, 0x41, 0xce, 0x22, 0xbf, + 0xf3, 0xd1, 0x1f, 0x43, 0xac, 0x1b, 0xc7, 0x10, 0x79, 0xe9, 0x9b, 0x33, 0xed, 0xeb, 0x79, 0x24, + 0xf1, 0x66, 0xe6, 0x48, 0xe2, 0xa5, 0x3e, 0xf9, 0x1e, 0x7c, 0x3c, 0xf1, 0xdd, 0x12, 0x9c, 0xca, + 0x16, 0x59, 0xf6, 0x1d, 0xaf, 0x79, 0x0c, 0xe3, 0xf5, 0x19, 0x63, 0xbc, 0x5e, 0xe9, 0xaf, 0x5f, + 0xac, 0x91, 0x3d, 0x07, 0xcd, 0xc9, 0x0c, 0xda, 0xc7, 0x0e, 0xc3, 0xfc, 0xe0, 0x91, 0xfb, 0x7d, + 0x0b, 0x1e, 0xed, 0x5a, 0xee, 0x18, 0x1c, 0xaf, 0x6f, 0x98, 0x8e, 0xd7, 0x17, 0x0f, 0xd1, 0xbb, + 0x1e, 0x9e, 0xd8, 0x5f, 0x2b, 0xf7, 0xe8, 0x15, 0x73, 0x4d, 0xdd, 0x80, 0x51, 0xa7, 0xd1, 0x20, + 0x71, 0x7c, 0x2d, 0x74, 0x55, 0x92, 0xa5, 0xe7, 0xd9, 0xde, 0x92, 0x82, 0xf7, 0x77, 0xe7, 0x66, + 0xb3, 0x2c, 0x52, 0x34, 0xd6, 0x39, 0x98, 0xe9, 0xdf, 0x4a, 0x47, 0x94, 0xfe, 0xed, 0x02, 0xc0, + 0xb6, 0xb2, 0x62, 0xb3, 0x1e, 0x2f, 0xcd, 0xbe, 0xd5, 0xa8, 0xd0, 0x5f, 0x66, 0x1a, 0x21, 0x0f, + 0xd2, 0x18, 0x30, 0xef, 0x4b, 0xe6, 0x7c, 0x3f, 0x3d, 0xe0, 0x83, 0x5f, 0xcb, 0x54, 0xde, 0x41, + 0xc5, 0x12, 0x7d, 0x0a, 0xa6, 0x62, 0x7e, 0xf9, 0x7f, 0xd9, 0x77, 0x62, 0x16, 0xdd, 0x2f, 0xe4, + 0x29, 0xbb, 0x61, 0x59, 0xcf, 0xe0, 0x70, 0x07, 0xb5, 0xfd, 0x9d, 0x32, 0x7c, 0xf0, 0x80, 0x69, + 0x8b, 0x16, 0xcd, 0x53, 0xdb, 0xe7, 0xb2, 0xfe, 0x9f, 0xd9, 0xae, 0x85, 0x0d, 0x87, 0x50, 0xe6, + 0x6b, 0x97, 0xde, 0xf7, 0xd7, 0xfe, 0xba, 0xee, 0xad, 0xe3, 0x71, 0x9b, 0x97, 0x0e, 0xbd, 0x30, + 0x7f, 0x5a, 0x9d, 0xf5, 0x5f, 0xb6, 0xe0, 0x89, 0xae, 0xdd, 0x32, 0xa2, 0x44, 0x16, 0xa0, 0xd2, + 0xa0, 0x40, 0xed, 0x2e, 0x4e, 0x7a, 0x09, 0x4e, 0x22, 0x70, 0x4a, 0x63, 0x04, 0x83, 0x94, 0x72, + 0x83, 0x41, 0x7e, 0xd7, 0x82, 0xe9, 0x6c, 0x23, 0x8e, 0x41, 0x6e, 0xd5, 0x4d, 0xb9, 0x35, 0xdf, + 0xdf, 0xc7, 0xef, 0x21, 0xb2, 0xde, 0x9b, 0x80, 0xd3, 0x1d, 0xbb, 0x1e, 0x1f, 0xc5, 0x9f, 0xb3, + 0xe0, 0xc4, 0x26, 0xd3, 0xde, 0xb5, 0x0b, 0x4f, 0xa2, 0x5f, 0x39, 0xb7, 0xc4, 0x0e, 0xbc, 0x27, + 0xc5, 0x6d, 0x91, 0x0e, 0x12, 0xdc, 0x59, 0x19, 0xfa, 0x9a, 0x05, 0xd3, 0xce, 0xbd, 0xb8, 0xe3, + 0xf5, 0x11, 0x31, 0x91, 0x5e, 0xcb, 0x71, 0x96, 0xe5, 0xbc, 0x5b, 0xb2, 0x34, 0xb3, 0xb7, 0x3b, + 0x37, 0xdd, 0x8d, 0x0a, 0x77, 0xad, 0x95, 0x7e, 0xdf, 0x2d, 0x71, 0x9d, 0xa2, 0xd8, 0xd5, 0xbd, + 0x6e, 0x97, 0x2f, 0xb8, 0x58, 0x93, 0x18, 0xac, 0x38, 0xa2, 0xb7, 0xa1, 0xb2, 0x29, 0xef, 0x38, + 0x65, 0xc5, 0x66, 0x8f, 0x61, 0xee, 0x76, 0x25, 0x8a, 0xc7, 0xee, 0x2b, 0x14, 0x4e, 0x99, 0xa2, + 0xcb, 0x50, 0x0e, 0x36, 0x62, 0x71, 0x9b, 0x38, 0x2f, 0x06, 0xc8, 0x8c, 0xbc, 0xe2, 0x17, 0x30, + 0xaf, 0xaf, 0xd6, 0x31, 0x65, 0x41, 0x39, 0x45, 0x77, 0x5c, 0xe1, 0x25, 0xce, 0xe1, 0x84, 0x97, + 0xaa, 0x9d, 0x9c, 0xf0, 0x52, 0x15, 0x53, 0x16, 0xa8, 0x06, 0x83, 0xec, 0xb2, 0x86, 0x70, 0x01, + 0xe7, 0x5c, 0x39, 0xef, 0xb8, 0x92, 0xc2, 0xb3, 0x14, 0x32, 0x30, 0xe6, 0x8c, 0xd0, 0x3a, 0x0c, + 0x35, 0x58, 0xa2, 0x7d, 0x61, 0x9b, 0xe7, 0x25, 0x63, 0xe8, 0x48, 0xca, 0xcf, 0xcf, 0xbd, 0x38, + 0x1c, 0x0b, 0x5e, 0x8c, 0x2b, 0x69, 0x6d, 0x6d, 0xc4, 0xc2, 0xf8, 0xce, 0xe3, 0xda, 0xf1, 0x64, + 0x82, 0xe0, 0xca, 0xe0, 0x58, 0xf0, 0x42, 0x55, 0x28, 0x6d, 0x34, 0x44, 0xb2, 0xd3, 0x1c, 0xd7, + 0xaf, 0x79, 0x9b, 0x76, 0x69, 0x68, 0x6f, 0x77, 0xae, 0xb4, 0xba, 0x8c, 0x4b, 0x1b, 0x0d, 0xf4, + 0x06, 0x0c, 0x6f, 0xf0, 0xfb, 0x91, 0x22, 0xb1, 0xe9, 0x0b, 0x79, 0x97, 0x38, 0x3b, 0x2e, 0x53, + 0xf2, 0xfb, 0x19, 0x02, 0x81, 0x25, 0x3b, 0x96, 0xf3, 0x4d, 0xdd, 0xf8, 0x14, 0x99, 0x4d, 0xe7, + 0xfb, 0xbb, 0x21, 0x2a, 0x6c, 0x52, 0x05, 0xc5, 0x1a, 0x47, 0x3a, 0xe7, 0x1d, 0xf9, 0x66, 0x08, + 0xcb, 0x6a, 0x9a, 0x3b, 0xe7, 0xbb, 0x3e, 0x31, 0xc2, 0xe7, 0xbc, 0x42, 0xe1, 0x94, 0x29, 0x6a, + 0xc3, 0xf8, 0x76, 0xdc, 0xda, 0x22, 0x72, 0xe9, 0xb3, 0x54, 0xa7, 0xa3, 0x17, 0x3e, 0x91, 0x93, + 0xbf, 0x56, 0x14, 0xf1, 0xa2, 0xa4, 0xed, 0xf8, 0x1d, 0x12, 0x8c, 0x25, 0xd9, 0xba, 0xa5, 0xb3, + 0xc5, 0x66, 0x2d, 0xf4, 0x93, 0xbc, 0xdb, 0x0e, 0xef, 0xec, 0x24, 0x44, 0xa4, 0x42, 0xcd, 0xf9, + 0x24, 0xaf, 0x73, 0xe2, 0xce, 0x4f, 0x22, 0x10, 0x58, 0xb2, 0x53, 0x43, 0xc6, 0xa4, 0xf1, 0x54, + 0xe1, 0x21, 0xeb, 0xe8, 0x43, 0x3a, 0x64, 0x4c, 0xfa, 0xa6, 0x4c, 0x99, 0xd4, 0x6d, 0x6d, 0x85, + 0x49, 0x18, 0x64, 0x64, 0xff, 0x89, 0x22, 0x52, 0xb7, 0xd6, 0xa5, 0x64, 0xa7, 0xd4, 0xed, 0x46, + 0x85, 0xbb, 0xd6, 0x8a, 0x02, 0x98, 0x68, 0x85, 0x51, 0x72, 0x2f, 0x8c, 0xe4, 0x3c, 0x44, 0x85, + 0x6c, 0x44, 0xa3, 0x8c, 0xa8, 0x9b, 0x85, 0xe1, 0x9a, 0x18, 0x9c, 0xe1, 0x6e, 0xff, 0xea, 0x50, + 0xe7, 0xf6, 0xce, 0x14, 0xf8, 0xbf, 0xd9, 0x79, 0x5e, 0xfa, 0xa9, 0xfe, 0xed, 0xd4, 0x07, 0x78, + 0x72, 0xfa, 0x35, 0x0b, 0x4e, 0xb7, 0xba, 0x6e, 0xde, 0x62, 0x83, 0xec, 0xd7, 0xdc, 0xe5, 0x83, + 0xa4, 0xf2, 0x0a, 0x77, 0xc7, 0xe3, 0x1e, 0x75, 0x66, 0x55, 0xde, 0xf2, 0xfb, 0x56, 0x79, 0x6f, + 0xc3, 0x08, 0xd3, 0xd1, 0xd2, 0x8c, 0x24, 0x7d, 0x26, 0xef, 0x60, 0x5b, 0xed, 0xb2, 0x60, 0x81, + 0x15, 0x33, 0x3a, 0x70, 0x8f, 0x67, 0x3b, 0x81, 0x09, 0x43, 0x8b, 0xdc, 0xbb, 0xdc, 0x9e, 0x58, + 0x15, 0x23, 0xf1, 0x78, 0xed, 0x20, 0xe2, 0xfd, 0x3c, 0x02, 0x7c, 0x70, 0x65, 0xa8, 0xda, 0xc5, + 0xa0, 0x19, 0x32, 0x0f, 0x47, 0xf2, 0x8d, 0x9a, 0xe3, 0x55, 0xc4, 0xff, 0x91, 0xd5, 0x45, 0x6f, + 0xe4, 0xc6, 0xd3, 0x27, 0x4c, 0xe3, 0xe9, 0xe9, 0xac, 0xf1, 0xd4, 0xe1, 0x32, 0x31, 0xec, 0xa6, + 0xe2, 0xd9, 0x38, 0x8b, 0xa6, 0x5c, 0xb1, 0x7d, 0x38, 0x9b, 0x27, 0x94, 0x58, 0xc0, 0x94, 0xab, + 0x8e, 0x0a, 0xd3, 0x80, 0x29, 0x77, 0xad, 0x8a, 0x19, 0xa6, 0xe8, 0xad, 0x7d, 0xfb, 0xe7, 0x4b, + 0x50, 0xae, 0x85, 0xee, 0x31, 0xb8, 0x80, 0x2e, 0x19, 0x2e, 0xa0, 0xa7, 0x72, 0x5f, 0x7a, 0xeb, + 0xe9, 0xf0, 0xb9, 0x91, 0x71, 0xf8, 0x7c, 0x38, 0x9f, 0xd5, 0xc1, 0xee, 0x9d, 0xef, 0x95, 0x41, + 0x7f, 0xab, 0x0e, 0xfd, 0xa7, 0xc3, 0xc4, 0xd1, 0x96, 0x8b, 0x3d, 0x5f, 0x27, 0xea, 0x60, 0xf1, + 0x56, 0xf2, 0xf6, 0xdd, 0x4f, 0x6d, 0x38, 0xed, 0x6d, 0xe2, 0x6d, 0x6e, 0x25, 0xc4, 0xcd, 0x76, + 0xec, 0xf8, 0xc2, 0x69, 0xff, 0xd4, 0x82, 0xc9, 0x4c, 0xed, 0xc8, 0xef, 0x76, 0x6d, 0xe7, 0x90, + 0x4e, 0x9d, 0x13, 0xb9, 0xf7, 0x7c, 0xe6, 0x01, 0x94, 0x6f, 0x5e, 0x3a, 0x4e, 0x98, 0x0e, 0xa9, + 0x9c, 0xf7, 0x31, 0xd6, 0x28, 0xd0, 0xcb, 0x30, 0x9a, 0x84, 0xad, 0xd0, 0x0f, 0x37, 0x77, 0xae, + 0x10, 0x99, 0x4f, 0x42, 0x9d, 0x6b, 0xac, 0xa7, 0x28, 0xac, 0xd3, 0xd9, 0xdf, 0x2f, 0x43, 0xf6, + 0xa5, 0xc3, 0xbf, 0x98, 0xa7, 0x3f, 0x3d, 0xf3, 0xf4, 0x0f, 0x2d, 0x98, 0xa2, 0xb5, 0xb3, 0x00, + 0x17, 0x19, 0xf6, 0xaa, 0x9e, 0x06, 0xb0, 0x0e, 0x78, 0x1a, 0xe0, 0x69, 0x2a, 0xed, 0xdc, 0xb0, + 0x9d, 0x08, 0x57, 0x8f, 0x26, 0xc4, 0x28, 0x14, 0x0b, 0xac, 0xa0, 0x23, 0x51, 0x24, 0xee, 0x07, + 0xe9, 0x74, 0x24, 0x8a, 0xb0, 0xc0, 0xca, 0x97, 0x03, 0x06, 0x7a, 0xbc, 0x1c, 0xc0, 0x32, 0x32, + 0x89, 0xa0, 0x0a, 0xa1, 0x56, 0x68, 0x19, 0x99, 0x64, 0xb4, 0x45, 0x4a, 0x63, 0x7f, 0xbb, 0x0c, + 0x63, 0xb5, 0xd0, 0x4d, 0xe3, 0xd9, 0x5f, 0x32, 0xe2, 0xd9, 0xcf, 0x66, 0xe2, 0xd9, 0xa7, 0x74, + 0xda, 0x07, 0x13, 0xce, 0x2e, 0x32, 0x77, 0xb1, 0xb7, 0x2d, 0x0e, 0x19, 0xca, 0x6e, 0x64, 0xee, + 0x52, 0x8c, 0xb0, 0xc9, 0xf7, 0x67, 0x29, 0x84, 0xfd, 0xff, 0x58, 0x30, 0x51, 0x0b, 0x5d, 0x3a, + 0x41, 0x7f, 0x96, 0x66, 0xa3, 0x9e, 0xef, 0x6b, 0xe8, 0x80, 0x7c, 0x5f, 0xff, 0xc2, 0x82, 0xe1, + 0x5a, 0xe8, 0x1e, 0x83, 0x1b, 0x74, 0xd5, 0x74, 0x83, 0x3e, 0x91, 0x2b, 0x79, 0x7b, 0x78, 0x3e, + 0xbf, 0x53, 0x86, 0x71, 0xda, 0xe2, 0x70, 0x53, 0x7e, 0x2f, 0x63, 0x6c, 0xac, 0x02, 0x63, 0x43, + 0x55, 0xc2, 0xd0, 0xf7, 0xc3, 0x7b, 0xd9, 0x6f, 0xb7, 0xca, 0xa0, 0x58, 0x60, 0xd1, 0x79, 0x18, + 0x69, 0x45, 0x64, 0xdb, 0x0b, 0xdb, 0x71, 0xf6, 0xae, 0x61, 0x4d, 0xc0, 0xb1, 0xa2, 0x40, 0x2f, + 0xc1, 0x58, 0xec, 0x05, 0x0d, 0x22, 0x43, 0x2e, 0x06, 0x58, 0xc8, 0x05, 0x4f, 0xad, 0xa8, 0xc1, + 0xb1, 0x41, 0x85, 0x6e, 0x43, 0x85, 0xfd, 0x67, 0x2b, 0xa8, 0xff, 0xd4, 0xff, 0x3c, 0x9f, 0x98, + 0x64, 0x80, 0x53, 0x5e, 0xe8, 0x02, 0x40, 0x22, 0x83, 0x43, 0x62, 0x91, 0x15, 0x45, 0xe9, 0xa5, + 0x2a, 0x6c, 0x24, 0xc6, 0x1a, 0x15, 0x7a, 0x0e, 0x2a, 0x89, 0xe3, 0xf9, 0x57, 0xbd, 0x80, 0xc4, + 0x22, 0xb8, 0x46, 0xa4, 0x49, 0x16, 0x40, 0x9c, 0xe2, 0xe9, 0x7e, 0xcf, 0x6e, 0x3a, 0xf3, 0x67, + 0x45, 0x46, 0x18, 0x35, 0xdb, 0xef, 0xaf, 0x2a, 0x28, 0xd6, 0x28, 0xec, 0x8b, 0x70, 0xaa, 0x16, + 0xba, 0xd4, 0x88, 0x5f, 0x0d, 0xa3, 0x7b, 0x4e, 0xe4, 0xca, 0xef, 0x37, 0x27, 0xb3, 0xf3, 0xd2, + 0x3d, 0x79, 0x90, 0x7b, 0x06, 0x8d, 0x6c, 0xbb, 0x2f, 0xb2, 0x1d, 0xbf, 0xcf, 0x8b, 0x12, 0x3f, + 0x2a, 0x01, 0xaa, 0xb1, 0xf0, 0x15, 0xe3, 0x15, 0x9a, 0x2d, 0x98, 0x88, 0xc9, 0x55, 0x2f, 0x68, + 0xdf, 0x17, 0xac, 0x8a, 0xdd, 0x4c, 0xa9, 0xaf, 0xe8, 0x65, 0xb8, 0x3f, 0xc2, 0x84, 0xe1, 0x0c, + 0x5f, 0x3a, 0x98, 0x51, 0x3b, 0x58, 0x8c, 0x6f, 0xc6, 0x24, 0x12, 0xaf, 0xae, 0xb0, 0xc1, 0xc4, + 0x12, 0x88, 0x53, 0x3c, 0x9d, 0x3c, 0xec, 0xcf, 0xf5, 0x30, 0xc0, 0x61, 0x98, 0xc8, 0xe9, 0xc6, + 0xb2, 0xf0, 0x6b, 0x70, 0x6c, 0x50, 0xa1, 0x55, 0x40, 0x71, 0xbb, 0xd5, 0xf2, 0xd9, 0x89, 0xa0, + 0xe3, 0x5f, 0x8a, 0xc2, 0x76, 0x8b, 0x47, 0x31, 0x8b, 0x04, 0xf6, 0xf5, 0x0e, 0x2c, 0xee, 0x52, + 0x82, 0x0a, 0x8b, 0x8d, 0x98, 0xfd, 0x16, 0xd7, 0x9e, 0xb9, 0x57, 0xb1, 0xce, 0x40, 0x58, 0xe2, + 0xec, 0x2f, 0xb1, 0x0d, 0x8e, 0x3d, 0x87, 0x91, 0xb4, 0x23, 0x82, 0x9a, 0x30, 0xde, 0x62, 0x9b, + 0x58, 0x12, 0x85, 0xbe, 0x4f, 0xa4, 0x7e, 0x79, 0xb8, 0x00, 0x1a, 0x9e, 0x00, 0x5f, 0x67, 0x87, + 0x4d, 0xee, 0xf6, 0x2f, 0x4e, 0x30, 0x59, 0x25, 0x0e, 0x65, 0x87, 0x45, 0xa8, 0xac, 0xd0, 0xe4, + 0x3e, 0x54, 0xe4, 0x61, 0xab, 0x74, 0x1f, 0x10, 0x81, 0xb7, 0x58, 0x72, 0x41, 0x9f, 0x63, 0x81, + 0xe0, 0x5c, 0x40, 0x14, 0x7f, 0xae, 0x8f, 0xd3, 0x1b, 0x41, 0xe0, 0x82, 0x05, 0xd6, 0xd8, 0xa1, + 0xab, 0x30, 0x2e, 0x5e, 0x4f, 0x10, 0x6e, 0x8a, 0xb2, 0x61, 0x62, 0x8f, 0x63, 0x1d, 0xb9, 0x9f, + 0x05, 0x60, 0xb3, 0x30, 0xda, 0x84, 0xc7, 0xb5, 0xd7, 0x81, 0xba, 0x04, 0x7b, 0x71, 0xc9, 0xf3, + 0xc4, 0xde, 0xee, 0xdc, 0xe3, 0xeb, 0x07, 0x11, 0xe2, 0x83, 0xf9, 0xa0, 0x1b, 0x70, 0xca, 0x69, + 0x24, 0xde, 0x36, 0xa9, 0x12, 0xc7, 0xf5, 0xbd, 0x80, 0x98, 0x77, 0xe3, 0x1f, 0xdd, 0xdb, 0x9d, + 0x3b, 0xb5, 0xd8, 0x8d, 0x00, 0x77, 0x2f, 0x87, 0x3e, 0x01, 0x15, 0x37, 0x88, 0xc5, 0x18, 0x0c, + 0x19, 0x8f, 0x61, 0x55, 0xaa, 0xd7, 0xeb, 0xaa, 0xff, 0xe9, 0x1f, 0x9c, 0x16, 0x40, 0xef, 0xf2, + 0xc7, 0xde, 0x95, 0x35, 0xc3, 0x1f, 0x61, 0x7b, 0xa5, 0x90, 0xfd, 0x6c, 0xdc, 0x58, 0xe1, 0x1e, + 0x3c, 0x15, 0x54, 0x69, 0x5c, 0x66, 0x31, 0xaa, 0x40, 0x9f, 0x06, 0x14, 0x93, 0x68, 0xdb, 0x6b, + 0x90, 0xc5, 0x06, 0xcb, 0x47, 0xca, 0x7c, 0x3c, 0x23, 0xc6, 0xed, 0x02, 0x54, 0xef, 0xa0, 0xc0, + 0x5d, 0x4a, 0xa1, 0xcb, 0x54, 0xf2, 0xe8, 0x50, 0x11, 0x03, 0x2b, 0x15, 0xc3, 0x99, 0x2a, 0x69, + 0x45, 0xa4, 0xe1, 0x24, 0xc4, 0x35, 0x39, 0xe2, 0x4c, 0x39, 0xba, 0x2f, 0xa9, 0x94, 0xf3, 0x60, + 0x46, 0x6e, 0x76, 0xa6, 0x9d, 0xa7, 0x76, 0xd6, 0x56, 0x18, 0x27, 0xd7, 0x49, 0x72, 0x2f, 0x8c, + 0xee, 0xb2, 0x93, 0x86, 0x11, 0x2d, 0xb9, 0x5b, 0x8a, 0xc2, 0x3a, 0x1d, 0xd5, 0xa1, 0xd8, 0x11, + 0xd7, 0x5a, 0x95, 0x9d, 0x1f, 0x8c, 0xa4, 0x6b, 0xe7, 0x32, 0x07, 0x63, 0x89, 0x97, 0xa4, 0x6b, + 0xb5, 0x65, 0x76, 0x16, 0x90, 0x21, 0x5d, 0xab, 0x2d, 0x63, 0x89, 0x47, 0x61, 0xe7, 0x93, 0x63, + 0x13, 0x45, 0xce, 0x65, 0x3a, 0x25, 0x79, 0xc1, 0x57, 0xc7, 0xee, 0xc3, 0x94, 0x7a, 0xf6, 0x8c, + 0xe7, 0xdd, 0x8c, 0x67, 0x26, 0x8b, 0x3c, 0x35, 0xdf, 0x35, 0x7d, 0xa7, 0xf2, 0xeb, 0xad, 0x65, + 0x78, 0xe2, 0x8e, 0x5a, 0x8c, 0x1c, 0x0f, 0x53, 0xb9, 0xcf, 0x08, 0x2c, 0x40, 0x25, 0x6e, 0xdf, + 0x71, 0xc3, 0xa6, 0xe3, 0x05, 0xcc, 0x61, 0xaf, 0x3f, 0x9c, 0x2e, 0x11, 0x38, 0xa5, 0x41, 0x35, + 0x18, 0x71, 0x84, 0x09, 0x27, 0x1c, 0xeb, 0x39, 0x77, 0xc0, 0xa5, 0xc1, 0xc7, 0xbd, 0xab, 0xf2, + 0x1f, 0x56, 0x5c, 0xd0, 0xab, 0x30, 0x2e, 0xae, 0x30, 0x91, 0x88, 0xb5, 0xfa, 0xa4, 0x19, 0xee, + 0x5e, 0x97, 0x48, 0x36, 0xc1, 0x4c, 0x5a, 0xb4, 0x09, 0x13, 0x94, 0x4b, 0x2a, 0x00, 0x67, 0xa6, + 0xfb, 0x93, 0xa1, 0x5a, 0xc2, 0x66, 0x9d, 0x0d, 0xce, 0xb0, 0x45, 0x2e, 0x3c, 0xe6, 0xb4, 0x93, + 0xb0, 0x49, 0x57, 0x82, 0xb9, 0x4e, 0xd6, 0xc3, 0xbb, 0x24, 0x98, 0x39, 0xc5, 0x66, 0xe0, 0xd9, + 0xbd, 0xdd, 0xb9, 0xc7, 0x16, 0x0f, 0xa0, 0xc3, 0x07, 0x72, 0x41, 0x6f, 0xc1, 0x68, 0x12, 0xfa, + 0x22, 0x82, 0x38, 0x9e, 0x39, 0x5d, 0x24, 0xf3, 0xcc, 0xba, 0x2a, 0xa0, 0xbb, 0x31, 0x14, 0x13, + 0xac, 0x73, 0x9c, 0xfd, 0x24, 0x9c, 0xe8, 0x10, 0x49, 0x7d, 0x05, 0x59, 0xfe, 0xe7, 0x41, 0xa8, + 0x28, 0x8f, 0x1e, 0x5a, 0x30, 0x9d, 0xb7, 0x8f, 0x66, 0x9d, 0xb7, 0x23, 0x54, 0x81, 0xd2, 0xfd, + 0xb5, 0x9f, 0xef, 0xf2, 0xd0, 0xf5, 0xb3, 0xb9, 0x6b, 0xb0, 0xf8, 0xbd, 0xa7, 0x3e, 0x9e, 0x03, + 0x4f, 0xad, 0xba, 0x81, 0x03, 0xad, 0xba, 0x82, 0x8f, 0xb7, 0x51, 0xfb, 0xad, 0x15, 0xba, 0x6b, + 0xb5, 0xec, 0xdb, 0x44, 0x35, 0x0a, 0xc4, 0x1c, 0xc7, 0xf4, 0x6e, 0xba, 0xa7, 0x32, 0xbd, 0x7b, + 0xf8, 0x90, 0x7a, 0xb7, 0x64, 0x80, 0x53, 0x5e, 0x68, 0x1b, 0x4e, 0x34, 0xcc, 0xa7, 0xa6, 0xd4, + 0x6d, 0xa6, 0xe7, 0xfb, 0x78, 0xea, 0xa9, 0xad, 0xbd, 0x71, 0xb1, 0x9c, 0xe5, 0x87, 0x3b, 0xab, + 0x40, 0xaf, 0xc2, 0xc8, 0xbb, 0x61, 0xcc, 0x8e, 0x15, 0xc4, 0xc6, 0x22, 0x6f, 0x8d, 0x8c, 0xbc, + 0x7e, 0xa3, 0xce, 0xe0, 0xfb, 0xbb, 0x73, 0xa3, 0xb5, 0xd0, 0x95, 0x7f, 0xb1, 0x2a, 0x80, 0xbe, + 0x6c, 0xc1, 0x29, 0x63, 0x9d, 0xa9, 0x96, 0xc3, 0x61, 0x5a, 0xfe, 0xb8, 0xa8, 0xf9, 0xd4, 0x5a, + 0x37, 0x9e, 0xb8, 0x7b, 0x55, 0xf6, 0x6f, 0x73, 0x17, 0xa6, 0x70, 0x6a, 0x90, 0xb8, 0xed, 0x1f, + 0x47, 0xbe, 0xf9, 0x1b, 0x86, 0xbf, 0xe5, 0x01, 0x38, 0xd1, 0xff, 0xa3, 0xc5, 0x9c, 0xe8, 0xeb, + 0xa4, 0xd9, 0xf2, 0x9d, 0xe4, 0x38, 0x62, 0x70, 0x3f, 0x07, 0x23, 0x89, 0xa8, 0xad, 0x58, 0xb2, + 0x7c, 0xad, 0x79, 0xec, 0x70, 0x41, 0x6d, 0x4c, 0x12, 0x8a, 0x15, 0x43, 0xfb, 0xdf, 0xf2, 0xaf, + 0x22, 0x31, 0xc7, 0xe0, 0x29, 0xb8, 0x6e, 0x7a, 0x0a, 0x9e, 0x29, 0xdc, 0x97, 0x1e, 0x1e, 0x83, + 0xef, 0x9b, 0x3d, 0x60, 0xf6, 0xc3, 0x4f, 0xcf, 0x29, 0x8f, 0xfd, 0x2b, 0x16, 0x4c, 0x77, 0x3b, + 0x14, 0xa7, 0x0a, 0x06, 0xb7, 0x5e, 0xd4, 0xf9, 0x97, 0x1a, 0xd5, 0x5b, 0x02, 0x8e, 0x15, 0x45, + 0xe1, 0xec, 0xd5, 0xfd, 0x25, 0x58, 0xba, 0x01, 0xe6, 0xa3, 0x65, 0xe8, 0x35, 0x1e, 0x72, 0xcf, + 0xdb, 0x73, 0xbe, 0xef, 0x70, 0x7b, 0xfb, 0xd7, 0x4b, 0x30, 0xcd, 0x9d, 0xd0, 0x8b, 0xdb, 0xa1, + 0xe7, 0xd6, 0x42, 0x57, 0x5c, 0x40, 0x70, 0x61, 0xac, 0xa5, 0x19, 0x9f, 0xc5, 0x12, 0xb6, 0xe8, + 0xe6, 0x6a, 0xaa, 0xf0, 0xeb, 0x50, 0x6c, 0x70, 0xa5, 0xb5, 0x90, 0x6d, 0xaf, 0xa1, 0x7c, 0x9a, + 0xa5, 0xbe, 0x77, 0x06, 0x55, 0xcb, 0x8a, 0xc6, 0x07, 0x1b, 0x5c, 0x8f, 0xe0, 0xd1, 0x09, 0xfb, + 0x1f, 0x58, 0xf0, 0x48, 0x8f, 0xa4, 0x2e, 0xb4, 0xba, 0x7b, 0xcc, 0xf1, 0x2f, 0x5e, 0xc5, 0x53, + 0xd5, 0xf1, 0xe3, 0x00, 0x2c, 0xb0, 0xe8, 0x0e, 0x00, 0x77, 0xe7, 0xb3, 0x37, 0xd2, 0x4b, 0x45, + 0xa2, 0x86, 0x3a, 0x52, 0x27, 0x68, 0xb7, 0xea, 0xd5, 0xab, 0xe8, 0x1a, 0x57, 0xfb, 0x5b, 0x65, + 0x18, 0xe4, 0x8f, 0x2f, 0xd7, 0x60, 0x78, 0x8b, 0x27, 0x99, 0xed, 0x2f, 0xc7, 0x6d, 0x6a, 0x5c, + 0x70, 0x00, 0x96, 0x6c, 0xd0, 0x35, 0x38, 0x49, 0x77, 0x16, 0xcf, 0xf1, 0xab, 0xc4, 0x77, 0x76, + 0xa4, 0xb5, 0xca, 0x5f, 0x22, 0x90, 0x29, 0xb3, 0x4f, 0xae, 0x75, 0x92, 0xe0, 0x6e, 0xe5, 0xd0, + 0x6b, 0x1d, 0x39, 0xe1, 0x78, 0xf2, 0x5e, 0xa5, 0xa9, 0x1e, 0x9c, 0x17, 0x8e, 0xea, 0xd3, 0xad, + 0x0e, 0xbb, 0x5c, 0x7b, 0xe3, 0xd6, 0xb4, 0xc5, 0x4d, 0x5a, 0x16, 0x5b, 0xd0, 0x66, 0x31, 0x15, + 0xeb, 0x5b, 0x11, 0x89, 0xb7, 0x42, 0xdf, 0x15, 0xcf, 0x33, 0xa6, 0xb1, 0x05, 0x19, 0x3c, 0xee, + 0x28, 0x41, 0xb9, 0x6c, 0x38, 0x9e, 0xdf, 0x8e, 0x48, 0xca, 0x65, 0xc8, 0xe4, 0xb2, 0x9a, 0xc1, + 0xe3, 0x8e, 0x12, 0x74, 0x6e, 0x9d, 0x12, 0xaf, 0x05, 0xca, 0x2b, 0xcc, 0x42, 0x04, 0x7d, 0x06, + 0x86, 0x65, 0x20, 0x7b, 0xa1, 0x4c, 0x1b, 0x22, 0x70, 0x40, 0xbd, 0x3c, 0xa8, 0xbd, 0x4c, 0x25, + 0x42, 0xd8, 0x25, 0xbf, 0xc3, 0xbc, 0x4a, 0xf7, 0x27, 0x16, 0x9c, 0xec, 0x12, 0x90, 0xc5, 0x45, + 0xda, 0xa6, 0x17, 0x27, 0x2a, 0x2f, 0xbe, 0x26, 0xd2, 0x38, 0x1c, 0x2b, 0x0a, 0xba, 0x5a, 0xb8, + 0xd0, 0xcc, 0x0a, 0x4a, 0x11, 0x02, 0x22, 0xb0, 0xfd, 0x09, 0x4a, 0x74, 0x16, 0x06, 0xda, 0x31, + 0x89, 0xe4, 0x13, 0x71, 0x52, 0xce, 0x33, 0x3f, 0x20, 0xc3, 0x50, 0xb5, 0x75, 0x53, 0xb9, 0xe0, + 0x34, 0xb5, 0x95, 0x3b, 0xe1, 0x38, 0xce, 0xfe, 0x7a, 0x19, 0x26, 0x33, 0x81, 0x99, 0xb4, 0x21, + 0xcd, 0x30, 0xf0, 0x92, 0x50, 0x65, 0x3f, 0xe3, 0xaf, 0x52, 0x91, 0xd6, 0xd6, 0x35, 0x01, 0xc7, + 0x8a, 0x02, 0x3d, 0x6d, 0xbe, 0xd8, 0x9f, 0xb6, 0x79, 0xa9, 0x6a, 0x3c, 0xde, 0x59, 0xf4, 0xad, + 0x8e, 0x27, 0x61, 0xa0, 0x15, 0xaa, 0x87, 0x98, 0xd5, 0xf7, 0xc4, 0x4b, 0xd5, 0x5a, 0x18, 0xfa, + 0x98, 0x21, 0xd1, 0x53, 0xa2, 0xf7, 0x99, 0x93, 0x0b, 0xec, 0xb8, 0x61, 0xac, 0x0d, 0xc1, 0x33, + 0x30, 0x7c, 0x97, 0xec, 0x44, 0x5e, 0xb0, 0x99, 0x3d, 0xb7, 0xb9, 0xc2, 0xc1, 0x58, 0xe2, 0xcd, + 0xf7, 0x38, 0x86, 0x8f, 0xf8, 0x3d, 0x8e, 0x91, 0xdc, 0x7d, 0xf0, 0x3b, 0x16, 0x4c, 0xb2, 0x94, + 0xa0, 0xe2, 0x02, 0xbd, 0x17, 0x06, 0xc7, 0xa0, 0x63, 0x3c, 0x09, 0x83, 0x11, 0xad, 0x34, 0x9b, + 0x50, 0x9f, 0xb5, 0x04, 0x73, 0x1c, 0x7a, 0x0c, 0x06, 0x58, 0x13, 0xe8, 0x67, 0x1c, 0xe3, 0x99, + 0xc7, 0xab, 0x4e, 0xe2, 0x60, 0x06, 0x65, 0x77, 0xa1, 0x30, 0x69, 0xf9, 0x1e, 0x6f, 0x74, 0xea, + 0x6e, 0x7d, 0xd8, 0xee, 0x42, 0x75, 0x6d, 0xe4, 0x83, 0xba, 0x0b, 0xd5, 0x9d, 0xf9, 0xc1, 0x7a, + 0xfe, 0xff, 0x2c, 0xc1, 0x99, 0xae, 0xe5, 0xd2, 0x13, 0xe0, 0x55, 0xe3, 0x04, 0xf8, 0x42, 0xe6, + 0x04, 0xd8, 0x3e, 0xb8, 0xf4, 0x83, 0x39, 0x13, 0xee, 0x7e, 0x54, 0x5b, 0x3e, 0xc6, 0xa3, 0xda, + 0x81, 0xa2, 0x2a, 0xce, 0x60, 0x8e, 0x8a, 0xf3, 0xfb, 0x16, 0x3c, 0xda, 0x75, 0xc8, 0x1e, 0xba, + 0xcb, 0x67, 0x5d, 0x5b, 0xd9, 0xc3, 0x3a, 0xf9, 0xe5, 0x72, 0x8f, 0x5e, 0x31, 0x3b, 0xe5, 0x1c, + 0x95, 0x42, 0x0c, 0x19, 0x0b, 0xe5, 0x6d, 0x8c, 0x4b, 0x20, 0x0e, 0xc3, 0x0a, 0x8b, 0x62, 0xed, + 0xf2, 0x16, 0x6f, 0xe4, 0xca, 0x21, 0x17, 0xd4, 0xbc, 0xe9, 0x27, 0xd7, 0xb3, 0x02, 0x64, 0xaf, + 0x74, 0xdd, 0xd6, 0x2c, 0xcf, 0xf2, 0x61, 0x2c, 0xcf, 0xb1, 0xee, 0x56, 0x27, 0x5a, 0x84, 0xc9, + 0xa6, 0x17, 0xb0, 0x67, 0x3c, 0x4d, 0xed, 0x49, 0xdd, 0xa0, 0xbd, 0x66, 0xa2, 0x71, 0x96, 0x7e, + 0xf6, 0x55, 0x18, 0x3f, 0xbc, 0x77, 0xed, 0xc7, 0x65, 0xf8, 0xe0, 0x01, 0x42, 0x81, 0xef, 0x0e, + 0xc6, 0x77, 0xd1, 0x76, 0x87, 0x8e, 0x6f, 0x53, 0x83, 0xe9, 0x8d, 0xb6, 0xef, 0xef, 0xb0, 0xf8, + 0x29, 0xe2, 0x4a, 0x0a, 0xa1, 0xd4, 0xa8, 0x37, 0xbd, 0x57, 0xbb, 0xd0, 0xe0, 0xae, 0x25, 0xd1, + 0xa7, 0x01, 0x85, 0x77, 0x58, 0xd2, 0x5c, 0x37, 0xcd, 0x7a, 0xc0, 0x3e, 0x41, 0x39, 0x5d, 0xaa, + 0x37, 0x3a, 0x28, 0x70, 0x97, 0x52, 0x54, 0x4f, 0x65, 0xcf, 0x81, 0xab, 0x66, 0x65, 0xf4, 0x54, + 0xac, 0x23, 0xb1, 0x49, 0x8b, 0x2e, 0xc1, 0x09, 0x67, 0xdb, 0xf1, 0x78, 0x12, 0x2c, 0xc9, 0x80, + 0x2b, 0xaa, 0xca, 0x7f, 0xb5, 0x98, 0x25, 0xc0, 0x9d, 0x65, 0x50, 0xcb, 0x70, 0x48, 0xf2, 0x74, + 0xf9, 0x9f, 0x38, 0xc4, 0x0c, 0x2e, 0xec, 0xa2, 0xb4, 0xff, 0xbb, 0x45, 0xb7, 0xbe, 0x2e, 0x2f, + 0x3e, 0xd2, 0x11, 0x51, 0x0e, 0x36, 0xed, 0x32, 0x9a, 0x1a, 0x91, 0x65, 0x1d, 0x89, 0x4d, 0x5a, + 0x3e, 0x35, 0xe2, 0x34, 0x9c, 0xdb, 0xd0, 0x36, 0xc5, 0x3d, 0x4e, 0x45, 0x41, 0x35, 0x68, 0xd7, + 0xdb, 0xf6, 0xe2, 0x30, 0x12, 0x0b, 0xa8, 0xcf, 0xe0, 0xde, 0x54, 0x5e, 0x56, 0x39, 0x1b, 0x2c, + 0xf9, 0xd9, 0xdf, 0x28, 0xc1, 0xb8, 0xac, 0xf1, 0xf5, 0x76, 0x98, 0x38, 0xc7, 0xb0, 0xa5, 0xbf, + 0x6e, 0x6c, 0xe9, 0x0b, 0xc5, 0xae, 0xb5, 0xb2, 0xc6, 0xf5, 0xdc, 0xca, 0x3f, 0x93, 0xd9, 0xca, + 0x5f, 0xe8, 0x87, 0xe9, 0xc1, 0x5b, 0xf8, 0xbf, 0xb7, 0xe0, 0x84, 0x41, 0x7f, 0x0c, 0x3b, 0x49, + 0xcd, 0xdc, 0x49, 0x9e, 0xeb, 0xa3, 0x37, 0x3d, 0x76, 0x90, 0x6f, 0x97, 0x32, 0xbd, 0x60, 0x3b, + 0xc7, 0x17, 0x61, 0x60, 0xcb, 0x89, 0xdc, 0x62, 0x19, 0x21, 0x3b, 0x8a, 0xcf, 0x5f, 0x76, 0x22, + 0x97, 0xcb, 0xff, 0xf3, 0xea, 0x3d, 0x2a, 0x27, 0x72, 0x73, 0x6f, 0x39, 0xb0, 0x4a, 0xd1, 0x45, + 0x18, 0x8a, 0x1b, 0x61, 0x4b, 0xc5, 0x81, 0x9e, 0xe5, 0x6f, 0x55, 0x51, 0xc8, 0xfe, 0xee, 0x1c, + 0x32, 0xab, 0xa3, 0x60, 0x2c, 0xe8, 0x67, 0x37, 0xa1, 0xa2, 0xaa, 0x3e, 0xd2, 0x48, 0xf8, 0xff, + 0x51, 0x86, 0x93, 0x5d, 0xe6, 0x0a, 0xfa, 0x92, 0x31, 0x6e, 0xaf, 0xf6, 0x3d, 0xd9, 0xde, 0xe7, + 0xc8, 0x7d, 0x89, 0x59, 0x4a, 0xae, 0x98, 0x1d, 0x87, 0xa8, 0xfe, 0x66, 0x4c, 0xb2, 0xd5, 0x53, + 0x50, 0x7e, 0xf5, 0xb4, 0xda, 0x63, 0x1b, 0x7e, 0x5a, 0x91, 0x6a, 0xe9, 0x91, 0x7e, 0xe7, 0xbf, + 0x36, 0x00, 0xd3, 0xdd, 0xee, 0xcf, 0xa3, 0xaf, 0x5a, 0x99, 0x67, 0x1f, 0x5e, 0xeb, 0xff, 0x12, + 0x3e, 0x7f, 0x0b, 0x42, 0xe4, 0x9c, 0x99, 0x37, 0x1f, 0x82, 0xc8, 0x1d, 0x71, 0x51, 0x3b, 0xbb, + 0x9f, 0x14, 0xf1, 0x27, 0x3c, 0xa4, 0x54, 0xf8, 0xd4, 0x21, 0x9a, 0x22, 0x5e, 0x01, 0x89, 0x33, + 0xf7, 0x93, 0x24, 0x38, 0xff, 0x7e, 0x92, 0x6c, 0xc3, 0xac, 0x07, 0xa3, 0x5a, 0xbf, 0x8e, 0x74, + 0x1a, 0xdc, 0xa5, 0x5b, 0x94, 0xd6, 0xee, 0x23, 0x9d, 0x0a, 0x7f, 0xd7, 0x82, 0x4c, 0xd0, 0x96, + 0x72, 0xcb, 0x58, 0x3d, 0xdd, 0x32, 0x67, 0x61, 0x20, 0x0a, 0x7d, 0x92, 0x7d, 0x92, 0x00, 0x87, + 0x3e, 0xc1, 0x0c, 0xa3, 0x9e, 0xa8, 0x2d, 0xf7, 0x7a, 0xa2, 0x96, 0xda, 0xe9, 0x3e, 0xd9, 0x26, + 0xd2, 0x49, 0xa2, 0xc4, 0xf8, 0x55, 0x0a, 0xc4, 0x1c, 0x67, 0xff, 0x5e, 0x19, 0x86, 0xb8, 0x27, + 0xe2, 0x18, 0xf6, 0xe9, 0x9a, 0x70, 0x0a, 0x14, 0xba, 0x93, 0xce, 0x5b, 0x35, 0x5f, 0x75, 0x12, + 0x87, 0x4f, 0x2e, 0xd5, 0xc7, 0xd4, 0x91, 0x80, 0xe6, 0x8d, 0x51, 0x98, 0xcd, 0xd8, 0xba, 0xc0, + 0x79, 0x68, 0x63, 0xb2, 0x05, 0x10, 0xb3, 0x27, 0x11, 0x29, 0x0f, 0x91, 0x79, 0xf3, 0xa5, 0x42, + 0xed, 0xa8, 0xab, 0x62, 0xbc, 0x35, 0x69, 0xba, 0x3f, 0x85, 0xc0, 0x1a, 0xef, 0xd9, 0x57, 0xa0, + 0xa2, 0x88, 0xf3, 0x8c, 0x80, 0x31, 0x7d, 0x72, 0xfe, 0x25, 0x98, 0xcc, 0xd4, 0xd5, 0x97, 0x0d, + 0xf1, 0x5b, 0x16, 0x4c, 0x66, 0x5e, 0x73, 0x47, 0x5f, 0xb1, 0x60, 0xda, 0xef, 0xe2, 0x88, 0x12, + 0x9f, 0xf9, 0x30, 0x2e, 0x2c, 0x65, 0x3e, 0x74, 0xc3, 0xe2, 0xae, 0xb5, 0x51, 0xb3, 0x92, 0xbf, + 0xf0, 0xea, 0xf8, 0x22, 0x06, 0x76, 0x8c, 0xe7, 0x1c, 0xe6, 0x30, 0xac, 0xb0, 0xf6, 0x4f, 0x2c, + 0x38, 0xd1, 0xf1, 0x60, 0xf8, 0xc3, 0xd2, 0x0d, 0x91, 0x5d, 0xb9, 0xd4, 0x23, 0xbb, 0xb2, 0xde, + 0xcb, 0xf2, 0x81, 0xbd, 0xfc, 0x75, 0x0b, 0xc4, 0x0c, 0x3d, 0x06, 0x0d, 0x70, 0xcd, 0xd4, 0x00, + 0x3f, 0x54, 0x64, 0xd2, 0xf7, 0x50, 0xfd, 0x7e, 0xa9, 0x04, 0x53, 0x9c, 0x20, 0xf5, 0xa9, 0x3f, + 0x2c, 0x1f, 0xa7, 0xbf, 0x57, 0x3f, 0xd4, 0x53, 0x8b, 0xdd, 0x7b, 0x6a, 0x7c, 0xcb, 0x81, 0x03, + 0xbf, 0xe5, 0x9f, 0x59, 0x80, 0xf8, 0x98, 0x64, 0x9f, 0xc7, 0xe5, 0xce, 0x5d, 0xcd, 0xa0, 0x4b, + 0x25, 0x87, 0xc2, 0x60, 0x8d, 0xea, 0x01, 0x77, 0x21, 0x73, 0xa2, 0x51, 0xce, 0x3f, 0xd1, 0xe8, + 0xa3, 0xd7, 0xbf, 0x5d, 0x86, 0x6c, 0x30, 0x1c, 0x7a, 0x1b, 0xc6, 0x1a, 0x4e, 0xcb, 0xb9, 0xe3, + 0xf9, 0x5e, 0xe2, 0x91, 0xb8, 0xd8, 0x91, 0xe9, 0xb2, 0x56, 0x42, 0x1c, 0x24, 0x68, 0x10, 0x6c, + 0x70, 0x44, 0xf3, 0x00, 0xad, 0xc8, 0xdb, 0xf6, 0x7c, 0xb2, 0xc9, 0x74, 0x56, 0x16, 0x4d, 0xcf, + 0x4f, 0xff, 0x24, 0x14, 0x6b, 0x14, 0x5d, 0xa2, 0xaf, 0xcb, 0xc7, 0x11, 0x7d, 0x3d, 0xd0, 0x67, + 0xf4, 0xf5, 0x60, 0xa1, 0xe8, 0x6b, 0x0c, 0xa7, 0xa5, 0xff, 0x9f, 0xfe, 0x5f, 0xf5, 0x7c, 0xc2, + 0x93, 0xcc, 0x8a, 0x68, 0xfb, 0xd9, 0xbd, 0xdd, 0xb9, 0xd3, 0xb8, 0x2b, 0x05, 0xee, 0x51, 0xd2, + 0x6e, 0xc3, 0xc9, 0x3a, 0x89, 0x3c, 0x96, 0xfb, 0xcf, 0x4d, 0xd7, 0xd2, 0xe7, 0xa1, 0x12, 0x65, + 0x96, 0x71, 0x9f, 0x57, 0xaa, 0xb5, 0x6c, 0x51, 0x72, 0xd9, 0xa6, 0x2c, 0xed, 0xbf, 0x51, 0x82, + 0x61, 0x11, 0x06, 0x77, 0x0c, 0xca, 0xc7, 0x15, 0xc3, 0x49, 0xf0, 0x4c, 0x9e, 0xfc, 0x63, 0xcd, + 0xea, 0xe9, 0x1e, 0xa8, 0x67, 0xdc, 0x03, 0xcf, 0x15, 0x63, 0x77, 0xb0, 0x63, 0xe0, 0x9f, 0x96, + 0x61, 0xc2, 0x0c, 0x0b, 0x3c, 0x86, 0x61, 0x79, 0x03, 0x86, 0x63, 0x11, 0xa1, 0x5a, 0x2a, 0x12, + 0x75, 0x95, 0xfd, 0xc4, 0xe9, 0x59, 0xaa, 0x88, 0x49, 0x95, 0xec, 0xba, 0x06, 0xc1, 0x96, 0x8f, + 0x25, 0x08, 0x36, 0x2f, 0x5a, 0x73, 0xe0, 0x41, 0x44, 0x6b, 0xda, 0x3f, 0x60, 0x22, 0x5f, 0x87, + 0x1f, 0xc3, 0x36, 0xfe, 0xba, 0xb9, 0x39, 0x9c, 0x2f, 0x34, 0xef, 0x44, 0xf3, 0x7a, 0x6c, 0xe7, + 0xdf, 0xb5, 0x60, 0x54, 0x10, 0x1e, 0x43, 0x07, 0x3e, 0x6d, 0x76, 0xe0, 0xa9, 0x42, 0x1d, 0xe8, + 0xd1, 0xf2, 0x6f, 0x94, 0x54, 0xcb, 0x6b, 0xe2, 0x49, 0xf3, 0xdc, 0x4c, 0xc7, 0x23, 0xad, 0x28, + 0x4c, 0xc2, 0x46, 0xe8, 0x0b, 0x05, 0xee, 0xb1, 0xf4, 0x72, 0x15, 0x87, 0xef, 0x6b, 0xbf, 0xb1, + 0xa2, 0x66, 0x77, 0x7f, 0xc2, 0x28, 0x11, 0x1b, 0x68, 0xb7, 0x07, 0xd5, 0x5d, 0x80, 0xf4, 0x15, + 0x6b, 0x71, 0x2f, 0xb1, 0xff, 0xa7, 0xda, 0xd3, 0xdb, 0x52, 0x8a, 0x17, 0xd6, 0xf8, 0xca, 0x30, + 0x7c, 0x56, 0xc7, 0xa0, 0x79, 0x06, 0x70, 0x5d, 0xc0, 0xb1, 0xa2, 0xb0, 0x5f, 0x61, 0x92, 0x9d, + 0x0d, 0x50, 0x7f, 0x17, 0x99, 0x7e, 0x71, 0x48, 0x0d, 0x2d, 0x73, 0xec, 0x5d, 0xd7, 0xaf, 0x4b, + 0x15, 0x15, 0x9f, 0xb4, 0x09, 0x7a, 0x24, 0x6c, 0x7a, 0xbb, 0x0a, 0x91, 0x8e, 0x83, 0xa3, 0x57, + 0x0a, 0x4b, 0xe4, 0x3e, 0x8e, 0x8a, 0x58, 0x72, 0x37, 0x96, 0xd1, 0x6a, 0xad, 0x96, 0xcd, 0x4f, + 0xbd, 0x2c, 0x11, 0x38, 0xa5, 0x41, 0x0b, 0xc2, 0xa0, 0x34, 0x5f, 0xbc, 0x97, 0x06, 0xa5, 0x1c, + 0x12, 0xcd, 0xa2, 0x7c, 0x01, 0x46, 0xd5, 0x93, 0x1f, 0x35, 0xfe, 0xd8, 0x42, 0x85, 0xeb, 0x57, + 0x2b, 0x29, 0x18, 0xeb, 0x34, 0x68, 0x0d, 0x4e, 0xba, 0xea, 0xd6, 0x45, 0xad, 0x7d, 0xc7, 0xf7, + 0x1a, 0xb4, 0x28, 0xbf, 0x31, 0xf9, 0xc8, 0xde, 0xee, 0xdc, 0xc9, 0x6a, 0x27, 0x1a, 0x77, 0x2b, + 0x83, 0xd6, 0x61, 0x32, 0xe6, 0x4f, 0x9b, 0xc8, 0xd0, 0x7a, 0x91, 0xb6, 0xf5, 0x59, 0x79, 0x62, + 0x55, 0x37, 0xd1, 0xfb, 0x0c, 0xc4, 0xa5, 0x82, 0x0c, 0xc6, 0xcf, 0xb2, 0x40, 0xaf, 0xc1, 0x84, + 0xaf, 0xbf, 0xdb, 0x58, 0x13, 0x97, 0x4f, 0x54, 0x0c, 0x92, 0xf1, 0xaa, 0x63, 0x0d, 0x67, 0xa8, + 0xd1, 0x1b, 0x30, 0xa3, 0x43, 0x44, 0x26, 0x18, 0x27, 0xd8, 0x24, 0xb1, 0x78, 0x06, 0xe1, 0xb1, + 0xbd, 0xdd, 0xb9, 0x99, 0xab, 0x3d, 0x68, 0x70, 0xcf, 0xd2, 0xe8, 0x22, 0x8c, 0xc9, 0x91, 0xd4, + 0x2e, 0xa2, 0xa4, 0xd1, 0x6f, 0x1a, 0x0e, 0x1b, 0x94, 0xef, 0xef, 0x60, 0xee, 0x8b, 0xb4, 0xb0, + 0xb6, 0x85, 0xa3, 0x77, 0x60, 0x4c, 0x6f, 0x63, 0x76, 0x6f, 0xce, 0x7f, 0x0b, 0x53, 0xa8, 0x02, + 0xaa, 0xe5, 0x3a, 0x0e, 0x1b, 0xbc, 0xed, 0x1b, 0x30, 0x54, 0xdf, 0x89, 0x1b, 0x89, 0x5f, 0x40, + 0xbe, 0x3d, 0x69, 0x74, 0x21, 0x5d, 0x7b, 0xec, 0x5d, 0x1e, 0xd1, 0x23, 0x9b, 0xc0, 0xe4, 0xfa, + 0x72, 0x8d, 0xbf, 0xfa, 0xbf, 0xc8, 0xad, 0x37, 0x2c, 0xa4, 0x9b, 0x75, 0x48, 0xa9, 0xd5, 0x45, + 0x1e, 0xda, 0x7f, 0x6c, 0xc1, 0x20, 0x7b, 0x53, 0x26, 0xef, 0x3d, 0xa2, 0x22, 0x8d, 0x46, 0x2f, + 0xc3, 0x10, 0xd9, 0xd8, 0x20, 0x8d, 0x44, 0x2c, 0x63, 0x19, 0xed, 0x3d, 0xb4, 0xc2, 0xa0, 0x74, + 0x71, 0xb2, 0xca, 0xf8, 0x5f, 0x2c, 0x88, 0xd1, 0xe7, 0xa0, 0x92, 0x78, 0x4d, 0xb2, 0xe8, 0xba, + 0xc4, 0x3d, 0xc4, 0x5d, 0x71, 0x25, 0x2c, 0xd6, 0x25, 0x13, 0x9c, 0xf2, 0xb3, 0xdf, 0x2b, 0x01, + 0xa4, 0x77, 0x2d, 0xf2, 0xba, 0xb9, 0xd4, 0xf1, 0xec, 0xd2, 0xd3, 0x5d, 0x9e, 0x5d, 0x42, 0x29, + 0xc3, 0x2e, 0x8f, 0x2e, 0xa9, 0xa1, 0x2a, 0x17, 0x1a, 0xaa, 0x81, 0x7e, 0x86, 0x6a, 0x19, 0x4e, + 0xa4, 0x77, 0x45, 0xcc, 0x4b, 0x77, 0x2c, 0x09, 0xe3, 0x7a, 0x16, 0x89, 0x3b, 0xe9, 0xed, 0xf7, + 0x2c, 0x10, 0x21, 0x6b, 0x05, 0x66, 0xab, 0x2b, 0x9f, 0x48, 0x31, 0xf2, 0x50, 0x3d, 0x5b, 0x24, + 0x9a, 0x4f, 0x64, 0x9f, 0x52, 0xeb, 0xc7, 0xc8, 0x39, 0x65, 0x70, 0xb5, 0x7f, 0xc3, 0x82, 0x51, + 0x8e, 0xbe, 0xc6, 0x74, 0xea, 0xfc, 0x76, 0xf5, 0x95, 0xe1, 0x93, 0xbd, 0x1e, 0x42, 0x19, 0xab, + 0x4c, 0x8f, 0xfa, 0xeb, 0x21, 0x12, 0x81, 0x53, 0x1a, 0xf4, 0x0c, 0x0c, 0xc7, 0xed, 0x3b, 0x8c, + 0x3c, 0x13, 0xbf, 0x56, 0xe7, 0x60, 0x2c, 0xf1, 0xf6, 0x3f, 0x2f, 0xc1, 0x54, 0x36, 0x7c, 0x11, + 0x61, 0x18, 0xe2, 0x3a, 0x76, 0x56, 0x3d, 0x3b, 0xc8, 0x97, 0xa3, 0x85, 0x3f, 0x02, 0x7f, 0x03, + 0x97, 0xc5, 0x9c, 0x09, 0x4e, 0x68, 0x03, 0x46, 0xdd, 0xf0, 0x5e, 0x70, 0xcf, 0x89, 0xdc, 0xc5, + 0xda, 0x9a, 0xf8, 0x12, 0x39, 0x01, 0x27, 0xd5, 0xb4, 0x80, 0x1e, 0x5c, 0xc9, 0x7c, 0x0b, 0x29, + 0x0a, 0xeb, 0x8c, 0xa9, 0x4d, 0xd9, 0x08, 0x83, 0x0d, 0x6f, 0xf3, 0x9a, 0xd3, 0x2a, 0x76, 0xb4, + 0xba, 0x2c, 0xc9, 0xb5, 0x3a, 0xc6, 0xc5, 0x2d, 0x7b, 0x8e, 0xc0, 0x29, 0x4b, 0xfb, 0x0f, 0x4e, + 0x82, 0x31, 0x17, 0x8c, 0x34, 0x9c, 0xd6, 0x03, 0x4f, 0xc3, 0xf9, 0x26, 0x8c, 0x90, 0x66, 0x2b, + 0xd9, 0xa9, 0x7a, 0x51, 0xb1, 0xa4, 0xca, 0x2b, 0x82, 0xba, 0x93, 0xbb, 0xc4, 0x60, 0xc5, 0xb1, + 0x47, 0x52, 0xd5, 0xf2, 0x43, 0x91, 0x54, 0x75, 0xe0, 0xcf, 0x25, 0xa9, 0xea, 0x1b, 0x30, 0xbc, + 0xe9, 0x25, 0x98, 0xb4, 0x42, 0x91, 0xb6, 0x20, 0x67, 0xf2, 0x5c, 0xe2, 0xc4, 0x9d, 0x99, 0x12, + 0x05, 0x02, 0x4b, 0x76, 0x68, 0x5d, 0x2d, 0xaa, 0xa1, 0x22, 0x7b, 0x79, 0xa7, 0xaf, 0xaf, 0xeb, + 0xb2, 0x12, 0x49, 0x54, 0x87, 0xdf, 0x7f, 0x12, 0x55, 0x95, 0xfa, 0x74, 0xe4, 0x41, 0xa5, 0x3e, + 0x35, 0x52, 0xc8, 0x56, 0x8e, 0x22, 0x85, 0xec, 0x7b, 0x16, 0x9c, 0x6a, 0x75, 0x4b, 0xc0, 0x2c, + 0x92, 0x98, 0x7e, 0xf2, 0x10, 0x29, 0xa9, 0x8d, 0xaa, 0xd9, 0x65, 0xf0, 0xae, 0x64, 0xb8, 0x7b, + 0xc5, 0x32, 0x17, 0xed, 0xe8, 0xfb, 0xcf, 0x45, 0x7b, 0xd4, 0xd9, 0x4e, 0xd3, 0xcc, 0xb4, 0xe3, + 0x47, 0x92, 0x99, 0x76, 0xe2, 0x01, 0x66, 0xa6, 0xd5, 0x72, 0xca, 0x4e, 0x3e, 0xd8, 0x9c, 0xb2, + 0x5b, 0xe6, 0xbe, 0xc4, 0x53, 0x98, 0xbe, 0x5c, 0x78, 0x5f, 0x32, 0x6a, 0x38, 0x78, 0x67, 0xe2, + 0xd9, 0x75, 0x4f, 0xbc, 0xcf, 0xec, 0xba, 0x46, 0x8e, 0x5a, 0x74, 0x14, 0x39, 0x6a, 0xdf, 0xd6, + 0x77, 0xd0, 0x93, 0x45, 0x6a, 0x50, 0x1b, 0x65, 0x67, 0x0d, 0xdd, 0xf6, 0xd0, 0xce, 0x2c, 0xb8, + 0xd3, 0xc7, 0x9d, 0x05, 0xf7, 0xd4, 0x11, 0x66, 0xc1, 0x3d, 0x7d, 0xac, 0x59, 0x70, 0x1f, 0x79, + 0x48, 0xb2, 0xe0, 0xce, 0x1c, 0x65, 0x16, 0x5c, 0x3a, 0xc0, 0x2d, 0x79, 0x55, 0x67, 0xe6, 0xd1, + 0x22, 0x03, 0xdc, 0xf5, 0x66, 0x0f, 0x1f, 0x60, 0x85, 0xc2, 0x29, 0x53, 0xfb, 0xaf, 0xc0, 0x99, + 0x83, 0x27, 0x58, 0xfa, 0xf6, 0x44, 0x2d, 0xf5, 0x6c, 0x65, 0xde, 0x9e, 0x60, 0xca, 0x9b, 0x46, + 0x55, 0x38, 0x4d, 0xe7, 0xb7, 0x2d, 0x78, 0xa4, 0x47, 0x16, 0xbb, 0xc2, 0xf7, 0xdc, 0x5a, 0x30, + 0xd9, 0x32, 0x8b, 0x16, 0xbe, 0x36, 0x6b, 0x64, 0xcd, 0x53, 0xb1, 0xc8, 0x19, 0x04, 0xce, 0xb2, + 0x5f, 0xfa, 0xd0, 0x0f, 0x7f, 0x7c, 0xe6, 0x03, 0x3f, 0xfa, 0xf1, 0x99, 0x0f, 0xfc, 0xd1, 0x8f, + 0xcf, 0x7c, 0xe0, 0xe7, 0xf6, 0xce, 0x58, 0x3f, 0xdc, 0x3b, 0x63, 0xfd, 0x68, 0xef, 0x8c, 0xf5, + 0x27, 0x7b, 0x67, 0xac, 0xf7, 0x7e, 0x72, 0xe6, 0x03, 0x9f, 0x2d, 0x6d, 0xbf, 0xf0, 0xff, 0x03, + 0x00, 0x00, 0xff, 0xff, 0x4c, 0xce, 0x2d, 0xad, 0x70, 0xc5, 0x00, 0x00, } diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto b/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto index cbef8b83b7..7425337af7 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto +++ b/staging/src/k8s.io/client-go/pkg/api/v1/generated.proto @@ -2128,6 +2128,10 @@ message PersistentVolumeSource { // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine optional PhotonPersistentDiskVolumeSource photonPersistentDisk = 17; + + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + optional PortworxVolumeSource portworxVolume = 18; } // PersistentVolumeSpec is the specification of a persistent volume. @@ -2790,6 +2794,22 @@ message PodTemplateSpec { optional PodSpec spec = 2; } +// PortworxVolumeSource represents a Portworx volume resource. +message PortworxVolumeSource { + // VolumeID uniquely identifies a Portworx volume + optional string volumeID = 1; + + // FSType represents the filesystem type to mount + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + optional string fsType = 2; + + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + optional bool readOnly = 3; +} + // Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out. // +k8s:openapi-gen=false message Preconditions { @@ -3811,7 +3831,11 @@ message VolumeSource { optional PhotonPersistentDiskVolumeSource photonPersistentDisk = 23; // Items for all in one resources secrets, configmaps, and downward API - optional ProjectedVolumeSource projected = 24; + optional ProjectedVolumeSource projected = 25; + + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + optional PortworxVolumeSource portworxVolume = 24; } // Represents a vSphere volume resource. diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go b/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go index 32f162a1b8..8b203c54b4 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types.generated.go @@ -1222,7 +1222,7 @@ func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [25]bool + var yyq2 [26]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[1] = x.VolumeSource.HostPath != nil && x.HostPath != nil @@ -1249,9 +1249,10 @@ func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[22] = x.VolumeSource.AzureDisk != nil && x.AzureDisk != nil yyq2[23] = x.VolumeSource.PhotonPersistentDisk != nil && x.PhotonPersistentDisk != nil yyq2[24] = x.VolumeSource.Projected != nil && x.Projected != nil + yyq2[25] = x.VolumeSource.PortworxVolume != nil && x.PortworxVolume != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(25) + r.EncodeArrayStart(26) } else { yynn2 = 1 for _, b := range yyq2 { @@ -2169,6 +2170,43 @@ func (x *Volume) CodecEncodeSelf(e *codec1978.Encoder) { } } } + var yyn78 bool + if x.VolumeSource.PortworxVolume == nil { + yyn78 = true + goto LABEL78 + } + LABEL78: + if yyr2 || yy2arr2 { + if yyn78 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[25] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq2[25] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn78 { + r.EncodeNil() + } else { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -2578,6 +2616,20 @@ func (x *Volume) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } + case "portworxVolume": + if x.VolumeSource.PortworxVolume == nil { + x.VolumeSource.PortworxVolume = new(PortworxVolumeSource) + } + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -2589,16 +2641,16 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj30 int - var yyb30 bool - var yyhl30 bool = l >= 0 - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + var yyj31 int + var yyb31 bool + var yyhl31 bool = l >= 0 + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2606,24 +2658,24 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if r.TryDecodeAsNil() { x.Name = "" } else { - yyv31 := &x.Name - yym32 := z.DecBinary() - _ = yym32 + yyv32 := &x.Name + yym33 := z.DecBinary() + _ = yym33 if false { } else { - *((*string)(yyv31)) = r.DecodeString() + *((*string)(yyv32)) = r.DecodeString() } } if x.VolumeSource.HostPath == nil { x.VolumeSource.HostPath = new(HostPathVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2641,13 +2693,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.EmptyDir == nil { x.VolumeSource.EmptyDir = new(EmptyDirVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2665,13 +2717,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.GCEPersistentDisk == nil { x.VolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2689,13 +2741,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.AWSElasticBlockStore == nil { x.VolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2713,13 +2765,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.GitRepo == nil { x.VolumeSource.GitRepo = new(GitRepoVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2737,13 +2789,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Secret == nil { x.VolumeSource.Secret = new(SecretVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2761,13 +2813,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.NFS == nil { x.VolumeSource.NFS = new(NFSVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2785,13 +2837,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.ISCSI == nil { x.VolumeSource.ISCSI = new(ISCSIVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2809,13 +2861,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Glusterfs == nil { x.VolumeSource.Glusterfs = new(GlusterfsVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2833,13 +2885,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.PersistentVolumeClaim == nil { x.VolumeSource.PersistentVolumeClaim = new(PersistentVolumeClaimVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2857,13 +2909,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.RBD == nil { x.VolumeSource.RBD = new(RBDVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2881,13 +2933,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.FlexVolume == nil { x.VolumeSource.FlexVolume = new(FlexVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2905,13 +2957,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Cinder == nil { x.VolumeSource.Cinder = new(CinderVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2929,13 +2981,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.CephFS == nil { x.VolumeSource.CephFS = new(CephFSVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2953,13 +3005,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Flocker == nil { x.VolumeSource.Flocker = new(FlockerVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -2977,13 +3029,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.DownwardAPI == nil { x.VolumeSource.DownwardAPI = new(DownwardAPIVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3001,13 +3053,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.FC == nil { x.VolumeSource.FC = new(FCVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3025,13 +3077,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.AzureFile == nil { x.VolumeSource.AzureFile = new(AzureFileVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3049,13 +3101,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.ConfigMap == nil { x.VolumeSource.ConfigMap = new(ConfigMapVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3073,13 +3125,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.VsphereVolume == nil { x.VolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3097,13 +3149,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Quobyte == nil { x.VolumeSource.Quobyte = new(QuobyteVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3121,13 +3173,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.AzureDisk == nil { x.VolumeSource.AzureDisk = new(AzureDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3145,13 +3197,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.PhotonPersistentDisk == nil { x.VolumeSource.PhotonPersistentDisk = new(PhotonPersistentDiskVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3169,13 +3221,13 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { if x.VolumeSource.Projected == nil { x.VolumeSource.Projected = new(ProjectedVolumeSource) } - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l } else { - yyb30 = r.CheckBreak() + yyb31 = r.CheckBreak() } - if yyb30 { + if yyb31 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -3190,18 +3242,42 @@ func (x *Volume) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } - for { - yyj30++ - if yyhl30 { - yyb30 = yyj30 > l - } else { - yyb30 = r.CheckBreak() + if x.VolumeSource.PortworxVolume == nil { + x.VolumeSource.PortworxVolume = new(PortworxVolumeSource) + } + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l + } else { + yyb31 = r.CheckBreak() + } + if yyb31 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil } - if yyb30 { + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + for { + yyj31++ + if yyhl31 { + yyb31 = yyj31 > l + } else { + yyb31 = r.CheckBreak() + } + if yyb31 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj30-1, "") + z.DecStructFieldNotFound(yyj31-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -3220,7 +3296,7 @@ func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [24]bool + var yyq2 [25]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.HostPath != nil @@ -3247,9 +3323,10 @@ func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[21] = x.AzureDisk != nil yyq2[22] = x.PhotonPersistentDisk != nil yyq2[23] = x.Projected != nil + yyq2[24] = x.PortworxVolume != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(24) + r.EncodeArrayStart(25) } else { yynn2 = 0 for _, b := range yyq2 { @@ -3812,6 +3889,29 @@ func (x *VolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[24] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[24] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -4137,6 +4237,17 @@ func (x *VolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } + case "portworxVolume": + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -4148,16 +4259,16 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj28 int - var yyb28 bool - var yyhl28 bool = l >= 0 - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + var yyj29 int + var yyb29 bool + var yyhl29 bool = l >= 0 + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4172,13 +4283,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.HostPath.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4193,13 +4304,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.EmptyDir.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4214,13 +4325,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.GCEPersistentDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4235,13 +4346,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.AWSElasticBlockStore.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4256,13 +4367,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.GitRepo.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4277,13 +4388,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Secret.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4298,13 +4409,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.NFS.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4319,13 +4430,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.ISCSI.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4340,13 +4451,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Glusterfs.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4361,13 +4472,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.PersistentVolumeClaim.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4382,13 +4493,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.RBD.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4403,13 +4514,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.FlexVolume.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4424,13 +4535,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Cinder.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4445,13 +4556,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.CephFS.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4466,13 +4577,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Flocker.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4487,13 +4598,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.DownwardAPI.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4508,13 +4619,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.FC.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4529,13 +4640,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.AzureFile.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4550,13 +4661,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.ConfigMap.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4571,13 +4682,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.VsphereVolume.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4592,13 +4703,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Quobyte.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4613,13 +4724,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.AzureDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4634,13 +4745,13 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.PhotonPersistentDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -4655,18 +4766,39 @@ func (x *VolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { } x.Projected.CodecDecodeSelf(d) } - for { - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l - } else { - yyb28 = r.CheckBreak() + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil } - if yyb28 { + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + for { + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj28-1, "") + z.DecStructFieldNotFound(yyj29-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -4919,7 +5051,7 @@ func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [17]bool + var yyq2 [18]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = x.GCEPersistentDisk != nil @@ -4939,9 +5071,10 @@ func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[14] = x.Quobyte != nil yyq2[15] = x.AzureDisk != nil yyq2[16] = x.PhotonPersistentDisk != nil + yyq2[17] = x.PortworxVolume != nil var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(17) + r.EncodeArrayStart(18) } else { yynn2 = 0 for _, b := range yyq2 { @@ -5343,6 +5476,29 @@ func (x *PersistentVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { } } } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[17] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } else { + if yyq2[17] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayEnd1234) } else { @@ -5591,6 +5747,17 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Deco } x.PhotonPersistentDisk.CodecDecodeSelf(d) } + case "portworxVolume": + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } default: z.DecStructFieldNotFound(-1, yys3) } // end switch yys3 @@ -5602,16 +5769,16 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj21 int - var yyb21 bool - var yyhl21 bool = l >= 0 - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + var yyj22 int + var yyb22 bool + var yyhl22 bool = l >= 0 + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5626,13 +5793,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.GCEPersistentDisk.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5647,13 +5814,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.AWSElasticBlockStore.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5668,13 +5835,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.HostPath.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5689,13 +5856,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Glusterfs.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5710,13 +5877,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.NFS.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5731,13 +5898,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.RBD.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5752,13 +5919,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.ISCSI.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5773,13 +5940,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Cinder.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5794,13 +5961,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.CephFS.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5815,13 +5982,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.FC.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5836,13 +6003,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Flocker.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5857,13 +6024,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.FlexVolume.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5878,13 +6045,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.AzureFile.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5899,13 +6066,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.VsphereVolume.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5920,13 +6087,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.Quobyte.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5941,13 +6108,13 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.AzureDisk.CodecDecodeSelf(d) } - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l } else { - yyb21 = r.CheckBreak() + yyb22 = r.CheckBreak() } - if yyb21 { + if yyb22 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -5962,18 +6129,39 @@ func (x *PersistentVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.De } x.PhotonPersistentDisk.CodecDecodeSelf(d) } - for { - yyj21++ - if yyhl21 { - yyb21 = yyj21 > l - } else { - yyb21 = r.CheckBreak() + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil } - if yyb21 { + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + for { + yyj22++ + if yyhl22 { + yyb22 = yyj22 > l + } else { + yyb22 = r.CheckBreak() + } + if yyb22 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj21-1, "") + z.DecStructFieldNotFound(yyj22-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -6383,7 +6571,7 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } else { yysep2 := !z.EncBinary() yy2arr2 := z.EncBasicHandle().StructToArray - var yyq2 [22]bool + var yyq2 [23]bool _, _, _ = yysep2, yyq2, yy2arr2 const yyr2 bool = false yyq2[0] = len(x.Capacity) != 0 @@ -6404,13 +6592,14 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { yyq2[15] = x.PersistentVolumeSource.Quobyte != nil && x.Quobyte != nil yyq2[16] = x.PersistentVolumeSource.AzureDisk != nil && x.AzureDisk != nil yyq2[17] = x.PersistentVolumeSource.PhotonPersistentDisk != nil && x.PhotonPersistentDisk != nil - yyq2[18] = len(x.AccessModes) != 0 - yyq2[19] = x.ClaimRef != nil - yyq2[20] = x.PersistentVolumeReclaimPolicy != "" - yyq2[21] = x.StorageClassName != "" + yyq2[18] = x.PersistentVolumeSource.PortworxVolume != nil && x.PortworxVolume != nil + yyq2[19] = len(x.AccessModes) != 0 + yyq2[20] = x.ClaimRef != nil + yyq2[21] = x.PersistentVolumeReclaimPolicy != "" + yyq2[22] = x.StorageClassName != "" var yynn2 int if yyr2 || yy2arr2 { - r.EncodeArrayStart(22) + r.EncodeArrayStart(23) } else { yynn2 = 0 for _, b := range yyq2 { @@ -7073,14 +7262,51 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } } } + var yyn57 bool + if x.PersistentVolumeSource.PortworxVolume == nil { + yyn57 = true + goto LABEL57 + } + LABEL57: + if yyr2 || yy2arr2 { + if yyn57 { + r.EncodeNil() + } else { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[18] { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } else { + r.EncodeNil() + } + } + } else { + if yyq2[18] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("portworxVolume")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + if yyn57 { + r.EncodeNil() + } else { + if x.PortworxVolume == nil { + r.EncodeNil() + } else { + x.PortworxVolume.CodecEncodeSelf(e) + } + } + } + } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[18] { + if yyq2[19] { if x.AccessModes == nil { r.EncodeNil() } else { - yym58 := z.EncBinary() - _ = yym58 + yym61 := z.EncBinary() + _ = yym61 if false { } else { h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) @@ -7090,15 +7316,15 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeNil() } } else { - if yyq2[18] { + if yyq2[19] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("accessModes")) z.EncSendContainerState(codecSelfer_containerMapValue1234) if x.AccessModes == nil { r.EncodeNil() } else { - yym59 := z.EncBinary() - _ = yym59 + yym62 := z.EncBinary() + _ = yym62 if false { } else { h.encSlicePersistentVolumeAccessMode(([]PersistentVolumeAccessMode)(x.AccessModes), e) @@ -7108,7 +7334,7 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[19] { + if yyq2[20] { if x.ClaimRef == nil { r.EncodeNil() } else { @@ -7118,7 +7344,7 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeNil() } } else { - if yyq2[19] { + if yyq2[20] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("claimRef")) z.EncSendContainerState(codecSelfer_containerMapValue1234) @@ -7131,13 +7357,13 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[20] { + if yyq2[21] { x.PersistentVolumeReclaimPolicy.CodecEncodeSelf(e) } else { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq2[20] { + if yyq2[21] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("persistentVolumeReclaimPolicy")) z.EncSendContainerState(codecSelfer_containerMapValue1234) @@ -7146,9 +7372,9 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { } if yyr2 || yy2arr2 { z.EncSendContainerState(codecSelfer_containerArrayElem1234) - if yyq2[21] { - yym67 := z.EncBinary() - _ = yym67 + if yyq2[22] { + yym70 := z.EncBinary() + _ = yym70 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.StorageClassName)) @@ -7157,12 +7383,12 @@ func (x *PersistentVolumeSpec) CodecEncodeSelf(e *codec1978.Encoder) { r.EncodeString(codecSelferC_UTF81234, "") } } else { - if yyq2[21] { + if yyq2[22] { z.EncSendContainerState(codecSelfer_containerMapKey1234) r.EncodeString(codecSelferC_UTF81234, string("storageClassName")) z.EncSendContainerState(codecSelfer_containerMapValue1234) - yym68 := z.EncBinary() - _ = yym68 + yym71 := z.EncBinary() + _ = yym71 if false { } else { r.EncodeString(codecSelferC_UTF81234, string(x.StorageClassName)) @@ -7475,16 +7701,30 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decode } x.PhotonPersistentDisk.CodecDecodeSelf(d) } + case "portworxVolume": + if x.PersistentVolumeSource.PortworxVolume == nil { + x.PersistentVolumeSource.PortworxVolume = new(PortworxVolumeSource) + } + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } case "accessModes": if r.TryDecodeAsNil() { x.AccessModes = nil } else { - yyv22 := &x.AccessModes - yym23 := z.DecBinary() - _ = yym23 + yyv23 := &x.AccessModes + yym24 := z.DecBinary() + _ = yym24 if false { } else { - h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv22), d) + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv23), d) } } case "claimRef": @@ -7502,19 +7742,19 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromMap(l int, d *codec1978.Decode if r.TryDecodeAsNil() { x.PersistentVolumeReclaimPolicy = "" } else { - yyv25 := &x.PersistentVolumeReclaimPolicy - yyv25.CodecDecodeSelf(d) + yyv26 := &x.PersistentVolumeReclaimPolicy + yyv26.CodecDecodeSelf(d) } case "storageClassName": if r.TryDecodeAsNil() { x.StorageClassName = "" } else { - yyv26 := &x.StorageClassName - yym27 := z.DecBinary() - _ = yym27 + yyv27 := &x.StorageClassName + yym28 := z.DecBinary() + _ = yym28 if false { } else { - *((*string)(yyv26)) = r.DecodeString() + *((*string)(yyv27)) = r.DecodeString() } } default: @@ -7528,16 +7768,16 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco var h codecSelfer1234 z, r := codec1978.GenHelperDecoder(d) _, _, _ = h, z, r - var yyj28 int - var yyb28 bool - var yyhl28 bool = l >= 0 - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + var yyj29 int + var yyb29 bool + var yyhl29 bool = l >= 0 + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7545,19 +7785,19 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.Capacity = nil } else { - yyv29 := &x.Capacity - yyv29.CodecDecodeSelf(d) + yyv30 := &x.Capacity + yyv30.CodecDecodeSelf(d) } if x.PersistentVolumeSource.GCEPersistentDisk == nil { x.PersistentVolumeSource.GCEPersistentDisk = new(GCEPersistentDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7575,13 +7815,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.AWSElasticBlockStore == nil { x.PersistentVolumeSource.AWSElasticBlockStore = new(AWSElasticBlockStoreVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7599,13 +7839,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.HostPath == nil { x.PersistentVolumeSource.HostPath = new(HostPathVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7623,13 +7863,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Glusterfs == nil { x.PersistentVolumeSource.Glusterfs = new(GlusterfsVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7647,13 +7887,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.NFS == nil { x.PersistentVolumeSource.NFS = new(NFSVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7671,13 +7911,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.RBD == nil { x.PersistentVolumeSource.RBD = new(RBDVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7695,13 +7935,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.ISCSI == nil { x.PersistentVolumeSource.ISCSI = new(ISCSIVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7719,13 +7959,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Cinder == nil { x.PersistentVolumeSource.Cinder = new(CinderVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7743,13 +7983,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.CephFS == nil { x.PersistentVolumeSource.CephFS = new(CephFSVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7767,13 +8007,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.FC == nil { x.PersistentVolumeSource.FC = new(FCVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7791,13 +8031,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Flocker == nil { x.PersistentVolumeSource.Flocker = new(FlockerVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7815,13 +8055,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.FlexVolume == nil { x.PersistentVolumeSource.FlexVolume = new(FlexVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7839,13 +8079,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.AzureFile == nil { x.PersistentVolumeSource.AzureFile = new(AzureFileVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7863,13 +8103,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.VsphereVolume == nil { x.PersistentVolumeSource.VsphereVolume = new(VsphereVirtualDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7887,13 +8127,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.Quobyte == nil { x.PersistentVolumeSource.Quobyte = new(QuobyteVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7911,13 +8151,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.AzureDisk == nil { x.PersistentVolumeSource.AzureDisk = new(AzureDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7935,13 +8175,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if x.PersistentVolumeSource.PhotonPersistentDisk == nil { x.PersistentVolumeSource.PhotonPersistentDisk = new(PhotonPersistentDiskVolumeSource) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7956,13 +8196,37 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco } x.PhotonPersistentDisk.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l - } else { - yyb28 = r.CheckBreak() + if x.PersistentVolumeSource.PortworxVolume == nil { + x.PersistentVolumeSource.PortworxVolume = new(PortworxVolumeSource) } - if yyb28 { + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + if x.PortworxVolume != nil { + x.PortworxVolume = nil + } + } else { + if x.PortworxVolume == nil { + x.PortworxVolume = new(PortworxVolumeSource) + } + x.PortworxVolume.CodecDecodeSelf(d) + } + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l + } else { + yyb29 = r.CheckBreak() + } + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7970,21 +8234,21 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.AccessModes = nil } else { - yyv47 := &x.AccessModes - yym48 := z.DecBinary() - _ = yym48 + yyv49 := &x.AccessModes + yym50 := z.DecBinary() + _ = yym50 if false { } else { - h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv47), d) + h.decSlicePersistentVolumeAccessMode((*[]PersistentVolumeAccessMode)(yyv49), d) } } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -7999,13 +8263,13 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco } x.ClaimRef.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -8013,16 +8277,16 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.PersistentVolumeReclaimPolicy = "" } else { - yyv50 := &x.PersistentVolumeReclaimPolicy - yyv50.CodecDecodeSelf(d) + yyv52 := &x.PersistentVolumeReclaimPolicy + yyv52.CodecDecodeSelf(d) } - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { z.DecSendContainerState(codecSelfer_containerArrayEnd1234) return } @@ -8030,26 +8294,26 @@ func (x *PersistentVolumeSpec) codecDecodeSelfFromArray(l int, d *codec1978.Deco if r.TryDecodeAsNil() { x.StorageClassName = "" } else { - yyv51 := &x.StorageClassName - yym52 := z.DecBinary() - _ = yym52 + yyv53 := &x.StorageClassName + yym54 := z.DecBinary() + _ = yym54 if false { } else { - *((*string)(yyv51)) = r.DecodeString() + *((*string)(yyv53)) = r.DecodeString() } } for { - yyj28++ - if yyhl28 { - yyb28 = yyj28 > l + yyj29++ + if yyhl29 { + yyb29 = yyj29 > l } else { - yyb28 = r.CheckBreak() + yyb29 = r.CheckBreak() } - if yyb28 { + if yyb29 { break } z.DecSendContainerState(codecSelfer_containerArrayElem1234) - z.DecStructFieldNotFound(yyj28-1, "") + z.DecStructFieldNotFound(yyj29-1, "") } z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } @@ -17539,6 +17803,300 @@ func (x *AzureDiskVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Dec z.DecSendContainerState(codecSelfer_containerArrayEnd1234) } +func (x *PortworxVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperEncoder(e) + _, _, _ = h, z, r + if x == nil { + r.EncodeNil() + } else { + yym1 := z.EncBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.EncExt(x) { + } else { + yysep2 := !z.EncBinary() + yy2arr2 := z.EncBasicHandle().StructToArray + var yyq2 [3]bool + _, _, _ = yysep2, yyq2, yy2arr2 + const yyr2 bool = false + yyq2[1] = x.FSType != "" + yyq2[2] = x.ReadOnly != false + var yynn2 int + if yyr2 || yy2arr2 { + r.EncodeArrayStart(3) + } else { + yynn2 = 1 + for _, b := range yyq2 { + if b { + yynn2++ + } + } + r.EncodeMapStart(yynn2) + yynn2 = 0 + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + yym4 := z.EncBinary() + _ = yym4 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } else { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("volumeID")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym5 := z.EncBinary() + _ = yym5 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.VolumeID)) + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[1] { + yym7 := z.EncBinary() + _ = yym7 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } else { + r.EncodeString(codecSelferC_UTF81234, "") + } + } else { + if yyq2[1] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("fsType")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym8 := z.EncBinary() + _ = yym8 + if false { + } else { + r.EncodeString(codecSelferC_UTF81234, string(x.FSType)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayElem1234) + if yyq2[2] { + yym10 := z.EncBinary() + _ = yym10 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } else { + r.EncodeBool(false) + } + } else { + if yyq2[2] { + z.EncSendContainerState(codecSelfer_containerMapKey1234) + r.EncodeString(codecSelferC_UTF81234, string("readOnly")) + z.EncSendContainerState(codecSelfer_containerMapValue1234) + yym11 := z.EncBinary() + _ = yym11 + if false { + } else { + r.EncodeBool(bool(x.ReadOnly)) + } + } + } + if yyr2 || yy2arr2 { + z.EncSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + z.EncSendContainerState(codecSelfer_containerMapEnd1234) + } + } + } +} + +func (x *PortworxVolumeSource) CodecDecodeSelf(d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + yym1 := z.DecBinary() + _ = yym1 + if false { + } else if z.HasExtensions() && z.DecExt(x) { + } else { + yyct2 := r.ContainerType() + if yyct2 == codecSelferValueTypeMap1234 { + yyl2 := r.ReadMapStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerMapEnd1234) + } else { + x.codecDecodeSelfFromMap(yyl2, d) + } + } else if yyct2 == codecSelferValueTypeArray1234 { + yyl2 := r.ReadArrayStart() + if yyl2 == 0 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + } else { + x.codecDecodeSelfFromArray(yyl2, d) + } + } else { + panic(codecSelferOnlyMapOrArrayEncodeToStructErr1234) + } + } +} + +func (x *PortworxVolumeSource) codecDecodeSelfFromMap(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yys3Slc = z.DecScratchBuffer() // default slice to decode into + _ = yys3Slc + var yyhl3 bool = l >= 0 + for yyj3 := 0; ; yyj3++ { + if yyhl3 { + if yyj3 >= l { + break + } + } else { + if r.CheckBreak() { + break + } + } + z.DecSendContainerState(codecSelfer_containerMapKey1234) + yys3Slc = r.DecodeBytes(yys3Slc, true, true) + yys3 := string(yys3Slc) + z.DecSendContainerState(codecSelfer_containerMapValue1234) + switch yys3 { + case "volumeID": + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + yyv4 := &x.VolumeID + yym5 := z.DecBinary() + _ = yym5 + if false { + } else { + *((*string)(yyv4)) = r.DecodeString() + } + } + case "fsType": + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + yyv6 := &x.FSType + yym7 := z.DecBinary() + _ = yym7 + if false { + } else { + *((*string)(yyv6)) = r.DecodeString() + } + } + case "readOnly": + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + yyv8 := &x.ReadOnly + yym9 := z.DecBinary() + _ = yym9 + if false { + } else { + *((*bool)(yyv8)) = r.DecodeBool() + } + } + default: + z.DecStructFieldNotFound(-1, yys3) + } // end switch yys3 + } // end for yyj3 + z.DecSendContainerState(codecSelfer_containerMapEnd1234) +} + +func (x *PortworxVolumeSource) codecDecodeSelfFromArray(l int, d *codec1978.Decoder) { + var h codecSelfer1234 + z, r := codec1978.GenHelperDecoder(d) + _, _, _ = h, z, r + var yyj10 int + var yyb10 bool + var yyhl10 bool = l >= 0 + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.VolumeID = "" + } else { + yyv11 := &x.VolumeID + yym12 := z.DecBinary() + _ = yym12 + if false { + } else { + *((*string)(yyv11)) = r.DecodeString() + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.FSType = "" + } else { + yyv13 := &x.FSType + yym14 := z.DecBinary() + _ = yym14 + if false { + } else { + *((*string)(yyv13)) = r.DecodeString() + } + } + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) + return + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + if r.TryDecodeAsNil() { + x.ReadOnly = false + } else { + yyv15 := &x.ReadOnly + yym16 := z.DecBinary() + _ = yym16 + if false { + } else { + *((*bool)(yyv15)) = r.DecodeBool() + } + } + for { + yyj10++ + if yyhl10 { + yyb10 = yyj10 > l + } else { + yyb10 = r.CheckBreak() + } + if yyb10 { + break + } + z.DecSendContainerState(codecSelfer_containerArrayElem1234) + z.DecStructFieldNotFound(yyj10-1, "") + } + z.DecSendContainerState(codecSelfer_containerArrayEnd1234) +} + func (x *ConfigMapVolumeSource) CodecEncodeSelf(e *codec1978.Encoder) { var h codecSelfer1234 z, r := codec1978.GenHelperEncoder(e) @@ -65428,7 +65986,7 @@ func (x codecSelfer1234) decSlicePersistentVolume(v *[]PersistentVolume, d *code yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 512) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 520) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] @@ -67207,7 +67765,7 @@ func (x codecSelfer1234) decSliceVolume(v *[]Volume, d *codec1978.Decoder) { yyrg1 := len(yyv1) > 0 yyv21 := yyv1 - yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 208) + yyrl1, yyrt1 = z.DecInferLen(yyl1, z.DecBasicHandle().MaxInitLen, 216) if yyrt1 { if yyrl1 <= cap(yyv1) { yyv1 = yyv1[:yyrl1] diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types.go b/staging/src/k8s.io/client-go/pkg/api/v1/types.go index 98374a9942..2b7b025e9b 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types.go @@ -328,6 +328,9 @@ type VolumeSource struct { PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,23,opt,name=photonPersistentDisk"` // Items for all in one resources secrets, configmaps, and downward API Projected *ProjectedVolumeSource `json:"projected,omitempty"` + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource `json:"portworxVolume,omitempty" protobuf:"bytes,24,opt,name=portworxVolume"` } // PersistentVolumeClaimVolumeSource references the user's PVC in the same namespace. @@ -413,6 +416,9 @@ type PersistentVolumeSource struct { AzureDisk *AzureDiskVolumeSource `json:"azureDisk,omitempty" protobuf:"bytes,16,opt,name=azureDisk"` // PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine PhotonPersistentDisk *PhotonPersistentDiskVolumeSource `json:"photonPersistentDisk,omitempty" protobuf:"bytes,17,opt,name=photonPersistentDisk"` + // PortworxVolume represents a portworx volume attached and mounted on kubelets host machine + // +optional + PortworxVolume *PortworxVolumeSource `json:"portworxVolume,omitempty" protobuf:"bytes,18,opt,name=portworxVolume"` } // +genclient=true @@ -1107,6 +1113,20 @@ type AzureDiskVolumeSource struct { ReadOnly *bool `json:"readOnly,omitempty" protobuf:"varint,5,opt,name=readOnly"` } +// PortworxVolumeSource represents a Portworx volume resource. +type PortworxVolumeSource struct { + // VolumeID uniquely identifies a Portworx volume + VolumeID string `json:"volumeID" protobuf:"bytes,1,opt,name=volumeID"` + // FSType represents the filesystem type to mount + // Must be a filesystem type supported by the host operating system. + // Ex. "ext4", "xfs". Implicitly inferred to be "ext4" if unspecified. + FSType string `json:"fsType,omitempty" protobuf:"bytes,2,opt,name=fsType"` + // Defaults to false (read/write). ReadOnly here will force + // the ReadOnly setting in VolumeMounts. + // +optional + ReadOnly bool `json:"readOnly,omitempty" protobuf:"varint,3,opt,name=readOnly"` +} + // Adapts a ConfigMap into a volume. // // The contents of the target ConfigMap's Data field will be presented in a diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go b/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go index 4eeb5a813a..f0516f89fb 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/types_swagger_doc_generated.go @@ -1122,6 +1122,7 @@ var map_PersistentVolumeSource = map[string]string{ "quobyte": "Quobyte represents a Quobyte mount on the host that shares a pod's lifetime", "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", "photonPersistentDisk": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", + "portworxVolume": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", } func (PersistentVolumeSource) SwaggerDoc() map[string]string { @@ -1399,6 +1400,17 @@ func (PodTemplateSpec) SwaggerDoc() map[string]string { return map_PodTemplateSpec } +var map_PortworxVolumeSource = map[string]string{ + "": "PortworxVolumeSource represents a Portworx volume resource.", + "volumeID": "VolumeID uniquely identifies a Portworx volume", + "fsType": "FSType represents the filesystem type to mount Must be a filesystem type supported by the host operating system. Ex. \"ext4\", \"xfs\". Implicitly inferred to be \"ext4\" if unspecified.", + "readOnly": "Defaults to false (read/write). ReadOnly here will force the ReadOnly setting in VolumeMounts.", +} + +func (PortworxVolumeSource) SwaggerDoc() map[string]string { + return map_PortworxVolumeSource +} + var map_Preconditions = map[string]string{ "": "Preconditions must be fulfilled before an operation (update, delete, etc.) is carried out.", "uid": "Specifies the target UID.", @@ -1897,6 +1909,7 @@ var map_VolumeSource = map[string]string{ "azureDisk": "AzureDisk represents an Azure Data Disk mount on the host and bind mount to the pod.", "photonPersistentDisk": "PhotonPersistentDisk represents a PhotonController persistent disk attached and mounted on kubelets host machine", "projected": "Items for all in one resources secrets, configmaps, and downward API", + "portworxVolume": "PortworxVolume represents a portworx volume attached and mounted on kubelets host machine", } func (VolumeSource) SwaggerDoc() map[string]string { diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go index b3d508ed1c..a1bb04d7c6 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.conversion.go @@ -275,6 +275,8 @@ func RegisterConversions(scheme *runtime.Scheme) error { Convert_api_PodTemplateList_To_v1_PodTemplateList, Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec, Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec, + Convert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource, + Convert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource, Convert_v1_Preconditions_To_api_Preconditions, Convert_api_Preconditions_To_v1_Preconditions, Convert_v1_PreferAvoidPodsEntry_To_api_PreferAvoidPodsEntry, @@ -2706,6 +2708,7 @@ func autoConvert_v1_PersistentVolumeSource_To_api_PersistentVolumeSource(in *Per out.Quobyte = (*api.QuobyteVolumeSource)(unsafe.Pointer(in.Quobyte)) out.AzureDisk = (*api.AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*api.PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) + out.PortworxVolume = (*api.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } @@ -2731,6 +2734,7 @@ func autoConvert_api_PersistentVolumeSource_To_v1_PersistentVolumeSource(in *api out.VsphereVolume = (*VsphereVirtualDiskVolumeSource)(unsafe.Pointer(in.VsphereVolume)) out.AzureDisk = (*AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) + out.PortworxVolume = (*PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } @@ -3341,6 +3345,28 @@ func autoConvert_api_PodTemplateSpec_To_v1_PodTemplateSpec(in *api.PodTemplateSp return nil } +func autoConvert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource(in *PortworxVolumeSource, out *api.PortworxVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource(in *PortworxVolumeSource, out *api.PortworxVolumeSource, s conversion.Scope) error { + return autoConvert_v1_PortworxVolumeSource_To_api_PortworxVolumeSource(in, out, s) +} + +func autoConvert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource(in *api.PortworxVolumeSource, out *PortworxVolumeSource, s conversion.Scope) error { + out.VolumeID = in.VolumeID + out.FSType = in.FSType + out.ReadOnly = in.ReadOnly + return nil +} + +func Convert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource(in *api.PortworxVolumeSource, out *PortworxVolumeSource, s conversion.Scope) error { + return autoConvert_api_PortworxVolumeSource_To_v1_PortworxVolumeSource(in, out, s) +} + func autoConvert_v1_Preconditions_To_api_Preconditions(in *Preconditions, out *api.Preconditions, s conversion.Scope) error { out.UID = (*types.UID)(unsafe.Pointer(in.UID)) return nil @@ -4458,6 +4484,7 @@ func autoConvert_v1_VolumeSource_To_api_VolumeSource(in *VolumeSource, out *api. out.AzureDisk = (*api.AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*api.PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) out.Projected = (*api.ProjectedVolumeSource)(unsafe.Pointer(in.Projected)) + out.PortworxVolume = (*api.PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } @@ -4490,6 +4517,7 @@ func autoConvert_api_VolumeSource_To_v1_VolumeSource(in *api.VolumeSource, out * out.AzureDisk = (*AzureDiskVolumeSource)(unsafe.Pointer(in.AzureDisk)) out.PhotonPersistentDisk = (*PhotonPersistentDiskVolumeSource)(unsafe.Pointer(in.PhotonPersistentDisk)) out.Projected = (*ProjectedVolumeSource)(unsafe.Pointer(in.Projected)) + out.PortworxVolume = (*PortworxVolumeSource)(unsafe.Pointer(in.PortworxVolume)) return nil } diff --git a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go index 95cbf40f38..a1c916a660 100644 --- a/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/api/v1/zz_generated.deepcopy.go @@ -155,6 +155,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PortworxVolumeSource, InType: reflect.TypeOf(&PortworxVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_v1_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, @@ -2015,6 +2016,11 @@ func DeepCopy_v1_PersistentVolumeSource(in interface{}, out interface{}, c *conv *out = new(PhotonPersistentDiskVolumeSource) **out = **in } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } @@ -2513,6 +2519,15 @@ func DeepCopy_v1_PodTemplateSpec(in interface{}, out interface{}, c *conversion. } } +func DeepCopy_v1_PortworxVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PortworxVolumeSource) + out := out.(*PortworxVolumeSource) + *out = *in + return nil + } +} + func DeepCopy_v1_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*Preconditions) @@ -3420,6 +3435,11 @@ func DeepCopy_v1_VolumeSource(in interface{}, out interface{}, c *conversion.Clo return err } } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } diff --git a/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go b/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go index 448f917eea..47fc350748 100644 --- a/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go +++ b/staging/src/k8s.io/client-go/pkg/api/zz_generated.deepcopy.go @@ -158,6 +158,7 @@ func RegisterDeepCopies(scheme *runtime.Scheme) error { conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplate, InType: reflect.TypeOf(&PodTemplate{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateList, InType: reflect.TypeOf(&PodTemplateList{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PodTemplateSpec, InType: reflect.TypeOf(&PodTemplateSpec{})}, + conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PortworxVolumeSource, InType: reflect.TypeOf(&PortworxVolumeSource{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_Preconditions, InType: reflect.TypeOf(&Preconditions{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferAvoidPodsEntry, InType: reflect.TypeOf(&PreferAvoidPodsEntry{})}, conversion.GeneratedDeepCopyFunc{Fn: DeepCopy_api_PreferredSchedulingTerm, InType: reflect.TypeOf(&PreferredSchedulingTerm{})}, @@ -2059,6 +2060,11 @@ func DeepCopy_api_PersistentVolumeSource(in interface{}, out interface{}, c *con *out = new(PhotonPersistentDiskVolumeSource) **out = **in } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } @@ -2557,6 +2563,15 @@ func DeepCopy_api_PodTemplateSpec(in interface{}, out interface{}, c *conversion } } +func DeepCopy_api_PortworxVolumeSource(in interface{}, out interface{}, c *conversion.Cloner) error { + { + in := in.(*PortworxVolumeSource) + out := out.(*PortworxVolumeSource) + *out = *in + return nil + } +} + func DeepCopy_api_Preconditions(in interface{}, out interface{}, c *conversion.Cloner) error { { in := in.(*Preconditions) @@ -3447,6 +3462,11 @@ func DeepCopy_api_VolumeSource(in interface{}, out interface{}, c *conversion.Cl return err } } + if in.PortworxVolume != nil { + in, out := &in.PortworxVolume, &out.PortworxVolume + *out = new(PortworxVolumeSource) + **out = **in + } return nil } } diff --git a/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go b/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go index 0ea68059e0..f071d81f01 100644 --- a/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go +++ b/staging/src/k8s.io/client-go/pkg/apis/extensions/types.go @@ -917,6 +917,7 @@ var ( AzureDisk FSType = "azureDisk" PhotonPersistentDisk FSType = "photonPersistentDisk" Projected FSType = "projected" + PortworxVolume FSType = "portworxVolume" All FSType = "*" ) diff --git a/vendor/BUILD b/vendor/BUILD index 5fae3897db..ea9b956531 100644 --- a/vendor/BUILD +++ b/vendor/BUILD @@ -16604,3 +16604,86 @@ go_library( ], tags = ["automanaged"], ) + +go_library( + name = "github.com/libopenstorage/openstorage/api", + srcs = [ + "github.com/libopenstorage/openstorage/api/api.go", + "github.com/libopenstorage/openstorage/api/api.pb.go", + "github.com/libopenstorage/openstorage/api/status.go", + ], + tags = ["automanaged"], + deps = [ + "//vendor:github.com/golang/protobuf/proto", + "//vendor:go.pedge.io/pb/go/google/protobuf", + ], +) + +go_library( + name = "github.com/libopenstorage/openstorage/api/client", + srcs = [ + "github.com/libopenstorage/openstorage/api/client/client.go", + "github.com/libopenstorage/openstorage/api/client/request.go", + ], + tags = ["automanaged"], +) + +go_library( + name = "github.com/libopenstorage/openstorage/api/client/volume", + srcs = [ + "github.com/libopenstorage/openstorage/api/client/volume/client.go", + "github.com/libopenstorage/openstorage/api/client/volume/volume.go", + ], + tags = ["automanaged"], + deps = [ + "//vendor:github.com/libopenstorage/openstorage/api", + "//vendor:github.com/libopenstorage/openstorage/api/client", + "//vendor:github.com/libopenstorage/openstorage/volume", + ], +) + +go_library( + name = "github.com/libopenstorage/openstorage/api/spec", + srcs = ["github.com/libopenstorage/openstorage/api/spec/spec_handler.go"], + tags = ["automanaged"], + deps = [ + "//vendor:github.com/libopenstorage/openstorage/api", + "//vendor:github.com/libopenstorage/openstorage/pkg/units", + ], +) + +go_library( + name = "github.com/libopenstorage/openstorage/pkg/units", + srcs = ["github.com/libopenstorage/openstorage/pkg/units/units.go"], + tags = ["automanaged"], +) + +go_library( + name = "github.com/libopenstorage/openstorage/volume", + srcs = [ + "github.com/libopenstorage/openstorage/volume/volume.go", + "github.com/libopenstorage/openstorage/volume/volume_driver_registry.go", + "github.com/libopenstorage/openstorage/volume/volume_not_supported.go", + ], + tags = ["automanaged"], + deps = ["//vendor:github.com/libopenstorage/openstorage/api"], +) + +go_library( + name = "go.pedge.io/pb/go/google/protobuf", + srcs = [ + "go.pedge.io/pb/go/google/protobuf/any.pb.go", + "go.pedge.io/pb/go/google/protobuf/api.pb.go", + "go.pedge.io/pb/go/google/protobuf/duration.pb.go", + "go.pedge.io/pb/go/google/protobuf/empty.pb.go", + "go.pedge.io/pb/go/google/protobuf/field_mask.pb.go", + "go.pedge.io/pb/go/google/protobuf/protobuf.gen.go", + "go.pedge.io/pb/go/google/protobuf/source_context.pb.go", + "go.pedge.io/pb/go/google/protobuf/struct.pb.go", + "go.pedge.io/pb/go/google/protobuf/timestamp.pb.go", + "go.pedge.io/pb/go/google/protobuf/type.pb.go", + "go.pedge.io/pb/go/google/protobuf/wrappers.pb.go", + ], + tags = ["automanaged"], + deps = ["//vendor:github.com/golang/protobuf/proto"], +) diff --git a/vendor/github.com/libopenstorage/openstorage/LICENSE b/vendor/github.com/libopenstorage/openstorage/LICENSE new file mode 100644 index 0000000000..bcab93af98 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/LICENSE @@ -0,0 +1,191 @@ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2015 Openstorage.org. + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/vendor/github.com/libopenstorage/openstorage/api/api.go b/vendor/github.com/libopenstorage/openstorage/api/api.go new file mode 100644 index 0000000000..6abc53af2e --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/api.go @@ -0,0 +1,208 @@ +package api + +import ( + "fmt" + "strconv" + "strings" + "time" +) + +// Strings for VolumeSpec +const ( + Name = "name" + SpecEphemeral = "ephemeral" + SpecShared = "shared" + SpecSize = "size" + SpecScale = "scale" + SpecFilesystem = "fs" + SpecBlockSize = "block_size" + SpecHaLevel = "repl" + SpecPriority = "io_priority" + SpecSnapshotInterval = "snap_interval" + SpecAggregationLevel = "aggregation_level" + SpecDedupe = "dedupe" + SpecPassphrase = "passphrase" +) + +// OptionKey specifies a set of recognized query params. +const ( + // OptName query parameter used to lookup volume by name. + OptName = "Name" + // OptVolumeID query parameter used to lookup volume by ID. + OptVolumeID = "VolumeID" + // OptLabel query parameter used to lookup volume by set of labels. + OptLabel = "Label" + // OptConfigLabel query parameter used to lookup volume by set of labels. + OptConfigLabel = "ConfigLabel" + // OptCumulative query parameter used to request cumulative stats. + OptCumulative = "Cumulative" +) + +// Api client-server Constants +const ( + OsdVolumePath = "osd-volumes" + OsdSnapshotPath = "osd-snapshot" +) +// Node describes the state of a node. +// It includes the current physical state (CPU, memory, storage, network usage) as +// well as the containers running on the system. +type Node struct { + Id string + Cpu float64 // percentage. + MemTotal uint64 + MemUsed uint64 + MemFree uint64 + Avgload int + Status Status + GenNumber uint64 + Disks map[string]StorageResource + MgmtIp string + DataIp string + Timestamp time.Time + StartTime time.Time + Hostname string + NodeData map[string]interface{} + // User defined labels for node. Key Value pairs + NodeLabels map[string]string +} + +// Cluster represents the state of the cluster. +type Cluster struct { + Status Status + + // Id is the ID of the cluster. + Id string + + // NodeId is the ID of the node on which this cluster object + // is initialized + NodeId string + + // Nodes is an array of all the nodes in the cluster. + Nodes []Node +} + +// StatPoint represents the basic structure of a single Stat reported +// TODO: This is the first step to introduce stats in openstorage. +// Follow up task is to introduce an API for logging stats +type StatPoint struct { + // Name of the Stat + Name string + // Tags for the Stat + Tags map[string]string + // Fields and values of the stat + Fields map[string]interface{} + // Timestamp in Unix format + Timestamp int64 +} + +func DriverTypeSimpleValueOf(s string) (DriverType, error) { + obj, err := simpleValueOf("driver_type", DriverType_value, s) + return DriverType(obj), err +} + +func (x DriverType) SimpleString() string { + return simpleString("driver_type", DriverType_name, int32(x)) +} + +func FSTypeSimpleValueOf(s string) (FSType, error) { + obj, err := simpleValueOf("fs_type", FSType_value, s) + return FSType(obj), err +} + +func (x FSType) SimpleString() string { + return simpleString("fs_type", FSType_name, int32(x)) +} + +func CosTypeSimpleValueOf(s string) (CosType, error) { + obj, err := simpleValueOf("cos_type", CosType_value, s) + return CosType(obj), err +} + +func (x CosType) SimpleString() string { + return simpleString("cos_type", CosType_name, int32(x)) +} + +func GraphDriverChangeTypeSimpleValueOf(s string) (GraphDriverChangeType, error) { + obj, err := simpleValueOf("graph_driver_change_type", GraphDriverChangeType_value, s) + return GraphDriverChangeType(obj), err +} + +func (x GraphDriverChangeType) SimpleString() string { + return simpleString("graph_driver_change_type", GraphDriverChangeType_name, int32(x)) +} + +func VolumeActionParamSimpleValueOf(s string) (VolumeActionParam, error) { + obj, err := simpleValueOf("volume_action_param", VolumeActionParam_value, s) + return VolumeActionParam(obj), err +} + +func (x VolumeActionParam) SimpleString() string { + return simpleString("volume_action_param", VolumeActionParam_name, int32(x)) +} + +func VolumeStateSimpleValueOf(s string) (VolumeState, error) { + obj, err := simpleValueOf("volume_state", VolumeState_value, s) + return VolumeState(obj), err +} + +func (x VolumeState) SimpleString() string { + return simpleString("volume_state", VolumeState_name, int32(x)) +} + +func VolumeStatusSimpleValueOf(s string) (VolumeStatus, error) { + obj, err := simpleValueOf("volume_status", VolumeStatus_value, s) + return VolumeStatus(obj), err +} + +func (x VolumeStatus) SimpleString() string { + return simpleString("volume_status", VolumeStatus_name, int32(x)) +} + +func simpleValueOf(typeString string, valueMap map[string]int32, s string) (int32, error) { + obj, ok := valueMap[strings.ToUpper(fmt.Sprintf("%s_%s", typeString, s))] + if !ok { + return 0, fmt.Errorf("no openstorage.%s for %s", strings.ToUpper(typeString), s) + } + return obj, nil +} + +func simpleString(typeString string, nameMap map[int32]string, v int32) string { + s, ok := nameMap[v] + if !ok { + return strconv.Itoa(int(v)) + } + return strings.TrimPrefix(strings.ToLower(s), fmt.Sprintf("%s_", strings.ToLower(typeString))) +} + +func toSec(ms uint64) uint64 { + return ms / 1000 +} + +func (v *Stats) WriteThroughput() uint64 { + if v.IntervalMs == 0 { + return 0 + } + return (v.WriteBytes) / toSec(v.IntervalMs) +} + +func (v *Stats) ReadThroughput() uint64 { + if v.IntervalMs == 0 { + return 0 + } + return (v.ReadBytes) / toSec(v.IntervalMs) +} + +func (v *Stats) Latency() uint64 { + ops := v.Writes + v.Reads + if ops == 0 { + return 0 + } + return (uint64)((v.IoMs * 1000) / (v.Writes + v.Reads)) +} + +func (v *Stats) Iops() uint64 { + if v.IntervalMs == 0 { + return 0 + } + return (v.Writes + v.Reads) / toSec(v.IntervalMs) +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/api.pb.go b/vendor/github.com/libopenstorage/openstorage/api/api.pb.go new file mode 100644 index 0000000000..c9ee511550 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/api.pb.go @@ -0,0 +1,1730 @@ +// Code generated by protoc-gen-go. +// source: api/api.proto +// DO NOT EDIT! + +package api + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" +import google_protobuf "go.pedge.io/pb/go/google/protobuf" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +type Status int32 + +const ( + Status_STATUS_NONE Status = 0 + Status_STATUS_INIT Status = 1 + Status_STATUS_OK Status = 2 + Status_STATUS_OFFLINE Status = 3 + Status_STATUS_ERROR Status = 4 + Status_STATUS_NOT_IN_QUORUM Status = 5 + Status_STATUS_DECOMMISSION Status = 6 + Status_STATUS_MAINTENANCE Status = 7 + Status_STATUS_STORAGE_DOWN Status = 8 + Status_STATUS_STORAGE_DEGRADED Status = 9 + Status_STATUS_NEEDS_REBOOT Status = 10 + Status_STATUS_STORAGE_REBALANCE Status = 11 + Status_STATUS_STORAGE_DRIVE_REPLACE Status = 12 + // Add statuses before MAX and update the number for MAX + Status_STATUS_MAX Status = 13 +) + +var Status_name = map[int32]string{ + 0: "STATUS_NONE", + 1: "STATUS_INIT", + 2: "STATUS_OK", + 3: "STATUS_OFFLINE", + 4: "STATUS_ERROR", + 5: "STATUS_NOT_IN_QUORUM", + 6: "STATUS_DECOMMISSION", + 7: "STATUS_MAINTENANCE", + 8: "STATUS_STORAGE_DOWN", + 9: "STATUS_STORAGE_DEGRADED", + 10: "STATUS_NEEDS_REBOOT", + 11: "STATUS_STORAGE_REBALANCE", + 12: "STATUS_STORAGE_DRIVE_REPLACE", + 13: "STATUS_MAX", +} +var Status_value = map[string]int32{ + "STATUS_NONE": 0, + "STATUS_INIT": 1, + "STATUS_OK": 2, + "STATUS_OFFLINE": 3, + "STATUS_ERROR": 4, + "STATUS_NOT_IN_QUORUM": 5, + "STATUS_DECOMMISSION": 6, + "STATUS_MAINTENANCE": 7, + "STATUS_STORAGE_DOWN": 8, + "STATUS_STORAGE_DEGRADED": 9, + "STATUS_NEEDS_REBOOT": 10, + "STATUS_STORAGE_REBALANCE": 11, + "STATUS_STORAGE_DRIVE_REPLACE": 12, + "STATUS_MAX": 13, +} + +func (x Status) String() string { + return proto.EnumName(Status_name, int32(x)) +} +func (Status) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +type DriverType int32 + +const ( + DriverType_DRIVER_TYPE_NONE DriverType = 0 + DriverType_DRIVER_TYPE_FILE DriverType = 1 + DriverType_DRIVER_TYPE_BLOCK DriverType = 2 + DriverType_DRIVER_TYPE_OBJECT DriverType = 3 + DriverType_DRIVER_TYPE_CLUSTERED DriverType = 4 + DriverType_DRIVER_TYPE_GRAPH DriverType = 5 +) + +var DriverType_name = map[int32]string{ + 0: "DRIVER_TYPE_NONE", + 1: "DRIVER_TYPE_FILE", + 2: "DRIVER_TYPE_BLOCK", + 3: "DRIVER_TYPE_OBJECT", + 4: "DRIVER_TYPE_CLUSTERED", + 5: "DRIVER_TYPE_GRAPH", +} +var DriverType_value = map[string]int32{ + "DRIVER_TYPE_NONE": 0, + "DRIVER_TYPE_FILE": 1, + "DRIVER_TYPE_BLOCK": 2, + "DRIVER_TYPE_OBJECT": 3, + "DRIVER_TYPE_CLUSTERED": 4, + "DRIVER_TYPE_GRAPH": 5, +} + +func (x DriverType) String() string { + return proto.EnumName(DriverType_name, int32(x)) +} +func (DriverType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +type FSType int32 + +const ( + FSType_FS_TYPE_NONE FSType = 0 + FSType_FS_TYPE_BTRFS FSType = 1 + FSType_FS_TYPE_EXT4 FSType = 2 + FSType_FS_TYPE_FUSE FSType = 3 + FSType_FS_TYPE_NFS FSType = 4 + FSType_FS_TYPE_VFS FSType = 5 + FSType_FS_TYPE_XFS FSType = 6 + FSType_FS_TYPE_ZFS FSType = 7 +) + +var FSType_name = map[int32]string{ + 0: "FS_TYPE_NONE", + 1: "FS_TYPE_BTRFS", + 2: "FS_TYPE_EXT4", + 3: "FS_TYPE_FUSE", + 4: "FS_TYPE_NFS", + 5: "FS_TYPE_VFS", + 6: "FS_TYPE_XFS", + 7: "FS_TYPE_ZFS", +} +var FSType_value = map[string]int32{ + "FS_TYPE_NONE": 0, + "FS_TYPE_BTRFS": 1, + "FS_TYPE_EXT4": 2, + "FS_TYPE_FUSE": 3, + "FS_TYPE_NFS": 4, + "FS_TYPE_VFS": 5, + "FS_TYPE_XFS": 6, + "FS_TYPE_ZFS": 7, +} + +func (x FSType) String() string { + return proto.EnumName(FSType_name, int32(x)) +} +func (FSType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +type GraphDriverChangeType int32 + +const ( + GraphDriverChangeType_GRAPH_DRIVER_CHANGE_TYPE_NONE GraphDriverChangeType = 0 + GraphDriverChangeType_GRAPH_DRIVER_CHANGE_TYPE_MODIFIED GraphDriverChangeType = 1 + GraphDriverChangeType_GRAPH_DRIVER_CHANGE_TYPE_ADDED GraphDriverChangeType = 2 + GraphDriverChangeType_GRAPH_DRIVER_CHANGE_TYPE_DELETED GraphDriverChangeType = 3 +) + +var GraphDriverChangeType_name = map[int32]string{ + 0: "GRAPH_DRIVER_CHANGE_TYPE_NONE", + 1: "GRAPH_DRIVER_CHANGE_TYPE_MODIFIED", + 2: "GRAPH_DRIVER_CHANGE_TYPE_ADDED", + 3: "GRAPH_DRIVER_CHANGE_TYPE_DELETED", +} +var GraphDriverChangeType_value = map[string]int32{ + "GRAPH_DRIVER_CHANGE_TYPE_NONE": 0, + "GRAPH_DRIVER_CHANGE_TYPE_MODIFIED": 1, + "GRAPH_DRIVER_CHANGE_TYPE_ADDED": 2, + "GRAPH_DRIVER_CHANGE_TYPE_DELETED": 3, +} + +func (x GraphDriverChangeType) String() string { + return proto.EnumName(GraphDriverChangeType_name, int32(x)) +} +func (GraphDriverChangeType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +type SeverityType int32 + +const ( + SeverityType_SEVERITY_TYPE_NONE SeverityType = 0 + SeverityType_SEVERITY_TYPE_ALARM SeverityType = 1 + SeverityType_SEVERITY_TYPE_WARNING SeverityType = 2 + SeverityType_SEVERITY_TYPE_NOTIFY SeverityType = 3 +) + +var SeverityType_name = map[int32]string{ + 0: "SEVERITY_TYPE_NONE", + 1: "SEVERITY_TYPE_ALARM", + 2: "SEVERITY_TYPE_WARNING", + 3: "SEVERITY_TYPE_NOTIFY", +} +var SeverityType_value = map[string]int32{ + "SEVERITY_TYPE_NONE": 0, + "SEVERITY_TYPE_ALARM": 1, + "SEVERITY_TYPE_WARNING": 2, + "SEVERITY_TYPE_NOTIFY": 3, +} + +func (x SeverityType) String() string { + return proto.EnumName(SeverityType_name, int32(x)) +} +func (SeverityType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +type ResourceType int32 + +const ( + ResourceType_RESOURCE_TYPE_NONE ResourceType = 0 + ResourceType_RESOURCE_TYPE_VOLUME ResourceType = 1 + ResourceType_RESOURCE_TYPE_NODE ResourceType = 2 + ResourceType_RESOURCE_TYPE_CLUSTER ResourceType = 3 + ResourceType_RESOURCE_TYPE_DRIVE ResourceType = 4 +) + +var ResourceType_name = map[int32]string{ + 0: "RESOURCE_TYPE_NONE", + 1: "RESOURCE_TYPE_VOLUME", + 2: "RESOURCE_TYPE_NODE", + 3: "RESOURCE_TYPE_CLUSTER", + 4: "RESOURCE_TYPE_DRIVE", +} +var ResourceType_value = map[string]int32{ + "RESOURCE_TYPE_NONE": 0, + "RESOURCE_TYPE_VOLUME": 1, + "RESOURCE_TYPE_NODE": 2, + "RESOURCE_TYPE_CLUSTER": 3, + "RESOURCE_TYPE_DRIVE": 4, +} + +func (x ResourceType) String() string { + return proto.EnumName(ResourceType_name, int32(x)) +} +func (ResourceType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +type AlertActionType int32 + +const ( + AlertActionType_ALERT_ACTION_TYPE_NONE AlertActionType = 0 + AlertActionType_ALERT_ACTION_TYPE_DELETE AlertActionType = 1 + AlertActionType_ALERT_ACTION_TYPE_CREATE AlertActionType = 2 + AlertActionType_ALERT_ACTION_TYPE_UPDATE AlertActionType = 3 +) + +var AlertActionType_name = map[int32]string{ + 0: "ALERT_ACTION_TYPE_NONE", + 1: "ALERT_ACTION_TYPE_DELETE", + 2: "ALERT_ACTION_TYPE_CREATE", + 3: "ALERT_ACTION_TYPE_UPDATE", +} +var AlertActionType_value = map[string]int32{ + "ALERT_ACTION_TYPE_NONE": 0, + "ALERT_ACTION_TYPE_DELETE": 1, + "ALERT_ACTION_TYPE_CREATE": 2, + "ALERT_ACTION_TYPE_UPDATE": 3, +} + +func (x AlertActionType) String() string { + return proto.EnumName(AlertActionType_name, int32(x)) +} +func (AlertActionType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +type VolumeActionParam int32 + +const ( + VolumeActionParam_VOLUME_ACTION_PARAM_NONE VolumeActionParam = 0 + // Maps to the boolean value false + VolumeActionParam_VOLUME_ACTION_PARAM_OFF VolumeActionParam = 1 + // Maps to the boolean value true. + VolumeActionParam_VOLUME_ACTION_PARAM_ON VolumeActionParam = 2 +) + +var VolumeActionParam_name = map[int32]string{ + 0: "VOLUME_ACTION_PARAM_NONE", + 1: "VOLUME_ACTION_PARAM_OFF", + 2: "VOLUME_ACTION_PARAM_ON", +} +var VolumeActionParam_value = map[string]int32{ + "VOLUME_ACTION_PARAM_NONE": 0, + "VOLUME_ACTION_PARAM_OFF": 1, + "VOLUME_ACTION_PARAM_ON": 2, +} + +func (x VolumeActionParam) String() string { + return proto.EnumName(VolumeActionParam_name, int32(x)) +} +func (VolumeActionParam) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +type CosType int32 + +const ( + CosType_NONE CosType = 0 + CosType_LOW CosType = 1 + CosType_MEDIUM CosType = 2 + CosType_HIGH CosType = 3 +) + +var CosType_name = map[int32]string{ + 0: "NONE", + 1: "LOW", + 2: "MEDIUM", + 3: "HIGH", +} +var CosType_value = map[string]int32{ + "NONE": 0, + "LOW": 1, + "MEDIUM": 2, + "HIGH": 3, +} + +func (x CosType) String() string { + return proto.EnumName(CosType_name, int32(x)) +} +func (CosType) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +// VolumeState represents the state of a volume. +type VolumeState int32 + +const ( + VolumeState_VOLUME_STATE_NONE VolumeState = 0 + // Volume is transitioning to new state + VolumeState_VOLUME_STATE_PENDING VolumeState = 1 + // Volume is ready to be assigned to a container + VolumeState_VOLUME_STATE_AVAILABLE VolumeState = 2 + // Volume is attached to container + VolumeState_VOLUME_STATE_ATTACHED VolumeState = 3 + // Volume is detached but associated with a container + VolumeState_VOLUME_STATE_DETACHED VolumeState = 4 + // Volume detach is in progress + VolumeState_VOLUME_STATE_DETATCHING VolumeState = 5 + // Volume is in error state + VolumeState_VOLUME_STATE_ERROR VolumeState = 6 + // Volume is deleted, it will remain in this state + // while resources are asynchronously reclaimed + VolumeState_VOLUME_STATE_DELETED VolumeState = 7 +) + +var VolumeState_name = map[int32]string{ + 0: "VOLUME_STATE_NONE", + 1: "VOLUME_STATE_PENDING", + 2: "VOLUME_STATE_AVAILABLE", + 3: "VOLUME_STATE_ATTACHED", + 4: "VOLUME_STATE_DETACHED", + 5: "VOLUME_STATE_DETATCHING", + 6: "VOLUME_STATE_ERROR", + 7: "VOLUME_STATE_DELETED", +} +var VolumeState_value = map[string]int32{ + "VOLUME_STATE_NONE": 0, + "VOLUME_STATE_PENDING": 1, + "VOLUME_STATE_AVAILABLE": 2, + "VOLUME_STATE_ATTACHED": 3, + "VOLUME_STATE_DETACHED": 4, + "VOLUME_STATE_DETATCHING": 5, + "VOLUME_STATE_ERROR": 6, + "VOLUME_STATE_DELETED": 7, +} + +func (x VolumeState) String() string { + return proto.EnumName(VolumeState_name, int32(x)) +} +func (VolumeState) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +// VolumeStatus represents a health status for a volume. +type VolumeStatus int32 + +const ( + VolumeStatus_VOLUME_STATUS_NONE VolumeStatus = 0 + // Volume is not present + VolumeStatus_VOLUME_STATUS_NOT_PRESENT VolumeStatus = 1 + // Volume is healthy + VolumeStatus_VOLUME_STATUS_UP VolumeStatus = 2 + // Volume is in fail mode + VolumeStatus_VOLUME_STATUS_DOWN VolumeStatus = 3 + // Volume is up but with degraded performance + // In a RAID group, this may indicate a problem with one or more drives + VolumeStatus_VOLUME_STATUS_DEGRADED VolumeStatus = 4 +) + +var VolumeStatus_name = map[int32]string{ + 0: "VOLUME_STATUS_NONE", + 1: "VOLUME_STATUS_NOT_PRESENT", + 2: "VOLUME_STATUS_UP", + 3: "VOLUME_STATUS_DOWN", + 4: "VOLUME_STATUS_DEGRADED", +} +var VolumeStatus_value = map[string]int32{ + "VOLUME_STATUS_NONE": 0, + "VOLUME_STATUS_NOT_PRESENT": 1, + "VOLUME_STATUS_UP": 2, + "VOLUME_STATUS_DOWN": 3, + "VOLUME_STATUS_DEGRADED": 4, +} + +func (x VolumeStatus) String() string { + return proto.EnumName(VolumeStatus_name, int32(x)) +} +func (VolumeStatus) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +type StorageMedium int32 + +const ( + // Magnetic spinning disk. + StorageMedium_STORAGE_MEDIUM_MAGNETIC StorageMedium = 0 + // SSD disk + StorageMedium_STORAGE_MEDIUM_SSD StorageMedium = 1 + // NVME disk + StorageMedium_STORAGE_MEDIUM_NVME StorageMedium = 2 +) + +var StorageMedium_name = map[int32]string{ + 0: "STORAGE_MEDIUM_MAGNETIC", + 1: "STORAGE_MEDIUM_SSD", + 2: "STORAGE_MEDIUM_NVME", +} +var StorageMedium_value = map[string]int32{ + "STORAGE_MEDIUM_MAGNETIC": 0, + "STORAGE_MEDIUM_SSD": 1, + "STORAGE_MEDIUM_NVME": 2, +} + +func (x StorageMedium) String() string { + return proto.EnumName(StorageMedium_name, int32(x)) +} +func (StorageMedium) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +type ClusterNotify int32 + +const ( + // Node is down + ClusterNotify_CLUSTER_NOTIFY_DOWN ClusterNotify = 0 +) + +var ClusterNotify_name = map[int32]string{ + 0: "CLUSTER_NOTIFY_DOWN", +} +var ClusterNotify_value = map[string]int32{ + "CLUSTER_NOTIFY_DOWN": 0, +} + +func (x ClusterNotify) String() string { + return proto.EnumName(ClusterNotify_name, int32(x)) +} +func (ClusterNotify) EnumDescriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +// StorageResource groups properties of a storage device. +type StorageResource struct { + // Id is the LUN identifier. + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + // Path device path for this storage resource. + Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` + // Storage medium. + Medium StorageMedium `protobuf:"varint,3,opt,name=medium,enum=openstorage.api.StorageMedium" json:"medium,omitempty"` + // True if this device is online. + Online bool `protobuf:"varint,4,opt,name=online" json:"online,omitempty"` + // IOPS + Iops uint64 `protobuf:"varint,5,opt,name=iops" json:"iops,omitempty"` + // SeqWrite + SeqWrite float64 `protobuf:"fixed64,6,opt,name=seq_write,json=seqWrite" json:"seq_write,omitempty"` + // SeqRead + SeqRead float64 `protobuf:"fixed64,7,opt,name=seq_read,json=seqRead" json:"seq_read,omitempty"` + // RandRW + RandRW float64 `protobuf:"fixed64,8,opt,name=randRW" json:"randRW,omitempty"` + // Total size in bytes. + Size uint64 `protobuf:"varint,9,opt,name=size" json:"size,omitempty"` + // Physical Bytes used. + Used uint64 `protobuf:"varint,10,opt,name=used" json:"used,omitempty"` + // True if this device is rotational. + RotationSpeed string `protobuf:"bytes,11,opt,name=rotation_speed,json=rotationSpeed" json:"rotation_speed,omitempty"` + // Timestamp of last time this device was scanned. + LastScan *google_protobuf.Timestamp `protobuf:"bytes,12,opt,name=last_scan,json=lastScan" json:"last_scan,omitempty"` +} + +func (m *StorageResource) Reset() { *m = StorageResource{} } +func (m *StorageResource) String() string { return proto.CompactTextString(m) } +func (*StorageResource) ProtoMessage() {} +func (*StorageResource) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } + +func (m *StorageResource) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *StorageResource) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *StorageResource) GetMedium() StorageMedium { + if m != nil { + return m.Medium + } + return StorageMedium_STORAGE_MEDIUM_MAGNETIC +} + +func (m *StorageResource) GetOnline() bool { + if m != nil { + return m.Online + } + return false +} + +func (m *StorageResource) GetIops() uint64 { + if m != nil { + return m.Iops + } + return 0 +} + +func (m *StorageResource) GetSeqWrite() float64 { + if m != nil { + return m.SeqWrite + } + return 0 +} + +func (m *StorageResource) GetSeqRead() float64 { + if m != nil { + return m.SeqRead + } + return 0 +} + +func (m *StorageResource) GetRandRW() float64 { + if m != nil { + return m.RandRW + } + return 0 +} + +func (m *StorageResource) GetSize() uint64 { + if m != nil { + return m.Size + } + return 0 +} + +func (m *StorageResource) GetUsed() uint64 { + if m != nil { + return m.Used + } + return 0 +} + +func (m *StorageResource) GetRotationSpeed() string { + if m != nil { + return m.RotationSpeed + } + return "" +} + +func (m *StorageResource) GetLastScan() *google_protobuf.Timestamp { + if m != nil { + return m.LastScan + } + return nil +} + +// VolumeLocator is a structure that is attached to a volume +// and is used to carry opaque metadata. +type VolumeLocator struct { + // User friendly identifier + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A set of name-value pairs that acts as search filters + VolumeLabels map[string]string `protobuf:"bytes,2,rep,name=volume_labels,json=volumeLabels" json:"volume_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *VolumeLocator) Reset() { *m = VolumeLocator{} } +func (m *VolumeLocator) String() string { return proto.CompactTextString(m) } +func (*VolumeLocator) ProtoMessage() {} +func (*VolumeLocator) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{1} } + +func (m *VolumeLocator) GetName() string { + if m != nil { + return m.Name + } + return "" +} + +func (m *VolumeLocator) GetVolumeLabels() map[string]string { + if m != nil { + return m.VolumeLabels + } + return nil +} + +type Source struct { + // A volume id, if specified will create a clone of the parent. + Parent string `protobuf:"bytes,1,opt,name=parent" json:"parent,omitempty"` + // Seed will seed the volume from the specified URI + // Any additional config for the source comes from the labels in the spec + Seed string `protobuf:"bytes,2,opt,name=seed" json:"seed,omitempty"` +} + +func (m *Source) Reset() { *m = Source{} } +func (m *Source) String() string { return proto.CompactTextString(m) } +func (*Source) ProtoMessage() {} +func (*Source) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{2} } + +func (m *Source) GetParent() string { + if m != nil { + return m.Parent + } + return "" +} + +func (m *Source) GetSeed() string { + if m != nil { + return m.Seed + } + return "" +} + +// VolumeSpec has the properties needed to create a volume. +type VolumeSpec struct { + // Ephemeral storage + Ephemeral bool `protobuf:"varint,1,opt,name=ephemeral" json:"ephemeral,omitempty"` + // Thin provisioned volume size in bytes + Size uint64 `protobuf:"varint,2,opt,name=size" json:"size,omitempty"` + // Format disk with this FSType + Format FSType `protobuf:"varint,3,opt,name=format,enum=openstorage.api.FSType" json:"format,omitempty"` + // Block size for filesystem + BlockSize int64 `protobuf:"varint,4,opt,name=block_size,json=blockSize" json:"block_size,omitempty"` + // Specifies the number of nodes that are + // allowed to fail, and yet data is available + // A value of 0 implies that data is not erasure coded, + // a failure of a node will lead to data loss + HaLevel int64 `protobuf:"varint,5,opt,name=ha_level,json=haLevel" json:"ha_level,omitempty"` + // The COS, 1 to 9 + Cos CosType `protobuf:"varint,6,opt,name=cos,enum=openstorage.api.CosType" json:"cos,omitempty"` + // Perform dedupe on this disk + Dedupe bool `protobuf:"varint,7,opt,name=dedupe" json:"dedupe,omitempty"` + // SnapshotInterval in minutes, set to 0 to disable snapshots + SnapshotInterval uint32 `protobuf:"varint,8,opt,name=snapshot_interval,json=snapshotInterval" json:"snapshot_interval,omitempty"` + // Volume configuration labels + VolumeLabels map[string]string `protobuf:"bytes,9,rep,name=volume_labels,json=volumeLabels" json:"volume_labels,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` + // Shared is true if this volume can be remotely accessed. + Shared bool `protobuf:"varint,10,opt,name=shared" json:"shared,omitempty"` + // ReplicaSet is the desired replicaSet the volume want to be placed. + ReplicaSet *ReplicaSet `protobuf:"bytes,11,opt,name=replica_set,json=replicaSet" json:"replica_set,omitempty"` + // Specifies the number of parts the volume can be aggregated from. + AggregationLevel uint32 `protobuf:"varint,12,opt,name=aggregation_level,json=aggregationLevel" json:"aggregation_level,omitempty"` + // Encrypted is true if this volume will be cryptographically secured. + Encrypted bool `protobuf:"varint,13,opt,name=encrypted" json:"encrypted,omitempty"` + // User passphrase if this is an encrypted volume + Passphrase string `protobuf:"bytes,14,opt,name=passphrase" json:"passphrase,omitempty"` + // SnapshotSchedule + SnapshotSchedule string `protobuf:"bytes,15,opt,name=snapshot_schedule,json=snapshotSchedule" json:"snapshot_schedule,omitempty"` + // Scale allows autocreation of volumes. + Scale uint32 `protobuf:"varint,16,opt,name=scale" json:"scale,omitempty"` +} + +func (m *VolumeSpec) Reset() { *m = VolumeSpec{} } +func (m *VolumeSpec) String() string { return proto.CompactTextString(m) } +func (*VolumeSpec) ProtoMessage() {} +func (*VolumeSpec) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{3} } + +func (m *VolumeSpec) GetEphemeral() bool { + if m != nil { + return m.Ephemeral + } + return false +} + +func (m *VolumeSpec) GetSize() uint64 { + if m != nil { + return m.Size + } + return 0 +} + +func (m *VolumeSpec) GetFormat() FSType { + if m != nil { + return m.Format + } + return FSType_FS_TYPE_NONE +} + +func (m *VolumeSpec) GetBlockSize() int64 { + if m != nil { + return m.BlockSize + } + return 0 +} + +func (m *VolumeSpec) GetHaLevel() int64 { + if m != nil { + return m.HaLevel + } + return 0 +} + +func (m *VolumeSpec) GetCos() CosType { + if m != nil { + return m.Cos + } + return CosType_NONE +} + +func (m *VolumeSpec) GetDedupe() bool { + if m != nil { + return m.Dedupe + } + return false +} + +func (m *VolumeSpec) GetSnapshotInterval() uint32 { + if m != nil { + return m.SnapshotInterval + } + return 0 +} + +func (m *VolumeSpec) GetVolumeLabels() map[string]string { + if m != nil { + return m.VolumeLabels + } + return nil +} + +func (m *VolumeSpec) GetShared() bool { + if m != nil { + return m.Shared + } + return false +} + +func (m *VolumeSpec) GetReplicaSet() *ReplicaSet { + if m != nil { + return m.ReplicaSet + } + return nil +} + +func (m *VolumeSpec) GetAggregationLevel() uint32 { + if m != nil { + return m.AggregationLevel + } + return 0 +} + +func (m *VolumeSpec) GetEncrypted() bool { + if m != nil { + return m.Encrypted + } + return false +} + +func (m *VolumeSpec) GetPassphrase() string { + if m != nil { + return m.Passphrase + } + return "" +} + +func (m *VolumeSpec) GetSnapshotSchedule() string { + if m != nil { + return m.SnapshotSchedule + } + return "" +} + +func (m *VolumeSpec) GetScale() uint32 { + if m != nil { + return m.Scale + } + return 0 +} + +// Set of machine IDs (nodes) to which part of this volume is erasure coded - for clustered storage arrays +type ReplicaSet struct { + Nodes []string `protobuf:"bytes,1,rep,name=nodes" json:"nodes,omitempty"` +} + +func (m *ReplicaSet) Reset() { *m = ReplicaSet{} } +func (m *ReplicaSet) String() string { return proto.CompactTextString(m) } +func (*ReplicaSet) ProtoMessage() {} +func (*ReplicaSet) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{4} } + +func (m *ReplicaSet) GetNodes() []string { + if m != nil { + return m.Nodes + } + return nil +} + +// List of name value mapping of driver specific runtime information. +type RuntimeStateMap struct { + RuntimeState map[string]string `protobuf:"bytes,1,rep,name=runtime_state,json=runtimeState" json:"runtime_state,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *RuntimeStateMap) Reset() { *m = RuntimeStateMap{} } +func (m *RuntimeStateMap) String() string { return proto.CompactTextString(m) } +func (*RuntimeStateMap) ProtoMessage() {} +func (*RuntimeStateMap) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{5} } + +func (m *RuntimeStateMap) GetRuntimeState() map[string]string { + if m != nil { + return m.RuntimeState + } + return nil +} + +// Volume represents a live, created volume. +type Volume struct { + // Self referential volume ID + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + Source *Source `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` + Readonly bool `protobuf:"varint,3,opt,name=readonly" json:"readonly,omitempty"` + // User specified locator + Locator *VolumeLocator `protobuf:"bytes,4,opt,name=locator" json:"locator,omitempty"` + // Volume creation time + Ctime *google_protobuf.Timestamp `protobuf:"bytes,5,opt,name=ctime" json:"ctime,omitempty"` + // User specified VolumeSpec + Spec *VolumeSpec `protobuf:"bytes,6,opt,name=spec" json:"spec,omitempty"` + // Volume usage + Usage uint64 `protobuf:"varint,7,opt,name=usage" json:"usage,omitempty"` + // Time when an integrity check for run + LastScan *google_protobuf.Timestamp `protobuf:"bytes,8,opt,name=last_scan,json=lastScan" json:"last_scan,omitempty"` + // Format FSType type if any + Format FSType `protobuf:"varint,9,opt,name=format,enum=openstorage.api.FSType" json:"format,omitempty"` + Status VolumeStatus `protobuf:"varint,10,opt,name=status,enum=openstorage.api.VolumeStatus" json:"status,omitempty"` + State VolumeState `protobuf:"varint,11,opt,name=state,enum=openstorage.api.VolumeState" json:"state,omitempty"` + // Machine ID (node) on which this volume is attached + // Machine ID is a node instance identifier for clustered systems. + AttachedOn string `protobuf:"bytes,12,opt,name=attached_on,json=attachedOn" json:"attached_on,omitempty"` + DevicePath string `protobuf:"bytes,14,opt,name=device_path,json=devicePath" json:"device_path,omitempty"` + AttachPath []string `protobuf:"bytes,15,rep,name=attach_path,json=attachPath" json:"attach_path,omitempty"` + // List of ReplicaSets which provide storage for this volume, for clustered storage arrays + ReplicaSets []*ReplicaSet `protobuf:"bytes,16,rep,name=replica_sets,json=replicaSets" json:"replica_sets,omitempty"` + // Last recorded error + Error string `protobuf:"bytes,17,opt,name=error" json:"error,omitempty"` + // List of name value mapping of driver specific runtime information. + RuntimeState []*RuntimeStateMap `protobuf:"bytes,18,rep,name=runtime_state,json=runtimeState" json:"runtime_state,omitempty"` + SecureDevicePath string `protobuf:"bytes,19,opt,name=secure_device_path,json=secureDevicePath" json:"secure_device_path,omitempty"` + // BackgroundProcessing is true if volume is attached but not by the user + BackgroundProcessing bool `protobuf:"varint,20,opt,name=background_processing,json=backgroundProcessing" json:"background_processing,omitempty"` +} + +func (m *Volume) Reset() { *m = Volume{} } +func (m *Volume) String() string { return proto.CompactTextString(m) } +func (*Volume) ProtoMessage() {} +func (*Volume) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{6} } + +func (m *Volume) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *Volume) GetSource() *Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *Volume) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +func (m *Volume) GetLocator() *VolumeLocator { + if m != nil { + return m.Locator + } + return nil +} + +func (m *Volume) GetCtime() *google_protobuf.Timestamp { + if m != nil { + return m.Ctime + } + return nil +} + +func (m *Volume) GetSpec() *VolumeSpec { + if m != nil { + return m.Spec + } + return nil +} + +func (m *Volume) GetUsage() uint64 { + if m != nil { + return m.Usage + } + return 0 +} + +func (m *Volume) GetLastScan() *google_protobuf.Timestamp { + if m != nil { + return m.LastScan + } + return nil +} + +func (m *Volume) GetFormat() FSType { + if m != nil { + return m.Format + } + return FSType_FS_TYPE_NONE +} + +func (m *Volume) GetStatus() VolumeStatus { + if m != nil { + return m.Status + } + return VolumeStatus_VOLUME_STATUS_NONE +} + +func (m *Volume) GetState() VolumeState { + if m != nil { + return m.State + } + return VolumeState_VOLUME_STATE_NONE +} + +func (m *Volume) GetAttachedOn() string { + if m != nil { + return m.AttachedOn + } + return "" +} + +func (m *Volume) GetDevicePath() string { + if m != nil { + return m.DevicePath + } + return "" +} + +func (m *Volume) GetAttachPath() []string { + if m != nil { + return m.AttachPath + } + return nil +} + +func (m *Volume) GetReplicaSets() []*ReplicaSet { + if m != nil { + return m.ReplicaSets + } + return nil +} + +func (m *Volume) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +func (m *Volume) GetRuntimeState() []*RuntimeStateMap { + if m != nil { + return m.RuntimeState + } + return nil +} + +func (m *Volume) GetSecureDevicePath() string { + if m != nil { + return m.SecureDevicePath + } + return "" +} + +func (m *Volume) GetBackgroundProcessing() bool { + if m != nil { + return m.BackgroundProcessing + } + return false +} + +type Stats struct { + // Reads completed successfully + Reads uint64 `protobuf:"varint,1,opt,name=reads" json:"reads,omitempty"` + // Time spent in reads in ms + ReadMs uint64 `protobuf:"varint,2,opt,name=read_ms,json=readMs" json:"read_ms,omitempty"` + ReadBytes uint64 `protobuf:"varint,3,opt,name=read_bytes,json=readBytes" json:"read_bytes,omitempty"` + // Writes completed successfully + Writes uint64 `protobuf:"varint,4,opt,name=writes" json:"writes,omitempty"` + // Time spent in writes in ms + WriteMs uint64 `protobuf:"varint,5,opt,name=write_ms,json=writeMs" json:"write_ms,omitempty"` + WriteBytes uint64 `protobuf:"varint,6,opt,name=write_bytes,json=writeBytes" json:"write_bytes,omitempty"` + // IOs curently in progress + IoProgress uint64 `protobuf:"varint,7,opt,name=io_progress,json=ioProgress" json:"io_progress,omitempty"` + // Time spent doing IOs ms + IoMs uint64 `protobuf:"varint,8,opt,name=io_ms,json=ioMs" json:"io_ms,omitempty"` + // BytesUsed + BytesUsed uint64 `protobuf:"varint,9,opt,name=bytes_used,json=bytesUsed" json:"bytes_used,omitempty"` + // Interval in ms during which stats were collected + IntervalMs uint64 `protobuf:"varint,10,opt,name=interval_ms,json=intervalMs" json:"interval_ms,omitempty"` +} + +func (m *Stats) Reset() { *m = Stats{} } +func (m *Stats) String() string { return proto.CompactTextString(m) } +func (*Stats) ProtoMessage() {} +func (*Stats) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{7} } + +func (m *Stats) GetReads() uint64 { + if m != nil { + return m.Reads + } + return 0 +} + +func (m *Stats) GetReadMs() uint64 { + if m != nil { + return m.ReadMs + } + return 0 +} + +func (m *Stats) GetReadBytes() uint64 { + if m != nil { + return m.ReadBytes + } + return 0 +} + +func (m *Stats) GetWrites() uint64 { + if m != nil { + return m.Writes + } + return 0 +} + +func (m *Stats) GetWriteMs() uint64 { + if m != nil { + return m.WriteMs + } + return 0 +} + +func (m *Stats) GetWriteBytes() uint64 { + if m != nil { + return m.WriteBytes + } + return 0 +} + +func (m *Stats) GetIoProgress() uint64 { + if m != nil { + return m.IoProgress + } + return 0 +} + +func (m *Stats) GetIoMs() uint64 { + if m != nil { + return m.IoMs + } + return 0 +} + +func (m *Stats) GetBytesUsed() uint64 { + if m != nil { + return m.BytesUsed + } + return 0 +} + +func (m *Stats) GetIntervalMs() uint64 { + if m != nil { + return m.IntervalMs + } + return 0 +} + +type Alert struct { + // Id for Alert + Id int64 `protobuf:"varint,1,opt,name=id" json:"id,omitempty"` + // Severity of the Alert + Severity SeverityType `protobuf:"varint,2,opt,name=severity,enum=openstorage.api.SeverityType" json:"severity,omitempty"` + // AlertType user defined alert type + AlertType int64 `protobuf:"varint,3,opt,name=alert_type,json=alertType" json:"alert_type,omitempty"` + // Message describing the Alert + Message string `protobuf:"bytes,4,opt,name=message" json:"message,omitempty"` + // Timestamp when Alert occured + Timestamp *google_protobuf.Timestamp `protobuf:"bytes,5,opt,name=timestamp" json:"timestamp,omitempty"` + // ResourceId where Alert occured + ResourceId string `protobuf:"bytes,6,opt,name=resource_id,json=resourceId" json:"resource_id,omitempty"` + // Resource where Alert occured + Resource ResourceType `protobuf:"varint,7,opt,name=resource,enum=openstorage.api.ResourceType" json:"resource,omitempty"` + // Cleared Flag + Cleared bool `protobuf:"varint,8,opt,name=cleared" json:"cleared,omitempty"` + // TTL in seconds for this Alert + Ttl uint64 `protobuf:"varint,9,opt,name=ttl" json:"ttl,omitempty"` +} + +func (m *Alert) Reset() { *m = Alert{} } +func (m *Alert) String() string { return proto.CompactTextString(m) } +func (*Alert) ProtoMessage() {} +func (*Alert) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{8} } + +func (m *Alert) GetId() int64 { + if m != nil { + return m.Id + } + return 0 +} + +func (m *Alert) GetSeverity() SeverityType { + if m != nil { + return m.Severity + } + return SeverityType_SEVERITY_TYPE_NONE +} + +func (m *Alert) GetAlertType() int64 { + if m != nil { + return m.AlertType + } + return 0 +} + +func (m *Alert) GetMessage() string { + if m != nil { + return m.Message + } + return "" +} + +func (m *Alert) GetTimestamp() *google_protobuf.Timestamp { + if m != nil { + return m.Timestamp + } + return nil +} + +func (m *Alert) GetResourceId() string { + if m != nil { + return m.ResourceId + } + return "" +} + +func (m *Alert) GetResource() ResourceType { + if m != nil { + return m.Resource + } + return ResourceType_RESOURCE_TYPE_NONE +} + +func (m *Alert) GetCleared() bool { + if m != nil { + return m.Cleared + } + return false +} + +func (m *Alert) GetTtl() uint64 { + if m != nil { + return m.Ttl + } + return 0 +} + +type Alerts struct { + Alert []*Alert `protobuf:"bytes,1,rep,name=alert" json:"alert,omitempty"` +} + +func (m *Alerts) Reset() { *m = Alerts{} } +func (m *Alerts) String() string { return proto.CompactTextString(m) } +func (*Alerts) ProtoMessage() {} +func (*Alerts) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{9} } + +func (m *Alerts) GetAlert() []*Alert { + if m != nil { + return m.Alert + } + return nil +} + +type VolumeCreateRequest struct { + // User specified volume name and labels + Locator *VolumeLocator `protobuf:"bytes,1,opt,name=locator" json:"locator,omitempty"` + // Source to create volume + Source *Source `protobuf:"bytes,2,opt,name=source" json:"source,omitempty"` + // The storage spec for the volume + Spec *VolumeSpec `protobuf:"bytes,3,opt,name=spec" json:"spec,omitempty"` +} + +func (m *VolumeCreateRequest) Reset() { *m = VolumeCreateRequest{} } +func (m *VolumeCreateRequest) String() string { return proto.CompactTextString(m) } +func (*VolumeCreateRequest) ProtoMessage() {} +func (*VolumeCreateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{10} } + +func (m *VolumeCreateRequest) GetLocator() *VolumeLocator { + if m != nil { + return m.Locator + } + return nil +} + +func (m *VolumeCreateRequest) GetSource() *Source { + if m != nil { + return m.Source + } + return nil +} + +func (m *VolumeCreateRequest) GetSpec() *VolumeSpec { + if m != nil { + return m.Spec + } + return nil +} + +type VolumeResponse struct { + Error string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` +} + +func (m *VolumeResponse) Reset() { *m = VolumeResponse{} } +func (m *VolumeResponse) String() string { return proto.CompactTextString(m) } +func (*VolumeResponse) ProtoMessage() {} +func (*VolumeResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{11} } + +func (m *VolumeResponse) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +type VolumeCreateResponse struct { + // ID of the newly created volume + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + VolumeResponse *VolumeResponse `protobuf:"bytes,2,opt,name=volume_response,json=volumeResponse" json:"volume_response,omitempty"` +} + +func (m *VolumeCreateResponse) Reset() { *m = VolumeCreateResponse{} } +func (m *VolumeCreateResponse) String() string { return proto.CompactTextString(m) } +func (*VolumeCreateResponse) ProtoMessage() {} +func (*VolumeCreateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{12} } + +func (m *VolumeCreateResponse) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *VolumeCreateResponse) GetVolumeResponse() *VolumeResponse { + if m != nil { + return m.VolumeResponse + } + return nil +} + +// VolumeStateAction specifies desired actions. +type VolumeStateAction struct { + // Attach or Detach volume + Attach VolumeActionParam `protobuf:"varint,1,opt,name=attach,enum=openstorage.api.VolumeActionParam" json:"attach,omitempty"` + // Mount or unmount volume + Mount VolumeActionParam `protobuf:"varint,2,opt,name=mount,enum=openstorage.api.VolumeActionParam" json:"mount,omitempty"` + MountPath string `protobuf:"bytes,3,opt,name=mount_path,json=mountPath" json:"mount_path,omitempty"` + // Device path returned in attach + DevicePath string `protobuf:"bytes,4,opt,name=device_path,json=devicePath" json:"device_path,omitempty"` +} + +func (m *VolumeStateAction) Reset() { *m = VolumeStateAction{} } +func (m *VolumeStateAction) String() string { return proto.CompactTextString(m) } +func (*VolumeStateAction) ProtoMessage() {} +func (*VolumeStateAction) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{13} } + +func (m *VolumeStateAction) GetAttach() VolumeActionParam { + if m != nil { + return m.Attach + } + return VolumeActionParam_VOLUME_ACTION_PARAM_NONE +} + +func (m *VolumeStateAction) GetMount() VolumeActionParam { + if m != nil { + return m.Mount + } + return VolumeActionParam_VOLUME_ACTION_PARAM_NONE +} + +func (m *VolumeStateAction) GetMountPath() string { + if m != nil { + return m.MountPath + } + return "" +} + +func (m *VolumeStateAction) GetDevicePath() string { + if m != nil { + return m.DevicePath + } + return "" +} + +type VolumeSetRequest struct { + // User specified volume name and labels + Locator *VolumeLocator `protobuf:"bytes,1,opt,name=locator" json:"locator,omitempty"` + // The storage spec for the volume + Spec *VolumeSpec `protobuf:"bytes,2,opt,name=spec" json:"spec,omitempty"` + // State modification on this volume. + Action *VolumeStateAction `protobuf:"bytes,3,opt,name=action" json:"action,omitempty"` +} + +func (m *VolumeSetRequest) Reset() { *m = VolumeSetRequest{} } +func (m *VolumeSetRequest) String() string { return proto.CompactTextString(m) } +func (*VolumeSetRequest) ProtoMessage() {} +func (*VolumeSetRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{14} } + +func (m *VolumeSetRequest) GetLocator() *VolumeLocator { + if m != nil { + return m.Locator + } + return nil +} + +func (m *VolumeSetRequest) GetSpec() *VolumeSpec { + if m != nil { + return m.Spec + } + return nil +} + +func (m *VolumeSetRequest) GetAction() *VolumeStateAction { + if m != nil { + return m.Action + } + return nil +} + +type VolumeSetResponse struct { + Volume *Volume `protobuf:"bytes,1,opt,name=volume" json:"volume,omitempty"` + VolumeResponse *VolumeResponse `protobuf:"bytes,2,opt,name=volume_response,json=volumeResponse" json:"volume_response,omitempty"` +} + +func (m *VolumeSetResponse) Reset() { *m = VolumeSetResponse{} } +func (m *VolumeSetResponse) String() string { return proto.CompactTextString(m) } +func (*VolumeSetResponse) ProtoMessage() {} +func (*VolumeSetResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{15} } + +func (m *VolumeSetResponse) GetVolume() *Volume { + if m != nil { + return m.Volume + } + return nil +} + +func (m *VolumeSetResponse) GetVolumeResponse() *VolumeResponse { + if m != nil { + return m.VolumeResponse + } + return nil +} + +type SnapCreateRequest struct { + // volume id + Id string `protobuf:"bytes,1,opt,name=id" json:"id,omitempty"` + Locator *VolumeLocator `protobuf:"bytes,2,opt,name=locator" json:"locator,omitempty"` + Readonly bool `protobuf:"varint,3,opt,name=readonly" json:"readonly,omitempty"` +} + +func (m *SnapCreateRequest) Reset() { *m = SnapCreateRequest{} } +func (m *SnapCreateRequest) String() string { return proto.CompactTextString(m) } +func (*SnapCreateRequest) ProtoMessage() {} +func (*SnapCreateRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{16} } + +func (m *SnapCreateRequest) GetId() string { + if m != nil { + return m.Id + } + return "" +} + +func (m *SnapCreateRequest) GetLocator() *VolumeLocator { + if m != nil { + return m.Locator + } + return nil +} + +func (m *SnapCreateRequest) GetReadonly() bool { + if m != nil { + return m.Readonly + } + return false +} + +type SnapCreateResponse struct { + VolumeCreateResponse *VolumeCreateResponse `protobuf:"bytes,1,opt,name=volume_create_response,json=volumeCreateResponse" json:"volume_create_response,omitempty"` +} + +func (m *SnapCreateResponse) Reset() { *m = SnapCreateResponse{} } +func (m *SnapCreateResponse) String() string { return proto.CompactTextString(m) } +func (*SnapCreateResponse) ProtoMessage() {} +func (*SnapCreateResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{17} } + +func (m *SnapCreateResponse) GetVolumeCreateResponse() *VolumeCreateResponse { + if m != nil { + return m.VolumeCreateResponse + } + return nil +} + +type VolumeInfo struct { + VolumeId string `protobuf:"bytes,1,opt,name=volume_id,json=volumeId" json:"volume_id,omitempty"` + Path string `protobuf:"bytes,2,opt,name=path" json:"path,omitempty"` + Storage *VolumeSpec `protobuf:"bytes,3,opt,name=storage" json:"storage,omitempty"` +} + +func (m *VolumeInfo) Reset() { *m = VolumeInfo{} } +func (m *VolumeInfo) String() string { return proto.CompactTextString(m) } +func (*VolumeInfo) ProtoMessage() {} +func (*VolumeInfo) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{18} } + +func (m *VolumeInfo) GetVolumeId() string { + if m != nil { + return m.VolumeId + } + return "" +} + +func (m *VolumeInfo) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *VolumeInfo) GetStorage() *VolumeSpec { + if m != nil { + return m.Storage + } + return nil +} + +// GraphDriverChanges represent a list of changes between the filesystem layers +// specified by the ID and Parent. // Parent may be an empty string, in which +// case there is no parent. +// Where the Path is the filesystem path within the layered filesystem +type GraphDriverChanges struct { + Path string `protobuf:"bytes,1,opt,name=path" json:"path,omitempty"` + Kind GraphDriverChangeType `protobuf:"varint,2,opt,name=kind,enum=openstorage.api.GraphDriverChangeType" json:"kind,omitempty"` +} + +func (m *GraphDriverChanges) Reset() { *m = GraphDriverChanges{} } +func (m *GraphDriverChanges) String() string { return proto.CompactTextString(m) } +func (*GraphDriverChanges) ProtoMessage() {} +func (*GraphDriverChanges) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{19} } + +func (m *GraphDriverChanges) GetPath() string { + if m != nil { + return m.Path + } + return "" +} + +func (m *GraphDriverChanges) GetKind() GraphDriverChangeType { + if m != nil { + return m.Kind + } + return GraphDriverChangeType_GRAPH_DRIVER_CHANGE_TYPE_NONE +} + +type ClusterResponse struct { + Error string `protobuf:"bytes,1,opt,name=error" json:"error,omitempty"` +} + +func (m *ClusterResponse) Reset() { *m = ClusterResponse{} } +func (m *ClusterResponse) String() string { return proto.CompactTextString(m) } +func (*ClusterResponse) ProtoMessage() {} +func (*ClusterResponse) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{20} } + +func (m *ClusterResponse) GetError() string { + if m != nil { + return m.Error + } + return "" +} + +type ActiveRequest struct { + ReqestKV map[int64]string `protobuf:"bytes,1,rep,name=ReqestKV,json=reqestKV" json:"ReqestKV,omitempty" protobuf_key:"varint,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *ActiveRequest) Reset() { *m = ActiveRequest{} } +func (m *ActiveRequest) String() string { return proto.CompactTextString(m) } +func (*ActiveRequest) ProtoMessage() {} +func (*ActiveRequest) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{21} } + +func (m *ActiveRequest) GetReqestKV() map[int64]string { + if m != nil { + return m.ReqestKV + } + return nil +} + +type ActiveRequests struct { + RequestCount int64 `protobuf:"varint,1,opt,name=RequestCount,json=requestCount" json:"RequestCount,omitempty"` + ActiveRequest []*ActiveRequest `protobuf:"bytes,2,rep,name=ActiveRequest,json=activeRequest" json:"ActiveRequest,omitempty"` +} + +func (m *ActiveRequests) Reset() { *m = ActiveRequests{} } +func (m *ActiveRequests) String() string { return proto.CompactTextString(m) } +func (*ActiveRequests) ProtoMessage() {} +func (*ActiveRequests) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{22} } + +func (m *ActiveRequests) GetRequestCount() int64 { + if m != nil { + return m.RequestCount + } + return 0 +} + +func (m *ActiveRequests) GetActiveRequest() []*ActiveRequest { + if m != nil { + return m.ActiveRequest + } + return nil +} + +func init() { + proto.RegisterType((*StorageResource)(nil), "openstorage.api.StorageResource") + proto.RegisterType((*VolumeLocator)(nil), "openstorage.api.VolumeLocator") + proto.RegisterType((*Source)(nil), "openstorage.api.Source") + proto.RegisterType((*VolumeSpec)(nil), "openstorage.api.VolumeSpec") + proto.RegisterType((*ReplicaSet)(nil), "openstorage.api.ReplicaSet") + proto.RegisterType((*RuntimeStateMap)(nil), "openstorage.api.RuntimeStateMap") + proto.RegisterType((*Volume)(nil), "openstorage.api.Volume") + proto.RegisterType((*Stats)(nil), "openstorage.api.Stats") + proto.RegisterType((*Alert)(nil), "openstorage.api.Alert") + proto.RegisterType((*Alerts)(nil), "openstorage.api.Alerts") + proto.RegisterType((*VolumeCreateRequest)(nil), "openstorage.api.VolumeCreateRequest") + proto.RegisterType((*VolumeResponse)(nil), "openstorage.api.VolumeResponse") + proto.RegisterType((*VolumeCreateResponse)(nil), "openstorage.api.VolumeCreateResponse") + proto.RegisterType((*VolumeStateAction)(nil), "openstorage.api.VolumeStateAction") + proto.RegisterType((*VolumeSetRequest)(nil), "openstorage.api.VolumeSetRequest") + proto.RegisterType((*VolumeSetResponse)(nil), "openstorage.api.VolumeSetResponse") + proto.RegisterType((*SnapCreateRequest)(nil), "openstorage.api.SnapCreateRequest") + proto.RegisterType((*SnapCreateResponse)(nil), "openstorage.api.SnapCreateResponse") + proto.RegisterType((*VolumeInfo)(nil), "openstorage.api.VolumeInfo") + proto.RegisterType((*GraphDriverChanges)(nil), "openstorage.api.GraphDriverChanges") + proto.RegisterType((*ClusterResponse)(nil), "openstorage.api.ClusterResponse") + proto.RegisterType((*ActiveRequest)(nil), "openstorage.api.ActiveRequest") + proto.RegisterType((*ActiveRequests)(nil), "openstorage.api.ActiveRequests") + proto.RegisterEnum("openstorage.api.Status", Status_name, Status_value) + proto.RegisterEnum("openstorage.api.DriverType", DriverType_name, DriverType_value) + proto.RegisterEnum("openstorage.api.FSType", FSType_name, FSType_value) + proto.RegisterEnum("openstorage.api.GraphDriverChangeType", GraphDriverChangeType_name, GraphDriverChangeType_value) + proto.RegisterEnum("openstorage.api.SeverityType", SeverityType_name, SeverityType_value) + proto.RegisterEnum("openstorage.api.ResourceType", ResourceType_name, ResourceType_value) + proto.RegisterEnum("openstorage.api.AlertActionType", AlertActionType_name, AlertActionType_value) + proto.RegisterEnum("openstorage.api.VolumeActionParam", VolumeActionParam_name, VolumeActionParam_value) + proto.RegisterEnum("openstorage.api.CosType", CosType_name, CosType_value) + proto.RegisterEnum("openstorage.api.VolumeState", VolumeState_name, VolumeState_value) + proto.RegisterEnum("openstorage.api.VolumeStatus", VolumeStatus_name, VolumeStatus_value) + proto.RegisterEnum("openstorage.api.StorageMedium", StorageMedium_name, StorageMedium_value) + proto.RegisterEnum("openstorage.api.ClusterNotify", ClusterNotify_name, ClusterNotify_value) +} + +func init() { proto.RegisterFile("api/api.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 2538 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xac, 0x59, 0xdd, 0x72, 0xe3, 0x48, + 0x15, 0x5e, 0xf9, 0xdf, 0xc7, 0xb1, 0xa3, 0xe9, 0xc9, 0x64, 0x34, 0xff, 0x59, 0x17, 0xbb, 0xa4, + 0xcc, 0x92, 0x6c, 0x65, 0x7f, 0x18, 0x16, 0x0a, 0x4a, 0xb1, 0xe5, 0xc4, 0xac, 0xff, 0x68, 0xc9, + 0x99, 0xdd, 0xa5, 0x28, 0x95, 0xc6, 0xee, 0x49, 0xc4, 0xd8, 0x92, 0x46, 0x2d, 0x87, 0xca, 0xbe, + 0x00, 0x37, 0x14, 0x5c, 0x41, 0x15, 0x57, 0x3c, 0xc0, 0x5e, 0x51, 0x5c, 0x51, 0x3c, 0xc1, 0x5e, + 0x50, 0xc5, 0x1b, 0xf0, 0x0c, 0xbc, 0x01, 0xd5, 0x3f, 0xb2, 0x25, 0xdb, 0x99, 0xc9, 0x14, 0x7b, + 0xa7, 0xf3, 0x9d, 0xd3, 0xa7, 0xfb, 0xfc, 0x9f, 0x38, 0x50, 0x75, 0x02, 0xf7, 0xd0, 0x09, 0xdc, + 0x83, 0x20, 0xf4, 0x23, 0x1f, 0x6d, 0xfb, 0x01, 0xf1, 0x68, 0xe4, 0x87, 0xce, 0x39, 0x39, 0x70, + 0x02, 0xf7, 0xfe, 0x93, 0x73, 0xdf, 0x3f, 0x9f, 0x92, 0x43, 0xce, 0x7e, 0x3e, 0x7f, 0x71, 0x18, + 0xb9, 0x33, 0x42, 0x23, 0x67, 0x16, 0x88, 0x13, 0xf5, 0xff, 0x66, 0x60, 0xdb, 0x14, 0x07, 0x30, + 0xa1, 0xfe, 0x3c, 0x1c, 0x13, 0x54, 0x83, 0x8c, 0x3b, 0xd1, 0x94, 0x3d, 0x65, 0xbf, 0x8c, 0x33, + 0xee, 0x04, 0x21, 0xc8, 0x05, 0x4e, 0x74, 0xa1, 0x65, 0x38, 0xc2, 0xbf, 0xd1, 0xa7, 0x50, 0x98, + 0x91, 0x89, 0x3b, 0x9f, 0x69, 0xd9, 0x3d, 0x65, 0xbf, 0x76, 0xf4, 0xf8, 0x60, 0xe5, 0xea, 0x03, + 0xa9, 0xb5, 0xc7, 0xa5, 0xb0, 0x94, 0x46, 0xbb, 0x50, 0xf0, 0xbd, 0xa9, 0xeb, 0x11, 0x2d, 0xb7, + 0xa7, 0xec, 0x97, 0xb0, 0xa4, 0xd8, 0x1d, 0xae, 0x1f, 0x50, 0x2d, 0xbf, 0xa7, 0xec, 0xe7, 0x30, + 0xff, 0x46, 0x0f, 0xa0, 0x4c, 0xc9, 0x2b, 0xfb, 0xb7, 0xa1, 0x1b, 0x11, 0xad, 0xb0, 0xa7, 0xec, + 0x2b, 0xb8, 0x44, 0xc9, 0xab, 0x67, 0x8c, 0x46, 0xf7, 0x80, 0x7d, 0xdb, 0x21, 0x71, 0x26, 0x5a, + 0x91, 0xf3, 0x8a, 0x94, 0xbc, 0xc2, 0xc4, 0x99, 0xb0, 0x3b, 0x42, 0xc7, 0x9b, 0xe0, 0x67, 0x5a, + 0x89, 0x33, 0x24, 0xc5, 0xee, 0xa0, 0xee, 0xd7, 0x44, 0x2b, 0x8b, 0x3b, 0xd8, 0x37, 0xc3, 0xe6, + 0x94, 0x4c, 0x34, 0x10, 0x18, 0xfb, 0x46, 0xef, 0x41, 0x2d, 0xf4, 0x23, 0x27, 0x72, 0x7d, 0xcf, + 0xa6, 0x01, 0x21, 0x13, 0xad, 0xc2, 0x2d, 0xaf, 0xc6, 0xa8, 0xc9, 0x40, 0xf4, 0x23, 0x28, 0x4f, + 0x1d, 0x1a, 0xd9, 0x74, 0xec, 0x78, 0xda, 0xd6, 0x9e, 0xb2, 0x5f, 0x39, 0xba, 0x7f, 0x20, 0xfc, + 0x7d, 0x10, 0xfb, 0xfb, 0xc0, 0x8a, 0xfd, 0x8d, 0x4b, 0x4c, 0xd8, 0x1c, 0x3b, 0x5e, 0xfd, 0x9f, + 0x0a, 0x54, 0xcf, 0xfc, 0xe9, 0x7c, 0x46, 0xba, 0xfe, 0xd8, 0x89, 0xfc, 0x90, 0xbd, 0xc2, 0x73, + 0x66, 0x44, 0xfa, 0x9c, 0x7f, 0xa3, 0x11, 0x54, 0x2f, 0xb9, 0x90, 0x3d, 0x75, 0x9e, 0x93, 0x29, + 0xd5, 0x32, 0x7b, 0xd9, 0xfd, 0xca, 0xd1, 0x87, 0x6b, 0x8e, 0x4e, 0xa9, 0x8a, 0x29, 0x7e, 0xc4, + 0xf0, 0xa2, 0xf0, 0x0a, 0x6f, 0x5d, 0x26, 0xa0, 0xfb, 0x3f, 0x87, 0x5b, 0x6b, 0x22, 0x48, 0x85, + 0xec, 0x4b, 0x72, 0x25, 0xaf, 0x67, 0x9f, 0x68, 0x07, 0xf2, 0x97, 0xce, 0x74, 0x4e, 0x64, 0xd0, + 0x05, 0xf1, 0x59, 0xe6, 0xa9, 0x52, 0xff, 0x18, 0x0a, 0xa6, 0xc8, 0x93, 0x5d, 0x28, 0x04, 0x4e, + 0x48, 0xbc, 0x48, 0x1e, 0x94, 0x14, 0xf7, 0x33, 0xf3, 0x9a, 0xcc, 0x17, 0xf6, 0x5d, 0xff, 0x7b, + 0x1e, 0x40, 0xdc, 0x6b, 0x06, 0x64, 0x8c, 0x1e, 0x42, 0x99, 0x04, 0x17, 0x64, 0x46, 0x42, 0x67, + 0xca, 0x4f, 0x97, 0xf0, 0x12, 0x58, 0x04, 0x2a, 0x93, 0x08, 0xd4, 0x21, 0x14, 0x5e, 0xf8, 0xe1, + 0xcc, 0x89, 0x64, 0xc2, 0xdd, 0x5d, 0xf3, 0x43, 0xdb, 0xb4, 0xae, 0x02, 0x82, 0xa5, 0x18, 0x7a, + 0x04, 0xf0, 0x7c, 0xea, 0x8f, 0x5f, 0xda, 0x5c, 0x15, 0xcb, 0xb6, 0x2c, 0x2e, 0x73, 0xc4, 0x64, + 0xfa, 0xee, 0x41, 0xe9, 0xc2, 0xb1, 0xa7, 0xe4, 0x92, 0x4c, 0x79, 0xd2, 0x65, 0x71, 0xf1, 0xc2, + 0xe9, 0x32, 0x12, 0x35, 0x20, 0x3b, 0xf6, 0x29, 0xcf, 0xb8, 0xda, 0x91, 0xb6, 0x76, 0x4f, 0xd3, + 0xa7, 0xfc, 0x22, 0x26, 0xc4, 0x7c, 0x30, 0x21, 0x93, 0x79, 0x40, 0x78, 0x12, 0x96, 0xb0, 0xa4, + 0xd0, 0x0f, 0xe0, 0x16, 0xf5, 0x9c, 0x80, 0x5e, 0xf8, 0x91, 0xed, 0x7a, 0x11, 0x09, 0x2f, 0x9d, + 0x29, 0x4f, 0xc7, 0x2a, 0x56, 0x63, 0x46, 0x47, 0xe2, 0x08, 0xaf, 0x86, 0xba, 0xcc, 0x43, 0xfd, + 0xc3, 0x6b, 0x42, 0xcd, 0x3c, 0xf8, 0xa6, 0x38, 0xb3, 0x87, 0xd1, 0x0b, 0x27, 0x94, 0xa9, 0x5d, + 0xc2, 0x92, 0x42, 0x3f, 0x85, 0x4a, 0x48, 0x82, 0xa9, 0x3b, 0x76, 0x6c, 0x4a, 0x22, 0x9e, 0xd9, + 0x95, 0xa3, 0x07, 0x6b, 0x37, 0x61, 0x21, 0x63, 0x92, 0x08, 0x43, 0xb8, 0xf8, 0x66, 0x66, 0x39, + 0xe7, 0xe7, 0x21, 0x39, 0x17, 0xd5, 0x21, 0xdc, 0xb7, 0x25, 0xcc, 0x4a, 0x30, 0x84, 0x1f, 0x59, + 0x90, 0xbd, 0x71, 0x78, 0x15, 0x44, 0x64, 0xa2, 0x55, 0x65, 0x90, 0x63, 0x00, 0x3d, 0x06, 0x08, + 0x1c, 0x4a, 0x83, 0x8b, 0xd0, 0xa1, 0x44, 0xab, 0xf1, 0x5c, 0x49, 0x20, 0x29, 0x0f, 0xd2, 0xf1, + 0x05, 0x99, 0xcc, 0xa7, 0x44, 0xdb, 0xe6, 0x62, 0x0b, 0x0f, 0x9a, 0x12, 0x67, 0xe9, 0x4a, 0xc7, + 0xce, 0x94, 0x68, 0x2a, 0x7f, 0x8b, 0x20, 0xfe, 0xff, 0x5c, 0xaf, 0x03, 0x2c, 0x1d, 0xc1, 0xe4, + 0x3c, 0x7f, 0x42, 0xa8, 0xa6, 0xec, 0x65, 0x99, 0x1c, 0x27, 0xea, 0xdf, 0x28, 0xb0, 0x8d, 0xe7, + 0x1e, 0x6b, 0xac, 0x66, 0xe4, 0x44, 0xa4, 0xe7, 0x04, 0xe8, 0x19, 0x54, 0x43, 0x01, 0xd9, 0x94, + 0x61, 0xfc, 0x44, 0xe5, 0xe8, 0x68, 0xdd, 0xcd, 0xe9, 0x83, 0x29, 0x5a, 0x46, 0x35, 0x4c, 0x40, + 0xcc, 0xa2, 0x35, 0x91, 0xb7, 0xb2, 0xe8, 0xdf, 0x05, 0x28, 0x08, 0x9f, 0xac, 0xb5, 0xf9, 0x43, + 0x28, 0x88, 0x01, 0xc0, 0x4f, 0x55, 0x36, 0x54, 0x98, 0xa8, 0x7b, 0x2c, 0xc5, 0xd0, 0x7d, 0x28, + 0xb1, 0xf6, 0xeb, 0x7b, 0xd3, 0x2b, 0x5e, 0x94, 0x25, 0xbc, 0xa0, 0xd1, 0x53, 0x28, 0x4e, 0x45, + 0x47, 0xe2, 0xa5, 0x57, 0xd9, 0x30, 0x20, 0x52, 0x7d, 0x0b, 0xc7, 0xe2, 0xe8, 0x43, 0xc8, 0x8f, + 0x99, 0x81, 0xbc, 0x2a, 0x5f, 0xdf, 0x52, 0x85, 0x20, 0x3a, 0x84, 0x1c, 0x0d, 0xc8, 0x98, 0x17, + 0xec, 0xa6, 0x5c, 0x5e, 0x56, 0x0d, 0xe6, 0x82, 0xcc, 0x3d, 0x73, 0xea, 0x9c, 0x8b, 0x9a, 0xcd, + 0x61, 0x41, 0xa4, 0xfb, 0x79, 0xe9, 0xe6, 0xfd, 0x3c, 0xd1, 0x9a, 0xca, 0x37, 0x6b, 0x4d, 0x9f, + 0x40, 0x81, 0xa5, 0xc5, 0x9c, 0xf2, 0xda, 0xac, 0x1d, 0x3d, 0xba, 0xee, 0xc9, 0x5c, 0x08, 0x4b, + 0x61, 0x74, 0x04, 0x79, 0x91, 0x4d, 0x15, 0x7e, 0xea, 0xe1, 0x6b, 0x4e, 0x11, 0x2c, 0x44, 0xd1, + 0x13, 0xa8, 0x38, 0x51, 0xe4, 0xb0, 0x3a, 0xb1, 0x7d, 0x31, 0xa6, 0xca, 0x18, 0x62, 0x68, 0xe0, + 0x31, 0x81, 0x09, 0xb9, 0x74, 0xc7, 0xc4, 0xe6, 0x33, 0x5e, 0xd6, 0xa1, 0x80, 0x86, 0x6c, 0xd2, + 0x2f, 0x34, 0x08, 0x81, 0x6d, 0x9e, 0xfb, 0x52, 0x03, 0x17, 0xf8, 0x19, 0x6c, 0x25, 0x3a, 0x0a, + 0xd5, 0x54, 0x9e, 0xeb, 0xaf, 0x6d, 0x29, 0x95, 0x65, 0x4b, 0xa1, 0x2c, 0x1a, 0x24, 0x0c, 0xfd, + 0x50, 0xbb, 0x25, 0x92, 0x95, 0x13, 0xc8, 0x58, 0x2d, 0x21, 0xc4, 0xd5, 0xee, 0xbd, 0xa9, 0x84, + 0xd2, 0x05, 0x83, 0x3e, 0x00, 0x44, 0xc9, 0x78, 0x1e, 0x12, 0x3b, 0x69, 0xe5, 0x6d, 0xd9, 0x46, + 0x38, 0xa7, 0xb5, 0xb4, 0xf5, 0x23, 0xb8, 0xf3, 0xdc, 0x19, 0xbf, 0x3c, 0x0f, 0xfd, 0xb9, 0x37, + 0xb1, 0x83, 0xd0, 0x1f, 0x13, 0x4a, 0x5d, 0xef, 0x5c, 0xdb, 0xe1, 0xe9, 0xbd, 0xb3, 0x64, 0x0e, + 0x17, 0xbc, 0xfa, 0x5f, 0x33, 0x90, 0x67, 0x97, 0x71, 0x4b, 0x58, 0x01, 0x50, 0x5e, 0x54, 0x39, + 0x2c, 0x08, 0x74, 0x17, 0x8a, 0xec, 0xc3, 0x9e, 0x51, 0x39, 0xd0, 0x0a, 0x8c, 0xec, 0x51, 0x36, + 0xa1, 0x38, 0xe3, 0xf9, 0x55, 0x44, 0x28, 0xaf, 0xa0, 0x1c, 0x2e, 0x33, 0xe4, 0x98, 0x01, 0xac, + 0x83, 0xf3, 0xd5, 0x87, 0xf2, 0x0a, 0xca, 0x61, 0x49, 0xb1, 0xc9, 0xc5, 0xbf, 0x98, 0x42, 0xb1, + 0x2e, 0x15, 0x39, 0xdd, 0xa3, 0x2c, 0x56, 0x82, 0x25, 0x54, 0x16, 0x38, 0x17, 0x38, 0x24, 0x74, + 0x3e, 0x81, 0x8a, 0xeb, 0x33, 0xc3, 0xce, 0x43, 0x42, 0xa9, 0xcc, 0x7f, 0x70, 0xfd, 0xa1, 0x44, + 0xd0, 0x6d, 0xc8, 0xbb, 0x3e, 0xd3, 0x5c, 0x8a, 0x17, 0x31, 0xf1, 0x50, 0xae, 0xd0, 0xe6, 0xab, + 0x92, 0x58, 0x9f, 0xca, 0x1c, 0x19, 0xb1, 0x7d, 0x89, 0x29, 0x95, 0xa3, 0x8c, 0x9d, 0x04, 0xa9, + 0x54, 0x42, 0x3d, 0x5a, 0xff, 0x57, 0x06, 0xf2, 0xfa, 0x94, 0x84, 0x51, 0xa2, 0xe7, 0x64, 0x79, + 0xcf, 0xf9, 0x31, 0xdb, 0xe2, 0x2e, 0x49, 0xe8, 0x46, 0x57, 0xdc, 0x39, 0x9b, 0x6a, 0xc1, 0x94, + 0x02, 0xbc, 0x84, 0x16, 0xe2, 0xec, 0x51, 0x0e, 0xd3, 0x69, 0x47, 0x57, 0x01, 0xe1, 0xde, 0xcb, + 0xe2, 0x32, 0x47, 0x98, 0x20, 0xd2, 0xa0, 0x38, 0x23, 0x94, 0x57, 0x79, 0x8e, 0x47, 0x3b, 0x26, + 0xd1, 0x53, 0x28, 0x2f, 0xb6, 0xe0, 0x1b, 0x34, 0x99, 0xa5, 0x30, 0x33, 0x34, 0x94, 0x4b, 0xb2, + 0xed, 0x4e, 0xb8, 0x7b, 0xcb, 0x6c, 0x3c, 0x0a, 0xa8, 0xc3, 0xcd, 0x89, 0x29, 0xee, 0xdb, 0x4d, + 0xe6, 0xc4, 0x6b, 0xb6, 0x30, 0x27, 0x16, 0x67, 0xef, 0x1d, 0x4f, 0x09, 0x1f, 0xd8, 0x25, 0x9e, + 0x6c, 0x31, 0xc9, 0xda, 0x7b, 0x14, 0x4d, 0xa5, 0xdb, 0xd9, 0x67, 0xfd, 0x53, 0x28, 0x70, 0x77, + 0x52, 0xf4, 0x01, 0xe4, 0xb9, 0xc9, 0x72, 0xc0, 0xec, 0xae, 0xdd, 0xc6, 0xe5, 0xb0, 0x10, 0xaa, + 0xff, 0x4d, 0x81, 0xdb, 0xa2, 0x47, 0x34, 0x43, 0xc2, 0x9a, 0x04, 0x79, 0x35, 0x27, 0x34, 0x4a, + 0x36, 0x6b, 0xe5, 0xed, 0x9a, 0xf5, 0x5b, 0xcf, 0x8c, 0xb8, 0x57, 0x67, 0x6f, 0xd8, 0xab, 0xeb, + 0xef, 0x43, 0x4d, 0x60, 0x98, 0xd0, 0xc0, 0xf7, 0x28, 0x59, 0xf6, 0x0b, 0x25, 0xd1, 0x2f, 0xea, + 0x01, 0xec, 0xa4, 0x4d, 0x93, 0xd2, 0xab, 0x53, 0xee, 0x14, 0xb6, 0xe5, 0xae, 0x15, 0x4a, 0x11, + 0xf9, 0xf4, 0x27, 0xd7, 0xbc, 0x25, 0xd6, 0x84, 0x6b, 0x97, 0x29, 0xba, 0xfe, 0xad, 0x12, 0xaf, + 0x17, 0xbc, 0xd5, 0xe8, 0x63, 0xb6, 0xf9, 0xa0, 0xcf, 0xa0, 0x20, 0x7a, 0x23, 0xbf, 0xb3, 0x76, + 0x54, 0xbf, 0x46, 0xad, 0x10, 0x1f, 0x3a, 0xa1, 0x33, 0xc3, 0xf2, 0x04, 0x7a, 0x0a, 0xf9, 0x99, + 0x3f, 0xf7, 0x22, 0x59, 0x0a, 0x37, 0x39, 0x2a, 0x0e, 0xb0, 0x62, 0xe0, 0x1f, 0xa2, 0xbd, 0x65, + 0xb9, 0xb5, 0x65, 0x8e, 0xc4, 0x3d, 0x3c, 0xd9, 0xfe, 0x72, 0xab, 0x4d, 0xbe, 0xfe, 0x0f, 0x05, + 0x54, 0x69, 0x0b, 0x89, 0xbe, 0x8b, 0xb4, 0x10, 0x51, 0xce, 0xdc, 0x74, 0x22, 0x33, 0xaf, 0x71, + 0xab, 0x64, 0x62, 0xd4, 0x5f, 0x37, 0xdb, 0x84, 0xfd, 0x58, 0x9e, 0xa8, 0xff, 0x61, 0x19, 0x07, + 0xf6, 0x76, 0x19, 0xf7, 0x43, 0x28, 0x88, 0x78, 0xc9, 0xb7, 0xdf, 0xbd, 0x2e, 0xbc, 0x52, 0xec, + 0x3b, 0x4c, 0x8c, 0x2b, 0xb8, 0x65, 0x7a, 0x4e, 0x90, 0xae, 0xb1, 0xd5, 0x3c, 0x4c, 0x38, 0x37, + 0xf3, 0x76, 0xce, 0x7d, 0xcd, 0xda, 0x55, 0x7f, 0x05, 0x28, 0x79, 0xb5, 0xf4, 0xc5, 0xaf, 0x60, + 0x57, 0x9a, 0x36, 0xe6, 0x8c, 0xa5, 0x85, 0xc2, 0x37, 0xef, 0x5d, 0x73, 0x75, 0x5a, 0x0d, 0xde, + 0xb9, 0xdc, 0x80, 0xd6, 0xa3, 0xf8, 0x0f, 0xbb, 0x8e, 0xf7, 0xc2, 0x67, 0x7f, 0xb3, 0xcb, 0xab, + 0x16, 0xd6, 0x96, 0x04, 0xd0, 0xd9, 0xfc, 0x43, 0xc2, 0x27, 0x50, 0x94, 0x17, 0xdf, 0xa4, 0x27, + 0xc4, 0xb2, 0xf5, 0x09, 0xa0, 0x93, 0xd0, 0x09, 0x2e, 0x5a, 0xa1, 0x7b, 0x49, 0xc2, 0xe6, 0x85, + 0xe3, 0x9d, 0x13, 0xba, 0xb8, 0x40, 0x49, 0x5c, 0xf0, 0x19, 0xe4, 0x5e, 0xba, 0xde, 0x44, 0xd6, + 0xd4, 0xfb, 0x6b, 0xda, 0xd7, 0xd4, 0xf0, 0xc6, 0xcc, 0xcf, 0xd4, 0xbf, 0x0f, 0xdb, 0xcd, 0xe9, + 0x9c, 0x46, 0x24, 0x7c, 0x43, 0xf7, 0xf9, 0xb3, 0x02, 0x55, 0x96, 0x96, 0x97, 0x8b, 0x78, 0x9f, + 0x42, 0x09, 0x93, 0x57, 0x84, 0x46, 0x9f, 0x9f, 0xc9, 0xe6, 0xfc, 0xc1, 0x7a, 0x73, 0x4e, 0x9e, + 0x38, 0x88, 0xc5, 0xc5, 0xde, 0x5f, 0x0a, 0x25, 0x79, 0xff, 0x27, 0x50, 0x4d, 0xb1, 0x92, 0xfb, + 0x7e, 0xf6, 0x4d, 0xfb, 0xfe, 0xd7, 0x50, 0x4b, 0xdd, 0x42, 0x51, 0x1d, 0xb6, 0xe4, 0x77, 0x93, + 0xf7, 0x1a, 0xa1, 0x66, 0x2b, 0x4c, 0x60, 0xa8, 0xb5, 0x62, 0x8d, 0xfc, 0xed, 0xe1, 0xf1, 0xeb, + 0x2d, 0xc0, 0x55, 0x27, 0x49, 0x36, 0xbe, 0xcd, 0x40, 0x41, 0xac, 0xb0, 0x68, 0x1b, 0x2a, 0xa6, + 0xa5, 0x5b, 0x23, 0xd3, 0xee, 0x0f, 0xfa, 0x86, 0xfa, 0x4e, 0x02, 0xe8, 0xf4, 0x3b, 0x96, 0xaa, + 0xa0, 0x2a, 0x94, 0x25, 0x30, 0xf8, 0x5c, 0xcd, 0x20, 0x04, 0xb5, 0x98, 0x6c, 0xb7, 0xbb, 0x9d, + 0xbe, 0xa1, 0x66, 0x91, 0x0a, 0x5b, 0x12, 0x33, 0x30, 0x1e, 0x60, 0x35, 0x87, 0x34, 0xd8, 0x59, + 0xa8, 0xb5, 0xec, 0x4e, 0xdf, 0xfe, 0xe5, 0x68, 0x80, 0x47, 0x3d, 0x35, 0x8f, 0xee, 0xc2, 0x6d, + 0xc9, 0x69, 0x19, 0xcd, 0x41, 0xaf, 0xd7, 0x31, 0xcd, 0xce, 0xa0, 0xaf, 0x16, 0xd0, 0x2e, 0x20, + 0xc9, 0xe8, 0xe9, 0x9d, 0xbe, 0x65, 0xf4, 0xf5, 0x7e, 0xd3, 0x50, 0x8b, 0x89, 0x03, 0xa6, 0x35, + 0xc0, 0xfa, 0x89, 0x61, 0xb7, 0x06, 0xcf, 0xfa, 0x6a, 0x09, 0x3d, 0x80, 0xbb, 0xab, 0x0c, 0xe3, + 0x04, 0xeb, 0x2d, 0xa3, 0xa5, 0x96, 0x13, 0xa7, 0xfa, 0x86, 0xd1, 0x32, 0x6d, 0x6c, 0x1c, 0x0f, + 0x06, 0x96, 0x0a, 0xe8, 0x21, 0x68, 0x2b, 0xa7, 0xb0, 0x71, 0xac, 0x77, 0xf9, 0x65, 0x15, 0xb4, + 0x07, 0x0f, 0x57, 0x75, 0xe2, 0xce, 0x19, 0x93, 0x19, 0x76, 0xf5, 0xa6, 0xa1, 0x6e, 0xa1, 0x1a, + 0xc0, 0xe2, 0x99, 0x5f, 0xa8, 0xd5, 0xc6, 0x5f, 0x14, 0x00, 0x91, 0xa4, 0x7c, 0xbb, 0xd9, 0x01, + 0x95, 0x9f, 0xc0, 0xb6, 0xf5, 0xe5, 0xd0, 0x88, 0x9d, 0xba, 0x82, 0xb6, 0x3b, 0x5d, 0x43, 0x55, + 0xd0, 0x1d, 0xb8, 0x95, 0x44, 0x8f, 0xbb, 0x83, 0x26, 0xf3, 0xf0, 0x2e, 0xa0, 0x24, 0x3c, 0x38, + 0xfe, 0x85, 0xd1, 0xb4, 0xd4, 0x2c, 0xba, 0x07, 0x77, 0x92, 0x78, 0xb3, 0x3b, 0x32, 0x2d, 0x03, + 0x1b, 0x2d, 0x35, 0xb7, 0xaa, 0xe9, 0x04, 0xeb, 0xc3, 0x53, 0x35, 0xdf, 0xf8, 0x93, 0x02, 0x05, + 0xf1, 0x17, 0x0e, 0x0b, 0x51, 0xdb, 0x4c, 0xbd, 0xe9, 0x16, 0x54, 0x63, 0xe4, 0xd8, 0xc2, 0x6d, + 0x53, 0x55, 0x92, 0x42, 0xc6, 0x17, 0xd6, 0xc7, 0x6a, 0x26, 0x89, 0xb4, 0x47, 0x26, 0x8b, 0xf5, + 0x36, 0x54, 0x16, 0x8a, 0xda, 0xa6, 0x9a, 0x4b, 0x02, 0x67, 0x6d, 0x53, 0xcd, 0x27, 0x81, 0x2f, + 0xda, 0xa6, 0x5a, 0x48, 0x02, 0x5f, 0xb5, 0x4d, 0xb5, 0xd8, 0xf8, 0x46, 0x81, 0x3b, 0x1b, 0xab, + 0x1b, 0xbd, 0x0b, 0x8f, 0xf8, 0xe3, 0x6d, 0x69, 0x4e, 0xf3, 0x54, 0xef, 0x9f, 0x18, 0xa9, 0x77, + 0xbf, 0x07, 0xef, 0x5e, 0x2b, 0xd2, 0x1b, 0xb4, 0x3a, 0xed, 0x8e, 0xd1, 0x52, 0x15, 0x54, 0x87, + 0xc7, 0xd7, 0x8a, 0xe9, 0x2d, 0x96, 0x24, 0x19, 0xf4, 0x3d, 0xd8, 0xbb, 0x56, 0xa6, 0x65, 0x74, + 0x0d, 0xcb, 0x68, 0xa9, 0xd9, 0x46, 0x04, 0x5b, 0xc9, 0x4d, 0x97, 0x27, 0xaa, 0x71, 0x66, 0xe0, + 0x8e, 0xf5, 0x65, 0xea, 0x61, 0x2c, 0xe5, 0x52, 0xb8, 0xde, 0xd5, 0x71, 0x4f, 0x55, 0x58, 0xe0, + 0xd2, 0x8c, 0x67, 0x3a, 0xee, 0x77, 0xfa, 0x27, 0x6a, 0x86, 0xd7, 0xc9, 0x8a, 0x2e, 0xab, 0xd3, + 0xfe, 0x52, 0xcd, 0x36, 0x7e, 0xaf, 0xb0, 0x76, 0xb0, 0xdc, 0x48, 0xd9, 0xb5, 0xd8, 0x30, 0x07, + 0x23, 0xdc, 0x4c, 0xfb, 0x43, 0x83, 0x9d, 0x34, 0x7e, 0x36, 0xe8, 0x8e, 0x7a, 0x2c, 0xbf, 0x36, + 0x9c, 0x68, 0x19, 0x6a, 0x86, 0xbd, 0x27, 0x8d, 0xcb, 0x54, 0x52, 0xb3, 0xcc, 0x86, 0x34, 0x8b, + 0x7b, 0x46, 0xcd, 0x35, 0x7e, 0xa7, 0xc0, 0x36, 0x5f, 0x59, 0xc5, 0x8c, 0xe7, 0x2f, 0xba, 0x0f, + 0xbb, 0x7a, 0xd7, 0xc0, 0x96, 0xad, 0x37, 0xad, 0xce, 0xa0, 0x9f, 0x7a, 0xd5, 0x43, 0xd0, 0xd6, + 0x79, 0xc2, 0xa7, 0xaa, 0xb2, 0x99, 0xdb, 0xc4, 0x86, 0x6e, 0xb1, 0xf7, 0x6d, 0xe4, 0x8e, 0x86, + 0x2d, 0xc6, 0xcd, 0x36, 0x7e, 0x13, 0x2f, 0x15, 0x89, 0x6d, 0x8b, 0x1d, 0x11, 0x66, 0xc7, 0x67, + 0x86, 0x3a, 0xd6, 0x7b, 0xf1, 0x63, 0x1e, 0xc0, 0xdd, 0x4d, 0xdc, 0x41, 0xbb, 0xad, 0x2a, 0xcc, + 0x8a, 0x8d, 0xcc, 0xbe, 0x9a, 0x69, 0x1c, 0x41, 0x51, 0xfe, 0xa8, 0x88, 0x4a, 0x90, 0x93, 0xda, + 0x8a, 0x90, 0xed, 0x0e, 0x9e, 0xa9, 0x0a, 0x02, 0x28, 0xf4, 0x8c, 0x56, 0x67, 0xd4, 0x53, 0x33, + 0x8c, 0x7d, 0xda, 0x39, 0x39, 0x55, 0xb3, 0x8d, 0xff, 0x28, 0x50, 0x49, 0xec, 0x44, 0xac, 0x36, + 0xa5, 0x7e, 0xd6, 0x37, 0x92, 0x61, 0x4b, 0xc1, 0x43, 0xa3, 0xdf, 0x62, 0x39, 0x91, 0x7c, 0x90, + 0xe0, 0xe8, 0x67, 0x7a, 0xa7, 0xab, 0x1f, 0x77, 0x65, 0xe8, 0xd2, 0x3c, 0xcb, 0xd2, 0x9b, 0xa7, + 0x2c, 0x4d, 0xd7, 0x58, 0x2d, 0x43, 0xb2, 0x72, 0x09, 0xfb, 0x97, 0x2c, 0xab, 0x79, 0xca, 0xae, + 0xcb, 0xb3, 0x2c, 0x49, 0x31, 0x45, 0x0b, 0x2f, 0xac, 0x3d, 0x30, 0x2e, 0x88, 0x62, 0xe3, 0x8f, + 0x0a, 0x6c, 0x25, 0x7f, 0x07, 0x59, 0x51, 0xb1, 0x9c, 0x25, 0x8f, 0xe0, 0xde, 0x2a, 0x6e, 0xd9, + 0x43, 0x6c, 0x98, 0x46, 0x9f, 0x4d, 0x96, 0x1d, 0x50, 0xd3, 0xec, 0xd1, 0x50, 0xb4, 0xbf, 0x34, + 0xca, 0xdb, 0x7d, 0x76, 0xc5, 0x2d, 0x7c, 0x7e, 0xc8, 0x6e, 0x9f, 0x6b, 0xfc, 0x1a, 0xaa, 0xa9, + 0xff, 0x6a, 0x88, 0xd9, 0x20, 0x1a, 0xb8, 0x08, 0x91, 0xdd, 0xd3, 0x4f, 0xfa, 0x86, 0xd5, 0x69, + 0xaa, 0xef, 0x88, 0x49, 0x93, 0x62, 0x9a, 0x26, 0x6b, 0x19, 0x7c, 0x66, 0xa4, 0xf0, 0xfe, 0x59, + 0xcf, 0x50, 0x33, 0x8d, 0x7d, 0xa8, 0xca, 0x6d, 0xa3, 0xef, 0x47, 0xee, 0x8b, 0x2b, 0x26, 0x29, + 0x6b, 0x46, 0x16, 0xac, 0x78, 0xe4, 0x3b, 0xc7, 0x0f, 0xe1, 0xf6, 0xd8, 0x9f, 0xad, 0x4e, 0xe3, + 0xa1, 0xf2, 0x55, 0xd6, 0x09, 0xdc, 0xe7, 0x05, 0xfe, 0x57, 0xec, 0x47, 0xff, 0x0b, 0x00, 0x00, + 0xff, 0xff, 0x90, 0x7c, 0x3c, 0xe7, 0x1d, 0x1a, 0x00, 0x00, +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/api.proto b/vendor/github.com/libopenstorage/openstorage/api/api.proto new file mode 100644 index 0000000000..cdc6c1d2c4 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/api.proto @@ -0,0 +1,398 @@ +syntax = "proto3"; + +import "google/protobuf/timestamp.proto"; + +package openstorage.api; + +option go_package = "api"; +option java_multiple_files = true; +option java_package = "com.openstorage.api"; + +enum Status { + STATUS_NONE = 0; + STATUS_INIT = 1; + STATUS_OK = 2; + STATUS_OFFLINE = 3; + STATUS_ERROR = 4; + STATUS_NOT_IN_QUORUM = 5; + STATUS_DECOMMISSION = 6; + STATUS_MAINTENANCE = 7; + STATUS_STORAGE_DOWN = 8; + STATUS_STORAGE_DEGRADED = 9; + STATUS_NEEDS_REBOOT = 10; + STATUS_STORAGE_REBALANCE = 11; + STATUS_STORAGE_DRIVE_REPLACE = 12; + // Add statuses before MAX and update the number for MAX + STATUS_MAX = 13; +} + +enum DriverType { + DRIVER_TYPE_NONE = 0; + DRIVER_TYPE_FILE = 1; + DRIVER_TYPE_BLOCK = 2; + DRIVER_TYPE_OBJECT = 3; + DRIVER_TYPE_CLUSTERED = 4; + DRIVER_TYPE_GRAPH = 5; +} + +enum FSType { + FS_TYPE_NONE = 0; + FS_TYPE_BTRFS = 1; + FS_TYPE_EXT4 = 2; + FS_TYPE_FUSE = 3; + FS_TYPE_NFS = 4; + FS_TYPE_VFS = 5; + FS_TYPE_XFS = 6; + FS_TYPE_ZFS = 7; +} + +enum GraphDriverChangeType { + GRAPH_DRIVER_CHANGE_TYPE_NONE = 0; + GRAPH_DRIVER_CHANGE_TYPE_MODIFIED = 1; + GRAPH_DRIVER_CHANGE_TYPE_ADDED = 2; + GRAPH_DRIVER_CHANGE_TYPE_DELETED = 3; +} + +enum SeverityType { + SEVERITY_TYPE_NONE = 0; + SEVERITY_TYPE_ALARM = 1; + SEVERITY_TYPE_WARNING = 2; + SEVERITY_TYPE_NOTIFY = 3; +} + +enum ResourceType { + RESOURCE_TYPE_NONE = 0; + RESOURCE_TYPE_VOLUME = 1; + RESOURCE_TYPE_NODE = 2; + RESOURCE_TYPE_CLUSTER = 3; + RESOURCE_TYPE_DRIVE = 4; +} + +enum AlertActionType { + ALERT_ACTION_TYPE_NONE = 0; + ALERT_ACTION_TYPE_DELETE = 1; + ALERT_ACTION_TYPE_CREATE = 2; + ALERT_ACTION_TYPE_UPDATE = 3; +} + +enum VolumeActionParam { + VOLUME_ACTION_PARAM_NONE = 0; + // Maps to the boolean value false + VOLUME_ACTION_PARAM_OFF = 1; + // Maps to the boolean value true. + VOLUME_ACTION_PARAM_ON = 2; +} + +enum CosType { + NONE = 0; + LOW = 1; + MEDIUM = 2; + HIGH = 3; +} + +// VolumeState represents the state of a volume. +enum VolumeState { + VOLUME_STATE_NONE = 0; + // Volume is transitioning to new state + VOLUME_STATE_PENDING = 1; + // Volume is ready to be assigned to a container + VOLUME_STATE_AVAILABLE = 2; + // Volume is attached to container + VOLUME_STATE_ATTACHED = 3; + // Volume is detached but associated with a container + VOLUME_STATE_DETACHED = 4; + // Volume detach is in progress + VOLUME_STATE_DETATCHING = 5; + // Volume is in error state + VOLUME_STATE_ERROR = 6; + // Volume is deleted, it will remain in this state + // while resources are asynchronously reclaimed + VOLUME_STATE_DELETED = 7; +} + +// VolumeStatus represents a health status for a volume. +enum VolumeStatus { + VOLUME_STATUS_NONE = 0; + // Volume is not present + VOLUME_STATUS_NOT_PRESENT = 1; + // Volume is healthy + VOLUME_STATUS_UP = 2; + // Volume is in fail mode + VOLUME_STATUS_DOWN = 3; + // Volume is up but with degraded performance + // In a RAID group, this may indicate a problem with one or more drives + VOLUME_STATUS_DEGRADED = 4; +} + +enum StorageMedium { + // Magnetic spinning disk. + STORAGE_MEDIUM_MAGNETIC = 0; + // SSD disk + STORAGE_MEDIUM_SSD = 1; + // NVME disk + STORAGE_MEDIUM_NVME = 2; +} + +enum ClusterNotify { + // Node is down + CLUSTER_NOTIFY_DOWN = 0; +} + +// StorageResource groups properties of a storage device. +message StorageResource { + // Id is the LUN identifier. + string id = 1; + // Path device path for this storage resource. + string path = 2; + // Storage medium. + StorageMedium medium = 3; + // True if this device is online. + bool online = 4;; + // IOPS + uint64 iops = 5;; + // SeqWrite + double seq_write = 6; + // SeqRead + double seq_read = 7; + // RandRW + double randRW = 8; + // Total size in bytes. + uint64 size = 9;; + // Physical Bytes used. + uint64 used = 10; + // True if this device is rotational. + string rotation_speed = 11; + // Timestamp of last time this device was scanned. + google.protobuf.Timestamp last_scan = 12; +} + +// VolumeLocator is a structure that is attached to a volume +// and is used to carry opaque metadata. +message VolumeLocator { + // User friendly identifier + string name = 1; + // A set of name-value pairs that acts as search filters + map volume_labels = 2; +} + +message Source { + // A volume id, if specified will create a clone of the parent. + string parent = 1; + // Seed will seed the volume from the specified URI + // Any additional config for the source comes from the labels in the spec + string seed = 2; +} + +// VolumeSpec has the properties needed to create a volume. +message VolumeSpec { + // Ephemeral storage + bool ephemeral = 1; + // Thin provisioned volume size in bytes + uint64 size = 2; + // Format disk with this FSType + FSType format = 3; + // Block size for filesystem + int64 block_size = 4; + // Specifies the number of nodes that are + // allowed to fail, and yet data is available + // A value of 0 implies that data is not erasure coded, + // a failure of a node will lead to data loss + int64 ha_level = 5; + // The COS, 1 to 9 + CosType cos = 6; + // Perform dedupe on this disk + bool dedupe = 7; + // SnapshotInterval in minutes, set to 0 to disable snapshots + uint32 snapshot_interval = 8; + // Volume configuration labels + map volume_labels = 9; + // Shared is true if this volume can be remotely accessed. + bool shared = 10; + // ReplicaSet is the desired replicaSet the volume want to be placed. + ReplicaSet replica_set = 11; + // Specifies the number of parts the volume can be aggregated from. + uint32 aggregation_level = 12; + // Encrypted is true if this volume will be cryptographically secured. + bool encrypted = 13; + // User passphrase if this is an encrypted volume + string passphrase = 14; + // SnapshotSchedule + string snapshot_schedule = 15; + // Scale allows autocreation of volumes. + uint32 scale = 16; +} + +// Set of machine IDs (nodes) to which part of this volume is erasure coded - for clustered storage arrays +message ReplicaSet { + repeated string nodes = 1; +} + + // List of name value mapping of driver specific runtime information. +message RuntimeStateMap { + map runtime_state = 1; +} + +// Volume represents a live, created volume. +message Volume { + // Self referential volume ID + string id = 1; + Source source = 2; + bool readonly = 3; + // User specified locator + VolumeLocator locator = 4; + // Volume creation time + google.protobuf.Timestamp ctime = 5; + // User specified VolumeSpec + VolumeSpec spec = 6; + // Volume usage + uint64 usage = 7; + // Time when an integrity check for run + google.protobuf.Timestamp last_scan = 8; + // Format FSType type if any + FSType format = 9; + VolumeStatus status = 10; + VolumeState state = 11; + // Machine ID (node) on which this volume is attached + // Machine ID is a node instance identifier for clustered systems. + string attached_on = 12; + string device_path = 14; + repeated string attach_path = 15; + // List of ReplicaSets which provide storage for this volume, for clustered storage arrays + repeated ReplicaSet replica_sets = 16; + // Last recorded error + string error = 17; + // List of name value mapping of driver specific runtime information. + repeated RuntimeStateMap runtime_state = 18; + string secure_device_path = 19; + // BackgroundProcessing is true if volume is attached but not by the user + bool background_processing = 20; +} + +message Stats { + // Reads completed successfully + uint64 reads = 1; + // Time spent in reads in ms + uint64 read_ms = 2; + uint64 read_bytes = 3; + // Writes completed successfully + uint64 writes = 4; + // Time spent in writes in ms + uint64 write_ms = 5; + uint64 write_bytes = 6; + // IOs curently in progress + uint64 io_progress = 7; + // Time spent doing IOs ms + uint64 io_ms = 8; + // BytesUsed + uint64 bytes_used = 9; + // Interval in ms during which stats were collected + uint64 interval_ms = 10; +} + +message Alert { + // Id for Alert + int64 id = 1; + // Severity of the Alert + SeverityType severity = 2; + // AlertType user defined alert type + int64 alert_type = 3; + // Message describing the Alert + string message = 4; + //Timestamp when Alert occured + google.protobuf.Timestamp timestamp = 5; + // ResourceId where Alert occured + string resource_id = 6; + // Resource where Alert occured + ResourceType resource = 7; + // Cleared Flag + bool cleared = 8; + // TTL in seconds for this Alert + uint64 ttl = 9; +} + +message Alerts { + repeated Alert alert = 1; +} + +message VolumeCreateRequest { + // User specified volume name and labels + VolumeLocator locator = 1; + // Source to create volume + Source source = 2; + // The storage spec for the volume + VolumeSpec spec = 3; +} + +message VolumeResponse { + string error = 1; +} + +message VolumeCreateResponse { + // ID of the newly created volume + string id = 1; + VolumeResponse volume_response = 2; +} + +// VolumeStateAction specifies desired actions. +message VolumeStateAction { + // Attach or Detach volume + VolumeActionParam attach = 1; + // Mount or unmount volume + VolumeActionParam mount = 2; + string mount_path = 3; + // Device path returned in attach + string device_path = 4; +} + +message VolumeSetRequest { + // User specified volume name and labels + VolumeLocator locator = 1; + // The storage spec for the volume + VolumeSpec spec = 2; + // State modification on this volume. + VolumeStateAction action = 3; +} + +message VolumeSetResponse { + Volume volume = 1; + VolumeResponse volume_response = 2; +} + +message SnapCreateRequest { + // volume id + string id = 1; + VolumeLocator locator = 2; + bool readonly = 3; +} + +message SnapCreateResponse { + VolumeCreateResponse volume_create_response = 1; +} + +message VolumeInfo { + string volume_id = 1; + string path = 2; + VolumeSpec storage = 3; +} + +// GraphDriverChanges represent a list of changes between the filesystem layers +// specified by the ID and Parent. // Parent may be an empty string, in which +// case there is no parent. +// Where the Path is the filesystem path within the layered filesystem +message GraphDriverChanges { + string path = 1; + GraphDriverChangeType kind = 2; +} + +message ClusterResponse { + string error = 1; +} + +message ActiveRequest { + map ReqestKV = 1; +} + +message ActiveRequests { + int64 RequestCount = 1; + repeated ActiveRequest ActiveRequest = 2; +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/client/client.go b/vendor/github.com/libopenstorage/openstorage/api/client/client.go new file mode 100644 index 0000000000..590f3dec0c --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/client/client.go @@ -0,0 +1,141 @@ +package client + +import ( + "crypto/tls" + "fmt" + "net" + "net/http" + "net/url" + "sync" + "time" +) + +var ( + httpCache = make(map[string]*http.Client) + cacheLock sync.Mutex +) + +// NewClient returns a new REST client for specified server. +func NewClient(host string, version string) (*Client, error) { + baseURL, err := url.Parse(host) + if err != nil { + return nil, err + } + if baseURL.Path == "" { + baseURL.Path = "/" + } + unix2HTTP(baseURL) + c := &Client{ + base: baseURL, + version: version, + httpClient: getHttpClient(host), + } + return c, nil +} + +func GetUnixServerPath(socketName string, paths ...string) string { + serverPath := "unix://" + for _, path := range paths { + serverPath = serverPath + path + } + serverPath = serverPath + socketName + ".sock" + return serverPath +} + + +// Client is an HTTP REST wrapper. Use one of Get/Post/Put/Delete to get a request +// object. +type Client struct { + base *url.URL + version string + httpClient *http.Client +} + +// Status sends a Status request at the /status REST endpoint. +func (c *Client) Status() (*Status, error) { + status := &Status{} + err := c.Get().UsePath("/status").Do().Unmarshal(status) + return status, err +} + +// Version send a request at the /versions REST endpoint. +func (c *Client) Versions(endpoint string) ([]string, error) { + versions := []string{} + err := c.Get().Resource(endpoint + "/versions").Do().Unmarshal(&versions) + return versions, err +} + +// Get returns a Request object setup for GET call. +func (c *Client) Get() *Request { + return NewRequest(c.httpClient, c.base, "GET", c.version) +} + +// Post returns a Request object setup for POST call. +func (c *Client) Post() *Request { + return NewRequest(c.httpClient, c.base, "POST", c.version) +} + +// Put returns a Request object setup for PUT call. +func (c *Client) Put() *Request { + return NewRequest(c.httpClient, c.base, "PUT", c.version) +} + +// Put returns a Request object setup for DELETE call. +func (c *Client) Delete() *Request { + return NewRequest(c.httpClient, c.base, "DELETE", c.version) +} + +func unix2HTTP(u *url.URL) { + if u.Scheme == "unix" { + // Override the main URL object so the HTTP lib won't complain + u.Scheme = "http" + u.Host = "unix.sock" + u.Path = "" + } +} + +func newHTTPClient(u *url.URL, tlsConfig *tls.Config, timeout time.Duration) *http.Client { + httpTransport := &http.Transport{ + TLSClientConfig: tlsConfig, + } + + switch u.Scheme { + case "unix": + socketPath := u.Path + unixDial := func(proto, addr string) (net.Conn, error) { + ret, err := net.DialTimeout("unix", socketPath, timeout) + return ret, err + } + httpTransport.Dial = unixDial + unix2HTTP(u) + default: + httpTransport.Dial = func(proto, addr string) (net.Conn, error) { + return net.DialTimeout(proto, addr, timeout) + } + } + + return &http.Client{Transport: httpTransport} +} + +func getHttpClient(host string) *http.Client { + c, ok := httpCache[host] + if !ok { + cacheLock.Lock() + defer cacheLock.Unlock() + c, ok = httpCache[host] + if !ok { + u, err := url.Parse(host) + if err != nil { + // TODO(pedge): clean up + fmt.Println("Failed to parse into url", host) + return nil + } + if u.Path == "" { + u.Path = "/" + } + c = newHTTPClient(u, nil, 10*time.Second) + httpCache[host] = c + } + } + return c +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/client/request.go b/vendor/github.com/libopenstorage/openstorage/api/client/request.go new file mode 100644 index 0000000000..2ff89aeff5 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/client/request.go @@ -0,0 +1,304 @@ +package client + +import ( + "bytes" + "encoding/json" + "fmt" + "io/ioutil" + "net/http" + "net/url" + "path" + "strconv" + "strings" + "time" +) + +// Request is contructed iteratively by the client and finally dispatched. +// A REST endpoint is accessed with the following convention: +// base_url///[] +type Request struct { + client *http.Client + version string + verb string + path string + base *url.URL + params url.Values + headers http.Header + resource string + instance string + err error + body []byte + req *http.Request + resp *http.Response + timeout time.Duration +} + +// Response is a representation of HTTP response received from the server. +type Response struct { + status string + statusCode int + err error + body []byte +} + +// Status upon error, attempts to parse the body of a response into a meaningful status. +type Status struct { + Message string + ErrorCode int +} + +// NewRequest instance +func NewRequest(client *http.Client, base *url.URL, verb string, version string) *Request { + return &Request{ + client: client, + verb: verb, + base: base, + path: base.Path, + version: version, + } +} + +func checkExists(mustExist string, before string) error { + if len(mustExist) == 0 { + return fmt.Errorf("%q should be set before setting %q", mustExist, before) + } + return nil +} + +func checkSet(name string, s *string, newval string) error { + if len(*s) != 0 { + return fmt.Errorf("%q already set to %q, cannot change to %q", + name, *s, newval) + } + *s = newval + return nil +} + +// Resource specifies the resource to be accessed. +func (r *Request) Resource(resource string) *Request { + if r.err == nil { + r.err = checkSet("resource", &r.resource, resource) + } + return r +} + +// Instance specifies the instance of the resource to be accessed. +func (r *Request) Instance(instance string) *Request { + if r.err == nil { + r.err = checkExists("resource", "instance") + if r.err == nil { + r.err = checkSet("instance", &r.instance, instance) + } + } + return r +} + +// UsePath use the specified path and don't build up a request. +func (r *Request) UsePath(path string) *Request { + if r.err == nil { + r.err = checkSet("path", &r.path, path) + } + return r +} + +// QueryOption adds specified options to query. +func (r *Request) QueryOption(key string, value string) *Request { + if r.err != nil { + return r + } + if r.params == nil { + r.params = make(url.Values) + } + r.params.Add(string(key), value) + return r +} + +// QueryOptionLabel adds specified label to query. +func (r *Request) QueryOptionLabel(key string, labels map[string]string) *Request { + if r.err != nil { + return r + } + if b, err := json.Marshal(labels); err != nil { + r.err = err + } else { + if r.params == nil { + r.params = make(url.Values) + } + r.params.Add(string(key), string(b)) + } + return r +} + +// SetHeader adds specified header values to query. +func (r *Request) SetHeader(key, value string) *Request { + if r.headers == nil { + r.headers = http.Header{} + } + r.headers.Set(key, value) + return r +} + +// Timeout makes the request use the given duration as a timeout. Sets the "timeout" +// parameter. +func (r *Request) Timeout(d time.Duration) *Request { + if r.err != nil { + return r + } + r.timeout = d + return r +} + +// Body sets the request Body. +func (r *Request) Body(v interface{}) *Request { + var err error + if r.err != nil { + return r + } + r.body, err = json.Marshal(v) + if err != nil { + r.err = err + return r + } + return r +} + +// URL returns the current working URL. +func (r *Request) URL() *url.URL { + u := *r.base + p := r.path + + if len(r.version) != 0 { + p = path.Join(p, strings.ToLower(r.version)) + } + if len(r.resource) != 0 { + p = path.Join(p, strings.ToLower(r.resource)) + if len(r.instance) != 0 { + p = path.Join(p, r.instance) + } + } + + u.Path = p + + query := url.Values{} + for key, values := range r.params { + for _, value := range values { + query.Add(key, value) + } + } + if r.timeout != 0 { + query.Set("timeout", r.timeout.String()) + } + u.RawQuery = query.Encode() + return &u +} + +// headerVal for key as an int. Return false if header is not present or valid. +func headerVal(key string, resp *http.Response) (int, bool) { + if h := resp.Header.Get(key); len(h) > 0 { + if i, err := strconv.Atoi(h); err == nil { + return i, true + } + } + return 0, false +} + +func parseHTTPStatus(resp *http.Response, body []byte) error { + + var ( + status *Status + err error + ) + + httpOK := resp.StatusCode >= http.StatusOK && resp.StatusCode <= http.StatusPartialContent + hasStatus := false + if body != nil { + err = json.Unmarshal(body, status) + if err == nil && status.Message != "" { + hasStatus = true + } + } + // If the status is NG, return an error regardless of HTTP status. + if hasStatus && status.ErrorCode != 0 { + return fmt.Errorf("Error %v : %v", status.ErrorCode, status.Message) + } + + // Status is good and HTTP status is good, everything is good + if httpOK { + return nil + } + + // If HTTP status is NG, return an error. + return fmt.Errorf("HTTP error %d", resp.StatusCode) +} + +// Do executes the request and returns a Response. +func (r *Request) Do() *Response { + var ( + err error + req *http.Request + resp *http.Response + url string + body []byte + ) + if r.err != nil { + return &Response{err: r.err} + } + url = r.URL().String() + req, err = http.NewRequest(r.verb, url, bytes.NewBuffer(r.body)) + if err != nil { + return &Response{err: err} + } + if r.headers == nil { + r.headers = http.Header{} + } + req.Header = r.headers + req.Header.Set("Content-Type", "application/json") + resp, err = r.client.Do(req) + if err != nil { + return &Response{err: err} + } + if resp.Body != nil { + defer resp.Body.Close() + body, err = ioutil.ReadAll(resp.Body) + } + if err != nil { + return &Response{err: err} + } + return &Response{ + status: resp.Status, + statusCode: resp.StatusCode, + body: body, + err: parseHTTPStatus(resp, body), + } +} + +// Body return http body, valid only if there is no error +func (r Response) Body() ([]byte, error) { + return r.body, r.err +} + +// StatusCode HTTP status code returned. +func (r Response) StatusCode() int { + return r.statusCode +} + +// Unmarshal result into obj +func (r Response) Unmarshal(v interface{}) error { + if r.err != nil { + return r.err + } + return json.Unmarshal(r.body, v) +} + +// Error executing the request. +func (r Response) Error() error { + return r.err +} + +func (r Response) FormatError() error { + if len(r.body) == 0 { + return fmt.Errorf("Error: %v", r.err) + } else { + return fmt.Errorf("HTTP-%d: %s", r.statusCode, string(r.body)) + } +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/client/volume/client.go b/vendor/github.com/libopenstorage/openstorage/api/client/volume/client.go new file mode 100644 index 0000000000..7d93d4168a --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/client/volume/client.go @@ -0,0 +1,387 @@ +package volume + +import ( + "bytes" + "errors" + "fmt" + "io" + "io/ioutil" + "strconv" + + "github.com/libopenstorage/openstorage/api" + "github.com/libopenstorage/openstorage/api/client" + "github.com/libopenstorage/openstorage/volume" +) + +const ( + graphPath = "/graph" + volumePath = "/osd-volumes" + snapPath = "/osd-snapshot" +) + +type volumeClient struct { + volume.IODriver + c *client.Client +} + +func newVolumeClient(c *client.Client) volume.VolumeDriver { + return &volumeClient{volume.IONotSupported, c} +} + +// String description of this driver. +func (v *volumeClient) Name() string { + return "VolumeDriver" +} + +func (v *volumeClient) Type() api.DriverType { + // Block drivers implement the superset. + return api.DriverType_DRIVER_TYPE_BLOCK +} + +func (v *volumeClient) GraphDriverCreate(id string, parent string) error { + response := "" + if err := v.c.Put().Resource(graphPath + "/create").Instance(id).Do().Unmarshal(&response); err != nil { + return err + } + if response != id { + return fmt.Errorf("Invalid response: %s", response) + } + return nil +} + +func (v *volumeClient) GraphDriverRemove(id string) error { + response := "" + if err := v.c.Put().Resource(graphPath + "/remove").Instance(id).Do().Unmarshal(&response); err != nil { + return err + } + if response != id { + return fmt.Errorf("Invalid response: %s", response) + } + return nil +} + +func (v *volumeClient) GraphDriverGet(id string, mountLabel string) (string, error) { + response := "" + if err := v.c.Get().Resource(graphPath + "/inspect").Instance(id).Do().Unmarshal(&response); err != nil { + return "", err + } + return response, nil +} + +func (v *volumeClient) GraphDriverRelease(id string) error { + response := "" + if err := v.c.Put().Resource(graphPath + "/release").Instance(id).Do().Unmarshal(&response); err != nil { + return err + } + if response != id { + return fmt.Errorf("Invalid response: %v", response) + } + return nil +} + +func (v *volumeClient) GraphDriverExists(id string) bool { + response := false + v.c.Get().Resource(graphPath + "/exists").Instance(id).Do().Unmarshal(&response) + return response +} + +func (v *volumeClient) GraphDriverDiff(id string, parent string) io.Writer { + body, _ := v.c.Get().Resource(graphPath + "/diff?id=" + id + "&parent=" + parent).Do().Body() + return bytes.NewBuffer(body) +} + +func (v *volumeClient) GraphDriverChanges(id string, parent string) ([]api.GraphDriverChanges, error) { + var changes []api.GraphDriverChanges + err := v.c.Get().Resource(graphPath + "/changes").Instance(id).Do().Unmarshal(&changes) + return changes, err +} + +func (v *volumeClient) GraphDriverApplyDiff(id string, parent string, diff io.Reader) (int, error) { + b, err := ioutil.ReadAll(diff) + if err != nil { + return 0, err + } + response := 0 + if err = v.c.Put().Resource(graphPath + "/diff?id=" + id + "&parent=" + parent).Instance(id).Body(b).Do().Unmarshal(&response); err != nil { + return 0, err + } + return response, nil +} + +func (v *volumeClient) GraphDriverDiffSize(id string, parent string) (int, error) { + size := 0 + err := v.c.Get().Resource(graphPath + "/diffsize").Instance(id).Do().Unmarshal(&size) + return size, err +} + +// Create a new Vol for the specific volume spev.c. +// It returns a system generated VolumeID that uniquely identifies the volume +func (v *volumeClient) Create(locator *api.VolumeLocator, source *api.Source, + spec *api.VolumeSpec) (string, error) { + response := &api.VolumeCreateResponse{} + request := &api.VolumeCreateRequest{ + Locator: locator, + Source: source, + Spec: spec, + } + if err := v.c.Post().Resource(volumePath).Body(request).Do().Unmarshal(response); err != nil { + return "", err + } + if response.VolumeResponse != nil && response.VolumeResponse.Error != "" { + return "", errors.New(response.VolumeResponse.Error) + } + return response.Id, nil +} + +// Status diagnostic information +func (v *volumeClient) Status() [][2]string { + return [][2]string{} +} + +// Inspect specified volumes. +// Errors ErrEnoEnt may be returned. +func (v *volumeClient) Inspect(ids []string) ([]*api.Volume, error) { + if len(ids) == 0 { + return nil, nil + } + var volumes []*api.Volume + request := v.c.Get().Resource(volumePath) + for _, id := range ids { + request.QueryOption(api.OptVolumeID, id) + } + if err := request.Do().Unmarshal(&volumes); err != nil { + return nil, err + } + return volumes, nil +} + +// Delete volume. +// Errors ErrEnoEnt, ErrVolHasSnaps may be returned. +func (v *volumeClient) Delete(volumeID string) error { + response := &api.VolumeResponse{} + if err := v.c.Delete().Resource(volumePath).Instance(volumeID).Do().Unmarshal(response); err != nil { + return err + } + if response.Error != "" { + return errors.New(response.Error) + } + return nil +} + +// Snap specified volume. IO to the underlying volume should be quiesced before +// calling this function. +// Errors ErrEnoEnt may be returned +func (v *volumeClient) Snapshot(volumeID string, readonly bool, + locator *api.VolumeLocator) (string, error) { + response := &api.SnapCreateResponse{} + request := &api.SnapCreateRequest{ + Id: volumeID, + Readonly: readonly, + Locator: locator, + } + if err := v.c.Post().Resource(snapPath).Body(request).Do().Unmarshal(response); err != nil { + return "", err + } + // TODO(pedge): this probably should not be embedded in this way + if response.VolumeCreateResponse != nil && + response.VolumeCreateResponse.VolumeResponse != nil && + response.VolumeCreateResponse.VolumeResponse.Error != "" { + return "", errors.New( + response.VolumeCreateResponse.VolumeResponse.Error) + } + if response.VolumeCreateResponse != nil { + return response.VolumeCreateResponse.Id, nil + } + return "", nil +} + +// Stats for specified volume. +// Errors ErrEnoEnt may be returned +func (v *volumeClient) Stats( + volumeID string, + cumulative bool, +) (*api.Stats, error) { + stats := &api.Stats{} + req := v.c.Get().Resource(volumePath + "/stats").Instance(volumeID) + req.QueryOption(api.OptCumulative, strconv.FormatBool(cumulative)) + + if err := req.Do().Unmarshal(stats); err != nil { + return nil, err + } + + return stats, nil +} + +// Alerts on this volume. +// Errors ErrEnoEnt may be returned +func (v *volumeClient) Alerts(volumeID string) (*api.Alerts, error) { + alerts := &api.Alerts{} + if err := v.c.Get().Resource(volumePath + "/alerts").Instance(volumeID).Do().Unmarshal(alerts); err != nil { + return nil, err + } + return alerts, nil +} + +// Active Requests on all volume. +func (v *volumeClient) GetActiveRequests() (*api.ActiveRequests, error) { + + requests := &api.ActiveRequests{} + resp := v.c.Get().Resource(volumePath + "/requests").Instance("vol_id").Do() + + if resp.Error() != nil { + return nil, resp.FormatError() + } + + if err := resp.Unmarshal(requests); err != nil { + return nil, err + } + + return requests, nil +} + +// Shutdown and cleanup. +func (v *volumeClient) Shutdown() {} + +// Enumerate volumes that map to the volumeLocator. Locator fields may be regexp. +// If locator fields are left blank, this will return all volumes. +func (v *volumeClient) Enumerate(locator *api.VolumeLocator, + labels map[string]string) ([]*api.Volume, error) { + var volumes []*api.Volume + req := v.c.Get().Resource(volumePath) + if locator.Name != "" { + req.QueryOption(api.OptName, locator.Name) + } + if len(locator.VolumeLabels) != 0 { + req.QueryOptionLabel(api.OptLabel, locator.VolumeLabels) + } + if len(labels) != 0 { + req.QueryOptionLabel(api.OptConfigLabel, labels) + } + resp := req.Do() + if resp.Error() != nil { + return nil, resp.FormatError() + } + if err := resp.Unmarshal(&volumes); err != nil { + return nil, err + } + + return volumes, nil +} + +// Enumerate snaps for specified volume +// Count indicates the number of snaps populated. +func (v *volumeClient) SnapEnumerate(ids []string, + snapLabels map[string]string) ([]*api.Volume, error) { + var volumes []*api.Volume + request := v.c.Get().Resource(snapPath) + for _, id := range ids { + request.QueryOption(api.OptVolumeID, id) + } + if len(snapLabels) != 0 { + request.QueryOptionLabel(api.OptLabel, snapLabels) + } + if err := request.Do().Unmarshal(&volumes); err != nil { + return nil, err + } + return volumes, nil +} + +// Attach map device to the host. +// On success the devicePath specifies location where the device is exported +// Errors ErrEnoEnt, ErrVolAttached may be returned. +func (v *volumeClient) Attach(volumeID string) (string, error) { + response, err := v.doVolumeSetGetResponse( + volumeID, + &api.VolumeSetRequest{ + Action: &api.VolumeStateAction{ + Attach: api.VolumeActionParam_VOLUME_ACTION_PARAM_ON, + }, + }, + ) + if err != nil { + return "", err + } + if response.Volume != nil { + if response.Volume.Spec.Encrypted { + return response.Volume.SecureDevicePath, nil + } else { + return response.Volume.DevicePath, nil + } + } + return "", nil +} + +// Detach device from the host. +// Errors ErrEnoEnt, ErrVolDetached may be returned. +func (v *volumeClient) Detach(volumeID string) error { + return v.doVolumeSet( + volumeID, + &api.VolumeSetRequest{ + Action: &api.VolumeStateAction{ + Attach: api.VolumeActionParam_VOLUME_ACTION_PARAM_OFF, + }, + }, + ) +} + +func (v *volumeClient) MountedAt(mountPath string) string { + return "" +} + +// Mount volume at specified path +// Errors ErrEnoEnt, ErrVolDetached may be returned. +func (v *volumeClient) Mount(volumeID string, mountPath string) error { + return v.doVolumeSet( + volumeID, + &api.VolumeSetRequest{ + Action: &api.VolumeStateAction{ + Mount: api.VolumeActionParam_VOLUME_ACTION_PARAM_ON, + MountPath: mountPath, + }, + }, + ) +} + +// Unmount volume at specified path +// Errors ErrEnoEnt, ErrVolDetached may be returned. +func (v *volumeClient) Unmount(volumeID string, mountPath string) error { + return v.doVolumeSet( + volumeID, + &api.VolumeSetRequest{ + Action: &api.VolumeStateAction{ + Mount: api.VolumeActionParam_VOLUME_ACTION_PARAM_OFF, + MountPath: mountPath, + }, + }, + ) +} + +// Update volume +func (v *volumeClient) Set(volumeID string, locator *api.VolumeLocator, + spec *api.VolumeSpec) error { + return v.doVolumeSet( + volumeID, + &api.VolumeSetRequest{ + Locator: locator, + Spec: spec, + }, + ) +} + +func (v *volumeClient) doVolumeSet(volumeID string, + request *api.VolumeSetRequest) error { + _, err := v.doVolumeSetGetResponse(volumeID, request) + return err +} + +func (v *volumeClient) doVolumeSetGetResponse(volumeID string, + request *api.VolumeSetRequest) (*api.VolumeSetResponse, error) { + response := &api.VolumeSetResponse{} + if err := v.c.Put().Resource(volumePath).Instance(volumeID).Body(request).Do().Unmarshal(response); err != nil { + return nil, err + } + if response.VolumeResponse != nil && response.VolumeResponse.Error != "" { + return nil, errors.New(response.VolumeResponse.Error) + } + return response, nil +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/client/volume/volume.go b/vendor/github.com/libopenstorage/openstorage/api/client/volume/volume.go new file mode 100644 index 0000000000..f0137f2032 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/client/volume/volume.go @@ -0,0 +1,50 @@ +package volume + +import ( + "fmt" + "github.com/libopenstorage/openstorage/api/client" + "github.com/libopenstorage/openstorage/volume" + "github.com/libopenstorage/openstorage/api" +) + +// VolumeDriver returns a REST wrapper for the VolumeDriver interface. +func VolumeDriver(c *client.Client) volume.VolumeDriver { + return newVolumeClient(c) +} + +// NewDriver returns a new REST client of the supplied version for specified driver. +// host: REST endpoint [http://: OR unix://]. default: [unix:///var/lib/osd/.sock] +// version: Volume API version +func NewDriverClient(host, driverName, version string) (*client.Client, error) { + if driverName == "" { + return nil, fmt.Errorf("Driver Name cannot be empty") + } + if host == "" { + host = client.GetUnixServerPath(driverName, volume.DriverAPIBase) + } + if version == "" { + // Set the default version + version = volume.APIVersion + } + return client.NewClient(host, version) +} + +// GetSupportedDriverVersions returns a list of supported versions +// for the provided driver. It uses the given server endpoint or the +// standard unix domain socket +func GetSupportedDriverVersions(driverName, host string) ([]string, error) { + // Get a client handler + if host == "" { + host = client.GetUnixServerPath(driverName, volume.DriverAPIBase) + } + + client, err := client.NewClient(host, "") + if err != nil { + return []string{}, err + } + versions, err := client.Versions(api.OsdVolumePath) + if err != nil { + return []string{}, err + } + return versions, nil +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go b/vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go new file mode 100644 index 0000000000..dba0870e27 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/spec/spec_handler.go @@ -0,0 +1,192 @@ +package spec + +import ( + "fmt" + "regexp" + "strconv" + + "github.com/libopenstorage/openstorage/api" + "github.com/libopenstorage/openstorage/pkg/units" +) + +// SpecHandler provides conversion function from what gets passed in over the +// plugin API to an api.VolumeSpec object. +type SpecHandler interface { + // SpecFromString parses options from the name. + // If the scheduler was unable to pass in the volume spec via the API, + // the spec can be passed in via the name in the format: + // "key=value;key=value;name=volname" + // If the spec was parsed, it returns: + // (true, parsed_spec, parsed_name) + // If the input string didn't contain the string, it returns: + // (false, DefaultSpec(), inputString) + SpecFromString(inputString string) (bool, *api.VolumeSpec, string) + + // SpecFromOpts parses in docker options passed in the the docker run + // command of the form --opt name=value + // If the options are validated then it returns: + // (resultant_VolumeSpec, nil) + // If the options have invalid values then it returns: + // (nil, error) + + SpecFromOpts(opts map[string]string) (*api.VolumeSpec, error) + // Returns a default VolumeSpec if no docker options or string encoding + // was provided. + DefaultSpec() *api.VolumeSpec +} + +var ( + nameRegex = regexp.MustCompile(api.Name + "=([0-9A-Za-z]+),?") + sizeRegex = regexp.MustCompile(api.SpecSize + "=([0-9A-Za-z]+),?") + scaleRegex = regexp.MustCompile(api.SpecScale + "=([0-9A-Za-z]+),?") + fsRegex = regexp.MustCompile(api.SpecFilesystem + "=([0-9A-Za-z]+),?") + bsRegex = regexp.MustCompile(api.SpecBlockSize + "=([0-9]+),?") + haRegex = regexp.MustCompile(api.SpecHaLevel + "=([0-9]+),?") + cosRegex = regexp.MustCompile(api.SpecPriority + "=([A-Za-z]+),?") + sharedRegex = regexp.MustCompile(api.SpecShared + "=([A-Za-z]+),?") + passphraseRegex = regexp.MustCompile(api.SpecPassphrase + "=([0-9A-Za-z_@./#&+-]+),?") +) + +type specHandler struct { +} + +func NewSpecHandler() SpecHandler { + return &specHandler{} +} + +func (d *specHandler) cosLevel(cos string) (uint32, error) { + switch cos { + case "high", "3": + return uint32(api.CosType_HIGH), nil + case "medium", "2": + return uint32(api.CosType_MEDIUM), nil + case "low", "1", "": + return uint32(api.CosType_LOW), nil + } + return uint32(api.CosType_LOW), + fmt.Errorf("Cos must be one of %q | %q | %q", "high", "medium", "low") +} + +func (d *specHandler) getVal(r *regexp.Regexp, str string) (bool, string) { + found := r.FindString(str) + if found == "" { + return false, "" + } + + submatches := r.FindStringSubmatch(str) + if len(submatches) < 2 { + return false, "" + } + + val := submatches[1] + + return true, val +} + +func (d *specHandler) DefaultSpec() *api.VolumeSpec { + return &api.VolumeSpec{ + VolumeLabels: make(map[string]string), + Format: api.FSType_FS_TYPE_EXT4, + HaLevel: 1, + } +} + +func (d *specHandler) SpecFromOpts( + opts map[string]string, +) (*api.VolumeSpec, error) { + spec := d.DefaultSpec() + + for k, v := range opts { + switch k { + case api.SpecEphemeral: + spec.Ephemeral, _ = strconv.ParseBool(v) + case api.SpecSize: + if size, err := units.Parse(v); err != nil { + return nil, err + } else { + spec.Size = uint64(size) + } + case api.SpecFilesystem: + if value, err := api.FSTypeSimpleValueOf(v); err != nil { + return nil, err + } else { + spec.Format = value + } + case api.SpecBlockSize: + if blockSize, err := units.Parse(v); err != nil { + return nil, err + } else { + spec.BlockSize = blockSize + } + case api.SpecHaLevel: + haLevel, _ := strconv.ParseInt(v, 10, 64) + spec.HaLevel = haLevel + case api.SpecPriority: + cos, _ := api.CosTypeSimpleValueOf(v) + spec.Cos = cos + case api.SpecDedupe: + spec.Dedupe, _ = strconv.ParseBool(v) + case api.SpecSnapshotInterval: + snapshotInterval, _ := strconv.ParseUint(v, 10, 32) + spec.SnapshotInterval = uint32(snapshotInterval) + case api.SpecAggregationLevel: + aggregationLevel, _ := strconv.ParseUint(v, 10, 32) + spec.AggregationLevel = uint32(aggregationLevel) + case api.SpecShared: + if shared, err := strconv.ParseBool(v); err != nil { + return nil, err + } else { + spec.Shared = shared + } + case api.SpecPassphrase: + spec.Encrypted = true + spec.Passphrase = v + default: + spec.VolumeLabels[k] = v + } + } + return spec, nil +} + +func (d *specHandler) SpecFromString( + str string, +) (bool, *api.VolumeSpec, string) { + // If we can't parse the name, the rest of the spec is invalid. + ok, name := d.getVal(nameRegex, str) + if !ok { + return false, d.DefaultSpec(), str + } + + opts := make(map[string]string) + + if ok, sz := d.getVal(sizeRegex, str); ok { + opts[api.SpecSize] = sz + } + if ok, scale := d.getVal(scaleRegex, str); ok { + opts[api.SpecScale] = scale + } + if ok, fs := d.getVal(fsRegex, str); ok { + opts[api.SpecFilesystem] = fs + } + if ok, bs := d.getVal(bsRegex, str); ok { + opts[api.SpecBlockSize] = bs + } + if ok, ha := d.getVal(haRegex, str); ok { + opts[api.SpecHaLevel] = ha + } + if ok, priority := d.getVal(cosRegex, str); ok { + opts[api.SpecPriority] = priority + } + if ok, shared := d.getVal(sharedRegex, str); ok { + opts[api.SpecShared] = shared + } + if ok, passphrase := d.getVal(passphraseRegex, str); ok { + opts[api.SpecPassphrase] = passphrase + } + + spec, err := d.SpecFromOpts(opts) + if err != nil { + return false, d.DefaultSpec(), name + } + return true, spec, name +} diff --git a/vendor/github.com/libopenstorage/openstorage/api/status.go b/vendor/github.com/libopenstorage/openstorage/api/status.go new file mode 100644 index 0000000000..5f16ad2100 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/api/status.go @@ -0,0 +1,49 @@ +package api + +type StatusKind int32 + +const ( + // StatusSeverityLow indicates an OK status + StatusSeverityLow StatusKind = iota + // StatusSeverityMedium indicates a status which is in transition from OK to BAD or vice versa + StatusSeverityMedium + // StatusSeverityHigh indicates a BAD status + StatusSeverityHigh +) + +var statusToStatusKind = map[Status]StatusKind{ + Status_STATUS_NONE: StatusSeverityHigh, + Status_STATUS_INIT: StatusSeverityMedium, + Status_STATUS_OK: StatusSeverityLow, + Status_STATUS_OFFLINE: StatusSeverityHigh, + Status_STATUS_ERROR: StatusSeverityHigh, + Status_STATUS_NOT_IN_QUORUM: StatusSeverityHigh, + Status_STATUS_DECOMMISSION: StatusSeverityHigh, + Status_STATUS_MAINTENANCE: StatusSeverityHigh, + Status_STATUS_STORAGE_DOWN: StatusSeverityHigh, + Status_STATUS_STORAGE_DEGRADED: StatusSeverityHigh, + Status_STATUS_NEEDS_REBOOT: StatusSeverityHigh, + Status_STATUS_STORAGE_REBALANCE: StatusSeverityMedium, + Status_STATUS_STORAGE_DRIVE_REPLACE: StatusSeverityMedium, + // Add statuses before MAX + Status_STATUS_MAX: StatusSeverityHigh, +} + +func StatusSimpleValueOf(s string) (Status, error) { + obj, err := simpleValueOf("status", Status_value, s) + return Status(obj), err +} + +func (x Status) SimpleString() string { + return simpleString("status", Status_name, int32(x)) +} + +func (x Status) StatusKind() StatusKind { + statusType, _ := statusToStatusKind[x] + return statusType +} + +// StatusKindMapLength used only for unit testing +func StatusKindMapLength() int { + return len(statusToStatusKind) +} diff --git a/vendor/github.com/libopenstorage/openstorage/pkg/units/units.go b/vendor/github.com/libopenstorage/openstorage/pkg/units/units.go new file mode 100644 index 0000000000..e74565bf47 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/pkg/units/units.go @@ -0,0 +1,139 @@ +package units + +import ( + "errors" + "fmt" + "regexp" + "strconv" + "strings" +) + +const ( + _ = iota + // KiB 1024 bytes + KiB = 1 << (10 * iota) + // MiB 1024 KiB + MiB + // GiB 1024 MiB + GiB + // TiB 1024 GiB + TiB + // PiB 1024 TiB + PiB +) + +const ( + // KB 1000 bytes + KB = 1000 + // MB 1000 KB + MB = KB * 1000 + // GB 1000 MB + GB = MB * 1000 + // TB 1000 GB + TB = GB * 1000 + // PB 1000 TB + PB = TB * 1000 +) + +var ( + unitMap = map[string]int64{ + "B": 1, + "b": 1, + + "KB": KB, + "kb": KB, + "MB": MB, + "mb": MB, + "GB": GB, + "gb": GB, + "TB": TB, + "tb": TB, + "PB": PB, + "pb": PB, + + "K": KiB, + "k": KiB, + "M": MiB, + "m": MiB, + "G": GiB, + "g": GiB, + "T": TiB, + "t": TiB, + "P": PiB, + "p": PiB, + + "KiB": KiB, + "MiB": MiB, + "GiB": GiB, + "TiB": TiB, + "PiB": PiB, + + "Mi": MiB, + "Gi": GiB, + "Ti": TiB, + "Pi": PiB, + } +) + +var unitPattern = regexp.MustCompile( + "([0-9]+)(.[0-9]+)*\\s*(B|b|K|k|M|m|G|g|T|t|P|p|KB|kb|KiB|MB|mb|MiB|Mi|GB|gb|GiB|Gi|TB|tb|TiB|Ti|PB|pb|PiB|Pi|)") +var BadUnit = errors.New("Bad unit") + +func String(b uint64) string { + if b > PiB { + return fmt.Sprintf("%.2f PiB", float64(b)/float64(PiB)) + } + if b > TiB { + return fmt.Sprintf("%.2f TiB", float64(b)/float64(TiB)) + } + if b > GiB { + return fmt.Sprintf("%.1f TiB", float64(b)/float64(GiB)) + } + if b > MiB { + return fmt.Sprintf("%v MiB", b/MiB) + } + if b > KiB { + return fmt.Sprintf("%v KiB", b/KiB) + } + return fmt.Sprintf("%v bytes", b) +} + +func Parse(bUnit string) (int64, error) { + ustring := strings.TrimSpace(bUnit) + unitPattern.Longest() + if !unitPattern.MatchString(ustring) { + return -1, fmt.Errorf("Unit parse error: %s", bUnit) + } + matches := unitPattern.FindStringSubmatch(ustring) + + if len(matches) == 0 || len(matches) > 4 { + return -1, fmt.Errorf( + "Unit parse error: invalid count of fields (%v)", + len(matches)) + } + if len(matches) == 1 { + return strconv.ParseInt(ustring, 10, 64) + } + shift := 0 + if len(matches) == 4 { + shift = 1 + } + if len(matches) == 2 { + return -1, fmt.Errorf("Unit parse error: invalid fields %v", + matches) + } + if ustring != matches[0] { + return -1, fmt.Errorf("Unit parse error: invalid fields %v", + matches) + } + multiplier, ok := unitMap[matches[2+shift]] + if !ok { + multiplier = unitMap["G"] + } + base, err := strconv.ParseInt(matches[1], 10, 64) + if err != nil { + return -1, fmt.Errorf("Invalid number") + } + + return base * multiplier, nil +} diff --git a/vendor/github.com/libopenstorage/openstorage/volume/README.md b/vendor/github.com/libopenstorage/openstorage/volume/README.md new file mode 100644 index 0000000000..cb9f4eec8a --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/volume/README.md @@ -0,0 +1,41 @@ +## Volume Drivers + +Volume drivers implement the [Volume Plugin Interface](https://docs.docker.com/engine/extend/plugins_volume/). +This provides an interface to register a volume driver and advertise the driver to Docker. Registering a driver with this volume interface will cause Docker to be able to communicate with the driver to create and assign volumes to a container. + +A volume spec is needed to create a volume. A volume spec looks like: + +``` +// VolumeSpec has the properties needed to create a volume. +type VolumeSpec struct { + // Ephemeral storage + Ephemeral bool + // Thin provisioned volume size in bytes + Size uint64 + // Format disk with this FileSystem + Format Filesystem + // BlockSize for file system + BlockSize int + // HA Level specifies the number of nodes that are + // allowed to fail, and yet data is availabel. + // A value of 0 implies that data is not erasure coded, + // a failure of a node will lead to data loss. + HALevel int + // This disk's CoS + Cos VolumeCos + // Perform dedupe on this disk + Dedupe bool + // SnapshotInterval in minutes, set to 0 to disable Snapshots + SnapshotInterval int + // Volume configuration labels + ConfigLabels Labels +} +``` + +Various volume driver implementations can be found in the `drivers` directory. + +### Block Drivers +Block drivers operate at the block layer. They provide raw volumes formatted with a user specified filesystem. This volume is then mounted into the container at a path specified using the `docker run -v` option. + +### File Drivers +File drivers operate at the filesystem layer. diff --git a/vendor/github.com/libopenstorage/openstorage/volume/volume.go b/vendor/github.com/libopenstorage/openstorage/volume/volume.go new file mode 100644 index 0000000000..fe99a95cfb --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/volume/volume.go @@ -0,0 +1,171 @@ +package volume + +import ( + "errors" + + "github.com/libopenstorage/openstorage/api" +) + +var ( + ErrAlreadyShutdown = errors.New("VolumeDriverProvider already shutdown") + ErrExist = errors.New("Driver already exists") + ErrDriverNotFound = errors.New("Driver implementation not found") + ErrDriverInitializing = errors.New("Driver is initializing") + ErrEnoEnt = errors.New("Volume does not exist.") + ErrEnomem = errors.New("Out of memory.") + ErrEinval = errors.New("Invalid argument") + ErrVolDetached = errors.New("Volume is detached") + ErrVolAttached = errors.New("Volume is attached") + ErrVolAttachedOnRemoteNode = errors.New("Volume is attached on another node") + ErrVolAttachedScale = errors.New("Volume is attached but can be scaled") + ErrVolHasSnaps = errors.New("Volume has snapshots associated") + ErrNotSupported = errors.New("Operation not supported") +) + +// Constants used by the VolumeDriver +const ( + APIVersion = "v1" + PluginAPIBase = "/run/docker/plugins/" + DriverAPIBase = "/var/lib/osd/driver/" + MountBase = "/var/lib/osd/mounts/" + VolumeBase = "/var/lib/osd/" +) + +type Store interface { + // Lock volume specified by volumeID. + Lock(volumeID string) (interface{}, error) + // Lock volume with token obtained from call to Lock. + Unlock(token interface{}) error + // CreateVol returns error if volume with the same ID already existe. + CreateVol(vol *api.Volume) error + // GetVol from volumeID. + GetVol(volumeID string) (*api.Volume, error) + // UpdateVol with vol + UpdateVol(vol *api.Volume) error + // DeleteVol. Returns error if volume does not exist. + DeleteVol(volumeID string) error +} + +// VolumeDriver is the main interface to be implemented by any storage driver. +// Every driver must at minimum implement the ProtoDriver sub interface. +type VolumeDriver interface { + IODriver + ProtoDriver + BlockDriver + Enumerator +} + +// IODriver interfaces applicable to object store interfaces. +type IODriver interface { + // Read sz bytes from specified volume at specified offset. + // Return number of bytes read and error. + Read(volumeID string, buf []byte, sz uint64, offset int64) (int64, error) + // Write sz bytes from specified volume at specified offset. + // Return number of bytes written and error. + Write(volumeID string, buf []byte, sz uint64, offset int64) (int64, error) + // Flush writes to stable storage. + // Return error. + Flush(volumeID string) error +} + +type SnapshotDriver interface { + // Snapshot create volume snapshot. + // Errors ErrEnoEnt may be returned + Snapshot(volumeID string, readonly bool, locator *api.VolumeLocator) (string, error) +} + +// ProtoDriver must be implemented by all volume drivers. It specifies the +// most basic functionality, such as creating and deleting volumes. +type ProtoDriver interface { + SnapshotDriver + // Name returns the name of the driver. + Name() string + // Type of this driver + Type() api.DriverType + // Create a new Vol for the specific volume spec. + // It returns a system generated VolumeID that uniquely identifies the volume + Create(locator *api.VolumeLocator, Source *api.Source, spec *api.VolumeSpec) (string, error) + // Delete volume. + // Errors ErrEnoEnt, ErrVolHasSnaps may be returned. + Delete(volumeID string) error + // Mount volume at specified path + // Errors ErrEnoEnt, ErrVolDetached may be returned. + Mount(volumeID string, mountPath string) error + // MountedAt return volume mounted at specified mountpath. + MountedAt(mountPath string) string + // Unmount volume at specified path + // Errors ErrEnoEnt, ErrVolDetached may be returned. + Unmount(volumeID string, mountPath string) error + // Update not all fields of the spec are supported, ErrNotSupported will be thrown for unsupported + // updates. + Set(volumeID string, locator *api.VolumeLocator, spec *api.VolumeSpec) error + // Stats for specified volume. + // cumulative stats are /proc/diskstats style stats. + // nonCumulative stats are stats for specific duration. + // Errors ErrEnoEnt may be returned + Stats(volumeID string, cumulative bool) (*api.Stats, error) + // Alerts on this volume. + // Errors ErrEnoEnt may be returned + Alerts(volumeID string) (*api.Alerts, error) + // GetActiveRequests get active requests + GetActiveRequests() (*api.ActiveRequests, error) + // Status returns a set of key-value pairs which give low + // level diagnostic status about this driver. + Status() [][2]string + // Shutdown and cleanup. + Shutdown() +} + +// Enumerator provides a set of interfaces to get details on a set of volumes. +type Enumerator interface { + // Inspect specified volumes. + // Returns slice of volumes that were found. + Inspect(volumeIDs []string) ([]*api.Volume, error) + // Enumerate volumes that map to the volumeLocator. Locator fields may be regexp. + // If locator fields are left blank, this will return all volumes. + Enumerate(locator *api.VolumeLocator, labels map[string]string) ([]*api.Volume, error) + // Enumerate snaps for specified volumes + SnapEnumerate(volID []string, snapLabels map[string]string) ([]*api.Volume, error) +} + +type StoreEnumerator interface { + Store + Enumerator +} + +// BlockDriver needs to be implemented by block volume drivers. Filesystem volume +// drivers can ignore this interface and include the builtin DefaultBlockDriver. +type BlockDriver interface { + // Attach map device to the host. + // On success the devicePath specifies location where the device is exported + // Errors ErrEnoEnt, ErrVolAttached may be returned. + Attach(volumeID string) (string, error) + // Detach device from the host. + // Errors ErrEnoEnt, ErrVolDetached may be returned. + Detach(volumeID string) error +} + +// VolumeDriverProvider provides VolumeDrivers. +type VolumeDriverProvider interface { + // Get gets the VolumeDriver for the given name. + // If a VolumeDriver was not created for the given name, the error ErrDriverNotFound is returned. + Get(name string) (VolumeDriver, error) + // Shutdown shuts down all volume drivers. + Shutdown() error +} + +// VolumeDriverRegistry registers VolumeDrivers. +type VolumeDriverRegistry interface { + VolumeDriverProvider + // New creates the VolumeDriver for the given name. + // If a VolumeDriver was already created for the given name, the error ErrExist is returned. + Register(name string, params map[string]string) error + + // Add inserts a new VolumeDriver provider with a well known name. + Add(name string, init func(map[string]string) (VolumeDriver, error)) error +} + +// VolumeDriverRegistry constructs a new VolumeDriverRegistry. +func NewVolumeDriverRegistry(nameToInitFunc map[string]func(map[string]string) (VolumeDriver, error)) VolumeDriverRegistry { + return newVolumeDriverRegistry(nameToInitFunc) +} diff --git a/vendor/github.com/libopenstorage/openstorage/volume/volume_driver_registry.go b/vendor/github.com/libopenstorage/openstorage/volume/volume_driver_registry.go new file mode 100644 index 0000000000..760f24b348 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/volume/volume_driver_registry.go @@ -0,0 +1,71 @@ +package volume + +import "sync" + +type volumeDriverRegistry struct { + nameToInitFunc map[string]func(map[string]string) (VolumeDriver, error) + nameToVolumeDriver map[string]VolumeDriver + lock *sync.RWMutex + isShutdown bool +} + +func newVolumeDriverRegistry(nameToInitFunc map[string]func(map[string]string) (VolumeDriver, error)) *volumeDriverRegistry { + return &volumeDriverRegistry{ + nameToInitFunc, + make(map[string]VolumeDriver), + &sync.RWMutex{}, + false, + } +} + +func (v *volumeDriverRegistry) Get(name string) (VolumeDriver, error) { + v.lock.RLock() + defer v.lock.RUnlock() + if v.isShutdown { + return nil, ErrAlreadyShutdown + } + volumeDriver, ok := v.nameToVolumeDriver[name] + if !ok { + return nil, ErrDriverNotFound + } + return volumeDriver, nil +} + +func (v *volumeDriverRegistry) Add(name string, init func(map[string]string) (VolumeDriver, error)) error { + v.nameToInitFunc[name] = init + + return nil +} + +func (v *volumeDriverRegistry) Register(name string, params map[string]string) error { + initFunc, ok := v.nameToInitFunc[name] + if !ok { + return ErrNotSupported + } + v.lock.Lock() + defer v.lock.Unlock() + if v.isShutdown { + return ErrAlreadyShutdown + } + if _, ok := v.nameToVolumeDriver[name]; ok { + return ErrExist + } + volumeDriver, err := initFunc(params) + if err != nil { + return err + } + v.nameToVolumeDriver[name] = volumeDriver + return nil +} + +func (v *volumeDriverRegistry) Shutdown() error { + v.lock.Lock() + if v.isShutdown { + return ErrAlreadyShutdown + } + for _, volumeDriver := range v.nameToVolumeDriver { + volumeDriver.Shutdown() + } + v.isShutdown = true + return nil +} diff --git a/vendor/github.com/libopenstorage/openstorage/volume/volume_not_supported.go b/vendor/github.com/libopenstorage/openstorage/volume/volume_not_supported.go new file mode 100644 index 0000000000..e4ce8cac68 --- /dev/null +++ b/vendor/github.com/libopenstorage/openstorage/volume/volume_not_supported.go @@ -0,0 +1,45 @@ +package volume + +import ( + "github.com/libopenstorage/openstorage/api" +) + +var ( + // BlockNotSupported is a default (null) block driver implementation. This can be + // used by drivers that do not want to (or care about) implementing the attach, + // format and detach interfaces. + BlockNotSupported = &blockNotSupported{} + SnapshotNotSupported = &snapshotNotSupported{} + IONotSupported = &ioNotSupported{} +) + + +type blockNotSupported struct{} + +func (b *blockNotSupported) Attach(volumeID string) (string, error) { + return "", ErrNotSupported +} + +func (b *blockNotSupported) Detach(volumeID string) error { + return ErrNotSupported +} + +type snapshotNotSupported struct{} + +func (s *snapshotNotSupported) Snapshot(volumeID string, readonly bool, locator *api.VolumeLocator) (string, error) { + return "", ErrNotSupported +} + +type ioNotSupported struct{} + +func (i *ioNotSupported) Read(volumeID string, buffer []byte, size uint64, offset int64) (int64, error) { + return 0, ErrNotSupported +} + +func (i *ioNotSupported) Write(volumeID string, buffer []byte, size uint64, offset int64) (int64, error) { + return 0, ErrNotSupported +} + +func (i *ioNotSupported) Flush(volumeID string) error { + return ErrNotSupported +} diff --git a/vendor/go.pedge.io/pb/LICENSE b/vendor/go.pedge.io/pb/LICENSE new file mode 100644 index 0000000000..89ddc06320 --- /dev/null +++ b/vendor/go.pedge.io/pb/LICENSE @@ -0,0 +1,22 @@ +The MIT License (MIT) + +Copyright (c) 2015 Peter Edge + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/any.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/any.pb.go new file mode 100644 index 0000000000..60a31d4c99 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/any.pb.go @@ -0,0 +1,104 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/any.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// This is a compile-time assertion to ensure that this generated file +// is compatible with the proto package it is being compiled against. +// A compilation error at this line likely means your copy of the +// proto package needs to be updated. +const _ = proto.ProtoPackageIsVersion2 // please upgrade the proto package + +// `Any` contains an arbitrary serialized message along with a URL +// that describes the type of the serialized message. +// +// +// JSON +// ==== +// The JSON representation of an `Any` value uses the regular +// representation of the deserialized, embedded message, with an +// additional field `@type` which contains the type URL. Example: +// +// package google.profile; +// message Person { +// string first_name = 1; +// string last_name = 2; +// } +// +// { +// "@type": "type.googleapis.com/google.profile.Person", +// "firstName": , +// "lastName": +// } +// +// If the embedded message type is well-known and has a custom JSON +// representation, that representation will be embedded adding a field +// `value` which holds the custom JSON in addition to the `@type` +// field. Example (for message [google.protobuf.Duration][]): +// +// { +// "@type": "type.googleapis.com/google.protobuf.Duration", +// "value": "1.212s" +// } +// +type Any struct { + // A URL/resource name whose content describes the type of the + // serialized message. + // + // For URLs which use the schema `http`, `https`, or no schema, the + // following restrictions and interpretations apply: + // + // * If no schema is provided, `https` is assumed. + // * The last segment of the URL's path must represent the fully + // qualified name of the type (as in `path/google.protobuf.Duration`). + // * An HTTP GET on the URL must yield a [google.protobuf.Type][] + // value in binary format, or produce an error. + // * Applications are allowed to cache lookup results based on the + // URL, or have them precompiled into a binary to avoid any + // lookup. Therefore, binary compatibility needs to be preserved + // on changes to types. (Use versioned type names to manage + // breaking changes.) + // + // Schemas other than `http`, `https` (or the empty schema) might be + // used with implementation specific semantics. + // + TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl" json:"type_url,omitempty"` + // Must be valid serialized data of the above specified type. + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *Any) Reset() { *m = Any{} } +func (m *Any) String() string { return proto.CompactTextString(m) } +func (*Any) ProtoMessage() {} +func (*Any) Descriptor() ([]byte, []int) { return fileDescriptor0, []int{0} } +func (*Any) XXX_WellKnownType() string { return "Any" } + +func init() { + proto.RegisterType((*Any)(nil), "google.protobuf.Any") +} + +func init() { proto.RegisterFile("google/protobuf/any.proto", fileDescriptor0) } + +var fileDescriptor0 = []byte{ + // 160 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x4c, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcc, 0xab, 0xd4, + 0x03, 0x73, 0x84, 0xf8, 0x21, 0x52, 0x7a, 0x30, 0x29, 0x25, 0x33, 0x2e, 0x66, 0xc7, 0xbc, 0x4a, + 0x21, 0x49, 0x2e, 0x8e, 0x92, 0xca, 0x82, 0xd4, 0xf8, 0xd2, 0xa2, 0x1c, 0x09, 0x46, 0x05, 0x46, + 0x0d, 0xce, 0x20, 0x76, 0x10, 0x3f, 0xb4, 0x28, 0x47, 0x48, 0x84, 0x8b, 0xb5, 0x2c, 0x31, 0xa7, + 0x34, 0x55, 0x82, 0x09, 0x28, 0xce, 0x13, 0x04, 0xe1, 0x38, 0x79, 0x73, 0x09, 0x27, 0xe7, 0xe7, + 0xea, 0xa1, 0x19, 0xe7, 0xc4, 0x01, 0x34, 0x2c, 0x00, 0xc4, 0x09, 0x60, 0x5c, 0xc0, 0xc8, 0xb8, + 0x88, 0x89, 0xd9, 0x3d, 0xc0, 0x69, 0x15, 0x93, 0x9c, 0x3b, 0x44, 0x59, 0x00, 0x54, 0x99, 0x5e, + 0x78, 0x6a, 0x4e, 0x8e, 0x77, 0x5e, 0x7e, 0x79, 0x5e, 0x08, 0xd0, 0x92, 0xe2, 0x24, 0x36, 0xb0, + 0x7e, 0x63, 0x40, 0x00, 0x00, 0x00, 0xff, 0xff, 0x83, 0x49, 0xa8, 0x53, 0xb9, 0x00, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/api.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/api.pb.go new file mode 100644 index 0000000000..e7cecd15dc --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/api.pb.go @@ -0,0 +1,246 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/api.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Api is a light-weight descriptor for a protocol buffer service. +type Api struct { + // The fully qualified name of this api, including package name + // followed by the api's simple name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The methods of this api, in unspecified order. + Methods []*Method `protobuf:"bytes,2,rep,name=methods" json:"methods,omitempty"` + // Any metadata attached to the API. + Options []*Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` + // A version string for this api. If specified, must have the form + // `major-version.minor-version`, as in `1.10`. If the minor version + // is omitted, it defaults to zero. If the entire version field is + // empty, the major version is derived from the package name, as + // outlined below. If the field is not empty, the version in the + // package name will be verified to be consistent with what is + // provided here. + // + // The versioning schema uses [semantic + // versioning](http://semver.org) where the major version number + // indicates a breaking change and the minor version an additive, + // non-breaking change. Both version numbers are signals to users + // what to expect from different versions, and should be carefully + // chosen based on the product plan. + // + // The major version is also reflected in the package name of the + // API, which must end in `v`, as in + // `google.feature.v1`. For major versions 0 and 1, the suffix can + // be omitted. Zero major versions must only be used for + // experimental, none-GA apis. + // + // + Version string `protobuf:"bytes,4,opt,name=version" json:"version,omitempty"` + // Source context for the protocol buffer service represented by this + // message. + SourceContext *SourceContext `protobuf:"bytes,5,opt,name=source_context,json=sourceContext" json:"source_context,omitempty"` + // Included APIs. See [Mixin][]. + Mixins []*Mixin `protobuf:"bytes,6,rep,name=mixins" json:"mixins,omitempty"` + // The source syntax of the service. + Syntax Syntax `protobuf:"varint,7,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Api) Reset() { *m = Api{} } +func (m *Api) String() string { return proto.CompactTextString(m) } +func (*Api) ProtoMessage() {} +func (*Api) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{0} } + +func (m *Api) GetMethods() []*Method { + if m != nil { + return m.Methods + } + return nil +} + +func (m *Api) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Api) GetSourceContext() *SourceContext { + if m != nil { + return m.SourceContext + } + return nil +} + +func (m *Api) GetMixins() []*Mixin { + if m != nil { + return m.Mixins + } + return nil +} + +// Method represents a method of an api. +type Method struct { + // The simple name of this method. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // A URL of the input message type. + RequestTypeUrl string `protobuf:"bytes,2,opt,name=request_type_url,json=requestTypeUrl" json:"request_type_url,omitempty"` + // If true, the request is streamed. + RequestStreaming bool `protobuf:"varint,3,opt,name=request_streaming,json=requestStreaming" json:"request_streaming,omitempty"` + // The URL of the output message type. + ResponseTypeUrl string `protobuf:"bytes,4,opt,name=response_type_url,json=responseTypeUrl" json:"response_type_url,omitempty"` + // If true, the response is streamed. + ResponseStreaming bool `protobuf:"varint,5,opt,name=response_streaming,json=responseStreaming" json:"response_streaming,omitempty"` + // Any metadata attached to the method. + Options []*Option `protobuf:"bytes,6,rep,name=options" json:"options,omitempty"` + // The source syntax of this method. + Syntax Syntax `protobuf:"varint,7,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Method) Reset() { *m = Method{} } +func (m *Method) String() string { return proto.CompactTextString(m) } +func (*Method) ProtoMessage() {} +func (*Method) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{1} } + +func (m *Method) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +// Declares an API to be included in this API. The including API must +// redeclare all the methods from the included API, but documentation +// and options are inherited as follows: +// +// - If after comment and whitespace stripping, the documentation +// string of the redeclared method is empty, it will be inherited +// from the original method. +// +// - Each annotation belonging to the service config (http, +// visibility) which is not set in the redeclared method will be +// inherited. +// +// - If an http annotation is inherited, the path pattern will be +// modified as follows. Any version prefix will be replaced by the +// version of the including API plus the [root][] path if specified. +// +// Example of a simple mixin: +// +// package google.acl.v1; +// service AccessControl { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v1/{resource=**}:getAcl"; +// } +// } +// +// package google.storage.v2; +// service Storage { +// rpc GetAcl(GetAclRequest) returns (Acl); +// +// // Get a data record. +// rpc GetData(GetDataRequest) returns (Data) { +// option (google.api.http).get = "/v2/{resource=**}"; +// } +// } +// +// Example of a mixin configuration: +// +// apis: +// - name: google.storage.v2.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// +// The mixin construct implies that all methods in `AccessControl` are +// also declared with same name and request/response types in +// `Storage`. A documentation generator or annotation processor will +// see the effective `Storage.GetAcl` method after inherting +// documentation and annotations as follows: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v2/{resource=**}:getAcl"; +// } +// ... +// } +// +// Note how the version in the path pattern changed from `v1` to `v2`. +// +// If the `root` field in the mixin is specified, it should be a +// relative path under which inherited HTTP paths are placed. Example: +// +// apis: +// - name: google.storage.v2.Storage +// mixins: +// - name: google.acl.v1.AccessControl +// root: acls +// +// This implies the following inherited HTTP annotation: +// +// service Storage { +// // Get the underlying ACL object. +// rpc GetAcl(GetAclRequest) returns (Acl) { +// option (google.api.http).get = "/v2/acls/{resource=**}:getAcl"; +// } +// ... +// } +type Mixin struct { + // The fully qualified name of the API which is included. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // If non-empty specifies a path under which inherited HTTP paths + // are rooted. + Root string `protobuf:"bytes,2,opt,name=root" json:"root,omitempty"` +} + +func (m *Mixin) Reset() { *m = Mixin{} } +func (m *Mixin) String() string { return proto.CompactTextString(m) } +func (*Mixin) ProtoMessage() {} +func (*Mixin) Descriptor() ([]byte, []int) { return fileDescriptor1, []int{2} } + +func init() { + proto.RegisterType((*Api)(nil), "google.protobuf.Api") + proto.RegisterType((*Method)(nil), "google.protobuf.Method") + proto.RegisterType((*Mixin)(nil), "google.protobuf.Mixin") +} + +func init() { proto.RegisterFile("google/protobuf/api.proto", fileDescriptor1) } + +var fileDescriptor1 = []byte{ + // 408 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x94, 0x92, 0xd1, 0x4e, 0xc2, 0x30, + 0x14, 0x86, 0xb3, 0x0d, 0x06, 0x96, 0x08, 0x5a, 0x13, 0x9d, 0x5c, 0x10, 0x42, 0xbc, 0x58, 0x34, + 0x6e, 0x11, 0x9f, 0x40, 0x8c, 0xe1, 0x82, 0x18, 0x97, 0xa1, 0xf1, 0x92, 0x0c, 0xac, 0xb8, 0x64, + 0x5b, 0x67, 0xdb, 0x29, 0xbc, 0x8d, 0xf1, 0xd2, 0x4b, 0xdf, 0xc0, 0x37, 0xb3, 0xeb, 0x56, 0xc0, + 0x81, 0x89, 0xde, 0xf5, 0x9c, 0xff, 0xeb, 0xdf, 0x73, 0xfe, 0x0d, 0x1c, 0x4e, 0x31, 0x9e, 0x06, + 0xc8, 0x8e, 0x09, 0x66, 0x78, 0x9c, 0x3c, 0xda, 0x5e, 0xec, 0x5b, 0xa2, 0x80, 0x8d, 0x4c, 0xb2, + 0xa4, 0xd4, 0x3c, 0x2a, 0xb2, 0x14, 0x27, 0x64, 0x82, 0x46, 0x13, 0x1c, 0x31, 0x34, 0x63, 0x19, + 0xd8, 0x6c, 0x16, 0x29, 0x36, 0x8f, 0x73, 0x93, 0xce, 0x97, 0x0a, 0xb4, 0x8b, 0xd8, 0x87, 0x10, + 0x94, 0x22, 0x2f, 0x44, 0x86, 0xd2, 0x56, 0xcc, 0x2d, 0x57, 0x9c, 0xe1, 0x19, 0xa8, 0x84, 0x88, + 0x3d, 0xe1, 0x07, 0x6a, 0xa8, 0x6d, 0xcd, 0xac, 0x75, 0x0f, 0xac, 0xc2, 0x00, 0xd6, 0xb5, 0xd0, + 0x5d, 0xc9, 0xa5, 0x57, 0x70, 0xcc, 0x7c, 0x1c, 0x51, 0x43, 0xfb, 0xe5, 0xca, 0x8d, 0xd0, 0x5d, + 0xc9, 0x41, 0x03, 0x54, 0x5e, 0x10, 0xa1, 0xfc, 0x6c, 0x94, 0xc4, 0xe3, 0xb2, 0x84, 0x57, 0xa0, + 0xfe, 0x73, 0x1f, 0xa3, 0xcc, 0x81, 0x5a, 0xb7, 0xb5, 0xe6, 0x39, 0x14, 0xd8, 0x65, 0x46, 0xb9, + 0xdb, 0x74, 0xb5, 0x84, 0x16, 0xd0, 0x43, 0x7f, 0xe6, 0xf3, 0x91, 0x74, 0x31, 0xd2, 0xfe, 0xfa, + 0x16, 0xa9, 0xec, 0xe6, 0x14, 0xb4, 0x81, 0x4e, 0xe7, 0x11, 0xf3, 0x66, 0x46, 0x85, 0x3f, 0x57, + 0xdf, 0xb0, 0xc2, 0x50, 0xc8, 0x6e, 0x8e, 0x75, 0x3e, 0x55, 0xa0, 0x67, 0x41, 0x6c, 0x8c, 0xd1, + 0x04, 0x3b, 0x04, 0x3d, 0x27, 0x88, 0xb2, 0x51, 0x1a, 0xfc, 0x28, 0x21, 0x01, 0xcf, 0x33, 0xd5, + 0xeb, 0x79, 0xff, 0x96, 0xb7, 0xef, 0x48, 0x00, 0x4f, 0xc0, 0xae, 0x24, 0x29, 0x23, 0xc8, 0x0b, + 0xfd, 0x68, 0xca, 0x73, 0x54, 0xcc, 0xaa, 0x2b, 0x2d, 0x86, 0xb2, 0x0f, 0x8f, 0x53, 0x98, 0xc6, + 0x3c, 0x42, 0xb4, 0xf4, 0xcd, 0x12, 0x6c, 0x48, 0x41, 0x1a, 0x9f, 0x02, 0xb8, 0x60, 0x97, 0xce, + 0x65, 0xe1, 0xbc, 0x70, 0x59, 0x5a, 0xaf, 0x7c, 0x45, 0xfd, 0x8f, 0x5f, 0xf1, 0xdf, 0xa1, 0xd9, + 0xa0, 0x2c, 0x62, 0xdf, 0x18, 0x19, 0xef, 0x11, 0x8c, 0x59, 0x1e, 0x93, 0x38, 0xf7, 0x06, 0x60, + 0x6f, 0x82, 0xc3, 0xa2, 0x6d, 0xaf, 0xca, 0xff, 0x5e, 0x27, 0x2d, 0x1c, 0xe5, 0x4d, 0x51, 0xde, + 0x55, 0xad, 0xef, 0xf4, 0x3e, 0xd4, 0x56, 0x3f, 0xc3, 0x1c, 0xf9, 0xfa, 0x3d, 0x0a, 0x82, 0x41, + 0x84, 0x5f, 0xa3, 0x34, 0x12, 0x3a, 0xd6, 0xc5, 0xfd, 0xf3, 0xef, 0x00, 0x00, 0x00, 0xff, 0xff, + 0xa4, 0x45, 0xd6, 0xc6, 0x6d, 0x03, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/duration.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/duration.pb.go new file mode 100644 index 0000000000..fe80789e63 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/duration.pb.go @@ -0,0 +1,95 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/duration.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A Duration represents a signed, fixed-length span of time represented +// as a count of seconds and fractions of seconds at nanosecond +// resolution. It is independent of any calendar and concepts like "day" +// or "month". It is related to Timestamp in that the difference between +// two Timestamp values is a Duration and it can be added or subtracted +// from a Timestamp. Range is approximately +-10,000 years. +// +// Example 1: Compute Duration from two Timestamps in pseudo code. +// +// Timestamp start = ...; +// Timestamp end = ...; +// Duration duration = ...; +// +// duration.seconds = end.seconds - start.seconds; +// duration.nanos = end.nanos - start.nanos; +// +// if (duration.seconds < 0 && duration.nanos > 0) { +// duration.seconds += 1; +// duration.nanos -= 1000000000; +// } else if (durations.seconds > 0 && duration.nanos < 0) { +// duration.seconds -= 1; +// duration.nanos += 1000000000; +// } +// +// Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. +// +// Timestamp start = ...; +// Duration duration = ...; +// Timestamp end = ...; +// +// end.seconds = start.seconds + duration.seconds; +// end.nanos = start.nanos + duration.nanos; +// +// if (end.nanos < 0) { +// end.seconds -= 1; +// end.nanos += 1000000000; +// } else if (end.nanos >= 1000000000) { +// end.seconds += 1; +// end.nanos -= 1000000000; +// } +// +type Duration struct { + // Signed seconds of the span of time. Must be from -315,576,000,000 + // to +315,576,000,000 inclusive. + Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` + // Signed fractions of a second at nanosecond resolution of the span + // of time. Durations less than one second are represented with a 0 + // `seconds` field and a positive or negative `nanos` field. For durations + // of one second or more, a non-zero value for the `nanos` field must be + // of the same sign as the `seconds` field. Must be from -999,999,999 + // to +999,999,999 inclusive. + Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` +} + +func (m *Duration) Reset() { *m = Duration{} } +func (m *Duration) String() string { return proto.CompactTextString(m) } +func (*Duration) ProtoMessage() {} +func (*Duration) Descriptor() ([]byte, []int) { return fileDescriptor2, []int{0} } +func (*Duration) XXX_WellKnownType() string { return "Duration" } + +func init() { + proto.RegisterType((*Duration)(nil), "google.protobuf.Duration") +} + +func init() { proto.RegisterFile("google/protobuf/duration.proto", fileDescriptor2) } + +var fileDescriptor2 = []byte{ + // 161 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0x29, 0x2d, 0x4a, + 0x2c, 0xc9, 0xcc, 0xcf, 0xd3, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0x56, + 0x5c, 0x1c, 0x2e, 0x50, 0x25, 0x42, 0x12, 0x5c, 0xec, 0xc5, 0xa9, 0xc9, 0xf9, 0x79, 0x29, 0xc5, + 0x12, 0x8c, 0x0a, 0x8c, 0x1a, 0xcc, 0x41, 0x30, 0xae, 0x90, 0x08, 0x17, 0x6b, 0x5e, 0x62, 0x5e, + 0x7e, 0xb1, 0x04, 0x13, 0x50, 0x9c, 0x35, 0x08, 0xc2, 0x71, 0x0a, 0xe0, 0x12, 0x4e, 0xce, 0xcf, + 0xd5, 0x43, 0x33, 0xd2, 0x89, 0x17, 0x66, 0x60, 0x00, 0x48, 0x24, 0x80, 0x71, 0x01, 0x23, 0xe3, + 0x22, 0x26, 0x66, 0xf7, 0x00, 0xa7, 0x55, 0x4c, 0x72, 0xee, 0x10, 0xb5, 0x01, 0x50, 0xb5, 0x7a, + 0xe1, 0xa9, 0x39, 0x39, 0xde, 0x79, 0xf9, 0xe5, 0x79, 0x21, 0x95, 0x05, 0xa9, 0xc5, 0x49, 0x6c, + 0x60, 0x43, 0x8c, 0x01, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5b, 0xa9, 0x05, 0xfd, 0xc7, 0x00, 0x00, + 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/empty.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/empty.pb.go new file mode 100644 index 0000000000..d1e5b846d5 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/empty.pb.go @@ -0,0 +1,50 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/empty.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A generic empty message that you can re-use to avoid defining duplicated +// empty messages in your APIs. A typical example is to use it as the request +// or the response type of an API method. For instance: +// +// service Foo { +// rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); +// } +// +// The JSON representation for `Empty` is empty JSON object `{}`. +type Empty struct { +} + +func (m *Empty) Reset() { *m = Empty{} } +func (m *Empty) String() string { return proto.CompactTextString(m) } +func (*Empty) ProtoMessage() {} +func (*Empty) Descriptor() ([]byte, []int) { return fileDescriptor3, []int{0} } +func (*Empty) XXX_WellKnownType() string { return "Empty" } + +func init() { + proto.RegisterType((*Empty)(nil), "google.protobuf.Empty") +} + +func init() { proto.RegisterFile("google/protobuf/empty.proto", fileDescriptor3) } + +var fileDescriptor3 = []byte{ + // 124 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x4e, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcd, 0x2d, 0x28, + 0xa9, 0xd4, 0x03, 0x73, 0x85, 0xf8, 0x21, 0x92, 0x7a, 0x30, 0x49, 0x25, 0x76, 0x2e, 0x56, 0x57, + 0x90, 0xbc, 0x53, 0x00, 0x97, 0x70, 0x72, 0x7e, 0xae, 0x1e, 0x9a, 0xbc, 0x13, 0x17, 0x58, 0x36, + 0x00, 0xc4, 0x0d, 0x60, 0x5c, 0xc0, 0xc8, 0xf8, 0x83, 0x91, 0x71, 0x11, 0x13, 0xb3, 0x7b, 0x80, + 0xd3, 0x2a, 0x26, 0x39, 0x77, 0x88, 0xda, 0x00, 0xa8, 0x5a, 0xbd, 0xf0, 0xd4, 0x9c, 0x1c, 0xef, + 0xbc, 0xfc, 0xf2, 0xbc, 0x90, 0xca, 0x82, 0xd4, 0xe2, 0x24, 0x36, 0xb0, 0x21, 0xc6, 0x80, 0x00, + 0x00, 0x00, 0xff, 0xff, 0xac, 0xca, 0x5b, 0xd0, 0x91, 0x00, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/field_mask.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/field_mask.pb.go new file mode 100644 index 0000000000..2b0648fa04 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/field_mask.pb.go @@ -0,0 +1,167 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/field_mask.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `FieldMask` represents a set of symbolic field paths, for example: +// +// paths: "f.a" +// paths: "f.b.d" +// +// Here `f` represents a field in some root message, `a` and `b` +// fields in the message found in `f`, and `d` a field found in the +// message in `f.b`. +// +// Field masks are used to specify a subset of fields that should be +// returned by a get operation or modified by an update operation. +// Field masks also have a custom JSON encoding (see below). +// +// # Field Masks in Projections +// +// When used in the context of a projection, a response message or +// sub-message is filtered by the API to only contain those fields as +// specified in the mask. For example, if the mask in the previous +// example is applied to a response message as follows: +// +// f { +// a : 22 +// b { +// d : 1 +// x : 2 +// } +// y : 13 +// } +// z: 8 +// +// The result will not contain specific values for fields x,y and z +// (their value will be set to the default, and omitted in proto text +// output): +// +// +// f { +// a : 22 +// b { +// d : 1 +// } +// } +// +// A repeated field is not allowed except at the last position of a +// field mask. +// +// If a FieldMask object is not present in a get operation, the +// operation applies to all fields (as if a FieldMask of all fields +// had been specified). +// +// Note that a field mask does not necessarily applies to the +// top-level response message. In case of a REST get operation, the +// field mask applies directly to the response, but in case of a REST +// list operation, the mask instead applies to each individual message +// in the returned resource list. In case of a REST custom method, +// other definitions may be used. Where the mask applies will be +// clearly documented together with its declaration in the API. In +// any case, the effect on the returned resource/resources is required +// behavior for APIs. +// +// # Field Masks in Update Operations +// +// A field mask in update operations specifies which fields of the +// targeted resource are going to be updated. The API is required +// to only change the values of the fields as specified in the mask +// and leave the others untouched. If a resource is passed in to +// describe the updated values, the API ignores the values of all +// fields not covered by the mask. +// +// In order to reset a field's value to the default, the field must +// be in the mask and set to the default value in the provided resource. +// Hence, in order to reset all fields of a resource, provide a default +// instance of the resource and set all fields in the mask, or do +// not provide a mask as described below. +// +// If a field mask is not present on update, the operation applies to +// all fields (as if a field mask of all fields has been specified). +// Note that in the presence of schema evolution, this may mean that +// fields the client does not know and has therefore not filled into +// the request will be reset to their default. If this is unwanted +// behavior, a specific service may require a client to always specify +// a field mask, producing an error if not. +// +// As with get operations, the location of the resource which +// describes the updated values in the request message depends on the +// operation kind. In any case, the effect of the field mask is +// required to be honored by the API. +// +// ## Considerations for HTTP REST +// +// The HTTP kind of an update operation which uses a field mask must +// be set to PATCH instead of PUT in order to satisfy HTTP semantics +// (PUT must only be used for full updates). +// +// # JSON Encoding of Field Masks +// +// In JSON, a field mask is encoded as a single string where paths are +// separated by a comma. Fields name in each path are converted +// to/from lower-camel naming conventions. +// +// As an example, consider the following message declarations: +// +// message Profile { +// User user = 1; +// Photo photo = 2; +// } +// message User { +// string display_name = 1; +// string address = 2; +// } +// +// In proto a field mask for `Profile` may look as such: +// +// mask { +// paths: "user.display_name" +// paths: "photo" +// } +// +// In JSON, the same mask is represented as below: +// +// { +// mask: "user.displayName,photo" +// } +// +type FieldMask struct { + // The set of field mask paths. + Paths []string `protobuf:"bytes,1,rep,name=paths" json:"paths,omitempty"` +} + +func (m *FieldMask) Reset() { *m = FieldMask{} } +func (m *FieldMask) String() string { return proto.CompactTextString(m) } +func (*FieldMask) ProtoMessage() {} +func (*FieldMask) Descriptor() ([]byte, []int) { return fileDescriptor4, []int{0} } + +func init() { + proto.RegisterType((*FieldMask)(nil), "google.protobuf.FieldMask") +} + +func init() { proto.RegisterFile("google/protobuf/field_mask.proto", fileDescriptor4) } + +var fileDescriptor4 = []byte{ + // 147 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x52, 0x48, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x4f, 0xcb, 0x4c, 0xcd, + 0x49, 0x89, 0xcf, 0x4d, 0x2c, 0xce, 0xd6, 0x03, 0x8b, 0x09, 0xf1, 0x43, 0x54, 0xe8, 0xc1, 0x54, + 0x28, 0x29, 0x72, 0x71, 0xba, 0x81, 0x14, 0xf9, 0x02, 0xd5, 0x08, 0x89, 0x70, 0xb1, 0x16, 0x24, + 0x96, 0x64, 0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6b, 0x70, 0x06, 0x41, 0x38, 0x4e, 0x81, 0x5c, 0xc2, + 0xc9, 0xf9, 0xb9, 0x7a, 0x68, 0x3a, 0x9d, 0xf8, 0xe0, 0xfa, 0x02, 0x40, 0x42, 0x01, 0x8c, 0x0b, + 0x18, 0x19, 0x17, 0x31, 0x31, 0xbb, 0x07, 0x38, 0xad, 0x62, 0x92, 0x73, 0x87, 0x28, 0x0e, 0x80, + 0x2a, 0xd6, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, 0xcb, 0x2f, 0xcf, 0x0b, 0xa9, 0x2c, 0x48, 0x2d, + 0x4e, 0x62, 0x03, 0x9b, 0x62, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x21, 0xb1, 0xe8, 0x01, 0xb1, + 0x00, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/protobuf.gen.go b/vendor/go.pedge.io/pb/go/google/protobuf/protobuf.gen.go new file mode 100644 index 0000000000..f7ee15ab42 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/protobuf.gen.go @@ -0,0 +1,67 @@ +package google_protobuf + +import ( + "time" +) + +var ( + // EmptyInstance is an instance of Empty. + EmptyInstance = &Empty{} +) + +// Now returns the current time as a protobuf Timestamp. +func Now() *Timestamp { + return TimeToProto(time.Now().UTC()) +} + +// TimeToProto converts a go Time to a protobuf Timestamp. +func TimeToProto(t time.Time) *Timestamp { + return &Timestamp{ + Seconds: t.UnixNano() / int64(time.Second), + Nanos: int32(t.UnixNano() % int64(time.Second)), + } +} + +// GoTime converts a protobuf Timestamp to a go Time. +func (t *Timestamp) GoTime() time.Time { + if t == nil { + return time.Unix(0, 0).UTC() + } + return time.Unix( + t.Seconds, + int64(t.Nanos), + ).UTC() +} + +// Before returns true if t is before j. +func (t *Timestamp) Before(j *Timestamp) bool { + if j == nil { + return false + } + if t == nil { + return true + } + if t.Seconds < j.Seconds { + return true + } + if t.Seconds > j.Seconds { + return false + } + return t.Nanos < j.Nanos +} + +// DurationToProto converts a go Duration to a protobuf Duration. +func DurationToProto(d time.Duration) *Duration { + return &Duration{ + Seconds: int64(d) / int64(time.Second), + Nanos: int32(int64(d) % int64(time.Second)), + } +} + +// GoDuration converts a protobuf Duration to a go Duration. +func (d *Duration) GoDuration() time.Duration { + if d == nil { + return 0 + } + return time.Duration((d.Seconds * int64(time.Second)) + int64(d.Nanos)) +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/source_context.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/source_context.pb.go new file mode 100644 index 0000000000..48b1f082b7 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/source_context.pb.go @@ -0,0 +1,47 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/source_context.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `SourceContext` represents information about the source of a +// protobuf element, like the file in which it is defined. +type SourceContext struct { + // The path-qualified name of the .proto file that contained the associated + // protobuf element. For example: `"google/protobuf/source.proto"`. + FileName string `protobuf:"bytes,1,opt,name=file_name,json=fileName" json:"file_name,omitempty"` +} + +func (m *SourceContext) Reset() { *m = SourceContext{} } +func (m *SourceContext) String() string { return proto.CompactTextString(m) } +func (*SourceContext) ProtoMessage() {} +func (*SourceContext) Descriptor() ([]byte, []int) { return fileDescriptor5, []int{0} } + +func init() { + proto.RegisterType((*SourceContext)(nil), "google.protobuf.SourceContext") +} + +func init() { proto.RegisterFile("google/protobuf/source_context.proto", fileDescriptor5) } + +var fileDescriptor5 = []byte{ + // 159 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x52, 0x49, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xce, 0x2f, 0x2d, + 0x4a, 0x4e, 0x8d, 0x4f, 0xce, 0xcf, 0x2b, 0x49, 0xad, 0x28, 0xd1, 0x03, 0x8b, 0x0b, 0xf1, 0x43, + 0x54, 0xe9, 0xc1, 0x54, 0x29, 0xe9, 0x70, 0xf1, 0x06, 0x83, 0x15, 0x3a, 0x43, 0xd4, 0x09, 0x49, + 0x73, 0x71, 0xa6, 0x65, 0xe6, 0xa4, 0xc6, 0xe7, 0x25, 0xe6, 0xa6, 0x4a, 0x30, 0x2a, 0x30, 0x6a, + 0x70, 0x06, 0x71, 0x80, 0x04, 0xfc, 0x80, 0x7c, 0xa7, 0x50, 0x2e, 0xe1, 0xe4, 0xfc, 0x5c, 0x3d, + 0x34, 0x43, 0x9c, 0x84, 0x50, 0x8c, 0x08, 0x00, 0x09, 0x07, 0x30, 0x2e, 0x60, 0x64, 0x5c, 0xc4, + 0xc4, 0xec, 0x1e, 0xe0, 0xb4, 0x8a, 0x49, 0xce, 0x1d, 0xa2, 0x21, 0x00, 0xaa, 0x41, 0x2f, 0x3c, + 0x35, 0x27, 0xc7, 0x3b, 0x2f, 0xbf, 0x3c, 0x2f, 0xa4, 0xb2, 0x20, 0xb5, 0x38, 0x89, 0x0d, 0x6c, + 0x92, 0x31, 0x20, 0x00, 0x00, 0xff, 0xff, 0xb6, 0x80, 0x1f, 0xc2, 0xc4, 0x00, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/struct.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/struct.pb.go new file mode 100644 index 0000000000..02032f877a --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/struct.pb.go @@ -0,0 +1,361 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/struct.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// `NullValue` is a singleton enumeration to represent the null value for the +// `Value` type union. +// +// The JSON representation for `NullValue` is JSON `null`. +type NullValue int32 + +const ( + // Null value. + NullValue_NULL_VALUE NullValue = 0 +) + +var NullValue_name = map[int32]string{ + 0: "NULL_VALUE", +} +var NullValue_value = map[string]int32{ + "NULL_VALUE": 0, +} + +func (x NullValue) String() string { + return proto.EnumName(NullValue_name, int32(x)) +} +func (NullValue) EnumDescriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } +func (NullValue) XXX_WellKnownType() string { return "NullValue" } + +// `Struct` represents a structured data value, consisting of fields +// which map to dynamically typed values. In some languages, `Struct` +// might be supported by a native representation. For example, in +// scripting languages like JS a struct is represented as an +// object. The details of that representation are described together +// with the proto support for the language. +// +// The JSON representation for `Struct` is JSON object. +type Struct struct { + // Map of dynamically typed values. + Fields map[string]*Value `protobuf:"bytes,1,rep,name=fields" json:"fields,omitempty" protobuf_key:"bytes,1,opt,name=key" protobuf_val:"bytes,2,opt,name=value"` +} + +func (m *Struct) Reset() { *m = Struct{} } +func (m *Struct) String() string { return proto.CompactTextString(m) } +func (*Struct) ProtoMessage() {} +func (*Struct) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{0} } +func (*Struct) XXX_WellKnownType() string { return "Struct" } + +func (m *Struct) GetFields() map[string]*Value { + if m != nil { + return m.Fields + } + return nil +} + +// `Value` represents a dynamically typed value which can be either +// null, a number, a string, a boolean, a recursive struct value, or a +// list of values. A producer of value is expected to set one of that +// variants, absence of any variant indicates an error. +// +// The JSON representation for `Value` is JSON value. +type Value struct { + // The kind of value. + // + // Types that are valid to be assigned to Kind: + // *Value_NullValue + // *Value_NumberValue + // *Value_StringValue + // *Value_BoolValue + // *Value_StructValue + // *Value_ListValue + Kind isValue_Kind `protobuf_oneof:"kind"` +} + +func (m *Value) Reset() { *m = Value{} } +func (m *Value) String() string { return proto.CompactTextString(m) } +func (*Value) ProtoMessage() {} +func (*Value) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{1} } +func (*Value) XXX_WellKnownType() string { return "Value" } + +type isValue_Kind interface { + isValue_Kind() +} + +type Value_NullValue struct { + NullValue NullValue `protobuf:"varint,1,opt,name=null_value,json=nullValue,enum=google.protobuf.NullValue,oneof"` +} +type Value_NumberValue struct { + NumberValue float64 `protobuf:"fixed64,2,opt,name=number_value,json=numberValue,oneof"` +} +type Value_StringValue struct { + StringValue string `protobuf:"bytes,3,opt,name=string_value,json=stringValue,oneof"` +} +type Value_BoolValue struct { + BoolValue bool `protobuf:"varint,4,opt,name=bool_value,json=boolValue,oneof"` +} +type Value_StructValue struct { + StructValue *Struct `protobuf:"bytes,5,opt,name=struct_value,json=structValue,oneof"` +} +type Value_ListValue struct { + ListValue *ListValue `protobuf:"bytes,6,opt,name=list_value,json=listValue,oneof"` +} + +func (*Value_NullValue) isValue_Kind() {} +func (*Value_NumberValue) isValue_Kind() {} +func (*Value_StringValue) isValue_Kind() {} +func (*Value_BoolValue) isValue_Kind() {} +func (*Value_StructValue) isValue_Kind() {} +func (*Value_ListValue) isValue_Kind() {} + +func (m *Value) GetKind() isValue_Kind { + if m != nil { + return m.Kind + } + return nil +} + +func (m *Value) GetNullValue() NullValue { + if x, ok := m.GetKind().(*Value_NullValue); ok { + return x.NullValue + } + return NullValue_NULL_VALUE +} + +func (m *Value) GetNumberValue() float64 { + if x, ok := m.GetKind().(*Value_NumberValue); ok { + return x.NumberValue + } + return 0 +} + +func (m *Value) GetStringValue() string { + if x, ok := m.GetKind().(*Value_StringValue); ok { + return x.StringValue + } + return "" +} + +func (m *Value) GetBoolValue() bool { + if x, ok := m.GetKind().(*Value_BoolValue); ok { + return x.BoolValue + } + return false +} + +func (m *Value) GetStructValue() *Struct { + if x, ok := m.GetKind().(*Value_StructValue); ok { + return x.StructValue + } + return nil +} + +func (m *Value) GetListValue() *ListValue { + if x, ok := m.GetKind().(*Value_ListValue); ok { + return x.ListValue + } + return nil +} + +// XXX_OneofFuncs is for the internal use of the proto package. +func (*Value) XXX_OneofFuncs() (func(msg proto.Message, b *proto.Buffer) error, func(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error), func(msg proto.Message) (n int), []interface{}) { + return _Value_OneofMarshaler, _Value_OneofUnmarshaler, _Value_OneofSizer, []interface{}{ + (*Value_NullValue)(nil), + (*Value_NumberValue)(nil), + (*Value_StringValue)(nil), + (*Value_BoolValue)(nil), + (*Value_StructValue)(nil), + (*Value_ListValue)(nil), + } +} + +func _Value_OneofMarshaler(msg proto.Message, b *proto.Buffer) error { + m := msg.(*Value) + // kind + switch x := m.Kind.(type) { + case *Value_NullValue: + b.EncodeVarint(1<<3 | proto.WireVarint) + b.EncodeVarint(uint64(x.NullValue)) + case *Value_NumberValue: + b.EncodeVarint(2<<3 | proto.WireFixed64) + b.EncodeFixed64(math.Float64bits(x.NumberValue)) + case *Value_StringValue: + b.EncodeVarint(3<<3 | proto.WireBytes) + b.EncodeStringBytes(x.StringValue) + case *Value_BoolValue: + t := uint64(0) + if x.BoolValue { + t = 1 + } + b.EncodeVarint(4<<3 | proto.WireVarint) + b.EncodeVarint(t) + case *Value_StructValue: + b.EncodeVarint(5<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.StructValue); err != nil { + return err + } + case *Value_ListValue: + b.EncodeVarint(6<<3 | proto.WireBytes) + if err := b.EncodeMessage(x.ListValue); err != nil { + return err + } + case nil: + default: + return fmt.Errorf("Value.Kind has unexpected type %T", x) + } + return nil +} + +func _Value_OneofUnmarshaler(msg proto.Message, tag, wire int, b *proto.Buffer) (bool, error) { + m := msg.(*Value) + switch tag { + case 1: // kind.null_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Kind = &Value_NullValue{NullValue(x)} + return true, err + case 2: // kind.number_value + if wire != proto.WireFixed64 { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeFixed64() + m.Kind = &Value_NumberValue{math.Float64frombits(x)} + return true, err + case 3: // kind.string_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeStringBytes() + m.Kind = &Value_StringValue{x} + return true, err + case 4: // kind.bool_value + if wire != proto.WireVarint { + return true, proto.ErrInternalBadWireType + } + x, err := b.DecodeVarint() + m.Kind = &Value_BoolValue{x != 0} + return true, err + case 5: // kind.struct_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(Struct) + err := b.DecodeMessage(msg) + m.Kind = &Value_StructValue{msg} + return true, err + case 6: // kind.list_value + if wire != proto.WireBytes { + return true, proto.ErrInternalBadWireType + } + msg := new(ListValue) + err := b.DecodeMessage(msg) + m.Kind = &Value_ListValue{msg} + return true, err + default: + return false, nil + } +} + +func _Value_OneofSizer(msg proto.Message) (n int) { + m := msg.(*Value) + // kind + switch x := m.Kind.(type) { + case *Value_NullValue: + n += proto.SizeVarint(1<<3 | proto.WireVarint) + n += proto.SizeVarint(uint64(x.NullValue)) + case *Value_NumberValue: + n += proto.SizeVarint(2<<3 | proto.WireFixed64) + n += 8 + case *Value_StringValue: + n += proto.SizeVarint(3<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(len(x.StringValue))) + n += len(x.StringValue) + case *Value_BoolValue: + n += proto.SizeVarint(4<<3 | proto.WireVarint) + n += 1 + case *Value_StructValue: + s := proto.Size(x.StructValue) + n += proto.SizeVarint(5<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case *Value_ListValue: + s := proto.Size(x.ListValue) + n += proto.SizeVarint(6<<3 | proto.WireBytes) + n += proto.SizeVarint(uint64(s)) + n += s + case nil: + default: + panic(fmt.Sprintf("proto: unexpected type %T in oneof", x)) + } + return n +} + +// `ListValue` is a wrapper around a repeated field of values. +// +// The JSON representation for `ListValue` is JSON array. +type ListValue struct { + // Repeated field of dynamically typed values. + Values []*Value `protobuf:"bytes,1,rep,name=values" json:"values,omitempty"` +} + +func (m *ListValue) Reset() { *m = ListValue{} } +func (m *ListValue) String() string { return proto.CompactTextString(m) } +func (*ListValue) ProtoMessage() {} +func (*ListValue) Descriptor() ([]byte, []int) { return fileDescriptor6, []int{2} } +func (*ListValue) XXX_WellKnownType() string { return "ListValue" } + +func (m *ListValue) GetValues() []*Value { + if m != nil { + return m.Values + } + return nil +} + +func init() { + proto.RegisterType((*Struct)(nil), "google.protobuf.Struct") + proto.RegisterType((*Value)(nil), "google.protobuf.Value") + proto.RegisterType((*ListValue)(nil), "google.protobuf.ListValue") + proto.RegisterEnum("google.protobuf.NullValue", NullValue_name, NullValue_value) +} + +func init() { proto.RegisterFile("google/protobuf/struct.proto", fileDescriptor6) } + +var fileDescriptor6 = []byte{ + // 378 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0x74, 0x91, 0x4b, 0x4f, 0xe2, 0x50, + 0x14, 0xc7, 0xb9, 0x2d, 0x34, 0xd3, 0xd3, 0x09, 0x43, 0x3a, 0xc9, 0x0c, 0x61, 0x26, 0x6a, 0x60, + 0x43, 0x8c, 0x29, 0x09, 0x6e, 0x8c, 0xb8, 0xb1, 0x09, 0x62, 0x62, 0x43, 0x6a, 0x15, 0x5c, 0x12, + 0x0b, 0x85, 0x34, 0x5c, 0xee, 0x25, 0x7d, 0x68, 0xf8, 0x26, 0x2e, 0x8d, 0x4b, 0x97, 0x7e, 0x42, + 0xef, 0xa3, 0xad, 0x06, 0xc2, 0xee, 0x9e, 0xff, 0xf9, 0x9d, 0xff, 0x79, 0x5c, 0xf8, 0xbf, 0xa0, + 0x74, 0x81, 0x83, 0xce, 0x3a, 0xa2, 0x09, 0xf5, 0xd3, 0x79, 0x27, 0x4e, 0xa2, 0x74, 0x9a, 0x58, + 0x22, 0x36, 0x7f, 0xc9, 0xac, 0x95, 0x67, 0x9b, 0x2f, 0x08, 0xb4, 0x3b, 0x41, 0x98, 0x3d, 0xd0, + 0xe6, 0x61, 0x80, 0x67, 0x71, 0x1d, 0x1d, 0xa9, 0x6d, 0xa3, 0xdb, 0xb2, 0xb6, 0x60, 0x4b, 0x82, + 0xd6, 0x95, 0xa0, 0xfa, 0x24, 0x89, 0x36, 0x5e, 0x56, 0xd2, 0xb8, 0x05, 0xe3, 0x9b, 0x6c, 0xd6, + 0x40, 0x5d, 0x06, 0x1b, 0x66, 0x84, 0xda, 0xba, 0xc7, 0x9f, 0xe6, 0x09, 0x54, 0x9e, 0x1e, 0x71, + 0x1a, 0xd4, 0x15, 0xa6, 0x19, 0xdd, 0x3f, 0x3b, 0xe6, 0x63, 0x9e, 0xf5, 0x24, 0x74, 0xae, 0x9c, + 0xa1, 0xe6, 0x87, 0x02, 0x15, 0x21, 0xb2, 0xc9, 0x80, 0xa4, 0x18, 0x4f, 0xa4, 0x01, 0x37, 0xad, + 0x76, 0x1b, 0x3b, 0x06, 0x43, 0x86, 0x08, 0xfe, 0xba, 0xe4, 0xe9, 0x24, 0x0f, 0xcc, 0x16, 0xfc, + 0x24, 0xe9, 0xca, 0x0f, 0xa2, 0xc9, 0x57, 0x7f, 0xc4, 0x10, 0x43, 0xaa, 0x05, 0xc4, 0xee, 0x14, + 0x92, 0x45, 0x06, 0xa9, 0x7c, 0x70, 0x0e, 0x49, 0x55, 0x42, 0x87, 0x00, 0x3e, 0xa5, 0xf9, 0x18, + 0x65, 0x86, 0xfc, 0xe0, 0xad, 0xb8, 0x26, 0x81, 0x0b, 0xe1, 0xc2, 0x4e, 0x94, 0x21, 0x15, 0xb1, + 0xea, 0xdf, 0x3d, 0x77, 0xcc, 0xec, 0xd9, 0xab, 0xd8, 0x12, 0x87, 0x71, 0x5e, 0xab, 0x89, 0xda, + 0xdd, 0x2d, 0x1d, 0x86, 0x14, 0x5b, 0xe2, 0x3c, 0xb0, 0x35, 0x28, 0x2f, 0x43, 0x32, 0x6b, 0xf6, + 0x40, 0x2f, 0x08, 0xd3, 0x02, 0x4d, 0x98, 0xe5, 0x3f, 0xba, 0xef, 0xe8, 0x19, 0x75, 0xfc, 0x0f, + 0xf4, 0xe2, 0x88, 0x66, 0x15, 0x60, 0x38, 0x72, 0x9c, 0xc9, 0xf8, 0xd2, 0x19, 0xf5, 0x6b, 0x25, + 0x7b, 0x08, 0xbf, 0xa7, 0x74, 0xb5, 0xed, 0x60, 0x1b, 0x72, 0x19, 0x97, 0xc7, 0x2e, 0x7a, 0x45, + 0xe8, 0x4d, 0x51, 0x07, 0xae, 0xfd, 0xae, 0x1c, 0x0c, 0x24, 0xe9, 0xe6, 0xbd, 0x1e, 0x02, 0x8c, + 0x6f, 0x08, 0x7d, 0x26, 0xf7, 0x9b, 0x75, 0x10, 0xfb, 0x9a, 0xb0, 0x38, 0xfd, 0x0c, 0x00, 0x00, + 0xff, 0xff, 0x08, 0x22, 0x4f, 0xb6, 0xb1, 0x02, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/timestamp.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/timestamp.pb.go new file mode 100644 index 0000000000..cc2fc99186 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/timestamp.pb.go @@ -0,0 +1,108 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/timestamp.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// A Timestamp represents a point in time independent of any time zone +// or calendar, represented as seconds and fractions of seconds at +// nanosecond resolution in UTC Epoch time. It is encoded using the +// Proleptic Gregorian Calendar which extends the Gregorian calendar +// backwards to year one. It is encoded assuming all minutes are 60 +// seconds long, i.e. leap seconds are "smeared" so that no leap second +// table is needed for interpretation. Range is from +// 0001-01-01T00:00:00Z to 9999-12-31T23:59:59.999999999Z. +// By restricting to that range, we ensure that we can convert to +// and from RFC 3339 date strings. +// See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). +// +// Example 1: Compute Timestamp from POSIX `time()`. +// +// Timestamp timestamp; +// timestamp.set_seconds(time(NULL)); +// timestamp.set_nanos(0); +// +// Example 2: Compute Timestamp from POSIX `gettimeofday()`. +// +// struct timeval tv; +// gettimeofday(&tv, NULL); +// +// Timestamp timestamp; +// timestamp.set_seconds(tv.tv_sec); +// timestamp.set_nanos(tv.tv_usec * 1000); +// +// Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. +// +// FILETIME ft; +// GetSystemTimeAsFileTime(&ft); +// UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; +// +// // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z +// // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. +// Timestamp timestamp; +// timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); +// timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); +// +// Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. +// +// long millis = System.currentTimeMillis(); +// +// Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) +// .setNanos((int) ((millis % 1000) * 1000000)).build(); +// +// +// Example 5: Compute Timestamp from current time in Python. +// +// now = time.time() +// seconds = int(now) +// nanos = int((now - seconds) * 10**9) +// timestamp = Timestamp(seconds=seconds, nanos=nanos) +// +// +type Timestamp struct { + // Represents seconds of UTC time since Unix epoch + // 1970-01-01T00:00:00Z. Must be from from 0001-01-01T00:00:00Z to + // 9999-12-31T23:59:59Z inclusive. + Seconds int64 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` + // Non-negative fractions of a second at nanosecond resolution. Negative + // second values with fractions must still have non-negative nanos values + // that count forward in time. Must be from 0 to 999,999,999 + // inclusive. + Nanos int32 `protobuf:"varint,2,opt,name=nanos" json:"nanos,omitempty"` +} + +func (m *Timestamp) Reset() { *m = Timestamp{} } +func (m *Timestamp) String() string { return proto.CompactTextString(m) } +func (*Timestamp) ProtoMessage() {} +func (*Timestamp) Descriptor() ([]byte, []int) { return fileDescriptor7, []int{0} } +func (*Timestamp) XXX_WellKnownType() string { return "Timestamp" } + +func init() { + proto.RegisterType((*Timestamp)(nil), "google.protobuf.Timestamp") +} + +func init() { proto.RegisterFile("google/protobuf/timestamp.proto", fileDescriptor7) } + +var fileDescriptor7 = []byte{ + // 165 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x4f, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0xc9, 0xcc, 0x4d, + 0x2d, 0x2e, 0x49, 0xcc, 0x2d, 0xd0, 0x03, 0x0b, 0x09, 0xf1, 0x43, 0x14, 0xe8, 0xc1, 0x14, 0x28, + 0x59, 0x73, 0x71, 0x86, 0xc0, 0xd4, 0x08, 0x49, 0x70, 0xb1, 0x17, 0xa7, 0x26, 0xe7, 0xe7, 0xa5, + 0x14, 0x4b, 0x30, 0x2a, 0x30, 0x6a, 0x30, 0x07, 0xc1, 0xb8, 0x42, 0x22, 0x5c, 0xac, 0x79, 0x89, + 0x79, 0xf9, 0xc5, 0x12, 0x4c, 0x40, 0x71, 0xd6, 0x20, 0x08, 0xc7, 0x29, 0x84, 0x4b, 0x38, 0x39, + 0x3f, 0x57, 0x0f, 0xcd, 0x4c, 0x27, 0x3e, 0xb8, 0x89, 0x01, 0x20, 0xa1, 0x00, 0xc6, 0x05, 0x8c, + 0x8c, 0x3f, 0x18, 0x19, 0x17, 0x31, 0x31, 0xbb, 0x07, 0x38, 0xad, 0x62, 0x92, 0x73, 0x87, 0xa8, + 0x0f, 0x80, 0xaa, 0xd7, 0x0b, 0x4f, 0xcd, 0xc9, 0xf1, 0xce, 0xcb, 0x2f, 0xcf, 0x0b, 0xa9, 0x2c, + 0x48, 0x2d, 0x4e, 0x62, 0x03, 0x1b, 0x64, 0x0c, 0x08, 0x00, 0x00, 0xff, 0xff, 0x10, 0x2f, 0xb9, + 0x47, 0xcd, 0x00, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/type.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/type.pb.go new file mode 100644 index 0000000000..02d253ba6c --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/type.pb.go @@ -0,0 +1,390 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/type.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// The syntax in which a protocol buffer element is defined. +type Syntax int32 + +const ( + // Syntax `proto2`. + Syntax_SYNTAX_PROTO2 Syntax = 0 + // Syntax `proto3`. + Syntax_SYNTAX_PROTO3 Syntax = 1 +) + +var Syntax_name = map[int32]string{ + 0: "SYNTAX_PROTO2", + 1: "SYNTAX_PROTO3", +} +var Syntax_value = map[string]int32{ + "SYNTAX_PROTO2": 0, + "SYNTAX_PROTO3": 1, +} + +func (x Syntax) String() string { + return proto.EnumName(Syntax_name, int32(x)) +} +func (Syntax) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } + +// Basic field types. +type Field_Kind int32 + +const ( + // Field type unknown. + Field_TYPE_UNKNOWN Field_Kind = 0 + // Field type double. + Field_TYPE_DOUBLE Field_Kind = 1 + // Field type float. + Field_TYPE_FLOAT Field_Kind = 2 + // Field type int64. + Field_TYPE_INT64 Field_Kind = 3 + // Field type uint64. + Field_TYPE_UINT64 Field_Kind = 4 + // Field type int32. + Field_TYPE_INT32 Field_Kind = 5 + // Field type fixed64. + Field_TYPE_FIXED64 Field_Kind = 6 + // Field type fixed32. + Field_TYPE_FIXED32 Field_Kind = 7 + // Field type bool. + Field_TYPE_BOOL Field_Kind = 8 + // Field type string. + Field_TYPE_STRING Field_Kind = 9 + // Field type group. Proto2 syntax only, and deprecated. + Field_TYPE_GROUP Field_Kind = 10 + // Field type message. + Field_TYPE_MESSAGE Field_Kind = 11 + // Field type bytes. + Field_TYPE_BYTES Field_Kind = 12 + // Field type uint32. + Field_TYPE_UINT32 Field_Kind = 13 + // Field type enum. + Field_TYPE_ENUM Field_Kind = 14 + // Field type sfixed32. + Field_TYPE_SFIXED32 Field_Kind = 15 + // Field type sfixed64. + Field_TYPE_SFIXED64 Field_Kind = 16 + // Field type sint32. + Field_TYPE_SINT32 Field_Kind = 17 + // Field type sint64. + Field_TYPE_SINT64 Field_Kind = 18 +) + +var Field_Kind_name = map[int32]string{ + 0: "TYPE_UNKNOWN", + 1: "TYPE_DOUBLE", + 2: "TYPE_FLOAT", + 3: "TYPE_INT64", + 4: "TYPE_UINT64", + 5: "TYPE_INT32", + 6: "TYPE_FIXED64", + 7: "TYPE_FIXED32", + 8: "TYPE_BOOL", + 9: "TYPE_STRING", + 10: "TYPE_GROUP", + 11: "TYPE_MESSAGE", + 12: "TYPE_BYTES", + 13: "TYPE_UINT32", + 14: "TYPE_ENUM", + 15: "TYPE_SFIXED32", + 16: "TYPE_SFIXED64", + 17: "TYPE_SINT32", + 18: "TYPE_SINT64", +} +var Field_Kind_value = map[string]int32{ + "TYPE_UNKNOWN": 0, + "TYPE_DOUBLE": 1, + "TYPE_FLOAT": 2, + "TYPE_INT64": 3, + "TYPE_UINT64": 4, + "TYPE_INT32": 5, + "TYPE_FIXED64": 6, + "TYPE_FIXED32": 7, + "TYPE_BOOL": 8, + "TYPE_STRING": 9, + "TYPE_GROUP": 10, + "TYPE_MESSAGE": 11, + "TYPE_BYTES": 12, + "TYPE_UINT32": 13, + "TYPE_ENUM": 14, + "TYPE_SFIXED32": 15, + "TYPE_SFIXED64": 16, + "TYPE_SINT32": 17, + "TYPE_SINT64": 18, +} + +func (x Field_Kind) String() string { + return proto.EnumName(Field_Kind_name, int32(x)) +} +func (Field_Kind) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{1, 0} } + +// Whether a field is optional, required, or repeated. +type Field_Cardinality int32 + +const ( + // For fields with unknown cardinality. + Field_CARDINALITY_UNKNOWN Field_Cardinality = 0 + // For optional fields. + Field_CARDINALITY_OPTIONAL Field_Cardinality = 1 + // For required fields. Proto2 syntax only. + Field_CARDINALITY_REQUIRED Field_Cardinality = 2 + // For repeated fields. + Field_CARDINALITY_REPEATED Field_Cardinality = 3 +) + +var Field_Cardinality_name = map[int32]string{ + 0: "CARDINALITY_UNKNOWN", + 1: "CARDINALITY_OPTIONAL", + 2: "CARDINALITY_REQUIRED", + 3: "CARDINALITY_REPEATED", +} +var Field_Cardinality_value = map[string]int32{ + "CARDINALITY_UNKNOWN": 0, + "CARDINALITY_OPTIONAL": 1, + "CARDINALITY_REQUIRED": 2, + "CARDINALITY_REPEATED": 3, +} + +func (x Field_Cardinality) String() string { + return proto.EnumName(Field_Cardinality_name, int32(x)) +} +func (Field_Cardinality) EnumDescriptor() ([]byte, []int) { return fileDescriptor8, []int{1, 1} } + +// A protocol buffer message type. +type Type struct { + // The fully qualified message name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The list of fields. + Fields []*Field `protobuf:"bytes,2,rep,name=fields" json:"fields,omitempty"` + // The list of types appearing in `oneof` definitions in this type. + Oneofs []string `protobuf:"bytes,3,rep,name=oneofs" json:"oneofs,omitempty"` + // The protocol buffer options. + Options []*Option `protobuf:"bytes,4,rep,name=options" json:"options,omitempty"` + // The source context. + SourceContext *SourceContext `protobuf:"bytes,5,opt,name=source_context,json=sourceContext" json:"source_context,omitempty"` + // The source syntax. + Syntax Syntax `protobuf:"varint,6,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Type) Reset() { *m = Type{} } +func (m *Type) String() string { return proto.CompactTextString(m) } +func (*Type) ProtoMessage() {} +func (*Type) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{0} } + +func (m *Type) GetFields() []*Field { + if m != nil { + return m.Fields + } + return nil +} + +func (m *Type) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Type) GetSourceContext() *SourceContext { + if m != nil { + return m.SourceContext + } + return nil +} + +// A single field of a message type. +type Field struct { + // The field type. + Kind Field_Kind `protobuf:"varint,1,opt,name=kind,enum=google.protobuf.Field_Kind" json:"kind,omitempty"` + // The field cardinality. + Cardinality Field_Cardinality `protobuf:"varint,2,opt,name=cardinality,enum=google.protobuf.Field_Cardinality" json:"cardinality,omitempty"` + // The field number. + Number int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` + // The field name. + Name string `protobuf:"bytes,4,opt,name=name" json:"name,omitempty"` + // The field type URL, without the scheme, for message or enumeration + // types. Example: `"type.googleapis.com/google.protobuf.Timestamp"`. + TypeUrl string `protobuf:"bytes,6,opt,name=type_url,json=typeUrl" json:"type_url,omitempty"` + // The index of the field type in `Type.oneofs`, for message or enumeration + // types. The first type has index 1; zero means the type is not in the list. + OneofIndex int32 `protobuf:"varint,7,opt,name=oneof_index,json=oneofIndex" json:"oneof_index,omitempty"` + // Whether to use alternative packed wire representation. + Packed bool `protobuf:"varint,8,opt,name=packed" json:"packed,omitempty"` + // The protocol buffer options. + Options []*Option `protobuf:"bytes,9,rep,name=options" json:"options,omitempty"` + // The field JSON name. + JsonName string `protobuf:"bytes,10,opt,name=json_name,json=jsonName" json:"json_name,omitempty"` + // The string value of the default value of this field. Proto2 syntax only. + DefaultValue string `protobuf:"bytes,11,opt,name=default_value,json=defaultValue" json:"default_value,omitempty"` +} + +func (m *Field) Reset() { *m = Field{} } +func (m *Field) String() string { return proto.CompactTextString(m) } +func (*Field) ProtoMessage() {} +func (*Field) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{1} } + +func (m *Field) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +// Enum type definition. +type Enum struct { + // Enum type name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Enum value definitions. + Enumvalue []*EnumValue `protobuf:"bytes,2,rep,name=enumvalue" json:"enumvalue,omitempty"` + // Protocol buffer options. + Options []*Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` + // The source context. + SourceContext *SourceContext `protobuf:"bytes,4,opt,name=source_context,json=sourceContext" json:"source_context,omitempty"` + // The source syntax. + Syntax Syntax `protobuf:"varint,5,opt,name=syntax,enum=google.protobuf.Syntax" json:"syntax,omitempty"` +} + +func (m *Enum) Reset() { *m = Enum{} } +func (m *Enum) String() string { return proto.CompactTextString(m) } +func (*Enum) ProtoMessage() {} +func (*Enum) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{2} } + +func (m *Enum) GetEnumvalue() []*EnumValue { + if m != nil { + return m.Enumvalue + } + return nil +} + +func (m *Enum) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +func (m *Enum) GetSourceContext() *SourceContext { + if m != nil { + return m.SourceContext + } + return nil +} + +// Enum value definition. +type EnumValue struct { + // Enum value name. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // Enum value number. + Number int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` + // Protocol buffer options. + Options []*Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` +} + +func (m *EnumValue) Reset() { *m = EnumValue{} } +func (m *EnumValue) String() string { return proto.CompactTextString(m) } +func (*EnumValue) ProtoMessage() {} +func (*EnumValue) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{3} } + +func (m *EnumValue) GetOptions() []*Option { + if m != nil { + return m.Options + } + return nil +} + +// A protocol buffer option, which can be attached to a message, field, +// enumeration, etc. +type Option struct { + // The option's name. For example, `"java_package"`. + Name string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + // The option's value. For example, `"com.google.protobuf"`. + Value *Any `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` +} + +func (m *Option) Reset() { *m = Option{} } +func (m *Option) String() string { return proto.CompactTextString(m) } +func (*Option) ProtoMessage() {} +func (*Option) Descriptor() ([]byte, []int) { return fileDescriptor8, []int{4} } + +func (m *Option) GetValue() *Any { + if m != nil { + return m.Value + } + return nil +} + +func init() { + proto.RegisterType((*Type)(nil), "google.protobuf.Type") + proto.RegisterType((*Field)(nil), "google.protobuf.Field") + proto.RegisterType((*Enum)(nil), "google.protobuf.Enum") + proto.RegisterType((*EnumValue)(nil), "google.protobuf.EnumValue") + proto.RegisterType((*Option)(nil), "google.protobuf.Option") + proto.RegisterEnum("google.protobuf.Syntax", Syntax_name, Syntax_value) + proto.RegisterEnum("google.protobuf.Field_Kind", Field_Kind_name, Field_Kind_value) + proto.RegisterEnum("google.protobuf.Field_Cardinality", Field_Cardinality_name, Field_Cardinality_value) +} + +func init() { proto.RegisterFile("google/protobuf/type.proto", fileDescriptor8) } + +var fileDescriptor8 = []byte{ + // 768 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xa4, 0x55, 0xcd, 0x6e, 0xda, 0x58, + 0x14, 0x1e, 0x83, 0x31, 0xf8, 0x38, 0x10, 0xe7, 0x26, 0x4a, 0x1c, 0x22, 0x65, 0x22, 0x66, 0x16, + 0x51, 0x16, 0x44, 0x43, 0x46, 0xa3, 0xd9, 0x42, 0x70, 0x18, 0x2b, 0xc4, 0xf6, 0x5c, 0x4c, 0x13, + 0x56, 0xc8, 0x01, 0x13, 0x91, 0x38, 0x36, 0xc2, 0xa6, 0x0d, 0x0f, 0xd1, 0x77, 0xa8, 0xba, 0xec, + 0xba, 0x0f, 0xd1, 0xb7, 0x6a, 0xef, 0xbd, 0x06, 0x63, 0x7e, 0x2a, 0xa5, 0xed, 0x8e, 0xf3, 0x7d, + 0xdf, 0xf9, 0xbd, 0xc7, 0x07, 0x28, 0x3e, 0xf8, 0xfe, 0x83, 0xeb, 0x9c, 0x8f, 0xc6, 0x7e, 0xe8, + 0xdf, 0x4f, 0x06, 0xe7, 0xe1, 0x74, 0xe4, 0x94, 0x99, 0x85, 0xb6, 0x23, 0xae, 0x3c, 0xe7, 0x8a, + 0x87, 0xab, 0x62, 0xdb, 0x9b, 0x46, 0x6c, 0xf1, 0xcf, 0x55, 0x2a, 0xf0, 0x27, 0xe3, 0x9e, 0xd3, + 0xed, 0xf9, 0x5e, 0xe8, 0xbc, 0x84, 0x91, 0xaa, 0xf4, 0x3e, 0x05, 0xbc, 0x45, 0x12, 0x20, 0x04, + 0xbc, 0x67, 0x3f, 0x3b, 0x0a, 0x77, 0xc2, 0x9d, 0x8a, 0x98, 0xfd, 0x46, 0x65, 0x10, 0x06, 0x43, + 0xc7, 0xed, 0x07, 0x4a, 0xea, 0x24, 0x7d, 0x2a, 0x55, 0xf6, 0xcb, 0x2b, 0xf9, 0xcb, 0x57, 0x94, + 0xc6, 0x33, 0x15, 0xda, 0x07, 0xc1, 0xf7, 0x1c, 0x7f, 0x10, 0x28, 0x69, 0xa2, 0x17, 0xf1, 0xcc, + 0x42, 0x7f, 0x41, 0xd6, 0x1f, 0x85, 0x43, 0xdf, 0x0b, 0x14, 0x9e, 0x05, 0x3a, 0x58, 0x0b, 0x64, + 0x30, 0x1e, 0xcf, 0x75, 0x48, 0x85, 0xc2, 0x72, 0xbd, 0x4a, 0x86, 0x14, 0x26, 0x55, 0x8e, 0xd7, + 0x3c, 0x5b, 0x4c, 0x76, 0x19, 0xa9, 0x70, 0x3e, 0x48, 0x9a, 0xe8, 0x1c, 0x84, 0x60, 0xea, 0x85, + 0xf6, 0x8b, 0x22, 0x10, 0xf7, 0xc2, 0x86, 0xc4, 0x2d, 0x46, 0xe3, 0x99, 0xac, 0xf4, 0x59, 0x80, + 0x0c, 0x6b, 0x8a, 0xb8, 0xf2, 0x4f, 0x43, 0xaf, 0xcf, 0x06, 0x52, 0xa8, 0x1c, 0x6d, 0x6e, 0xbd, + 0x7c, 0x4d, 0x24, 0x98, 0x09, 0x51, 0x1d, 0xa4, 0x9e, 0x3d, 0xee, 0x0f, 0x3d, 0xdb, 0x1d, 0x86, + 0x53, 0x32, 0x32, 0xea, 0x57, 0xfa, 0x8e, 0xdf, 0xe5, 0x42, 0x89, 0x93, 0x6e, 0x74, 0x86, 0xde, + 0xe4, 0xf9, 0xde, 0x19, 0x93, 0x19, 0x72, 0xa7, 0x19, 0x3c, 0xb3, 0xe2, 0xf7, 0xe1, 0x13, 0xef, + 0x73, 0x08, 0x39, 0xba, 0x1c, 0xdd, 0xc9, 0xd8, 0x65, 0xfd, 0x89, 0x38, 0x4b, 0xed, 0xf6, 0xd8, + 0x45, 0xbf, 0x83, 0xc4, 0x86, 0xdf, 0x25, 0x95, 0x39, 0x2f, 0x4a, 0x96, 0xc5, 0x02, 0x06, 0x69, + 0x14, 0xa1, 0x79, 0x46, 0x76, 0xef, 0xc9, 0xe9, 0x2b, 0x39, 0xc2, 0xe5, 0xf0, 0xcc, 0x4a, 0xbe, + 0x95, 0xf8, 0xca, 0xb7, 0x3a, 0x02, 0xf1, 0x31, 0xf0, 0xbd, 0x2e, 0xab, 0x0f, 0x58, 0x1d, 0x39, + 0x0a, 0xe8, 0xb4, 0xc6, 0x3f, 0x20, 0xdf, 0x77, 0x06, 0xf6, 0xc4, 0x0d, 0xbb, 0x6f, 0x6d, 0x77, + 0xe2, 0x28, 0x12, 0x13, 0x6c, 0xcd, 0xc0, 0x37, 0x14, 0x2b, 0x7d, 0x21, 0x5b, 0x48, 0x27, 0x89, + 0x64, 0xd8, 0xb2, 0x3a, 0xa6, 0xda, 0x6d, 0xeb, 0xd7, 0xba, 0x71, 0xab, 0xcb, 0xbf, 0xa1, 0x6d, + 0x90, 0x18, 0x52, 0x37, 0xda, 0xb5, 0xa6, 0x2a, 0x73, 0xa8, 0x00, 0xc0, 0x80, 0xab, 0xa6, 0x51, + 0xb5, 0xe4, 0x54, 0x6c, 0x6b, 0xba, 0xf5, 0xcf, 0xdf, 0x72, 0x3a, 0x76, 0x68, 0x47, 0x00, 0x9f, + 0x14, 0x5c, 0x54, 0xe4, 0x4c, 0x9c, 0xe3, 0x4a, 0xbb, 0x53, 0xeb, 0x44, 0x21, 0x2c, 0x23, 0x44, + 0x93, 0x45, 0x79, 0x10, 0x19, 0x52, 0x33, 0x8c, 0xa6, 0x9c, 0x8b, 0x63, 0xb6, 0x2c, 0xac, 0xe9, + 0x0d, 0x59, 0x8c, 0x63, 0x36, 0xb0, 0xd1, 0x36, 0x65, 0x88, 0x23, 0xdc, 0xa8, 0xad, 0x56, 0xb5, + 0xa1, 0xca, 0x52, 0xac, 0xa8, 0x75, 0x2c, 0xb5, 0x25, 0x6f, 0x2d, 0x95, 0x45, 0x52, 0xe4, 0xe3, + 0x14, 0xaa, 0xde, 0xbe, 0x91, 0x0b, 0x68, 0x07, 0xf2, 0x51, 0x8a, 0x79, 0x11, 0xdb, 0x2b, 0x10, + 0xa9, 0x54, 0x5e, 0x14, 0x12, 0x45, 0xd9, 0x59, 0x02, 0x88, 0x02, 0x95, 0x42, 0x90, 0x12, 0xbb, + 0x85, 0x0e, 0x60, 0xf7, 0xb2, 0x8a, 0xeb, 0x9a, 0x5e, 0x6d, 0x6a, 0x56, 0x27, 0x31, 0x57, 0x05, + 0xf6, 0x92, 0x84, 0x61, 0x5a, 0x9a, 0x41, 0x7e, 0x93, 0x01, 0xaf, 0x30, 0x58, 0xfd, 0xbf, 0xad, + 0x61, 0xb5, 0x4e, 0x46, 0xbd, 0xc6, 0x98, 0x6a, 0xd5, 0x22, 0x4c, 0xba, 0xf4, 0x95, 0x03, 0x5e, + 0x25, 0x9b, 0xba, 0xf1, 0x8c, 0xfc, 0x0b, 0xa2, 0x43, 0xb8, 0xe8, 0xf9, 0xa3, 0x4b, 0x52, 0x5c, + 0x5b, 0x2a, 0xea, 0xcd, 0x96, 0x01, 0x2f, 0xc4, 0xc9, 0x65, 0x4c, 0xff, 0xf4, 0xe1, 0xe0, 0x7f, + 0xed, 0x70, 0x64, 0x5e, 0x77, 0x38, 0x1e, 0x41, 0x8c, 0x5b, 0xd8, 0x38, 0x85, 0xc5, 0x87, 0x9d, + 0x5a, 0xfa, 0xb0, 0x7f, 0xbc, 0xc7, 0xd2, 0x7f, 0x20, 0x44, 0xd0, 0xc6, 0x44, 0x67, 0x90, 0x99, + 0x8f, 0x9a, 0x36, 0xbe, 0xb7, 0x16, 0xae, 0xea, 0x4d, 0x71, 0x24, 0x39, 0x23, 0x17, 0x3e, 0xea, + 0x83, 0x2e, 0x5b, 0xab, 0xa3, 0x5b, 0xd5, 0xbb, 0xae, 0x89, 0x0d, 0xcb, 0xa8, 0x90, 0x15, 0x59, + 0x81, 0x2e, 0x64, 0xae, 0xd6, 0x84, 0xdd, 0x9e, 0xff, 0xbc, 0x1a, 0xb1, 0x26, 0xd2, 0xbf, 0x10, + 0x93, 0x5a, 0x26, 0xf7, 0x81, 0xe3, 0x3e, 0xa6, 0xd2, 0x0d, 0xb3, 0xf6, 0x29, 0x75, 0xdc, 0x88, + 0x74, 0xe6, 0x3c, 0xf3, 0xad, 0xe3, 0xba, 0xd7, 0x9e, 0xff, 0xce, 0xa3, 0xfa, 0xe0, 0x5e, 0x60, + 0x01, 0x2e, 0xbe, 0x05, 0x00, 0x00, 0xff, 0xff, 0x95, 0xbb, 0xeb, 0x52, 0xf3, 0x06, 0x00, 0x00, +} diff --git a/vendor/go.pedge.io/pb/go/google/protobuf/wrappers.pb.go b/vendor/go.pedge.io/pb/go/google/protobuf/wrappers.pb.go new file mode 100644 index 0000000000..9e187dca51 --- /dev/null +++ b/vendor/go.pedge.io/pb/go/google/protobuf/wrappers.pb.go @@ -0,0 +1,173 @@ +// Code generated by protoc-gen-go. +// source: google/protobuf/wrappers.proto +// DO NOT EDIT! + +package google_protobuf + +import proto "github.com/golang/protobuf/proto" +import fmt "fmt" +import math "math" + +// Reference imports to suppress errors if they are not otherwise used. +var _ = proto.Marshal +var _ = fmt.Errorf +var _ = math.Inf + +// Wrapper message for `double`. +// +// The JSON representation for `DoubleValue` is JSON number. +type DoubleValue struct { + // The double value. + Value float64 `protobuf:"fixed64,1,opt,name=value" json:"value,omitempty"` +} + +func (m *DoubleValue) Reset() { *m = DoubleValue{} } +func (m *DoubleValue) String() string { return proto.CompactTextString(m) } +func (*DoubleValue) ProtoMessage() {} +func (*DoubleValue) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{0} } +func (*DoubleValue) XXX_WellKnownType() string { return "DoubleValue" } + +// Wrapper message for `float`. +// +// The JSON representation for `FloatValue` is JSON number. +type FloatValue struct { + // The float value. + Value float32 `protobuf:"fixed32,1,opt,name=value" json:"value,omitempty"` +} + +func (m *FloatValue) Reset() { *m = FloatValue{} } +func (m *FloatValue) String() string { return proto.CompactTextString(m) } +func (*FloatValue) ProtoMessage() {} +func (*FloatValue) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{1} } +func (*FloatValue) XXX_WellKnownType() string { return "FloatValue" } + +// Wrapper message for `int64`. +// +// The JSON representation for `Int64Value` is JSON string. +type Int64Value struct { + // The int64 value. + Value int64 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` +} + +func (m *Int64Value) Reset() { *m = Int64Value{} } +func (m *Int64Value) String() string { return proto.CompactTextString(m) } +func (*Int64Value) ProtoMessage() {} +func (*Int64Value) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{2} } +func (*Int64Value) XXX_WellKnownType() string { return "Int64Value" } + +// Wrapper message for `uint64`. +// +// The JSON representation for `UInt64Value` is JSON string. +type UInt64Value struct { + // The uint64 value. + Value uint64 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` +} + +func (m *UInt64Value) Reset() { *m = UInt64Value{} } +func (m *UInt64Value) String() string { return proto.CompactTextString(m) } +func (*UInt64Value) ProtoMessage() {} +func (*UInt64Value) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{3} } +func (*UInt64Value) XXX_WellKnownType() string { return "UInt64Value" } + +// Wrapper message for `int32`. +// +// The JSON representation for `Int32Value` is JSON number. +type Int32Value struct { + // The int32 value. + Value int32 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` +} + +func (m *Int32Value) Reset() { *m = Int32Value{} } +func (m *Int32Value) String() string { return proto.CompactTextString(m) } +func (*Int32Value) ProtoMessage() {} +func (*Int32Value) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{4} } +func (*Int32Value) XXX_WellKnownType() string { return "Int32Value" } + +// Wrapper message for `uint32`. +// +// The JSON representation for `UInt32Value` is JSON number. +type UInt32Value struct { + // The uint32 value. + Value uint32 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` +} + +func (m *UInt32Value) Reset() { *m = UInt32Value{} } +func (m *UInt32Value) String() string { return proto.CompactTextString(m) } +func (*UInt32Value) ProtoMessage() {} +func (*UInt32Value) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{5} } +func (*UInt32Value) XXX_WellKnownType() string { return "UInt32Value" } + +// Wrapper message for `bool`. +// +// The JSON representation for `BoolValue` is JSON `true` and `false`. +type BoolValue struct { + // The bool value. + Value bool `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` +} + +func (m *BoolValue) Reset() { *m = BoolValue{} } +func (m *BoolValue) String() string { return proto.CompactTextString(m) } +func (*BoolValue) ProtoMessage() {} +func (*BoolValue) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{6} } +func (*BoolValue) XXX_WellKnownType() string { return "BoolValue" } + +// Wrapper message for `string`. +// +// The JSON representation for `StringValue` is JSON string. +type StringValue struct { + // The string value. + Value string `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` +} + +func (m *StringValue) Reset() { *m = StringValue{} } +func (m *StringValue) String() string { return proto.CompactTextString(m) } +func (*StringValue) ProtoMessage() {} +func (*StringValue) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{7} } +func (*StringValue) XXX_WellKnownType() string { return "StringValue" } + +// Wrapper message for `bytes`. +// +// The JSON representation for `BytesValue` is JSON string. +type BytesValue struct { + // The bytes value. + Value []byte `protobuf:"bytes,1,opt,name=value,proto3" json:"value,omitempty"` +} + +func (m *BytesValue) Reset() { *m = BytesValue{} } +func (m *BytesValue) String() string { return proto.CompactTextString(m) } +func (*BytesValue) ProtoMessage() {} +func (*BytesValue) Descriptor() ([]byte, []int) { return fileDescriptor9, []int{8} } +func (*BytesValue) XXX_WellKnownType() string { return "BytesValue" } + +func init() { + proto.RegisterType((*DoubleValue)(nil), "google.protobuf.DoubleValue") + proto.RegisterType((*FloatValue)(nil), "google.protobuf.FloatValue") + proto.RegisterType((*Int64Value)(nil), "google.protobuf.Int64Value") + proto.RegisterType((*UInt64Value)(nil), "google.protobuf.UInt64Value") + proto.RegisterType((*Int32Value)(nil), "google.protobuf.Int32Value") + proto.RegisterType((*UInt32Value)(nil), "google.protobuf.UInt32Value") + proto.RegisterType((*BoolValue)(nil), "google.protobuf.BoolValue") + proto.RegisterType((*StringValue)(nil), "google.protobuf.StringValue") + proto.RegisterType((*BytesValue)(nil), "google.protobuf.BytesValue") +} + +func init() { proto.RegisterFile("google/protobuf/wrappers.proto", fileDescriptor9) } + +var fileDescriptor9 = []byte{ + // 233 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x09, 0x6e, 0x88, 0x02, 0xff, 0xe2, 0x92, 0x4b, 0xcf, 0xcf, 0x4f, + 0xcf, 0x49, 0xd5, 0x2f, 0x28, 0xca, 0x2f, 0xc9, 0x4f, 0x2a, 0x4d, 0xd3, 0x2f, 0x2f, 0x4a, 0x2c, + 0x28, 0x48, 0x2d, 0x2a, 0xd6, 0x03, 0x8b, 0x08, 0xf1, 0x43, 0xe4, 0xf5, 0x60, 0xf2, 0x4a, 0xca, + 0x5c, 0xdc, 0x2e, 0xf9, 0xa5, 0x49, 0x39, 0xa9, 0x61, 0x89, 0x39, 0xa5, 0xa9, 0x42, 0x22, 0x5c, + 0xac, 0x65, 0x20, 0x86, 0x04, 0xa3, 0x02, 0xa3, 0x06, 0x63, 0x10, 0x84, 0xa3, 0xa4, 0xc4, 0xc5, + 0xe5, 0x96, 0x93, 0x9f, 0x58, 0x82, 0x45, 0x0d, 0x13, 0x92, 0x1a, 0xcf, 0xbc, 0x12, 0x33, 0x13, + 0x2c, 0x6a, 0x98, 0x61, 0x6a, 0x80, 0x96, 0x85, 0xe2, 0x52, 0xc4, 0x82, 0x6a, 0x90, 0xb1, 0x11, + 0x16, 0x35, 0xac, 0x68, 0x06, 0x61, 0x55, 0xc4, 0x0b, 0x53, 0xa4, 0xc8, 0xc5, 0xe9, 0x94, 0x9f, + 0x9f, 0x83, 0x45, 0x09, 0x07, 0x92, 0x39, 0xc1, 0x25, 0x45, 0x99, 0x79, 0xe9, 0x58, 0x14, 0x71, + 0x22, 0x39, 0xc8, 0xa9, 0xb2, 0x24, 0xb5, 0x18, 0x8b, 0x1a, 0x1e, 0xa8, 0x1a, 0xa7, 0x60, 0x2e, + 0xe1, 0xe4, 0xfc, 0x5c, 0x3d, 0xb4, 0xd0, 0x75, 0xe2, 0x0d, 0x87, 0x06, 0x7f, 0x00, 0x48, 0x24, + 0x80, 0x71, 0x01, 0x23, 0xe3, 0x0f, 0x46, 0xc6, 0x45, 0x4c, 0xcc, 0xee, 0x01, 0x4e, 0xab, 0x98, + 0xe4, 0xdc, 0x21, 0xca, 0x03, 0xa0, 0xca, 0xf5, 0xc2, 0x53, 0x73, 0x72, 0xbc, 0xf3, 0xf2, 0xcb, + 0xf3, 0x42, 0x2a, 0x0b, 0x52, 0x8b, 0x93, 0xd8, 0xc0, 0xe6, 0x18, 0x03, 0x02, 0x00, 0x00, 0xff, + 0xff, 0xd8, 0xa5, 0x6f, 0xc9, 0xd5, 0x01, 0x00, 0x00, +}